ITSMConfigurationManagement
6.0.25
OTRS AG
https://otrs.com/
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Build for OTRS::ITSM 6 patch level 25.
Build for OTRS::ITSM 6 patch level 24.
Build for OTRS::ITSM 6 patch level 23.
Build for OTRS::ITSM 6 patch level 22.
Build for OTRS::ITSM 6 patch level 21.
Build for OTRS::ITSM 6 patch level 20.
Build for OTRS::ITSM 6 patch level 19.
Build for OTRS::ITSM 6 patch level 18.
Build for OTRS::ITSM 6 patch level 17.
Build for OTRS::ITSM 6 patch level 16.
Build for OTRS::ITSM 6 patch level 15.
Build for OTRS::ITSM 6 patch level 14.
Build for OTRS::ITSM 6 patch level 13.
Build for OTRS::ITSM 6 patch level 12.
Build for OTRS::ITSM 6 patch level 11.
Build for OTRS::ITSM 6 patch level 10.
Build for OTRS::ITSM 6 patch level 9.
Build for OTRS::ITSM 6 patch level 8.
Build for OTRS::ITSM 6 patch level 7.
Build for OTRS::ITSM 6 patch level 6.
Build for OTRS::ITSM 6 patch level 5.
Build for OTRS::ITSM 6 patch level 4.
Build for OTRS::ITSM 6 patch level 3.
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 Configuration Management package.
Das OTRS::ITSM Configuration Management Paket.
El paquete OTRS::ITSM Configuration Management.
Az OTRS::ITSM konfigurációmenedzsment csomag.
6.0.x
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to install the OTRS package ITSMConfigurationManagement.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>ITSMCore 6.0.25</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMConfigurationManagement zu installieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>ITSMCore 6.0.25</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está punto de instalar el paquete ITSMConfigurationManagement de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES OTRS REQUERIDOS</strong>
<ul>
<li>ITSMCore 6.0.25</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ÜDVÖZÖLJÜK</strong>
<br/>
<br/>
Ön az ITSMConfigurationManagement OTRS csomag telepítésére készül.<br/>
<br/>
<br/>
<strong>SZÜKSÉGES OTRS CSOMAGOK</strong>
<ul>
<li>ITSMCore 6.0.25</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>NOTICE</strong>
<br/>
<br/>
In order to grant users access to the config item menu, you need to add them as member to the group 'itsm-configitem'.
<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 ConfigItem-Menü zu gewähren, müssen diese Mitglied der neuen Gruppe 'itsm-configitem' 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>ATENCIÓN</strong>
<br/>
<br/>
Para permitirles a los usuarios el acceso al menú de los elementos de configuración, es necesario que se den de
alta como miembros del grupo 'itsm-configitem'.
<br/>
<br/>
Los elementos del menú que se agregaron por este paquete, serpan visibles después reiniciar la sesión al sistema.
<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 konfigurációelem menühöz, hozzá kell adnia őket az „itsm-configitem” 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-configitem' that was created during package installation will be deactivated.
You can activate this group again in the admin area.
<br/>
<br/>
All links to config item objects will be irrevocably deleted!
<br/>
<br/>
The statistics that are associated with this package, will no longer be available if the package is uninstalled.
<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-configitem' wird deaktiviert.
Sie kann jederzeit im Admin-Bereich wieder aktiviert werden.
<br/>
<br/>
Alle Verknüpfungen zu ConfigItem-Objekten werden unwiderruflich gelöscht!
<br/>
<br/>
Nach der Deinstallation sind die zu diesem Paket zugehörigen Statistiken nicht mehr verfügbar.
<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 que fueron creadas durante su instalación se eliminarán.
¡Todos los datos de dichas tablas se perderán irrevocablemente!
<br/>
<br/>
El grupo 'itsm-configitem' que se creó durante la instalación de este paquete se desactivará.
Es posible reactivar este grupo en el área de administración.
<br/>
<br/>
¡Todos los vínculos a objetos de elementos de configuración serán eliminados permanentemente!
<br/>
<br/>
Si usted desinstala este paquete, las estadísticas que están asociadas a él ya no estarán disponibles.
<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-configitem” csoport ki lesz kapcsolva.
Ezt a csoportot az adminisztrációs területen tudja ismét bekapcsolni.
<br/>
<br/>
A konfigurációelem objektumokra mutató összes hivatkozás visszavonhatatlanul törölve lesz!
<br/>
<br/>
Az ehhez a csomaghoz hozzárendelt statisztikák többé nem lesznek elérhetők, ha a csomag eltávolításra kerül.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to upgrade the OTRS package ITSMConfigurationManagement.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>ITSMCore 6.0.25</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMConfigurationManagement zu aktualisieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>ITSMCore 6.0.25</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está a punto de actualizar el paquete ITSMConfigurationManagement de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES OTRS REQUERIDOS</strong>
<ul>
<li>ITSMCore 6.0.25</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ÜDVÖZÖLJÜK</strong>
<br/>
<br/>
Ön az ITSMConfigurationManagement OTRS csomag frissítésére készül.<br/>
<br/>
<br/>
<strong>SZÜKSÉGES OTRS CSOMAGOK</strong>
<ul>
<li>ITSMCore 6.0.25</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
ITSMCore
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
# uninstall Feature AddOn OTRSCIColumns that has been integrated in OTRS::ITSM 3.3 Beta 1
$Kernel::OM->Get('Kernel::System::Package')->_PackageUninstallMerged(
Name => 'OTRSCIColumns',
);
# uninstall Feature AddOn OTRSCIAttributeSyntaxCheck that has been integrated in OTRS::ITSM 3.3 Beta 1
$Kernel::OM->Get('Kernel::System::Package')->_PackageUninstallMerged(
Name => 'OTRSCIAttributeSyntaxCheck',
);
# uninstall Feature AddOn OTRSGenericInterfaceITSMCIOperations that has been integrated in OTRS::ITSM 4 Beta 1
$Kernel::OM->Get('Kernel::System::Package')->_PackageUninstallMerged(
Name => 'OTRSGenericInterfaceITSMCIOperations',
);
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_2();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->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();
{
# cleanup stats list (only stats related to the given stat objects)
$Kernel::OM->Get('Kernel::System::Stats')->StatsCleanUp(
ObjectNames => [ 'ITSMConfigItem' ],
UserID => 1,
);
}
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeReinstall();
446be02408dfe812817d0d7aa996a53338c77dd9
2019-12-17 15:22:13
opms.otrs.com
H4sIAAAAAAACA+1d3W/jNhJ/37/CcF9awMuQlPihdXeL6wJ3V6CLHrrbl74Ysq04usqSIcvJpg/3tx8pOx/6smRJ1NrJZLFB4ow5HJm/4ZCc+fHHn76ug9GtF2/9KHw/JgiPR164iJZ+uHo//uPLP9/K8U8f3vy49N136v8qdtcj9Y5wq397P75Jks27q6u7uzsU3G/dJIpR4O/Q1rv6nxsE7pUSuhp/eDMaPW9g6Saufu3wqpsksT/fJd4odNfe+/HcXfy1iqNduBzvpQ5yiyiI4tGtG7wff3edfo2vDs1cZdo50vbGXXnz2HP/qm4aqy/HadP0xovzza430dZXIsn9piBS0Y7+/kzmILVVQuHqw3f/IN/tu3R44amtso5WKknWbrzyw6Ie9WyC/YOgSFJK1cNgjnSwsAV5eCanq5sPqy4YVl08rDp/O9tEcRK7flJUOY+iwHPDvdZrN9h67RVtF26gxtgxuzBi1JKEYYtJbZ6waHt9136SRD2ZtH/5EYCngnkV+8vjWM5IVLRy5y+Tm9nXmgfY/oHt27831v6tv/XngVdmgR8mewWke/P3/TSf/4RSp/709o4jYt9a5ayxlB7z2OmzxmrnL71tzVDLylS0dHMQu6p76nm5pg9m/1JuDk9VBO69Fx+a//lp9h4dPmA13cQ7bzxyF4l/+/Dbs2cSzf/rLZKDsZ8TN1y68XL0dvTF+5qMn8Um45G/fD/+DWefVt4+1Zryj4XHtYkexxSbEJo3v+hAqtqez/NNx6r3brgKvMfmMVIxBJtSG0kplTbECWmnMdHPoGag52SqvHkaMGTkcrHFb19+/zzio3+qj9e7i+K/KiKNIziscuxRmJQp1q+Prt21H9yr/rnhdjzaJvd6wKgodP/Wf3vBrZf4C/f5uD69Bzeev7op7cPzOZrjzBfppjM7COsHYhsdWa9U4ZvEtf7XTZGKBFbh2iv/HL1wtz5MNw21lPqc05Bxm3Ypj42nrlg1gNu/uPc9DZzRz97fvhf/6ofeM5eEDy6JdHVJGFHKyIRbSGJmGXROGBFiCS4nb9VPmAgyZSL9Qet2COftdM+9v2epOW2MLEracsLkMQHGEZYOnzCKBMf8qKiY4HZGLaI49OKZHgrb6nGGC8pL/3aKYhV1e7M8tIshh6v/ddCQho/F8fIUOlJc6RBPVpY69uqn2HJCXrrbm8ALV8fsoP06gj/91Z/uKucIHmIT2tURCKrQKJwJZcgSbR94I0+Q0zTtR3OsFiS1jqBS1TcXPdnWKPazk2JuXJNm3uHY+07pk7tLIhV8J9lIr3YZ3QcuKqJ1qysiuH34rGzTiHjUZCEhGJk+08wovoAA/pUF7FjFEdkv23TEXjkYjQXve8MgeDfhm+zOvompNeMwvulB04NvetIMvgl809HBCL7p7HzTH59+VW7pY+ButyXbCayrX5J4Qk1ucQoHOWxCifo+JZghQiY2QZi1U+kF3nq2X2ybsSlVULPaVUsBzJznXx10FTxEThmRKKPKabntkjsrzjjcRRRe+yuFgXWp6z1FzTbxYi/SI7dKWWcVCrHrkoVUb+27c/Ved5F0XhVVPaLdZhN72+3s8Q9b46qijRe7ifIcxlQ9nNA1NCo92OmkqKFJ3RUdxpuxJ3cXu5sBPqBUjXut8Dlb3LgF9/m0odp6CzR9TLN0C698o603HYm7WvWxb9Fpy5P0uOVZu4Obj59O0XDtB0G9hmye1OmrA7M2hFG8doNZLqIvRvOLaBf7+oTZuysG9R/3f2y5X3aYFr5lHzZRcL+O4s2Nv6jvxjoKo+3GXXg9d2KhQ1H941l8GmfRmwe/VNuFxovNltioDyePnFx3GYkNFFvZONbpAYYNtMo+BnmtHtrrKDal7vkwNWZSZfyX3y7arYNH4fpto0Kuay7s95e9bRvlVi8FVXO1VgqT3tSpp73zBtkPK66czOlKo2c/8JP7fnZrmi/WGmaDtnh8GqSz7SIqHx6t1VVsRA0Cm6el/0x9JHMvHgxFt26s1yHfqzD6B8ASYOkFYCm1acCJCGYhQM6LQI4yKZkdzjZmEMkBhgBDp88+u3i29DbBbJu4iQfTEEAIINQCQn648AFCACGAUDsIxZ6GTuKvvcHAs1QaAT2AnheDnvk9TDwAHYDOSdC5ccMVTDyAHkBPe/TAxAPQeUHQOSmZ/SkB86om1229UdDzTCUfPrS/zTLEdC1g4l0LBQjBZslQUgUYYTElNkUpF4rtnH+10i9fPn/6mJ6i7/YD6JMbuitPuwlgRTFcx5Qfk8CLcrG8KKI7LwpJKUMYojanRnlRMHGEza0Jt5HgnEyZgwiWXHkvTRbgGOVFKTeyhMvEmdQIiInENS0og4APBfhQDNdWy86hiYIks+VEEIVHyyQn0oMm7iBpWdaUckQtR2mmiLK2moeMVv7lKVy6wUc3cYNoBQGK6QClamRCpHKxkYrT2V3ZDrI5mUiBOG9bB9GMX1IiStiBwY0z6Uy1bsbpxMFI2JbBSKXSyBKKJS11NBKhE0KOSnAMzG0QqQzE3EY608raYiJsg7i3uSZdsCwVlEylnoKUutacC82I2nImlRGp1QuoHh8le5Q4J9I7CVtDorW+nECfJGyP3iMM1WjQO5kFv/Lwl9GNGuk6ClNDOolSGpHR01816USR8znXaq+AIhcCKIL4hQFKxZ11gMqIAKDMAIoPC6jO5KI2nlBsEFBWSgtE9PcDoCyOmFlAZU0qY8WqF9C9rANURgQAZQRQRX4ns4CyLhBQDhIXACinfoZyYIYyD6jeZ6j/RMF9FQl+ZzpNmxiGk9T3cVANKG5JOk0565RKZHEi21NmNAAVqcGM5bS23AuXMzeOo7sjS3TaselZ3Uodt50dn1TU7mmwQc4tSGfyRb2g0IPK5NIl1aGGMSWUTS2hhrNIB7LAlJ3/ecVuq5766Ht/+cMrO6sgg59VlAxGoIO9QKpqwntwS3rzwbRbUjqsvVuybcSI1ngZTmm1P0SdLfanqOCeBnJP+UEJ7umc3dOx+L9ztpc+Uze64cv28b/yUPv4Xx42fY3H/7JmV9fmrS2H+L833nXSPWlJX6QmjOZTp4cWnKfU6zbV1OtCLWeNUq93ser8uNcpMsq2Plt6137o6y0WIF4H4nUgXgfidSBeB+J1IF4H4nUgXgfidSBeB+J1IF4Huk6gDQCyaCDcAOQAck7cPzMBoyAKV/MgmgOWAEuXj6XDuQZMQgAcAA7w3AJ6AD3AcwvQAegA3WCH3JjODBkSTxgxmBoj0mIphnVmjCOQtCYCty7nbZYY08GkJnkxRCAhezheaJYXI1H2RMFslsyxRQqkyECKDKTIQIoMpMhAigykyECKDKTIQIoMpMhAigykyMBWF2x1vZiDfkAQIAgQdDKC9N8HA86tG+vF+/eU4R8APgCfy4fPU3oZJGoCfAA+J8NnE8BV6gAfgE+7XYNw4QN8AD4AH8jQBPQAeiBDE6AD0LmYu9Rh4gH0AHraogcmHoAOlAa8uNIAivugzWTcKDX1gThTabHYlFgCMcz0Xd/UOHNme8MacWdiZDP2LL+KGqwREEhmk7mE0RqBRbQLEy+GGgGoEYAaAagRgBoBqBGAGgGoEYAaAagRgBoBqBE4/xoB4AOEbS/YMW5XJpAu/We67cGTnSHXGVD0klAEAAIAwenLxZ6+NL3PnpIeKJooQ5ZJkiahT2GUEvpwoz1j6hWTN9oXjCqKCNlERPe05lb7rAjcat/tVntcfqu9LFha8l5yeC9xsm8mhWdR6FKvmKRdMeloErAJc5BJ7jStxNJKMJsSItJrMTGyjOKyzLCyE1TSSEZ397iMyMkAOvtBZwFh7CR8ykpwDwFP6+zvrN1PmBLZDxOmsFuzGjYDZu1ttYLWC6ges5rJMisCcOwGR1I+WRI6LKDszoAShgGV5gHZLL1A9zDVGUeU6AFRNj8+v1kNJNRMKupmyazMOcLyNcGZ4m86P7LLmB8HhrM8EzgLcnxFmga95NyXpK8Jzvlwd+jlKO+MZxW3YYN4tlIWb6K/H+JdzhAzC+esSUUBzuoFdC9r4t2sCMS7PSEqt/ykAwe84gIRJZG4AETJ47GqRpQ891D1RSCKD4soeUmIeog5peHd0l4gpXtZGy9K2CQdIO7rZx1XU5jldC/MIgiTCWFIYM6Mlmdh5HCtiDOuUEUdRNUCh2pYccMlWt1NbHSZi0SEdao2q80rpcjsnS03/lah6R7qsaAeC+qxoB4L6rGgHgvqsaAeC+qxoB4L6rGgHgvubIEbJyAL/sXe2TKDS1sAQgChdhDSbUIhMAAHgHP63JN4PQ7m5hceMahhBAS9HNZvoC4G9AB6gDMfoAPQgeL5QtaZ1Z3EGDOEuekC+lQLmVCMWJooo7NX9kqNpp+VGlcmJhG2WHM5jHgm66YyP6cg+Voy05rnJvRRW++cUrtLzdTWH09qs0gPbOPIIRPLRoRLs0ltAkmeKiJSYdVWoLUnDKvxLE3Tjne2sBH5OEUswwhuknxcZ+j1cTh4WrJbNQMZZLxBxhtkvEHGG2S8QcYbZLxBxhtkvEHGG2S8Qcbba814g31r2Ld+EUc+qrP+EpJ1ADmAnBORo/8OmToAH4BPy1y3/ZYaQAggBBCCZDdAD6AHkt0AOgCdC4DOjRuuYOIB9AB62qMHJh6ADmRZv+Qs687XIWlmQMLphFJEDVMSak0k1UTSVGubIOZMLIFY6/TNhsnWVTaWiOpO2SdIqu7bmZzQMkmMbKcoCRnXvWRcF7KmrVNyri1SmbA9ADevZfXEKEoFwmbhy23kOI5IaXqpkI+VEpqul5uFb4WJZWUQHDF2gqQ2Rgh5nOYXYftgd0YUqHwN4XfYK1ksu6f6B5t18e/NapU4soUa3xw5lk1SrmyHa8XGZ9AKEyuARdkpotocaZM6UVkmCiDsB4T5aXBoELK+QCgRN12ExNREsB/gz0EokRgIhHkTyyQVTrg8SVSZUwdCJYoP0H6VIDQcyOYx2P/NK1+8r0kZ+ngfq0gpnQnBGFnEMbyK1JocBwlqT58rtrnTvq6gLo00J1NZlxZnB5G57aRcEnjHRPA2PSik9pbWr8hc/YrdTWl2HJ40FtttEGarTRpVnLTatgv8VVi1F3n65mAPO2i3aZeqnXRdVX5Pvkl0900CEVt5DKFmaGaUS+BBE9PBqr0vUGZ84khEHUbP3zn99uX3z+/e/fLl86cRf2WOiurpw7ZVSOfYWKpPUZj3UxXjEvzUJfop2YufctLIhnPzfkpr0rcBMUv5KUetZVLNjtN2i2tIP6U91MeUWmC3P+T55Ibuylv3SWx4GW6LIMEtqb6oCneY+k4HcVtlwxTc1iW6LacPt8WcfbjtGD5AfNJkMTIlFkGWJdXvRF8Fdv5ui2Ii3mL51sKwChzCTZUOS3BT39RN7X8P3Hsv/vBm/4v6v4rd9Yc3/wd0vu/aPXUBAA==
iVBORw0KGgoAAAANSUhEUgAABh4AAAQuCAIAAACs0tAIAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeXwUVbrw8eruJJA9HbKvEFZBFBIIEEFEUCC4sAhRZ3QY0XEUl6tzWVTEMAKCoIjo3MsNOIgLF0EiCGEHFQk7AwiBhLAEspHORsjeS71/1LXens7WSbrTSffv+wef7lNVp05VJaTOU885pRBFUQAAAAAAAACaz8nWDQAAoE3pdLrs7GyFQhEZGWmN+vPy8qqrq/39/T08PKxRPwAAANCuEFoCADgWURS1Wq1SqbRS/TqdTqfTWalyAAAAoL2x1o01AADtk7VHghsMBkEQrBe6AgAAANoVbnwBAI5FCi0pFAor1a/X6wVBUKlUVqofAAAAaFcILQEAHIu1Q0tkLQEAAMChcOMLAHAsVg0tiaIo1U/WEgAAABwEoSUAgCOyUmhJGg0nkLUEAAAAh8GNLwDA4SiVSitlFUmj4UhZAgAAgONwsnUDAABoU66urt27d7dS5VLWEilLAAAAcBzc+wIAYDFkLQEAAMDREFoCAMBiyFoCAACAo+HeFwAAi5GylggtAQAAwHFw7wsAgMVIWUsMiAMAAIDjILQEAIDFkLUEAAAAR8O9LwAAFkPWEgAAAByNk60bAACA/XB3d1epVJ07d7Z1QwAAAIA2ohBF0dZtAAAAAAAAQIdE1hIAwLGUl5ffuXPHzc3N29vb1m0BAAAAOjxCSwAAx1JTU1NeXu7kxF9AAAAAwAK4sQYAOBY3NzelUtmpUydbNwQAAACwB8y1BAAAAAAAgBZS2roBAAAAAAAA6KgILQEAAAAAAKCFCC0BAAAAAACghQgtAQBgGaIoMoMhAAAAHA1viAMAwDLKy8vz8/Pd3d1DQkJs3RYAAACgjZC1BACAZej1ekEQFAqFrRsCAAAAtB0FqfsAAFiEKIoGg0EQBJVKZeu2AAAAAG2E0BIAwLHodDpRFFUqlVJJ6i4AAADQWtxVAwAcS35+/vXr1ysrK23dEAAAAMAeEFoCADgWKV2XGZEAAAAAiyC0BABwLISWAAAAAAsitAQAcCxMMggAAABYEKElAIBjIWsJAAAAsCBCSwAAx0JoCQAAALAgQksAAEdEaAkAAACwCEJLAADHYqWsJYPBUFhYWFJSYtlqAQAAgHaO0BIAwLFYaRpvnU5XUlJSXFxsjcoBAACAdovQEgDAsVgva0kQBKWSP6wAAABwLNwBAwAci5VCS3q9XhAElUpl2WoBAACAdo7QEgDAEZG1BAAAAFgEd8AAAAciT7RE1hIAAABgEYSWAAAOxHqhJbKWAAAA4Ji4AwYAOBBrh5bIWgIAAICjIbQEAHAgcmjJ4qQBcWQtAQAAwNFwBwwAcCBWej2cQNYSAAAAHBWhJQCAw7FGaImsJQAAADgm7oABAA6ErCUAAADAsggtAQAciPVCS2QtAQAAwDE52boBAAC0HYVC0alTJycny//5k7KWCC0BAADA0RBaAgA4EBcXl4iICItXK4oiA+IAAADgmHi4CgBAa0lxJYGsJQAAADge7oABAGgteaIla8ziBAAAALRnhJYAAGgtJloCAACAw+ImGACA1mKiJQAAADgsQksAALSWPCDO1g0BAAAA2ho3wQAAtBYD4gAAAOCwFKIo2roNAAB0bDU1NVVVVc7Ozu7u7rZuCwAAANCmCC0BAAAAAACghZxs3QAAANpOWVnZnTt33N3dfXx8bN0WAAAAwB4wKwQAwIHU1tZWVlbqdDpbNwQAAACwEwyIAwA4kJqaGq1W6+zs3KlTJ1u3BQAAALAHhJYAAAAAAADQQgyIAwAAAAAAQAsRWgIAAAAAAEALEVoCAAAAAABACxFaAgCgtaTZwW3dCgAAAMAGCC0BANAqer3+xo0b169f580YAAAAcEBOtm4AAAAdmyiKzs7OoigqFApbtwUAAABoawoesQIAAAAAAKBlyFoCADiQ2tpaKclIqWRIOAAAAGAB3FgDABxITk7OjRs3amtrbd0QAAAAwE4QWgIAOBBpGDiTIgEAAACWQmgJAOBApNASo+EAAAAAS+HeGgDgQMhaAgAAACyL0BIAwFGIokhoCQAAALAsQksAAEchxZUEBsQBAAAAlsO9NQDAURgMBukDWUsAAACApTjZugEAALQRK42G02g0Op1OrVZ37tzZsjUDAAAA7R9ZSwAAR2Gl18NVVVWVl5fr9XrLVgsAAAB0CISWAACOQhoQZ/GsJSmopFKpLFstAAAA0CEQWgIAOAorZS1JESumBgcAAIBj4j4YAOAorJS1RGgJAAAAjoz7YACAo7DGNN7yW+cILQEAAMAxcR8MAHAU1hgQJ2dCEVoCAACAY+I+GADgKKwxIE6aw5u4EgAAABwWt8IAAEdhvQFxhJYAAADgsLgVBgA4CusNiCO0BAAAAIfFrTAAwFFYY0CcVKdKpbJgnQAAAEAHQmgJAOAorJG1xFxLAAAAcHDcCgMAHIX1spYILQEAAMBhcSsMAHAUzs7Obm5uLi4uFqyT0BIAAAAcnJOtGwAAQBtRq9VqtdqydTLXEgAAABwcT1kBAGg55loCAACAg+NWGACAlmNAHAAAABwct8IAALQcoSUAAAA4OG6FAQBoOeZaAgAAgIMjtAQAQMsx1xIAAAAcHLfCAAC0HAPiAAAA4OAUoijaug0AAHRUNTU1er3e1dVVoVDYui0AAACADRBaAgAAAAAAQAs52boBAAC0BVEUs7KyBEGIiIhg/BoAAABgKYSWAAAOwWAwaLVaQRAYuQYAAABYEAPiAAAOQRTFmpoag8Hg5uZm67YAAAAA9oPQEgAAAAAAAFqIySYAAAAAAADQQoSWAAAAAAAA0EKElgAAAAAAANBCvCEOAIAWqqqq0ul0nTp1cnFxsXVbAAAAANsgtAQHkpiYKP8LAK13+/btO3fu+Pn5EVoCAMBSjh49euLEidLSUr1eL/z7PXyHvpO3g0MAGtJhQku1tbUnT57MyMjQaDTV1dWdO3f28/Pr3bv3oEGDjG/ozf9FTUxMNFnZ2dnZx8enR48e9913n4eHh8n6BoPh1KlT58+fLygoqKmp6dSpk5+fX9euXfv16xcUFGTmTrOzs48dO5aVlVVRUeHq6tq1a9fBgwdHRkaa09oWLAIAWJWzs7ObmxtxJQBAc7UsXJKYmGh+r0SudsiQIePHj69bW0pKyvHjx01Wlul0urNnz2ZkZOTl5VVWVqpUKl9f3169esXGxrq7u5vZ4BY4ceLErl27rFe/fWvlRQdarGOElrKysjZt2lReXi6XVFRUVFRUZGVlHT58eNq0aeZEZ5qk1Wo1Go1Go/ntt99mzJihVqvlRbW1tV999dXNmzflkqqqqps3b968efPQoUNm/k7+9NNPP//8syiK0tfy8vLz58+fP3+eX2kA6KC6dOli6yYAABxIy3ol586de+ihh5yc/q3rp9Vqz50719COsrOzN23adPv2bblEp9Pl5eXl5eUdOXIkPj5+wIABrT2YBpw+fVoQhLFjxw4aNMjZ2dlKe7GedpKa1IKLDitpJz8S1tYBQks3b95cv369Xq8PCQm57777IiMjXV1dq6qqbty4cfjw4ZycnPXr1//5z38OCwsT6rtgTV5IeVFFRcXNmzd3795dUlJy4MCBKVOmyOv89NNPN2/edHd3HzVqVM+ePT08PLRabWFh4bVr186fP2/OUZw4ceKnn35SKpVxcXEDBw5Uq9XV1dVXr149duyY+afC7n8cAcB6qqura2trO3Xq1KlTJ1u3BQCA/8/8LsyePXua2ysJDQ3NyclJS0u75557jMvT0tKqq6ulpSabZGdnr1u3TqfThYSEDBkyJDIy0sPDQ6fTFRcXZ2RknDhx4ocffrBeaKmwsFAQhJiYGJO4kh10hdrsEFpw0YFWau+hJb1e//333+v1+gEDBjz22GNK5f+90s7Dw6Nv3759+vTZtm3bmTNnNm/e/Oqrr6pUqtbsy93dvU+fPm5ubl988cXVq1eNF124cEEQhMmTJ3fv3l0qUalUYWFhYWFhI0aMaLLmioqKvXv3CoLw6KOPDhw4UN5d//79+/fv35o2AwDMdOfOndLSUrVaTWgJANBBtaBXEh0dnZOTc+rUKZMog5QcFBMTYxJl0Ov1mzdv1ul0gwYNio+Pl/tfTk5OISEhISEhcXFxKSkpFj80mVarFQSBweat0dyLDrReew8tnTt3rrS01N/f/9FHH5X/X5MplcpHH300JydHGsVmkdi5NES5pqbGuPDOnTuCIISHh7eszrNnz9bW1oaHh8txJWuQouDvvffeqVOnTp8+XVhYqNVq33vvPUEQcnJyzpw5c/369ZKSEoVC4e3t3bt37+HDh7u6utatITEx8cyZMydOnNBoNEqlMjw8fPTo0dJpOXv2rFQuimJ4ePhDDz1Ud56pkpKS1NTUK1eulJWVOTk5BQcHDxkypE+fPvIKn3zySWlp6YsvvhgcHCyVJCcnnz17VhCEe++9d9KkSVJhXl7e6tWr1Wr166+/Lm978+bN1NTUmzdvVlVVubq6RkRExMXFSQlr5pyHumpqarZs2ZKenq5UKsePHz948OBmnnUAHYbBYBAEoe6fEgAAOooW9Er69++/e/furKyswsJCPz8/qbCwsDArK8vFxeXuu+/etm2b8fpS/ysoKMg4rmTMxcVl4sSJxiXm36InJiaePXv22LFjUkcjIiJC7mgI/57UI382+WCS+HP58uXDhw/n5eWJoujn5xcTExMTE1N3zYaywBpas8VdqrrNbvIQLHX2jDX3opt5dM1qiZkVCmZfRMGMnqbQVl1a809F4z8S9qS9h5bS09MFQRg6dGhDGUkqlWrIkCHbt29PT0+3SGgpLy9PEAQvLy/jQk9Pz9u3b2dmZvbt27cFdV65ckUQBJOYsZXs2LHj5MmTJoVJSUnGXwsLCwsLC9PS0l544QU3NzeTlXfu3Gk8TO/y5ctZWVkvvPDCiRMn5CnfBEG4cuVKdnb2iy++6Ovra1y4cePG2tpa6atOp7t27dq1a9fuv//+Bx98UCqMioo6ffr0tWvX5NDStWvXTD4IgiAljnXr1k0uOXHiREpKivFkVWlpaRcvXnzkkUdiYmLMOQ8mSkpKNmzYUFBQ4ObmNnXqVON9AbA/0v8ehJYAAB1XC3olUijh9OnTp0+ffvjhh6VCKXulf//+dZOD5P6XmX8xm3WLvnv37iNHjshfpY7Giy++2LK5C48ePWo84Xdubm5ubm5+fn4LqjLR+i6Vmax09pp70Zt7dOa0xMwKzb+I5vQ0Zdbu0jbrVDiI9h5ays3NFf49vlCXtFRaszUqKyuzsrJ2794tCILJOLV77rnn0KFDW7ZsuXLlSu/evUNDQ5v1WoSCggJBEMLDwy9cuJCamlpQUKBSqQICAgYOHDhgwACFQtHKlhs7depUXFxcdHS0r6+v/Pega9euMTExERERHh4etbW1ubm5Bw4cyMnJOXTo0NixY01qOHHixH333RcdHe3l5XXr1q2tW7dqNJpvvvmmrKysbvmhQ4cef/xxacOysrLvvvuutra2f//+cXFxXbp0qaqqunDhwsGDB3/55Zfu3btLs61369ZNCi3FxcUJglBYWFhWVubh4SGKYllZmRxZl8JM8qXPz8/fuXOnKIoDBw4cPny4j49PaWnpoUOHzpw5k5KSEh4eHhAQ0OR5MHb9+vXvvvuusrIyICDgqaeeMp61HYBdkrKWLPtfLgAAballvZKYmJjTp0+fPXt29OjRKpVKr9efOXNGEITo6Oi6K0sP2s18S1Jzb9GPHTs2YsSIgQMHenh45Ofnb926taio6NChQ1IaVLPempefn79nzx5BEAYPHhwXF+fl5VVWVpaamnrixAlzWt64FnepEhMTzZ+z2bJnz0SzLrqZR9eslphTofkX0cyepszaXVrzT0WzfiQ6tPYeWqqsrBTq5BCZkJZKa7ZA3Wvcv3//+++/37jkgQceKCsrO3v27KlTp06dOiXttGvXrvfee688zrkRVVVVgiCcP3/+119/lUq0Wu2NGzdu3Lhx+fLlqVOnmtnVaSiH09jgwYPlyLRs+vTp8mdXV9fu3bv7+fmtWLEiIyOj7v8U99133+jRo6XPYWFh8fHxX375ZWlp6YgRI+qWG+cZHT16tKamxnhQm4uLS1xcnEql2rlz5/Hjx+XQkiAIWVlZer1epVLJISRRFM+fP3/t2jU/Pz+9Xp+VlSUYhZaOHTtmMBh69eol/9p36dJl4sSJ5eXlmZmZR48efeyxx5o8D7KTJ0+mpKQYDIbevXtPnjyZiVcAR8CAOABAR9eyXkloaGhgYOCtW7cuXbrUr1+/S5cuVVZWBgUFhYaG1l25oqJCEARPT09z2tPcW/QRI0aMGjVK+hwRETFhwoT169dfv37drIP/d8ePHzcYDH379p0wYYJUolarJ0yYUFFRkZaW1oIKjbW+S2UOq569Zl305h6dOS0xp0LzL6KZPU2Ztbu0zToVDqK9h5banre398iRI03G36lUqkmTJsXFxZ0/fz4rKys/P7+srOzcuXPnzp3r27fvlClTGp9BXEpxPHz4cOfOnceOHdurVy9BEDIyMnbt2pWWlnbixInY2FhLtX/QoEF1C6Xo79WrV0tLS+XUPkEQjN8nKjOJZIeEhDRSLo33lmRmZgqCMGTIEJMK+/Xrt3PnTvklqR4eHgEBAQUFBTk5OREREcYD386fP3/16tXBgwdnZ2drtdqAgAAPDw9pKynSNHz4cJPKR4wYkZmZWfe3t97zINmxY4cUCB8+fPjo0aNJYQAcBAPiAAAdXYt7JTExMSkpKadPn+7Xr58Uk6o73qoFmnuLbjKBiRTmMO5QmE+qXBoGYWzYsGGtDy21vktlDmufvWZd9GYdnTktMadC8y+imT1NmbW7tDIL/kh3dO09tOTm5lZWVlZWVmY8+tFEWVmZtGbLdiEl/uh0uoKCgr179167du2bb755+eWXTd52KQhCYGBgYGCgIAiiKN66dSstLe3o0aNpaWl+fn51R10ac3FxqaqqEkVx3Lhx8g+fNKX31q1bz5w5Y2ZoyZwkuroDuzQazRdffCFlTpnQ6XR1C318fIy/yhk99Zbr9Xq5pKSkRBCENWvWCL934STSZ+kBiKRbt24FBQVXr14NDw+X/kOJioqSVrt+/booinUnWpKusr+/v0lrpTTRur+9jQxwk+JKo0aNGjlyZEPrALA/DIgDANiHFvRK7rnnnr179169evXq1avXrl1zdnZu6EXV7u7ut2/fvnPnjjnzRTT3Fr3JDoX5pF3XndFGnrW6NVrfpTKHtc+e+RfdIh1G45aYWaH5F9H8nmYjLTSn5RbZUct+pDu69h5aCgkJKSsru3btWiOhJSmBTY5Etoz0Ns2nn376f/7nfzQazdGjRxt6f6cgCAqFIigoKCgoKDg4eOPGjefOnWs8tKRWq6XfKylfSSZ91Wg0rWm5iboRsX379lVVVYWGho4ePTowMNDV1VWpVOp0uoULF9ZbQ0P9rib7Y9Lvm9R5q8v4F6xbt27Hjh27du1a7969q6qqfH19pd9JtVpdUlKSl5cnXdOoqKjG99iIuudB1rVr1+vXrx87dqxHjx4NZYQCsD8WHxBXXV2dn5/fqVMn+aUEAAC0JfN7JZ07d+7bt+/Zs2c3b94simK/fv06d+5c75rBwcG3b9/OysqyxlSk7eoBj3HgwETru1TW0NyzZ/5Ft1SHscUVNsn8nmbjLbRgl9bMCh1Hew8t9e7d+9KlS0ePHh0wYEC96Z16vV6a+713796t352zs/PYsWO//vrro0ePDhs2zMmpifPTo0cPwYyEt+Dg4EZmGbf2j6OUFvTEE08Y/3koKiqy+I68vb2LiopeffXVJufD79q1q1KpzM7Olt5AIWcnRUVFnTp1Kj09PScnR6lUGg9k9fLyKi4u1mg0ERERxlVJU6SbORpc8oc//GHDhg1Xr15dv379U0891bVrV/O3BdBxWTy0pNPptFpt4wOiAQBoA+b0SmJiYs6ePStNUNvQXM6CUf/rnnvuafKPpgVv0ZtL2nVRUVFYWJhxeWFhYd2VpXmsa2pqjKdYLS0tNX931uhStcHZM/OiW/zozKzQ/Itofk+zldpsR/anvU85cc899/j4+Gg0mh9//LFu7NBgMPz4448ajcbHx6eh7L7m6tGjR0hISEVFhTSFfuOys7MFQZDnA2rIXXfdJX24fPmycXlGRoZQXw6kZUmxVZMwWWpqqsV3JCVhHT58uMk1O3fuHBwcrNfrjx49KhhlJ0kxpqNHj+r1+uDgYOOwuhRmqlu5NDN6s8JDzs7OTz/9dI8ePWpqar7++mvpKgCwexYPLTEvOACgnTCnVxIRESH1O/z9/U1iGcak/ld+fr700pu6K9TW1v7www/SZwveojeXVHndTo3xm+Bl0pnJyckxLvzXv/5l/u7M71JJ69TU1DRZZxucPTMvusU7jGZWaP5FNL+n2UrW2JH5PxIdWnu/IVapVNJ0dGfOnFmzZs2FCxfKy8v1er00afzatWvPnDkjr2Opnd53332CIBw5ckROkvz888/379+fmZl5+/Zt6TF1cXFxamrqpk2bBEHo27dv4xV2795dGq+3a9cuKWxcWVl55syZ3bt3CxaaQq8R0khs6cWKWq22oKBg69atZ8+etfiO4uLi3NzcTp8+vWHDhitXrty5c8dgMFRXV+fm5qampq5evdp4ZSmKVF1drVAo5P83u3XrplAopN86k9FwQ4YMUSqV6enpP/74Y3FxsV6vLy4u3rp16+XLl1UqVd2J1hrn5OT05JNP9urVS6fT/e///u9vv/3WmgMH0P7JN8eElgAAHVcreyUzZ85MTEycOXNmI+uoVKonnnjCycnp5MmTa9asOXfu3O3bt6WUn7y8vJ9//nnlypXyM3jL3qI3S2xsrFKpTEtLS0lJKSkp0ev1JSUlKSkp9c7hLXU9UlJSbt68KZ20AwcOyC/vNof5XSpvb29BEP71r38Zz11dr7Y5e+ZcdIt3GM2s0PyL2KyeZmtYY0fm/0h0aO19QJwgCOHh4c8+++x3332Xm5sr/adpzN3dferUqeHh4Rbc41133aVWq4uKitLT0/v06SMIgkaj0Wg0hw4dqrd5DzzwQOMVKhSKJ5544osvvigvL09OTjZedO+990rzeVvPAw888O2332ZmZkrT3UtiY2OPHz9u2R15eno+/fTTGzduTE9Pl0a6NSIqKkr63zwwMNDd3V0qdHd3DwgIuHXrlvDvc3gLghAUFDR+/PiUlBT5TasShUIRHx8v/efVLE5OTgkJCZs2bbp06dKWLVtqamoaeakcgI5OflRAaAkA0HG1sldiprCwsOnTp2/atCk3N3fLli0mS11cXCZOnCh9tvgtuvmCgoIeeuih3bt3Hz9+3LhfM2jQoJMnT5qkHQwfPjwtLa2wsHDt2rVy4dChQ6UhFOYwv0vVt2/fQ4cO7dq1a9euXVJJQ+9isuHZM2HxDqOZFZp/EZvV02wNa+zI/B+JDq0DhJYEQYiMjHz99ddPnjyZnp6u0Wiqq6s7d+7s7+/fq1evQYMGGY+YtQilUjls2LCUlJTDhw9LoaWZM2deunQpKyuroKBAmhbezc0tMDCwX79+9957rzn9Cl9f35deeunQoUPp6ellZWXOzs5BQUExMTGWGsfXiJ49ez799NO//PJLXl6eUqn09/ePiYmJjo62eGhJEISwsLCXX35ZulKFhYW1tbUuLi5dunTp2bOnyVOU8PBwJycnnU5nEkKKioq6deuWk5NT3YzNwYMHBwYGHjly5MaNG1VVVa6urhEREXFxcS0OLKpUqmnTpn3//fcXLlzYvn17dXV13Xd/ArAPUmK2ZcNAhJYAAG2s9b0SM4WFhb366qtnz55NT0/Pz8+vrKxUqVS+vr69evWKjY2VHwwLVrhFN9+wYcP8/PwOHz4sTWvr5+cXExPTt2/fkydPmvQQ/fz8/vznPx84cODGjRsGg8HPzy82NnbgwIHmh5bM71KNHDlSFMW0tDQp26vxam149oxZvMNofoXmX0Tze5qtZPEdNetHouNSNDIxPgAA9qGmpubGjRtOTk4m4ezWKCgouH37tq+vLxM9AgDQTly5cuWrr74KDw+fMWOGrduCFuIidkQ8awUA2D9rZBiRtQQAQLsiiqI0WtBk2lZ0IFzEDqpjDIgDAKA1CC0BAGBnvvjii5iYmNDQUG9vb4PBkJub+8svv1y/ft3FxSU6OtrWrYNZuIh2g9ASAMD+EVoCAMDO3Lhx48aNGyaFKpXq8ccfl97JhfaPi2g3VHY5OTkAAMaqq6srKipcXFw8PT0tVWdpaaler/fy8nJxcbFUnQAAwExRUVEGg8FgMOj1eoVC4e3tfdddd02cONGC8yrC2riIdoOsJQCA/SNrCQAAOxMREVH3pdLoWLiIdoMbYgCA/SO0BAAAAFgJWUsAAPvXuXNnHx8fV1dXC9ZJaAkAAAAQCC0BAByBu7u7u7u7BSsURVEURYHQEgAAABweN8QAADSblLIkEFoCAACAw+OGGACAZpNHwykUClu3BQAAALAlQksAADQbEy0BAAAAEu6JAQBoNkJLAAAAgIR7YgAAmo3QEgAAACDhnhgAgGYjtAQAAABIFNK7kwEAgPlEUZT+gBJdAgAAgIMjtAQAsH8Gg4EYEAAAAGANTrZuAAAA1qXT6a5duyYIQs+ePW3dFgAAAMDe8AgXAGDnmBcJAAAAsB4GxAEA7J9erxdF0cmJXF0AAADAwggtAQAAAAAAoIUYHQAAAAAAAIAWIrQEAAAAAACAFiK0BAAAAAAAgBZiQlMAAJqtuLhYEARvb2+VSmXrtgAAAAC2RGgJAIBmKy4uFkXR09OT0BIAAAAcHKElAACazcfHx2AwEFcCAAAAFKIo2roNAAAAAAAA6JDIWgIA2LnS0lKDweDp6ens7GzrtgAAAAD2htASAMDO3b59u9Ngi8UAACAASURBVLa21tXVldASAAAAYHFKWzcAAADr0uv1giAolfzJAwAAACyP+2wAgJ0zGAwCoSUAAADAOrjPBgDYM1EUpRdW8DY3AAAAwBoILQEA7Jk0Gk4gawkAAACwDu6zAQD2jNFwAAAAgFVxqw0AsGdSaInRcAAAAICVONm6AQAAWJE1Xg+n0WhKS0t9fX27dOliwWoBAACAjoisJQCAPbPGgDipToVCYcE6AQAAgA6KrCUAgD2zXmiJ+ZsAABb31FNPHT9+3NatQIc0Z86cv/zlL7ZuBRwUoSUAgD2TBsRZdq4lQksAACvJzc195513HnjgAVs3BB3Me++9V1paautWwHERWgIA2DNrhJZEURQILQEArCMoKCgqKsrWrUAH4+XlZesmwKFxWwwAsGcMiAMAAACsittiAIA9s96AOKbxBgAAAARCSwAA+8ZcSwAAtF5rHqh0xIcxHbHNgA1xWwwAsGcMiAMAoEnJyckuLi7Ozs5hYWHjxo2zdXOsRaFQEDMCrIHbYgCAPbN41pIoikzjDQCwMwkJCRs3btRqtdnZ2bt27aq7gvS3r2Ua2jYkJKTFdVq2Ja1Z01jbHxHQTnBbDACwZ9YILUkfCC0BAOyGVqudNGlSG+80Ly+v8RVqamrapiWW0uQRAfaK22IAgN2SRq4JFg0tyXN4k1EPAGgz6enpU6ZMUavVrq6uI0aM2L9/f69eveSlFy9enDhxYmhoaGho6OTJk9PT0+VF0h+s8vLyiRMnuri4uLi4JCcnG9ccGRkp/UVT/G7UqFHGK1y+fLmhv3pbtmzp2bOnh4fHH//4x8rKyrqrNbRtjx49THZqss7GjRtDQ0M7d+7s4eExduzYU6dOGR/OP/7xD09Pz9TU1MWLF7u7u5scUZOysrJGjhzp5ORU92w00mZpzKBCofD29p48efLBgwfvvvtu84+okWskGN1X7Nmz59577+3Vq9eOHTsaqk362rNnz2YdNWBVhJYAAHZLSlmybBiI18MBANrYxYsXx40bN27cuAsXLpSVlW3YsOHy5cvFxcXy0j/96U8rVqzIycnJycn5+OOPp0+fLkcupGTbWbNm/e1vf6upqdm4cWNCQoJx5VlZWdI64u8OHjxovELPnj3rHR129OjRd999d9OmTUVFRa+88kpiYqJQZxxZQ9tmZmaa7NR4tYMHD65fv3779u2VlZX5+flvv/32zJkzT548Kdd/+fLldevWPf7444WFhevXrzc5oia9+OKLH3/8sVarrXs2GmmzNGZQFMWSkpLVq1fn5OQUFBSYeUSNXyP5uFauXHn8+PGdO3emp6evW7dOKt+2bdvEiRONa6usrIyKijpy5EizjhqwKkVrBs0CANCeGQyGiooKURS9vLwsVWd1dfXNmzednJy6detmqToBAJCMHDlyzpw58fHxxoWPP/74lClTnn322Xo3eeyxx1566aXx48fLJTt37ly9evUPP/wgfVUoFN99993UqVPlr3X7gPUWNr7CuHHj3njjjbFjx0pft2zZMmXKlHoraajyhspHjhz55Zdfdu3aVS757bff3nzzzb1790pb3b5928vLS6FQlJWVeXp6Ntl4k52eOXPm3nvvbW7bvLy8vvvuu7i4uEZuKhqqrclrJG27Z8+ehx56SPqq1+vlnOv77rtvxYoVsbGx0tdPPvkkJydn2bJlxruYOXNmZGTk7NmzGz50wIoILQEA0AxVVVXZ2dkuLi6RkZG2bgsAwN7UG1ry8vK6cuWKv79/vZt4enpmZWX5+vrKJUVFRd26dSsrK5O+msQ7LBVa8vPzy8zM9PHxkXfq5+dnkdCSq6trdXW1SaGbm1tFRYXxVnU/mMOcs1FveVpa2quvvvrrr78GBQXdfffdrq6uq1atCg4ONueImrxGjR/FTz/9tHDhwn379gmCUFNT069fv8OHDwcGBhqvQ2gJtsWAOAAAmkEaEMcc3gCANqPX6xsfiF03JNGhEwhcXV2vXbsm/jsprmRDffv23b9/f01NTVZW1o4dOzZv3vz888+bv3lrrtEDDzygUqn2798vCMLatWsnTJhgElcCbI47YwAAmoG5lgAAbWzYsGHbtm1raOmoUaOOHj1qXHLkyJHRo0dbu1WDBg06ceKE/FXKqWkN+X1wEyZM+Oabb1pZWxtISUlpfAX5iFp/jRYtWvTOO+/U1tZ+8sknc+bMaW5TAWsjtAQAQDOQtQQAaGOLFy9+99139+3bJ4piVVVVenr6mjVrnnvuOWnp0qVL582bl5qaqtPpdDpdamrq/Pnzly5dau1WJSYm/ud//mdGRoZWq01NTf3555+bW4Ozs7P0gra8vLxVq1bFxcVJ5R988EFSUtLChQuvX7+u1WqLi4t37949YcIECx9AM/n7+2/durWkpET6mpqa6uzsbLJOQ0fU+ms0aNCgsLCwadOmjRkzJiQkxBIHBFgSd8YAADQDoSUAQBuLjY1NTk5eunSpWq0OCQl55plnqqurP/vsM2npXXfd9e233y5ZskStVqvV6qVLl27YsKF3797SUinNVk62NfkqCMK5c+fkQonxTE9yoclnQRCGDh06f/78+Ph4Hx+fVatW1Q2UNLKtRHpBm1KpHDJkSGZm5vbt26XysLCww4cPZ2ZmDh482MPDIy4u7uDBg9Ib0+o9HMHsbOImz0Yjbe7WrVtISMjLL78cEhISExPz5JNPbty40aT+ho6o8Wtk3JJ6T5TkvffeS0lJmTt3rjlHCrQxpvEGAKAZiouLi4qKvL29AwICbN0WAIC9qXca7w5Bo9F0797deF5qWNYXX3xx5MiRpKSkepcyjTdsy8nWDQAAoCMRRVGpVMrvAwYAALm5uQsWLJg1a5atG2K39Hr98uXL5TQooL0hnx8AgGbo0qVL9+7du3TpYuuGAABgYx9++KE0emvAgAH9+/d/9913bd0iOySdYScnp4sXL3bv3t3WzQHqR9YSAMBuVVdXK5VKZ2dnXugGAIDFzZ49mxFY1sYMNugQyFoCANit3NzcrKys2tpaWzcEAABYXWRkpKIBkZGRtm4dYM/IWgIA2C0nJyf5XwAAYN+ysrJs3QTAQXG3DQCwWxEREbZuAgAAAGDnGBAHAAAAAACAFiJrCQAAAADahaysrBkzZjCUG81VWVk5fvx4W7cCjov/swAAAACgXfD39580aVJsbKytG4IOZuXKleHh4bZuBRwXoSUAAAAAaBfc3NwGDBgwZswYWzcEHUxycrJarbZ1K+C4CC0BAGAuURTz8/MFQQgKClIoFLZuDgAAAGB7hJYAADCXwWAoLy8XBIG4EgAAACAhtAQAgLkUCkVAQIDBYLB1QwAAAID2gtASAADmUiqV3t7etm4FAACCQqEQRbGhRYIgNLS08Tqb3LCR/VpkfQAdkdLWDQAAwCry8vJyc3Nra2tt3RAAAFouODi43vJG4jUtDuWYs2FzKzd/fU9Pz2bVDKD9ILQEALBPVVVVFRUVPCkFAHRo0usjjKWkpCgUCpNZ/yoqKqZPn+7h4TFw4MDz58+bbBIbGxsbG2vmHm/cuDF06FC1Wv3cc89VVFQ0vt/KysoXXnhBrVZHR0enp6cbr1Dv+lLJqlWrwsLCXFxckpOTpXJfX9/y8nLF78xsKoB2gtASAMAOiaKo1+sFQXByYug3AMCuxMfH131wMmfOnODg4OLi4r179/74448mS0VRNP9Zy7p16zZv3nzlyhUPD4/Zs2c3uV9fX9/8/PxDhw7t2rVLMEpTqnd9qSQ3NzctLW3jxo0JCQlSeXFxsdxOHgsBHQ4DXwEAdkiv11+9elUQhB49evDwEwDQUYwcOXLOnDnx8fGhoaG5ubnGi0JCQnJycuSvJnMY+fr6ZmZm+vr6CoJQVFTk5+fXso6eQqHIzs4ODQ0VBKG4uLhPnz4FBQUmKxjXHBAQcOnSJWm/Go0mICDAZL9151oyLmnoM5pr5syZkZGRxqFAoC3xLBcAYIeklCWVSkVcCQDQEclRpBYEXCw1z6DBYFAqmxjmYvx31oKBodraWhcXF0vVBsDaGBAHALBDcmjJ1g0BAKAtPPnkkx999JFWq83NzV26dKnJ0mbNtZSUlJSdnV1SUrJo0aJp06Y1vnJCQsKKFSsMBkN5efmaNWta0vTfOTs7Jycna7XanTt3jhkzpjVVAWhjhJYAAHaI0BIAwD4EBASYlMgTXRvPeL1s2bLs7Gy1Wj1+/PjnnntO+Pd8Ir1eb05KkbTJ9OnTJ0+eHBUVVV5evmTJksb3u2TJkvz8fD8/v+HDhz/66KNNtlMuMflXEARp6iW1Wr1mzZq1a9ead3oAtAsMiANgFYsXL05NTd2+fXsj68gJ3vHx8ffff//cuXPbqnWwfzqdTrBCaEmn0xkMBicnpyYHCAAAYBG3bt0yKak3SOTu7v7ll19++eWX9a5z6tQpc/Ylb3X8+PFGlhpzc3NLSkpKSkrSarXbt2/v27dv4+sbF5qsMGnSJEsN5QPQxrgzBmB5FRUVK1asWLFihfS1ycluPv74448//riqqsr6TYOjsFLWUlFRUVZWVmlpqWWrBQCg43rnnXcUCoWHh8f69esPHDhg6+YAsAFCSwAsb8uWLXFxcT179pS+NpmA3adPn0GDBm3dutWCbdBqtRasDR2OlUJLBoNBEARSlgAAkC1atEgUxZqamuTk5MDAQFs3B4ANcHMMwPJ+/PHHqVOnNmuTadOmbdu2zSJ7r6mp+cc//vH+++9bpDZ0UNKAOCcnC4/7JrQEAAAAmODmGLBzJoPR5K/79++Pjo52dXXt2rWr/DoPg8GwcOHCbt26+fr6PvfccxUVFfJWK1asCA8Pl3rU9W5r7OTJk8OGDau709ra2pkzZ3bp0iUoKGjZsmXGm9x33331jupvlpqams8++yw0NPS1116bPn16K2tDh2alrCUpBY/QEgAAACBjGm/AQT3zzDOrVq165JFHbt269fe///35558XBOGTTz756aefDhw44OPj89prr82fP/+jjz6S1v/555+PHTsWEhLS0LbG8vPzg4OD6+508eLFGRkZ586dE0Xx2WefNV4UEhKSm5vb4sOprq5evXp1YmJidXW1VqudNm1aVFRUi2uDHSBrqRF5eXlMbQYAxry9vbt06WLrVgBAR0VoCXBQTk5Oubm5BQUFERERcuZRUlLSDz/80K1bN0EQli9fPmTIEDm0tHLlSimu1NC2xhqaXOnrr7/etm1baGioIAiffvpp//79LXIsJ0+efOSRRzQajdzt37Fjh6+vr7S0qqqqurraIjsC7IOvr685r6AGAAdRXV39l7/85ZNPPrF1QwCgoyK0BDioH3744f3331+wYIGvr+/KlSvHjx8vCEJWVlafPn3kdYxTMyIiIhrf1lhwcHBubm6PHj1MynNycuRkIpOlubm59SY6mWPQoEE7dux45513fvnlF51Op1AoZsyY8corr0hLNRrN119/3cjmHh4ezs7OLds12idRFEtKSgRBkCOMllJSUiKKopeXl8XzodrM+++/37VrVzPfQg0AjmDRokUajcbWrQCADqyj3hkDMFPnzp0rKyvd3NwEQcjPz5fLo6Ojk5OTRVFMSUl57rnn8vLyBEGIiIjYtWtX165d69ZjPGdTvdsaGzRo0OHDh+uGlkJDQ69evdq3b19BEK5cuWK86PDhw7GxsS0+zJiYmF27dv3rX/965513du3alZSUtGDBAk9PT0EQoqKihgwZ0uKa0RHV1tZmZWUplcru3btbtubMzExRFLt27dpxw5HMcA8AkCUnJyckJHh4eNx7770HDx40XqRQKCyS4mqpeiy4X+m2tgWtMmfD5h6vrc4PYFkde7YIAE2KiYlZvnx5RUXFtWvXXnzxRbn8qaeeSktL02q1glF20ksvvfTCCy9cvHixtrb2t99+e/LJJ+uts95tjT366KObN2+uW/7000+/8cYbOTk5OTk5//Ef/2G8aPPmzY8++mhLj/L/DBw4MCUl5fTp0w8++OBnn33WytrQcVlpoiWBabwBAG2uxWnd5khISNi4cWNxcbFJXEloUeSlXnXrkR7+1auystIiO613v+YsanGdLa7c/PUbOW+AzXFzDNi5//7v/965c6efn9+oUaPGjRsnlz/++OOTJ0/29vZ+99135fFir7766mOPPTZ58mQvL68//OEPTz31VL111rutsSlTphw9ejQjI8Ok/J133omKiurfv390dPTDDz8sl6enpx8/fnzSpEmtPVpBEARhwIABW7duTUhIsEht6Iis9Ho4aTIvoc6LFwEAsB7jrHNBEKqrq19//fXAwMDg4OB169b16tVLKtdqtXPnzu3du3evXr1mz55dW1srlSsUCoVCsWrVqrCwMBcXl+TkZKk8MjJSoVBotdrJkydL68i7SElJMSkRBKGysvKFF15Qq9XR0dHp6el1V6ir3np8fX3Ly8sVv5PLNRrN4MGD3d3dAwMDX3nlFSnGJK2zYsUKT0/P1NTUtWvXenp6yofQrP1WVFRMnz7dw8Nj4MCB58+fN9kkNjbW/PT5GzduDB06VK1WG79PuaH9NnLe6l2/oevV0HkD2glCS4Cdu/vuu48cOVJVVXX9+vWXXnpJfjDy5JNPXrp0qaqq6vTp06NGjZIKlUrlq6++evHixerq6nPnzj3++ONSucnjlHq3Nebm5vbmm2++8cYbJpt36tTpv/7rv4qLi2/dujVr1iy5/M0333zzzTddXV0teOC8Ic6RWSlrSf6JJWsJAGArb7/9dm1t7fnz569everu7l5cXCyVz5s3LzQ0ND09PSMjIzQ0dN68eVK59McrNzc3LS1t48aN8rO3rKwsaZH4O3kX8fHxdVNp5syZ4+vrm5+ff+jQoV27dglmpNvUW4/U4Lo7nTVr1vLly2tra69cuTJ69OhZs2bJu9Dr9f/85z8nTJhw/vz5f/7zn00+Pmyo/cHBwcXFxXv37v3xxx9Nlpo0pnHr1q3bvHnzlStXPDw8Zs+e3eR+Gzpv9a7f0PVq6LwB7QQDOwEA9qawsLCkpMTHx8ff39+C1Wq12uvXrysUirrziHUgCoUiOjqaabwBQCZN423+G+Lef/9941wVy9qyZcsnn3wSHx8fGhqam5trvCgkJCQnJyc4OPjChQt131MRFBR06dIlHx8fQRBKSkr69u0rz4ZpPJuPycw+jU9IZLwoICDg0qVL0n41Gk1AQICZHcm6u6h3p126dJHDZIIg+Pv7FxQUGK9c90Oz9uvr65uZmSm1v6ioyM/Pr2UdYYVCkZ2dLb3vuLi4uE+fPlI7G9pvk+et8fPTyLUzMXPmzMjISONQF9CWmMYbAGBvpAFxVspaImUJABzcp59+OmPGDLVabY3K5dHcOTk50geTgIKUmVsvqyYNGA/CsuCOamtrXVxcBEGIiYnZs2ePpaptcqcWqcdgMDR5V2Dt8wa0E4SWAAD2xt/fX61WW2muJSY4AAD89a9/rfeNuq2XkpLS+ApPPPHE8uXLFy9erNFofv311++//16a+PLZZ59NSkqSxpGtXr36mWeesWzDEhISVqxYsWDBgsrKyjVr1rSmKmdn5+Tk5EceeWTfvn0ffPDBL7/8IgjC+PHj16xZM27cuJCQEGs8xXnyySc/+uijxMREjUbz4YcfmiyVJlo6fvy4OVUlJSU9//zz7u7uixYtmjZtWuMrW/u8Ae0Ej14BAPZGqVS6uLhYKbRE1hIAoC0FBAQYf12+fHlpaWlAQEC/fv22bt26bNkyqXzhwoUajSY8PDw8PLyoqGjhwoVSufREpO6/0hzSwu/zRhs/OJG/GpcvWbIkPz/fz89v+PDhZr7Vt956BEGQphBSq9Vr1qxZu3atVPjaa69pNJoRI0b4+vqOHTt2yZIlJg0WzH66U+9+ly1blp2drVarx48f/9xzz5nUptfrzRxkJwjC9OnTJ0+eHBUVVV5eLrWzkf02ct7qXb+h69XQeQPaCeZaAgDALBUVFbm5uZ07dw4PD7d1W1qOuZYAwERz51ry9/c/ceKElbKWRo4cOWfOnPj4eGtUbhFarXb79u3z5s27cOGCrdvSkVj7vDHXEmyLR68AAJiFAXEAAEf2zjvvKBQKDw+P9evXHzhwwNbN6TA4b3AEhJYAADAL03gDABzZokWLRFGsqalJTk4ODAy0dXM6DM4bHAH3xwAAmIWsJQAAjAUGBirqaIPoia32C6AhvCEOAACzkLUEAICxW7duOdR+ATSE+2MAAMyiVCo7derk7Oxs64YAAAAA7QhZSwAAmMXb29vb29vWrQAAAADaF0JLAAC7Ul5ertVq3dzcOnXqZOu2AAAAAPaPAXEAALtSVlZWWFhYXV1t64YAAAAADoGsJQCAXXFzc1OpVKQsAQBgDQqFQnqvRb2LhN/femGN+gG0W2QtAQDsio+PT2BgYOfOnW3dEAAALCA4ONikxNPT01KVV1ZWNneTRuI+FgkJmV+JBc8DgFYiawkAAKBjmzlz5oYNG2zdCqAdcXNzy87OtnUrLCM/P9/4q6+vb3l5uZQfJBgFYqSSHTt2xMfHp6SkTJgwISws7ObNm1L5vn37nnrqqYiIiO+//z4yMlIQBI1GEx8ff/LkyYCAgKlTp3744Ydubm6Nt0SqVvj36E9FRcXMmTM3b97cs2fPr776ymST2NhYQRCOHz9uzpHWW7/U/k8//XTp0qUFBQUbN26cNGlSI+cBgE0QWgIAAOjYKisr33rrreeff97WDQHaBY1GEx0dbetWWEtxcXG9Q8aOHDnyxhtvxMfHC4Iwfvz4QYMGrV27VhAEURQVCkVRUdHNmze3bdv2xhtvbNmyRRCEWbNmLV++PC4urqamZu/evbNmzfr8888b33V8fLxUm3HhnDlzgoODi4uLy8rKkpKSTDZpVsSn3vqlktzc3LS0tP379yckJNTW1jZyHgDYBKElAACADs/V1VWtVtu6FUC7IIUeOrrQ0NDc3FzpsxRtCQkJycnJaWj9oUOHBgcHb9myZfLkyd9//32PHj3uueceeenDDz/cqVOn8ePHz5gxQyr58ccfv/zyS3kFf3//JkNL9fr2228zMzNdXFz8/Pz+8pe/vP3228ZLT5w40YI66/rggw8EQZg0aZJWq7VIhfZHq9V++umn3333na0b4ui2bt0aGhpq61bYAKElAAAAAGhf5ChS47k5tbW1Li4u0ufFixc/8cQTEyZM+Pvf//7999/Xu76T0/91AGNiYvbs2WPRJtsyqGd8HhyTSqUaP358QkKCrRvi0KZOnVpTU2PrVtgGoSUAAMySk5Oj1+uDg4OdnZ1t3RYAgONydnZOTk5+5JFH9u3b98EHH/zyyy9SeZ8+fYYNG/boo48OGTKkZ8+expv8+uuvDz/88M6dOx966CGpZPz48WvWrBk3blxISIhS2fKXOz355JMfffRRYmKiRqP58MMPTZY2a66l5mroPDgmpVLZs2fPMWPG2LohDs2R45uElgAAMEtVVRVzOgAw0ZrZXpgpBuYICAgwKdm4cWNCQoKLi8vYsWOlCZVkb731Vt++fS9fvmyySUhISPfu3cPDwzdt2iSVvPbaax9++OGIESNKSkqGDBkyatSouXPnNt4SeRYk6YP007ts2bKXX35ZrVZ37979q6++WrlypfEPtl6vNz9uVW/90mepTuPPjZ8HAG2M0BIAAGYJCQkxGAzyUAIAjiA5OTkhIUEUxcDAwLvvvnvXrl22bhEczq1bt0xKJk2a1NDQsx07drz00kvh4eEm5dHR0Tdv3jQuUalUb7311ltvvWV+S+qNhLq7u3/55ZfytE0m65w6daqV9RsXmqzQyHkA0Ma4PwYA2A+DwdCarP7GNflWZgD2JyEhQX7Zeb1ak3bU0LYhISHy/M2A+eSsnxUrVpgUkiIHwKoILQEA7EdWVpZerw8PD+/UqZOt2wLAHmi12kbiSlaSl5fX+Ao1NTX8L4e6msz6AQArsdajXQAA2pgoijqdThRFlUpl67YAaCPp6elTpkxRq9Wurq4jRozYv39/r1695KUXL16cOHFiaGhoaGjo5MmT09PT5UUKhUKhUJSXl0+cONHFxcXFxSU5Odm45sjISDndQzJq1CjjFS5fviyV123Vli1bevbs6eHh8cc//rGysrLuag1t26NHD5OdmqyzcePG0NDQzp07e3h4jB07Vh5tJK35j3/8w9PTMzU1dfHixe7u7iZHBDQpMDBQUUdgYKCt2wWgvSO0BACwE3q9XhAEhULBdEiAg7h48eK4cePGjRt34cKFsrKyDRs2XL58ubi4WF76pz/9acWKFTk5OTk5OR9//PH06dPl6JKUyjFr1qy//e1vNTU10nzAxpVnZWVJ64i/O3jwoPEKPXv2rDcf5OjRo+++++6mTZuKiopeeeWVxMREoU7mSEPbZmZmmuzUeLWDBw+uX79++/btlZWV+fn5b7/99syZM0+ePCnXf/ny5XXr1j3++OOFhYXr16/nNeRorlu3bol11J3sCQBMEFoCANgJnU4nCAIpS4DjmDt37oIFC1544YWQkBBnZ+ewsLC//vWvhYWF0tI5c+YsWLCgW7du0teuXbvOnz9/zpw5xjU8+OCDI0aMUCgUkyZN0mq1FmlVYmLixx9/PGDAgE6dOg0dOnTo0KEWqVaq+fPPPx84cKCrq6uHh8fIkSOTkpKMp2FesGDBlClTCgsLpQ+WOiIAABrHc10AgJ2QQkukLAGO4+DBg2vWrGlk6bp164xLYmNjTRJ5pk6davFWnTx5csiQIfLXkSNHWqrm48ePy5EymfEbBry8vKQPnp6eltopAABNImsJAGAnCC0Bjkav19c71ZGs7qCzDj2lsaur67Vr10wGK1VUVNi6XQAAR0doCQBgJ6ShH87OzrZuCIA2MmzYsG3btjW0dNSoUUePHjUuOXLkyOjRo63dqkGDBp04cUL+um/fvlZWWFNTBuCVkwAAIABJREFUI32YMGHCN99808raAACwOEJLAAA7YdWsJZ1OV1lZKXfwALQHixcvfvfdd/ft2yeKYlVVVXp6+po1a5577jlp6dKlS+fNm5eamqrT6XQ6XWpq6vz585cuXWrtViUmJv7nf/5nRkaGVqtNTU39+eefm1uDs7Oz9HK3vLy8VatWxcXFSeUffPBBUlLSwoULr1+/rtVqi4uLd+/ePWHCBAsfAGCPGnqfY2vMmzdP/rxhwwaVSqVQKOq+blJ+156Pj09aWlqT5cbVAh0FoSUAgJ2watZSeXl5Tk6O/OYpAO1BbGxscnLy0qVL1Wp1SEjIM888U11d/dlnn0lL77rrrm+//XbJkiVqtVqtVi9dunTDhg29e/eWlkqdTLmrafJVEIRz587JhZL4+Hh5qVxo8lkQhKFDh86fPz8+Pt7Hx2fVqlV1g1mNbCuRXlenVCqHDBmSmZm5fft2qTwsLOzw4cOZmZmDBw/28PCIi4uT55Oq93BMjggdVHBwsJVqbmROrsrKSovU035YfDDs5cuXS0pK5K8zZ87cvn27KIp1Xzcp/P7Ox9LS0r59+zZZXlJScvXqVcu2FrA2QksAADth1awl6ZZUqeTvJtC+xMbG7t27t7S0tKSk5Pjx46+88orxtNZ33XXXtm3b7ty5c+fOna1bt8pxJeH3Hp3c2zT5KgjCPffcYzKrUUpKSt3NjclLp0yZkpmZWVFRsWHDhurqapOOd+PbCoIwadKk2tpag8Fw48aNlStXGkcWQkND161bp9FoampqLl26tGTJEn9/f5P21/2ADi0/P9/4a3V19euvvx4YGBgcHLxu3bpevXpJ5Vqtdu7cub179+7Vq9fs2bNra2ulcil2uWrVqrCwMOOEGl9f3/Ly8rrBTY1GM3jwYHd398DAwFdeeUWOMTW3HklsbGxsbGyTx2iyucnXV199tXfv3u7u7g899NDBgweN1yktLZ0xY4anp+esWbMaPz+SAwcOmLS/ufXLkpKSHn74YflrcXHx+PHjBUGYMGHCwIEDmzzkRowePXr16tWtqQFoe9wiAwDsgcFg0Ov1gtWylgwGg8DzfwDNlJubO2/evLqdUqDF3n777dra2vPnz1+9etXd3V1Op503b15oaGh6enpGRkZoaKg8qEoKL+bm5qalpRkn1Egb1g1uzpo1a/ny5bW1tVeuXBk9erT809vceuStzIlviqI4dOjQ1NRU6WtqauqwYcPkDT/44IP09PTS0tK5c+c+9thjxu2ZPHnyiBEjcnJyxo0b1/j5kezcuTM9Pd0ksahZ9cv27Nlz11131T2W/fv379ixw7jE1dVVClSZhLQaKu/Tp8+ePXuaPGlA+1LvYxMAADqWmpqajIyMzMxMK9Wv0WgyMjI0Go2V6m8zgiBER0fbuhWwsOnTp69atcrWrcD/Jw+C8/f359K0vfz8fHd3d/PXX7hw4euvv27++n5+fnVf1Wcp999//44dO0RRDAkJMem4hYSEiKIYFBRUVFRUd8PAwMCSkhLpc3FxcVBQkLxIqC+vzeSzzNfX13in/v7+LaunuXbv3j1mzBjp85gxY/bs2SN9zsjIeOSRR3x9fd3d3UeMGGGy3zt37pjU09D5kdbXarUmbW5u/TIvL6+6S/fu3ZuXl9fQJllZWc7Ozk2W375929vbu6FKGvLyyy8vXbq0uVvBsgICAq5cuWLrVtgGWUsAAHtg7dfDkbUEwHyzZ8+WbrULCgpeeeUVWzcHHVJOTo70UyT8HuzIyckRfh/9XS+xFeMf5QF0MTExxt3FgoKCltXTXA8//HBVVdWhQ4cOHTpUXV390EMPSeXTpk0bPnz4xYsXS0tLv/vuO5OtPDw8TEoaOT9CfaPmm1u/rO7ZXr9+fWRkZFBQUEObRERESLcrTZa35lICNkFoCQBgD6w60ZLAXEsAgPbhiSeeWL58uSAIGo0mOTn5j3/8o1T+7LPPJiUlSfGg1atXP/PMM01WJb2LUKvV7ty5c8yYMVLh+PHj16xZk52dLT1TMUe99UjMnGtJsmDBgvnz58+fP3/BggVyYU5OzqBBg7y8vNLS0j799NMmK2no/DSkufXLIiMjc3Nz5a+bNm3q379/z549hX9/EDVixIj58+dfuXJFEITk5GT5GVhD5YIgZGdnR0VFmd8SoD3gFhkAYA/IWgIA2KWAgADjr8uXLy8tLQ0ICOjXr9/WrVuXLVsmlS9cuFCj0YSHh4eHhxcVFS1cuFAqN357oMmbBKUph9Rq9Zo1a9auXSsVvvbaaxqNZsSIEb6+vmPHjl2yZEnL6pHo9XrzE3BGjx5tMBhEUXzwwQflwtWrV8+YMcPX13fu3LnPPvts3TaYTB/e0PlpqP3NrV/28MMPX7p0Sf46ffr06OjouisnJydnZWXFxMQoFIqEhISNGzc2Xi4IwqVLl8aOHWvmSQPaCQW5dgAAO5Cfn3/nzh0/Pz+1Wm2N+nNzcysqKgIDA728vKxRf5tRKBTR0dGnTp2ydUNgSX/+859jYmIYeAVIbt261b179/LycjPXX7RokUaj+eSTT8xc39/f/8SJE127dm1h+xo1cuTIOXPmxMfHW6NyWFBGRsbKlSs///xzi9c8c+bMv/3tb81NXJo5c2ZkZOTs2bMt3h6YLzAw8MiRI46ZdEbWEgDAHpC1BAAA2kyvXr18fHysUbOvr69jxibQoVlrTgoAANqStedakkJLzLWE9uncuXPbtm37+9//buuGAO2CKIrmzxMEtNiiRYusUe37779vjWoBqyK0BADo8ERRlEJL1staYhpvtGfdu3cfM2bMtGnTbN0QoF0oLi6eOHGirVsBAA6E0BL+H3t3H9fUlecP/FyQqCRgEyBpiNZWp2jbqW15qnW1XYtowYcpaIHdtRTFdvoApXWKoHVs7VTAgkNfMnXXAVad6bbFUbNWxY6PrXSwo+Ns20UUFVuVIBANUUIkCUl+f9xf797Jw80DgZvA5/2Hr5tzz/2e770BCV/OPRcAIODRdSWKooKDgwdpCNwQB/5MKBROmDAhLi6O70QA/EJnZyf+uwYAGEooLQEAQMCzWCxjxowZ1ClFmLUEAAAAAOAQSksAABDwRo8ePWHChEEdArOWAAAAAAAcwl9fAQAAXMOsJQAAAAAAh/ARGQAAwAW6rkQwawkCH8fXMEVR3n2Fu3Ogp5HxvQYAABBAUFoCAABwAaUlCDhyudxhO/PF7NEubu4c6Glw9/uHhYV5FBkA/ASPP1K9rqQDgDMoLQEAALhAL7REUFqCwNHR0WHTUl9fb//bVG9vb05Ojkgkeuyxx5qammwOSUxMTExMdHPEq1evTp8+XSwWL1++vLe3l3tcvV7/4osvisXi2NjYlpYWdgeH/emWqqqq8ePHCwQCpVJJt0skEp1OR/3EzVQBAouzSrFH9Hq9+505Kra+ikM8rDh7NK5Lbg7tq+sAMBJgGW8AAAAX6M+g+MUVBs9f/vKXs2fPen14a2trXFwcd5/U1FSr1WrzZVxUVCSXyzUaze3bt6urq20O8egXv+3bt+/atSs0NPTdd99dtWrVRx99xD2uRCLp6Ojo7++vqalhj+WwP93S3t7e3Nx89OjRzMxMo9FICNFoNBRFeT3fCoYxs9n8+9//3s3Op0+f1ul07vfv6+vzNi9v2FSK+/r6ioqKPvvss6CgoNLS0pKSkgsXLpCffkh1d3f/6le/2rlz58svv1xeXk4IUavVqampf/vb36RS6XPPPffBBx+EhobSofLz8w8dOtTW1jZjxow1a9bMnj2bsCq2dB/m+4sjjkPO4hBC6uvr58+fT+wmBf/2t79dt27dn//853Pnzr3xxht/+MMf0tLSuMely9+nTp1yeRl7e3tfe+21Xbt23X///X/84x/Zuwb1OgCMEPhhDAAA4ILRaLxy5UpwcPCkSZP4zmWgKIqKjY09c+YM34nAP8jPz//qq6+mTp3q3eHfffddfn5+Xl6eQqFob29n74qOjlapVMxLm0KMRCK5dOmSRCIhhNy8eTMyMtK7T4YURbW1tSkUCkKIRqOZOnVqV1eXTQd2ZKlUev78eXpctVotlUptxrUvGLFbnG0D0Do7OydOnLho0SI3+587d85gMDz66KPuD/HRRx9FRUV5lZ0LTz31VFFRUWpqKtNi80W+cuXKO3fuvPfeeyKRaP/+/a+88sqNGzeYnrNnz87Ozk5PTz99+nRSUhIhJCcnZ9myZTNmzDAYDIcPHz5y5AhT+dXpdCKRyGQynThx4tlnn+3p6XE4Io0jjjPc3542eymKKi8vv/fee1988cWcnJx/+qd/+td//Vej0cg9bkJCAiHk9OnT3JkQQvLy8sLCwtavX09X0tesWcOMPtjXYWi89tprEydOXLVqFd+JjGgymezkyZPD4OOiF/DDGAAAwAWTyXTjxo3g4GCpVMp3LgOF0pJ/ys/PVygUxcXF3h2+bNmyuLi4vLw8psXZb3QcpaXr169HR0cPvLR048aNn//85zbzLGzGlclk586do8ft6uqSyWQ+KS0ZjUaBQOBF/jDMdHZ2Tp48WafTudl/w4YNarX6ww8/HNSs3MSUlpxViuVy+dmzZ+lvHxsURfX09IhEInZjRESERqNhXkZFRdGV34sXL65cubKxsdFgMMTGxjY0NHBXbJ3F4eBpaYmZI8ze8GJch5xV0ofgOgwNlJb8wUguLWGtJQAAABdCQkLkcvkwqCsB2MjKytq0aZPJZGpvb9+4caPNXo/WWqqurm5ra+vu7t6wYUNGRgZ358zMzMrKSovFotPp6BvivBYSEqJUKk0m08GDB+fMmTOQUAB+RaVSWa1WurRBb9AzEPv7+zmOsqkrEULi4uKsLEwdJCMjY+bMmefOndNqtTt37nQWkL75lCOOm5g4nhrguC6TGeLrADBcobQEAACB7caNG1euXLl9+zbfiQD4EftKKLPQNXvF6/Ly8ra2NrFYnJKSsnz5cvKPa4qZzWZ3JjHRh+Tk5KSnp0+aNEmn05WVlXGPW1ZW1tHRERkZOXPmzIULF7rMk2mx+ZcQUldXl5mZKRaLa2pqamtr3bs8AAFsyZIlFRUVhBC1Wq1UKpcuXcrdPyUlpaampq2tjXkkBU2lUsXHx4eHhzc3N2/evJm9y2HF1lkcDj6p/HKP634F3FklfQiuA8BIgNISAAAENoPB4PXfQgGGq87OTpsW6z+iG4VC4Y4dO3Q63XfffTdt2jT2LkLImTNn3FnBhD7q3nvvPXXqVHd3d3V1NXtRW4fjhoaGVldXazSa06dPX7p06cEHH+Tuz35psystLc1oNOp0ut27d99///2eXigA/2dTKa6oqNBqtVKp9KGHHtq7dy+9VjdhVV1tHpj4+uuvq9XqWbNmSSSSefPmMZXfrVu35ubmSiSS4uLi7Oxs4qpi6ywOB2eVX/sKsk3J2J38aW5WwInzSvoQXAeAkQBrLQEAQGAzmUwmk0kgEIwahceeuoa1lvyTz9da8n9vv/12SUmJQCBITU39j//4D5lMxndGMHwMj7WW+E4EAgzWWvIHWGsJAAAgUIWEhISGhqKuBBBYNmzYYLVaDQaDUqlEXQkAACCgobQEAAAAAAAAAABeQmkJAAAAAAAAPCaTySg7mIcIMALh9gEAAAAAAADwmP0TAwBgZMKsJQAAAAAAAAAA8BJKSwAAAC7cvHmztbX15s2bfCcCADAcmM1mvlMAAABfQmkJAADABYvFYrFY+M4CwF8olUqBQCCRSGbPnm2zi6Ioj0J52t8f0KvJ8J3FoBiMU1u7di2zbbVar1271tzc/Oijj7L7nDhxYunSpWlpaRRFCQQCpVLJ3W4TFgAAeIe1lgAAAFyQSCTjxo0LCsLfYyBgyOXy69evD1LwzMzMurq6tLQ0+11Wq9WjUPb9w8LCenp6HHbW6/WhoaEexR8MVquVu/7iJ3l6weWpeerixYvd3d3My//93/+9fPnyL37xi6amJna3l1566eTJk2KxmBDS2Ng4d+5cnU7H0U4I6e7uvnz58qRJk3yYLfgQ/YXk6X8IXo81NAMBAAd8SgYAgEBlNptv3Lhx+/btwR4oODhYIBCMGoW/x0DA6OjoYL/s6+srKCiQyWRyuXz79u0xMTF0u8lkKi4unjJlSkxMzKpVq4xGI91Oz16pqqoaP348e7bIxIkTKYoymUzp6ek2M1zq6+vt57zo9foXX3xRLBbHxsa2tLSwOzjsL5FIdDod85wppl2tVickJAiFQplMlpeXp9frmSQrKyvDwsIaGxtra2vDwsLYE1vsOTsv9nDMNnf8q1evTp8+XSwWL1++vLe3lyNPJpRWq83NzQ0LCyssLGRnlZiYmJiYyJE2O4hNnszL/Pz8KVOmCIXC5OTk48ePc4/r7OuBduzYMZvr42l8RnV19dy5c5mX06ZNe/bZZ+2rVwaDga4fEUJmzJjBXE9n7YSQpKSkrVu3urxow4NcLh94EOar0R1hYWEDjDOUtR73x+I4LwAYIJSWAAAgUBkMhu7ubo1Gw3ciAP5uzZo1RqOxqanp8uXLQqGQ+a5Zu3atQqFoaWm5cOGCQqFgbjKif1Vrb29vbm6uq6vLzMyk269cuULvsv6EGSI1NdX+F7yioiKJRNLR0dHQ0PDFF18Q1i+BDvvTidkHLywsrKioMBqNra2tSUlJdAmD7mA2m7dt2zZ//vympqZt27YxqTrk7LzYYzHb3PG3b9++a9eu1tZWkUi0atUqjjyZUOnp6bNmzVKpVM8884xNVu78bmy1WqdPn97Y2Ei/bGxsfOKJJ5gDS0tLW1patFptcXHxokWLuMd19vVAO3jwYEtLC/v6eBqfcejQoQceeMDlqV27ds2jdkLI1KlTDx065DLy8OBmpdhZpc9ZxZM4qRh6VOHl5rACS4etr68nP5WYJ0yYwBziZqWV5rBC7ayC7Oy8AMA3rAAAAIGpu7v7woULKpWK70QCCSEkNjaW7yzAVl5eXmlpqdeH5+TkVFVVWa3W6Ohom0960dHRVqv17rvvvnnzpv2BMpmsu7ub3tZoNHfffTezi/xjiYd9FMcHSJtdUVFRzLhdXV32B7rTYrVaJRIJ+6SioqJsOttvuJOhy21nG4SQtrY2uuXmzZtMPs7ypA/p6enhzs2lP//5z3PmzKG358yZc+jQIXr7woULCxYskEgkQqFw1qxZNudiP66zrwe6v8lkYp+sF/EZ4eHhDvdyf0U5ezfZL2/dujVu3Dhn43Z0dAiFQmd77b3//vsFBQXu9x9UTz755IEDB9gtNtfhzTfffPnll7u6uvR6/c6dOyMiItg9Z8+evW3btlu3bh05coRufOGFF7788kuj0djT07Nnz55XX32V6U+/O0aj8ciRIyKRyNmILuM4RAhZv379tWvXbt68mZ+fz/Q/efLk9OnT6W2LxRIfH//dd98xR8XHx8fHx3NHth/IvqW4uPjWrVt79uwJCQnhPq9h49VXX924cSPfWYx0Uqm0tbWV7yz4gbn9AAAQqEwmEyFEIBDwnQiAv1CpVPSGzeIj/f39zg5hd/M59tQALwYyGo30N3hcXNyQTVHxdM1+i8XCLMTGnadIJBpQZoTMnTv3vffea2hoIIT09fUlJyfT7RkZGVlZWbW1tRKJ5MaNGzb3T9mPy/H1QAixv/nX0/gMr7+6zGZzcHAwd7sPv3S/+OKL77//fu/evQKBwOEiYkOJWSVNoVC0t7fT2/S3UnR0tEql+vTTT8+ePUvXMZ977rnnnnuOffjnn39OvyNJSUl0y759+3bs2MF0iIqK+uijjwghFy9eXLlyZWNjo8FgiI2NZdaxcsZZHA65ubkKhYIQ8u67706dOpXuP336dLlcvmfPnvT09N27d//sZz+bNm0ac8jp06e5Y7qptLSUEJKWlkZ/VACAwYYb4gAAIFDR68KEhITwnQiAv1uyZElFRQUhRK1WK5XKpUuX0u3Z2dnV1dX03xu3bt36/PPP+3bczMzMyspKi8Wi0+lqamrcOSQkJESpVJpMpoMHD86ZM4duTElJqampaWtrG7xnNdLjXr9+/Y033nCnf3V1dVtbW3d394YNGzIyMgaSp0d3AK1fv37dunXr1q1bv34906hSqeLj48PDw5ubmzdv3uwyiLOvB2c8jc+YOHEiUxzhMHbsWOZGv9OnT4eHh9MX0Fk7IaStrc2Ha3j39vY+8sgjjz/+eHx8vK9iDhwzJ5f8NNeGrh1zVwbtK31xcXHsmQX0/EFCSEZGxsyZM8+dO6fVanfu3OksILMEm7M47mBXYAkhJSUl69atMxgM77333nvvved+HB9izgsAfGNQ50QBAAAMnsuXL1+4cEGv1/OdSCAhuCHOL/nqhjiGVCplv9TpdK+88kpUVFRUVNQLL7zQ3t5OtxsMhrfeekuhUCgUirfeestgMNDt7A+K7O0DBw44+yTpsL23t3fFihVisfiRRx75/vvvXfa3Wq30DSxCoTA9Pf3ChQt0Y39/f0lJyb333jtu3Li5c+fS18o+SaurG16cnRc9rkAgiIuL++677+xzsz/qhx9+SEhIuOuuu1asWNHb28uRJ8fJ0mJjYz26A+jJJ5986qmn2C179uyZOHHi2LFjU1JSzp07Z5+tzbjOvh6cXR9P4zNWrly5d+9eh2+BzcWn/0gQGRkZHR391Vdfcbdbrdbdu3cXFRU5u0Se3hD39NNP2+TJI5c3xL388surV6+2Wq1dXV179uz5t3/7N2c9ab/97W+rq6uvXbtmNpvZ7VFRUUeOHLlz58533323evVq9rEhISF79uwxGo319fWzZs3ijuMMIeSdd965du2aRqN544038vPz2XtXrFiRnJy8YsUKm6MSEhISEhLcic8eiKPF5XkNG7ghzh+M5BviUFoCAICAZDabL1y4cOHChf7+fr5zCSQEpSW/5PPSkr8xGo179ux58MEH+U4EhlRLS4vLFXm88+qrr3L8/jbMSktuVoqdVfqcVTydVQytnlR4neGowNJaW1tHjx599epVmwM9qrQ6PGVnFVJn5zVsoLTkD0ZyaQlrLQEAQECiV08IDg52uB4HAPiJt99+u6SkRCAQpKamHjt2jO90YEjFxMTcddddgxFZIpH48IY4P9fZ2cl+KRQKt2zZsmXLFptuVieLTwUHB69evZqel8SWlpbGXliKfXhaWpr9/WLO4jjERDt16pTDDgcOHHjllVfYz4ajnTlzxp34NqM4a7Tp4PC8AMAnUFoCAICANJQLLfX09FgsFpFIhDIWgKc2bNiwYcMGvrMA3gzSu/+b3/xmMMLC0GAW+K+srOQ3EwDwFSzjDQAAAWkoHw/X1dXV1dVlNpuHYCwAGCCZTEbZkclkfOcFAP8fcwcN34kAgM+gtAQAAAGJnrU0NKUl+uMv++k2AOC3Ojs77deAsLmlCAB8ApVcAKDhhjgAAAhIQ3lDHF1aYibwAwAAALFbBwoARiyUlgAAICAN2Q1xzIx9lJYAAGCwmc3mzs7OH374ge9EIMDcvn27v7+f7yxg5EJpCQAAAk9/f7/FYqEoaghmLVksFnoDpSUAABhsra2tr7zyCp4aAZ4yGo2pqal8ZwEjF0pLAAAQeOi74UaNGjUE5R7MWgIAgCETExNTVFSEGgF46rXXXps4cSLfWcDIhRVJAQAg8GANbwAfolfe5Wtojl0DzwoVYQAAgCGAD8oAABB4hmyhJYI1vCEwyeVy9zvz+AhwjqF9kpX7QcLCwgY+HAAAwMiEG+IAACDwDOXj4ei1llBagsDS0dHBftnX11dUVPTZZ58FBQWVlpaWlJRcuHCBO0J+fv6hQ4fa2tpmzJixZs2a2bNnE0KUSmVmZqbJZAoLC5s2bVpXVxcdx1k7h/r6+vnz55N/rP709va+9tpru3btuv/++//4xz/aHJKYmEgIOXXqlDtXwGF8+ht58+bNGzdu7OrqqqurS0tLI4RIJBKdTsd8m/NYawMghOTm5oaGhvKdBQSYGzduvP3223xnASMXSksAABB4DAYDIWT06NFDMBZmLcEwsGbNGqPR2NTUJBKJ9u/fr9FoXB5SWlpaVVVlMplOnDixaNGinp4eQkh2dvaCBQt27txpNBoPHTr00ksv0Z2dtXNITU21Wq0231lFRUVyuVyj0dy+fbu6utrmEI8qPg7j0y3t7e3Nzc1Hjx7NzMyk69QajYaiKFSUwB98+umnfX19fGcBAUkikfCdAoxcKC0BAECAMZvNZrOZYK0l+Efbtm17//33+c7CSzdu3Bg1apR9McVNPT09cXFxhBCFQtHe3k430lWV6OholUr16aefnj17lv6t47nnnnvuuee4A168eHHlypWNjY0GgyE2Nlan09Htn3zyyeLFi0NCQiIjI6Oiog4cOMDd7qlPPvnk0qVLAoEgMjLypZdeWrNmDXvv6dOnvQtro7S0lBCSlpZG31oL4Feio6P5TgEAwGMoLQEAQIBh7oYbmnIPZi0Filu3bk2bNm3t2rV8J+KNDz74QCqV5uTkeHf4b37zG3pDpVLRGzZzcPr7+z0KmJGRkZWVVVtbK5FIbty4wazctHDhQqPR2Nvbq9FoPv7447lz53Z3d3O0DwT9nc4Lo9E4NJVrAACA4QGlJQAACDCjR48eP378kN26grWWAkhkZCQ9eSfgSKVShULhdfJisZi7w5IlSyoqKkpKStRq9ddff7179+6PP/6Yo79KpYqPjw8PD29ubv7ss8+YdnpG0sMPPzxhwoSpU6f29vZyt3sqKytr06ZN7777rlqt/uCDD2z2erTWkqdCQkKUSuWCBQuOHDlSWlp64sSJwRgFAABgWML0fgAACDBBQUFjx44dsiVOMWsJApFUKmW/rKio0Gq1Uqn0oYce2rt3b3l5ObOLoij6y5vZIIRs3bo1NzdXIpEUFxdnZ2eTn74F7rvvvm+//TYmJoaiqMzMzLq6Orq/s3YODsctLy9va2v7esxmAAAgAElEQVQTi8UpKSnLly8n//itZzab3a8pO4zPtNj8Swipq6vLzMwUi8U1NTW1tbVujgIAAAAEs5YAAAC4Ya0lCESdnZ3sl0KhcMuWLVu2bLHv6bBYk5aWRj86zaYPPWPIfpVuZ+0cHI4rFAp37NixY8cOh33OnDkzwPjsRpsOaWlpPN6CBwAAENDwQRkAAIALZi0BAAAAAHBAaQkAAIAL1loCAAAAAOCA0hIAAAAXzFoC8I5MJqPsyGQyvvMCAAAAH8NaSwAAAFxQWgLwjs16TwAAADBcYdYSAAAAF5SWAAAAAAA4YNYSAAAAl9DQUIqiQkND+U4EAAAAAMAfobQEAACB5MaNGyEhIeHh4UM2jUgoFAqFwqEZCwAAAAAg4KC0BAAAAcNoNHZ3dwcFBY0bN47vXAAAAAAAgBCUlgAAIIBQFHXXXXfxnQVAoKLn+tHLhw0zFEUN6nlxxPf6qrpzoKfnNdjXAQAAwCEs4w0AAAEjJCQkKioqKiqK70QA/J1cLrdv9EnRISwsbOBBaHq93lehBruewhHf66HdOdDT4O739+H7CAAAgNISAAAAwHDT0dHhZs/8/PwpU6YIhcLk5OTjx4/TjUqlUiAQUBQVHh4+c+bMmJgYul0ikeh0Ouon3JFturFfqtXqhIQEoVAok8ny8vKYGhPdQavV5ubmhoWFFRYWcudDCKmvr7dPxmQyFRcXT5kyJSYmZtWqVUajkR2/qqpq/PjxAoFAqVS6vD4O4/f29ubk5IhEoscee6ypqcnmkMTExMTERJeRaVevXp0+fbpYLF6+fHlvby/3uHq9/sUXXxSLxbGxsS0tLewODvs7O1+P3kcAAACXUFoCAAAAGLlKS0tbWlq0Wm1xcfGiRYvoxuzs7AULFphMpo6Ojrfeekur1dLtGo2GEGL9CXdkq9U6ffr0xsZG+mVjY+MTTzxBH1VYWFhRUWE0GltbW5OSkpgSEr03PT191qxZKpXqmWee4c6HEJKammqfydq1axUKRUtLy4ULFxQKxdq1a9nx29vbm5ub6+rqMjMzXV4fh/GLiorkcrlGozl8+PC+ffvsT9z92UPbt2/ftWtXa2urSCRatWqVy3ElEklHR0dDQ8MXX3xBWNOUHPZ3dr4evY8AAAAu4X5sAACAEYSiqNjY2DNnzvCdiO99+OGHZ8+era6u5jsRb+Tn5ysUiuLiYu8OX7ZsWVxcXF5enkKhaG9vZ++Kjo5WqVTMS5u1eC5evLhy5crGxkaDwRAbG9vQ0EDv3bdv3+LFi00mU2RkZFRU1I4dOxISEhxG4Hbo0KHy8vLDhw8TQpKTk1etWpWcnEwIiYiIoKsbtKioqK6uLiZ+T0+PSCRix+HIx2FWd9999/nz5+ml2bq7ux988MHr16/b93T/XGx6SiSSS5cuSSQSQsjNmzcjIyO9+0RNUVRbW5tCoSCEaDSaqVOnMtfB4bhSqfT8+fP0uGq1WiqV2oxrf0bOznd4r8rU2dk5efJknU7nZv+kpKSCggKmtAoA4B2ZTHby5MlJkybxnQgPMGsJAAAAYJhQqVTMPBR6g11XspeRkTFz5sxz585ptdqdO3cy7QsXLjQajTqd7u9///vzzz8/d+5ch4czN5o5M3fu3Dt37jQ0NDQ0NPT19dF1JUJIXFyclcWmnmJTV3I/H7Yhq5u4vAhuslgsQUEuPpmzb17z4Qn66hQAAGDEQmkJAACAi8VisVgsw/jP+zCSqVSq+Pj48PDw5ubmzZs3M+1RUVGnTp0KCgqaMGHC1KlT2WsAhYSEKJVKk8l08ODBOXPmuBxi/fr169atW7du3fr165nGlJSUmpqatrY2i8XiTp4c+TiUnZ1dXV1N1622bt36/PPPuzOK+7KysjZt2mQymdrb2zdu3Giz16O1lqqrq9va2rq7uzds2JCRkcHdOTMzs7Ky0mKx6HS6mpoab1L/iafvIwAAAAeUlgAAALhcu3attbX1zp07fCcC4AGpVGrTwizYzF65eevWrbm5uRKJpLi4ODs7m/w0L+a+++779ttvY2JiKIrKzMysq6tj4tBL9ojF4pqamtraWpeZJCUl0cXZp59+mml8/fXX1Wr1rFmzJBLJvHnzysrKmCSJ3frf3Pk4PK/3339frVZPmDBhwoQJN2/efP/9923i2/zLwWH88vLytrY2sVickpKyfPlymzhms9mdYjR9SE5OTnp6+qRJk3Q6HXMdnI1bVlbW0dERGRk5c+bMhQsXusyT43w9fR8BAAA4DOe7rAEAAAbuxx9/NJlM48ePHzt2LN+5+ADWWvJPvlprybdZgd8ymUz79+9fu3bt2bNn+c7FH2GtJQDgBdZaAgAA8GtWq9VgMPDy55B77rln8uTJY8aMGfqhAQBsvP322xRFiUSiP/zhD8eOHeM7HQAAAEJQWgIAgIBgMBiuXr36448/Dv3QQUFBQUFBLu+aAQAYAhs2bKBL7UqlUiaT8Z0OAAAAISgtAQBAQOjr6yOEjB49mu9EAMCWTCaj7ARQ1SPQ8wcAAODdKL4TAAAAcM1gMBCUlgD8UmdnJ98pDEig5w8AAMA7zFoCAIAAgNISAAAAAIB/QmkJAAD8ndVqNRqNBKUlAAAAAAD/g9ISAAD4O6PRaLVag4KCQkJC+M4FAAAAAAD+AUpLAADg73A3HAAAAACA30JpCQAA/B1KSwABhH7CGr8ReMeRv0/OLtCvDwAADDMoLQEAgL/r6+sjhIwZM2boh7ZYLDdu3Lh58+bQDw0wEHK5nK+hrVarTYterx9gBC+EhYX5qr+n+RPOU/DJ2bkfxNPrAAAA4AWUlgAAwK9ZrVZ61hIvpSWz2dzd3d3d3T30QwMMREdHB/tlX19fQUGBTCaTy+Xbt2+PiYmh29kzaOy3tVptbm5uWFhYYWEh93C9vb05OTkikeixxx5rampi2tVqdUJCglAolMlkeXl5TI2Gjn/06FGpVBofH3/lyhXvTlOpVAoEAoqiwsPDZ86cyZyXRCLR6XTUT9iH5OfnT5kyRSgUJicnHz9+nLu/s/w51NfX2w/q7PrQEhMTExMT3Txlh/HplqqqqvHjxwsEAqVS6fI6AAAA+NAovhMAAADgYjAYrFZrcHAwL2t401MD8CtZQFCr1T/88MOf/vQnvhPxxqVLlzQajdfJX7t2LS4ujqPDmjVrjEZjU1OTSCTav3+/RqOh261WK/Plbb+dnp6enZ1dWVl5+vRp7gSKiorkcrlGo7l9+3Z1dTXTXlhYWFFRMWPGDIPBcPjw4cLCwo8++oiJf/PmzWvXrn3++edvvvnmnj17vDjx7OzsBQsW7Ny502g0Hjp06KWXXqLbNRoNRVEOp/aUlpZWVVWZTKYTJ04sWrSop6eHo7+z/DmkpqayryTN2fWheTSPyWF8uqW9vb25ufno0aOZmZn0UzU5rgMAAIAP4YcNAAD4Na1Wq1arQ0NDFQrF0I9uMBiuXr0aHBw8adKkoR99MFAUFRsbe+bMGb4T8b20tLTDhw8/8cQTfCfijZaWltGjR997773eHd7a2rpy5cq8vDyFQtHe3s7eFR0drVKp5HL52bNnJRKJ/bHs0oPNdk9Pj0gkcicBiURy6dIlOv7NmzcjIyPpOBEREUwZixASFRXV1dXFxO/u7r7rrrt0Ol10dPTt27edZcVh3759ixcvNplMkZGRUVFRO3bsSEhI4Ihw8eLFlStXNjY2GgyG2NjYhoYGh+fO4Mifm000Z9fHa/bZcryPI/DTfmdn5+TJk3U6nZv9k5KSCgoKFi1aNKhZAcCwJ5PJTp48OWw+NHoEs5YAAMCv8bjQEgOzlgLF+PHjDx8+zHcW3sjPz1coFMXFxd4dvmzZMnpDpVLRGzYFhf7+fpdBLBaLTYubdSUb9HwZWlxc3KFDh1weMmqUl59IFy5caDQae3t7NRrNxx9/PHfuXIe3rxqNRoFAQAjJyMjIysqqra2VSCQ3btxwtiIV09/N/D3Cvj5DjDkvAAAA38JaSwAA4Nfo0tLYsWN5GR03xMHwsGTJkoqKCkKIWq1WKpVLly5ldoWEhCiVyuvXr7/xxhtex8/Kytq0aZPJZGpvb9+4cSPTnpKSUlNT09bWZl+3IoR8/fXXRqPx4MGDycnJ3o0bFRV16tSpoKCgCRMmTJ06tbe3l9lFn5fJZDp48OCcOXPoRpVKFR8fHx4e3tzcvHnzZnYoh/2583efs+tD82itJU85PC8AAADfQmkJAAD8l9lsNplMhJDRo0fzkgBKSxCgpFIp+2VFRYVWq5VKpQ899NDevXvLy8uZXXV1dVlZWQsXLlyxYgX56aud+dfN5Z/Ly8vb2trEYnFKSsry5cuZCK+//rparZ41a5ZEIpk3b15ZWRn7qOjo6MmTJ1dWVv72t79lGpkR3Rn6vvvu+/bbb2NiYiiKyszMrKurY59XZmamWCyuqampra2lG7du3ZqbmyuRSIqLi7Ozswnru9thf+78HXKYv7PrQzObze7fs+Ywvs275vK8AAAAfGsk3n0NAACBore3t729PSQkxOs1aAZIr9erVKrRo0ffc889vCTgc8N7raVz586dP3+e70S8MfAb4uLi4vLy8nyb1aAamWsAwdDAWksAwIuRvNYSZi0BAID/4n2hJcxaAhgMNjNrAAAAIKBhGW8AAPBfflJaAgDfwncWAADAcIJZSwAA4L/8pLSEuRUAhBCZTEbZkclkw3XcQMkHAACAd5i1BAAAfspoNFosFoqi+FrDm6C0BMDS2dk5osZ1xt/yAQAA4B1KSwAA4KdGjRp199139/f381jZQWkJAAAAAIAbSksAAOCngoKCwsLC+M0BpSUAAAAAAG5YawkAAMAplJYAAAAAALihtAQAAOACSksAbvLVN0ugf9Nx5E8v+z148QEAAIYeSksAAABOYdYSBCi5XM7LuPS3jD/E8fR2Wo7+er3e09E58vfJJXI/CO+3FQMAwEiA0hIAAIBTKC1BgOro6GC/7OvrKygokMlkcrl8+/btMTExdDt7Bo39tlarzc3NDQsLKywsdDlifX29/XwcuqWqqmr8+PECgUCpVHLn4yyOM0qlUiAQUBQVHh4+c+ZMJo5EItHpdNRP2Ifk5+dPmTJFKBQmJycfP36cu79arU5ISBAKhTKZLC8vz50ak8P8e3t7c3JyRCLRY4891tTUZHNIYmJiYmKiO+frLL6z68xxHQAAAHwIpSUAAACnUFqC4WHNmjVGo7Gpqeny5ctCoVCj0dDt7Mkv9tvp6emzZs1SqVTPPPOMyyFSU1Ptp9LQLe3t7c3NzXV1dZmZmdz5OIvjTHZ29oIFC0wmU0dHx1tvvaXVaul2OqD1J+xDSktLW1patFptcXHxokWLuPsXFhZWVFQYjcbW1takpCR3SmwO8y8qKpLL5RqN5vDhw/v27bPZa5+kp/GdXWeO6wAAAOBDFH7MAAAAOKNWq7VarUQiiYiI4DsX36AoKjY29syZM3wn4nszZ848e/ZsRkYG34l44y9/+YtQKHz00Ue9O7yxsfGXv/xlXl6eQqFob29n74qOjlapVHK5/OzZsxKJxP5Yivq/T4M22z09PSKRyKNM2BE44nPk4yyOQ/v27Vu8eLHJZIqMjIyKitqxY0dCQgJHhIsXL65cubKxsdFgMMTGxjY0NDg8d0ZERAS77BUVFdXV1eUyK/toEonk0qVL9PnevHkzMjJygJ/A3bzODnuOBJ2dnZMnT9bpdG72T0pKKigoYEqNAADekclkJ0+enDRpEt+J8GAU3wkAAAD4rxH4K1ngun37dl9fX4B+nmtqagoPD/c6+e+//57eUKlU9IZNQaG/v99lEIvFYtPiaV3Jfe7k446FCxcajcbe3l6NRvPxxx/PnTu3u7vbvpvRaBQIBISQjIyMrKys2tpaiURy48YNZytSMf3j4uIOHTrkk1TZwX0b0KOh6fMCAADwLZSWAADA7/T29ppMptDQUN5/CwoLCxs9evSYMWP4TQPcNHr06KKiIr6z8EZbW5tCofA6+fPnz3N3WLJkSUVFRUlJiVqt/vrrr3fv3v3xxx/Tu0JCQpRK5fTp00tLS70b3Qsc+XgkKirqwIEDDz/88IQJE6ZOndrb28vsos9rwYIFR44cKS0tPXHiBCFEpVLFx8eHh4c3Nzd/9tln7FAO+6ekpNTU1DzzzDPR0dFBQd6vI5GVlbVp06Z3331XrVZ/8MEHNnvphZZOnTrldXwODs8LAADAt7DWEgAA+J1bt26p1Wr2b4l8GTt27Lhx40aPHs13IgCekUql7JcVFRVarVYqlT700EN79+4tLy9ndtXV1WVlZS1cuHDFihXkp5XFmH/dX/6Z6WmzHLjDfznycRjHmfvuu+/bb7+NiYmhKCozM7Ouro59XpmZmWKxuKampra2lm7cunVrbm6uRCIpLi7Ozs4mrJXUHPZ//fXX1Wr1rFmzJBLJvHnzysrKvLsO5eXlbW1tYrE4JSVl+fLl7HEJIWaz2f0Jkh5dZ2fnBQAA4Fsj8e5rAADwc7du3ert7Y2IiEBNx+eG8VpL06ZNu3r1KrOQc2DJz89XKBTFxcXeHb5s2bK4uLi8vDzfZgUQoLDWEgDwAmstAQAA+JFx48aNGzeO7ywAAAAAAMA13BAHAAAAAAAAAABeQmkJAAAAAFyTyWSUHZlMNlzHDZR8AAAAeIcb4gAAAADAtc7OzhE1rjP+lg8AAADvUFoCAAAAAACAQfTNN9989dVXfGcBMFC//OUv77rrLr6z8EcoLQEAAAAAAMAg+vLLL//0pz8lJyfznQiA96qqqp577jmUlhxCaQkAAMCp/v5+q9UaHBwcFITVCQEAALw3Y8aMsrIyvrMA8N62bdv4TsF/4YMyAACAUx0dHT/++GNvby/fiQAAAAAA+CmUlgAAwF/09/frdDqz2cx3Iv8n6Cd8JwIAhBBCURSPQ/M4OgAAgD/DZ2UAAPAXvb29169fv379Ot+J/J/o6OjJkycLhUK+EwHwjFwuH3gQvV7vfuewsLDBjkMIsVqt7ofyaFyX3BzaV9cBAAAggKC0BAAA/oL+vSs0NJTvRAACXkdHB/tlX19fQUGBTCaTy+Xbt2+PiYmh2+mZOFqtNjc3NywsrLCwkG5Xq9UJCQlCoVAmk+Xl5bFrIvn5+VOmTBEKhcnJycePH6cbJRKJTqejfsJ05ojjkLM4hJD6+nqbRvplZWVlWFhYY2NjbW1tWFiYUql0OW5iYmJiYqI7l7G3tzcnJ0ckEj322GNNTU3sXYN6HQBgCAxkHmIgzmEMxJwhgKC0BAAA/gKlJYBBsmbNGqPR2NTUdPnyZaFQqNFo6HZ6Jk56evqsWbNUKtUzzzxDtxcWFlZUVBiNxtbW1qSkJKbkRAgpLS1taWnRarXFxcWLFi2iG+mA1p8wnTniOOQsDiEkNTXVpoV+aTabt23bNn/+/Kampm3btmVmZroc1z64M0VFRXK5XKPRHD58eN++fexdg3odAGDglEqlQCAICQkZP34885/b8IN7dcFPUB7NKwYAABgkfX19165dCwoKmjx5Mt+5DGcURcXGxp45c4bvRHxv2rRpV69e1Wq1fCfijfz8fIVCUVxc7N3hy5Yti4uLy8vLUygU7e3t7F3R0dEqlUoul589e1YikdgfS1FUT0+PSCRiN0ZERDDlJ0JIVFRUV1cXIeTixYsrV65sbGw0GAyxsbENDQ3MJ0mKcvCp0lkcDg7jONvLvLTZ8GJchyQSyaVLl+jrdvPmzcjISHqUIbgOMBCdnZ2TJ0/W6XRu9k9KSiooKGBKhDAYysrKVCpVVVXVkI0oEAjq6urS0tKGbERCSHR0tM1/wkOA+7/NAeLljFziKyuZTHby5MlJkyZ53WEYw6wlAADwC/SUpbFjx/KdCEAAU6lUzHwZekOlUhFC+vv7OY6yqSsRQuLi4qwsTB0kIyNj5syZ586d02q1O3fudBbQaDRyx3ETE8dTAxzXZTJDfB0AwAsmk2mI60qEEJfrRRoMhqHJxFf8agVMxqBmFXDvkZ9AaQkAAPzCnTt3CO6GAxgcS5YsqaioIISo1WqlUrl06VLu/ikpKTU1NW1tbRaLhd2uUqni4+PDw8Obm5s3b97M3hUSEqJUKk0m08GDB+fMmcMdh4PDOJ7iHtf9tZaysrI2bdpkMpna29s3btzItA/BdQAY9lpaWhYvXiwWi8eOHTtr1qyjR48yy8ARQs6dO/fss88qFAqFQpGent7S0sLsom8B0+l0zz77rEAgEAgE9CJrjIkTJ9L3iDELn82ePZvd4eLFi87uI9uzZ8/9998vEomWLl2q1+vtuzk79mc/+5nNoDZ96urqFArFmDFjRCLRvHnzmOnDdM8tW7bQy8aVlJQIhUKbM3LpypUrTz311KhRo+yvBkfO9D2DFEWNGzcuPT39+PHjP//5z90/I473iLDu1Dt06NAjjzwSExNz4MABZ9Hol/fff7/LM+XIymVk5itn8eLFQqHwgQce2LVrFzu4s/cI3GIFAADgm8ViuXjx4oULFwwGA9+5DHOEkNjYWL6zGBQPP/zwuHHj+M7CS3l5eaWlpV4fnpOTU1VVxW6RSqXslzqd7pVXXomKioqKinrhhRfa29vpdmcfC/v7+0tKSu69995x48bNnTuXyW3Pnj0TJ04cO3ZsSkrKuXPn2Eft2bMnJCREKBSmp6dfuHCBOw4Hh3Ecpmq/bf1puhb3uLGxsfHx8W5cV6tOp8vOzhYKhdOmTfvuu++YUYbgOsBAdHR0CIVC9/s//fTTe/fuHbx8wGq1lpaW5uXlMS+bm5vvvffe3//+9yqVymg0Xrt27d///d8jIiKYvQkJCZcvX6Zf/vDDD9OnTz9//jxzOCHk5ZdfPnHihMViob/p7Ed0+auufYeTJ08++OCD//M//9PX13fy5El6WTQ3j+VuP3bsWGpq6t///ne9Xt/T0/Pll18+/vjjp0+fZo564403du3aFRkZ+eabb+7atcvhGXGcyLx58/72t79xXA2HuYWEhOzZs8dqtZrN5q6urj/+8Y9RUVFunpHL94g+9sMPP/zNb36jUqksFsuSJUvo9s8///zZZ59l99Tr9ZMmTVKr1W6dsPOsXEYmhLzzzjsHDx68c+fOlStXnnzyySNHjtC7uN8jmlQqbW1t5UjMZYdhDKUlAADgX29v74ULF5gPKDB4UFryTz4vLQGMZCgt+SGb0tKiRYt27NjhrPPChQvr6+vZLfX19b/4xS+Yl4SQnTt3sl/aB/GitDRv3rwvvviCebl7925flZaefPLJH374gd3y/fffz5kzhznq1q1b9Mbt27fdSd5m0G+//daL3MLCwg4ePEgPzRHcYbvL94g+9tChQ8zL/v5+ZnvGjBl//etfmZeVlZVvvfUWRxpuZuUyMiHkv//7v5mXp06dSkpKore53yMaSksccEMcAADwD8+GAwAAGDmOHz+ekpLCsffxxx9ntyQmJh47dozd8txzz/k8q7/97W/scZ966ilfRT516tR9993HvmNr2rRpjY2NTIfw8HB6IywszIv4jzzyiBdHffPNN+Xl5VFRURMnTpw/f/6SJUvcX8PInfeIEJKcnMxsBwcHM9sbNmxYs2YNvW0wGH73u9+99dZbXpyCPZeRZ82axWxPmzbt1KlT9LbL9wi4obQEAAD889vSUldX1/Xr100mE9+JAAAADB9ms9nhUkcMK+dtsAFn7NixNjNirFZrb28vv1k9+OCDR48eNRgMV65cOXDgwK5du1asWOH+4QN5j/75n/85ODj46NGjhJDa2tr58+fLZDL3h/ZhZIFAQG/453sUQFBaAgAAnpnNZvphHH74eDidTqfT6QL64yyAv5HJZJQdX/1SAQAB4Yknnvj888+d7Z09e/Y333zDbjl58mRSUtJgZxUfH3/69Gnm5ZEjRwYYkHnW2Pz58//rv/5rgNGGQH19PXcH5owG/h5t2LDh7bffNhqNH374YVFRkaepOszKncjsiUjff/99XFwcvR0o75HfQmkJAAB4Rj8bTiAQjBo1iu9cbKGoBOBznZ2d9ms0dHZ28p0XAAydkpKSX//61/QKynfu3GlpaampqVm+fDm9d+PGjWvXrm1sbOzv7+/v729sbFy3bh37KY2D5N13333rrbcuXLhgMpkaGxu/+uorTyPQz4gkhFy/fr2qqmrGjBl0e2lpaXV19fvvv//jjz+aTCaNRvPnP/95/vz5Pj4BD0VFRe3du7e7u5t+2djYGBISYtPH2RkN/D2Kj48fP358RkbGnDlzoqOjPcrcWVbuRL58+fKhQ4cMBsO1a9cKCwvfeecdut0/36MAgtISAADwjJ5s7Id3wzG4J+0DAACARxITE5VK5caNG8VicXR09PPPP9/X1/e73/2O3vvAAw988sknZWVlYrFYLBZv3Ljx008/nTJlCr2Xefa8w5eEkO+//97m+fSpqanMXvbz6W2eVT99+vR169alpqbeddddVVVV9oUSjmNpdXV1mZmZQUFBjz/++KVLl/bv30+3jx8//i9/+culS5cSEhJEItGMGTOOHz++fft2Z6dD3P7s4fJqcOR83333RUdHv/rqq9HR0XFxcVlZWXV1dTbxnZ0R93vEzsThhaK988479fX1xcXF7pypO1m5E/nVV1/dvXt3ZGTk7NmzX331VaYsxfEegTv87u/DAAAw0tClJaFQyHciDmDWEgAAwGBITEw8fPiws70PPPCAszvmbH402/+knjZtGsePb+6f7IsXL168eDG9rVarbRbVdvmpIC0tzWg0OtylUCgc1inYMZlt9z9+uLwaHKHoFaw//fRTjvgcZ8TxHnGPyzh9+vQLL7xwzz33uOzpflYuI48aNWrr1q1bt2613+XsPQJ3oLQEAAB86uvrM5vNQUFBfrjQEgOzlgAAAEaU9vb29evXFxYW8p3IsGU2mysqKuwnHPlzZOCAG+IAAIBPzN1w/lm+waHhWJEAACAASURBVKwlAACAkeODDz6g79569NFHH3744V//+td8ZzQM0Vd41KhR586dmzx58pBFtr9bEHwIs5YAAIBPer2e+OvdcAx8CgEYAvQ32tDUcymKQuEYAOytWrVq1apVfGcxzA3ef7/ckfHf/qDCrCUAAOCN2Wzu6+sj/lpawkcQCFxyuXzgQejKr5tsViTxIs5Qfse5PxbHeQEADLaJEydSTkycOJHv7HxvpJ3vcILSEgAA8Ia+G27MmDHBwcF858IFs5Yg4HR0dLBf9vX1FRQUyGQyuVy+ffv2mJgYup3+vK7VanNzc8PCwphVRdRqdUJCglAolMlkeXl57NpQfn7+lClThEJhcnLy8ePH6UaJRKLT6ewfA8QRx5mrV69Onz5dLBYvX76c/i+CybO+vp4QUl9fT1HUhAkTmEMSExMTExPdvDL04Tbf1HRLVVXV+PHjBQIB/UxrjvMCABgaV65csTpx5coVvrPzvZF2vsMJbogDAADemEwmiqJCQ0P5TsSx4Tprqb+/v7u7m+8sfM9sNlut1gA9NYPBcOfOHa+T535QDiFkzZo1RqOxqalJJBLt379fo9HQ7VarlaKo9PT07OzsysrK06dP0+2FhYUVFRUzZswwGAyHDx8uLCz86KOP6F2lpaVVVVUmk+nEiROLFi3q6ekhhGg0Goe3mHHEcWb79u27du0KDQ199913V61aRfc/efLkm2++ST8+PCUlJT4+vra2ljnEo2/V1NRU+qzZjXRLe3t7c3Pz0aNHMzMz6Uvq7LwAAACADT8sAQCATxaLhRASFOSPs2gtFktraysh5Gc/+9mwmbAwbE4E2EJDQzdu3JiXl6dQKNrb29m7oqOjVSqVXC4/e/asRCKxP5aiqJ6eHpFIxG6MiIhgyk+EkKioqK6uLkLIxYsXV65c2djYaDAYYmNjGxoamE+SDkswzuI4Q1FUW1ubQqEghGg0mqlTpzL909PTly5dmp6evmvXrt27d3M/Ldsl+2zZLc62IVB0dnZOnjxZp9O52T8pKamgoGDRokWDmtUI96tf/erYsWOzZ8/mOxEA723duvWvf/3rz3/+c2cdZDLZyZMnJ02aNJRZ+QnMWgIAAD75Z1GJNix/n6Qoas6cOYcOHeI7Ed+bNm3a1atXtVot34l4Iz8/X6FQFBcXe3f4smXL6A2VSkVv2BRE+vv7OQ63qSsRQuLi4hx+kWRkZGRlZdXW1kokkhs3bjhb0cloNAoEAo447rBYLOz/H0pKSpYsWTJ//vz33ntv9+7d3sUcIOa8AMBT7e3tHR0d33zzDd+JAHjPaDS6X7MeaVBaAgAAcAEzfSDQLVmypKKioqSkRK1Wf/3117t37/744485+qekpNTU1DzzzDPR0dHs+o5KpYqPjw8PD29ubv7ss8/Yh4SEhCiVygULFhw5cqS0tPTEiRMccThUV1evWLFCKBRu2LAhIyODaZ86deoTTzyxcOHCxx9//P7772cfQi+0dOrUKXfie8rheQGApx555JHIyMiqqiq+EwHwnkwmk0qlfGfhp/z3b8UAAAD8GpazlmCEsPnsW1FRodVqpVLpQw89tHfv3vLycrqdLpvaL1P9+uuvq9XqWbNmSSSSefPmlZWV0e1bt27Nzc2VSCTFxcXZ2dmEVXitq6vLzMwUi8U1NTXMQkjO4jhEh8rJyUlPT580aZJOp7Ppv3r16hMnTqxbt87mQHqZLTevDHOm7FNmWmz+dXZeAAAAwIZZSwAAAFwwZQkCUWdnJ/ulUCjcsmXLli1bbLo5q8gEBwevXr169erVNu1paWlpaWkOD09LS7NfTdxZHIeYaM7mHx04cOCVV15hPxuOdubMGXfi24zirNGmg8PzAgAAADaUlgAAAByjf8NEaQnAHzDfiZWVlfxmAgAAADZwQxwAAIBjuCEOwH9Yf8J3IgAw6Dj+qGNz967P4wOAd1BaAgAA4IIPoAC+JZPJKDsymYzvvABgqDl7yiRHEdkn9WX3g4SFhQ18OICRAKUlAAAYakaj0WKx8J2Fa5gfATAYOjs7rXZsFocCgJGgo6PDpqW+vt5+XlJvb29OTo5IJHrssceamppsDklMTKQfE+kOh/HplqqqqvHjxwsEAqVSSbdLJBKdTmf/oAMAsIe1lgAAYKip1eo7d+7IZLKA+GMgPk0CAAAMjdTUVKvVavOTt6ioSC6XazSa27dvV1dX2xzi0d+BHManW9rb25ubm48ePZqZmUkv3q/RaCiKwt+ZANyB0hIAAAwpq9VKPyl8zJgxfOfiQkhIiEKhQGkJAADAhxQKRXt7O71N/5CNjo5WqVTO+n/yySeXLl0SCASRkZEvvfTSmjVr2HtPnz7tk6xKS0sJIWlpaSaTyScBYfjp6+uLjY0NCnJ675dWqx3KfPwKSksAADCkKIq65557TCZTSEgI37m4EBQUFBoayncWAAAAwwpTRfJiThA9n4gXRqNRIBDwNTr4g9GjR//pT3+aMGECRx/uvcMYSksAAMAD/68rAQAAgD/IysratGnTu+++q1arP/jgA5u99EJLp06dGoyhQ0JClErlggULjhw5UlpaeuLEicEYBQIFRVETJkyYNGkS34n4IyzjDQAAADBCBdzatDxmG3DXCsD/SaVSmxbmG439HVdeXt7W1iYWi1NSUpYvX07+8b8C+i57N0d0GJ9psfmXEFJXV5eZmSkWi2tqampra708T4ARALOWAAAAAIYbuVx+/fp1l93sl7MdDHq93v17S8PCwnp6epzt9ejeGY/GdcnNa8WRv2/zARgG7B8N6fB7XCgU7tixY8eOHQ77nDlzxv0RHcZnN9p0SEtL4/EWPIAAgllLAAAAAMONzSO9+/r6CgoKZDKZXC7fvn17TEwMe++xY8dsHrlNCMnPz58yZYpQKExOTj5+/Djd6OwR3Xq9/sUXXxSLxbGxsS0tLcx0ALVanZCQIBQKZTJZXl6eXq/nTpvjUd/2jwynX1ZWVoaFhTU2NtbW1oaFhdEpcY/r/qPKOR557vD6OMvf0+sAAAAQWFBaAgAAABjm1qxZYzQam5qaLl++LBQKNRoNe+/BgwdbWlro+z6YxtLS0paWFq1WW1xcvGjRIrqR/ns+/Yhudv+ioiKJRNLR0dHQ0PDFF18wPQsLCysqKoxGY2tra1JSUmFhIXeedGLWn7B30Y8MZ7fQL81m87Zt2+bPn9/U1LRt2zY6Je5x7YM7wzzy/PDhw/v27WPvcnh9nOXv6XUAAAAILB6vyQ8AAACBKygoaM6cOYcOHeI7Ed+bNm3a1atXA/S5v/n5+QqFori42LvDly1bFhcXl5eXx36kN41+pLdcLj979qxEIrE/lqIok8k0atQownpa08WLF1euXNnY2GgwGGJjYxsaGphPjOwnOjHbUqn0/PnzdHy1Wi2VSun2iIgIdhkrKiqqq6uL+1y4nxhls5d5abPhxbgOSSSSS5cu0ed18+bNyMhIj64Pw1f5gJs6OzsnT56s0+nc7J+UlFRQUMCUCGEwlJWVqVSqqqoqvhMB8J5MJjt58iSW8XYIs5YAAAAAhgmVSsXMl6E36Id89/f3cxxF15XYMjIyZs6cee7cOa1Wu3PnTpfjsm/+YhdW4uLirCye1lO8XuJkgOO6TMbN68McMhj5AAAA+A+UlgAAYChYLJY7d+7wnYVnLBaLXq8PuLQB7C1ZsqSiooIQolarlUrl0qVLufurVKr4+Pjw8PDm5ubNmze7jJ+ZmVlZWWmxWHQ6XU1NDdOekpJSU1PT1tZmsVjcTJV+1LfJZDp48OCcOXPcPMoG97jur7VEP/LcZDK1t7dv3LiRaee4Pg7z9+I6AAAABBCUlgAAYCjodLq2tjZ6AkWgMBqNKpXK/vk1AP7P5pHeFRUVWq1WKpU+9NBDe/fuLS8vp9udPXJ769atubm5EomkuLg4Ozuboyf9b1lZWUdHR2Rk5MyZMxcuXMiM+/rrr6vV6lmzZkkkknnz5pWVlbnM3Nmjvu0fGW7zjHD2zCnucd1/VLmzR547uz7O8vfiOgAAAAQQrLUEAABDQaVS6fX6iIgIh6u9+CeDwdDZ2Tlq1Kjo6Gi+c/EZrLXkn3y11pJvs/KCyWTav3//2rVrz549y3cuMHJhrSU/hLWWYBjAWkscMGsJAAAGXX9/P/2w7bCwML5z8cDo0aPvueee4VRXAhg8b7/9NkVRIpHoD3/4w7Fjx/hOBwAAAIYOSksAADDoenp6CCFjxowJCQnhOxcAGBQbNmywWq0Gg0GpVMpkMr7TAYCRgrlJ1uEuL44avDhexAcIFCgtAQDAoKNLS4E1ZQkABolMJqPsoBoFMALJ5fKBB+FY4MW7XYMXZ+BB8FEK/BZKSwAAMLiMRqPBYKAoCp+HAIAQ0tnZabWD9fIBRqCOjg5mmyk0O3yZn58/ZcoUoVCYnJx8/Phxl5Hr6+vt5xP19vbm5OSIRKLHHnusqanJnQy9iOP+Myidxadbqqqqxo8fLxAIlEol3S6RSHQ6nc2VAfATKC0BAMDgoqcshYaGBgcH850LAAAA+COr1Tp9+vTGxkb6ZWNj4xNPPMFM5yktLW1padFqtcXFxe4suJ6ammo/FaioqEgul2s0msOHD+/bt8+drLyIQ5fL3QnuLD7d0t7e3tzcTD90km7XaDRMfDyMC/wNSksAADC4bt++TTCFGwAAAAghhCgUCmbeDb2hUCgIIevXr1+3bh3dZ926devXr6e3L168+C//8i8RERFisXj9+vXuP/vPxieffFJYWCgQCCIjI1966SWv8+eOc/r06dOnT3sdnFFaWhoeHp6WlmYymQYeDWCwobQEAACD6M6dO/39/UFBQSKRiO9cAAAAgH8qlYqZd0NvqFQqQsjcuXPv3LnT0NDQ0NDQ19eXnJxM98/IyJg5c+a5c+e0Wu3OnTt9koPRaPSrOIE1NIA9lJYAAGAQ0XfDiUQiLAoA4If8asGOoUzGf84aANjoiUvsKUuEEJVKFR8fHx4e3tzcvHnzZq+DZ2Vlbdq0yWQytbe3b9y4cZDieLTWkqdCQkKUSqXJZDp48OCcOXMGaRQAL6C0BAAAg8VqtdKz1nE3HMAQc/O5S0OzWoder3en21AuHYLnMQH4A6lUatOSlJRksVisVuvTTz/NNG7dujU3N1cikRQXF2dnZxNWddjmxjrmEIft5eXlbW1tYrE4JSVl+fLlxI0qsxdxzGaz+//DOIzPtNj8Swihl14Si8U1NTW1tbVujgIwBFBaAgCAwaLX681mc3Bw8NixY/nOxRsGg0GlUnV1dfGdCIDH2M9dIoT09fUVFBTIZDK5XL59+/aYmBj23mPHjtk8h4g4eR6Ts+cW6fX6F198USwWx8bGtrS0ML8jqdXqhIQEoVAok8ny8vLcqTFdvXp1+vTpYrF4+fLlvb297HHr6+vJTw9UmjBhAnMInscEEKAcPhryq6+++vLLL9ktaWlpP/74o16vr6+vnzp1KnsRa5tnTTKHOGwXCoU7duzQ6XTffffdtGnT3FkM24s4Z86ccX+tJYfx2S9tdqWlpRmNRp1Ot3v37vvvv9/NUQCGAEpLAAAwWG7dukUICQsLC9Bfycxms16vv3PnDt+JAAzUmjVrjEZjU1PT5cuXhUIh/ZghxsGDB1taWtjPISJOnsfk7LlFRUVFEomko6OjoaHhiy++YHoWFhZWVFQYjcbW1takpKTCwkKXqW7fvn3Xrl2tra0ikWjVqlV048mTJ6dPn56amkoISUlJiY+PP3DgAHMInscEAADALwo/JgEAYDD09/f/8MMPhJCJEycKBAK+0/GGXq9XqVSjR4++5557+M7FZ4KCgiZOnMiuIAwb//mf/3n79u033niD70S8cfjw4bCwsOnTp3t9+LJly/Ly8hQKRXt7O3tXdHS0SqWSy+Vnz56VSCT2x1IUZTKZRo0aRW/TnwwvXry4cuXKxsZGg8EQGxvb0NDAfGJk+rC3pVLp+fPn6fhqtVoqldLtERER7DJWVFQU9zRAiqLa2troZ0VpNJqpU6cy/dPT05cuXZqenr5r167du3d/+umn3l0r+7PgOC+HPcH/dXZ2Tp482f3niCUlJRUUFLjzSHvwWllZmUqlqqqq4jsRAO/JZLKTJ09OmjSJ70T8EWYtAQDAoLh9+zYhZOzYsQFaVxquKIrC2jHDmLPnLvX393McRdeV2Dx9HhN7ZiK7EBMXF8e+18Oj20stFktQ0P99Ui0pKVm3bp3BYHjvvffee+899+P4EJ7HBDD8yGQyyo5MJuM7L4AAY/tJAgAAwCfou+HCw8P5TgT+AUVRcXFxZWVlfCfie/X19UajMUBPrbe3V6FQFBcXe3e4w/VK2JYsWVJRUVFSUqJWq7/++uvdu3d//PHHHP3Zz2P67LPPXCaQmZlZWVm5fv16vV5fU1PDtKekpNTU1DzzzDPR0dHsOhGH6urqFStWCIXCDRs2ZGRkMO1Tp0594oknFi5c+Pjjj9usMEIvtHTq1Cl34nuKfh7TggULjhw5UlpaeuLEicEYBQD44vL/TwBwB2YtAQCA7+n1+v7+/qCgIEyQAeCFzXOXKioqtFqtVCp96KGH9u7dW15eTrc7ew6Rs+cxOfu3rKyso6MjMjJy5syZCxcuZMZ9/fXX1Wr1rFmzJBLJvHnzuAt/dKicnJz09PRJkybpdDqb/qtXrz5x4sS6detsDsTzmAAAAPiFWUsAAOB7gb6AN0Cgs/k7vFAo3LJly5YtW2y62TxQidlOS0tLS0uz3+Wsf2hoaHV1dXV1tclk2r9//4MPPki3BwcHr169evXq1e7kzAR0Nv/owIEDr7zyCvvZcLQzZ864E98+bYeNNh3o5zG5Hx8AAGAEQmkJAAB8rL+/n35k+Lhx4/jOZUCwdi+A+95+++2SkhKBQJCamnrs2DGfx2fq1JWVlT4PDgAAAAOBG+IAAMDHKIoSi8VCoXD06NF85wIAQ2TDhg1Wq9VgMCiVysFYAZdZC9znkQEAAGCAUFoCAAAfCw4OjoiIiI6O5jsRAPBHeB4TAAD5xxXffGXt2rXM9qeffhocHExRlEAgUCqV9kNTFHXXXXc1Nze7bGeHBXAIN8QBAABwwXJRAL6F5zEBAE0ul1+/fn2Qguv1+tDQ0EEK7hNWq9W3nzEuXrzY3d3NvHzttdf279///9i7+7gmrnx/4DMEwkMSJAESQkCqrWjr1lZR1F65uy4+Aaut1Iqve8Wl2u7ttqLddlFqLb/aVsVC613Z7X2x4Avq1lp8aNatootWduUWerXdu68uoqjoShOeIiFACJCn+f0x19nZhIQAgUnC5/2Hr5kzZ875zkFx8s2ZMykpKUqlMiMjw2bZOEeTQIcs7+rqunPnzvTp090YLfgYpJYAAAAAvNvAwMDt27f//Oc/cx0IgEfQarV4dtIrtLW1sXfpPMuhQ4cOHDjQ0dFRUVHBvE8gOzu7qqpKpVI99dRTu3btWrp0KV35ww8/zMvL++Mf/3j9+vVXX331yJEja9eu1Wg0qamp33zzjVQqfe65595//312jikxMZFw/LoAm2CIB6kWm137eJg6XV1dr7/++vHjx1966SX6dZwDAwM7d+787LPP/Pz89u/fv2/fvps3bzIdXbp0adOmTcNer5P2GSUlJStWrGB2tVotvZGWljZ37txhfhhOJScnFxcXHzhwYCyNgG9DagkAAADAu/3tb3/7/PPPS0pKuA4EwCNQFIX3+nkjehZPS0tLQ0PDl19+yZ5os3///qKiIpPJdPny5TVr1vT29tKVLRZLWVlZWlpaVlZWWVkZfUpOTk5hYeFTTz01ODh44cKFnJyc3/zmN+xeXAxm8eLFH374Ib1bW1v7+uuv19bWOoqHiT89PX3Tpk0HDx68evUqXXnXrl1Go7G+vl4oFJ45c4bJ+NDOnTvX2NhYVVXl/HqdtM+oqqp64YUX7K/lyy+/PHv2LLskODiYTlQFBASwU1qOymfNmvXuu+8itQROkMjoAwAADKmvr6+lpSUoKMj+Zefey9/fPzMzs6ysjOtA3G/OnDnNzc06nY7rQEYjOztboVDk5uaO7vTnn38+ISFh69at7o0KwEu1t7c//PDDer3exfrJycnbt29fs2bNuEY1yeXn56vV6qKiIoIgFApFS0sL+2h0dLRarSYIgiT/8fmU2b5169Zrr71WW1s7ODg4b968mpoaZibRkBvh4eHs9E1kZGRHR8coYq6qqiooKLhw4QJBEMuXL9+xY8fy5cudxEMH0NvbKxQK2e3I5fJr165JJBL7LkiSNJlM/v7+rlyvo/YZU6ZMUavVNkcvXrz4gx/8ICoqashTmpubH3nkEftUrE15T0/P1KlTvfR/WDeSyWR1dXV4MHBIWMYbAAAAAAAAJoharWZe+Ehv0HklR9avX79kyZLr16/rdLrjx48P235CQgLFMrq8EkEQK1as6O/vr6mpqampGRgYoPNKw8Zjn/cxm81OeqHzSmwjbZ9hP2vkyJEjcXFxjvJKBEFMnTrVZDK5Uo4pKeAcUksAAABDw10UAAAA59Rq9fz580NDQxsaGg4dOjRs/ZSUlNLSUpVKZbVa7Y8mJibSyy25Ys+ePXl5eXl5eXv27Bl1POvWrSssLCQIQqPRKJXKjRs3Oq8/0vYZcXFx7OlgJ06cePzxx2fMmEH88ztJkpKS8vLympqaCIJQKpUBAQHOywmCUKlUmKoDzmGtJQAAAACvt3Pnzry8PK6jAPAIQyYUwANJpVL2Lp3+oJ8LY28XFxdv2bKlo6PjRz/60Ycffrh//34mUWL/TBxBENu2bXv//feTkpK6uroWLly4dOlS9uPGFovFz8/VCRbJycnvvPMOSZI//vGPmcIh42HHTFdj4iksLMzJyaEvNjU1lVl7e0TX66R9xooVK27cuBEfH0/vZmVlGQwG+4tSKpWvv/56QkJCd3c3vaaS83KCIG7cuLFy5UoXBw0mJ6y1BAAAbmA0GlUq1ZQpU8LDw7mOxW30en1rayvWWvIWk3mtJY1GQy/yCgA0kiSnTZvmYmWstTQB2GstwTi5efPmr371K/aa5e7yyiuvvP7665i4hLWWnMCsJQAAcIOenh6LxYI38gBwIjIyMjIykusoAACAS/Hx8WFhYePRskQiQT4FnENqCQAA3CAiIiIoKIj9WL4PYC9MAAAAAODh9u7dOx7Nvvvuu+PRLPgSpJYAAMA9nLyyBAAAAAAAfBVSSwAAAEMLDg6eOnUq5i4BAAAAADiB1BIAAMDQ/Pz8AgMDuY4CAAAAAMCjufraRQAAAAAAAAAAABtILQEAAAAAAAAAwCghtQQAAAAAAADgU0iSdPt6kbt372a2jx07xuPxSJLk8/lKpdK+a5Ikw8LCGhoahi1nNwteCqklAAAAAAAAmGhyuXziOzUYDK5XFolE4xfJeKMoyr0N3rp1q6uri9l95ZVXzpw5Q1FURUVFRkaGfe8URel0uscee2zY8q6urjt37rg3WphgSC0BAMAo9fT0mEwmrqMAAAAAr9TW1sbeHRgY2L59u0wmk8vl5eXl8fHxdLnJZMrNzZ05c2Z8fPyOHTuMRiPxYP7LwYMHRSJRbW3t4cOHRSKRUql0VE4QhEajWbBggUAgkMlkW7duZXJM9ClFRUUxMTHsCTgSiUSv1zMTbZg4lUoln88nSTI0NHTJkiVMnLTExMTExMRhr92mWZvd7OzsmTNnCgSC5cuXV1dXs+vodLotW7aIRKKcnBzn40a7dOmSzXWNtH1GSUnJihUrmF2tVpuSkkIQRFpa2ty5c4e9ZCeSk5OLi4vH0gJwDqklAAAYDbPZ3NHRce/ePfoODwAAAGAsdu3aZTQa6+vr79y5IxAItFotXb57926FQtHY2Hjz5k2FQkE/PEVPybFYLGVlZWlpafX19WVlZRkZGY7KCYLIyckpLCw0Go1NTU3JyclM6oQ+paWlpaGhgT0Bhw6AeoCJc9OmTT/5yU9MJlNbW9svf/lLnU7Hvgqbyo5QFLVo0aLa2lp6t7a2dvHixcyJ+/fvb2xs1Ol0ubm5a9asYceZnp6elJSkVqtXrVrlfNxo586da2xstJlYNKL2GVVVVY8++qj9tXz55Zdnz55llwQHB9OJKpuUlqPyWbNmVVVVDTto4MlIt0+TAwCAyaCjo6O7uzs4ODgmJobrWGAE/P39MzMzy8rKuA7E/ebMmdPc3Gxzi+8tsrOzFQpFbm4u14EATEbJycnbt29nPmDDeMjPz1er1UVFRQRBKBSKlpYW9tHo6Gi1Wi2Xy69duyaRSGzOjYqKunHjRlhYGEEQXV1djz32WGtrK0EQJPl/H2ZtNhyVh4eHs9MukZGRHR0d9DZT08k244svvnj22WdNJlNERERkZOTHH3+8YMGCUYxJVVVVQUHBhQsXCIJYvnz5jh07li9fThDErVu3Xnvttdra2sHBwXnz5tXU1LDj6e3tFQqF7HYcjRtd32Qy+fv7s69lpO0zpkyZolarbY5evHjxBz/4QVRU1JCnNDc3P/LII/ZfQ9qU9/T0TJ061fP/B5fJZHV1ddOnT+c6EE+EWUsAADBiZrO5p6eHIIgh72N8htVq1ev1fX19XAcCAADgO9RqNTO1h95Qq9UEQZjNZkenuGU+REJCAsXC5JVcxORBVq9ebTQa9Xr9X/7yl8zMTPYzYiOyYsWK/v7+mpqampqagYEBOq9EEMT69euXLFly/fp1nU53/Phxm7Ps8z5Oxo0gCDqvxDbS9hn2P4UjR47ExcU5yisRBDF16tQhF0+wL8eUF2+H1BIAAIyYTqejKCooKCgkJITrWMaRyWRqbW0d6a0nAAAAjMK6desKCwsJgtBoNEqlcuPGjXT5pk2bSkpK6HxQcXFxZmbm6NpPSUkpLS1VqVRWq9XFUwICApRKpclkOnfu3LJly+jCyMjIK1eu+Pn5xcbGzpo1y+YrKBfXWqLt2bMnLy8v3GvrYQAAIABJREFULy9vz549TKFarZ4/f35oaGhDQ8OhQ4eGbcTRuDky0vYZcXFx7OlmJ06cePzxx2fMmEEQBHstqqSkpLy8vKamJoIglEplQECA83KCIFQqFaYCeTuklgAAYGQsFkt3dzdBEGKxmOtYxpefn19ISEhQUBDXgQAAAPggqVTK3i0sLNTpdFKpdPbs2adPny4oKKDL33vvPY1GExsbGxsb29nZ+d577xEPchnsZbDZG/blBEFs27ZNo9EkJSVJJJKVK1fm5+fbn2JzOr1EkVgsLi0tPXz4MF04bdq0v/71r/Hx8SRJZmRkVFRUsK/CYrG4PgEnOTnZarVSFPXjH/+YKSwuLt6yZYtEIsnNzd20aZN9bDbLijsaN0fXNdL2GStWrLhx4wazm5WVNW/ePPvKSqXy3r17CQkJNuPjqJwgiBs3bqxcudLFQQPPhLWWAABgZDo7O7VaLZ/Pj4uL4zoWGDGsteSZsNYSAIew1tIEYK+1BF7q5s2bv/rVr37zm9+4veVXXnnl9ddf9/yJS1hryQnMWgIAgBGwWq30lCXfXmUJAAAAANji4+PpxdTdTiKRIF/j7ZBaAgCAEeju7rZYLAEBASKRiOtYAAAAAGDi7N27dzyafffdd8ejWZhISC0BAICrKIqinzYap++sAAAAAADA6yC1BAAAruru7jabzf7+/lOmTOE6FgAAAAAA8AhILQEAgEusVqtWqyUIIjw8fMj3hgAAAAAAwCSE1BIAALhEp9NZLBY+nx8aGsp1LAAAAAAA4CmQWgIAgOFZLJauri6CIMLDw7mOBQAAAAAAPAhSSwAAMLyuri6r1RoYGCgUCrmOBQAAAAAAPIg/1wEAAICnM5vN9IvhJtuUJYvF8v333xME8dBDD3EdCwAAAHgHkiQpiuKqa4IguOodJjPMWgIAgGF0dXVRFBUcHCwQCLiOZaKZTCaTyYRbNAAAALeTy+Vjb8RgMLheWSQSjXc7xAgzOyPqd1gudu2ucQBgILUEAADOmEym7u5uYvJNWSIefPUHAAAA46GtrY29OzAwsH37dplMJpfLy8vL4+Pj6XKSJEmS1Ol0W7ZsEYlEOTk5dLlGo1mwYIFAIJDJZFu3bmXnRLKzs2fOnCkQCJYvX15dXU0XSiQSvV5PPsBUdtLOkBy1QxBEZWWlTSG9e/DgQZFIVFtbe/jwYZFIpFQqh+03MTExMTHRlWHs6+vLysoSCoVz586tr69nHxrXcQBgQ2oJAACc0Wq1FEWFhIQEBwdzHQsAAAD4rF27dhmNxvr6+jt37ggEAq1WS5fTM3HS09OTkpLUavWqVavo8pycnMLCQqPR2NTUlJyczKScCILYv39/Y2OjTqfLzc1ds2YNXUg3SD3AVHbSzpActUMQRGpqqk0JvWuxWMrKytLS0urr68vKyjIyMobt175xR3bu3CmXy7Va7YULF7744gv2oXEdBwA2zp4CBQAAr9DX19fZ2SmVSoOCgriOZaJZrdampiaCIB5++GE/Px/5Msbf3z8zM7OsrIzrQNxvzpw5zc3N9LpgXic7O1uhUOTm5nIdCMBklJycvH37duaDN4yH/Px8tVpdVFREEIRCoWhpaWEfjY6OVqvVcrn82rVrEonE/nSSJHt7e23eJRIeHs6knwiCiIyM7OjoIAji1q1br732Wm1t7eDg4Lx582pqapjPvEOuguSoHSecr6Zkc5TZtdkYRb9Dkkgkt2/fpsets7MzIiKC7mUCxmGykclkdXV106dP5zoQT+QjN8oAADBOBALB1KlTJ2FeicADcQAAAONArVYz82XoDbVaTRCE2Wx2cpb9O2oTEhIoFiYPsn79+iVLlly/fl2n0x0/ftxRg0aj0Xk7LmLaGakx9jtsMBM8DjDJIbUEAAAAAAAAHFu3bl1hYSFBEBqNRqlUbty40Xn9lJSU0tJSlUpltVrZ5Wq1ev78+aGhoQ0NDYcOHWIfCggIUCqVJpPp3Llzy5Ytc96OE0O2M1LO+3V9raUNGzZ88MEHJpOppaXlwIEDTPkEjAMAA6klAACAYeDhcQAAALeTSqXs3cLCQp1OJ5VKZ8+effr06YKCArqcnkRsv+z0tm3bNBpNUlKSRCJZuXJlfn4+XV5cXLxlyxaJRJKbm7tp0yaCNQ25oqIiIyNDLBaXlpYePnzYeTtODNkOE6TNBjsAV+KnWSwWF28/CgoKVCqVWCxOSUnZvHkz08sEjAMAA2stAQAAOHTr1i2CIKZPn87j8biOxT2w1pJnwlpLABzCWksTgL3WEoCXwlpLTmDWEgAAAAAAAAAAjBJSSwAAAMPADF8AAAAAAEeQWgIAAHAIL4kDAACYhGQyGWlHJpNxHReAh/LnOgAAAPAsWq1WKBTy+XyuAwEAAADgRnt7O9chAHgTzFoCAIB/MBgMnZ2dzc3NFouF61g8CB6IAwAAAABwBLOWAADgH/h8vlAo5PF4PvNCtDEiSZKiKKSWAAAAAAAcQWoJAAD+wd/fXy6Xcx2FB8FaSwAAAAAAzuGBOAAAAIfo1BJmLQEAAAAAOILUEgAAgENILQEAAACDflXchPU1MR0BjB1SSwAAAA4htQQAADBO3PIMvsFgcL2ySCQaYzsTeUvgel9OrgtgYiC1BAAAMAyklgAAANyura2NvTswMLB9+3aZTCaXy8vLy+Pj4+lyeqKQTqfbsmWLSCTKycmhyzUazYIFCwQCgUwm27p1Kzs3lJ2dPXPmTIFAsHz58urqarpQIpHo9XryAaayk3YcaW5uXrRokVgs3rx5c19fHzvOyspKgiAqKytJkoyNjWVOSUxMTExMdHFk6NNtZi3RJUVFRTExMXw+X6lUOr8ugImEZbwBAAAcwqwlAIDJQK/Xd3V1cR2FL+vv7x+2zq5du4xGY319vVAoPHPmjFarpcspiiJJMj09fdOmTQcPHrx69SpdnpOTU1hY+NRTTw0ODl64cCEnJ+c3v/kNfWj//v1FRUUmk+ny5ctr1qzp7e0lCEKr1dIvfrXp10k7jpSXl588eTIkJOTtt9/esWMHXb+uru4Xv/hFamoqQRApKSnz588/fPgwc8qI7iVSU1Ppq2YX0iUtLS0NDQ1ffvllRkaG0Wh0cl0AEwl/BQEAABwym80URfn7+/vM14D+/v6ZmZllZWVcB+J+c+bMaW5u1ul0XAcyGtnZ2QqFIjc3l+tAACajp59+uqamhusovENfX5/JZHJ0NCAgQCAQDHloYGAgMzOzuLiYIAiFQtHS0sI+Gh0drVar5XL5tWvXJBKJ/ekkSfb29gqFQnZheHg4k34iCCIyMrKjo4MgiFu3br322mu1tbWDg4Pz5s2rqalhPvMOmYJx1I4jJEmqVCqFQkEQhFarnTVrFlM/PT1948aN6enpJ0+ePHXq1LFjx5y0Myz7aNkljrZh/Mhksrq6uunTp3MdiCfCrCUAgEmttbVVJBLZ3KsBw98f/1ECAPi406dPcx2C12hra3P0vNiZM2cuXLjwxRdfDHk0Pz9frVbT28yGTULEbDY76dr+XiUhIaGqqsq+5vr16zds2HD48GGJRHL//n1HKzoZjUY+n++kHVdYrVY/v38sMrNv375169alpaW98847p06dGl2bY8RcF8BEwlpLAACTV3d3t16vb29vt1gsXMcCAAAAni4qKmq6A1KpdIyNr1u3rrCwkCAIjUajVCo3btzovH5KSkppaalKpbJarexytVo9f/780NDQhoaGQ4cOsQ8FBAQolUqTyXTu3Llly5Y5b8eJkpISlUrV1dW1d+/e9evXM+WzZs1avHjx6tWrFy5cOGPGDPYpI1praaSGvC6AiYTUEgDAJGUyme7fv08QRHh4OI/H4zocAAAAmFxsslGFhYU6nU4qlc6ePfv06dMFBQV0Of1Muv0y1du2bdNoNElJSRKJZOXKlfn5+XR5cXHxli1bJBJJbm7upk2bmBYIgqioqMjIyBCLxaWlpcxCSI7aGRLdVFZWVnp6+vTp0/V6vU39N9544/Lly3l5eTYnWiwW159ZY66UfclMic2fjq4LYCJhnj8AwCSl0WisVmtQUFBYWBjXsQAAAMCk097ezt4VCAQfffTRRx99ZFPNUUaGx+O98cYbb7zxhk352rVr165dO+Tpa9eupZe+dqWdITGtXblyZcgKZ8+e/fnPf85+Nxzt22+/daV9m14cFdpUGPK6ACYSUksAAJNRX18f/a7csU9fB/AQnZ2der1+8eLFXAcyGnfv3uXz+VjwBQDG7siRIzaPYsGEYaYRHTx4kNtIACYYHogDAJh0LBYL/T1hWFhYYGAg1+EAuIder3d9mQwAAJ/09ddfq1QqrqOYvKgHuA4EYKJh1hIAwKRDr9sdGBgYERHBdSwA7kSSZF1dHddRjEZ2drZCocjNzeU6EADwblg80V1kMllHR4dNoVQqtXmIDwBoSC0BAEwuPT09fX19JEnKZDL2WpgAAAAAQEMKCWBEkFoCAJhETCaTRqMhCEIikeBROFcYDIbBwcGgoKDg4GCuYwEAAAAA8ERYawkAYBJpb2+3Wq3BwcESiYTrWLyDwWC4f/8+veQ5AAAAAADYQ2oJAGCy6Orq6u/v9/Pzk8lkXMfiNQIDA4VCIZ/P5zoQAAAAAAAPhQfiAAAmhcHBwc7OToIgIiIiAgICuA7Ha4hEIpFIxHUUAAAAAACeC7OWAAB8H0VR7e3tFEUJBIIpU6ZwHQ4AAACAq0iS9K4Xj3AYrdeNFfgMpJYAAHyfVqsdHBzk8XhSqZTrWAAAAAAIgiDkcrkr1SiKGu9ICIIwGAyuV3Y+o3lEAY+o32G52LWT+N0bD0weSC0BAPi4/v7+rq4ugiAiIiL8/fEcNAAAAHiEtrY29u7AwMD27dtlMplcLi8vL4+Pj2cfvXTpUkxMDJ/PVyqVTGF2dvbMmTMFAsHy5curq6vpQnrmTlFRkU19g8Hw4osvisXiefPmNTY2MhN8NBrNggULBAKBTCbbunXrsLkViUSi1+vJB9iHKisrbQrp3YMHD4pEotra2sOHD4tEIjok5/0mJiYmJia6Mox9fX1ZWVlCoXDu3Ln19fXsQ0OOj6P4RzoOAGxILQEA+DKLxdLW1kZRlEgkCg0N5TocAAAAgKHt2rXLaDTW19ffuXNHIBBotVr20XPnzjU2NlZUVGRkZDCF+/fvb2xs1Ol0ubm5a9asoQvpmTstLS0NDQ3s+jt37pRIJG1tbTU1NefPn2dq5uTkFBYWGo3Gpqam5OTknJwc53HSgVEPsA+lpqbalNC7FoulrKwsLS2tvr6+rKyMDsl5v/aNO7Jz5065XK7Vai9cuPDFF1+wDw05Po7iH+k4ALCREzO9EAAAOKFSqfr7+wMDA2NjY/HsPRAE4e/vn5mZWVZWxnUg7jdlyhS9Xm+xWLgOZDSys7MVCkVubi7XgQCAd+PxeBcvXly6dOnEd/3ZZ58dPXrUJrXByM/PV6vVRUVFBEEoFIqWlhb20ejoaLVaLZfLr127JpFI7E8nSdJkMtGTr0ny/z7D3rp167XXXqutrR0cHJw3b15NTQ3z2Zapw96WSqU3btyg29doNFKplC4PDw9np7EiIyM7OjqcXyy7/WGPMrs2G6Pod0gSieT27dv0dXV2dkZERIxofBjuiseHyWSyurq66dOncx2IJ8KsJQAAn2WxWKxWK0mSMpkMeSUAAADwBGq1mpkvQ2+o1WqCIMxms5Oz7B/qX79+/ZIlS65fv67T6Y4fPz5sv+x7IXZiJSEhgWIZaT7FaDSOqL67+h02GBfHhzllPOKByQOpJQAAn8Xj8WJjYxUKRWBgINexAAAAADizbt26wsJCgiA0Go1Sqdy4caPz+mq1ev78+aGhoQ0NDYcOHRq2/YyMjIMHD1qtVr1eX1paypSnpKSUlpaqVCqr1epiqAEBAUql0mQynTt3btmyZS6eZcN5v66vtbRhw4YPPvjAZDK1tLQcOHCAKXcyPkPGP4pxAGAgtQQA4MtIkgwODuY6CgAAAABbNi+uLSws1Ol0Uql09uzZp0+fLigooMvp2Ub2fxYXF2/ZskUikeTm5m7atMlJTfrP/Pz8tra2iIiIJUuWrF69mul327ZtGo0mKSlJIpGsXLkyPz9/2MjpJZzEYnFpaenhw4eZcmZhbPYGwZowxZ455bxfi8Xi4to1BQUFKpVKLBanpKRs3rx52PFxFP8oxgGAgbWWAAAAHDIYDK2trYGBgTExMVzH4h5Ya8kzYa0lAHALr1hriXMmk+nMmTO7d+++du0a17GAN8FaS05g1hIAAIAzVqvVS7MVAAAAwPbmm2+SJCkUCo8cOXLp0iWuwwHwHUgtAQAAOERPHccMXwAAAB+wd+9eiqIGBweVSqVMJuM6HADfgdQSAACAQ0gtAQAATEL023VtIBsF4IjtGxwBAMBL0W+K9fPDdwbuxF5uEwAAACaJ9vZ2rkMA8Cb4BAIA4CPa29u///57k8nEdSA+BbOWAAAAAACcQ2oJAMAXmM3m/v5+k8mE1NJ4QGoJAAAAAMARPBAHAOAL/P39p06d2t/fHxISwnUsPgWzlgAAAAAAnMOsJQAAH8Hj8YRCIddR+Bp67SqklgAAALhCL6HNdRT/ZyKD8ZyrBhgWUksAAAAOMXd1VquV20gAAAB8jFwud6XaxHzBYzAYXKk2kd82ud6XSCQa10gAhoXUEgAAgENMagkTlwAAANyrra2NvTswMLB9+3aZTCaXy8vLy+Pj49lHL126FBMTw+fzlUolU5idnT1z5kyBQLB8+fLq6mq6kJ5YVFRUZFPfYDC8+OKLYrF43rx5jY2NzPwjjUazYMECgUAgk8m2bt3qSo6publ50aJFYrF48+bNfX197H4rKysJgqisrCRJMjY2ljklMTExMTHRxZGhT7eZteTouiQSiV6vJx9wsQsA90JqCQAAwCHmLg2pJQAAgHG1a9cuo9FYX19/584dgUCg1WrZR8+dO9fY2FhRUZGRkcEU7t+/v7GxUafT5ebmrlmzhi6k/8tuaWlpaGhg19+5c6dEImlra6upqTl//jxTMycnp7Cw0Gg0NjU1JScn5+TkDBtqeXn5yZMnm5qahELhjh076MK6urpFixalpqYSBJGSkjJ//vyzZ88yp1AU5fq9RGpqqn1lR9dFDxT1gItdALgXib98AAAATjQ1NVmt1ri4OD6fz3UsbuDv75+ZmVlWVsZ1IO43ZcoUvV5vsVi4DmQ0srOzFQpFbm4u14EAgHfj8XgXL15cunTpxHf92Wef7dy5c9WqVUMe/etf/5qQkPDRRx8RBKFQKFpaWthHo6Oj1Wq1XC6/du2aRCKxP50kSZPJ5O/vT2/Tn2Fv3br12muv1dbWDg4Ozps3r6amhvlsy9Rhb0ul0hs3btDtazQaqVRKl4eHh7PTWJGRkR0dHU6ulCRJlUqlUCgIgtBqtbNmzWLqp6enb9y4MT09/eTJk6dOnTp27NjwA+e0I5tP60Ne15A1YTzIZLK6urrp06dzHYgnwhviAAC8z+DgYGBgINdRTBZ+fn5WqxV3bAAAAE488cQTL7/8sqOjzc3NzLZaraY3bBIiZrPZSft0Xolt/fr1GzZsOHz4sEQiuX///rArN7EfFmP3m5CQUFVV5fxcR6xWK/3GD9q+ffvWrVuXlpb2zjvvnDp1anRtjpHRaPSNL8PAuyC1BADgZQYGBtRqdUhISFRUFJ6onwD0IGMZbwAAACceffTRRx991NFRiqKYjJIj69atKyws3Ldvn0aj+e///u9Tp0598sknTuqr1er58+eHhoY2NDR89tlnw0aYkZFx8ODBPXv2GAyG0tJSpjwlJaW0tHTVqlXR0dHsPJETJSUlL7zwgkAg2Lt37/r165nyWbNmLV68ePXq1QsXLpwxYwb7FHqhpStXrrjS/kgFBAQolcqf/OQnFy9e3L9//+XLl8ejFwAnsNYSAIA3GRwcVKvVdJoDeaWJQd9lYtYSAACAe0mlUvZuYWGhTqeTSqWzZ88+ffp0QUEBXU7f8Nj/WVxcvGXLFolEkpubu2nTJic16T/z8/Pb2toiIiKWLFmyevVqpt9t27ZpNJqkpCSJRLJy5cr8/HwnMdNNZWVlpaenT58+Xa/X29R/4403Ll++nJeXZ3OixWJx/V6CWeqRvTK3o+siCIJeekksFpeWlh4+fNjFXgDcCLOWAAC8htlsbmlpsVqtwcHBUVFRXIczWWDWEgAAwHhob29n7woEgo8++ohej4mNnZFhb69du3bt2rX2hxzVDwkJKSkpKSkpMZlMZ86ceeyxx+hyHo/3xhtvvPHGG67EzDToaP7R2bNnf/7zn7PfDUf79ttvXWnfPuwhC20qrF271mg0ut4+gNshtQQA4B0sFotarTabzXw+Xy6XY8rShMGsJQAAAN/w5ptv7tu3j8/np6amXrp0ye3tM7dnBw8edHvjAJ4MD8QBAHgBq9Xa0tJiNBr9/f0VCgWPx+M6okkEs5YAAAB8w969eymKGhwcVCqVMpnM7e1TD7i9ZQAPh9QSAICnoyiqra1tYGDAz89PoVDYvyEFxhVmLQEAAEw2MpmMtDMe2SgA34DPJwAAnq69vb2vr48kSYVCgbfJTjzMWgIAAJhsbNaBAgDnkFoCAPBoWq22t7eXIAiZTBYUFMR1OJORTCbDt5QAAABjMTAwoFar//znP3MdCMDoGY1Gs9nMdRQeCqklAADP1dXV1dnZSRBEZGSkSCTiOhwAAACA0fj222/Pnz9fVVXFdSAAo9fX19fW1hYfH891IJ4IqSUAAA+l1WqZvFJYWBjX4QAAAACM0r/8y7889NBDRUVFXAcCMHoymSwmJobrKDwUlvEGAPBETF4pIiICeSUAAAAAAPBYSC0BAHgcdl5JLBZzHQ4AAAAAAIBDeCAOAMCzMOsrhYeHI68EAAAAvqGkpOTo0aNcRwEwejqdjusQPBdSSwAAHqSrq+v+/fsEQUgkEolEwnU4AAAAAG7w6quv/sd//AfXUQCM1ZQpU7gOwUMhtQQA4Cn0ej2dVxKLxeHh4VyHAwAAAOAeQUFBQUFBXEcBAOMFqSUAAE8REhISFBQUEhKCvBIAAAAAAHgLpJYAADyFn5+fQqHw88MLFjyL2WzW6XQkSSLlBwAAAABgDx9gAAA8CPJKHshisXR1dXV3d3MdCAAAAACAJ8KsJQAAAGf8/f3FYjFJklwHAgAAAADgiZBaAgAAcIbH40VERHAdBQAAAACAh8KTFwAAAAAAAAAAMEpILQEATDSr1arRaKxWK9eBAAAAAAAAjBUeiAMAmGitra0Gg8FsNsvlcq5jAQBfoNFoent7uY4CvEZISEhUVBTXUQAAgO9AagkAYKKFh4ebzWa8yR4A3GXHjh1nzpwJDQ3lOhDwAnq9fvHixb///e+5DgQAAHwHUksAABMtKCho6tSpeOMYALjR//t//2/r1q1cRwFe4OjRoydOnOA6CgAA8ClYawkAgAPIKwEAAAAAgG9AagkAAAAAAAAAAEYJqSUAAIDhWa1WiqK4jgIAAAAAwOMgtQQAMF6sVivXIYB7qFSqpqYmvV7PdSAAXmMsj/3ikWE2jAYAAHg+pJYAAMaFyWT6/vvvOzs7uQ4E3MDPz49ArhCARalU8vn8gICAmJiYVatWcR0OAAAAcAmpJQAA9+vv7//++++NRmNPTw/yET4AqSUAGxkZGRUVFSaTSaVSnT9/3r7CWB4gdXRudHT0qNv0XngUFwAAPB9SSwAAbqbT6dRqtcViCQoKio2NpbMS4NWQWgKwYTKZ1q5dO8Gdtra2Oq8wODg4MZF4SL8AAAAeAh94AADchqKotrY2jUZDUZRQKIyJifH39+c6KHADpJbA6zQ2Nj777LNisTg4ODgpKenLL7+Mj49njl6/fv2ZZ55RKBQKhSI9Pb2xsZE5RJIkSZJ6vf6ZZ57h8/l8Pl+pVLJbjouLo1f/IR9YunQpu8KtW7focvuoPv/88xkzZgiFwo0bNxoMBvtqjs595JFHbDq1qVNRUaFQKIKCgoRC4cqVK7/99lv25Xz00Ucikai2tnbfvn0CgcDmipyw6cu+a0f9susTBFFVVfXEE0/Ex8efPXuWPkQ/UUiS5JQpU9LT06urq3/wgx/Y9O5kJMfyEwQAAHA7pJYAANzDaDQ2Nzf39vaSJCmVSuVyOdZe9Rl0agmPpYC3uH79+qpVq1atWnXt2rWenp5jx47dunVLq9UyR3/6058ePHhQrVar1eoPP/wwKyuLyU3Qf89zcnJef/31wcHBioqKjIwMduP37t2j61APVFdXsyvMmDFjyH8sX3/99VtvvXXixInOzs6tW7e+/fbbhN0/K0fn3r5926ZTdrXq6uojR46cOXPGYDC0tbXt2rXrlVde+eabb5j2b926VV5e/vTTT9+/f//IkSM2V+REb2+vTCbr6+ujd/V6vUwm6+3tHbZf9mD+6le/unLlyrlz5xobG8vLy+lD9BOFFEV1dXUVFxer1eqOjg6b3h2Nxhh/ggAAAO5HAQDAmPX29t6+ffvmzZt37twxGAxchwNu1tXVdfPmzdbWVq4DcQMej5eVlcV1FOMiNDTUz8+P6yhGaevWrfv37x/16VlZWUVFRczumjVrPv74Y0eVV69eXVlZyS6prKx8+umnmV2CII4fP87etW9k2HtI+worV648f/48s3vq1ClHjYy0/F//9V/v3r3LLvnuu++WLVvGnNXd3U1v9PT0uBI827//+79/8skn9Pbvfve7jRs3utgv03tVVRWzazab6Q2RSHTu3Dk6MOfsox3jT/CTTz5hVwYf4+fnd+nSJa6jAIBJB7OWAADGhKIojUbT2tpqtVrpxZWCg4O5DgrcDA/EgXeprq5OSUlxcnThwoXsksTExEuXLrFLnnvuObdH9c0337D7/eEPf+iulq9cuTJt2jT2s3Jz5sypra1lKoSGhtIbIpFopI1nZmYeOXJZjo9MAAAgAElEQVSE3v7d736XmZnper+05cuXM9s8Ho/e+PrrrwsKCiIjI+Pi4tLS0tatWzfsSlIMrn6CAAAAjmAREACA0bNYLK2trf39/QRBiMXi8PBwPATnk5BaAu9isVic/y6i7B6zsi/xIsHBwdevX3/ooYfGo/Fly5Zt2bKFzvs0NDQkJye7pd/HHnvsyy+/ZJekpaUxKzENy8d+ggAA4O0wawkAYJQGBgaam5v7+/tJkoyKioqIiEBeyVchtQTeZfHixX/4wx8cHV26dOnXX3/NLqmrq2NnTMbJ/Pnzr169yuxevHhxjA0y72VLS0s7evToGFtzhMfjZWRkfPrpp0ePHs3IyGCmHbm938rKShdrcvUTBAAAcASpJQCA0ejp6VGr1Waz2d/fPyYmZhQPWYAXoZOGSC2Bt9i3b99bb7118eJFiqL6+/sbGxtLS0s3b95MHz1w4MDu3btra2vNZrPZbK6trc3Lyztw4MB4R/X222//8pe/vHnzpslkqq2t/fOf/zzSFgICAuiXnbW2thYVFT311FN0+f79+0tKSt57772///3vJpNJq9X+8Y9/TEtLc1fk9DNxNk/DjbHfyMjI06dPd3V10bu1tbUBAQEuxsPVTxAAAMARpJYAAEbGarW2tbW1t7dbrdaQkJCpU6cGBQVxHRSML8xaAu+SmJioVCoPHDggFoujo6MzMzMHBgZ+/etf00cfffTRTz/9ND8/XywWi8XiAwcOHDt2bObMmfRROpHKzMG02SUI4rvvvmMKaampqcxRptBmmyCIRYsW5eXlpaamhoWFFRUV2adCnJxLo1925ufnt3Dhwtu3b585c4Yuj4mJ+eqrr27fvr1gwQKhUPjUU09VV1fT72Ib8nJsrmhYTz75pNVqpSjqiSeeYJc76ddm9OwvZ9q0adHR0S+//HJ0dHRCQsKGDRsqKipcHI0x/gQBAADcDmstAQCMAP2GaXodE6lUyiwNC74NqSXwOomJiRcuXHB09NFHH3X0xJzNkj32K/jMmTPHybI+zlf8efbZZ5999ll6W6PR2Mz3HHa1oLVr1xqNxiEPKRQKdk5nyDaZ7VEsS/S3v/1tRP0O29GVK1cIgjh27NgoziXG9hMEAABwO6SWAABc1dfXR79+ns/nR0VFBQYGch0RTBA6tUS/WhVf/gOMXUtLy549e3JycrgOBAAAANwAD8QBALgqJCSEz+eHhYVNnToVeaVJhU4tEZi4BDA277//Pv1g15NPPvn444+/9dZbXEcEAAAAboBZSwAAriJJMiYmhskywORBfximKMpqtbLfDwUAI7Jjx44dO3ZwHQUAAAC4GT4gAQCMAPJKkxaWWwLwPXFxcaQDcXFxXEcHAADgNTBrCQAAYHh+fn4WiwWpJQBfcu/ePa5DAAAA8AX4+h0AAGB49HNwSC0BAAAAANhAagkA4J/09/c3NzebTCauAwHPggfiAAAAAACGhAfiAAD+iVarHRwcvH//vlwu5zoW8CA8Hs/fH/9pgoeqq6srLy/Pzs7mOhDwDrGxsVyHAAAAPgV3yQAA/0Qqlep0uvDwcK4DAc8SFRXFdQgADi1YsGDLli0vvPAC14GAFzhx4sQXX3zBdRQAAOBTkFoCAPgnAQEBkZGRXEcBADAC/v7+wcHBYrGY60DACwgEAnrxOAAAAHfBWksAAAAAAAAAADBKSC0BAAAAAAAAAMAoIbUEAJMORVFdXV19fX1cBwIAMNFIknRyyMlR520Oe+JIWx5dJAAAAMAJpJYAYHLp7+9vbm6+f/++RqOhKIrrcAAAxoWjd1w6+b036l+Jrpw40sZdry8SiUbUMgAAALgdUksAMFmYzeaWlhaVSmU0Gv39/SMjI/GtOAD4qra2NpuSyspK++lFfX19WVlZQqFw7ty59fX1NqckJiYmJia62GNzc/OiRYvEYvHmzZvZ00KH7NdgMLz44otisXjevHmNjY3sCkPWp0uKiopiYmL4fL5SqaTLJRKJXq8nH3AxVAAAAHAvpJYAwPdRFNXZ2fn3v/+d/rQTFhYWFxcnEAi4jgsAYOKkpqbaTwXauXOnXC7XarUXLlywfyE9RVGuzx4qLy8/efJkU1OTUCjcsWPHsP1KJJK2traamprz588TrGlKQ9anS1paWhoaGioqKjIyMuhyrVbLxImJqAAAAFxBagkAfJzBYGhubtZqtRRFBQUFTZ06NTIy0s8Pv/0AwAcpFApm/g69oVAonNT/9NNPc3Jy+Hx+RETEz372M5ujV69evXr1qotdb9myJSYmRiKRvP322ydOnHBeuaKiYufOnYGBgQKB4N/+7d9c7GL//v2hoaFr1641mUwungIAAAATwJ/rAAAAxovZbO7s7Ozp6SEIws/PLzw8PCwsjOugwFtRFNXW1ma1WqOjo/HcDXgstVpNb5AkOdJZPEaj0S0xWK3WYdP37H9EbpxtZDQa+Xy+u1oDAAAAF+F7ewDwQRRFabXae/fu0XklkUgUFxeHvBKMBUmSer3eYDBYLBauYwFwmw0bNnzwwQcmk6mlpeXAgQM2R0e01lJJSYlKperq6tq7d+/69eudV87IyDh48KDVatXr9aWlpaMJ/YGAgAClUmkymc6dO7ds2bKxNAUAAACjg9QSAPgUiqJ0Ot3du3c7OzutVmtQUFBsbGxUVJS/PyZpwljJZLKoqCg8TQleQSqV2pTYPChHFxYUFKhUKrFYnJKSsnnzZuKf5xNZLBZXphTRp2RlZaWnp0+fPl2v1+fn5zvvNz8/v62tLSIiYsmSJatXrx42TqbE5k+CIOill8RicWlp6eHDh10bHgAAAHAnfNYCAN/R19d3//59+pmOgICAiIgIoVDIdVDgO0JDQ7kOAcBV7e3tNiVDJokEAsHHH3/88ccfD1nn22+/daUv5qwrV644OcoWEhJSUlJSUlJiMpnOnDnz2GOPOa/PLrSpsHbtWnc9ygcAAACjg69eAcAXDA4OqtXqlpYWo9Ho5+cXGRkZFxeHvBIAgMd68803SZIUCoVHjhy5dOkS1+EAAADA6GHWEgB4vc7Ozq6uLvp7bJFIFBERgcffAAA83N69e/fu3ct1FAAAAOAG+PQFAL6AoiiBQBAREYF3AwEAAAAAAEwkpJYAwOuJxeLAwEA8/gYAAAAAADDxsNYSAHg9Pz8/5JUAAAAAAAA4gdQSAAAAAAAAAACMElJLAOAF9Hq9SqUa8o3UAAAAAAAAwCGklgDA01EUpdFo+vv7u7u7uY4FJjWr1TowMDAwMMB1IAAAAAAAHgSpJQDwdCRJRkREhIeHh4aGch0LTGpGo/H7779vbW3lOhAAjimVSj6fL5FIli5danOIJMkRNTXS+u7ipF+SJEcXlSsnesv4AAAAjAhSSwDgBUQikUQi8fPDryzgEv030Gq1ch0IwPDkcvn4NZ6RkVFRUaHVaqurq20OjfTJZfv6IpHIUWWDwTCixkfUryuHRt3mqBt3vb6TcQMAABhv+JwGAADgEh6PRxCE1WrFsl/g+dra2ti7AwMD27dvl8lkcrm8vLw8Pj6eLjeZTLm5uTNnzoyPj9+xY4fRaKTL6Qk4RUVFMTExfD5fqVTS5XFxcSRJmkym9PR0m0k6lZWV9tN2DAbDiy++KBaL582b19jYyK4wZH2JRKLX68kHmHKNRrNgwQKBQCCTybZu3UrnmOg6Bw8eFIlEtbW1hw8fFolETKiODNlvX19fVlaWUCicO3dufX29zSmJiYmJiYnOm2U0NzcvWrRILBZv3ry5r6/PvePj6OfiaNwAAAAmBlJLAMA9q9Wq1Wo7Ozu5DgTAGTq1RBCExWLhNhKAkdq1a5fRaKyvr79z545AINBqtXT57t27FQpFY2PjzZs3FQrF7t276XI6f9rS0tLQ0FBRUZGRkUGX37t3jz5EPcB0kZqaap913blzp0QiaWtrq6mpOX/+PMGahjNkfTow+8ZzcnIKCwuNRmNTU1NycnJOTg7TlMViKSsrS0tLq6+vLysrY0J1xFGccrlcq9VeuHDhiy++sDlqE4xz5eXlJ0+ebGpqEgqFO3bsGLbfEY2Po5+Lo3EDAACYGCT++wEADpnNZp1O193dbbVaSZKcNm0a8+kdwAM1NTVZrda4uDg+n891LKPk7++fmZlZVlbGdSDuN2XKFL1e76WJv+zsbKVSGRUVNbrT29racnNzt27dqlAoWlpa2Ieio6PVarVcLr927ZpEIrE5MSoq6saNG2FhYQRBdHV1PfbYY8xqYiT5j7tE9rb9LpvNIalUeuPGDbpfjUYjlUptTrRvasjGw8PDmXQYQRCRkZEdHR3syvYbztlUk0gkt2/fpuPs7OyMiIgY3R0ySZIqlUqhUBAEodVqZ82aRcfpqN8xjo+Tn5ETR48ePXHixO9///sRXx54Ax6Pd/HiRft10AAAxpU/1wEAwCRlNBp1Ol1PTw99KxwYGCgWi5FXAg/H4/GsVquXJi/Ak+3YsSMrK2vUp7/77rv0hlqtpjdsEg1ms9nRueP6LSP74axRdGQ0Guk0bkJCQlVVlTsjc9qpW9qxWq3DLhE4xvFxhBk3AACAiYEH4gBgohkMhpaWlnv37nV3d1MUFRQUJJfLp06diiVIwfMxyy1xHQj4mtjY2IQxEIvFzttft25dYWEhQRAajUapVG7cuJEu37RpU0lJCf0UVXFxcWZmpnuvKyMj4+DBg1arVa/Xl5aWunJKQECAUqk0mUznzp1btmwZXZiSklJaWqpSqcbpX9+GDRs++OADk8nU0tJy4MABm6MjWmuppKREpVJ1dXXt3bt3/fr1ziuPYnwcGXLcAAAAJgZSSwAwQSiK6unpaW5uVqvV9MqmISEhCoUiNjZWKBRyHR2AS+jUkpMJIAAeQiqVsncLCwt1Op1UKp09e/bp06cLCgro8vfee0+j0cTGxsbGxnZ2dr733nt0OT2bxv5Pem1p4sF60uxJN8wuuzw/P7+trS0iImLJkiWrV69mhzRkfYIg6CWExGJxaWnp4cOH6cJt27ZpNJqkpCSJRLJy5cr8/HybwIh/ngHkxJD9FhQUqFQqsVickpKyefNmm9YsFouLD9kRBJGVlZWenj59+nS9Xk/H6cbxcfRzcTRuAAAAEwNrLQHAuDOZTPSzb/S3zX5+flOmTJkyZUpAQADXoQGMTHt7e09PT3h4uP2aNd4Cay35pOeffz4hIWHr1q1cB+KQyWQ6c+bM7t27r127xnUsnmgixwdrLfk2rLUEAJzAWksAMI4MBoNOp2Pevszn88PCwkQi0bDLTwB4JnrW0uRMXgCMzptvvrlv3z4+n5+amnrp0iWuw/E4GB/wGRRFvfTSS1xHAZPdz372s4SEBK6jmIyQWgKAcaHX63U6XX9/P70bFBQUFhYmFApdfGABwDMhtQQwUnv37t27dy/XUXgujA/4kt/+9rfvvPMOVpEHrpSVlSUnJyO1xAmklgDAzXp7e+/fv08vRkOSpEAgEIvFQUFBXMcF4AZILQF4PplM1tHRYVMolUrb29s5iQdgUnnttdcEAgHXUcAkdfnyZa5DmLyQWgIANyNJ0mw283i80NDQsLAwf3/8ngHfgdQSgOdDCgkAAGCC4SMfALiZQCCQy+UCgQDPvoHvQWoJAAAAAMAGUksA4GYkSQqFQq6jABgXSC0BAAAAANjAS5oAYGQsFktXV5f9MhYAkwGdWqIoymq1ch0LAAAAuM1Ypttjqj4AUksAMDJWq/X+/fvd3d1Go5HrWAAmmp+fH337iIlLAAAAXkSpVPL5/ICAgJiYmFWrVnEdDoCvQWoJAEYmICAgLCxMJpMFBARwHQsAB/BMHIDnI0nS7ZMIdu/ezWwfO3aMx+ORJMnn85VKpX3XJEmGhYU1NDTQhZcvX964cePatWvtT2E3CwDjJyMjo6KiwmQyqVSq8+fP21egKGrUjTs6Nzo6etRteqPJdr3AhrWWAGDEIiMjuQ4BgDM8Hs9sNiO1BB5OLpe3traOU+MGgyEkJGScGncLiqLcm1q6detWV1cXs/vKK6+cOXMmJSVFqVRmZGTYTOO1/5D5s5/9rK6uTiwWEwRRW1u7YsUKvV5PH+rq6rpz58706dPdGC0A2DOZTGvXrp3gTof9PTw4OBgYGDgxwUyAyXa9wIZZSwDwTyiK6u3tbWtrG8tXNwA+DLOWwCu0tbWxd+l5NEVFRTExMTazZrKzs2fOnCkQCJYvX15dXc1UPnjwoEgkqq2tPXz4sEgkok/RaDQLFiwQCAQymWzr1q0Gg4HdS2JiYmJi4rCxMfN6hty1j4epo9PptmzZIhKJcnJy6PKBgYHt27fLZDK5XF5eXh4fH8/u6NKlS65cr5P2GSUlJStWrGB2tVptSkoKQRBpaWlz584d9pIHBwfpvBJBEE899VRfXx9zKDk5ubi4eNgWAHxeY2Pjs88+KxaLg4ODk5KSvvzyS/a/6OvXrz/zzDMKhUKhUKSnpzc2NjKH6H+/er3+mWee4fP59nMJ4+Li6N8wzG+bpUuXsivcunXL0VTHzz//fMaMGUKhcOPGjQaDwb6ao3MfeeQRm05t6lRUVCgUiqCgIKFQuHLlym+//ZZ9OR999BH9G3jfvn0CgcDmipwb40g633U0zqO+Xpu+qqqqnnjiifj4+LNnz7p+yeARKAAAiqIoqr+/v729/fbt2zdv3rx586Zer+c6IgBP1NnZ2dra2tfXx3Ugo8Tj8bKysriOYlyEhob6+flxHQU3srKyioqK2CX293gEQeTm5nZ3d3/++ecBAQFMeW9vL0VRRqPx4sWLQqGQqVxQUHDixImwsLBXX331xIkT9Ck//elP//SnPxmNxt7e3s8///zll19mdzF//vz58+e7EvCiRYtqa2vp7dra2sWLFzuPhw5p6dKlZWVl3d3dFy9epAt/8YtfvPTSSx0dHQaD4fjx4+Hh4ez6v/zlL/V6vSvX66h9xhNPPNHY2Gh/IZWVlRqNhl0SHBxM32MHBAR8/vnndCGPx2PXYf90rl279uSTTzocqXHwySefPP300xPZI0wkPz+/S5cucdI1/YKL0d1ANjQ0PPTQQ7/97W/VarXRaPz+++//67/+i/kX3dDQsGDBgjt37tC7d+/eXbRo0Y0bN5jTCYJ46aWXLl++bLVabf7Js+s4j8G+Ql1d3WOPPfa///u/AwMDdXV1dNLZxXOdl1+6dCk1NfUvf/mLwWDo7e3905/+tHDhwqtXrzJnvfrqqydPnoyIiPjFL35x8uTJIa9oSGMfSSfxDzvOo7te5tz//M//fPfdd9VqtdVqXbdunYuXzJaamlpRUTGKE2HskFoCmOwGBgbu379/9+7dmw80NTV1dHQYjUauQwMA90NqyScxqSX7dS6io6PpOuw7fmb75s2bP/nJTyQSiUAgSEpKYsodbUgkEnbjkZGRowv4j3/847Jly+jtZcuWVVVVOY+HDoDOCrFFRUV1dnYO2QVBECaTycXrddQ+IzQ01P7ohQsXWltbHZ1y79495nOXk09r3d3dU6ZMcdTIeEBqybd5aWppzZo1H3/8saOjq1evrqysZJdUVlay/xoTBHH8+HH2rn0jo0gtrVy58vz588zuqVOn3JVa+td//de7d++yS7777jvmtyJBEN3d3fRGT0+PK8Ezxj6STuIfdpxHd73Mucz/BRRFmc1mR1fhBFJLHMIDcQCTlNFo1Gq19+7da25u1mq1JpOJJEmhUBgdHT1t2rTIyEis0g0A4HXUajV9h0c8uL9Xq9VO6q9fv37JkiXXr1/X6XTHjx8ftv2EhAT2fWRHR8fo4lyxYkV/f39NTU1NTc3AwMDy5ctdiUcoFNqUmM1mJ734+9suKjrS9hmU3UPiR44ciYuLi4qKcnTK1KlTTSaTo6Psh2rtGweYbKqrq+mHTB0dXbhwIbskMTHx0qVL7JLnnnvO7VF988037H5/+MMfuqvlK1euTJs2jf3s2Jw5c2pra5kKoaGh9IZIJBpRy2MfSedGN87DXi+N+b+AeLD+AHgRpJYAJhej0djZ2Xnv3r179+51dnYajUY/Pz+RSBQdHf3www/L5XKBQODepU8BAMBjqdXq+fPnh4aGNjQ0HDp0aNj6KSkppaWlKpWKnp5gw8W1lmh79uzJy8vLy8vbs2fPqONZt25dYWEhQRAajUapVG7cuNF5/ZG2z4iLi2tpaWF2T5w48fjjj8+YMYMgCPZ/mklJSXl5eU1NTQRBKJVK5kua4OBg5kPU1atXQ0NDmQFUqVRYwxvAYrE4v/+0z8B6dU42ODjYZhYPRVHsVdhGzTNHcvyuFzwHUksAk4LJZGIySlqt1mg0kiQpEAjkcvn06dOjoqKQUQIA8CVSqZS9y6yuavNncXHxli1bJBJJbm7upk2bCNZaquxltpl2tm3bptFokpKSJBLJypUr8/Pz2b1YLBbXP6IkJydbrVaKon784x8zhUPGw/7TZmnYwsJCnU4nlUpnz559+vTpgoKCUVyvk/YZK1asuHHjBrOblZU1b948+8pKpfLevXsJCQkkSdJvOqfLjx49+qMf/YgkycjIyGeeeeaLL75gsk43btxYuXKli4MG4KsWL178hz/8wdHRpUuXfv311+ySurq65OTk8Y5q/vz5V69eZXYvXrw4xgYHBwfpjbS0tKNHj46xtSG5cSQbGhrGGMwEXC94EHc+XQcAHsZkMul0OpVKdZOlubm5q6uLWYECACYVrLXkk+yX8Qb3amxstFmz3F1efvnlpqam8WjZEay15Nu8dK2l//mf/4mOjr5w4YLVajUYDDdu3CgpKXn++efpow0NDU8++eRXX31lMplMJtNXX301d+5c1xefdlLovEJdXd2cOXMaGxuNRuNXX33185//3FEjjsqZ5fxbWloOHTo0b948uvz777+Pi4t799137969Sz9ScP78+dTUVJvW7DeGNcaRpAPu7+8/derUqlWrnA+sfVSju96RXqMTWGuJQ5i1BODLWltb6ffmEAQRGBgYERHx0EMPxcbGhoWF2a9AAQAAAEOKj48PCwsbj5YlEgkeiANITExUKpUHDhwQi8XR0dGZmZkDAwO//vWv6aOPPvrop59+mp+fLxaLxWLxgQMHjh07NnPmTProkBMt2TMKv/vuO5uZiampqcxR9nRFm6mLixYtysvLS01NDQsLKyoqOnDggE3YTs6lVVRUZGRk+Pn5LVy48Pbt22fOnKHLY2Jivvrqq9u3by9YsEAoFD711FPV1dXl5eWOLsfmisZpJJmAZTLZ2bNnjx075mRg7cd5dNdr05qT2aPg4UjKmx9SBQDnurq69Hq9QCAQCoV8Pp/rcACAe/7+/pmZmWVlZVwH4n5TpkzR6/Xs1ZEnj+effz4hIWHr1q1cBwJe4OjRoydOnPj973/PdSAwLng83sWLF5cuXTrxXVMU5efnR995TnzvE0Cj0Tz88MM9PT1cBwIOpaWl/fSnP12/fj3XgUxGmLYA4MvobyS4jgIAAAAAwIu1tLTs2bMnJyeH60AAPBQeiAPwYp2dnXfv3qWfdwMAAAAAADd6//336eeznnzyyccff/ytt97iOiIAD4VZSwBezGw2m83mvr6+kJAQrmMBmETa29v1en1kZGRoaCjXsQAAAMB42bFjx44dO7iOAsALYNYSgBcLCwuLjo6OiIjgOhCAScdqtZrNZq6jAAAAgEkkLi6OdCAuLo7r6GBSw6wlAA9FUZTBYOjr6xOLxQEBAUPWCQwMDAwMnODAACA8PFwikeA1iwAAADCR7t27x3UIAEPDbTGAZ6EfcOvr6zMYDPQLHAMCArAUN4BHQVIJAAAAAICBm2MA7lEUNTAwQKeTBgcHmXJ/f3+BQBAcHMxhbAAA4GNIkiQIgv72wjmlUpmRkSEUCp944onq6mqbRlxpYcLqj5ST9l0fn9G1D+DbXnjhBXwBA1z561//umrVKq6jmKTwzx6AM0aj0WAwGAyG/v5+q9XKlAcFBQkEAoFAgIfdAABgdORyeWtr65CHKIqisycMg8Ew5OsgMjIyKioq1q5dO2QjI4rHvr5IJOrt7XW9vns5ad9+fNzbvg3n4wDgRei/9jwez88P6/kCN6xWa19fH9dRTFJILQFMKIvFYniAvQYwj8cTCAQhISEhISE8Ho/DCAEAwAe0tbWxd/v6+l555ZWTJ0/OmDHjd7/7HVOu0WhSU1O/+eYbqVT63HPPvf/++3SOKS4urrm5mSCI9PR0uiaTK6msrExLSyP+OXtC52IOHTp04MCBjo4OdkJqyPoSiUSv1zMZHPahIeubTKa33npLqVRSFPXMM8+89957fD7feb+ODNm+o/GhJSYmEgRx5coV5y2PYnycjAOA16H/JhcXFwsEAq5jgUkqLS1t+v9n797Doqr3/YGvNTcuMzDOADMMFw3wVj3tbeItH9m78hZ4KczAZz9mlm3POUXZtkikttvaKV4on+LY8/gAR620TepGTwallmdrYlvz7NpHSQQ0heE2MNyGYe7r98d3u36ruSxmYGC4vF9/8Kz5ru/6fj9ricB85ntJTAx0FGMUUksAQ6G3t9d1vhtN0yEhISSdhAFKAAAweDZt2qTRaPR6fVdXV2FhIVuenZ2dn58/d+5cs9l8+vTp7OzsvXv3UndXinU7qystLc11XA8paWhoqKys/PrrrzMzMy0WC099vV7vacqY2/pvvvlmXFxcVVUVRVHvv//+m2++uWvXLv5+PXHbvqfnw94df5t9tu8pTp7nMKj0ev2ZM2eGuFPw3uzZs8PCwgIdBQCADzAPHGAo3Lp1ix2jFBQUFBoaKpVKg4ODBz7kHgDAJyKR6Omnn96/f3+gA/E/uVxuMBjsdnugAwmAZ599Njk5OSsrKzY2tqGhgXsqJiZGq9UqlcqamhqlUklRVFtbW2RkJPkLMCIiQq/Xs5WjoqJaWlrYl/wLEjmd4pbwn+2zcdez0dHR169fHzduHEVR7e3t948DuMsAACAASURBVN13Hzvdj79fL9v39Hz6zfvnM/SppUOHDr3xxhuTJk0ayk7BexUVFRcuXJg2bVr/LhcKhWfOnHnkkUf8G5U3GIYRCAQGgwGjliBQlixZ8swzz2RkZAQ6kLEIo5YAhoJUKrXb7WSAklgsDnQ4AAAwOmm1WnLAk7DgjutJTk4+derUUETGy2KxkAluPIYs/9LnuKdB7brP5+AX06ZNO378+BB0BP2ArB8AjERYYg1goBwOR0dHB/djXlcqlUqj0cjlcuSVAABg6K1aterdd9+1Wq0NDQ07d+5ky1NTU4uKiurr67m7SQwNsVhcWlpqtVrLy8sXLFjAX3nNmjWFhYUMwzAMs2/fvqefftq/wXh6PsSsWbPIckuDwafnADC60TQdqBH9PP36JSrMVIBRD6klAD9obW3t7Oy0Wq2BDgQAhkhvb69erzcajYEOBMA9lUrFfbl79+76+nqFQpGamvrcc89Rd9/nvPzyyzqdLiUlRalULl68eMeOHaR+WVkZqUDfxTbFvuSWsyVOXz3VpyiqpKQkMzNToVAUFRUVFxfzt//OO+/odLr4+Pj4+Pi2trZ33nmnz349cdu+p+dD2O1278dM+fp8PD0HgNFBo9F4XzmAS7Xw7xo5qO07wTJbMEIhtQQwUAKBIDw8XKlU4uMIgLGjp6enra0NG9zCsNXc3Mx9KZVKDx48aDAYfvzxx1/96ldk+A9FUUKhcPPmzbdu3ero6Pjqq69ycnJIfbIWNRfblNty7ktPp5zaSU9Pt1gsBoPh2LFj3BlAbutLJBKS/amvr9+9ezc7a4ynX0/ctu/p+RBXrly5fPmyV8/d9+fj6TkAjA5Ou1WaTKYNGzao1WqNRnPgwIHJkyf32cJLL700ZcoUqVS6cOHCs2fPksLS0lKJRELTdHh4+Lx589h2PJXzIJl0pz/je3p61q5dK5PJHnzwwatXrzpd4tNIRrftk5KCgoK4uDiJRFJaWkrK2V0jAziAC6B/kFoC8IhhGJPJ1N7e3tDQwC4X6pZKpYqIiBCJsHgZwFhB/r+zy/MDAABAn3Jzcy0Wy9WrV2/evCmVSrnbCHiSl5dXVVXV0dGRk5OzfPlyUrhmzZqlS5dardampqbXXnuto6ODv5wHyaQ7FbK7Rp4+ffrzzz93OutNFpu/fVJCdo0kQxdJOXkgXibKAYYVvBMG+AW73d57l8ViYX65gQs+PQAAAqklAAAYnh599NFAh0Bxd6skfz+T3So//fTTa9eukd0Yn3rqqaeeeoq/nerq6o0bN1ZUVJjN5unTpxsMBlJ++PDhJ598UiwWR0ZGRkVFffHFF/zlvjp8+HBNTY1EIomMjFy/fn1ubi73rPfDGPnl5eVRFJWeno5VNWAUQGoJ4P+nk0wmk9ls5n5EIBAIgoODQ0JCQkJCAhghAAw3SC0BDFtqtdp1bw2VSuU0SRBgVIqMjCwvL09ISBj6rhmGiYiIIMeedqv09fdmRkbGqlWriouLlUpla2sru3LTsmXLLBZLT0+PXq//5JNPFi1a1N7ezlM+EGNh10iAgUNqCcYos9lsusvpF4ZQKAy5KygoKFARAsBwRlJLdrs90IEAgDOkkGAso2laLpcrFIqh79qbCVwrV67Mz8/fvn27Tqf79ttvjx079sknn/DU12q1M2bMCA8Pr6ys/Mtf/sKWkxFJDzzwQHx8/NSpU9mlDz2V+4rsGrl161adTrdr1y6ns2ShpUuXLvWvcX5k18ilS5eeOXMmLy/v3Llzg9ELgN8htQRjSG9vr9FoJOkkp12WxWIxySUFBwfjwwEA6JNQKKQoimEYm82GddYAAADcctqtMj8/Pzs7mxSmpaXt3r2bPeW0oyJJVO3bt2/dunUtLS0PP/zwe++9l5eXR4ZBJSQk/PDDD08++WR9fb1YLC4pKSHXeirn4bbf3bt3v/DCCwqFIikp6eOPP37//fe5w6/sdrtA4O2axW7bZ3eKZBfcYNsnSy9JJJLFixdj10gYQfDXMIwh3d3dnZ2d5Jim6eC7QkJCyLtEAAAv0TQtFArtdjtSSwAAAJ647lb54Ycffvjhh6413Q56Sk9PT09Pd61DRgytX7/eqb6nch5u+yW7Rh48eNBtnStXrgywfeaX225yT5FdI71vH2CYwF/DMKrYbDahUOhpsW2pVOpwOEg6KSgoCGtyA8BAiEQiu92OOXEAAAAAMMYhtQSjx507d8xmc3x8fHBwsNsKUqlUKpUOcVQAMFqJRCKz2YyVvGHE4U7KCFQLAee0tLDTKWrAd8fTPgAAwOjj7RxRgOGPTGrD5p0AMDSwSRwMZ+w+Sq5cUx5Go9Gnxv2SNAkLC/NXfV/jp3hvwS93530jvj4HAPCVWq2mXajV6kDHBTCqILUEwx3DML29vR0dHU1NTQ0NDTw11Wr1xIkT8ScaAAwNsVhMIZ0Nw1VTUxP3ZU9Pz9q1a2Uy2YMPPnj16lW2XKfTzZw5UyqVqtXqrKwsNkdD3np9/fXXKpVqxowZt2/f7l8YpaWlEomEpunw8PB58+ZNnjyZlCuVSoPBwL7H417y0ksvTZkyRSqVLly48OzZs/z1PcXPo6yszLVTT8+HmDVrFtkQyhtu2yclBQUFcXFxEomktLS0z+cAAP7S3NzMuMBWkgD+hdQSDDsOh4Pkkpqbm+/cuVNbW1tfX6/T6bq7u3t6epx2duMSiUT4swwAhgxGLcEIsmnTJo1Go9frT58+/fnnn7Pl2dnZ+fn5FoultrZ2/vz52dnZpJwMumlra6urq9u0adMf/vCH/vW7Zs2apUuXWq3Wpqam1157raOjg5Tr9XrSC8G9JC8vr6qqqqOjIycnZ/ny5fz1PcXPIy0tzXVIkafnQ7gG6Wv7pKShoaGyspJs/8R/XwAAACML1lqCwHM4HCaTyXyX654IQqEwKCiILL+N5BEADBNk1BJSSzCsxMbGsiN8yW/MmJgYrVZ7+PDhmpoaiUQSGRm5fv363NxcUufzzz9nt0CiKCoqKmrv3r3sy0WLFgUFBaWmpq5bt65/8Rw+fPjJJ58Ui8WRkZFRUVFffPEFf/3q6uqNGzdWVFSYzebp06cbDAb++vzx+xSn2+dDXL58uR9tusrLy6MoKj09HaMdAQBglEFqCQLAbrebzWY2neT6B5ZQKCSbuBHk/RsAwLCCUUswDGm1WnLAs4w09yOc5OTkU6dO9dks+W7vh2XLllkslp6eHr1e/8knnyxatKi9vd1tSBKJhKKojIyMVatWFRcXK5XK1tZWTytGsfW9jN8nAdz2m70vAACAkQUT4mCoNTU13bx5U6vVtrW1GQwGklcSiURSqTQiIiImJiYhISExMTEmJiYiIkImkyGvBADDE5mEyzAMsksw/K1aterdd9+1Wq0NDQ07d+5ky1NTU4uKiurr693ON//2228tFkt5efnChQv7129UVNSlS5cEAkF8fPzUqVN7enrYU2KxuLS01Gq1lpeXL1iwgBRqtdoZM2aEh4dXVlZ+8MEH3Kbc1ueP33ueng/h01pLvnJ7XwAAACMLUkvgf/yLBZBUkVgslslkERERsbGxiYmJCQkJMTExSqVSKpX2+6NRAIAhRn5eYW4LDEMqlYr7cvfu3fX19QqFIjU19bnnnqPuTpd7+eWXdTpdSkqKUqlcvHjxjh07uFfFxMQkJSXt2bPnvffeYwvZBae9WXk6ISHhhx9+mDx5Mk3TmZmZJSUl7Cmy5JBCoSgqKiouLiaF+/btW7dunVKpzMnJWbNmDRunp/r88bvlNn5Pz4ew2+3eL4Tktn22xOmrp/sCABgOBmOHgTfffNO1C5qmx40bV1lZSQrPnTu3evXq9PR0mqa5Wx+4Xg7DB97Dgz8xDHP79m2r1ZqYmCgUCt3WGTdunEKhEAiQ1gSAEU8kElmtVoxagmHIafMjqVR68OBBdlkiNlEiFAo3b968efNmt41Mnz69rq7OqdCn1aYvXbpEUdT69etdT6Wnp7tOPUtPT09PT3fbl9v6/PG75TZ+T8+HuHLlygDb5xY6VXB7XwCjhkajaWxsHMoew8LCuru73Z4yGo2hoaGD176v/BLPoGIYxr+pperqatdp0a4/NtevX3/x4kWFQkFRVEVFxaJFi9il99rb22/evJmYmOjHqMAv8PYe/In90WM2mz3VEQqFyCsBwOiA5ZZgtHIaWQMA0D9NTU3clyaTacOGDWq1WqPRHDhwYPLkyaTcarXm5ORMmTJl8uTJr7/+OptvdRr953RcUFAQFxfHHdWiVCoNBgM7EIbtV6fTzZw5UyqVqtXqrKwso9HIbaejo2PdunVhYWF97jLpqX3ysqysjKKosrIymqbj4+PZ8q+//lqlUs2YMeP27dv88RBeTsJ1CsPp5UsvvTRlyhSpVLpw4cKzZ8/y36+nfxfim2++cXrOvrbPKiwsXLRoUZ+3ZjabSV6Joqi5c+dyJ1PPnz9/3759fbYAQw/v8KFvVqvVYDDo9frGxsbbt2+zW8+4pdFoEhIShnkCHgDAL7BJHIxWzF2BDgQARpXc3FyLxXL16tWbN29KpVK9Xk/K33zzzdjY2Kqqqhs3bsTGxrKTnjyN+CPHDQ0NlZWVZFYpKScNuv4Ey87Ozs/Pt1gstbW18+fPZ1MepM6KFStSUlK0Wu1jjz3GH7+n9i9evDhnzpy0tDSKolJTU2fMmEE2xCR12tra6urqNm3a9Ic//IE/HjYqb378MgwzZ86ciooK8rKiouKhhx5iL8zLy6uqquro6MjJyVm+fDn//Xr6dyHKy8urqqq4z9nX9lmnTp269957uSUhISEkIcVNXbkOmGVNnTrV77s3gH8wAL9kNps7Ozt1Op1Wq71161Z1dfWNX6qtrQ10jAAAw0JHR8eNGze0Wm2gA/GBUChcu3ZtoKMYFOHh4QKBINBRBMbatWsLCgoC1bvTuk6ESqVCPMPTJ5988vjjjwc6CvBo4sSJ//jHP/p9uVqtrqmp8WM83iOr6RsMBoZhYmJinP4PxsTEMAwTHR3d1tbmeq1arW5vbyfHer0+OjqaPUX9MpXj0zFLqVRyg4mKiuLW7+7u9v42Pb2DTk9PP3bsGMMwR44cWbVqFbc+ubXu7u6wsLA+4/HJV199tWDBAnK8YMGCU6dOkeMbN24sXbqUrGObkpLi9Hxc79fTvwupb7Va2eP+tc8KDw/3dPb27dtisdipI9eXnZ2dcrncU/tpaWklJSWezsKgwlpLY53dbrdYLGazmf3quscKySJLJJKgoCDyNSChAgAMNyEhISqVCj8VYYxzWtcp4IZbPABjkFarJQdkK1W2nGecL9PXOJ1+bARpsVgkEglFUcnJyTxDXWQyma8tO7VPUdT27dtXrly5ZMmSt99++9ixY27rs7sV8cfjvUWLFr399tvnz5+nKMpkMrG7eWZkZKxataq4uFipVLa2tmo0Gu5VrvfLP/7adZMlX9tn8fwrjx8/nmdfFLvdzq7k2+e3CgQEJsSNUc3NzXV1dTdv3rx582Z9fb1Op+vs7DSZTA6HgySSyPZtGo1mwoQJEydOHD9+fHR0tEKhwA5uAAAsiUQil8uDg4MDHQgAAMAIsHLlyvz8fIqidDpdaWnp6tWrSfmaNWsKCwvJ2Id9+/Y9/fTT7CVisbi0tLSxsfGVV17xpgtS32q1lpeXL1iwgBSmpqYWFRXV19f3Iz/lTfsURU2dOvWhhx5atmzZ7NmzJ02axL3k22+/tVgs5eXlbOqHPx4v11oi3nrrrS1btmzZsuWtt95iC7Va7YwZM8LDwysrKz/44IM+G/H07+KJr+2zJkyYwF1cJSUlZcuWLbW1tRRFlZaWknUGKIoKCQlhJ/pdvnw5PDycfVD19fVYw3t4QmppjDKZTCaTyW63UxQlFoulUqlCoYiOjh4/fnxSUtKECRM0Go1SqZTJZGwmHgAAAAAAwHtOE1Tz8/M7OjpUKtX9999/4sSJ3bt3k/J33nlHp9PFx8fHx8e3tbW988477CUlJSWrVq1atmzZ888/T/1ykwHXr6R+ZmamQqEoKioqLi4mhS+//LJOp0tJSVEqlYsXL96xYwcpZ691Wpabh9v2ic2bN587d27Lli1Ol8TExCQlJe3Zs+e9997jj4ew2+3eD8yZP3++w+FgGObRRx9lC/ft27du3TqlUpmTk7NmzRrK5Vk53a+nfxdPz9nX9lmLFi26fv06+7K0tPT27dvJyck0TWdmZpaUlJDyQ4cOPfzwwzRNR0VFPfHEE59//jmbdbp+/frixYu9fDgwlGgMJxt9ent7W1pahEJhXFycpzpkjiuZ5ob92gAAxg6RSPT000/v378/0IH4n1wuNxgM5FOTsebZZ59NTk7OysoKdCAwAhw6dOjIkSPHjx8PdCDg3qRJk44cOTJt2rT+XR4dHX3hwoWkpCT/RuUNhmEEAoHBYJBKpUPf+3BQUFBw8+bNPXv2cAudpgSOcTdu3Hj//ff37t3b7xZefPHFV1991dPApSVLljzzzDMZGRn9bh/6DTObRiSbzSYQCDylhAQCgcVi4U8YhYWFDU5oAAAAAAAAYws7SIebWmJH8SC7REyePHncuHEDaUGpVGJC3PCE1NJwxzCM1Wq1WCwWi4U9cDgcUVFRnv5bSiSS2NhYTGQDAAAAJ/56hzPS3ynxxE/eCg7w7kb68wEAX7n9L4+fA662bds2kMv//Oc/+ysS8C+kloYXh8NhuYskkshej07VaJrmGfBP03RoaOggRwoAAADDl0ajaWxsdC331/ucgbcTFhbW3d3tl/pGo9HXv3x44mcYxsslV/rXvhNfnwMADDa1Wt3S0uJUqFKpsPskAA8sshMwDMNYLJaenp729vaWlpb6+vpbt27V1tbW1dU1Nze3t7cbDAaLxUImLQcFBYWFhbFbtiUlJUVERAT6DgAAAGCYampqciopKytzXVeVlBQUFMTFxUkkktLSUlJuMpk2bNigVqs1Gs2BAwcmT57M344npaWlEomEpunw8PB58+ax7SiVSoPB4Hap15deemnKlClSqXThwoVnz57lr6/T6WbOnCmVStVqdVZWltFo7DMkt/H39PSsXbtWJpM9+OCDV69edbrEp92afHrOPM8BAAKlubmZcYG8EgA/jFoKGKPRyN15kSUSiSQSiVgsltwlEuGfCQAAAAYkLS3NdTwOKWloaKisrPz6668zMzMtFgtFUbm5uRaL5erVqzKZ7OTJk3q9nr8dT9asWbN06dLPPvvMYrGcOnVq/fr1pFyv13uaMpaXl1dQUGC1Ws+dO7d8+XIyosdT/ezs7Pz8/Llz55rN5tOnT2dnZ/e5Oqzb+Ddt2qTRaPR6fVdXV2FhodMlPg3R8uk58zwHAACAEQQ5i8HS1dVlMpnCw8ODg4PdVhCLxQKBgKSQuF+xXxsAwAjCMIzJZLJareHh4YGOBYCKjY1lP7gi2Y2YmBitVst/VV5eHkVR6enpVquVlHz66afXrl1TKpUURT311FNPPfVU/+I5fPjwk08+KRaLIyMjo6KivvjiC/761dXVGzdurKioMJvN06dPNxgM/PU///zzgwcPsi+joqL6t/HQ4cOHa2pqJBJJZGTk+vXrc3NzuWcvX77cjzZduT5nAACA0QGppf7j/8jOaDR2d3eLxWJPqSWJRBKQbUEBAMC/6uvrKYoKDQ3FIFMIODaLNMCxMDabzS/xLFu2jEz/1+v1n3zyyaJFi9rb212rWSwWsv1IRkbGqlWriouLlUpla2urRqNx2yxbPzk5+dSpU34Jldu4fxv0qWtswwIAACMRBsh4hWEYs9lsMBja29ubm5vZdZF4LpHJZEqlMiQkZMiCBACAoUfTdEhISGhoKKa0wGiycuXK/Px8iqJ0Ol1paenq1av7105UVNSlS5cEAkF8fPzUqVN7enrYU2KxuLS01Gq1lpeXL1iwgBRqtdoZM2aEh4dXVlZ+8MEH3Kbc1k9NTS0qKqqvr3c4HP2LkFi1atW7775rtVobGhp27tzpdNantZZ85fa+AAC4BmM5tjfffNO1C5qmx40bV1lZSQrPnTu3evXq9PR0mqa568S5Xg6Az1edkdW1rXeRY0+f3dlsNk+fUctkMplMNpiRAgDAsBAXFxfoEACcqVQqpxL2bQk5IMlQckyGOHGP8/Pzs7OzSSNpaWm7d+/mb8eThISEH3744cknn6yvrxeLxSUlJeypkpKSzMxMiUSyePHi4uJiUrhv375169a1tLQ8/PDD7733Xl5eHjv8ym39l19+edeuXSkpKe3t7bNnz37kkUdycnL4n4zb+Hfv3v3CCy8oFIqkpKSPP/74/fff5w77stvt3q9X4NNz9nRfAKOGp90qB49/d5McJvyycyVXdXW16xhS15/n69evv3jxokKhoCiqoqJi0aJF7Dzl9vb2mzdvJiYm+jEqGNHG+qgls9nc3d2t1+vZsUg1NTV37txpbGxsbW3t7Ozs7e0leSWhUBgcHEy2aYuOjo6Pj09KSsLcBwAAABiGXDczctrtyKnQ6VgqlX744YctLS0tLS0HDhzgTkxz244nly5dWr9+fV1dHfnoLj09nT2Vnp5usVgMBsOxY8cmTZrEFv78889Go7GsrGzq1KncLtzWFwqFmzdvvnXrVkdHx1dffdVnXslT/FKp9ODBgwaD4ccff/zVr37ldGtXrlzxfrkln56zp/sCGDWcdqv0tPuk1WrNycmZMmXK5MmTX3/9dXZeKne0juux97suetpNklTr6OhYt25dWFhYdnY2N1ovRyw6def00u2ul5765dmdk6Kob775xul+fW2fVVhYuGjRoj5vzWw2k7wSRVFz587ljjydP3/+vn37+mwBxo6xnlpqaWlpampqa2vr6upis0gCgYBkkZRKJckiJSYmJiYmxsfHR0dHK5XKsLCw4OBgrLcNAAAAAADgJXb3yZs3b0qlUnb3yTfffDM2NraqqurGjRuxsbHsZCtuktf1mOy6SIb+kXLSoGvum+wmabFYamtr58+fz6ZaSJ0VK1akpKRotdrHHnuMG603CXRSbc6cORUVFeRlRUXFQw89xF6Yl5dXVVXV0dGRk5OzfPly/n49PR+ivLy8qqqKe7++ts86derUvffeyy0JCQkhCSlu6qqurs7TXU+dOtXvS93BiDaatzu1WCw6nY6iqNjYWE91dDqd2WwW/5JQKBzCMAEAAIaOSCR6+umn9+/fH+hA/E8ulxsMBrvdHuhAAuDZZ59NTk7OysoKdCAwAhw6dOjIkSPHjx8PdCDg3qRJk44cOTJt2rT+XR4dHX3hwoWAbBbEMIxAIDAYDFKplLtbJUF2q9RoNOzuk1zR0dHXr18fN24cRVHt7e333XcfO42OOzvV12NWREQEN00TFRXV0tLC1u/u7h7gSianTp3avXv36dOnKYpauHDh66+/vnDhQspl18vz589z43Tt19PzIfWtViuZNMPeo6/ts+RyuVardXv2zp07EydOJAPHnB4m92VXV9f48eM7Ojp8elCDbcmSJc8880xGRkagAxmLRvC4G5vN1tvby7N7K03TRqOxt7eXp5GoqKi4uDi1Ws2ORUJeCQAAAMB7arWadqFWqxEPwJil1WqdJoGS/St5dp/sc8RDP1brZyfWJScnc2eqsnklYuAr5C5atKi3t/f8+fPnz583mUwkr0RRVEZGxrx583766aeOjo7PPvvM6SrXfvl353RdjMXX9lk8T3v8+PE8b7G5n9+M4kEq0A8jILXkcDjY3dlaWlq0Wu3PP/9cU1Nz69at+vp6T4u0URQlEonUajXPkCUAAAAAGKDm5mbGhetiT2M2HgBgedp9cs2aNYWFheR/6759+55++mn2ErKLYmNj4yuvvOJNF37cTdKn3SHfeuutLVu2bNmy5a233mILeXa9dMvX3Tl9bZ81YcIE7rCylJSULVu2kA3QS0tLxWIxKQ8JCWEn+l2+fDk8PJx9gPX19VjDG7iGUWqJYRir1Wo0Gjs7O1tbWxsbG+vq6m7evFlbW8tdV9toNFqtVoZhyERQnqXyaZoODw8PCQkZyrsAAAAAAAAAymW3yvz8/I6ODpVKdf/99584cYLdffKdd97R6XTx8fHx8fFtbW3vvPMOe0lJScmqVauWLVv2/PPPU5z9Ft1+pe7uuqhQKIqKiri7Sep0upSUFKVSuXjx4h07dpBy9lqnZb8Ju93u/cCc+fPnOxwOhmEeffRRtpDseqlUKnNyctasWeMas1O/np6Pp/v1tX3WokWLrl+/zr4sLS29fft2cnIyTdOZmZnsbp6HDh16+OGHaZqOiop64oknPv/8czbrdP369cWLF3v5cGAsCPxaS0ajsbW11Waz8SyOIBQKxS6wOxsAAICvsNbSqIS1lsB7WGtpmBsday0Nfe/gkxs3brz//vt79+7tdwsvvvjiq6++OtwGLmGtpQAa9OxMb2+vxWIJDQ1lE5xOaJo2m83ssWsKSSwW8wxNAgAAAAAAAAAvTZ48mSya3m9KpXK45ZUgsPyQWiJz0zyd1ev1RqNRrVZ7Si0FBQVFR0djazYAABi5urq69Hp9aGio08h/AAAAgGFo27ZtA7n8z3/+s78igdHBh9SSw+GwWq02m81qtXIPBAJBQkKCp6tCQkJomuaZvCYQCMLCwnyLGgAAYDghWwKzO9EAwCBxu634kHVNYUckAAAAd9xkfKx3kfWP2GNPv0rJcmWeBi4plUp/xgsAADD8kJG5PJv1AgwxjUbT2Ng4wEaMRmNoaKiXlcPCwjzt2+uvdigfMzs+9dsn/nH6LH89BwAAgBHkX6ml1tZWNqPEsyOjQCAQiURkCW3uV6yFBAAAYxlJLdlsNofDIRAMo91XYcxqamrivjSZTJs2bfrLX/4iEAjy8vK2b99+48YN6u5InPb29ldfffWzzz7793//d7IhkU6nS0tL+/7771Uq1VNPPbVr1y42J/LSSy+dOnWqvr5+PB9PXgAAIABJREFU7ty5ubm5jzzyCEVRSqXSYDCwfxCyCSCedtzy1A5FUWVlZUuWLOEWkmrvvffeli1bvvrqq59++umVV1756KOP0tPT+fslu4lfunSpz8fY09Pz4osvHj16dNKkSR9//DH31KA+B4CR6/bt29ihGwLFaDTabLZARzFG/Su1ZDAYuJ+1CoVCkUhEMkfcFBLWQgIAAHAlFAqFQiEZ6hsUFBTocACc5ebmWiyWq1evymSykydP6vV6Uk5G4qxYsWLNmjV79uy5fPkyKc/Ozs7Pz587d67ZbD59+nR2dja7kVBeXl5BQYHVaj137tzy5cvJCB29Xu92qhpPO255aoeiqLS0NKdxQ+Sl3W7fv3//kiVL1q5du3///szMTIvFwt+v90OfNm3apNFo9Hp9V1dXYWEh99SgPgeAkYh8599///2BDgTGtGnTpv3ud78LdBRj0b9++XV2djIMwyaS8IkrAACAT+rq6kwmk0ajkclkgY6Fj0gkevrpp/fv3x/oQPxPLpcbDAa73R7oQALg2WefTU5OzsrKio2NbWho4J6KiYnRarUajebatWtulymgabq7u9vp+zYiIoJNP1EUFRUV1dLSQlFUdXX1xo0bKyoqzGbz9OnTz58/zx1D5JpS8dQOD/7VlJzOsi+dDvrRr1tKpbKmpoY8t7a2tsjISNLLEDyHwXPo0KEjR44cP348UAEAv0mTJh05cmTatGn9uzw6OvrChQtJSUn+jcobDMMIBAKDwSCVSoe+dwCKopYsWfLMM89kZGQEOpCx6F8pJLlcPm7cOKlUKpFIkFcCAADwFZkTh5W8IbC0Wi3DMCS1QQ60Wi1FUfwTBFzzocnJyQwHmwfJyMiYN2/eTz/91NHR8dlnn3lqkP2P4KkdL/X7P9QA++0zmCF+DgAAAMMcskgAAAB+IJFIKKzkDcPVypUr8/PzKYrS6XSlpaWrV6/mr5+amlpUVFRfX++0BKdWq50xY0Z4eHhlZeUHH3zAPSUWi0tLS61Wa3l5+YIFC/jb4eG2HV/x9ztr1iyy3FKfVq1a9e6771qt1oaGhp07d7LlQ/AcAAAARhA3O8QBAACAr7BJHAwrKpWK+zI/Pz87O5sUpqWlkbW6qbsrYbsuO/3yyy/v2rUrJSWlvb199uzZjzzySE5ODkVR+/btW7duXUtLy8MPP/zee+/l5eWx879KSkoyMzMlEsnixYuLi4v52+Hhth1ukOSAXXfJdU5cn/3a7XYvB+nv3r37hRdeUCgUSUlJH3/88fvvv096GYLnADBCPfDAA9jiCQKlqanpmWeeCXQUYxTfbHYAAADwkslkqqurEwqFiYmJgY6FD9ZaGpXYtZYCHQiMAFhraZgbuWstURR15cqVgPQLwEpMTFQoFIGOYizCqCUAAAA/IBvD2e12u92ODVUBAGAMSk5ODnQIABAYWGsJAADAD2iaFolEFFbyBgAAAIAxBqklAAAA/yAreSO1BMBPrVbTLtRqdaDjAgAAgH7ChDgAAAD/kEgkRqMRqSUAfs3NzYEOAQAAAPwJqSWvMAzDrnfucDjYjUjI3Ae3TCaTw+EICgrytOKG3W7v7e3td0hCoTAkJMTT2d7eXoZhgoODvdwABQAABg6jlgAAAABgDBp5qSWHw0FRFMMwDoeDP7ljMBisVmtoaChZWtWV1WptbGwkx2zyiLTsVOhWcHBwfHy8p7M6nc5kMmk0GplM5raC2Wxme+8HqVTKk1pqbm62Wq3x8fHBwcFuK3R3dzc1NbEvuRkogUDA3d+XpmlSwhIIBMHBweHh4Z56N5vNFEVJJBLsPAoAYwpSSwAAAAAwBgU4tcQwTFdXF8ng2O12ckCGBTkcDvaAfel0uUgkSkhI8NR4d3e3wWCIiorylFpiGIYkQfodPM9ZiUTCMAzPJkFCoTA0NLTfvXu6KbZ3kgbysjXus3V9zm7xpJbq6uoYhrnnnnvEYrHbCgaDobOzU3AXTdNCoZAkrbiF3GMvbwQAIIBIaslmszkcDgwaBQAAAIAxwofUkuMuNg1EXsrlck+XtLa2dnZ2KhQKpVLptgLDMC0tLT5Hzbmc5ywZ1OMpu0FRlEgk0mg05JhNxJCMhjeF/PpcjTIoKCg2NrbPdvonJiaGv4JMJktKSqJ+OUqLe8CO4WKzeyyHw8EzYIqiKIFAwDAMz9sqi8ViNBq9vx2SexIIBORreHi4p7FgAAABJBQKhUKh3W63Wq38HwAAAAAAAIwaIoqiurq6HC5I/ohnxBArPDycJ9XicDjsdrunswKBQCaTcadcscNV3BZSnOlafX4gPG7cuHHjxvFUIL3zNzJacRNkPEOr+icxMZG/QmhoqFAo5A5M4zmgKIphGJvNxl7Ok9iy2Wy3bt0SCoU8MZABBSKRCGMKAMDvJBJJb2+vxWJBagnAV+QvE/4PDv3Y19B0BAAAMBaIKIpqbW3lyf5wuZ2yxDCMp9SSUqmUy+X8b+DZcUMwdgQHB3taBMoVSTORRCc54LmWTUXxNNjW1tbV1UXdHQzVJ1/uDADGOja1FOhAYKzTaDQDWdKRMBqN3k/eDwsL6+7uHkg7PH9S+p33eSWe+wIAAABCQFFUWFhYeHi4XC5XKBSRkZFRUVFqtVqj0cTGxsbHx48fP/6ee+5JSkqaOHHixIkTExMT77nnnvHjx8fFxcXGxmo0Gp7MkUAgEIvFeHMOAyEQCEQiUVBQUEhIiFQqDQ8PJ6uZuCWRSBITEydMmMDTIDsCjgyGMpvNRqOxu7u7o6Ojra2tpaWlsbGxvr7+9u3bN2/erKmpuXXrVl1dXUNDQ0tLS1tbm9Vq9f9NAsBoERQUJBaLsUIcBBx3sw6Kokwm04YNG8gfeAcOHJg8eTIpJ6OYOzo61q1bFxYWlp2dTcp1Ot3MmTOlUqlarc7KyuJOY3/ppZemTJkilUoXLlx49uxZUqhUKg0GA7vjB1uZpx1P7ty5M2fOHIVC8dxzz/X09HDjLCsroyiqrKyMpmnuViqzZs2aNWuWl0+GXO70n5SUFBQUxMXFSSSS0tJS/vsCAAAALhFFUVFRUYEOA8Bv+kxlqlQqlUpFpnz2iaSfuNPxQkNDPS3gZbVae3p6JBLJQBZoB4ARTS6X8yxBOEw0NDScOXMm0FH4n81mYxhmVN5an5qbm/kr5ObmWiyWq1evymSykydP6vV6Uk4GCq1YsWLNmjV79uy5fPkyKc/Ozs7Pz587d67ZbD59+nR2dvbevXvJqby8vIKCAqvVeu7cueXLl5MRPXq93u0UM552PDlw4MDRo0dDQ0O3bt36+uuvk/oXL178wx/+kJaWRlFUamrqjBkziouL2Ut8mtqWlpbmOjyKlDQ0NFRWVn799deZmZlk7KGn+wIAAAAu/LIE8Iikn2w2G0kzkQOFQiESuV//vqurq7m5OTQ0lGeBdovFgnl2ABBAEolEpVJFR0cHOhD/++GHH+x2e3JycqADCYCmpqacnJysrKzY2NiGhgbuqZiYGK1Wq9Forl275nZbFZqmu7u7nVafjIiIYNNPFEVFRUWRfVeqq6s3btxYUVFhNpunT59+/vx59i9JtykYT+14QtN0fX09+TWq1+unTp3K1l+xYsXq1atXrFhx9OjRY8eOffrpp309FT6u0XJLPB2PDocOHTpy5Mjx48cDHQi4N2nSpCNHjkybNq1/l0dHR1+4cIFs1wMAMGR82CEOYKyhaVokEnlKJLkSiURhYWH8a/dqtVqbzUbTtFgsFolE5Cv3AOPtAWBQhYSEvPDCC7m5uYEOxP/kcrnBYPj+++8DHUgAPPvss+RAq9WSA6eECHf4rSvXXU2Sk5NPnTrlWjMjI2PVqlXFxcVKpbK1tdXTipkWi4XMXvfUjjccDgd31YXt27evXLlyyZIlb7/99rFjx/rX5gCx9wUAAABc2CELwG9CQ0Ojo6MVCoWnCtw97ywWi9Fo7OzsbGtra25urq+v//nnn2tqan7++WetVtvS0tLe3m4wGMxmM8/+jAAAAN5YuXJlfn4+RVE6na60tHT16tX89VNTU4uKiurr651+B2m12hkzZoSHh1dWVn7wwQfcU2KxuLS01Gq1lpeXL1iwgL8dHoWFhfX19e3t7du2bcvIyGDLp06d+tBDDy1btmz27NmTJk3iXuLTWku+cntfAAAAwIXUEsDQoWk6KSkpMTFx/PjxGo0mKipq3LhxMpksODiYHRtltVpJyqm1tbWxsfHOnTu1tbU3b96sq6vjn0QAAADAUqlU3Jf5+fkdHR0qler+++8/ceLE7t27STkZKuu6TPXLL7+s0+lSUlKUSuXixYt37NhByvft27du3TqlUpmTk7NmzRq2BYqiSkpKMjMzFQpFUVERuxCSp3bcIk2tXbt2xYoViYmJBoPBqf7mzZvPnTu3ZcsWpwvJ2ohePhn2Trm3zJY4ffV0XwAAAMA12maPA4xcDMNY77LZbOwx+0mvRCLh2fzOZrMJBAKeHRsBACiKksvlmzZtGsUT4ux2e6ADCYBnn302OTk5Kysr0IEMroKCgps3b+7ZsyfQgYxsWGtpmMNaSwAwEmGtJYDhgqZpiUTiuoiD3W4nOSb+ZZiampp6e3s1Go3rkhkAAAAjHftLEKklAACA4QapJYDhjuwoFxwczF/NarVSFCUWiz1VsNlsZP1R7xcmBwAAGCYw0B4AAGDYwjtMgFEiISHBbrcLhUJPFXp6eshqTWR4VBAHptEBAMCQUavVrqsHqlSq5ubmgMQDAAAAA4TUEsDowZNXIsRisc1mYxjGbDabzWa2XCQScTNNPEOfAMAbbW1tXV1dSqVSLpcHOhaAYQcpJAAAgFEGqSWAsUIul8vlcoZhbDabmcN2V09PD6kpEAi4w5okEgmGNQH4hP2PFuhAAAAAAAAGHVJLAGMLTdNisVgsFrOrfTscDm6myWKxOBwOk8lkMpnYq8RisVqtDgkJCVDUACOMXC6XyWSuq/IDAAAAAIw+SC0BjHUCgSAkJIRNGzEMY7VauckmskVdn7PtAIBFEriBjgIAAAAAYCggtQQAv0AW+ZZIJGFhYaTEbrebzWae8RcGg8FoNMpkstDQ0KEKEwAA/ICmaWpEbb5G03Sgoh1xzwoAAGDIYP0UAOiDUCjkzxkZDIbOzk7uBDoAAAgsjUbjTbWhSZQYjUbvK7MfbLjlU8A+9dsnL7vmid+/8QAAAAwfSC0BwECFhYUpFAqe9BPDMBaLZShDAgAY45qamrgvTSbThg0b1Gq1RqM5cODA5MmTuWe/+eabuLg4iURSWlrKFr700ktTpkyRSqULFy48e/YsKaRpmqbpgoICp/pGo/H3v/+9QqGYPn16VVUVqUZRlE6nmzlzplQqVavVWVlZfeZWlEqlwWCg7+KeKisrcyokL/fs2RMWFlZRUVFcXBwWFkZC4u931qxZs2bN8uYx9vT0rF27ViaTPfjgg1evXuWecvt8PMXv63MAAAAYWTAhDgAGSiqVSqVSngpGo7GhoUEgEAQHBwcHB5OlnZzeMwAAwODJzc21WCxXr16VyWQnT57U6/Xcs+Xl5VVVVadOncrMzGQ/CcjLyysoKLBarefOnVu+fHl3dzdFUQzD0DTd0NBQWVn59ddfs/U3bdqkVCqbmppsNltRURF1d4xPdnZ2fn7+3LlzzWbz6dOns7Oz9+7dyxOnXq/3NOUtLS2N9M6WkJd2u33//v1LlixZu3bt/v37SUj8/Xo/9GnTpk0ajUav13d1dRUWFnJPuX0+nuL39TkAjEQMw2zevDnQUQAMLw899NDjjz8e6CiGQsDmqwPA2NHZ2anT6bg/bUiaieSYgoODkWYCGDJyuXzTpk25ubmBDsT/5HK5wWCw2+2BDiQAnn322eTk5KysrNjY2IaGBu6pmJgYrVar0WiuXbumVCpdr6Vp2mq1ikQiirOSUXV19caNGysqKsxm8/Tp08+fP8/+DOemTthjlUp1/fp10r5Op1OpVKQ8IiKCm8aKiopqaWnhvxf+1ZSczrIvnQ760a9bSqWypqaG3FdbW1tkZKRPz4flr3j84tChQ0eOHDl+/HigAgB+kyZNOnLkyLRp0/p3eXR09IULF5KSkvwblTcYhhEIBBs3bsRGFgDEd99998ADDxQUFAQ6kKGAUUsAMOjkcnl4eLjJZOrt7SVfHQ6H0WgkMwJomiY5ptDQ0KCgIKSZAAD6TavVkgOnBIfNZuO5iuSVuDIyMlatWlVcXKxUKltbW/tcuclpMBF7nJycfOrUKS+Dd2WxWHg2keAxwH49BcMee/l82PgHIx6A4entt9/mH8wOMHbs2LGD/b086mGtJQAYCiR/pFQqY2JikpKSJkyYoFKpwsLCRCIRwzBGo7Gtra2uru7mzZsNDQ3t7e1msznQIQMAjB4rV67Mz8+nKEqn05WWlq5evZq/vlarnTFjRnh4eGVl5QcffNBn+5mZmXv27HE4HAaDgUyII1JTU4uKiurr6x0Oh5ehisXi0tJSq9VaXl6+YMECL69ywt+v92strVq16t1337VarQ0NDTt37mTLeZ6P2/j78RwAAABGEKSWACAAJBKJXC6Pjo5OSEggaSaZTCYUCh0OR09PT2tr6507d2praxsbGzs6OvCHOIxQvb29LS0tZAUWgCGmUqm4L/Pz8zs6OlQq1f3333/ixIndu3eTcjLayPXrvn371q1bp1Qqc3Jy1qxZw1OTfN2xY0dTU1NkZOS8efOWLVvG9vvyyy/rdLqUlBSlUrl48eIdO3b0GXlJSUlmZqZCoSgqKiouLmbL2YWxuQcUZ8AUd+QUf792u93LFSF2795dX1+vUChSU1Ofe+65Pp+Pp/j78RwAAABGEKy1BADDiNVqNd7FZpQSExOFQmFgAwPoh/b29tbWVplM5uU28EMDay2NSuxaS4EOhLJarSdPnnzzzTevXbsW6FjAPay1NMyN9LWWDAYDJsQBEGRC3BhZawmjlgBgGBGLxXK5XKPRJCYmxsXFKZXK8PBw5JVghAoKCqIoCrM7YYx44403aJqWyWQfffTRN998E+hwAAD8ZiArgY61VUQD9azG2nMehpBaAoDhiKzNFBERoVareap1dnb29PRg9CUMTyS1ZLVaMakTxoJt27YxDGM2m0tLS/l/dAMADCulpaUSiUQsFsfFxT322GOBDmeIsJOLfTI2nxV4A6klABipGIZpbW1taGjAqBAYnoRCIdl4C9+iAFxqtZp2gWwUAARKZmZmSUmJ1Wqtr6//8ssvXSsM5FNMT9fGxMT0u02/6N9NDdtnhU+aA855r1kAgJHC4XCEhYWZzebg4OBAxwLgXlBQkM1mM5lMISEhgY4FYLhobm4OdAgAAP+f1WpNT08f4k4bGxv5K5jNZjL8eYjx9zs8nxUMBxi1BAAjlVAoVKlU8fHxPHWsVis+xIAAInlPk8kU6EAAAABGqqqqqieffFKhUISEhKSkpHz99deTJ09mz/70009PPPFEbGxsbGzsihUrqqqq2FNkUKTBYHjiiSckEolEIiktLeW2PGHCBO7WkzRNP/LII9wK1dXVniaO/fWvf500aZJMJlu9erXRaHSt5unaiRMnOnXqVKekpCQ2NjY4OFgmky1evPjKlSvc2/nwww/DwsIqKiq2b98ulUqd7ojfiRMn7r333rCwsNWrVxsMBqeznvod4LPq819hIM+K51pqYN8b4CuklgBgNGtoaKitrW1oaOjq6sJ6NzD0kFoCAAAYiJ9++umxxx577LHHrl271tXV9emnn1ZXV+v1evbsM888s2fPHq1Wq9Vq33vvvbVr17IZBPL5YnZ29quvvmo2m0tKSjIzM7mN3759m9Rh7jp79iy3wqRJk9x+SPndd9/98Y9/PHLkSFtbW1ZW1tatWymXOVmerq2pqXHqlFvt7NmzH3300cmTJ41GY1NTU25u7osvvvj999+z7VdXVx84cODxxx9vbW396KOPnO6Ix9/+9rc//vGPn332WUtLy7PPPvvaa69xz/L0O8Bn1ee/Qr+fFf+1A/zeAJ8xAACjlM1mq62tvXFXTU1NY2OjwWBwOByBDg3GCrvdTr79yAC64SA8PJwstzz6hIeHCwSCQEcRGGvXri0oKAh0FDAyfPLJJ48//nigowCPJk6c+I9//KPfl6vVavJufOiRz/AMBoN/m12+fPnBgwc9nV22bFlZWRm3pKysjPsdTlHUZ599xn3p2kifb4pdKyxevPjLL79kXx47dsxTI76W/+Y3v7l16xa35J///OeCBQvYqzo7O8lBV1eXN8GzFi1adObMGfbliRMnuNfy99tn2PwVvPlX6Ec5fx2/fG8MUF5eXlZWlt+bHZ6w1hIAjFpCoTAhIaG3t9dgMBgMBrvd3t3d3d3dLRAIpFKpTCaTSqXYqRQGlUAgkEgkFovFbDaTJb0BAADAe2fPni0qKuI5e+DAAW7JrFmznIafPPXUU36P6vvvv589ezb78re//a2/Wr506VJCQoJTYWhoKHscHh5ODsLCwnxq+eLFi8nJyezLefPm+dTvAA3GvwK/QH1vjFn4MxcARjOapkNDQ0NDQ1UqFZtjstlsbI5JJpOFhYX58RcngJPg4GCLxWIymaRSaaBjAXBG0uvM8FiTbiiDoWl6mNw1APCz2+38HwS6/l8e0f+7Q0JCfvrpp3vuuWeM9DuoRtn3xjCHtZYAYKwICQmJiopKSEiIj49XKBQSicThcHR1dWm12lu3bul0OiyIA4OBbLOC7y4YYhqNxptqQ/NHttFo9KbaUP7F731fvo4LAAD/euihh/77v//b09lHHnnku+++45ZcvHhx/vz5gx3VjBkzLl++zL48c+bMABs0m83kYMmSJYcOHRpga27NmTOHu3bSt99+yz07eP36Hfus+AXqe2PMQmoJAMac4ODgyMjICRMmTJgwQalUisVim83W0dFRV1dHckxe/sYC8AZZyRvfVDDEmpqauC9NJtOGDRvUarVGozlw4AB3cyWKor755pu4uDin/XFeeumlKVOmSKXShQsXsmu1ki11CgoKnOobjcbf//73CoVi+vTpVVVV7GY9Op1u5syZUqlUrVZnZWV5k2O6c+fOnDlzFArFc88919PTw+23rKyMoqiysjKaprnbg86aNWvWrFlePhlyudMgCE/3pVQqDQaDp22JAGAIbN++/Y9//CNZJKi3t7eqqqqoqOi5554jZ3fu3Pnmm29WVFTYbDabzVZRUbFly5adO3cOdlRbt2597bXXyFqKFRUVf/vb33xtQSwWkx81jY2NBQUFc+fOJeV5eXmFhYXvvPPOzz//bLVa9Xr9V199tWTJkoHHnJubu3Hjxv/7v//r7e39+uuvy8vLuWcHr9+B8/Ss+AXqe2PMQmoJAMYuiUQSERExYcKEmJgYmUxG0zTJMd25c6eurs5mswU6QBgNgoKCaJq22+1WqzXQscDYlZuba7FYrl69evPmTalUym6uRJSXl1dVVTntj5OXl1dVVdXR0ZGTk7N8+XJSSAb7NDQ0VFZWcutv2rRJqVQ2NTWdP3/+yy+/pDib7+Tn51ssltra2vnz52dnZ/cZ6oEDB44ePVpbWyuTyV5//XVSePHixTlz5qSlpVEUlZqaOmPGjC+++IK9hCwg6uWjSEtL8zRFwvW+yINi1yj1sgsA8KNZs2aVlpbu3LlToVDExMQ8/fTTJpPpP//zP8nZe++99/Dhwzt27FAoFAqFYufOnZ9++umUKVPIWXbfercvKYr65z//6bS3Pfk5w9Zn08pOKeY5c+Zs2bIlLS1t3LhxBQUFrgkLnmsJ8qNGIBDMnj27pqbm5MmTpDwuLu7ChQs1NTUzZ86UyWRz585l1wxyeztOd8Tj4Ycf3rp168qVK6Oiov7rv/5r165d3Gt5+h3gs+rzX6Hfz4r/2gF+b4CvMM8cAOBfGIbp6enp6uoyGo1kCfBARwSjRF1dnclkio6OHg4za+RyOZkZGuhA/O9//ud/7Hb72BzrXltbu3HjxqysrNjY2IaGBu6pmJgYrVar0WiuXbumVCpdr6Vp2mq1kmXm6bsrEFVXV2/cuLGiosJsNk+fPv38+fPsX4w0Z5Ui9lilUl2/fp20r9PpVCoVKY+IiOCmsaKiolpaWnhuhKbp+vr62NhYiqL0ev3UqVPZ+itWrFi9evWKFSuOHj167NixTz/9tH/PyvUueO7Lbc2R7tChQ0eOHDl+/HigAwH3Jk2adOTIkWnTpvXv8ujo6AsXLiQlJfk3Km8wDCMQCAwGwxhcW1Cn0yUlJXV1dQU6EBheduzYodVqCwoKAh3IUMAy3gAA/0LTtEwmk8lkNpvNYrEEOhwYPYKDg00mk8lkGg6ppfHjxz/++OO//vWvAx2I/124cMFut69fvz7QgQTAvn37yIFWqyUHTgkR/mGYrtsXZmRkrFq1qri4WKlUtra29rlyE/eTXm6/ycnJp06d8uIO3HA4HALB/x9fv3379pUrVy5ZsuTtt98m+3wPPYvFIpFIAtI1AAxbDQ0Nb731ljejMgFGMaSWAACciUQi7BMPfkRW8h4myy3J5fKUlJTFixcHOhD/e/75581m89jcSJgsQsRj5cqV+fn527dv1+l033777bFjxz755BOe+lqtdsaMGeHh4ZWVlX/5y1/6DCAzM3PPnj1vvfWW0WjkbhOemppaVFT02GOPxcTEcPNEPAoLC59//nmpVLpt27aMjAy2fOrUqQ899NCyZctmz549adIk7iVkoaVLly55076vyBofS5cuPXPmTF5e3rlz5wajFwAYcXbt2rVp0yaKoqKiorZs2ZKVlRXoiAACCWstAQD4xmq1/vzzz04rlQDwICt5m0ymUTatBoYzlUrFfZmfn9/R0aFSqe6///4TJ07s3r2blHNXl+B+3bdv37p165RKZU5Ozpo1a3hqkq87duxoamqKjIycN2/esmXL2H5ffvllnU6XkpKiVCoXL168Y8dkGct+AAAgAElEQVQOnphJU2vXrl2xYkViYqLBYHCqv3nz5nPnzm3ZssXpQrvd7v1/LqdVOfifA3V3jQ+FQlFUVFRcXOxlLwAw6r3++utkFbaWlhbklQDwsTwAgG+6urqsVmtvb2+gA4ERQyKRCIVCu91uMplCQkICHQ6MCc3NzdyXUqn0ww8//PDDD52qcTMy3OP09PT09HTXU57qh4aGFhYWFhYWWq3WkydP3nfffaRcKBRu3rx58+bN3sTMNuhp/NEXX3zxH//xH9y94YgrV654075r2G4LnSqkp6djijQADH8TJky4c+eO21Pjx4+/ffv2EMcDYw1SSwAAvlEqlRKJBDPmwCchISEGgwGpJRjF3njjje3bt0skkrS0tG+++cbv7bPDiPbs2eP3xgEARjokjyCwMCEOAMA3NE2HhYUhQQA+CQ4Opmna4XAEOhCAwbJt2zaGYcxmc2lpqVqt9nv7zF1+bxkAAAAGCJ+6AwD4mdlsdjgcyD0Bl1wuHzduHHcXLYAxS61Wt7S0OBWqVCqnSXwAMBI9//zzGNkNQFy7di0xMTHQUQwR/LcHAPCztra2np6e4ODgcePGyWQyZBOAoigv98YCGAuQQgIYlcigwo6ODqFQGOhYAIaF3t7ezs7OQEcxRJBaAgDwM6FQSNO0yWRqamoSiURyuVwul+PPLAAYPB0dHWfOnDEajYEOBEaAH374Yey81YGhRD5LO3r0qFQqDXQsAMPCjh07tFptoKMYIkgtAQD4mVqtjoyM7Ozs7OzstNlsbW1t7e3t4eHhCoUCQ8QBYDA0NjY2Nzc3NTUFOhAYAdra2oKDgwMdBQAAjCp4kwMA4H9CoVCpVCoUip6envb2dpPJ1NHR0dnZSRJMYrE40AECwKhy7733rl69OisrK9CBwAhw6NChI0eOBDoKAAAYVZBaAgAYLDRNy2QymUxmMpn0en1PTw8ZyiSVSpVKJT40BgAAAACAUQCpJQCAQRccHBwTE2M2m9vb27u7u3t6enp6ekJCQpRKZWhoaKCjA4DRoLe3t729PdBRwAjQ09MT6BAAKJqmybLfbk9RdxcF97XNPi/k6dcv9QHGLKSWAACGSFBQUHR0tEKh0Ov1BoOht7dXq9WGhoYqlcqQkJBARwcAI1hoaGheXl5eXl6gA4GRITU1NdAhwFih0WgaGxtdy3nyNQzD9G93XW8u9DVP5H39sLCw7u5unxoHGE2QWgIAGFJBQUEajcZisZARTEaj0Wg0hoSEREZGYorcGNHvP5oBPNm7d+/evXsDHQUAgDPX7QXKysqWLFlC/TJr09PT8+KLLx49enTSpEkff/yx0yWzZs2iKOrSpUve9Hjnzp2MjIyqqqr09PSCggJ2uzq3/RqNxg0bNhw9ejQhIeHTTz+dOnUqW8FtffLr+4MPPti5c2dLS0tJSUl6ejpFUUql0mAwsL/cMdAJxiBBoAOAkWTr1q1bt24NdBR9GylxwlgmkUjUavU999wjl8tpmu7t7a2rq9Pr9YGOCwaXw+Goq6urra11OByBjgUAACAA0tLSXDMvmzZt0mg0er3+9OnTn3/+udNZhmG8T9YcOHDg6NGjtbW1Mpns9ddf77NfpVLZ1NR0/vz5L7/8kuJkhdzWJyUNDQ2VlZUlJSWZmZmknPwJx9zlZagAowlGLfmHyWS6cuVKTU2NTqfr7e0NCgqKioqaPHlycnLyWBiGYLPZfvzxxxs3bjQ2NhqNRrI31uTJk2fNmsV+UAAArkQikUqlUiqVer2+q6tLJpMFOiIYXAKBwG63MwxjMpmwzBYAALj129/+VigU9u/azs7O5ORkgSDAAwhiY2MbGhrIMRnLExMTo9VqPdU/fPhwTU2NRCKJjIxcv359bm4u9+zly5e973rdunWxsbEURW3dunXq1Kn8IzpLSkquX78eFBQUFBT0u9/97pVXXvGmCzL7OD093Wq1eh8YwOiG1JIfVFdX//Wvf+3t7WVLjEbj7du3b9++ff78+bS0tF/96lcBDG+w1dfXHzlypLOzky2x2WyNjY2NjY0XL15MS0ubNm2aTw2SAUcYdgRjB5tgEonwM3n0U6vVIpFILBYHOhAAABiOvv/++4GMbJ0yZcqXX36ZkJDgx5C8xDBMREQEOWazSP1YBttisfglHofD0WeKjTs/3Y+jjSwWi0Qi8VdrACMC3sYMVE1NzeHDhxmGSUhImDVrVlxcXGhoqMViaW1traqqunLlyl//+tdRnFqqr68/cOCAzWaLiYmZPXv2hAkTZDKZzWbT6/U3bty4fPny8ePHfU0tAYxNyCuNEViyHQAAeMjl8oFcLhAI5HK5QqHwVzzeG0hqZtWqVe++++7WrVt1Ot2uXbuczvq01lJhYeHzzz8vlUq3bduWkZHBXzkzM3PPnj1vvfWW0WgsKirqX/CEWCwuLS1dunTpmTNn8vLyzp07N5DWAEYcrLU0IFartbS0lGGY3/72t88888y9994bFhYmFApDQkLi4+MXLFiwYcOGUZxXstvtR48etdlsM2bMeP7553/961+PGzdOJBKRfdYffvjhDRs2IK8EAAAAADA2qVQqpxKapslYIfaAoqjdu3fX19crFIrU1NTnnnuO+uV4IjKXvM++yCVr165dsWJFYmKiwWDYsWMHf787duxoamqKjIycN2/esmXL+oyTLXH6SlEUWXpJoVAUFRUVFxd793gARg98SD4gP/zwQ09Pz/jx4x955BG3FYKDg1esWOFa3t7eXlFRUVtb29XVJRKJNBrN7NmzyZYELHZe2I8//vj3v/9dp9MJBILx48fPnz8/Ojq63w3+6U9/unLlyv/+7/+2trZardY//elPFEVptdoffvjh559/bm9vp2laLpdPmTJl3rx5/J+u//Of/+zo6IiOjk5LS3M73FQikTzxxBPsS296YefBcSfEscf9i5Ooq6urqKioq6vr7e0NCQkZP3783Llz4+LinKpVV1dfuHChsbGRYZjIyMjk5OTk5GTM0YPAMhqNOp0uKioKq/MAAADACNLc3OxU4jZJJJVKDx48ePDgQbd1rly54k1f7FVuxze57Tc0NLSwsLCwsNBqtZ48efK+++7jr88tdKqQnp7ur6l8ACMRUksDUl1dTVHUzJkzfbqqtra2pKSE/dFjs9lu3bp169at3/zmN48++qhT5a+++urixYvcHm/fvv1v//Zv7ExmXxv84osvvv/+e6fCwsJC7svW1tbW1tbKysrf//73PG9lq6qqKIqaM2eOlysF9q8Xv7Rw+fLlsrIy9heAwWCorKz86aefli5dmpyczFb77rvvyN4QRENDQ0NDg+ueqQBDTK/XWyyWnp4epJYAAAAA/OiNN97Yvn27RCJJS0v75ptvAh0OwEiF1NKAkKRDfHy895d0dXV99tlnFovlgQcemDt3bkRERG9v77Vr186ePXvu3LmkpKQJEyZw6//9739PSUl58MEHZTJZU1PTiRMn2trazp8/z44G8rXBK1euzJ07d/r06Uqlkk0J3XPPPcnJyePHj5fJZBaLpaGh4ZtvvtFqtefPn1+8eLGne2lsbKQoyql9Ht70snXrVp4hQv2Ls6mpqby8nGGYBx98cN68eePGjevo6Dh//vwPP/xQVlYWHx9PRuo2NTWdOnWKoqiZM2fOnTs3PDy8q6uroqLCpz0pAAaDRqNpb28PyLoJAAAAAKPYtm3btm3bFugoAEY8pJYGxGg0UhTlul+4a1qELfnuu+/MZvOvf/3r9PR0UiKRSObOnSsUCsvLyy9duuSUqUlJSWFn240fP37JkiUfffTRzz//zFbwtcGZM2cuWrTIKby1a9eyxyEhIUlJSZGRkXv27Llx4wZPyqanp4eiqLCwME8V/NLLwFv4+9//7nA4Jk+e/Pjjj5OSiIiIJ554wmAw1NTUfPfdd8uXL6co6tKlSw6H47777luyZAmpplAolixZ0tPTU1lZ6eU9AgwGoVAYGRkZ6CgAAAAAAADcQGppqNXU1FAUNXv2bKfy+++/v7y8vK6uzqn8/7F373FO1Xf+x78n15lkMplkJnMfEFRAsbYi4KVQragUXF1FFLyxCNtu64qsPAqioo+fXURcsLayu5YVqn10qw9a25Fa0WqrVipW6rVFFAVUmMx9ksxMkklOkpPfH2eJMTPJZK4nmXk9/5hH8j0n3+/nZGrJvPP9fk/KNtg1NTVCiO7u7kF3OHPmzN5VqdNzjh496vP5khcJd3Z2ZnFN2Rr6KIPr4fPPPxdCzJkzJ6V97ty5hw8fTuR06oPzzz8/5bTzzjuPaAkAAAAAgD4RLQ2JxWLp6urq7u5OWajS5xbUKq/XK4RQ723Zex84dR5QspKSkuSnZrNZCBGLxQbdYe81NW1tbT/96U97enp6X2A0Gu3dmGC1Wjs7O3tffp8GPcrQe+jq6hJCuFyulHZ1HVwip1NPS97ESsVsEeQ+RVGy3PIMAAAAAIYX0dKQVFVVdXV1ff7559nvgaImPoqi9Hk0OTNSJd93c1g6NBqNKS1/+MMfenp6ampq5s2bV1FRUVhYqNPpotHoxo0bMw9dVVXV2dmZ5eUPepRh7AEYkzo7Oz0eT3l5udVq1boWZCsajba3t0ej0d73qQQAAADyC9HSkEydOvXQoUNvvvnmmWeemeWUAbvd3tHRsWrVqt6zYwZn6B2qC8EWL16cnBB1dHT0+8KpU6d+9NFHf/nLX7K5/EGPMvQeiouLPR5PW1vbhAkTkttbW1tF0l5R6mkdHR0pf+m1t7dnXyQw+jo7O6PRaGNjo81mc7lcer1e64rQP51O5/f74/F4JBLpnfgDAAAAeYQFFENy5plnFhcXNzU17dmzJ928oRRTpkwRQrz++uvDVcPQO1RnNhkMX8oZ9+3b1+8LzzzzzJKSkubm5nSXL8vyM888M9BR1HPC4fBw1aluZN77Lfrzn/8shDjppJPUp+qD3h2+8cYb/Q4BaKiurs7pdEqS1N3d/dlnn/l8Pq0rQv90Op26wFm9HQQAAACQv4iWhsRgMFxzzTV6vf6tt976n//5n3feeaejoyMSiSiKEgwGjx49unv37pSXnH/++RaL5Z133nnqqaeOHDnS3d2tKEooFGpsbNy3b9/27dsHWsPQO6yoqBBC7N69u62tLRKJtLa27t69+/333+/3hXq9fvHixQaD4a233tqxY8ff/va3zs7OWCwWDoebmpr+9Kc//fjHP37vvfcGOordbhdCvPvuu8kbdQ+lznPOOUen0x06dOjZZ5/1eDyxWMzj8ezevfuTTz7R6/WJHdBnz56t0+kOHjy4Z88er9cbi8W8Xu+ePXvYwxs5TpKk0tLSurq6goICRVHa2toaGhpS/vNBDrJYLIJoCQCAEyRJ6nczkJEbOsOhoVel1XUBo4YFcUNVV1e3fPnyp59+urm5+be//W3vE2w228KFC5OfXn/99bt27Tp06NChQ4eGXsDQO7zwwguffPLJw4cPqzebU82ePXv//v39vra2tnb58uW/+tWvGhsbf/Ob36QcNZlMV1555UBHOf300/fu3fvCCy+88MILaou6Ffqg66ysrFywYMGePXvefvvtt99+O9EuSdLChQvVxEo97ZJLLvn973+/f//+5D5nzpz51ltvscgIOc5sNtfW1nq9Xo/H09PTc/z48dLS0pT7ACCnWK1Wj8dDtAQAGMOqqqqampqyPDkej2sVwSTfDan3oaFXlaH/FDabLflu4EC+YNbSMKirq1u1atUVV1wxderU4uJig8FgNBrtdvtpp5125ZVXrl69+rTTTks+v7a29pZbbpk3b15tbW1BQYFOpysoKKipqbnwwgtvueWWQRQwxA5PPfXU66+/vq6uzmAwmEymmpqaK664IjkO63f0VatWXX755VOmTFEv32w2V1VVXXDBBatXr/7a17420FEuuOCCOXPmOJ3OlDRnKHXOmjXr5ptvPu2006xWq06ns1qtp5122ooVK84+++zk084777wbbrjhpJNOMplMJpOpurr68ssvnzdvnjhxbz4gl0mS5HQ6J0yYUFhYmJi+FIlEtK4LfSsoKNDr9eo8U61rAQBgRDQ3Nyc/DYVCq1evrqioqKqqeuKJJ9SdPTJbtWrV1KlTrVbrJZdc8sorr6iN9fX1JpNJkqTi4uI5c+Yk+knXnsGePXt6z0sKBALLly8vKio666yzDhw4kPKS2bNnz549u9+eM/Svtmzbtq22ttZkMtXX16vtTqfT7/dLJ2Q5BJALpOwDVGB8OnLkyM9//vO6urqVK1dqXQuQrc7Ozvb2dkVRdDqdy+UqLi7WuiL0oampye/3l5aWOp3OURt0zpw599xzz/z580dtxFFjt9v9fn/vW6MCwPhRWVm5fft2TW4/Go/HZ82a5ff7k29ZK0lf+ntzzZo1PT09P/jBD4qKin73u99973vfS7lhTsr5Qgi/319UVBSJRF577bUrr7xSndFjs9kuueSSX/7yl7Isv/jii9/5zncS9+fps71fKePeeuutNpvtvvvu6+rqeuyxx+66667ko7NmzRJC/PWvf83+zel9XZIkrV+//s477/zjH/+4ZMmSxFYGvc9E/tq8ebPb7d62bZvWhYwGFsQBmcTj8b179wohJk+erHUtwADY7Xar1drc3NzT09PS0tLd3V1RUZGyCz40Z7FY/H5/MBgczWgJADCGTZw4cc2aNVpXIWpqahobG9XH6uyb6upqt9v91FNPffDBB+q/etdcc80111yTuZ9PPvlkzZo1+/btC4fDM2bM8Pv9avuTTz559dVXG43GsrIyl8v13HPPZW4fKHUXDpPJVFZW9p3vfOeuu+5KPjqgUCmDBx54QAhx1VVXMcccYwB/ZgBf+OlPf3r22WfX1NTY7XZFURobG1977bXPPvvMZDLNmDFD6+qAgTEYDLW1tT6fr729PRgMfv755+Xl5TabTeu68AV1J+9QKKTOL9O6HABA3nvzzTe1Gjoejyf+LXO73eqDlDk40Wh0QH1ee+21S5cu3blzp9PpbG9vr6qqUtsvv/xyWZYDgYDH4/nf//3fSy+91Ov1ZmgfCg1vjSLLsslk0mp0YED4IAt84dixY/X19f/5n/95//33P/DAAz/72c8+/fRTvV7/j//4j+p964C8U1JSMmHCBLPZrChKc3NzU1OToihaF4X/YzQajUZjPB5nM28AwHiwePHirVu3CiHa2trq6+tvvPHGzOe73e6ZM2cWFxcfPHjwkUceSbS7XK79+/frdLq6urpp06YFAoHM7QO1dOnShx56KBKJNDY2PvjggylHB7TX0kAZjcb6+vpIJPL8889ffPHFIzQKMOyIloAvrFix4qtf/arL5TKbzQaDweFwnHXWWf/yL/8yffp0rUsDBs9kMtXV1anxqN/vP3bsGPtG5w51Q4pBf/YFACCXlZeXJz/dunWrz+crLy+fPn367t27t2zZkjiU2Lg6eQfr7du3r1y50ul0rl+/ftmyZeLE8rpJkya99957U6ZMkSRpyZIlu3btUs9P155Bn+Nu2bKloaHB4XAsWLBgxYoViXFVsVgs++2Q+uw/0ZLyUwixa9euJUuWOByOHTt27Ny5M8tRAM2xSRgAjBfBYLClpSUajUqSpN5QUuuKIILBoNvt1uv1o7ahG9t4AwBGgrogLmUbb2A8G1fbeDNrCQDGC4vFMmHCBKvVWlBQYDabtS4HQghRWFio0+lisRhTyQAAAJCn2MYbAMYRvV5fXV2tKEryvG5oSJIk9T5xgUCAeWQAAADIR8xaAoBxh5uR5RS2WwIAYORUVFRIvVRUVGhdFzCmMGsJAAAtqdFSOByORqMGA/8uAwAwnFpaWrQuARj7+OIaAAAt6fV6dSlcMBjUuhYAAABgwIiWAAD/R5blnp4erasYjywWi2BNHAAAAPIT0RIAQAghYrFYY2Oj2+0m4Bh96pq4YDAYj8e1rgUAAAAYGKIlAIAQQuh0usLCQqPRWFhYqHUt405BQYFer1cUhTVxAABkqb6+3mQyOZ3Ob37zmymHBnonXA3vnKtuK57NmRperybvT/bvzPB2m+W4I1Re/iJaAgAIIYR6t5Ta2lruH6cJp9PpcrnUTZcAABgbqqqqRq7zJUuW7Nq1y+PxvPLKKymHBjoLuPf5Npst3cnD+z1Q76HT9a/V9Q6i/2ExQoP2222W4zLTPAV/PwAAvqDX67UuYZwqKSkpKSnh/QcAjCXNzc3JT0Oh0OrVqysqKqqqqp544okpU6ao7ZFIZP369VOnTp0yZcq6detkWVbb1Ykh27Ztq62tNZlM9fX1avvEiRMlSYpEIosWLUqZPLJnz57e00mCweC3v/1th8MxY8aMQ4cOJZ/Q5/lOp9Pv90snJNrb2tpmzZpltVorKipuvfVWNQNSz3n44YdtNtu+fft27txps9kSpfYpEAgsX768qKjorLPOOnDgQOb+B3G96d63gV5vuvMH+vtSzZ49e/bs2Rneln4NdNwMv/djx46de+65DodjxYoV/e4FkW7cgfYzthEtAQAAAABG3F133SXL8oEDB44ePWq1Wj0ej9q+YcOGmpqaQ4cOffzxxzU1NRs2bFDb1YkhjY2NBw8e3LVr15IlS9T2zz//XD0UPyExxMKFC3tPJ7njjjucTmdzc/PevXtfeOEFkTTlpM/z1cJ6d7527dqtW7fKsnzkyJF58+atXbs20VUsFnv88ccvu+yyAwcOPP7444lS+3THHXdUVVV5PJ6XXnrp2Wefzdz/IK433fs20OtNd/5Af1+Jo0Oc6TPQcTP83p944omnn376yJEjRUVF69atG9y4A+1nbJOYxwVgdEjSaP8fznCNuGnTpn379v3ud7/LZqyFCxd+4xvfWL9+/dDHBUbCnDlz7rnnnvnz52tdyPCz2+1+vz8Wi2ldCACMR/F4XKfT+f1+q9VaU1PT2NiYfLS6utrtdldVVX3wwQdOpzPltZWVlR999FFJSYkQwuv1nn766U1NTeqh5I9zKR/tMnzSSzlUXl7+0UcfqeO2tbWVl5envLB3V312XlpamojDhBAul6u1tTX55N4P+uR0Og8fPqzW09HRUVZWpp6crv+BXq/I+L5lf73pjg7u9zUIQxw33e9dkqSGhoaamhohhMfjmTZtWvL7nP24/fazefNmt9u9bdu2obwJ+YJZSwCQSSAQePjhhx9++GH1ab/b9f3whz/84Q9/2NPTM/KljSq+hwAAAFlyu92JKSrqA7fbLYSIRqPpXjKinzSSP78NYqDEAqizzz47niQlRxic5NVVI9H/EEtKR6tPhgMaN5vfu6Io2Wwz2u+4WfYzho3riweQp0bzdgy/+c1vzj///FNPPVV92u+/K9OmTZs5c+bu3btHrqT29vaurq6R6783RVEaGho6OjpGc1AAADDGLF68eOvWrUKItra2+vr6G2+8UW1ftmzZY489puYp27dvv+mmm4Z33CVLljz88MOKovj9/h07dmTzEqPRWF9fH4lEnn/++YsvvlhtXLBgwY4dOxoaGhRFGUo9S5cufeihhyKRSGNj44MPPphoH67+B6HP601ncL+voe+1NNBxM/zeH3vssYaGBq/Xe//991977bWDHndA/YxtREsAkMmzzz57zTXXDOgl11577W9/+9uRKMbj8dx5551XX3115rt4DLtAIBAKhTwej1bfngEAgHxUXl6e/HTr1q0+n6+8vHz69Om7d+/esmWL2r5x48a2tra6urq6urqOjo6NGzeq7eq3ib1/qntLixP7Nyd/6Zh4mty+efPm5ubmsrKyOXPmXH755ckl9Xm+EELdssfhcOzYsWPnzp1q42233dbW1jZ37lyn0zl//vzNmzenFCay+wZ0y5YtDQ0NDodjwYIFK1asSLyqz/4Hcb3p3reBXm+68wf6+1LFYrHs5xwNy7h9/t7VQ8uXL1+0aNHkyZP9fn/ifR7QuJn7GY/iAMa6UCj03e9+1+l0VlRUqF+MqO2xWOzf//3fTzrpJIfDcfPNN/v9frVdCPHoo49OnDixoKDg3HPP/fvf/97v+T/84Q9ra2vVZcmHDh26+uqrnU5ncXHxVVdd1dbWljgtQ5GRSOSee+6ZMGFCSUnJ1q1b1cY+u+r9/2D9jpi4HUlFRcXq1atDoVDmdybZpEmTDh8+nHiaOCccDt9yyy3qa//jP/4j+bUff/zxySefnPF3MmDt7e3f//73zWazEOKZZ54Z3s6z0dXV9cknn3z88cdut1tRlNEvAMPl61//+gsvvKB1FSOiuLhYp9NpXQUAjFPqRJvE58PcJMvyb37zm9NPP13rQjCqtPq9P/DAA7feeusoD6oVw+gGWQA0sHHjxs8///zvf/+7EOLmm29OtP/oRz969dVXX3755ZKSkttuu+3ee+996KGH1EO///3vX331VZfL9dBDD333u9/985//nPn8P/3pT2+++WZ1dbUQ4pprrvnRj37085//XJblDRs23HnnnY899li/RT744IN79+59+eWXnU7nD37wA7Wxz67i8XjK1nr9jnj//fd/8MEHb731lhBi2bJlmzZtuu+++zK8M8mam5urqqp6t2/atOnjjz/+29/+Fo/Hly1blnyouro6ZevKoWhvb9+0adN///d/CyHC4fDEiRNramrefvtt9eivfvWrzs7OdK+NRCI+n2+4KonFYmoqZzAYCgoKhqtbjLKPPvpo48aN2fxXmXfG3h5nAIDhcvfdd2/atMlkMi1cuPDll1/WuhyMEn7vo4Y7xAFj38knn/zcc89NmzZNCHHw4MHp06er/+GfdtppzzzzzNSpU4UQLS0t55xzzmeffSaEkCSpqampsrJSCBEMBsvKyoLBYObzP/vss4kTJ/Yeuqura/r06cePHxf93STi1FNPra+vP+OMM9KdkGVXfZ528sknP/vss6effroQ4sCBA1deeeXhw4czvDPJCgsLOzo6LBaL+jTR5w3v4zQAACAASURBVCmnnPLb3/420edXvvKVxGsDgYDL5VLftCHy+/2LFy/+/e9/rz41mUwWiyX5viqffvop/zcOJJhMpnA4rHUVADAexZPuEKd1LUBOGFd3iCNaAsa+wsJCn8+nrqUKhUKFhYXqf/gWiyX5S36dTqfetFtKc2PXDOcripJYjfzWW2/dcccd7777rtfrFULo9Xr1biCZo6XCwkKv15syFybLrvo9LbnzUCjkcDjUC0n3ziSbPHnyiy++eMopp6S8Gyl9Jr/2k08++da3vnXkyJFMv5WBePnll++8886DBw8Gg0Gr1drU1KThh7ZQKNTY2BiLxUwmU01NjcHA7Ndh1t3d3dzcbDQaTzrppJHof86cOffcc8/8+fNHonMAwLhFtJSioqKi9yaV5eXlLS0tmtSD0TeuoiW28QbGvurq6k8//VR9fPTo0UT7hAkT1DkvKjUnyiDD+clb9C1duvSf/umfDh8+HI1GOzo6+u1WVVdXp84kSpauq5T9Efsdsbq6OnHhhw8frqmpSbT3+c4kmzlz5uuvv967vaamJvGSlBTp9ddfH+L9L1JcdNFFb7755rPPPnv22Wd3d3c/+uijw9j5QBUUFNTW1hoMBlmW3W53lr9fZM9qtdrt9oqKCq0LAQAAg9fS0tJ7PxpyJYxVREvA2HfdddetWbOmsbGxsbFxzZo1ifbvfe973/72tz/88ENZlv/+978vXbo0cz9Znh8IBIqLi61W6+eff/6d73wnyyKXL1++atWqo0ePer3e22+/PXNXZWVlH374YfYjXnfddatXr25oaGhoaFi9evV1112XaO/znUl2+eWXP/30073br7/++ttvv93tdrvd7n/7t39LPvT000+n3HxkWFx44YX79+9/9dVX9+/fPyyr7QbNZDLV1dUZjUZZlo8fP67OEcNw0el05eXlhYWFWhcCAAAAZIVoCRj7NmzYUFdXd8YZZ5x11llf//rXjUaj2r5q1aorrrhi0aJFxcXFN9xwQyJwSSfL83fu3Ll+/XqbzfbNb37zggsuyLLItWvXnn/++RdccMHJJ588YcKEzF2tX7/+/PPPT8xd6nfEDRs2nHbaaTNnzpw5c+b06dPvvvvuzO9Msquvvvovf/nLxx9/nNJ+9913T548+Stf+cqMGTMuvfTSRPuhQ4f2799/1VVXZXnhA3XBBRf88pe/7LPU0WQwGGpra41GYyQSaWhoIF0CAAAAxi32WgLGl7/97W9XXnllusVf41mGd+aBBx7485///Nxzz2XTz2WXXTZ37tz169cPd4G5KBqNNjQ0RCIRo9GorpLTuiL0j72WAAAjgb2WgBTstQRgrLn99tubm5s///zzNWvWXHnllVqXk0OyeWfuvPPOLHMlIcRzzz03TnIlcWLuksFgYO4SAAAAMG4RLQHjwkknnTRr1qzZs2dPnjx548aNGlYi9UXDenLnnclTyemS2+0mXQIAAJrT6uOlth9rAQ2xeAEYF1avXr169WqtqxBCiFxbhJs770z+MhqN1dXVbrdbluWmpqaamhqdju8tAACAqKqqampqyvLkYDBosViGZVytPnBmP67NZuvu7h7RYoDRxKd/AMBQmc3mmpoavV4fCoWamppyLUAEAACaaG5uTjxOma6e/LStrW3WrFlWq7WiouLWW29N3AlXPcHn861cudJms61du1Ztr6+vN5lMkiQVFxfPmTNnypQpiVH27NnTe1J8JBJZv3791KlTp0yZsm7dOlmWk/vftm1bbW2tyWSqr69PftXs2bNnz56d5ZX2OW66/p1Op9/vz4X5+8BwIVoCAAwDs9lcXV2t0+mCwaDH49G6HAAAkFvi8fi55567b98+9em+ffvOO+889euotWvXbt26VZblI0eOzJs3LxEhqUcXLVo0d+5ct9v9rW99S21ftmzZP/zDP0Qikebm5u9///s+ny8xysKFC3t/xbVhw4aamppDhw59/PHHNTU1GzZsSO6/sbHx4MGDu3btWrJkSUrB2X9b1ue46fpXPynFT8hyCCCXcYc4AMCwCQQCPp+vqqqKNXHDoqury+v1lpSU2O324eqTO8QBAEZC8h3iampqGhsbk4+qa+dffPHFLVu2vPTSS0KISy65ZN26dZdccokQorS0NPl7KZfL1draqj6WJKm7u7uoqCi5t2efffbqq6+ORCJlZWUul+tnP/vZrFmzkk+QpC/9nVtZWfnRRx+VlJQIIbxe7+mnn55Yppd8ZsqrBqF3D+n6H/pYyH3cIQ4AgMFQP02SKw2XWCwmy3JXV5fWhQAAMAButzsxH0d94Ha7hRCXXnppT0/P3r179+7dGwqF1FxJCHH22WfHkyRyJVVKriSEuPzyy2VZ9vv977zzzk033XTppZf2W1Iu5ziJBXpA/uLTPwAAOaq4uFiSpFAoxIdOAMDYcN99991777333nvvfffdl2hcsGDBjh07GhoaFEXJphOXy7V//36dTldXVzdt2rRAIJD5/GXLlj322GNqbrV9+/abbropm1EGtNfSQBmNxvr6+kgk8vzzz1988cUjNAowaoiWAADIUXq9Xr1XDhOXAAD5qLy8PKVl3rx5iqLE4/GLLroo0Xjbbbe1tbXNnTvX6XTOnz9/8+bNaru6xXXv7a4nTZr03nvvTZkyRZKkJUuW7Nq1K3EocWbySzZu3NjW1lZXV1dXV9fR0bFx48aU/lN+qmKxWPZznfocN0P/6tZLDodjx44dO3fuzHIUIGexwhMAgNzl9/ubmpoMBsOkSZOGpUP2WgIAjITkvZa0rgXICey1BAAAcoLVatXr9dFoNHEnZgAAACCnEC0BAEYc99YdNEmSbDabYE0cAAAAchXREgBgZEWj0YaGhpS7vSB7arTk9/uz3NwUAAAAGE1ESwCAkSXLcigUCgQC0WhU61ryUkFBgclkisfjTFwCAABADiJaAgCMLIvFUllZWVdXZzAYtK4lX9ntdiFEZ2en1oUAAAAAqYiWAAAjzmazGY1GravIY8XFxTqdTpblnp4erWsBAAAAvoRoCQCAXKfT6YqKigQTlwAAAJB7iJYAAMgD6po4v98fi8W0rgUAAAD4AtESAAB5oKCgwGw2s5k3AACakyRJw6E1HB1Ih2gJAID8wGbeAID8UlVVNfROgsFg9ifbbLaR7kcIEY/Hs+9qQOP2K8uhh+t9ALJEtAQA0MyAPpnBZrPpdLpIJMKHQgBAXmhubk5+GgqFVq9eXVFRUVVV9cQTT0yZMkVtV2fi+Hy+lStX2my2tWvXqu1tbW2zZs2yWq0VFRW33npr8j9/q1atmjp1qtVqveSSS1555RW10el0+v1+6YTEyRn66VO6foQQe/bsSWlUnz788MM2m23fvn07d+602Wz19fX9jjt79uzZs2dn8zYGAoHly5cXFRWdddZZBw4cSD40ou8DkD2iJQCABhRFaW5uTvnEicx0Op36JSQTlwAA+eiuu+6SZfnAgQNHjx61Wq0ej0dtV79qWrRo0dy5c91u97e+9S21fe3atVu3bpVl+ciRI/PmzUtETkKIBx544NChQz6fb/369VdccYXaqHYYPyFxcoZ++pSuHyHEwoULU1rUp7FY7PHHH7/ssssOHDjw+OOPL1mypN9xe3eezh133FFVVeXxeF566aVnn302+dCIvg9A9iS+MQYAjL5QKNTQ0BCPx10uV0lJidbl5I1wOHzs2DFJkiZOnGg0GgfRw5w5c+6555758+cPe20AgPEsHo/rdDq/32+1WmtqahobG5OPVldXu93uqqqqDz74wOl09n65JEnd3d3q7VATSktLE/GTEMLlcrW2tgohPvnkkzVr1uzbty8cDs+YMWPv3r2Jv2olqY+/cNP1k0Gf/aQ7mnia8mAQ4/bJ6XQePnxYfd86OjrKysrUUUbhfcBQbN682e12b9u2TetCRgOzlgAAGigoKCgtLRVCtLe3h0IhrcvJG2az2WKxxONxn8+ndS0AAPTN7XYn5suoD9xutxAiGo1meFVKriSEOPvss+NJEjnItddeO2fOnA8//NDn8/3yl79M16Esy5n7yVKin4Ea4rj9FjPK7wOQAdESAEAbDofDarXG4/Hm5mam0GavpKREr9cPbsoSAAAaWrx48datW4UQbW1t9fX1N954Y+bzFyxYsGPHjoaGBkVRktvdbvfMmTOLi4sPHjz4yCOPJB8yGo319fWRSOT555+/+OKLM/eTQZ/9DFTmcbPfa2np0qUPPfRQJBJpbGx88MEHE+2j8D4AWSJaAgBoprKy0mAwRCKRtrY2rWvJG1arddKkSawiBADkvvLy8uSnW7du9fl85eXl06dP371795YtW9R2davp3ttO33bbbW1tbXPnznU6nfPnz9+8ebPavn379pUrVzqdzvXr1y9btizRgxBi165dS5YscTgcO3bs2LlzZ+Z+Muizn0SRKQ+SC8imflUsFsvyq7UtW7Y0NDQ4HI4FCxasWLEiMcoovA9AlthrCQCgpWAwqE6Sr66utlqtWpcz9rHXEgBgJCTvtaR1LUBOYK8lAABGicViUSfgtLa2xmIxrcsBAAAAMDBESwAAjZWVlZlMpmg0yrI4AAAAIO8QLQEANCZJUmVlpXrXYb/fr3U5AABg7KuoqJB6qaio0LouIC8ZtC4AAABhNpsdDofH42ltbS0sLNTr9VpXBAAAxrKWlhatSwDGDmYtAQBygtPpNJvNsVistbVV61oAAAAAZItoCQCQExKz0P1+fyAQ0LocAAAAAFkhWgIA5Ap1WZwQorW1VVEUrcvJA/F4vKOj49NPP+XmegAAANAK0RIAIIeUlpYajcZoNNrR0aF1LXlAkqRgMBiNRru6urSuBQAAAOMU0RIAIIdIkuRyuYQQPp8vHA5rXU4eKC0traqqUmd7AQCAIVJvFTdqY43OQMBII1oCAOQWq9VaVFQkuHVLdiwWi/p2AQCQa6qqqobeSTAYzP5km802xH7i8Xj2ww1R9mNluC4gFxAtAQByjsvl0ul04XDY5/NpXQsAABik5ubm5KehUGj16tUVFRVVVVVPPPHElClT1HZ1opDP51u5cqXNZlu7dq3a3tbWNmvWLKvVWlFRceuttyZnQ6tWrZo6darVar3kkkteeeUVtdHpdPr9fumExMkZ+knn2LFj5557rsPhWLFiReLuImq3e/bsEULs2bNHkqS6urrES2bPnj179uws3xn15SmzltSWbdu21dbWmkym+vr6zNcF5A6D1gUAAJDKYDA4nc729nZ2px4Jzc3NR48e1boKAMCYks0EnLvuukuW5QMHDhQVFf3ud7/zeDyJ10qStGjRomXLlj388MN//etf1fa1a9du3br1/PPPD4fDL7300tq1a//rv/5LPfTAAw9s27YtEom89tprV1xxRXd3txDC4/FIktS7kgz9pPPEE088/fTTFovl//2//7du3Tr1/DfeeOP2229fuHChEGLBggUzZ87cuXPngN6BhIULF6pXndyotjQ2Nh48ePCPf/zjkiVLZFnOcF1A7uB/oACAXBSPx2VZNpvNWhcy1ixYsODNN9/UugoAwBjk9Xr9fr/Vaq2pqWlsbEw+VF1d7Xa7q6qqPvjgA6fT2fu1kiR1d3enLPEuLS1NxE9CCJfL1draKoT45JNP1qxZs2/fvnA4PGPGjL179yb+qu0zgknXTzqSJDU0NNTU1AghPB7PtGnTEucvWrToxhtvXLRo0dNPP/3rX//6qaee6u9dyaR3tckt6R4jX2zevNntdm/btk3rQkYDs5YAALlIkiRypZHw/PPPa10CAGAMisfjOt3/bbfidrvVBymBSDQazdBD760Dzz777BdffLH3mddee+3SpUt37typznFOt6OTLMsmkylDP9lQFCVxXUKITZs2LV68+LLLLvvBD37w61//enB9DlHiuoDcwV5LAAAAAIARt3jx4q1btwoh2tra6uvrb7zxxsznL1iwYMeOHQ0NDYqiJLe73e6ZM2cWFxcfPHjwkUceST5kNBrr6+sjkcjzzz9/8cUXZ+4ng8cee6yhocHr9d5///3XXntton3atGnnnXfe5Zdffs4555x66qnJLxnQXksD1ed1AbmDaAkAAAAAMPzKy8uTn27dutXn85WXl0+fPn337t1btmxR29Uth3pvU33bbbe1tbXNnTvX6XTOnz9/8+bNavv27dtXrlzpdDrXr1+/bNmyRA9CiF27di1ZssThcOzYsSOxEVK6fvqkdrV8+fJFixZNnjzZ7/ennH/nnXe+9tpr9957b8oLY7FY9mvWEleafMmJlpSf6a4LyB2s2AQAYOyIRqNer7e0tDR59j4AACNNXRCn7rWkdS0ja9u2bUePHn344Ye1LgS5jr2WAABAXnK73bIs6/X6PjdJBQAAQ5GYRkS0BCTjK00AAMaO0tJSIYTX643FYlrXAgDAWBM/QetCgNxCtAQAyA/xeDwYDGpdRa4rKioym82Kovh8Pq1rAQAgd1VUVEi9VFRUaF0XkJeIlgAAeUBRlGPHjqmrvbSuJdepS+G8Xm/mezwDADCetbS0xHtpaWnRui4gL7HXEgAgD+h0OpPJFIvFIpGIyWTSupycVlRUZLFYgsFge3t7ZWWl1uUAAMaFeDxuNBqnTJmidSFArgiHw2eccYbWVYwSoiUAQH5wuVw6nY4bn2WjrKzs2LFj3d3dJSUlBQUFWpcDABj7JEmKRCIPPvig2WzWuhYgJzzzzDPjZ1suoiUAQH4wGPg3K1tms9lms3V3d7e3t9fW1mpdDgBgvLjqqqusVqvWVQA54ciRI263W+sqRgnf/QIAMAaVlZVJktTT0xMIBLSuBQAAAGMZ3wADADAGGQyGkpISr9fb3t5usVgkSdK6IgDA2HfvvfcajUatqwBywl/+8pevfOUrWlcxSpi1BADA2ORwOHQ6nSzL3d3dWtcCABj77rjjDnIlIOHcc8+9+OKLta5ilEjjZ1spAADGG3XWksFgmDhxIjugAwAAYCTwKRMAgDGrpKTEZDJFo9GOjg6tawEAAMDYRLQEAMhXTLztlyRJLpdLCOHz+cLhsNblAAAAYAwiWgIA5CWPx/Ppp58Sl/TLYrEUFRUJIdra2rSuBQAAAGMQ0RIAIC/JshyLxTwej9aF5AGXy6XT6Xp6etjPGwAAAMOOaAkAkJccDocQwu/3y7KsdS25zmAwqG9XW1uboihalwMAAIAxhWgJAJCXzGazxWIRQni9Xq1ryQMOh8NgMMRiMd4uAAAADC+iJQBAvnI6nUKI7u7uaDSqdS25LrGfN7tTAQAAYHhJ3F4HAJC/jh8/HgqFHA5HWVmZ1rXkgWAwqE71AgAAAIYLs5YAAHmspKRECNHZ2ckWQtkgVwIAAMCwI1oCAOQxm81mNBoVReHeZwAAAIAmiJYAAPlNnbjk8/m0LgQAAAAYj4iWAAD5rbi4WKfTybIcDAa1rgUAAAAYd4iWAAD5TafT2Ww2wcQlAAAAQAtESwCAvKeuiQsEApFIROtaAAAAgPGFaAkAkPdMJlNhYaEQorOzU+ta8kwgEPD7/VpXAQAAgDxGtAQAGAvUiUudnZ2KomhdS94IBAKNjY0tLS3RaFTrWgAAAJCviJYAAGOB1Wo1GAyKojAHJ3tWq7WwsLCkpESv12tdCwAAAPKVFI/Hta4BAIBh4PF4Ojo6CgsLa2trta4lb8TjcUmStK4CAAAAeYxZSwCAMcJut0uS1NPTI8uy1rXkDXIlAAAADBHREgBgjNDr9RaLRQjR1dWldS0AAADAeEG0BAAYO4qLi4UQXV1dLPcGAAAARodB6wIAABg2VqvVYrEUFRVpXQgAAAAwXrCNNwAAAAAAAAaJBXEAAOBLZFnmmycAAABkiWgJAAB8obOz89ixYx0dHVoXAgAAgPxAtAQAAL5gMBji8bjX6w0EAlrXAgAAgDxAtAQAAL5gtVrtdrsQoqWlJRqNal0OAAAAch3REgAA+BKXy2U2m2OxWFNTE5suAQAAIDOiJQAA8CWSJNXU1BgMhlAo1NzcrHU5AAAAyGlESwAAIJVer6+qqpIkye/3ezwercsBAABA7iJaAgCMTeFwuLm5mTudDVpBQYHL5RJCdHR0sKU3AAAA0iFaAgCMTZFIpLu7u6urS+tC8pjdble39G5ubpZlWetyAAAAkIuIlgAAY5PFYrHb7ZWVlVoXkt9cLldBQYGiKM3NzYqiaF0OAAAAco7EnV8AAEAG0Wj0+PHj0WjUYrFUV1dLkqR1RQAAAMghzFoCAACZGAyGmpoanU4XDAZbWlq0LgcAAAC5hWgJAAD0w2QyqfOVuru72RkdAAAAyYiWAABA/woLC8vLy4UQHo+ns7NT63IAAACQK4iWAABAVoqLi51OpxCitbU1EAhoXQ4AAAByAtESAADIVmlpaVFRkRCiubk5HA5rXQ4AAAC0R7QEAAAGoLKysrCwUFGUpqYm7jMLAAAAiQ+FAABgQBRFaWxsdDqdFotF61oAAACgMaIlAMDY5/F4/H5/TU2NXq/XuhYAAABgTGFBHABg7PP7/eFw2O/3a10IAAAAMNYQLQEAxj6r1SqECAaDWhcCAAAAjDVESwCAsU+9qVkwGGQZOAAAADC8iJYAAGOf2WzW6/WKooRCIa1rAQAAAMYUoiUAwLig3suMNXEjrbu7W1EUrasAAADA6CFaAgCMC+p2S4FAQOtCxjKfz9fc3Ox2u1l4CAAAMH4QLQEAxgV11lI4HI5Go1rXMmZZLBaDwVBUVCRJkta1AAAAYJQQLQEAxgW9Xm82mwVr4kaSyWSaMGGCw+HQuhAAAACMHqIlAMB4oa6JI1oaUXq9XusSAAAAMKqIlgAA40VhYaEgWgIAAACGFdESAGC8KCws1Ol0sVgsHA5rXQsAAAAwRhAtAQDGC0mS1IlLPT09WtcCAAAAjBFESwCAcYQ1cVrp6enxer1aVwEAAIDhZ9C6AAAARg+zljQRi8WamppisVgkEnG5XJIkaV0RAAAAhg2zlgAA40hBQYFOp1MUhe2WRpNery8tLZUkqbOzs6GhIRaLaV0RAAAAhg3REgBgfGFNnCbsdnt1dbVOpwuFQsePH5dlWeuKAAAAMDyIlgAA4wtr4rRisVhqa2sNBkMkEmloaOBXAAAAMDYQLQEAxpdEtBSPx7WuZdwxm811dXUFBQWxWKyhocHj8WhdEQAAAIaKaAkAML6w3ZK2DAZDbW2tzWYTQnR0dDQ2NiqKonVRAAAAGDyJ72wBAONNW1ubEMJut5tMJq1rGb+6u7tbWlri8bjBYKiqqiooKNC6IgAAAAwG0RIAANBGOBxuamqKRCKSJJWVlZWUlGhdEQAAAAaMaAkAAGgmFos1NzerN+yz2+0ul0uSJK2LAgAAwAAQLQEAAI11dHSoW3qbzebKykoWKgIAAOQRoiUAAKC9QCDQ0tISi8UkSXK5XHa7XeuKAAAAkBWiJQAAkBNisVhLS0sgEBBCWCyWiooKg8GgdVEAAADoh07rAgAAAIQQQq/XV1dXl5WVSZLU09MTi8W0rggAAAD9Y9YSAADILeFwWJZlm82mdSEAAADoH9ESAAAAAAAABoktDAAA41Q8Hg+Hw0KIgoICrWsBAAAA8hV7LQEAximfz3f8+HGv16t1IQAAAEAeI1oCAIxTBQUFer1ep+OfwnyiKEpLS0skEtG6EAAAAPwf9loCAAB5o7293ev1mkymiRMnal0LAAAAhGCvJQAAkEeKi4tDoZDD4dC6EAAAAPwfZi0BAAAAAABgkNhgAgAAAAAAAINEtAQAAAAAAIBBIloCAABjRCQSOXbsWCAQ0LoQAACAcYS9lgAAwBjR0tLS1dUlhLBYLKWlpQUFBVpXBAAAMPYRLQEAgDEiFot5PJ7Ozk71443Vai0tLTWbzVrXBQAAMJYRLQEAIOLxuCRJWleB4SHLssfj6e7uVp8SMAEAgBGiKErisU6XdsehUCikKIrZbNbr9X2eEI1Ge6/oj8fjvRObeDyePKjKbDbbbLZ0o7e3tyuK4nA4jEZjnyeEw+HEB6dBKCgoMAz6xQAAjAHhcLipqUmSpIkTJ2pdC4aHyWSqrKx0Op1qwBQIBAKBQFFRkdPpJGACAGDsSUQwGcIdv98fiUQsFku6DwORSKS1tVV9rChKItNJ5Dh9NiYUFBTU1dWlG72trS0UClVXV1ut1j5PkGU5MfogFBUVZYiWuru7o9FocXFxumhJlmWv1zvo0e12O9ESAGBc0+v1kUhECKEoSoaPI8g7KQGT3+/3+/1Wq9XhcBQWFmpdHQAA444aAEmSlG6quKIoHo9HnAhuEtNzEj/jJwghYrGY+HLEYzQaTzrppHSjd3V1BQKB8vLydNFSPB4PBoODvbh+mEymeDye4aOmXq8vKirK0INOp8swxT7zl2d2u11RFIMhbf5jNBrtdnuGHjIrLCxkQRwAYLw7evRoLBarq6tj1+exKmWJXGFhocPhSPe1IQAASFCjnFgspj5Q8x1FUfp8IISorKxM11Vra2tnZ6fT6SwtLe3zBEVRjhw5MuhS9Xr95MmT0x31er2hUMhut1sslnSjJz4qJOc4iTwo+8ZxiFlLAIDxzmw2B4PBcDhMtDRWqTOYSktLvV5vV1dXT09PT0+PyWRyOBw2m41ttgAA40QkEpFlWa/XZ/jM09DQoAZJiThpQENkiJbU5CVDh5IkqXNn1DPV1Cb5cUKfJ2QuzOFwZD5Bp9MNZebOOMesJQDAeNfe3u71eu12e3l5uda1YMRFo1Gfz9fZ2al+uWowGOx2u91uT7etJgAAuUDpJRaL9Tl7qLKyMt0/al6vt7293WazZQiA1NncKY2JECeR7KT8TDwoKSnhO5txiFlLAIDxzmQyCSFkWda6EIwGg8FQVlbmcDg6Ozt9Pl80Gu3o6Ojp6ampqdG6NADA2JdYU5Zh45v29nZZllMipOyHiMVi6aIlo9FoNpszDC2EVPF/5AAAIABJREFUqKqqEkLoTkhMCwIyIFoCAIx36saH4XBY60IwevR6vdPpdDgc3d3dnZ2dJSUlWlcEAMhLialD6gP1p81mSxffBAKBpqamzHcT6+npCYVCvdvVlEel1+uT0x+9Xp84miE5KioqyrxXtBCCm11gEIiWAADjnclkkiRJUZRoNJr5ezyMMZIkFRcXFxcXa10IACC3RCKRaDSavOiszwgp3WQik8mU7hOFOgMo8ywkp9Op3rg2BQvNkLP4AA0AGO8kSTIajbIsh8NhoiWkiEQi6jfDWhcCABgesViss7NTCOF0OtOd4/F4urq6su+z90yidGcWFhaefPLJmf9Z4R6myDt8gAYAQJhMJlmWZVnmwxxStLa29vT0VFRU2Gw2rWsBAPwfdcei5AlEsVgs+WlxcXG6lV/xeLyjo0OSpAzRkl6vNxgMyYFRcmyU0jKgG0GoO14P+IKB3Ea0BAAAO3mjb4lbL2e4STMAYCTIshwKhWInZLkSLcFsNqeLlvR6fVFRkV6vj8fj6VKesrKysrKyoV4DMG4QLQEAQLSEvkmSNGHChHA4bDQata4FAMaUjo6OWCxWWlqabspPMBhsa2vL0IO6a3XyBKLkn+o9OtK9UL0JGoDhQrQEAADREjLJ8PeJECIYDBoMBvV/QgAwrqhTO6PRaO9ZRbFYrLCw0OFwpHttZ2dnLBaz2+3poiWTyWS1WvVJeq9EG7ErAzAwREsAAHCTOAxec3NzLBYzmUxFRUVWq5WlcwDGDEVRwuGwmhOp+VEiNlKfxuPxzD1kiJbsdrsQIsMuRRaLxWKxDLp4AKOJT88AAHxxkzhZlomWkL1YLGY2m3t6emRZ9ng8Ho/HYDCoGVNhYSEbtQLIZT09PZFIpLCwMN2a33A43NDQ0G8/6jSi3tOLMk/nLC0tHWTdAHIPn54BABAi6SZxfEeK7On1+pqaGkVRAoGA3+8PBALRaNTn8/l8Pp1Op37lbrVaySsBjILEXdISRMZ5Q16vNxAIVFRUpIuW1NW+6ZKjhJG6HgD5gw86AAAIIYT6wZrtljAIOp3OZrPZbLZ4PB4MBtWMKRaL+f1+v98vTuwYYrFYmMoEYBDULY1SJBamJRKl3svT9Hp9hmjJbDbH4/EM2ZDRaJw4ceKwXQaAsYtoCQAAIdjJG8NBkiSr1Wq1WoUQ4XA4EAgEg8FQKKROiPN6vTqdrqCgQM2Y2JUJgBBCUZQM+U48Hj969KiiKFn2lrhpWjZTiliSBmC4EC0BACDEiWgpEoloXQjGCLPZbDabnU6noijBYFCNmaLRaDAYDAaDQgidTldZWanmUADGnsRUowx3mezo6PB4PHa7vby8vM8TEvMce2dGfa5N46ZpADRBtAQAgBAnoiV1ZQEfzTGMdDpdUVFRUVGREEKW5Z6enmAw2NPTE4vF0u1vAiDHZViVlnxIPXnSpEnpNlxTZxVlvs/axIkTdTod/zAByGVESwAACCGEulJJp9MRLWHkmEwmk8mk3nI7HA5nuH1Sv3duAjBqPB5POBxO2R47G5Ik6fX6DMvZ7Ha73W7PvAUb9wEAkPukzBk5AAAARl9LS0tXV5fT6WQzFGBEhcPhjo4OdYFqunMaGhp6enpSGlOWpBkMhj7vpDbC5QNATiACBwAAyDlms7mwsLCwsDDdCYqiRCIRk8nELecwzvW5Ei2lpaKiIt2+ZoqiBAKBzNMDS0pKbDZbSmw0MlcDAHmJWUsAAAD5JxgMut1uSZKMRqO6ZbjJZDKbzXq9nrAJY09PT08oFOozRcrmz5mKiori4uI+D8VisUAgYDAYLBbLcFcNAOMFs5YAAADyTywWU7cGk2VZluXu7u7EIaPRqG7qlHjADAvkMkVROjo6YrFYhiVpgUDA6/WmO6puaZRyu7TEY51Ol2FfM71eny51AgBkiVlLAAAA+SoajconhMNhWZb73DBY/dPamIS8CcMrHo8nVqIpipJ4oM4tikajRUVFJSUl6V57+PBhIcTkyZPT/c/S7/cHAoF0yRFbGgGAtoiWAAAAxoh4PB6JRCKRiCzLiZ/RaLT3mS6XK93f+UCfZFkOBoPJmVHyz37/prDb7eXl5emOdnR0SJJUUlJCSAQA+YgFcQAAAGOEJEnqCrjkHYvVDb/D4bCaOkWj0UgkkmHT4nA43NjYaDabq6urR6VqjIZ4PB6PxzMEN62trZFIxOVypVs7Fg6H29raMgwhSZI6k6jPnxmWpAkhuBMiAOQ1oiUAAICxTKfTqft8Z3l+NBqNRqOZl8u1tbVFIhF9L4k1SsNROFKp8ZC63ExdgKa2qA+UjOLxuMViqampSdd5T0+PLMvRaDRdBmQymdS7pKkL0HqHR0w4AoBxi2gJAAAAXygsLKyrq8u8vqmnpyccDmc4IRE3qDNZUhQXF4+f+Cl+gqIokiQZDGk/fnd1dcmybLPZ0uWAsiwfO3Zs0JX0uQ9XQmlpaTwezzC3yGw2Z9hmGwAwnhEtAQDwhc7OTo/HU1RU5HK5tK4F0IZOpysoKMh8TmlpaawXRVGi0aiaX6gzZdK93GazpTvk8/k6OjpsNluGfXna2tri8bgkSZIkqQUnHvR7dUIIu92e7lAwGAyHwwUFBYWFhX2eEI/H1UVhalQkTiRHQgh1ZlDi8hOJUvLLDQbDpEmT0o0eCAT8fr/RaEwXLakXmBzYJSd3faZ4KTK8LUVFRRmOAgCQAdESAABfou5Eo3UVQE5L3sspRfLKrMTNwpLFYrEMGUdi9VaG0bu6ujJPwMksQ7QUCAR8Pp/T6cwQLXV2dg5u3H7DHavVajAYMswbMhqNp5566uBGBwBg5BAtAQDwhaKiooKCggwrVgBkJknSULZbKi4utlqtmV/udDqFELFYTJxY5KU+Hjqz2VxUVJQh3JEkqaysLPE0OSpKzBtK/FQlHvc7enFx8RDrBwBAE1K/NwoFAAAAAAAA+sR9HAAAAAAAADBIREsAAAAAAAAYJKIlAAAAAAAADBLREgAAAAAAAAaJaAkAAAAAAACDRLQEAAAAAACAQSJaAgAAAAAAwCARLQEA8CXxeLyrq8vj8WhdCAAAAJAHDFoXAABAzmlpaRFCFBcXGwz8QwkAAABkwqwlAAC+RJIkNVGKRqNa1wIAAADkOqIlAABSGY1GIUQkEtG6EAAAACDXES0BAJCKaAkAAADIEtESAACpWBAHAAAAZIloCQCAVERLAAAAQJaIlgAASEW0BAAAAGSJaAkAgFRESwAAAECWiJYAAEilRkuxWCwej2tdCwAAAJDTiJYAAEil1+slSRJMXAIAAAD6Q7QEAEAfWBMHAAAAZINoCQCAPhAtAQAAANkgWgIAoA96vV4QLQEAAAD9IVoCAKAPzFoCAAAAskG0BABAH4iWAAAAgGwQLQEA0Ac1WorFYloXAgAAAOQ0oiUAAPrArCUAAAAgG0RLAAD0gWgJAAAAyAbREgAAfVCjpXg8zpo4AAAAIAOiJQAA+iBJkl6vF0xcAgAAADIyaF0AAAA5qqysTKfTGY1GrQsBAAAAcpcUj8e1rgEAAAAAAAB5iQVxAAAAAAAAGCSiJQAAAAAAAAwS0RIAAAAAAAAGiWgJAAAAAAAAg0S0BAAAAAAAgEEiWgIAAAAAAMAgES0BAAAAAABgkIiWAABIKxwOBwIBRVG0LgQAAADIUURLAACk1dzc3NjYGAqFtC4EAAAAyFEGrQsAACB3mc1mSZK0rgIAAADIXVI8Hte6BgAAAAAAAOQlFsQBAAAAAABgkIiWAAAAAAAAMEhESwAAAAAAABgkoiUAAAAAAAAMEtESAAAAAAAABoloCQAAAAAAAINEtAQAAAAAAIBBIloCAAAAAADAIBm0LgAAgJzW0tISCoXKy8sLCwu1rgUAAADIOcxaAgAgk0gkIstyNBrVuhAAAAAgFxEtAQCQicFgEELEYjGtCwEAAAByEdESAACZ6PV6IQSzlgAAAIA+ES0BAJCJGi0xawkAAADoE9ESAACZEC0BAAAAGRAtAQCQCdESAAAAkAHREgAAmbCNNwAAAJAB0RIAAJkwawkAAIyyDz/88JZbbpk2bVpRUZHVap06der3vve9Dz/8MOU0KQvpTrZardOnT1+zZk1zc3PvAnp6erZu3XreeeeVlJQYDIbS0tKvf/3rd9999/vvvz+4K0ouZkBlZ1lJ4oU33HBD79FvuOGG3j1n9vLLL1977bW1tbVms7mysnLp0qWvvfba4K59PJDi8bjWNQAAkLsURTly5IgQ4pRTTsn+4wgAAMDgPPjgg3fffXfvr7X0ev2mTZvWrVuXaMnmk0niT/50J1dUVLzxxhuTJk1KtLS2tl500UUffPBB5g4HRB1dfW32ZWdfidqnJElms7mpqamkpCRxyOfzVVVVhcNh9fx+61cU5dZbb3300Uczj4hkzFoCACATnU6nflhh4hIAABhpP/7xj9evX68oysqVK998883u7u5AILB///5//ud/VhTljjvueOSRRxInx78sQ2Pvl7S2tj7zzDOTJ09uaWnZsGFD8jnr1q374IMPampqHn/88ePHj4fDYZ/P98Ybb2zatOnMM88c+jVmX/ZAK7noootCodCTTz6Z3PiLX/wiFArNmzcvy/LuvvvuRx991GAwrFu37qOPPgqHwy0tLb/4xS/OOeecIVz0GMesJQAA+vHpp59Go9G6urqCggKtawEAAGPW8ePHTznlFFmWf/rTn958880pRx9//PEVK1aYTKYjR47U1tb2fnnyzKAsj77++utz5swpLy9vaWlJNJaWlno8njfeeOPcc88d4hVlU1uGQ9lXonby5JNPXn/99TNmzHj77bcTh2bMmPHuu+8+9dRT1113XbqBEj7++OPTTjtNUZQ+fwVIh1lLAAD0g+2WAADAKPjJT34iy/LixYv7DDVuvvnmq6++Wpbln/zkJ8M14le/+lUhRGdnZ3JjIBAQQpx66qn9vrzP3YsGtKVRZtlXolq0aJHT6XznnXfee+89teXdd9999913nU7nVVddlU0P27dvVxTl/PPPJ1caEKIlAAD6QbQEAABGwUsvvSSE+Pa3v53uBPXQH/7wh+Ea8Z133hFCpMyBOuuss4QQK1euPHz48HANNDgDrcRsNqvbeO/cuVNtUR/ceOONZrM5mx5effVVIcRNN900qHrHLxbEAQDQj+bm5u7u7rKyMofDoXUtAABgzHI6nV6vt6Ojw+l09nlCe3u7y+UqLS1tb2/vfXRAC+La29v37t27Zs2azz777N57773vvvsSZ+7du/fSSy8NhUJCiMmTJ3/ta18744wzvvGNb1x44YXq922ZR8y+sd9Dg6jk/fff/9rXvuZwOBobG4UQVVVVPp/v/fffP/PMMzO/PyqHw+Hz+d57771Dhw5t3br1wIEDBoPh9NNPX7p06b/+678a/397dxrU1PU+cPwELwGqKLIM1qLIOgpO3bWW6qh1GZeqVamFilq0Flu3jtVanKHTOv60tS9sa10Hp+rIWLVI3WVRpFJcwEGrlbrhigqyJhocQvJ7kf/v/jOBhEuwRvT7eeEk55z7nOcc3pgn5944O9u49mVGaQkAgAaUlJRUVFS0bdvW29vb0bkAAIAXlrOzs16vr6mpkSSp3gE1NTVqtVqSpJqamrq9SkpLdUVFRW3ZssWiaFJQUPCf//wnJSVFo9HIjX5+fqtXr544caLC5SjMzXbaCjMxD9KnT5/c3NykpCSj0fjBBx/06dPn9OnTDU5kIklSbW3tokWLVq1aZdH1xhtvpKWltWrVStGCXzLcEAcAQAO4IQ4AADwD7u7uQoiqqiprA0wPRWrTps3TmtHPz2/RokV1D+N07tx569at5eXl+fn527dvnz9/fkhIyJ07dyIjI3///fenNbsSdmQyY8YMIURiYqLpbjjTW4Xc3NyEEN9//31ERMTx48crKipKSko2bdrk4eFx8uRJ87NdMMepJQAAGlBZWVlcXNyyZcv27ds7OhcAAPDC6tu375kzZ1JTU4cNG1bvgNTU1BEjRvTt2/fUqVN1e5XfEFdTU1NYWLh8+fKtW7f6+Pj89ddfvr6+tnMzGAxLly5duXKlxe+vKWT3qSWFmZgHqaysbN++vU6nE0K4ubndu3evdevWCicKCQm5evWqu7v7rVu3PDw85PZ9+/aNHTu2Y8eON2/eVJjnS4VTSwAANMB0KJ1TSwAA4F81dOhQIcSmTZusDTB1mYY1hbOzc2ho6C+//DJixIiSkpKlS5c2eImTk9MXX3whhLh48WITZ2+iBjNp06bNpEmTjEaj0WiMjIw01ZUU6t69uxAiNDTUvK4khBg4cKAQ4v79+/bn/UKjtAQAQAO4IQ4AADwDcXFxzs7Ou3bt2rZtW93erVu37t69W61Wx8XFPZXpVCrVjz/+KEnSli1bLl++3OB408+0PQ8PG2owE/kmuEbdDSeEeOedd4QQV65cMd17KMvKyhJCcIDdGkpLAAA0gNISAAB4Bjp27LhixQohxLRp02bNmnXmzJnHjx/rdLrc3NyPP/54+vTpQoiVK1d26NDhac0YGhoaGxur1+vNDy6Fh4cvXbr0yJEjt2/ffvLkSXV1dWFh4dq1a8eNGyeEGDlypDxSpVLVfTp4vY32UZ6JhYEDB5pOLQ0YMKBRM06ePDkoKKiqqmr06NF//PFHZWXlw4cPExMTp06dKoSIjo5u4opeVDxrCQCAhtXU1LRo0cLJia9kAADAv2v58uUJCQkGg8Gi3cnJadmyZfHx8dYuVP6sJXNFRUXBwcHV1dWnT5/u3bu3sP5bckKILl26HD16tF27djZiKm9U2GV3JsonMpeXl/f2229bnFoSQgwaNOjgwYOm53zDAqUlAAAAAACeIxcvXlyzZk1GRsbdu3eNRqOfn9+QIUPmzp0bHh5u4yr7SktCiCVLlnz77bdDhw5NS0sTQvz9998pKSlZWVkXL14sLi42Go1eXl7h4eHjx4+fOXOmq6ur7ZhPsbTUxEyUT2Thzp07y5cvP3ToUFFRkZubW9euXadMmTJr1izTSXbURWkJAAAAAAAAduJgPwAAAAAAAOxEaQkAAAAAAAB2orQEAAAAAAAAO1FaAgAAAAAAgJ0oLQEAAAAAAMBOlJYAAAAAAABgJ8nRCQAA0AzU1NRoNBonJycPDw9H5wIAAAA8Rzi1BABAw2pra0tLS8vLyx2dCAAAAPB8obQEAEDDJElyd3dv3bq1oxMBAAAvLJVKZfrXGiGEwWDYvHnzgAEDfH191Wp1p06dpk+fnp2dLUcYPXp0vcFHjx5tiiA7cuTImDFjfHx8nJ2d27VrN3HixPT09Kbkn5KS0qFDB/NsHaWJszdqGyEoLQEAoIQkSe3atfPy8nJ0IgAA4AVnNFP37dy5c3fv3r1q1aorV65otdrU1NS+fft+9tln8uXnzp3Lz8+3iJmfn3/u3DnzloSEhPj4+Li4uMuXL1dVVe3Zs6e2tnbYsGFNyXzhwoW//vqrnOoz82/UehRu40uiwR1WPeM/OQAAAAAAqEulsvyEXrelVatWN2/etPZ1l0ql+vnnnzMzM3fu3GneHhkZOWTIkE8++cQULTU1dfHixTk5OW5ububDvvnmm4SEBLvzb9GihV6vf/aHeuruUtMDKtnGl0eDO8ypJQAAAAAAmof27dv/+eefNgbMnDkzLy/vn3/+kVsKCgrOnj07c+ZMueWnn35KSEiwqCsJIeS60oYNG4KDg9VqdXBw8KZNm+QBKpUqKSmpZ8+erq6uvr6+MTExpaWlcpfBYHBycpJv65Ov2rhxY0BAgFqtDgkJ2bBhg9xVtwhl3pWUlNSvX79WrVq1aNHC1Hj37t05c+a4u7sHBAQsXry4urpa1LmLsG5kO9aicButpdRgcGtX2dgrIcTevXt79Ojh4uLSqVOnxMREi4X06dPnlVdeadWq1bBhwy5cuHDo0KGIiIiWLVt6e3tHR0ebz247Tt2c691hS0YAAAAAAOBodT+h121JT0/39fWNiIj48ssvt27deuPGjbrjExMTp02bJjdOnTp18+bN5tG8vb2Li4utpZGcnOzn55eRkVFVVZWRkeHn57d37145flhYWEZGhkajuXv3bnR0dFRUVL3Zyq/37dvXqVOnzMxMjUaTmZnp7+8vd9lYrxAiNDQ0IyPj0aNHcq+/v//mzZs1Gk1hYeF77723ZMmSBuPYtxaF22g7JRsbZe0qG3t14sQJDw+PpKSkysrKU6dOBQYGHjx4UJ6rc+fO6enpGo3m3r1706ZN8/T0DAsLS0tLk1uio6OVxLG9ITZQWgIAAAAAwPGUlJaMRuOjR48OHDiQkJAwceJET0/P4cOH37t3z3y8Xq8PCwsrLCw0Go2FhYVhYWF6vd48miRJNTU11tJ488039+zZI79NTk6OiIiQ4589e1buevDggZeXV73Zyq8HDBiwb98+uX3v3r0KS0tZWVnWMjQajWVlZYGBgQ3GsW8tCrfRdko2NsraVTb2aujQobt27ZK7Tp482bt3b3mu3Nxcuau4uFgIkZeXZ94iz247ju0NsYFnLQEAAAAA4HhKnrVkobq6ev78+Q8ePEhJSTEfn5SUdOLEibVr186ePXvgwIFRUVHmvT4+PpcuXfL29q43pqen57Vr19q2bWt6W15eHhQUVFZWZopQW1vr5PT/j9Yxz7De156entevX/fw8JCjeXp6mrpsrFelUul0OldXV7mrrKzsq6++OnDgQFFR0ZMnT8T/Hu1kO459a1G4jbZTshbcxlU29srHx+fhw4fma7Q9l7XZGxvH2l/KAs9aAgAAAACgWXJ1dV25cuXRo0ct2t9///3Tp0/n5eXl5uZOnjzZordfv35ZWVn2zWheeni6DAaD+VvzupIQYurUqXq9/vDhwxUVFUajUavV1tbWNnHGBtdiexttp2QtuH0L0Wq1Go3G/KCQqR5kbS5rszc2jkKUlgAAAAAAaB7mzZtnUYkoKipyd3e3GObk5BQfHz98+PD4+Pi69YI5c+YsW7ZMp9NZtC9btkwI0aVLF/PC0/Hjx8PCwuxOuGvXridOnJDfZmdny6+9vLxMd2+Z5Ofn24iTlZW1cuXK0NBQU8kpIyND7pIkyVp1polrsb2NNlKybyE29qpXr155eXnKM7fGvjg2dvj/2L5fDgAAyAwGQ21traOzAAAAL6a6n9DrbenRo8eePXsqKioqKyszMjJef/31FStWWBtvLVp8fHyvXr32799fUVGh0+lycnLGjRtnGpCcnNyxY8djx45pNJpjx4517NjR/NHXNmLW+3rfvn0BAQFZWVlarTYrKysgIEDuioqKio6Ovnv3rlarPXr0qKnoY22it956Kz4+vrS0tLy8fOfOnb6+vvKYwMDAw4cPm/8nTe6yby0Kt9FGSjaC27jKxl6lp6f37t37+PHjGo1Gq9Wmp6ePGjWqwbnqttgXp+4OW4601gEAAMxptdrLly/fvHnT0YkAAIAXk5IaQXZ29ocffujv7y9Jkru7e//+/U0/W2ZtvI1oBw8eHDlypJeXlyRJvr6+EyZMSE9PN3WtW7cuKChIkqSgoKCNGzcqzNDa6/Xr1/v7+zs7OwcHB69evVqtVpvaHz58GBMT4+Pjo1aru3fvvn37dhulmcLCwjFjxrRp08bFxaVbt25btmyRx/z2228BAQEtWrSo93I71qJwG22kZCO4jats7JXRaMzMzBw8eHDLli3d3NwGDx4s/7EaVVqyL07dHbbAY7wBAFDkyZMnt27dkiTJ9A0SAAAAGisnJyc2NvbSpUuOTqQZaEZ7xbOWAABQxPRFTdMfGAkAAPBSiYmJuXDhwuPHj0+dOhUXFxcbG+vojJ5fzXSvJEcnAABA8yCfATYYDP/eb6MAAAC8YIYOHRoVFXX9+nV/f/+PPvpo/vz5js7o+dVM94ob4gAAUOratWsGg8Hf31+tVjs6FwAAAOC5wJeuAAAoxT1xAAAAgAVKSwAAKEVpCQAAALBAaQkAAKUoLQEAAAAWKC0BAKCUJEmC0hIAAABghtISAABKcWoJAAA8Mzdv3rx9+7bptVarvXHjhun1kydPSktLhRCPHj26c+fOnTt37t+/b36h+eDS0tKCggLzXqPReO3atWvXrtUdDNhHcnQCAAA0G5SWAADAs7F3797z58+XlZUFBARMmjRpwYIF3bp1c3FxGTt27HfffVdSUpKSknLp0qXDhw/rdLozZ86kpqaaLrx37548eNCgQcuXL+/fv//q1avXr19vGnD+/Pm0tLTi4mJJkubOnSsPXrhwoeOWi+ZNZTQaHZ0DAADNg0ajuX//vpubm5+fn6NzAQAAL76qqqrZs2f3798/PDx88ODBEyZMSE5OFkKMHz8+JSXFNGbbtm2SJEVFRZnerlmzRh48Y8aMq1evTpky5dNPP92xY4cc1mAw3Lp16+uvv+7Vq5dFZMAO3BAHAIBSnFoCAADPjNFoXLx48aJFi0pKSnx8fKwN27Nnz7vvvnv9+vXc3FydTmc+uGfPnjk5OfPmzRs5cqQ8wHTJkiVLRo0aZTsyoBClJQAAlKK0BAAAnpnPP/88MjKye/fur732WlFRkRBCpVJZjLl69aqfn5+rq2tRUVFBQUF1dbX54MTExAULFmzfvj05OVkeIISYOHHijh07tm3bZiMyoBw3xAEAoJRery8sLBRChISEODoXAADwItu4ceO6desiIiJCQkJiYmLi4uJeffXVbt26jR8/PiEh4eDBg7NmzVqyZEl8fHxkZGSPHj3kC8vKyuTB4eHhq1atCg0NffTo0Q8//GAasH///uzs7PLy8qCgoBkzZsiDY2NjHbRWNHuUlgAAUMpoNF69elUIERgYaDrBBAAA8AwYjcbq6mo3N7fGDtbr9Tqdzt3d3XyARqNRq9UuLi6NjQzUi1+IAwBAKZVK5eTkZDAYamtrKS0BAIBnRqVSKa/+mA+WJMmiriSEMG/h1UjwAAAAgklEQVRpVGSgXjxrCQCARpAkSfC4JQAAAOB/KC0BANAIPMkbAAAAMEdpCQCARjCVlvR6vaMTAQAAAJ4LlJYAAGgESZKcnZ35gV4AAADAhF+IAwAAAAAAgJ04tQQAAAAAAAA7UVoCAAAAAACAnSgtAQAAAAAAwE6UlgAAAAAAAGCn/wJp4Rtall8BmQAAAABJRU5ErkJggg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ29uZmlnSXRlbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkFkbWluLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZyBJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+QWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNBZG1pbklUU01Db25maWdJdGVtIyMjMDAzLUlUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb25Nb2R1bGUjIyNBZG1pbklUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFkbWluIGFyZWEgbmF2aWdhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpBZG1pbk92ZXJ2aWV3PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpOYXZCYXI6Ok1vZHVsZUFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZyBJdGVtczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPkNNREJTZXR0aW5nczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+Q3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbkJpZyI+ZmEtbGFwdG9wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uU21hbGwiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ29uZmlnSXRlbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tY29uZmlnaXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5JVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkNvbmZpZyBJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlnIEl0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyMwMDMtSVRTTUNvbmZpZ0l0ZW0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkRlZmF1bHQuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5Db25maWdJdGVtLk92ZXJ2aWV3LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNBZ2VudElUU01Db25maWdJdGVtIyMjMDAzLUlUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLWNvbmZpZ2l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5DTURCPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtPcHRpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXIiPkNvbmZpZyBJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk1lbnU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPkl0ZW1BcmVhPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjY2Vzc0tleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjMyMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tY29uZmlnaXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5PdmVydmlldy48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+T3ZlcnZpZXc8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua09wdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhciI+Q29uZmlnIEl0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjZXNzS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1jb25maWdpdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZyBpdGVtIHpvb20uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+Wm9vbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkNvbmZpZyBJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudElUU01Db25maWdJdGVtWm9vbSMjIzAwMy1JVFNNQ29uZmlnSXRlbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuRGVmYXVsdC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuRGV0YWlsLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BbGxvY2F0aW9uTGlzdC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uUHJpbnQuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+dGhpcmRwYXJ0eS9qcXVlcnktdGFibGVzb3J0ZXItMi4wLjUvanF1ZXJ5LnRhYmxlc29ydGVyLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLlVJLlRhYmxlLlNvcnQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkxpbmtPYmplY3QuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuWm9vbS5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5Db25maXJtRGlhbG9nLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbS5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01Db25maWdJdGVtRWRpdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tY29uZmlnaXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5Db25maWcgaXRlbSBlZGl0LjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5Db25maWcgSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQjIyMwMDMtSVRTTUNvbmZpZ0l0ZW0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkNvbmZpZ0l0ZW0uRWRpdC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkNvbmZpZ0l0ZW0uQ3VzdG9tZXJTZWFyY2guanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuQ29uZmlnSXRlbS5FZGl0LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tY29uZmlnaXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5Db25maWcgaXRlbSBwcmludC48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkNvbmZpZyBJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01Db25maWdJdGVtRGVsZXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1jb25maWdpdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5EZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+RGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+SVRTTSBDb25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01Db25maWdJdGVtQWRkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1jb25maWdpdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZyBpdGVtIGFkZC48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5BZGQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5Db25maWcgSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRJVFNNQ29uZmlnSXRlbUFkZCMjIzAwMy1JVFNNQ29uZmlnSXRlbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkNvbmZpZ0l0ZW0uQWRkLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNBZ2VudElUU01Db25maWdJdGVtQWRkIyMjMDAzLUlUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLWNvbmZpZ2l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+TmV3PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPk5ldzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUFkZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rT3B0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyIj5Db25maWcgSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2Nlc3NLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tY29uZmlnaXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TZWFyY2ggY29uZmlnIGl0ZW1zLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPlNlYXJjaDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkNvbmZpZyBJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIyMjMDAzLUlUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5EZXRhaWwuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLlRhYmxlLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5QcmludC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT50aGlyZHBhcnR5L2pxdWVyeS10YWJsZXNvcnRlci0yLjAuNS9qcXVlcnkudGFibGVzb3J0ZXIuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuVUkuVGFibGUuU29ydC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5ab29tLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkNvbmZpZ0l0ZW0uT3ZlcnZpZXcuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2guanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gjIyMwMDMtSVRTTUNvbmZpZ0l0ZW0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tY29uZmlnaXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TZWFyY2ggY29uZmlnIGl0ZW1zLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5TZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua09wdGlvbiI+b25jbGljaz0iSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nKCdBZ2VudElUU01Db25maWdJdGVtU2VhcmNoJyk7IGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IH0gZWxzZSB7IHdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOyB9IHJldHVybiBmYWxzZTsiPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhciI+Q29uZmlnIEl0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjZXNzS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MzAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDAwLUJhY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06Ok1lbnVNb2R1bGU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW06Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5bJSBFbnYoIkxhc3RTY3JlZW5PdmVydmlldyIpICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMyMDAtSGlzdG9yeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUhpc3Rvcnk7Q29uZmlnSXRlbUlEPVslIERhdGEuQ29uZmlnSXRlbUlEIHwgaHRtbCAlXTtWZXJzaW9uSUQ9WyUgRGF0YS5WZXJzaW9uSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzMwMC1FZGl0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5FZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5FZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ7Q29uZmlnSXRlbUlEPVslIERhdGEuQ29uZmlnSXRlbUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyM0MDAtUHJpbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ29uZmlnSXRlbVByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVByaW50O0NvbmZpZ0l0ZW1JRD1bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IGh0bWwgJV07VmVyc2lvbklEPVslIERhdGEuVmVyc2lvbklEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1BhcmFtIj50YXJnZXQ9InByaW50IjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyM1MDAtTGluayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06Ok1lbnVNb2R1bGU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW06Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRMaW5rT2JqZWN0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1JVFNNQ29uZmlnSXRlbTtTb3VyY2VLZXk9WyUgRGF0YS5Db25maWdJdGVtSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzYwMC1EdXBsaWNhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ29uZmlnSXRlbTo6TWVudU1vZHVsZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TWVudUdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+RHVwbGljYXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5EdXBsaWNhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtRWRpdDtEdXBsaWNhdGVJRD1bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IGh0bWwgJV07VmVyc2lvbklEPVslIERhdGEuVmVyc2lvbklEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyM3MDAtQ29uZmlnSXRlbURlbGV0ZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06Ok1lbnVNb2R1bGU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW06Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkRlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+RGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01Db25maWdJdGVtRGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkNvbmZpcm1EaWFsb2c8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVsZW1lbnRTZWxlY3RvciI+I01lbnVbJSBEYXRhLk1lbnVJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZyI+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGU7Q29uZmlnSXRlbUlEPVslIERhdGEuQ29uZmlnSXRlbUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmciPkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtRGVsZXRlO1N1YmFjdGlvbj1Db25maWdJdGVtRGVsZXRlO0NvbmZpZ0l0ZW1JRD1bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpYWxvZ1RpdGxlIj5bJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSBbJSBDb25maWcoIklUU01Db25maWdJdGVtOjpIb29rIikgJV0gWyUgRGF0YS5OdW1iZXIgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZTo6U2V0dGluZ3NWaXNpYmlsaXR5IyMjSVRTTUNvbmZpZ0l0ZW0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPkFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6TnVtYmVyR2VuZXJhdG9yIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OklUU01Db25maWdJdGVtPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJQZXJsTW9kdWxlIiBWYWx1ZUZpbHRlcj0iS2VybmVsL1N5c3RlbS9JVFNNQ29uZmlnSXRlbS9OdW1iZXIvKi5wbSI+S2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpOdW1iZXI6OkF1dG9JbmNyZW1lbnQ8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpDSU5hbWVSZWdleCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SVRTTUNvbmZpZ0l0ZW08L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29tcHV0ZXI6OkNJTmFtZVJlZ2V4Ij5eQUJDLio8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbXB1dGVyOjpDSU5hbWVSZWdleEVycm9yTWVzc2FnZSI+QSBjb21wdXRlciBuYW1lIG11c3Qgc3RhcnQgd2l0aCBBQkMhPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJIYXJkd2FyZTo6Q0lOYW1lUmVnZXgiPi4qXGRcZCQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkhhcmR3YXJlOjpDSU5hbWVSZWdleEVycm9yTWVzc2FnZSI+QSBoYXJkd2FyZSBuYW1lIG11c3QgZW5kIHdpdGggdHdvIGRpZ2l0cyE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6RGVmYXVsdFN1Yk9iamVjdCMjI0lUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyAnSVRTTUNvbmZpZ0l0ZW0nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPkNvbXB1dGVyPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpJVFNNQ29uZmlnSXRlbTo6U2hvd0NvbHVtbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+Q3VySW5jaVNpZ25hbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkN1ckRlcGxTaWduYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OklUU01Db25maWdJdGVtOjpTaG93Q29sdW1uc0J5Q2xhc3MiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6TmFtZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpDdXJEZXBsU3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6Mzo6Q2FwYWNpdHk6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6V2FycmFudHlFeHBpcmF0aW9uRGF0ZTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpDcmVhdGVUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246OlR5cGU6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6QWRkcmVzczo6MTwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iU3RhdHM6OkR5bmFtaWNPYmplY3RSZWdpc3RyYXRpb24jIyNJVFNNQ29uZmlnSXRlbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6U3RhdHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZFJlZ2lzdHJhdGlvbiMjI0lUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk9iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkNvbmZpZyBJdGVtPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpFdmVudE1vZHVsZVBvc3QjIyMxMDAtSGlzdG9yeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RXZlbnQ6OklUU01Db25maWdJdGVtPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpFdmVudDo6RG9IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KENvbmZpZ0l0ZW1DcmVhdGV8VmVyc2lvbkNyZWF0ZXxEZXBsb3ltZW50U3RhdGVVcGRhdGV8SW5jaWRlbnRTdGF0ZVVwZGF0ZXxDb25maWdJdGVtRGVsZXRlfExpbmtBZGR8TGlua0RlbGV0ZXxEZWZpbml0aW9uVXBkYXRlfE5hbWVVcGRhdGV8VmFsdWVVcGRhdGV8RGVmaW5pdGlvbkNyZWF0ZXxWZXJzaW9uRGVsZXRlfEF0dGFjaG1lbnRBZGRQb3N0fEF0dGFjaG1lbnREZWxldGVQb3N0KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpIaXN0b3J5T3JkZXIiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTZWxlY3QiIFNlbGVjdGVkSUQ9Im5vcm1hbCI+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9InJldmVyc2UiIFRyYW5zbGF0YWJsZT0iMSI+cmV2ZXJzZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0ibm9ybWFsIiBUcmFuc2xhdGFibGU9IjEiPm5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLWNvbmZpZ2l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlnIGl0ZW0gaGlzdG9yeS48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+Q29uZmlnIEl0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5IyMjMDAzLUlUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuQ29uZmlnSXRlbS5IaXN0b3J5LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI0RlcGxveW1lbnRTdGF0ZXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpHZW5lcmFsQ2F0YWxvZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzOjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+SVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCIgVHJhbnNsYXRhYmxlPSIxIj5EZXBsb3ltZW50IFN0YXRlIFR5cGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2MiIFRyYW5zbGF0YWJsZT0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJwb3N0cHJvZHVjdGl2ZSIgVHJhbnNsYXRhYmxlPSIxIj5wb3N0cHJvZHVjdGl2ZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJwcmVwcm9kdWN0aXZlIiBUcmFuc2xhdGFibGU9IjEiPnByZXByb2R1Y3RpdmU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0icHJvZHVjdGl2ZSIgVHJhbnNsYXRhYmxlPSIxIj5wcm9kdWN0aXZlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+RnVuY3Rpb25hbGl0eTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPk9wdGlvbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjRGVwbG95bWVudFN0YXRlc0NvbG9ycyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkdlbmVyYWxDYXRhbG9nPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXM6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5JVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIiBUcmFuc2xhdGFibGU9IjEiPkRlcGxveW1lbnQgU3RhdGUgQ29sb3I8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2MiIFRyYW5zbGF0YWJsZT0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByZWZLZXkiPkNvbG9yPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+Q29sb3JQaWNrZXI8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246OkNsYXNzIyMjMDEwLUNsYXNzR3JvdXBDaGVjayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SVRTTUNvbmZpZ0l0ZW08L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246OkNsYXNzR3JvdXBDaGVjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWlyZWQiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyYW50ZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb246Okl0ZW0jIyMwMTAtSXRlbUNsYXNzR3JvdXBDaGVjayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OklUU01Db25maWdJdGVtPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uOjpJdGVtQ2xhc3NHcm91cENoZWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1aXJlZCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JhbnRlZCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+cm88L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5ydzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtQWRkIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5ydzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeSMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPnJvPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5ybzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtRGVsZXRlIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OklUU01Db25maWdJdGVtRGVsZXRlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+cnc8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbVpvb20jIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5ybzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5ybzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZG1pbklUU01Db25maWdJdGVtIyMjRWRpdG9yUm93cyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46OlZpZXc6OklUU01Db25maWdJdGVtRGVmaW5pdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSJeXGQrJCI+MzA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyNQZXJtaXNzaW9ucyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpHZW5lcmFsQ2F0YWxvZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzOjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCIgVHJhbnNsYXRhYmxlPSIxIj5QZXJtaXNzaW9uIEdyb3VwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+UGVybWlzc2lvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPklUU006OkNvbmZpZ0l0ZW06OkNsYXNzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5QZXJtaXNzaW9uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpTZWFyY2gjIyNDb25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTo6U2VhcmNoPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Il4oPzpBZ2VudHxBZG1pbilJVFNNQ29uZmlnSXRlbSI+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2g7U3ViYWN0aW9uPUFKQVg8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6OlNlYXJjaDo6SmF2YVNjcmlwdCMjI0NvbmZpZ0l0ZW0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SmF2YVNjcmlwdCBmdW5jdGlvbiBmb3IgdGhlIHNlYXJjaCBmcm9udGVuZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTo6U2VhcmNoPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Il4oPzpBZ2VudHxBZG1pbilJVFNNQ29uZmlnSXRlbSI+SVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nKCdBZ2VudElUU01Db25maWdJdGVtU2VhcmNoJyk8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpBZ2VudDo6Q29tbW9uSlMjIyMxMDAtQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBKUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkJhc2U6OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2guanM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLlVJLkNvbmZpZ0l0ZW1BY3Rpb25Sb3cuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkNvbmZpZ0l0ZW0uRGFzaGJvYXJkLmpzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJQcmVmZXJlbmNlc0dyb3VwcyMjI0NvbmZpZ0l0ZW1PdmVydmlld1NtYWxsUGFnZVNob3duIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6UHJlZmVyZW5jZXM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6UHJlZmVyZW5jZXM6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByZWZlcmVuY2VHcm91cCI+TWlzY2VsbGFuZW91czwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGlvbiBJdGVtIExpbWl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjIiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSIgVHJhbnNsYXRhYmxlPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEwIj4xMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxNSI+MTU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjAiPjIwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjI1Ij4yNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzMCI+MzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMzUiPjM1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YVNlbGVjdGVkIj4yNTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+VXNlckNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsUGFnZVNob3duPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj44MDAwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3RpdmUiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpPdmVydmlldyMjI1NtYWxsIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNvbmZpZ0l0ZW1PdmVydmlldzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6T3ZlcnZpZXdTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+U21hbGw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWVTaG9ydCI+UzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGFnZVNob3duIj4yNTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6SG9vayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SVRTTUNvbmZpZ0l0ZW08L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5Db25maWdJdGVtIzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIyMjU2VhcmNoTGltaXQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OklUU01Db25maWdJdGVtU2VhcmNoPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9Il5cZCskIj4xMDAwMDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIyMjU2hvd0NvbHVtbnMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpJVFNNQ29uZmlnSXRlbVNlYXJjaDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iU2VsZWN0Ij4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+MCAtIERpc2FibGVkPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMSIgVHJhbnNsYXRhYmxlPSIxIj4xIC0gRW5hYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckluY2lTaWduYWwiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VyRGVwbFNpZ25hbCIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOdW1iZXIiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyIgU2VsZWN0ZWRJRD0iMCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJEZXBsU3RhdGUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VyRGVwbFN0YXRlVHlwZSIgU2VsZWN0ZWRJRD0iMCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJJbmNpU3RhdGUiIFNlbGVjdGVkSUQ9IjEiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckluY2lTdGF0ZVR5cGUiIFNlbGVjdGVkSUQ9IjAiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFzdENoYW5nZWQiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gjIyNTaG93Q29sdW1uc0J5Q2xhc3MiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6SVRTTUNvbmZpZ0l0ZW1TZWFyY2g8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6TmFtZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpOdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3VySW5jaVNpZ25hbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpDdXJEZXBsU2lnbmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkN1ckRlcGxTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjozPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjozOjpDYXBhY2l0eTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpXYXJyYW50eUV4cGlyYXRpb25EYXRlOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkNyZWF0ZVRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6Q3VySW5jaVNpZ25hbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpOdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6VHlwZTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpOYW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246OkFkZHJlc3M6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6TGFzdENoYW5nZWQ8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCMjI1NlYXJjaENTVkRhdGEiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGF0YSB1c2VkIHRvIGV4cG9ydCB0aGUgc2VhcmNoIHJlc3VsdCBpbiBDU1YgZm9ybWF0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpJVFNNQ29uZmlnSXRlbVNlYXJjaDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtIFRyYW5zbGF0YWJsZT0iMSI+Q2xhc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBUcmFuc2xhdGFibGU9IjEiPkluY2lkZW50IFN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVHJhbnNsYXRhYmxlPSIxIj5OYW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVHJhbnNsYXRhYmxlPSIxIj5Db25maWdJdGVtTnVtYmVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVHJhbnNsYXRhYmxlPSIxIj5EZXBsb3ltZW50IFN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVHJhbnNsYXRhYmxlPSIxIj5WZXJzaW9uPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVHJhbnNsYXRhYmxlPSIxIj5DcmVhdGUgVGltZTwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2VhcmNoTGltaXQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OklUU01Db25maWdJdGVtPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9Il5cZCskIj4xMDAwMDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciAnQWxsJyBpcyBzZWxlY3RlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6SVRTTUNvbmZpZ0l0ZW08L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCI+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIwIiBUcmFuc2xhdGFibGU9IjEiPjAgLSBEaXNhYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjEiIFRyYW5zbGF0YWJsZT0iMSI+MSAtIEVuYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJJbmNpU2lnbmFsIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckRlcGxTaWduYWwiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTnVtYmVyIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiIFNlbGVjdGVkSUQ9IjAiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VyRGVwbFN0YXRlIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckRlcGxTdGF0ZVR5cGUiIFNlbGVjdGVkSUQ9IjAiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVN0YXRlIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckluY2lTdGF0ZVR5cGUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFzdENoYW5nZWQiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1uc0J5Q2xhc3MiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpJVFNNQ29uZmlnSXRlbTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpOYW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6Ok51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpDdXJJbmNpU2lnbmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkN1ckRlcGxTaWduYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3VyRGVwbFN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjM6OkNhcGFjaXR5OjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OldhcnJhbnR5RXhwaXJhdGlvbkRhdGU6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3JlYXRlVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpDdXJJbmNpU2lnbmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246Ok51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpUeXBlOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246Ok5hbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6QWRkcmVzczo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpMYXN0Q2hhbmdlZDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVW5pcXVlQ0lOYW1lOjpFbmFibGVVbmlxdWVuZXNzQ2hlY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OklUU01Db25maWdJdGVtPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTZWxlY3QiIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIxIiBUcmFuc2xhdGFibGU9IjEiPkVuYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+RGlzYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVW5pcXVlQ0lOYW1lOjpVbmlxdWVuZXNzQ2hlY2tTY29wZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzICgnY2xhc3MnKSBvciBnbG9iYWxseSAoJ2dsb2JhbCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJVFNNQ29uZmlnSXRlbTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU2VsZWN0IiBTZWxlY3RlZElEPSJnbG9iYWwiPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSJnbG9iYWwiIFRyYW5zbGF0YWJsZT0iMSI+Z2xvYmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSJjbGFzcyIgVHJhbnNsYXRhYmxlPSIxIj5jbGFzczwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkJ1bGtGZWF0dXJlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkVuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkJ1bGtBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4xPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkJ1bGtGZWF0dXJlR3JvdXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkJ1bGtBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5hZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPnVzZXJzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1jb25maWdpdGVtPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkJ1bGsgQWN0aW9uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+Q01EQjwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrIyMjMDAzLUlUU01Db25maWdJdGVtIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpQcmVNZW51TW9kdWxlIyMjMTAwLVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpNZW51TW9kdWxlUHJlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5ab29tPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5ab29tPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPVslIERhdGEuQ29uZmlnSXRlbUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpQcmVNZW51TW9kdWxlIyMjMjAwLUhpc3RvcnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpNZW51TW9kdWxlUHJlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUhpc3Rvcnk7Q29uZmlnSXRlbUlEPVslIERhdGEuQ29uZmlnSXRlbUlEIHwgaHRtbCAlXTtWZXJzaW9uSUQ9WyUgRGF0YS5WZXJzaW9uSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6UHJlTWVudU1vZHVsZSMjIzMwMC1EdXBsaWNhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01Db25maWdJdGVtOjpNZW51TW9kdWxlUHJlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5EdXBsaWNhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkR1cGxpY2F0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01Db25maWdJdGVtRWRpdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0O0R1cGxpY2F0ZUlEPVslIERhdGEuQ29uZmlnSXRlbUlEIHwgaHRtbCAlXTtWZXJzaW9uSUQ9WyUgRGF0YS5WZXJzaW9uSUQgfCBodG1sICVdO1JldHVyblRvTGFzdFNjcmVlbj0xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsjIyNEZXBsU3RhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OklUU01Db25maWdJdGVtQnVsazwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iQ2hlY2tib3giPjE8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsjIyNJbmNpU3RhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpJVFNNQ29uZmlnSXRlbUJ1bGs8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4xPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6QWRtaW5Nb2R1bGVHcm91cHMjIyMyMDAtSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYXZhaWxhYmxlIGdyb3VwcyBmb3IgdGhlIGFkbWluIG92ZXJ2aWV3IHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpOYXZCYXJNb2R1bGU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ01EQlNldHRpbmdzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5DTURCIFNldHRpbmdzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9yZGVyIj44MDAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZDo6SVRTTUNvbmZpZ0l0ZW1HZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5Bc3NpZ25lZCBDSXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkNJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBdHRyaWJ1dGVzIj5DdXN0b21lckNvbXBhbnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbWl0Ij4xMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGVybWlzc2lvbiI+cm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5Db250ZW50TGFyZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlZmF1bHQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhY2hlVFRMTG9jYWwiPjAuNTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnSXRlbUtleSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29tcHV0ZXIiPkN1c3RvbWVySUQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSGFyZHdhcmUiPkN1c3RvbWVySUQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb24iPkN1c3RvbWVySUQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmV0d29yayI+Q3VzdG9tZXJJRDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb2Z0d2FyZSI+Q3VzdG9tZXJJRDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlZmF1bHRDb2x1bW5zIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iU2VsZWN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMCIgVHJhbnNsYXRhYmxlPSIxIj4wIC0gRGlzYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjEiIFRyYW5zbGF0YWJsZT0iMSI+MSAtIEVuYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVNpZ25hbCIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckRlcGxTaWduYWwiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOdW1iZXIiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiIFNlbGVjdGVkSUQ9IjAiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJEZXBsU3RhdGUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJEZXBsU3RhdGVUeXBlIiBTZWxlY3RlZElEPSIwIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVN0YXRlIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVN0YXRlVHlwZSIgU2VsZWN0ZWRJRD0iMCI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhc3RDaGFuZ2VkIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpBZ2VudDo6Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1uc0J5Q2xhc3MiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpOYW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6Ok51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpDdXJJbmNpU2lnbmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkN1ckRlcGxTaWduYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3VyRGVwbFN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjM6OkNhcGFjaXR5OjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OldhcnJhbnR5RXhwaXJhdGlvbkRhdGU6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3JlYXRlVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpDdXJJbmNpU2lnbmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246Ok51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpUeXBlOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246Ok5hbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6QWRkcmVzczo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpMYXN0Q2hhbmdlZDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IkFnZW50Q3VzdG9tZXJVc2VySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNVSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lclVzZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpDdXN0b21lclVzZXJJbmZvcm1hdGlvbkNlbnRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6OklUU01Db25maWdJdGVtR2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+QXNzaWduZWQgQ0lzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5DSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXR0cmlidXRlcyI+Q3VzdG9tZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbWl0Ij4xMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGVybWlzc2lvbiI+cm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5Db250ZW50TGFyZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlZmF1bHQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhY2hlVFRMTG9jYWwiPjAuNTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnSXRlbUtleSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29tcHV0ZXIiPk93bmVyPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkhhcmR3YXJlIj5Pd25lcjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbiI+T3duZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmV0d29yayI+T3duZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU29mdHdhcmUiPk93bmVyPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVmYXVsdENvbHVtbnMiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVUeXBlPSJTZWxlY3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIwIiBUcmFuc2xhdGFibGU9IjEiPjAgLSBEaXNhYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMSIgVHJhbnNsYXRhYmxlPSIxIj4xIC0gRW5hYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJJbmNpU2lnbmFsIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VyRGVwbFNpZ25hbCIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik51bWJlciIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyIgU2VsZWN0ZWRJRD0iMCI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckRlcGxTdGF0ZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckRlcGxTdGF0ZVR5cGUiIFNlbGVjdGVkSUQ9IjAiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJJbmNpU3RhdGUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXJJbmNpU3RhdGVUeXBlIiBTZWxlY3RlZElEPSIwIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFzdENoYW5nZWQiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6OkFnZW50OjpDdXN0b21lclVzZXJJbmZvcm1hdGlvbkNlbnRlcjo6SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1uc0J5Q2xhc3MiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6Q3VzdG9tZXJVc2VySW5mb3JtYXRpb25DZW50ZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6TmFtZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpOdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6Q3VySW5jaVNpZ25hbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpDdXJEZXBsU2lnbmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkN1ckRlcGxTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjozPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkhhcmREaXNrOjozOjpDYXBhY2l0eTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvbXB1dGVyOjpXYXJyYW50eUV4cGlyYXRpb25EYXRlOjoxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29tcHV0ZXI6OkNyZWF0ZVRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6Q3VySW5jaVNpZ25hbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpOdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6VHlwZTo6MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkxvY2F0aW9uOjpOYW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb246OkFkZHJlc3M6OjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbjo6TGFzdENoYW5nZWQ8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCjwvb3Ryc19jb25maWc+Cg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGUjIyNDb25maWdJdGVtOjpDb25maWdJdGVtQ3JlYXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkNvbmZpZ0l0ZW1DcmVhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPkNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI0NvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1HZXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+Q29uZmlnSXRlbUdldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+Q29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkdlbmVyaWNJbnRlcmZhY2VPcGVyYXRpb25EZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlIyMjQ29uZmlnSXRlbTo6Q29uZmlnSXRlbVVwZGF0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5Db25maWdJdGVtVXBkYXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZU9wZXJhdGlvbkRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGUjIyNDb25maWdJdGVtOjpDb25maWdJdGVtU2VhcmNoIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkNvbmZpZ0l0ZW1TZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPkNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI0NvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1EZWxldGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+Q29uZmlnSXRlbURlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+Q29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkdlbmVyaWNJbnRlcmZhY2VPcGVyYXRpb25EZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbUdldCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbUdldDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPnJvPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW1TZWFyY2gjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW1TZWFyY2g8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5ybzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtQ3JlYXRlIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtQ3JlYXRlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+cnc8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbVVwZGF0ZSMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbVVwZGF0ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPnJ3PC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW1EZWxldGUjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW1EZWxldGU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5ydzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290cnNfY29uZmlnPgo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OlNldEluY2lkZW50U3RhdGVPbkxpbmsiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtTdGF0dXM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4wPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNQ29uZmlnSXRlbTo6RXZlbnRNb2R1bGVQb3N0IyMjMDQyLUlUU01Db25maWdJdGVtVGlja2V0U3RhdHVzTGluayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5FdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpFdmVudDo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6OlRpY2tldFN0YXR1c0xpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkV2ZW50Ij4oTGlua0FkZHxMaW5rRGVsZXRlKTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzA0Mi1JVFNNQ29uZmlnSXRlbVRpY2tldFN0YXR1c0xpbmsiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RXZlbnQ6OlRpY2tldDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpUaWNrZXRTdGF0dXNMaW5rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KFRpY2tldFN0YXRlVXBkYXRlfFRpY2tldFR5cGVVcGRhdGUpPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01Db25maWdJdGVtOjpMaW5rU3RhdHVzOjpUaWNrZXRUeXBlcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtTdGF0dXM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JbmNpZGVudDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkxpbmtTdGF0dXM6OkRlcGxveW1lbnRTdGF0ZXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rU3RhdHVzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+UHJvZHVjdGlvbjwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkxpbmtTdGF0dXM6OkluY2lkZW50U3RhdGVzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtTdGF0dXM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JbmNpZGVudDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPldhcm5pbmc8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5PcGVyYXRpb25hbDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTUNvbmZpZ0l0ZW06OkxpbmtTdGF0dXM6OkxpbmtUeXBlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rU3RhdHVzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlbGV2YW50VG8iPkluY2lkZW50PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdHJzX2NvbmZpZz4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb21tb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTUlNRTo6QmFzZTY0KCk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OkNvbW1vbiAtIEJhc2UgY2xhc3MgZm9yIGFsbCBDSSBPcGVyYXRpb25zCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWN1dAoKPWhlYWQyIEluaXQoKQoKaW5pdGlhbGl6ZSB0aGUgb3BlcmF0aW9uIGJ5IGNoZWNraW5nIHRoZSB3ZWItc2VydmljZSBjb25maWd1cmF0aW9uCgogICAgbXkgJFJldHVybiA9ICRDb21tb25PYmplY3QtPkluaXQoCiAgICAgICAgV2Vic2VydmljZUlEID0+IDEsCiAgICApOwoKICAgICRSZXR1cm4gPSB7CiAgICAgICAgU3VjY2VzcyA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgIyBvciAwIGluIGNhc2Ugb2YgZmFpbHVyZSwKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0Vycm9yIE1lc3NhZ2UnLAogICAgfQoKPWN1dAoKc3ViIEluaXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZAogICAgaWYgKCAhJFBhcmFte1dlYnNlcnZpY2VJRH0gKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiR290IG5vIFdlYnNlcnZpY2VJRCEiLAogICAgICAgIH07CiAgICB9CgogICAgIyBnZXQgd2Vic2VydmljZSBjb25maWd1cmF0aW9uCiAgICBteSAkV2Vic2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyktPldlYnNlcnZpY2VHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRXZWJzZXJ2aWNlKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgV2ViIHNlcnZpY2UgY29uZmlndXJhdGlvbicKICAgICAgICAgICAgICAgIC4gJyBpbiBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29tbW9uOjpuZXcoKScsCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH07Cn0KCj1oZWFkMiBWYWxpZGF0ZUNsYXNzKCkKCmNoZWNrcyBpZiB0aGUgZ2l2ZW4gQ2xhc3MgaXMgdmFsaWQuCgogICAgbXkgJFN1Y2VzcyA9ICRDb21tb25PYmplY3QtPlZhbGlkYXRlQ2xhc3MoCiAgICAgICAgQ2xhc3MgPT4gJ3NvbWUgY2xhc3MnLAogICAgKTsKCiAgICByZXR1cm5zCiAgICAkU3VjY2VzcyA9IDEgICAgICAgICAgICAjIG9yIDAKCj1jdXQKCnN1YiBWYWxpZGF0ZUNsYXNzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte0NsYXNzfTsKCiAgICAjIGNoZWNrIGZvciBDbGFzcyBzZW50CiAgICBteSAkSXRlbURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgIE5hbWUgID0+ICRQYXJhbXtDbGFzc30sCiAgICApOwoKICAgICMgcmV0dXJuIGZhbHNlIGlmIGl0ZW0gZGF0YSBpcyBlbXB0eQogICAgcmV0dXJuIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkSXRlbURhdGFSZWYpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgVmFsaWRhdGVEZXBsU3RhdGUoKQoKY2hlY2tzIGlmIHRoZSBnaXZlbiBEZXBsU3RhdGUgaXMgdmFsaWQuCgogICAgbXkgJFN1Y2VzcyA9ICRDb21tb25PYmplY3QtPlZhbGlkYXRlRGVwbFN0YXRlKAogICAgICAgIERlbHBTdGF0ZSA9PiAnc29tZSBEZXBsU3RhdGUnLAogICAgKTsKCiAgICByZXR1cm5zCiAgICAkU3VjY2VzcyA9IDEgICAgICAgICAgICAjIG9yIDAKCj1jdXQKCnN1YiBWYWxpZGF0ZURlcGxTdGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtEZXBsU3RhdGV9OwoKICAgICMgY2hlY2sgZm9yIENsYXNzIHNlbnQKICAgIG15ICRJdGVtRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgICAgIE5hbWUgID0+ICRQYXJhbXtEZXBsU3RhdGV9LAogICAgKTsKCiAgICAjIHJldHVybiBmYWxzZSBpZiBpdGVtIGRhdGEgaXMgZW1wdHkKICAgIHJldHVybiBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJEl0ZW1EYXRhUmVmKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIFZhbGlkYXRlSW5jaVN0YXRlKCkKCmNoZWNrcyBpZiB0aGUgZ2l2ZW4gSW5jaVN0YXRlIGlzIHZhbGlkLgoKICAgIG15ICRTdWNlc3MgPSAkQ29tbW9uT2JqZWN0LT5WYWxpZGF0ZUluY2lTdGF0ZSgKICAgICAgICBJbmNpU3RhdGUgPT4gJ3NvbWUgSW5jaVN0YXRlJywKICAgICk7CgogICAgcmV0dXJucwogICAgJFN1Y2Nlc3MgPSAxICAgICAgICAgICAgIyBvciAwCgo9Y3V0CgpzdWIgVmFsaWRhdGVJbmNpU3RhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17SW5jaVN0YXRlfTsKCiAgICAjIGNoZWNrIGZvciBDbGFzcyBzZW50CiAgICBteSAkSXRlbURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgTmFtZSAgPT4gJFBhcmFte0luY2lTdGF0ZX0sCiAgICApOwoKICAgICMgcmV0dXJuIGZhbHNlIGlmIGl0ZW0gZGF0YSBpcyBlbXB0eQogICAgcmV0dXJuIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkSXRlbURhdGFSZWYpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgVmFsaWRhdGVJbnB1dFRleHQoKQoKY2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyB2YWxpZC4KCiAgICBteSAkU3VjZXNzID0gJENvbW1vbk9iamVjdC0+VmFsaWRhdGVJbnB1dFRleHQoCiAgICAgICAgVmFsdWUgICAgID0+ICdzb21lIHZhbHVlJywKICAgICAgICBNYXhMZW5ndGggPT4gMTIzLAogICAgKTsKCiAgICByZXR1cm5zCiAgICAkU3VjY2VzcyA9IDEgICAgICAgICAgICAjIG9yIDAKCj1jdXQKCnN1YiBWYWxpZGF0ZUlucHV0VGV4dCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbGVuZ3RoCiAgICBpZiAoCiAgICAgICAgZGVmaW5lZCAkUGFyYW17SW5wdXR9LT57TWF4TGVuZ3RofQogICAgICAgICYmICRQYXJhbXtJbnB1dH0tPntNYXhMZW5ndGh9CiAgICAgICAgJiYgbGVuZ3RoICRQYXJhbXtWYWx1ZX0gPiAkUGFyYW17SW5wdXR9LT57TWF4TGVuZ3RofQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBWYWxpZGF0ZUlucHV0RGF0ZSgpCgpjaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIHZhbGlkLgoKICAgIG15ICRTdWNlc3MgPSAkQ29tbW9uT2JqZWN0LT5WYWxpZGF0ZUlucHV0RGF0ZSgKICAgICAgICBWYWx1ZSA9PiAnMTIvMTIvMTk3NycsCiAgICApOwoKICAgIG9yCgogICAgbXkgJFN1Y2VzcyA9ICRDb21tb25PYmplY3QtPlZhbGlkYXRlSW5wdXREYXRlKAogICAgICAgIFZhbHVlID0+ICcxOTc3LTEyLTEyJywKICAgICk7CgogICAgcmV0dXJucwogICAgJFN1Y2Nlc3MgPSAxICAgICAgICAgICAgIyBvciAwCgo9Y3V0CgpzdWIgVmFsaWRhdGVJbnB1dERhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVmFsdWUgPSAkUGFyYW17VmFsdWV9OwoKICAgICMgY2hlY2sgYW5kIGNvbnZlcnQgZm9yIGRhdGUgZm9ybWF0IGxpa2UgIjA1LzE4LzIwMTEiCiAgICBpZiAoICRWYWx1ZSA9fiBte1xBIChcZHsyfSkgLyAoXGR7Mn0pIC8gKFxkezR9KSBcen14bXMgKSB7CiAgICAgICAgJFZhbHVlID0gJDMgLiAnLScgLiAkMSAuICctJyAuICQyIC4gJyAwMDowMDowMCc7CiAgICB9CgogICAgIyBjaGVjayBhbmQgY29udmVydCBmb3IgZGF0ZSBmb3JtYXQgbGlrZSAiMjAxMS0wNS0xOCIKICAgIGlmICggJFZhbHVlID1+IG17XEEgKFxkezR9IC0gXGR7Mn0gLSBcZHsyfSBceikgfXhtcyApIHsKICAgICAgICAkVmFsdWUgPSAkMSAuICcgMDA6MDA6MDAnOwogICAgfQoKICAgICMgQ29udmVydCB0aGUgcmF3IGRhdGEgdG8gYSBzeXN0ZW0gZGF0ZXRpbWUgb2JqZWN0LgogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICBTdHJpbmcgPT4gJFZhbHVlLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJERhdGVUaW1lT2JqZWN0OwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgVmFsaWRhdGVJbnB1dERhdGVUaW1lKCkKCmNoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgdmFsaWQuCgogICAgbXkgJFN1Y2VzcyA9ICRDb21tb25PYmplY3QtPlZhbGlkYXRlSW5wdXREYXRlVGltZSgKICAgICAgICBWYWx1ZSA9PiAnMTIvMTIvMTk3NyAxMjowMDowMCcsCiAgICApOwoKICAgIG9yCgogICAgbXkgJFN1Y2VzcyA9ICRDb21tb25PYmplY3QtPlZhbGlkYXRlSW5wdXREYXRlVGltZSgKICAgICAgICBWYWx1ZSA9PiAnMTk3Ny0xMi0xMiAxMjowMDowMCcsCiAgICApOwoKICAgIHJldHVybnMKICAgICRTdWNjZXNzID0gMSAgICAgICAgICAgICMgb3IgMAoKPWN1dAoKc3ViIFZhbGlkYXRlSW5wdXREYXRlVGltZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX07CgogICAgIyBjaGVjayBhbmQgY29udmVydCBmb3IgZGF0ZSBmb3JtYXQgbGlrZSAiMDUvMTgvMjAxMSIKICAgIGlmICggJFZhbHVlID1+IG17XEEgKFxkezJ9KSAvIChcZHsyfSkgLyAoXGR7NH0pIFx6fXhtcyApIHsKICAgICAgICAkVmFsdWUgPSAkMyAuICctJyAuICQxIC4gJy0nIC4gJDIgLiAnIDAwOjAwOjAwJzsKICAgIH0KICAgIGVsc2lmICggJFZhbHVlID1+IG17XEEgKFxkezJ9KSAvIChcZHsyfSkgLyAoXGR7NH0pIChcZHsyfSA6IFxkezJ9IDogXGR7Mn0pIFx6fXhtcyApIHsKICAgICAgICAkVmFsdWUgPSAkMyAuICctJyAuICQxIC4gJy0nIC4gJDIgLiAkNDsKICAgIH0KCiAgICAjIGNoZWNrIGFuZCBjb252ZXJ0IGZvciBkYXRlIGZvcm1hdCBsaWtlICIyMDExLTA1LTE4IgogICAgaWYgKCAkVmFsdWUgPX4gbXtcQSAoXGR7NH0gLSBcZHsyfSAtIFxkezJ9IFx6KSB9eG1zICkgewogICAgICAgICRWYWx1ZSA9ICQxIC4gJyAwMDowMDowMCc7CiAgICB9CgogICAgIyBDb252ZXJ0IHRoZSByYXcgZGF0YSB0byBhIHN5c3RlbSBkYXRldGltZSBvYmplY3QuCiAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgIFN0cmluZyA9PiAkVmFsdWUsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkRGF0ZVRpbWVPYmplY3Q7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBWYWxpZGF0ZUlucHV0SW50ZWdlcigpCgpjaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIHZhbGlkLgoKICAgIG15ICRTdWNlc3MgPSAkQ29tbW9uT2JqZWN0LT5WYWxpZGF0ZUlucHV0SW50ZWdlcigKICAgICAgICBWYWx1ZSA9PiAxMjMsCiAgICApOwoKICAgIHJldHVybnMKICAgICRTdWNjZXNzID0gMSAgICAgICAgICAgICMgb3IgMAoKPWN1dAoKc3ViIFZhbGlkYXRlSW5wdXRJbnRlZ2VyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKCiAgICByZXR1cm4gaWYgIUlzSW50ZWdlcigkVmFsdWUpOwoKICAgIHJldHVybiBpZiBkZWZpbmVkICRQYXJhbXtWYWx1ZU1pbn0gJiYgJFZhbHVlIDwgJFBhcmFte1ZhbHVlTWlufTsKICAgIHJldHVybiBpZiBkZWZpbmVkICRQYXJhbXtWYWx1ZU1heH0gJiYgJFZhbHVlID4gJFBhcmFte1ZhbHVlTWF4fTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIFZhbGlkYXRlSW5wdXRHZW5lcmFsQ2F0YWxvZygpCgpjaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIHZhbGlkLgoKICAgIG15ICRTdWNlc3MgPSAkQ29tbW9uT2JqZWN0LT5WYWxpZGF0ZUlucHV0R2VuZXJhbENhdGFsb2coCiAgICAgICAgVmFsdWUgPT4gMTIzLAogICAgICAgIENsYXNzID0+ICdTb21lIGdlbmVyYWwgY2F0YWxvZyBjbGFzcycKICAgICk7CgogICAgcmV0dXJucwogICAgJFN1Y2Nlc3MgPSAxICAgICAgICAgICAgIyBvciAwCgo9Y3V0CgpzdWIgVmFsaWRhdGVJbnB1dEdlbmVyYWxDYXRhbG9nIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKCiAgICAjIGdldCB0aGUgdmFsdWVzIGZvciB0aGUgR2VuZXJhbCBjYXRhbG9nIGNsYXNzCiAgICBteSAkSXRlbUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJFBhcmFte0lucHV0fS0+e0NsYXNzfSwKICAgICk7CgogICAgIyBjcmVhdGUgYSBsb2t1cCBsaXN0CiAgICBteSAlSXRlbUxpc3RMb29rdXAgPSByZXZlcnNlICV7JEl0ZW1MaXN0fTsKCiAgICByZXR1cm4gaWYgISRJdGVtTGlzdExvb2t1cHskVmFsdWV9OwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgVmFsaWRhdGVJbnB1dEN1c3RvbWVyKCkKCmNoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgdmFsaWQuCgogICAgbXkgJFN1Y2VzcyA9ICRDb21tb25PYmplY3QtPlZhbGlkYXRlSW5wdXRDdXN0b21lcigKICAgICAgICBWYWx1ZSA9PiAnc29tZSBjdXN0b21lciBsb2dpbicsCiAgICApOwoKICAgIHJldHVybnMKICAgICRTdWNjZXNzID0gMSAgICAgICAgICAgICMgb3IgMAoKPWN1dAoKc3ViIFZhbGlkYXRlSW5wdXRDdXN0b21lciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX07CgogICAgcmV0dXJuIGlmICEkVmFsdWU7CgogICAgbXkgJUN1c3RvbWVyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICBVc2VyID0+ICRQYXJhbXtWYWx1ZX0sCiAgICApOwoKICAgICMgaWYgY3VzdG9tZXIgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgIUlzSGFzaFJlZldpdGhEYXRhKCBcJUN1c3RvbWVyRGF0YSApOwoKICAgICMgaWYgVmFsaWRJRCBpcyBwcmVzZW50LCBjaGVjayBpZiBpdCBpcyB2YWxpZCEKICAgIGlmICggZGVmaW5lZCAkQ3VzdG9tZXJEYXRhe1ZhbGlkSUR9ICkgewoKICAgICAgICAjIHJldHVybiBmYWxzZSBpZiBjdXN0b21lciBpcyBub3QgdmFsaWQKICAgICAgICByZXR1cm4KICAgICAgICAgICAgaWYgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTG9va3VwKCBWYWxpZElEID0+ICRDdXN0b21lckRhdGF7VmFsaWRJRH0gKSBuZSAndmFsaWQnOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgVmFsaWRhdGVJbnB1dEN1c3RvbWVyQ29tcGFueSgpCgpjaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIHZhbGlkLgoKICAgIG15ICRTdWNlc3MgPSAkQ29tbW9uT2JqZWN0LT5WYWxpZGF0ZUlucHV0Q3VzdG9tZXJDb21wYW55KAogICAgICAgIFZhbHVlID0+ICdzb21lIGN1c3RvbWVyIGNvbXBhbnkgbmFtZScsCiAgICApOwoKICAgIHJldHVybnMKICAgICRTdWNjZXNzID0gMSAgICAgICAgICAgICMgb3IgMAoKPWN1dAoKc3ViIFZhbGlkYXRlSW5wdXRDdXN0b21lckNvbXBhbnkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVmFsdWUgPSAkUGFyYW17VmFsdWV9OwoKICAgIHJldHVybiBpZiAhJFZhbHVlOwoKICAgIG15ICVDb21wYW55TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lckNvbXBhbnknKS0+Q3VzdG9tZXJDb21wYW55TGlzdCgKICAgICAgICBMaW1pdCA9PiAwLCAgICAjIERpc3BsYXkgYWxsIEN1c3RvbWVyIENvbXBhbmllcwogICAgKTsKCiAgICByZXR1cm4gaWYgISRDb21wYW55TGlzdHsgJFBhcmFte1ZhbHVlfSB9OwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgVmFsaWRhdGVNaW1lVHlwZSgpCgpjaGVja3MgaWYgdGhlIGdpdmVuIE1pbWVUeXBlIGlzIHZhbGlkLgoKICAgIG15ICRTdWNlc3MgPSAkQ29tbW9uT2JqZWN0LT5WYWxpZGF0ZU1pbWVUeXBlKAogICAgICAgIE1pbWVUeXBlSUQgPT4gJ3NvbWUgTWltZVR5cGUnLAogICAgKTsKCiAgICByZXR1cm5zCiAgICAkU3VjY2VzcyA9IDEgICAgICAgICAgICAjIG9yIDAKCj1jdXQKCnN1YiBWYWxpZGF0ZU1pbWVUeXBlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte01pbWVUeXBlfTsKCiAgICByZXR1cm4gaWYgJFBhcmFte01pbWVUeXBlfSAhfiBte1xBXHcrXC9cdytcen07CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBWYWxpZGF0ZUNoYXJzZXQoKQoKY2hlY2tzIGlmIHRoZSBnaXZlbiBDaGFyc2V0IGlzIHZhbGlkLgoKICAgIG15ICRTdWNlc3MgPSAkQ29tbW9uT2JqZWN0LT5WYWxpZGF0ZUNoYXJzZXQoCiAgICAgICAgQ2hhcnNldCA9PiAnc29tZSBjaGFyc2V0JywKICAgICk7CgogICAgcmV0dXJucwogICAgJFN1Y2Nlc3MgPSAxICAgICAgICAgICAgIyBvciAwCgo9Y3V0CgpzdWIgVmFsaWRhdGVDaGFyc2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte0NoYXJzZXR9OwoKICAgIG15ICRDaGFyc2V0TGlzdCA9ICRTZWxmLT5fQ2hhcnNldExpc3QoKTsKCiAgICByZXR1cm4gaWYgISRDaGFyc2V0TGlzdC0+eyAkUGFyYW17Q2hhcnNldH0gfTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIFJlcGxhY2VJbnB1dERhdGUoKQoKcmVwbGFjZXMgdGhlIHVzZXIgdmFsdWUgd2l0aCBhIHN5c3RlbSB2YWxpZCB2YWx1ZS4KCiAgICBteSAkTmV3VmFsdWUgPSAkQ29tbW9uT2JqZWN0LT5SZXBsYWNlSW5wdXREYXRlKAogICAgICAgIFZhbHVlID0+ICcxMi8xMi8xOTc3JywKICAgICk7CgogICAgb3IKCiAgICBteSAkTmV3VmFsdWUgPSAkQ29tbW9uT2JqZWN0LT5SZXBsYWNlSW5wdXREYXRlKAogICAgICAgIFZhbHVlID0+ICcxOTc3LTEyLTEyJywKICAgICk7CgogICAgcmV0dXJucwogICAgJE5ld1ZhbHVlID0gJzE5NzctMTItMTInLAoKPWN1dAoKc3ViIFJlcGxhY2VJbnB1dERhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVmFsdWUgPSAkUGFyYW17VmFsdWV9OwoKICAgICMgY2hlY2sgYW5kIGNvbnZlcnQgZm9yIGRhdGUgZm9ybWF0IGxpa2UgIjA1LzE4LzIwMTEiCiAgICBpZiAoICRWYWx1ZSA9fiBte1xBIChcZHsyfSkgLyAoXGR7Mn0pIC8gKFxkezR9KSBcen14bXMgKSB7CiAgICAgICAgJFZhbHVlID0gJDMgLiAnLScgLiAkMSAuICctJyAuICQyIC4gJyAwMDowMDowMCc7CiAgICB9CgogICAgIyBjaGVjayBhbmQgY29udmVydCBmb3IgZGF0ZSBmb3JtYXQgbGlrZSAiMjAxMS0wNS0xOCIKICAgIGlmICggJFZhbHVlID1+IG17XEEgKFxkezR9IC0gXGR7Mn0gLSBcZHsyfSBceikgfXhtcyApIHsKICAgICAgICAkVmFsdWUgPSAkMSAuICcgMDA6MDA6MDAnOwogICAgfQoKICAgICMgQ29udmVydCB0aGUgcmF3IGRhdGEgdG8gYSBzeXN0ZW0gZGF0ZXRpbWUgb2JqZWN0LgogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICBTdHJpbmcgPT4gJFZhbHVlLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkRGF0ZVRpbWVPYmplY3QtPkZvcm1hdCggRm9ybWF0ID0+ICclRicgKTsKfQoKPWhlYWQyIFJlcGxhY2VJbnB1dERhdGVUaW1lKCkKCnJlcGxhY2VzIHRoZSB1c2VyIHZhbHVlIHdpdGggYSBzeXN0ZW0gdmFsaWQgdmFsdWUuCgogICAgbXkgJE5ld1ZhbHVlID0gJENvbW1vbk9iamVjdC0+UmVwbGFjZUlucHV0RGF0ZVRpbWUoCiAgICAgICAgVmFsdWUgPT4gJzEyLzEyLzE5NzcgMTI6MDA6MDAnLAogICAgKTsKCiAgICBvcgoKICAgIG15ICROZXdWYWx1ZSA9ICRDb21tb25PYmplY3QtPlJlcGxhY2VJbnB1dERhdGVUaW1lKAogICAgICAgIFZhbHVlID0+ICcxOTc3LTEyLTEyIDEyOjAwOjAwJywKICAgICk7CgogICAgcmV0dXJucwogICAgJE5ld1ZhbHVlID0gJzE5NzctMTItMTIgMTI6MDA6MDAnOwoKPWN1dAoKc3ViIFJlcGxhY2VJbnB1dERhdGVUaW1lIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKCiAgICAjIGNoZWNrIGFuZCBjb252ZXJ0IGZvciBkYXRlIGZvcm1hdCBsaWtlICIwNS8xOC8yMDExIgogICAgaWYgKCAkVmFsdWUgPX4gbXtcQSAoXGR7Mn0pIC8gKFxkezJ9KSAvIChcZHs0fSkgXHp9eG1zICkgewogICAgICAgICRWYWx1ZSA9ICQzIC4gJy0nIC4gJDEgLiAnLScgLiAkMiAuICcgMDA6MDA6MDAnOwogICAgfQogICAgZWxzaWYgKCAkVmFsdWUgPX4gbXtcQSAoXGR7Mn0pIC8gKFxkezJ9KSAvIChcZHs0fSkgKFxkezJ9IDogXGR7Mn0gOiBcZHsyfSkgXHp9eG1zICkgewogICAgICAgICRWYWx1ZSA9ICQzIC4gJy0nIC4gJDEgLiAnLScgLiAkMiAuICQ0OwogICAgfQoKICAgICMgY2hlY2sgYW5kIGNvbnZlcnQgZm9yIGRhdGUgZm9ybWF0IGxpa2UgIjIwMTEtMDUtMTgiCiAgICBpZiAoICRWYWx1ZSA9fiBte1xBIChcZHs0fSAtIFxkezJ9IC0gXGR7Mn0gXHopIH14bXMgKSB7CiAgICAgICAgJFZhbHVlID0gJDEgLiAnIDAwOjAwOjAwJzsKICAgIH0KCiAgICAjIENvbnZlcnQgdGhlIHJhdyBkYXRhIHRvIGEgc3lzdGVtIGRhdGV0aW1lIG9iamVjdC4KICAgIG15ICREYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgU3RyaW5nID0+ICRWYWx1ZSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gJERhdGVUaW1lT2JqZWN0LT5Ub1N0cmluZygpOwp9Cgo9aGVhZDIgUmVwbGFjZUlucHV0R2VuZXJhbENhdGFsb2coKQoKcmVwbGFjZXMgdGhlIHVzZXIgdmFsdWUgd2l0aCBhIHN5c3RlbSB2YWxpZCB2YWx1ZS4KCiAgICBteSAkTmV3VmFsdWUgPSAkQ29tbW9uT2JqZWN0LT5SZXBsYWNlSW5wdXRHZW5lcmFsQ2F0YWxvZygKICAgICAgICBWYWx1ZSA9PiAnc29tZSB2YWx1ZScsCiAgICAgICAgQ2xhc3MgPT4gJ1NvbWUgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzJwogICAgKTsKCiAgICByZXR1cm5zCiAgICAkTmV3VmFsdWUgPSAxMjMKCj1jdXQKCnN1YiBSZXBsYWNlSW5wdXRHZW5lcmFsQ2F0YWxvZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX07CgogICAgIyBnZXQgdGhlIHZhbHVlcyBmb3IgdGhlIEdlbmVyYWwgY2F0YWxvZyBjbGFzcwogICAgbXkgJEl0ZW1MaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRQYXJhbXtJbnB1dH0tPntDbGFzc30sCiAgICApOwoKICAgICMgY3JlYXRlIGEgbG9rdXAgbGlzdAogICAgbXkgJUl0ZW1MaXN0TG9va3VwID0gcmV2ZXJzZSAleyRJdGVtTGlzdH07CgogICAgcmV0dXJuICRJdGVtTGlzdExvb2t1cHskVmFsdWV9Owp9Cgo9aGVhZDIgSW52ZXJ0UmVwbGFjZUlucHV0RGF0ZSgpCgpyZXBsYWNlcyB0aGUgc3lzdGVtIHZhbHVlIHdpdGggYSB1c2VyIHZhbHVlLgoKICAgIG15ICROZXdWYWx1ZSA9ICRDb21tb25PYmplY3QtPkludmVydFJlcGxhY2VJbnB1dERhdGUoCiAgICAgICAgVmFsdWUgPT4gJzEyLTEyLTE5NzcgMDA6MDA6MDAnLAogICAgKTsKCiAgICByZXR1cm5zCiAgICAkTmV3VmFsdWUgPSAnMTk3Ny0xMi0xMicsCgo9Y3V0CgpzdWIgSW52ZXJ0UmVwbGFjZUlucHV0RGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX07CgogICAgJFZhbHVlID1+IHN7XEEgKFxkezR9IC0gXGR7Mn0gLSBcZHsyfSkgWyBdIDAwOjAwOjAwIFx6fXskMX14bXM7CgogICAgcmV0dXJuICRWYWx1ZTsKfQoKPWhlYWQyIEludmVydFJlcGxhY2VJbnB1dEdlbmVyYWxDYXRhbG9nKCkKCnJlcGxhY2VzIHRoZSBzeXN0ZW0gdmFsdWUgd2l0aCBhIHVzZXIgdmFsdWUuCgogICAgbXkgJE5ld1ZhbHVlID0gJENvbW1vbk9iamVjdC0+SW52ZXJ0UmVwbGFjZUlucHV0R2VuZXJhbENhdGFsb2coCiAgICAgICAgVmFsdWUgPT4gMTIzLAogICAgICAgIENsYXNzID0+ICdTb21lIGdlbmVyYWwgY2F0YWxvZyBjbGFzcycKICAgICk7CgogICAgcmV0dXJucwogICAgJE5ld1ZhbHVlID0gJ3NvbWUgdmFsdWUnCgo9Y3V0CgpzdWIgSW52ZXJ0UmVwbGFjZUlucHV0R2VuZXJhbENhdGFsb2cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVmFsdWUgPSAkUGFyYW17VmFsdWV9OwoKICAgICMgZ2V0IHRoZSB2YWx1ZXMgZm9yIHRoZSBHZW5lcmFsIGNhdGFsb2cgY2xhc3MKICAgIG15ICRJdGVtTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkUGFyYW17SW5wdXR9LT57Q2xhc3N9LAogICAgKTsKCiAgICAjIGNyZWF0ZSBhIGxva3VwIGxpc3QKICAgIHJldHVybiAkSXRlbUxpc3QtPnskVmFsdWV9Owp9Cgo9aGVhZDIgQ3JlYXRlQXR0YWNobWVudCgpCgpjcmVhdGVzIGEgbmV3IGF0dGFjaG1lbnQgZm9yIHRoZSBnaXZlbiBDb25maWdJdGVtLgoKICAgIG15ICRSZXN1bHQgPSAkQ29tbW9uT2JqZWN0LT5DcmVhdGVBdHRhY2htZW50KAogICAgICAgIENvbnRlbnQgICAgICA9PiAkRGF0YSwgICAgICAgICAgICAgICAgICAgIyBmaWxlIGNvbnRlbnQgKEJhc2U2NCBlbmNvZGVkKQogICAgICAgIENvbnRlbnRUeXBlICA9PiAnc29tZSBjb250ZW50IHR5cGUnLAogICAgICAgIEZpbGVuYW1lICAgICA9PiAnc29tZSBmaWxlbmFtZScsCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDQ1NiwKICAgICAgICBVc2VySUQgICAgICAgPT4gMTIzLAogICAgKTsKCiAgICByZXR1cm5zCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGV2ZXJ5dGhpbmcgaXMgb2sKICAgIH0KCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgZGVzY3JpcHRpb24nCiAgICB9Cgo9Y3V0CgpzdWIgQ3JlYXRlQXR0YWNobWVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQXR0YWNobWVudCBDb25maWdJdGVtSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJDcmVhdGVBdHRhY2htZW50KCkgR290IG5vICROZWVkZWQhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyB3cml0ZSBhdHRhY2htZW50CiAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5Db25maWdJdGVtQXR0YWNobWVudEFkZCgKICAgICAgICAleyAkUGFyYW17QXR0YWNobWVudH0gfSwKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgQ29udGVudCAgICAgID0+IE1JTUU6OkJhc2U2NDo6ZGVjb2RlX2Jhc2U2NCggJFBhcmFte0F0dGFjaG1lbnR9LT57Q29udGVudH0gKSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAkU3VjY2VzcywKICAgIH07Cn0KCj1oZWFkMiBDaGVja1hNTERhdGEoKQoKY2hlY2tzIGlmIHRoZSBnaXZlbiBYTUxEYXRhIHZhbHVlIGFyZSB2YWxpZC4KCiAgICBteSAkWE1MRGF0YUNoZWNrID0gJENvbW1vbk9iamVjdC0+Q2hlY2tYTUxEYXRhKAogICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb25BcnJheVJlZiwgICAgICAgICAgIyBDb25maWcgSXRlbSBEZWZpbml0aW9uIG90IGp1c3QgcGFydCBvZiBpdAogICAgICAgIFhNTERhdGEgICAgPT4gJFhNTERhdGFIYXNoUmVmLAogICAgICAgIFBhcmVudCAgICAgPT4gJ3NvbWUgcGFyZW50JywKICAgICk7CgogICAgcmV0dXJuczoKCiAgICAkWE1MRGF0YUNoZWNrID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBldmVyeXRoaW5nIGlzIE9LCiAgICB9CgogICAgJFhNTERhdGFDaGVjayA9IHsKICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0Z1bmN0aW9uLkVycm9yJywgICAgICAgICAgICMgaWYgZXJyb3IKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0Vycm9yIGRlc2NyaXB0aW9uJywKICAgIH0KCj1jdXQKCnN1YiBDaGVja1hNTERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkRGVmaW5pdGlvbiA9ICRQYXJhbXtEZWZpbml0aW9ufTsKICAgIG15ICRYTUxEYXRhICAgID0gJFBhcmFte1hNTERhdGF9OwogICAgbXkgJFBhcmVudCAgICAgPSAkUGFyYW17UGFyZW50fSB8fCAnJzsKCiAgICBteSAkQ2hlY2tWYWx1ZVJlc3VsdDsKICAgIGZvciBteSAkRGVmSXRlbSAoIEB7JERlZmluaXRpb259ICkgewogICAgICAgIG15ICRJdGVtS2V5ID0gJERlZkl0ZW0tPntLZXl9OwoKICAgICAgICAjIGNoZWNrIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IHNob3VsZCBleGlzdAogICAgICAgIGlmICgKICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkRGVmSXRlbS0+e0NvdW50TWlufQogICAgICAgICAgICAgICAgJiYgJERlZkl0ZW0tPntDb3VudE1pbn0gPj0gMQogICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkRGVmSXRlbS0+e0lucHV0fS0+e1JlcXVpcmVkfQogICAgICAgICAgICAgICAgJiYgJERlZkl0ZW0tPntJbnB1dH0tPntSZXF1aXJlZH0KICAgICAgICAgICAgKQogICAgICAgICAgICAmJiAoICFkZWZpbmVkICRYTUxEYXRhLT57JEl0ZW1LZXl9IHx8ICEkWE1MRGF0YS0+eyRJdGVtS2V5fSApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIgogICAgICAgICAgICAgICAgICAgIC4gIiBpcyBtaXNzaW5nISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBpZiAoIHJlZiAkWE1MRGF0YS0+eyRJdGVtS2V5fSBlcSAnQVJSQVknICkgewogICAgICAgICAgICBmb3IgbXkgJEFycmF5SXRlbSAoIEB7ICRYTUxEYXRhLT57JEl0ZW1LZXl9IH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoIHJlZiAkQXJyYXlJdGVtIGVxICdIQVNIJyApIHsKICAgICAgICAgICAgICAgICAgICAkQ2hlY2tWYWx1ZVJlc3VsdCA9ICRTZWxmLT5fQ2hlY2tWYWx1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICA9PiAkQXJyYXlJdGVtLT57JEl0ZW1LZXl9LAogICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAgID0+ICREZWZJdGVtLT57SW5wdXR9LAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtS2V5ID0+ICRJdGVtS2V5LAogICAgICAgICAgICAgICAgICAgICAgICBQYXJlbnQgID0+ICRQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2tWYWx1ZVJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJENoZWNrVmFsdWVSZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCByZWYgJEFycmF5SXRlbSBlcSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAkQ2hlY2tWYWx1ZVJlc3VsdCA9ICRTZWxmLT5fQ2hlY2tWYWx1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICA9PiAkQXJyYXlJdGVtLAogICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAgID0+ICREZWZJdGVtLT57SW5wdXR9LAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtS2V5ID0+ICRJdGVtS2V5LAogICAgICAgICAgICAgICAgICAgICAgICBQYXJlbnQgID0+ICRQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2tWYWx1ZVJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJENoZWNrVmFsdWVSZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDb25maWdJdGVtLT5DSVhNTERhdGEtPiRQYXJlbnQkSXRlbUtleSBwYXJhbWV0ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICIgaXMgaW52YWxpZCEiLAogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCByZWYgJFhNTERhdGEtPnskSXRlbUtleX0gZXEgJ0hBU0gnICkgewogICAgICAgICAgICAkQ2hlY2tWYWx1ZVJlc3VsdCA9ICRTZWxmLT5fQ2hlY2tWYWx1ZSgKICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJFhNTERhdGEtPnskSXRlbUtleX0tPnskSXRlbUtleX0sCiAgICAgICAgICAgICAgICBJbnB1dCAgID0+ICREZWZJdGVtLT57SW5wdXR9LAogICAgICAgICAgICAgICAgSXRlbUtleSA9PiAkSXRlbUtleSwKICAgICAgICAgICAgICAgIFBhcmVudCAgPT4gJFBhcmVudCwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJENoZWNrVmFsdWVSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkQ2hlY2tWYWx1ZVJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgb25seSBwZXJmb3JtIGNoZWNrcyBpZiBpdGVtIHJlYWxseSBleGl0cyBpbiB0aGUgWE1MRGF0YQogICAgICAgICAgICAjIENvdW50TmluIGNoZWNrcyB3YXMgdmVyaWZpZWQgYW5kIHBhc3NlZCBiZWZvcmUhLCBzbyBpdCBpcyBzYWZlIHRvIHNraXAgaWYgbmVlZGVkCiAgICAgICAgICAgIGlmICggJFhNTERhdGEtPnskSXRlbUtleX0gKSB7CiAgICAgICAgICAgICAgICAkQ2hlY2tWYWx1ZVJlc3VsdCA9ICRTZWxmLT5fQ2hlY2tWYWx1ZSgKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICRYTUxEYXRhLT57JEl0ZW1LZXl9LAogICAgICAgICAgICAgICAgICAgIElucHV0ICAgPT4gJERlZkl0ZW0tPntJbnB1dH0sCiAgICAgICAgICAgICAgICAgICAgSXRlbUtleSA9PiAkSXRlbUtleSwKICAgICAgICAgICAgICAgICAgICBQYXJlbnQgID0+ICRQYXJlbnQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJENoZWNrVmFsdWVSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJENoZWNrVmFsdWVSZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgZXhpc3RzIG1vcmUgZWxlbWVudHMgdGhhbiB0aGUgb25lcyB0aGV5IHNob3VsZAogICAgICAgIGlmICggZGVmaW5lZCAkRGVmSXRlbS0+e0NvdW50TWF4fSApCiAgICAgICAgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICByZWYgJFhNTERhdGEtPnskSXRlbUtleX0gZXEgJ0FSUkFZJwogICAgICAgICAgICAgICAgJiYgc2NhbGFyIEB7ICRYTUxEYXRhLT57JEl0ZW1LZXl9IH0gPiAkRGVmSXRlbS0+e0NvdW50TWF4fQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5JbnZhbGlkUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+JFBhcmVudCRJdGVtS2V5IHBhcmFtZXRlciIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiIHJlcGV0aXRpb25zIGlzIGhpZ2hlciB0aGFuIHRoZSBtYXhpdW0gdmFsdWUhIiwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgYSBzdWIgYW5kIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgIGlmICggZGVmaW5lZCAkRGVmSXRlbS0+e1N1Yn0gKSB7CgogICAgICAgICAgICBpZiAoIHJlZiAkWE1MRGF0YS0+eyRJdGVtS2V5fSBlcSAnQVJSQVknICkgewogICAgICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgICAgICAgICAgZm9yIG15ICRBcnJheUl0ZW0gKCBAeyAkWE1MRGF0YS0+eyRJdGVtS2V5fSB9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbiBmb3IgZWFjaCBhcnJheSBpdGVtCiAgICAgICAgICAgICAgICAgICAgbXkgJFhNTERhdGFDaGVjayA9ICRTZWxmLT5DaGVja1hNTERhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZkl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgID0+ICRBcnJheUl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmVudCAgICAgPT4gJFBhcmVudCAuICRJdGVtS2V5IC4gIlskQ291bnRlcl0tPiIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkWE1MRGF0YUNoZWNrLT57U3VjY2Vzc30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkWE1MRGF0YUNoZWNrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggcmVmICRYTUxEYXRhLT57JEl0ZW1LZXl9IGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAgICAgbXkgJFhNTERhdGFDaGVjayA9ICRTZWxmLT5DaGVja1hNTERhdGEoCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICA9PiAkWE1MRGF0YS0+eyRJdGVtS2V5fSwKICAgICAgICAgICAgICAgICAgICBQYXJlbnQgICAgID0+ICRQYXJlbnQgLiAkSXRlbUtleSAuICctPicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJFhNTERhdGFDaGVjay0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkWE1MRGF0YUNoZWNrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgc3RhcnQgcmVjdXNyc2lvbgogICAgICAgICAgICAgICAgbXkgJFhNTERhdGFDaGVjayA9ICRTZWxmLT5DaGVja1hNTERhdGEoCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgICAgICAgICBQYXJlbnQgICAgID0+ICRQYXJlbnQgLiAkSXRlbUtleSAuICctPicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJFhNTERhdGFDaGVjay0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkWE1MRGF0YUNoZWNrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfTsKfQoKPWhlYWQyIFJlcGxhY2VYTUxEYXRhKCkKCnJlcGxhY2UgdGhlIFhNTERhdGEgdG8gb25lIHRoYXQgdXNlcyBpbnRlcm5hbCB2YWx1ZXMuCgogICAgbXkgJE5ld1hNTERhdGEgPSAkQ29tbW9uT2JqZWN0LT5SZXBsYWNlWE1MRGF0YSgKICAgICAgICBEZWZpbml0aW9uID0+ICREZWZpbml0aW9uQXJyYXlSZWYsICAgICAgICAgICMgQ29uZmlnIEl0ZW0gRGVmaW5pdGlvbiBvdCBqdXN0IHBhcnQgb2YgaXQKICAgICAgICBYTUxEYXRhICAgID0+ICRYTUxEYXRhSGFzaFJlZiwKICAgICAgICBQYXJlbnQgICAgID0+ICdzb21lIHBhcmVudCcsCiAgICApOwoKICAgIHJldHVybnM6CgogICAgJE5ld1hNTERhdGEgPSAkWE1MRGF0YUhhc2hSZWYsICAgICAgICAgICAgICAgICAgIyB3aXRoIHJlcGxhY2VkIHZhbHVlcwoKPWN1dAoKc3ViIFJlcGxhY2VYTUxEYXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJERlZmluaXRpb24gPSAkUGFyYW17RGVmaW5pdGlvbn07CiAgICBteSAkWE1MRGF0YSAgICA9ICRQYXJhbXtYTUxEYXRhfTsKICAgIG15ICRQYXJlbnQgICAgID0gJFBhcmFte1BhcmVudH0gfHwgJyc7CgogICAgbXkgJE5ld1hNTERhdGEgPSAkWE1MRGF0YTsKCiAgICBJVEVNOgogICAgZm9yIG15ICREZWZJdGVtICggQHskRGVmaW5pdGlvbn0gKSB7CiAgICAgICAgbXkgJEl0ZW1LZXkgPSAkRGVmSXRlbS0+e0tleX07CgogICAgICAgIG15ICROZXdWYWx1ZTsKCiAgICAgICAgaWYgKCByZWYgJFhNTERhdGEtPnskSXRlbUtleX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgZm9yIG15ICRBcnJheUl0ZW0gKCBAeyAkWE1MRGF0YS0+eyRJdGVtS2V5fSB9ICkgewogICAgICAgICAgICAgICAgaWYgKCByZWYgJEFycmF5SXRlbSBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBuZXcgdmFsdWUKICAgICAgICAgICAgICAgICAgICAkTmV3VmFsdWUgPSAkU2VsZi0+X1JlcGxhY2VWYWx1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICA9PiAkQXJyYXlJdGVtLT57JEl0ZW1LZXl9LAogICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAgID0+ICREZWZJdGVtLT57SW5wdXR9LAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtS2V5ID0+ICRJdGVtS2V5LAogICAgICAgICAgICAgICAgICAgICAgICBQYXJlbnQgID0+ICRQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyByZXBsYWNlIHRoZSB2YWx1ZSBpbiB0aGUgYXJyYXkKICAgICAgICAgICAgICAgICAgICAkQXJyYXlJdGVtLT57JEl0ZW1LZXl9ID0gJE5ld1ZhbHVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2lmICggcmVmICRBcnJheUl0ZW0gZXEgJycgKSB7CiAgICAgICAgICAgICAgICAgICAgJE5ld1ZhbHVlID0gJFNlbGYtPl9SZXBsYWNlVmFsdWUoCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJEFycmF5SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgICA9PiAkRGVmSXRlbS0+e0lucHV0fSwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUtleSA9PiAkSXRlbUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgUGFyZW50ICA9PiAkUGFyZW50LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgcmVwbGFjZSB0aGUgdmFsdWUgaW4gdGhlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgJEFycmF5SXRlbSA9ICROZXdWYWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoIHJlZiAkWE1MRGF0YS0+eyRJdGVtS2V5fSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgICROZXdWYWx1ZSA9ICRTZWxmLT5fUmVwbGFjZVZhbHVlKAogICAgICAgICAgICAgICAgVmFsdWUgICA9PiAkWE1MRGF0YS0+eyRJdGVtS2V5fS0+eyRJdGVtS2V5fSwKICAgICAgICAgICAgICAgIElucHV0ICAgPT4gJERlZkl0ZW0tPntJbnB1dH0sCiAgICAgICAgICAgICAgICBJdGVtS2V5ID0+ICRJdGVtS2V5LAogICAgICAgICAgICAgICAgUGFyZW50ICA9PiAkUGFyZW50LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZXBsYWNlIHRoZSB2YWx1ZSBpbiB0aGUgaGFzaAogICAgICAgICAgICAkWE1MRGF0YS0+eyRJdGVtS2V5fS0+eyRJdGVtS2V5fSA9ICROZXdWYWx1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIG9ubHkgcGVyZm9ybSByZXBsYWNlIGlmIGl0ZW0gcmVhbGx5IGV4aXRzIGluIHRoZSBYTUxEYXRhCiAgICAgICAgICAgIGlmICggJFhNTERhdGEtPnskSXRlbUtleX0gKSB7CiAgICAgICAgICAgICAgICAkTmV3VmFsdWUgPSAkU2VsZi0+X1JlcGxhY2VWYWx1ZSgKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICRYTUxEYXRhLT57JEl0ZW1LZXl9LAogICAgICAgICAgICAgICAgICAgIElucHV0ICAgPT4gJERlZkl0ZW0tPntJbnB1dH0sCiAgICAgICAgICAgICAgICAgICAgSXRlbUtleSA9PiAkSXRlbUtleSwKICAgICAgICAgICAgICAgICAgICBQYXJlbnQgID0+ICRQYXJlbnQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmVwbGFjZSB0aGUgcm9vdCB2YWx1ZQogICAgICAgICAgICAgICAgJFhNTERhdGEtPnskSXRlbUtleX0gPSAkTmV3VmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcmVwbGFjZSB2YWx1ZSBpbiB0aGUgcmVzdWx0aW5nIFhNTERhdGEKICAgICAgICBpZiAoICRYTUxEYXRhLT57JEl0ZW1LZXl9ICkgewogICAgICAgICAgICAkTmV3WE1MRGF0YS0+eyRJdGVtS2V5fSA9ICRYTUxEYXRhLT57JEl0ZW1LZXl9OwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiB0aGVyZSBpcyBhIHN1YiBhbmQgc3RhcnQgcmVjdXJzaW9uCiAgICAgICAgaWYgKCBkZWZpbmVkICREZWZJdGVtLT57U3VifSApIHsKCiAgICAgICAgICAgIGlmICggcmVmICRYTUxEYXRhLT57JEl0ZW1LZXl9IGVxICdBUlJBWScgKSB7CiAgICAgICAgICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEFycmF5SXRlbSAoIEB7ICRYTUxEYXRhLT57JEl0ZW1LZXl9IH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uIGZvciBlYWNoIGFycmF5IGl0ZW0KICAgICAgICAgICAgICAgICAgICBteSAkTmV3WE1MRGF0YVBhcnQgPSAkU2VsZi0+UmVwbGFjZVhNTERhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZkl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgID0+ICRBcnJheUl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmVudCAgICAgPT4gJFBhcmVudCAuICRJdGVtS2V5IC4gIlskQ291bnRlcl0tPiIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkTmV3WE1MRGF0YS0+eyRJdGVtS2V5fS0+WyRDb3VudGVyXSA9ICROZXdYTUxEYXRhUGFydDsKICAgICAgICAgICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggcmVmICRYTUxEYXRhLT57JEl0ZW1LZXl9IGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAgICAgbXkgJE5ld1hNTERhdGFQYXJ0ID0gJFNlbGYtPlJlcGxhY2VYTUxEYXRhKAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZkl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgPT4gJFhNTERhdGEtPnskSXRlbUtleX0sCiAgICAgICAgICAgICAgICAgICAgUGFyZW50ICAgICA9PiAkUGFyZW50IC4gJEl0ZW1LZXkgLiAnLT4nLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICROZXdYTUxEYXRhLT57JEl0ZW1LZXl9ID0gJE5ld1hNTERhdGFQYXJ0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAkWE1MRGF0YS0+eyRJdGVtS2V5fSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBzdGFydCByZWN1c3JzaW9uCiAgICAgICAgICAgICAgICAgICAgbXkgJE5ld1hNTERhdGFQYXJ0ID0gJFNlbGYtPlJlcGxhY2VYTUxEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uID0+ICREZWZJdGVtLT57U3VifSwKICAgICAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgUGFyZW50ICAgICA9PiAkUGFyZW50IC4gJEl0ZW1LZXkgLiAnLT4nLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJE5ld1hNTERhdGEtPnskSXRlbUtleX0gPSAkTmV3WE1MRGF0YVBhcnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJE5ld1hNTERhdGE7Cn0KCj1oZWFkMiBGb3JtYXRYTUxEYXRhKCkKCkNyZWF0ZSBhIFhNTERhdGEgc3VpdGFibGUgZm9yIFZlcnNpb25BZGQuCgogICAgbXkgJE5ld1hNTERhdGEgPSAkQ29tbW9uT2JqZWN0LT5Gb3JtYXRYTUxEYXRhKAogICAgICAgIFhNTERhdGEgICAgPT4gJFhNTERhdGFIYXNoUmVmLAogICAgICAgIENoaWxkICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICMgb3IgMCwgb3B0aW9uYWwKICAgICk7CgogICAgcmV0dXJuczoKCiAgICAkTmV3WE1MRGF0YSA9ICRYTUxEYXRhSGFzaFJlZiwgICAgICAgICAgICAgICAgICAjIHN1aXRhYmxlIGZvciB2ZXJzaW9uIGFkZAoKPWN1dAoKc3ViIEZvcm1hdFhNTERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkWE1MRGF0YSA9ICRQYXJhbXtYTUxEYXRhfTsKICAgIG15ICRDaGlsZCAgID0gJFBhcmFte0NoaWxkfTsKCiAgICBteSAkTmV3WE1MRGF0YTsKCiAgICBmb3IgbXkgJFJvb3RLZXkgKCBzb3J0IGtleXMgJXskWE1MRGF0YX0gKSB7CiAgICAgICAgaWYgKCByZWYgJFhNTERhdGEtPnskUm9vdEtleX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgbXkgQE5ld1hNTFBhcnRzOwogICAgICAgICAgICAkTmV3WE1MUGFydHNbMF0gPSB1bmRlZjsKCiAgICAgICAgICAgIGZvciBteSAkQXJyYXlJdGVtICggQHsgJFhNTERhdGEtPnskUm9vdEtleX0gfSApIHsKICAgICAgICAgICAgICAgIGlmICggcmVmICRBcnJheUl0ZW0gZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgICAgICAgICAjIGV4dHJhY3QgdGhlIHJvb3Qga2V5IGZyb20gdGhlIGhhc2ggYW5kIGFzc2lnbiBpdCB0byBjb250ZW50IGtleQogICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50ID0gZGVsZXRlICRBcnJheUl0ZW0tPnskUm9vdEtleX07CgogICAgICAgICAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAgbXkgJE5ld1hNTERhdGFQYXJ0ID0gJFNlbGYtPkZvcm1hdFhNTERhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIFhNTERhdGEgPT4gJEFycmF5SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgQ2hpbGQgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBATmV3WE1MUGFydHMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgJXskTmV3WE1MRGF0YVBhcnR9LAogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoIHJlZiAkQXJyYXlJdGVtIGVxICcnICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQE5ld1hNTFBhcnRzLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJEFycmF5SXRlbSwKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFzc2FtYmxlIHRoZSBmaW5hbCB2YWx1ZSBmcm9tIHRoZSBwYXJ0cyBhcnJheQogICAgICAgICAgICAkTmV3WE1MRGF0YS0+eyRSb290S2V5fSA9IFxATmV3WE1MUGFydHM7CiAgICAgICAgfQoKICAgICAgICBpZiAoIHJlZiAkWE1MRGF0YS0+eyRSb290S2V5fSBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICBteSBATmV3WE1MUGFydHM7CiAgICAgICAgICAgICROZXdYTUxQYXJ0c1swXSA9IHVuZGVmOwoKICAgICAgICAgICAgIyBleHRyYWN0IHRoZSByb290IGtleSBmcm9tIHRoZSBoYXNoIGFuZCBhc3NpZ24gaXQgdG8gY29udGVudCBrZXkKICAgICAgICAgICAgbXkgJENvbnRlbnQgPSBkZWxldGUgJFhNTERhdGEtPnskUm9vdEtleX0tPnskUm9vdEtleX07CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICBteSAkTmV3WE1MRGF0YVBhcnQgPSAkU2VsZi0+Rm9ybWF0WE1MRGF0YSgKICAgICAgICAgICAgICAgIFhNTERhdGEgPT4gJFhNTERhdGEtPnskUm9vdEtleX0sCiAgICAgICAgICAgICAgICBDaGlsZCAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQE5ld1hNTFBhcnRzLCB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRDb250ZW50LAogICAgICAgICAgICAgICAgJXskTmV3WE1MRGF0YVBhcnR9LAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgIyBhc3NhbWJsZSB0aGUgZmluYWwgdmFsdWUgZnJvbSB0aGUgcGFydHMgYXJyYXkKICAgICAgICAgICAgJE5ld1hNTERhdGEtPnskUm9vdEtleX0gPSBcQE5ld1hNTFBhcnRzOwogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCByZWYgJFhNTERhdGEtPnskUm9vdEtleX0gZXEgJycgKSB7CiAgICAgICAgICAgICROZXdYTUxEYXRhLT57JFJvb3RLZXl9ID0gWwogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkWE1MRGF0YS0+eyRSb290S2V5fSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgfQoKICAgICMgcmV0dXJuIG9ubHkgdGhlIHBhcnQgb24gcmVjdXJzaW9uCiAgICBpZiAoJENoaWxkKSB7CiAgICAgICAgcmV0dXJuICROZXdYTUxEYXRhOwogICAgfQoKICAgICMgcmV0dXJuIHRoZSBjb21wbGV0ZSBYTUxEYXRhIGFzIG5lZWRlZCBmb3IgdmVyc2lvbiBhZGQKICAgIHJldHVybiBbCiAgICAgICAgdW5kZWYsCiAgICAgICAgewogICAgICAgICAgICBWZXJzaW9uID0+IFsKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgJE5ld1hNTERhdGEKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgXTsKfQoKPWhlYWQyIEludmVydEZvcm1hdFhNTERhdGEoKQoKQ3JlYXRlcyBhIHJlYWRhYmxlIFhNTERhdGEuCgogICAgbXkgJE5ld1hNTERhdGEgPSAkQ29tbW9uT2JqZWN0LT5JbnZlcnRGb3JtYXRYTUxEYXRhKAogICAgICAgIFhNTERhdGEgICAgPT4gJFhNTERhdGFIYXNoUmVmLAogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICROZXdYTUxEYXRhID0gJFhNTERhdGFIYXNoUmVmLCAgICAgICAgICAgICAgICAgICMgc3VpdGFibGUgZm9yIHZlcnNpb24gYWRkCgo9Y3V0CgpzdWIgSW52ZXJ0Rm9ybWF0WE1MRGF0YSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRYTUxEYXRhID0gJFBhcmFte1hNTERhdGF9OwoKICAgIG15ICROZXdYTUxEYXRhOwogICAgbXkgJENvbnRlbnQ7CiAgICBST09USEFTSDoKICAgIGZvciBteSAkUm9vdEhhc2ggKCBAeyRYTUxEYXRhfSApIHsKICAgICAgICBuZXh0IFJPT1RIQVNIIGlmICFkZWZpbmVkICRSb290SGFzaDsKICAgICAgICBkZWxldGUgJFJvb3RIYXNoLT57VGFnS2V5fTsKCiAgICAgICAgZm9yIG15ICRSb290SGFzaEtleSAoIHNvcnQga2V5cyAleyRSb290SGFzaH0gKSB7CiAgICAgICAgICAgIGlmICggcmVmICRSb290SGFzaC0+eyRSb290SGFzaEtleX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgICAgIGlmICggc2NhbGFyIEB7ICRSb290SGFzaC0+eyRSb290SGFzaEtleX0gfSA+IDIgKSB7CgogICAgICAgICAgICAgICAgICAgICMgd2UgYXJlIG9uIGFuIGFycmF5CiAgICAgICAgICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgICAgICAgICAgICAgIEFSUkFZSVRFTToKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEFycmF5SXRlbSAoIEB7ICRSb290SGFzaC0+eyRSb290SGFzaEtleX0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBUlJBWUlURU0gaWYgIWRlZmluZWQgJEFycmF5SXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRBcnJheUl0ZW0tPntUYWdLZXl9OwoKICAgICAgICAgICAgICAgICAgICAgICAgJENvbnRlbnQgPSBkZWxldGUgJEFycmF5SXRlbS0+e0NvbnRlbnR9IHx8ICcnOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzY2FsYXIga2V5cyAleyRBcnJheUl0ZW19ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld1hNTERhdGEtPnskUm9vdEhhc2hLZXl9LT5bJENvdW50ZXJdLT57JFJvb3RIYXNoS2V5fSA9ICRDb250ZW50OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEFycmF5SXRlbUtleSAoIHNvcnQga2V5cyAleyRBcnJheUl0ZW19ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkTmV3WE1MRGF0YVBhcnQgPSAkU2VsZi0+SW52ZXJ0Rm9ybWF0WE1MRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSA9PiAkQXJyYXlJdGVtLT57JEFycmF5SXRlbUtleX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV3WE1MRGF0YS0+eyRSb290SGFzaEtleX0tPlskQ291bnRlcl0tPnskQXJyYXlJdGVtS2V5fSA9ICROZXdYTUxEYXRhUGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXdYTUxEYXRhLT57JFJvb3RIYXNoS2V5fS0+WyRDb3VudGVyXSA9ICRDb250ZW50OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIHdlIGFyZSBvbiBhIGhhc2ggb3Igc2luZ2xlIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgQVJSQVlJVEVNOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQXJyYXlJdGVtICggQHsgJFJvb3RIYXNoLT57JFJvb3RIYXNoS2V5fSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEFSUkFZSVRFTSBpZiAhZGVmaW5lZCAkQXJyYXlJdGVtOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEFycmF5SXRlbS0+e1RhZ0tleX07CgogICAgICAgICAgICAgICAgICAgICAgICAkQ29udGVudCA9IGRlbGV0ZSAkQXJyYXlJdGVtLT57Q29udGVudH0gfHwgJyc7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNjYWxhciBrZXlzICV7JEFycmF5SXRlbX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV3WE1MRGF0YS0+eyRSb290SGFzaEtleX0tPnskUm9vdEhhc2hLZXl9ID0gJENvbnRlbnQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkQXJyYXlJdGVtS2V5ICggc29ydCBrZXlzICV7JEFycmF5SXRlbX0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICROZXdYTUxEYXRhUGFydCA9ICRTZWxmLT5JbnZlcnRGb3JtYXRYTUxEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxEYXRhID0+ICRBcnJheUl0ZW0tPnskQXJyYXlJdGVtS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXdYTUxEYXRhLT57JFJvb3RIYXNoS2V5fS0+eyRBcnJheUl0ZW1LZXl9ID0gJE5ld1hNTERhdGFQYXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld1hNTERhdGEtPnskUm9vdEhhc2hLZXl9ID0gJENvbnRlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgd2UgYXJlIG9uIGEgZmluYWwgbm9kZQogICAgICAgICAgICBlbHNpZiAoIHJlZiAkUm9vdEhhc2gtPnskUm9vdEhhc2hLZXl9IGVxICcnICYmICRSb290SGFzaEtleSBlcSAnQ29udGVudCcgKSB7CiAgICAgICAgICAgICAgICAkTmV3WE1MRGF0YSA9ICRSb290SGFzaC0+eyRSb290SGFzaEtleX07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICROZXdYTUxEYXRhOwp9Cgo9aGVhZDIgSW52ZXJ0UmVwbGFjZVhNTERhdGEoKQoKcmVwbGFjZSB0aGUgWE1MRGF0YSB0byBvbmUgdGhhdCB1c2VzIHVzZXIgdmFsdWVzLgoKICAgIG15ICROZXdYTUxEYXRhID0gJENvbW1vbk9iamVjdC0+SW52ZXJ0UmVwbGFjZVhNTERhdGEoCiAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmaW5pdGlvbkFycmF5UmVmLCAgICAgICAgICAjIENvbmZpZyBJdGVtIERlZmluaXRpb24gb3QganVzdCBwYXJ0IG9mIGl0CiAgICAgICAgWE1MRGF0YSAgICA9PiAkWE1MRGF0YUhhc2hSZWYsCiAgICAgICAgUGFyZW50ICAgICA9PiAnc29tZSBwYXJlbnQnLAogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICROZXdYTUxEYXRhID0gJFhNTERhdGFIYXNoUmVmLCAgICAgICAgICAgICAgICAgICMgd2l0aCByZXBsYWNlZCB2YWx1ZXMKCj1jdXQKCnN1YiBJbnZlcnRSZXBsYWNlWE1MRGF0YSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREZWZpbml0aW9uID0gJFBhcmFte0RlZmluaXRpb259OwogICAgbXkgJFhNTERhdGEgICAgPSAkUGFyYW17WE1MRGF0YX07CiAgICBteSAkUGFyZW50ICAgICA9ICRQYXJhbXtQYXJlbnR9IHx8ICcnOwoKICAgIG15ICROZXdYTUxEYXRhID0gJFhNTERhdGE7CgogICAgSVRFTToKICAgIGZvciBteSAkRGVmSXRlbSAoIEB7JERlZmluaXRpb259ICkgewogICAgICAgIG15ICRJdGVtS2V5ID0gJERlZkl0ZW0tPntLZXl9OwoKICAgICAgICBteSAkTmV3VmFsdWU7CgogICAgICAgIGlmICgKICAgICAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoJFhNTERhdGEpCiAgICAgICAgICAgICYmICRYTUxEYXRhLT57JEl0ZW1LZXl9CiAgICAgICAgICAgICYmIHJlZiAkWE1MRGF0YS0+eyRJdGVtS2V5fSBlcSAnQVJSQVknCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICBmb3IgbXkgJEFycmF5SXRlbSAoIEB7ICRYTUxEYXRhLT57JEl0ZW1LZXl9IH0gKSB7CgogICAgICAgICAgICAgICAgaWYgKCByZWYgJEFycmF5SXRlbSBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBuZXcgdmFsdWUKICAgICAgICAgICAgICAgICAgICAkTmV3VmFsdWUgPSAkU2VsZi0+X0ludmVydFJlcGxhY2VWYWx1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICA9PiAkQXJyYXlJdGVtLT57JEl0ZW1LZXl9LAogICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAgID0+ICREZWZJdGVtLT57SW5wdXR9LAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtS2V5ID0+ICRJdGVtS2V5LAogICAgICAgICAgICAgICAgICAgICAgICBQYXJlbnQgID0+ICRQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyByZXBsYWNlIHRoZSB2YWx1ZSBpbiB0aGUgYXJyYXkKICAgICAgICAgICAgICAgICAgICAkQXJyYXlJdGVtLT57JEl0ZW1LZXl9ID0gJE5ld1ZhbHVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2lmICggcmVmICRBcnJheUl0ZW0gZXEgJycgKSB7CiAgICAgICAgICAgICAgICAgICAgJE5ld1ZhbHVlID0gJFNlbGYtPl9JbnZlcnRSZXBsYWNlVmFsdWUoCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJEFycmF5SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgICA9PiAkRGVmSXRlbS0+e0lucHV0fSwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUtleSA9PiAkSXRlbUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgUGFyZW50ICA9PiAkUGFyZW50LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgcmVwbGFjZSB0aGUgdmFsdWUgaW4gdGhlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgJEFycmF5SXRlbSA9ICROZXdWYWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgIElzSGFzaFJlZldpdGhEYXRhKCRYTUxEYXRhKQogICAgICAgICAgICAmJiAkWE1MRGF0YS0+eyRJdGVtS2V5fQogICAgICAgICAgICAmJiByZWYgJFhNTERhdGEtPnskSXRlbUtleX0gZXEgJ0hBU0gnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICROZXdWYWx1ZSA9ICRTZWxmLT5fSW52ZXJ0UmVwbGFjZVZhbHVlKAogICAgICAgICAgICAgICAgVmFsdWUgICA9PiAkWE1MRGF0YS0+eyRJdGVtS2V5fS0+eyRJdGVtS2V5fSwKICAgICAgICAgICAgICAgIElucHV0ICAgPT4gJERlZkl0ZW0tPntJbnB1dH0sCiAgICAgICAgICAgICAgICBJdGVtS2V5ID0+ICRJdGVtS2V5LAogICAgICAgICAgICAgICAgUGFyZW50ICA9PiAkUGFyZW50LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZXBsYWNlIHRoZSB2YWx1ZSBpbiB0aGUgaGFzaAogICAgICAgICAgICAkWE1MRGF0YS0+eyRJdGVtS2V5fS0+eyRJdGVtS2V5fSA9ICROZXdWYWx1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIG9ubHkgcGVyZm9ybSByZXBsYWNlIGlmIGl0ZW0gcmVhbGx5IGV4aXRzIGluIHRoZSBYTUxEYXRhCiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJFhNTERhdGEpICYmICRYTUxEYXRhLT57JEl0ZW1LZXl9ICkgewogICAgICAgICAgICAgICAgJE5ld1ZhbHVlID0gJFNlbGYtPl9JbnZlcnRSZXBsYWNlVmFsdWUoCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICA9PiAkWE1MRGF0YS0+eyRJdGVtS2V5fSwKICAgICAgICAgICAgICAgICAgICBJbnB1dCAgID0+ICREZWZJdGVtLT57SW5wdXR9LAogICAgICAgICAgICAgICAgICAgIEl0ZW1LZXkgPT4gJEl0ZW1LZXksCiAgICAgICAgICAgICAgICAgICAgUGFyZW50ICA9PiAkUGFyZW50LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgdGhlIHJvb3QgdmFsdWUKICAgICAgICAgICAgICAgICRYTUxEYXRhLT57JEl0ZW1LZXl9ID0gJE5ld1ZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHJlcGxhY2UgdmFsdWUgaW4gdGhlIHJlc3VsdGluZyBYTUxEYXRhCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkWE1MRGF0YSkgJiYgJFhNTERhdGEtPnskSXRlbUtleX0gKSB7CiAgICAgICAgICAgICROZXdYTUxEYXRhLT57JEl0ZW1LZXl9ID0gJFhNTERhdGEtPnskSXRlbUtleX07CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3ViIGFuZCBzdGFydCByZWN1cnNpb24KICAgICAgICBpZiAoIGRlZmluZWQgJERlZkl0ZW0tPntTdWJ9ICkgewoKICAgICAgICAgICAgaWYgKCByZWYgJFhNTERhdGEtPnskSXRlbUtleX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgICAgIG15ICRDb3VudGVyID0gMDsKICAgICAgICAgICAgICAgIGZvciBteSAkQXJyYXlJdGVtICggQHsgJFhNTERhdGEtPnskSXRlbUtleX0gfSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24gZm9yIGVhY2ggYXJyYXkgaXRlbQogICAgICAgICAgICAgICAgICAgIG15ICROZXdYTUxEYXRhUGFydCA9ICRTZWxmLT5JbnZlcnRSZXBsYWNlWE1MRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgPT4gJEFycmF5SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgUGFyZW50ICAgICA9PiAkUGFyZW50IC4gJEl0ZW1LZXkgLiAiWyRDb3VudGVyXS0+IiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICROZXdYTUxEYXRhLT57JEl0ZW1LZXl9LT5bJENvdW50ZXJdID0gJE5ld1hNTERhdGFQYXJ0OwogICAgICAgICAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCByZWYgJFhNTERhdGEtPnskSXRlbUtleX0gZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uCiAgICAgICAgICAgICAgICBteSAkTmV3WE1MRGF0YVBhcnQgPSAkU2VsZi0+SW52ZXJ0UmVwbGFjZVhNTERhdGEoCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICA9PiAkWE1MRGF0YS0+eyRJdGVtS2V5fSwKICAgICAgICAgICAgICAgICAgICBQYXJlbnQgICAgID0+ICRQYXJlbnQgLiAkSXRlbUtleSAuICctPicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJE5ld1hNTERhdGEtPnskSXRlbUtleX0gPSAkTmV3WE1MRGF0YVBhcnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoICRYTUxEYXRhLT57JEl0ZW1LZXl9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IHJlY3VzcnNpb24KICAgICAgICAgICAgICAgICAgICBteSAkTmV3WE1MRGF0YVBhcnQgPSAkU2VsZi0+SW52ZXJ0UmVwbGFjZVhNTERhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZkl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgID0+IHt9LAogICAgICAgICAgICAgICAgICAgICAgICBQYXJlbnQgICAgID0+ICRQYXJlbnQgLiAkSXRlbUtleSAuICctPicsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkTmV3WE1MRGF0YS0+eyRJdGVtS2V5fSA9ICROZXdYTUxEYXRhUGFydDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkTmV3WE1MRGF0YTsKfQoKPWhlYWQxIElOVEVSTkFMIElOVEVSRkFDRQoKPWhlYWQyIF9DaGFyc2V0TGlzdCgpCgpyZXR1cm5zIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGNoYXJzZXRzLgoKICAgIG15ICRDaGFyc2V0TGlzdCA9ICRDb21tb25PYmplY3QtPl9DaGFyc2V0TGlzdCgKICAgICAgICBVc2VySUQgPT4gMTIzLAogICAgKTsKCiAgICByZXR1cm5zCiAgICAkU3VjY2VzcyA9IHsKICAgICAgICAjLi4uCiAgICAgICAgaXNvLTg4NTktMSAgPT4gMSwKICAgICAgICBpc28tODg1OS0xNSA9PiAxLAogICAgICAgIE1hY1JvbWFuICAgID0+IDEsCiAgICAgICAgdXRmOCAgICAgICAgPT4gMSwKICAgICAgICAjLi4uCiAgICB9Cgo9Y3V0CgpzdWIgX0NoYXJzZXRMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2hhcnNldCBhcnJheQogICAgdXNlIEVuY29kZTsKICAgIG15IEBDaGFyc2V0TGlzdCA9IEVuY29kZS0+ZW5jb2RpbmdzKCI6YWxsIik7CgogICAgbXkgJUNoYXJzZXRIYXNoOwoKICAgICMgY3JlYXRlIGEgY2hhcnNldCBsb29rdXAgdGFibGUKICAgIGZvciBteSAkQ2hhcnNldCAoQENoYXJzZXRMaXN0KSB7CiAgICAgICAgJENoYXJzZXRIYXNoeyRDaGFyc2V0fSA9IDE7CiAgICB9CgogICAgcmV0dXJuIFwlQ2hhcnNldEhhc2g7Cn0KCj1oZWFkMiBfQ2hlY2tWYWx1ZSgpCgpjaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIHZhbGlkLgoKICAgIG15ICRWYWx1ZUNoZWNrID0gJENvbW1vbk9iamVjdC0+X0NoZWNrVmFsdWUoCiAgICAgICAgVmFsdWUgICA9PiAkVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAjICRWYWx1ZSBjb3VsZCBiZSBhIHN0cmluZywgYSB0aW1lIHN0YW1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBuYW1lLCBvciBhIGludGVnZXIKICAgICAgICBJbnB1dCAgID0+ICRJbnB1dERlZmluaXRpb25IYXNoUmVmLCAgICAgICMgVGhlIGRlZmluaXRpb24gb2YgdGhlIGVsZW1lbnQgaW5wdXQgZXh0cmFjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgZnJvbSB0aGUgQ29uZmlndXJhdGlvbiBJdGVtIGRlZmluaXRpb24gZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgZm9yIGVhY2ggdmFsdWUKICAgICAgICBJdGVtS2V5ID0+ICdzb21lIGtleScsICAgICAgICAgICAgICAgICAgICMgVGhlIG5hbWUgb2YgdGhlIHZhbHVlIGFzIHNlbnQgaW4gdGhlIFNPQVAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICByZXF1ZXN0CiAgICAgICAgUGFyZW50ICA9PiAnc29lbSBwYXJlbnQga2V5LT4nLCAgICAgICAgICAjIFRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgZm9sbG93ZWQgYnkgLT4gb3IgZW1wdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBmb3Igcm9vdCBrZXkgaXRlbXMKICAgICk7CgogICAgcmV0dXJuczoKCiAgICAkVmFsdWVDaGVjayA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgZXZlcnl0aGluZyBpcyBPSwogICAgfQoKICAgICRWYWx1ZUNoZWNrID0gewogICAgICAgIEVycm9yQ29kZSAgICA9PiAnRnVuY3Rpb24uRXJyb3InLCAgICAgICAgIyBpZiBlcnJvcgogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgZGVzY3JpcHRpb24nLAogICAgfQoKPWN1dAoKc3ViIF9DaGVja1ZhbHVlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBhcmVudCAgPSAkUGFyYW17UGFyZW50fTsKICAgIG15ICRJdGVtS2V5ID0gJFBhcmFte0l0ZW1LZXl9OwoKICAgIGlmICgKICAgICAgICBkZWZpbmVkICRQYXJhbXtJbnB1dH0tPntSZXF1aXJlZH0gJiYgJFBhcmFte0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhJFBhcmFte1ZhbHVlfQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+JFBhcmVudCRJdGVtS2V5IHBhcmFtZXRlciB2YWx1ZSIKICAgICAgICAgICAgICAgIC4gIiBpcyByZXF1aXJlZCBhbmQgaXMgbWlzc2luZyEiLAogICAgICAgIH07CiAgICB9CgogICAgaWYgKCAkUGFyYW17SW5wdXR9LT57VHlwZX0gZXEgJ1RleHQnIHx8ICRQYXJhbXtJbnB1dH0tPntUeXBlfSBlcSAnVGV4dEFyZWEnICkgewoKICAgICAgICAjIHJ1biBUZXh0IHZhbGlkYXRpb25zCiAgICAgICAgaWYgKCAhJFNlbGYtPlZhbGlkYXRlSW5wdXRUZXh0KCVQYXJhbSkgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIHZhbHVlIgogICAgICAgICAgICAgICAgICAgIC4gIiBleGNlZGVzIHRoZSBtYXhpdW0gbGVuZ3RoISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17SW5wdXR9LT57VHlwZX0gZXEgJ0RhdGUnICkgewoKICAgICAgICAjIHJ1biBEYXRlIHZhbGlkYXRpb25zCiAgICAgICAgaWYgKCAhJFNlbGYtPlZhbGlkYXRlSW5wdXREYXRlKCVQYXJhbSkgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIHZhbHVlIgogICAgICAgICAgICAgICAgICAgIC4gIiBpcyBub3QgYSB2YWxpZCBEYXRlIGZvcm1hdCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFBhcmFte0lucHV0fS0+e1R5cGV9IGVxICdEYXRlVGltZScgKSB7CgogICAgICAgICMgcnVuIERhdGVUaW1lIHZhbGlkYXRpb25zCiAgICAgICAgaWYgKCAhJFNlbGYtPlZhbGlkYXRlSW5wdXREYXRlVGltZSglUGFyYW0pICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+JFBhcmVudCRJdGVtS2V5IHBhcmFtZXRlciB2YWx1ZSIKICAgICAgICAgICAgICAgICAgICAuICIgaXMgbm90IGEgdmFsaWQgRGF0ZVRpbWUgZm9ybWF0ISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17SW5wdXR9LT57VHlwZX0gZXEgJ0N1c3RvbWVyJyApIHsKCiAgICAgICAgIyBydW4gQ3VzdG9tZXIgdmFsaWRhdGlvbnMKICAgICAgICBpZiAoICEkU2VsZi0+VmFsaWRhdGVJbnB1dEN1c3RvbWVyKCVQYXJhbSkgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIHZhbHVlIgogICAgICAgICAgICAgICAgICAgIC4gIiBpcyBub3QgYSB2YWxpZCBjdXN0b21lciEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFBhcmFte0lucHV0fS0+e1R5cGV9IGVxICdDdXN0b21lckNvbXBhbnknICkgewoKICAgICAgICAjIHJ1biBDdXN0b21lckNvbXBhbnkgdmFsaWRhdGlvbnMKICAgICAgICBpZiAoICEkU2VsZi0+VmFsaWRhdGVJbnB1dEN1c3RvbWVyQ29tcGFueSglUGFyYW0pICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+JFBhcmVudCRJdGVtS2V5IHBhcmFtZXRlciB2YWx1ZSIKICAgICAgICAgICAgICAgICAgICAuICIgaXMgbm90IGEgdmFsaWQgY3VzdG9tZXIgY29tcGFueSEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFBhcmFte0lucHV0fS0+e1R5cGV9IGVxICdJbnRlZ2VyJyApIHsKCiAgICAgICAgIyBydW4gSW50ZWdlciB2YWxpZGF0aW9ucwogICAgICAgIGlmICggISRTZWxmLT5WYWxpZGF0ZUlucHV0SW50ZWdlciglUGFyYW0pICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+JFBhcmVudCRJdGVtS2V5IHBhcmFtZXRlciB2YWx1ZSIKICAgICAgICAgICAgICAgICAgICAuICIgaXMgbm90IGEgdmFsaWQgSW50ZWdlciBvciBvdXQgb2YgcmFuZ2UhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtJbnB1dH0tPntUeXBlfSBlcSAnR2VuZXJhbENhdGFsb2cnICkgewoKICAgICAgICAjIHJ1biBHZW5lcmFsIENhdGFsb2cgdmFsaWRhdGlvbnMKICAgICAgICBpZiAoICEkU2VsZi0+VmFsaWRhdGVJbnB1dEdlbmVyYWxDYXRhbG9nKCVQYXJhbSkgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIHZhbHVlIgogICAgICAgICAgICAgICAgICAgIC4gIiBpcyBub3QgYSB2YWxpZCBmb3IgR2VuZXJhbCBDYXRhbG9nICckUGFyYW17SW5wdXR9LT57Q2xhc3N9JyEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIFRoZSB0eXBlIGlzIGR1bW15LCBkbyBub3RoaW5nCiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgX1JlcGxhY2VWYWx1ZSgpCgpyZXBsYWNlIHVzZXIgdmFsdWVzIHdpdGggc3lzdGVtIHJlYWR5IHZhbHVlcy4KCiAgICBteSAkTmV3VmFsdWUgPSAkQ29tbW9uT2JqZWN0LT5fUmVwbGFjZVZhbHVlKAogICAgICAgIFZhbHVlICAgPT4gJFZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgIyAkVmFsdWUgY291bGQgYmUgYSBzdHJpbmcsIGEgdGltZSBzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBnZW5lcmFsIGNhdGFsb2cgY2xhc3MgbmFtZSwgb3IgYSBpbnRlZ2VyCiAgICAgICAgSW5wdXQgICA9PiAkSW5wdXREZWZpbml0aW9uSGFzaFJlZiwgICAgICAjIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBlbGVtZW50IGlucHV0IGV4dHJhY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIGZyb20gdGhlIENvbmZpZ3VyYXRpb24gSXRlbSBkZWZpbml0aW9uIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIGZvciBlYWNoIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgZm9yIHJvb3Qga2V5IGl0ZW1zCiAgICApOwoKICAgIHJldHVybnM6CgogICAgJE5ld1ZhbHVlID0gJEFOZXdWYWx1ZQoKPWN1dAoKc3ViIF9SZXBsYWNlVmFsdWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCB0aGUgbGlzdCBvZiBpbnB1dCB0eXBlcyB0aGF0IG5lZWRzIHRvIGJlIHJlcGxhY2VkCiAgICBteSAlUmVwbGFjZUlucHV0VHlwZXMgPSAoCiAgICAgICAgRGF0ZSAgICAgICAgICAgPT4gMSwKICAgICAgICBEYXRlVGltZSAgICAgICA9PiAxLAogICAgICAgIEdlbmVyYWxDYXRhbG9nID0+IDEsCiAgICApOwogICAgaWYgKCAhJFJlcGxhY2VJbnB1dFR5cGVzeyAkUGFyYW17SW5wdXR9LT57VHlwZX0gfSApIHsKICAgICAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKICAgIH0KCiAgICBteSAkTmV3VmFsdWU7CgogICAgaWYgKCAkUGFyYW17SW5wdXR9LT57VHlwZX0gZXEgJ0RhdGUnICkgewoKICAgICAgICAjIHJ1biBEYXRlIHJlcGxhY2UKICAgICAgICAkTmV3VmFsdWUgPSAkU2VsZi0+UmVwbGFjZUlucHV0RGF0ZSglUGFyYW0pOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17SW5wdXR9LT57VHlwZX0gZXEgJ0RhdGVUaW1lJyApIHsKCiAgICAgICAgIyBydW4gRGF0ZVRpbWUgcmVwbGFjZQogICAgICAgICROZXdWYWx1ZSA9ICRTZWxmLT5SZXBsYWNlSW5wdXREYXRlVGltZSglUGFyYW0pOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyBydW4gR2VuZXJhbCBDYXRhbG9nIHJlcGxhY2UKICAgICAgICAkTmV3VmFsdWUgPSAkU2VsZi0+UmVwbGFjZUlucHV0R2VuZXJhbENhdGFsb2coJVBhcmFtKTsKICAgIH0KCiAgICByZXR1cm4gJE5ld1ZhbHVlOwp9Cgo9aGVhZDIgX0ludmVydFJlcGxhY2VWYWx1ZSgpCgpyZXBsYWNlIGludGVybmFsIHZhbHVlcyB3aXRoIHVzZXIgdmFsdWVzLgoKICAgIG15ICROZXdWYWx1ZSA9ICRPcGVyYXRpb25PYmplY3QtPl9JbnZlcnRSZXBsYWNlVmFsdWUoCiAgICAgICAgVmFsdWUgICA9PiAkVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAjICRWYWx1ZSBjb3VsZCBiZSBhIHN0cmluZywgYSB0aW1lIHN0YW1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBuYW1lLCBvciBhIGludGVnZXIKICAgICAgICBJbnB1dCAgID0+ICRJbnB1dERlZmluaXRpb25IYXNoUmVmLCAgICAgICMgVGhlIGRlZmluaXRpb24gb2YgdGhlIGVsZW1lbnQgaW5wdXQgZXh0cmFjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgZnJvbSB0aGUgQ29uZmlndXJhdGlvbiBJdGVtIGRlZmluaXRpb24gZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgZm9yIGVhY2ggdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBmb3Igcm9vdCBrZXkgaXRlbXMKICAgICk7CgogICAgcmV0dXJuczoKCiAgICAkTmV3VmFsdWUgPSAkQU5ld1ZhbHVlCgo9Y3V0CgpzdWIgX0ludmVydFJlcGxhY2VWYWx1ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2V0IHRoZSBsaXN0IG9mIGlucHV0IHR5cGVzIHRoYXQgbmVlZHMgdG8gYmUgcmVwbGFjZWQKICAgIG15ICVSZXBsYWNlSW5wdXRUeXBlcyA9ICgKICAgICAgICBEYXRlICAgICAgICAgICA9PiAxLAogICAgICAgIEdlbmVyYWxDYXRhbG9nID0+IDEsCiAgICApOwoKICAgIGlmICggISRSZXBsYWNlSW5wdXRUeXBlc3sgJFBhcmFte0lucHV0fS0+e1R5cGV9IH0gKSB7CiAgICAgICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07CiAgICB9CgogICAgbXkgJE5ld1ZhbHVlOwoKICAgIGlmICggJFBhcmFte0lucHV0fS0+e1R5cGV9IGVxICdEYXRlJyApIHsKCiAgICAgICAgIyBydW4gRGF0ZSByZXBsYWNlCiAgICAgICAgJE5ld1ZhbHVlID0gJFNlbGYtPkludmVydFJlcGxhY2VJbnB1dERhdGUoJVBhcmFtKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICMgcnVuIEdlbmVyYWwgQ2F0YWxvZyByZXBsYWNlCiAgICAgICAgJE5ld1ZhbHVlID0gJFNlbGYtPkludmVydFJlcGxhY2VJbnB1dEdlbmVyYWxDYXRhbG9nKCVQYXJhbSk7CiAgICB9CgogICAgcmV0dXJuICROZXdWYWx1ZTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtQ3JlYXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpNaWdyYXRpb25zOjpPVFJTNjo6U3lzQ29uZmlnKQoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb21tb24KICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb21tb24KKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29uZmlnSXRlbUNyZWF0ZSAtIEdlbmVyaWNJbnRlcmZhY2UgQ29uZmlnSXRlbSBDb25maWdJdGVtQ3JlYXRlIE9wZXJhdGlvbiBiYWNrZW5kCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICRTZWxmLT57T3BlcmF0aW9uTmFtZX0gPSAnQ29uZmlnSXRlbUNyZWF0ZSc7CgogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW1DcmVhdGUnKTsKCiAgICAkU2VsZi0+e0NvbmZpZ30tPntEZWZhdWx0VmFsdWV9ID0gJ05vdCBEZWZpbmVkJzsKCiAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKCiAgICAjIGdldCBhIGxpc3Qgb2YgYWxsIGNvbmZpZyBpdGVtIGNsYXNzZXMKICAgICRTZWxmLT57Q2xhc3NMaXN0fSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRTZWxmLT57Q2xhc3NMaXN0fSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0RlYnVnZ2VyT2JqZWN0fS0+RXJyb3IoCiAgICAgICAgICAgIFN1bW1hcnkgPT4gJ0Vycm9yIHdoZW4gdHJ5aW5nIHRvIGdldCBjbGFzcyBsaXN0aW5nIG9mIElUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGEgbGlzdCBvZiBhbGwgaW5jaXN0YXRlcwogICAgJFNlbGYtPntJbmNpU3RhdGVMaXN0fSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntJbmNpU3RhdGVMaXN0fSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0RlYnVnZ2VyT2JqZWN0fS0+RXJyb3IoCiAgICAgICAgICAgIFN1bW1hcnkgPT4gJ0Vycm9yIHdoZW4gdHJ5aW5nIHRvIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0aW5nIG9mJwogICAgICAgICAgICAgICAgLiAnIElUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgYSBsaXN0IG9mIGFsbCBkZXBsc3RhdGVzCiAgICAkU2VsZi0+e0RlcGxTdGF0ZUxpc3R9ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRTZWxmLT57RGVwbFN0YXRlTGlzdH0gKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntEZWJ1Z2dlck9iamVjdH0tPkVycm9yKAogICAgICAgICAgICBTdW1tYXJ5ID0+ICdFcnJvciB3aGVuIHRyeWluZyB0byBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdGluZyBvZicKICAgICAgICAgICAgICAgIC4gJyBJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBhbHNvIHByb3ZpZGUgdGhlIGNsYXNzbGlzdCBpbiByZXZlcnNlZCBmb3JtIGZvciBlYXNpZXIgcmV2ZXJzZSBsb29rdXBzCiAgICBteSAlUmV2ZXJzZUNsYXNzTGlzdCA9IHJldmVyc2UgJXsgJFNlbGYtPntDbGFzc0xpc3R9IH07CiAgICAkU2VsZi0+e1JldmVyc2VDbGFzc0xpc3R9ID0gXCVSZXZlcnNlQ2xhc3NMaXN0OwoKICAgICMgYWxzbyBwcm92aWRlIHRoZSBpbmNpc3RhdGVsaXN0IGluIHJldmVyc2VkIGZvcm0gZm9yIGVhc2llciByZXZlcnNlIGxvb2t1cHMKICAgIG15ICVSZXZlcnNlSW5jaVN0YXRlTGlzdCA9IHJldmVyc2UgJXsgJFNlbGYtPntJbmNpU3RhdGVMaXN0fSB9OwogICAgJFNlbGYtPntSZXZlcnNlSW5jaVN0YXRlTGlzdH0gPSBcJVJldmVyc2VJbmNpU3RhdGVMaXN0OwoKICAgICMgYWxzbyBwcm92aWRlIHRoZSBkZXBsc3RhdGVsaXN0IGluIHJldmVyc2VkIGZvcm0gZm9yIGVhc2llciByZXZlcnNlIGxvb2t1cHMKICAgIG15ICVSZXZlcnNlRGVwbFN0YXRlTGlzdCA9IHJldmVyc2UgJXsgJFNlbGYtPntEZXBsU3RhdGVMaXN0fSB9OwogICAgJFNlbGYtPntSZXZlcnNlRGVwbFN0YXRlTGlzdH0gPSBcJVJldmVyc2VEZXBsU3RhdGVMaXN0OwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFJ1bigpCgpwZXJmb3JtIENvbmZpZ0l0ZW1DcmVhdGUgT3BlcmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBjcmVhdGVkIGNvbmZpZyBpdGVtIG51bWJlci4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBVc2VyTG9naW4gICAgICAgICA9PiAnc29tZSBhZ2VudCBsb2dpbicsICAgICAgICAjIFVzZXJMb2dpbiBvciBTZXNzaW9uSUQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHJlcXVpcmVkCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAnc29tZSBwYXNzd29yZCcsICAgICAgICAgICAgICAgICAgICMgaWYgVXNlckxvZ2luIGlzIHNlbnQgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGFzc3dvcmQgaXMgcmVxdWlyZWQKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgPT4gJzExMScsICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnQ29uZmlnIEl0ZW0gQ2xhc3MnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdUaGUgTmFtZScsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgPT4gJ2RlcGxveW1lbnQgc3RhdGUnLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgID0+ICdpbmNpZGVudCBzdGF0ZScsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgICAgPT4gJEFycmF5SGFzaFJlZiwgICAgICAgICAgICAgICMgaXQgZGVwZW5kcyBvbiB0aGUgQ29uZmlndXJhdGlvbiBJdGVtIGNsYXNzIGFuZCBkZWZpbml0aW9uCgogICAgICAgICAgICAgICAgQXR0YWNobWVudCA9PiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnY29udGVudCcgICAgICAgICAgICAjIGJhc2U2NCBlbmNvZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdzb21lIGNvbnRlbnQgdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ3NvbWUgZmluZSBuYW1lJwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIyAuLi4KICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAjb3IKICAgICAgICAgICAgICAgICNBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgICMgICAgQ29udGVudCAgICAgPT4gJ2NvbnRlbnQnCiAgICAgICAgICAgICAgICAjICAgIENvbnRlbnRUeXBlID0+ICdzb21lIGNvbnRlbnQgdHlwZScKICAgICAgICAgICAgICAgICMgICAgRmlsZW5hbWUgICAgPT4gJ3NvbWUgZmluZSBuYW1lJwogICAgICAgICAgICAgICAgI30sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlICAgID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGRhdGEgcGF5bG9hZCBhZnRlciBPcGVyYXRpb24KICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywgICAgICAgICAgICAgICAgICAgICMgQ29uZmlndXJhdGlvbiBJdGVtICBJRCBudW1iZXIgaW4gT1RSUzo6SVRTTSAoU2VydmljZSBkZXNrIHN5c3RlbSkKICAgICAgICAgICAgTnVtYmVyICAgICAgID0+IDIzMjQ0NTQzMjMzMjIgICAgICAgICAgICMgQ29uZmlndXJhdGlvbiBJdGVtICBOdW1iZXIgaW4gT1RSUzo6SVRTTSAoU2VydmljZSBkZXNrIHN5c3RlbSkKICAgICAgICAgICAgRXJyb3IgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdWxkIG5vdCByZXR1cm4gZXJyb3JzCiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDb25maWdJdGVtQ3JlYXRlLkVycm9yQ29kZScKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0Vycm9yIERlc2NyaXB0aW9uJwogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+SW5pdCgKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CgogICAgICAgICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdXZWJzZXJ2aWNlLkludmFsaWRDb25maWd1cmF0aW9uJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICgKICAgICAgICAhJFBhcmFte0RhdGF9LT57VXNlckxvZ2lufQogICAgICAgICYmICEkUGFyYW17RGF0YX0tPntTZXNzaW9uSUR9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5NaXNzaW5nUGFyYW1ldGVyIiwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogVXNlckxvZ2luIG9yIFNlc3Npb25JRCBpcyByZXF1aXJlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGF0YX0tPntVc2VyTG9naW59ICkgewoKICAgICAgICBpZiAoICEkUGFyYW17RGF0YX0tPntQYXNzd29yZH0gKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5NaXNzaW5nUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogUGFzc3dvcmQgb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYXV0aGVudGljYXRlIHVzZXIKICAgIG15ICggJFVzZXJJRCwgJFVzZXJUeXBlICkgPSAkU2VsZi0+QXV0aCglUGFyYW0pOwoKICAgIGlmICggISRVc2VySUQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkF1dGhGYWlsIiwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBVc2VyIGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBoYXNoZXMKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtKSkgewogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0tPnskTmVlZGVkfSApICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9Lk1pc3NpbmdQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06ICROZWVkZWQgcGFyYW1ldGVyIGlzIG1pc3Npbmcgb3Igbm90IHZhbGlkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgaXNvbGF0ZSBjb25maWcgaXRlbSBwYXJhbWV0ZXIKICAgIG15ICRDb25maWdJdGVtID0gJFBhcmFte0RhdGF9LT57Q29uZmlnSXRlbX07CgogICAgIyByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyRDb25maWdJdGVtfSApIHsKICAgICAgICBpZiAoIHJlZiAkQXR0cmlidXRlIG5lICdIQVNIJyAmJiByZWYgJEF0dHJpYnV0ZSBuZSAnQVJSQVknICkgewoKICAgICAgICAgICAgI3JlbW92ZSBsZWFkaW5nIHNwYWNlcwogICAgICAgICAgICAkQ29uZmlnSXRlbS0+eyRBdHRyaWJ1dGV9ID1+IHN7XEFccyt9e307CgogICAgICAgICAgICAjcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcwogICAgICAgICAgICAkQ29uZmlnSXRlbS0+eyRBdHRyaWJ1dGV9ID1+IHN7XHMrXHp9e307CiAgICAgICAgfQogICAgfQoKICAgICMgQ0lYTUxEYXRhIGlzIG5vdCBtYW5kYXRvcnksIGJ1dCBpdCBtdXN0IGJlIEhhc2hSZWYgaWYgZXhpc3RzLgogICAgaWYgKCBkZWZpbmVkICRDb25maWdJdGVtLT57Q0lYTUxEYXRhfSApIHsKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJENvbmZpZ0l0ZW0tPntDSVhNTERhdGF9ICkgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YSBpcyBtaXNzaW5nIG9yIGludmFsaWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBmb3IgQ0lYTUxEYXRhIChtdXN0IGJlIEhhc2hSZWYpLgogICAgICAgICRTZWxmLT5fQ2xlYW5YTUxEYXRhKCBYTUxEYXRhID0+ICRDb25maWdJdGVtLT57Q0lYTUxEYXRhfSApOwogICAgfQoKICAgICMgY2hlY2sgQ29uZmlnSXRlbSBhdHRyaWJ1dGUgdmFsdWVzCiAgICBteSAkQ29uZmlnSXRlbUNoZWNrID0gJFNlbGYtPl9DaGVja0NvbmZpZ0l0ZW0oIENvbmZpZ0l0ZW0gPT4gJENvbmZpZ0l0ZW0gKTsKCiAgICBpZiAoICEkQ29uZmlnSXRlbUNoZWNrLT57U3VjY2Vzc30gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvciggJXskQ29uZmlnSXRlbUNoZWNrfSApOwogICAgfQoKICAgICMgY2hlY2sgY3JlYXRlIHBlcm1pc3Npb25zCiAgICBteSAkUGVybWlzc2lvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5QZXJtaXNzaW9uKAogICAgICAgIFNjb3BlICAgPT4gJ0NsYXNzJywKICAgICAgICBDbGFzc0lEID0+ICRTZWxmLT57UmV2ZXJzZUNsYXNzTGlzdH0tPnsgJENvbmZpZ0l0ZW0tPntDbGFzc30gfSwKICAgICAgICBVc2VySUQgID0+ICRVc2VySUQsCiAgICAgICAgVHlwZSAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICk7CgogICAgaWYgKCAhJFBlcm1pc3Npb24gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkFjY2Vzc0RlbmllZCIsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ2FuIG5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBpdGVtcyEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJEF0dGFjaG1lbnQ7CiAgICBteSBAQXR0YWNobWVudExpc3Q7CgogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtEYXRhfS0+e0NvbmZpZ0l0ZW19LT57QXR0YWNobWVudH0gKSB7CgogICAgICAgICMgaXNvbGF0ZSBBdHRhY2htZW50IHBhcmFtZXRlcgogICAgICAgICRBdHRhY2htZW50ID0gZGVsZXRlICRQYXJhbXtEYXRhfS0+e0NvbmZpZ0l0ZW19LT57QXR0YWNobWVudH07CgogICAgICAgICMgaG9tb2xvZ2F0ZSBpbXB1dCB0byBhcnJheQogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJEF0dGFjaG1lbnQpICkgewogICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50TGlzdCwgJEF0dGFjaG1lbnQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggSXNBcnJheVJlZldpdGhEYXRhKCRBdHRhY2htZW50KSApIHsKICAgICAgICAgICAgQEF0dGFjaG1lbnRMaXN0ID0gQHskQXR0YWNobWVudH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkF0dGFjaG1lbnQgcGFyYW1ldGVyIGlzIGludmFsaWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgQXR0YWNobWVudCBpbnRlcm5hbCBzdHJ1Y3R1cmUKICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnRJdGVtIChAQXR0YWNobWVudExpc3QpIHsKICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJEF0dGFjaG1lbnRJdGVtKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+QXR0YWNobWVudCBwYXJhbWV0ZXIgaXMgaW52YWxpZCEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7JEF0dGFjaG1lbnRJdGVtfSApIHsKICAgICAgICAgICAgICAgIGlmICggcmVmICRBdHRyaWJ1dGUgbmUgJ0hBU0gnICYmIHJlZiAkQXR0cmlidXRlIG5lICdBUlJBWScgKSB7CgogICAgICAgICAgICAgICAgICAgICNyZW1vdmUgbGVhZGluZyBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudEl0ZW0tPnskQXR0cmlidXRlfSA9fiBze1xBXHMrfXt9OwoKICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50SXRlbS0+eyRBdHRyaWJ1dGV9ID1+IHN7XHMrXHp9e307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgQXR0YWNobWVudCBhdHRyaWJ1dGUgdmFsdWVzCiAgICAgICAgICAgIG15ICRBdHRhY2htZW50Q2hlY2sgPSAkU2VsZi0+X0NoZWNrQXR0YWNobWVudCggQXR0YWNobWVudCA9PiAkQXR0YWNobWVudEl0ZW0gKTsKCiAgICAgICAgICAgIGlmICggISRBdHRhY2htZW50Q2hlY2stPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoICV7JEF0dGFjaG1lbnRDaGVja30gKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFNlbGYtPl9Db25maWdJdGVtQ3JlYXRlKAogICAgICAgIENvbmZpZ0l0ZW0gICAgID0+ICRDb25maWdJdGVtLAogICAgICAgIEF0dGFjaG1lbnRMaXN0ID0+IFxAQXR0YWNobWVudExpc3QsCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFVzZXJJRCwKICAgICk7Cn0KCj1oZWFkMSBJTlRFUk5BTCBJTlRFUkZBQ0UKCj1oZWFkMiBfQ2xlYW5YTUxEYXRhKCkKCnJlbW92ZWQgdHJhaWxpbmcgYW5kIGxlYWRpbmcgd2hpdGUgc3BhY2VzIGluIHRoZSBYTUxEYXRhLgoKICAgIG15ICRYTUxEYXRhQ2xlYW4gPSAkT3BlcmF0aW9uT2JqZWN0LT5fQ2xlYW5YTUxEYXRhKAogICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb25BcnJheVJlZiwgICAgICAgICAgIyBDb25maWcgSXRlbSBEZWZpbml0aW9uIG90IGp1c3QgcGFydCBvZiBpdAogICAgICAgIFhNTERhdGEgICAgPT4gJFhNTERhdGFIYXNoUmVmLAogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICRYTUxEYXRhQ2xlYW4gPSB7CiAgICAgICAgU3VjY2VzcyA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGV2ZXJ5dGhpbmcgaXMgT0sKICAgIH0KCiAgICAkWE1MRGF0YUNsZWFuID0gewogICAgICAgIEVycm9yQ29kZSAgICA9PiAnRnVuY3Rpb24uRXJyb3InLCAgICAgICAgICAgIyBpZiBlcnJvcgogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgZGVzY3JpcHRpb24nLAogICAgfQoKPWN1dAoKc3ViIF9DbGVhblhNTERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkWE1MRGF0YSA9ICRQYXJhbXtYTUxEYXRhfTsKCiAgICBLRVk6CiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRYTUxEYXRhfSApIHsKICAgICAgICBpZiAoIHJlZiAkWE1MRGF0YS0+eyRLZXl9IGVxICdBUlJBWScgKSB7CiAgICAgICAgICAgIEVMRU1FTlQ6CiAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAoIEB7ICRYTUxEYXRhLT57JEtleX0gfSApIHsKICAgICAgICAgICAgICAgIGlmICggcmVmICRFbGVtZW50IGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAgICAgICAgICAgICAkU2VsZi0+X0NsZWFuWE1MRGF0YSggWE1MRGF0YSA9PiAkRWxlbWVudCApOwogICAgICAgICAgICAgICAgICAgIG5leHQgRUxFTUVOVDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggcmVmICRFbGVtZW50IGVxICcnICkgewoKICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIGxlYWRpbmcgc3BhY2VzCiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQgPX4gc3tcQVxzK317fTsKCiAgICAgICAgICAgICAgICAgICAgI3JlbW92ZSB0cmFpbGluZyBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudCA9fiBze1xzK1x6fXt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggcmVmICRYTUxEYXRhLT57JEtleX0gZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAgICAgJFNlbGYtPl9DbGVhblhNTERhdGEoIFhNTERhdGEgPT4gJFhNTERhdGEtPnskS2V5fSApOwogICAgICAgICAgICBuZXh0IEtFWTsKCiAgICAgICAgfQogICAgICAgIGVsc2lmICggcmVmICRYTUxEYXRhLT57JEtleX0gZXEgJycgKSB7CgogICAgICAgICAgICAjcmVtb3ZlIGxlYWRpbmcgc3BhY2VzCiAgICAgICAgICAgICRYTUxEYXRhLT57JEtleX0gPX4gc3tcQVxzK317fTsKCiAgICAgICAgICAgICNyZW1vdmUgdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgICAgICRYTUxEYXRhLT57JEtleX0gPX4gc3tccytcen17fTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfQ2hlY2tDb25maWdJdGVtKCkKCmNoZWNrcyBpZiB0aGUgZ2l2ZW4gY29uZmlnIGl0ZW0gcGFyYW1ldGVycyBhcmUgdmFsaWQuCgogICAgbXkgJENvbmZpZ0l0ZW1DaGVjayA9ICRPcGVyYXRpb25PYmplY3QtPl9DaGVja0NvbmZpZ0l0ZW0oCiAgICAgICAgQ29uZmlnSXRlbSA9PiAkQ29uZmlnSXRlbSwgICAgICAgICAgICAgICAgICAjIGFsbCBjb25maWcgaXRlbSBwYXJhbWV0ZXJzCiAgICApOwoKICAgIHJldHVybnM6CgogICAgJENvbmZpZ0l0ZW1DaGVjayA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgZXZlcnl0aGluZyBpcyBPSwogICAgfQoKICAgICRDb25maWdJdGVtQ2hlY2sgPSB7CiAgICAgICAgRXJyb3JDb2RlICAgID0+ICdGdW5jdGlvbi5FcnJvcicsICAgICAgICAgICAjIGlmIGVycm9yCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdFcnJvciBkZXNjcmlwdGlvbicsCiAgICB9Cgo9Y3V0CgpzdWIgX0NoZWNrQ29uZmlnSXRlbSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdJdGVtID0gJFBhcmFte0NvbmZpZ0l0ZW19OwoKICAgICMgY2hlY2sgY29uZmlnIGl0ZW0gaW50ZXJuYWxseQogICAgZm9yIG15ICROZWVkZWQgKHF3KENsYXNzIE5hbWUgRGVwbFN0YXRlIEluY2lTdGF0ZSkpIHsKICAgICAgICBpZiAoICEkQ29uZmlnSXRlbS0+eyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9Lk1pc3NpbmdQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDb25maWdJdGVtLT4kTmVlZGVkIHBhcmFtZXRlciBpcyBtaXNzaW5nISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgQ29uZmlnSXRlbS0+Q2xhc3MKICAgIGlmICggISRTZWxmLT5WYWxpZGF0ZUNsYXNzKCAleyRDb25maWdJdGVtfSApICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIEVycm9yQ29kZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5JbnZhbGlkUGFyYW1ldGVyIiwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q2xhc3MgcGFyYW1ldGVyIGlzIGludmFsaWQhIiwKICAgICAgICB9OwogICAgfQoKICAgICMgY2hlY2sgQ29uZmlnSXRlbS0+RGVwbFN0YXRlCiAgICBpZiAoICEkU2VsZi0+VmFsaWRhdGVEZXBsU3RhdGUoICV7JENvbmZpZ0l0ZW19ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDb25maWdJdGVtLT5EZXBsU3RhdGUgcGFyYW1ldGVyIGlzIGludmFsaWQhIiwKICAgICAgICB9OwogICAgfQoKICAgICMgY2hlY2sgQ29uZmlnSXRlbS0+RGVwbFN0YXRlCiAgICBpZiAoICEkU2VsZi0+VmFsaWRhdGVJbmNpU3RhdGUoICV7JENvbmZpZ0l0ZW19ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDb25maWdJdGVtLT5JbmNpU3RhdGUgcGFyYW1ldGVyIGlzIGludmFsaWQhIiwKICAgICAgICB9OwogICAgfQoKICAgICMgZ2V0IGxhc3QgY29uZmlnIGl0ZW0gZGVmaW50aW9uCiAgICBteSAkRGVmaW5pdGlvbkRhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+RGVmaW5pdGlvbkdldCgKICAgICAgICBDbGFzc0lEID0+ICRTZWxmLT57UmV2ZXJzZUNsYXNzTGlzdH0tPnsgJENvbmZpZ0l0ZW0tPntDbGFzc30gfSwKICAgICk7CgogICAgbXkgJFhNTERhdGFDaGVja1Jlc3VsdCA9ICRTZWxmLT5DaGVja1hNTERhdGEoCiAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmaW5pdGlvbkRhdGEtPntEZWZpbml0aW9uUmVmfSwKICAgICAgICBYTUxEYXRhICAgID0+ICRDb25maWdJdGVtLT57Q0lYTUxEYXRhfSwKICAgICk7CgogICAgaWYgKCAhJFhNTERhdGFDaGVja1Jlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgIHJldHVybiAkWE1MRGF0YUNoZWNrUmVzdWx0OwogICAgfQoKICAgICMgaWYgZXZlcnl0aGluZyBpcyBPSyB0aGVuIHJldHVybiBTdWNjZXNzCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH07Cn0KCj1oZWFkMiBfQ2hlY2tBdHRhY2htZW50KCkKCmNoZWNrcyBpZiB0aGUgZ2l2ZW4gYXR0YWNobWVudCBwYXJhbWV0ZXIgaXMgdmFsaWQuCgogICAgbXkgJEF0dGFjaG1lbnRDaGVjayA9ICRPcGVyYXRpb25PYmplY3QtPl9DaGVja0F0dGFjaG1lbnQoCiAgICAgICAgQXR0YWNobWVudCA9PiAkQXR0YWNobWVudCwgICAgICAgICAgICAgICAgICAjIGFsbCBhdHRhY2htZW50IHBhcmFtZXRlcnMKICAgICk7CgogICAgcmV0dXJuczoKCiAgICAkQXR0YWNobWVudENoZWNrID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBldmVyZXRoaW5nIGlzIE9LCiAgICB9CgogICAgJEF0dGFjaG1lbnRDaGVjayA9IHsKICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0Z1bmN0aW9uLkVycm9yJywgICAgICAgICAgICMgaWYgZXJyb3IKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0Vycm9yIGRlc2NyaXB0aW9uJywKICAgIH0KCj1jdXQKCnN1YiBfQ2hlY2tBdHRhY2htZW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEF0dGFjaG1lbnQgPSAkUGFyYW17QXR0YWNobWVudH07CgogICAgIyBjaGVjayBhdHRhY2htZW50IGl0ZW0gaW50ZXJuYWxseQogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbnRlbnQgQ29udGVudFR5cGUgRmlsZW5hbWUpKSB7CiAgICAgICAgaWYgKCAhJEF0dGFjaG1lbnQtPnskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5NaXNzaW5nUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBBdHRhY2htZW50LT4kTmVlZGVkIHBhcmFtZXRlciBpcyBtaXNzaW5nISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgQXJ0aWNsZS0+Q29udGVudFR5cGUKICAgIGlmICggJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0gKSB7CgogICAgICAgICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9ID0gbGMgJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX07CgogICAgICAgICMgY2hlY2sgQ2hhcnNldCBwYXJ0CiAgICAgICAgbXkgJENoYXJzZXQgPSAnJzsKICAgICAgICBpZiAoICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9ID1+IC9jaGFyc2V0PS9pICkgewogICAgICAgICAgICAkQ2hhcnNldCA9ICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9OwogICAgICAgICAgICAkQ2hhcnNldCA9fiBzLy4rP2NoYXJzZXQ9KCJ8J3wpKFx3KykvJDIvZ2k7CiAgICAgICAgICAgICRDaGFyc2V0ID1+IHMvInwnLy9nOwogICAgICAgICAgICAkQ2hhcnNldCA9fiBzLyguKz8pOy4qLyQxL2c7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRDaGFyc2V0ICYmICEkU2VsZi0+VmFsaWRhdGVDaGFyc2V0KCBDaGFyc2V0ID0+ICRDaGFyc2V0ICkgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5JbnZhbGlkUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQXR0YWNobWVudC0+Q29udGVudFR5cGUgaXMgaW52YWxpZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBNaW1lVHlwZSBwYXJ0CiAgICAgICAgbXkgJE1pbWVUeXBlID0gJyc7CiAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfSA9fiAvXihcdytcL1x3KykvaSApIHsKICAgICAgICAgICAgJE1pbWVUeXBlID0gJDE7CiAgICAgICAgICAgICRNaW1lVHlwZSA9fiBzLyJ8Jy8vZzsKICAgICAgICB9CgogICAgICAgIGlmICggISRTZWxmLT5WYWxpZGF0ZU1pbWVUeXBlKCBNaW1lVHlwZSA9PiAkTWltZVR5cGUgKSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5JbnZhbGlkUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQXR0YWNobWVudC0+Q29udGVudFR5cGUgaXMgaW52YWxpZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGlmIGV2ZXJ5dGhpbmcgaXMgT0sgdGhlbiByZXR1cm4gU3VjY2VzcwogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgX0NvbmZpZ0l0ZW1DcmVhdGUoKQoKY3JlYXRlcyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGF0dGFjaG1lbnRzIGlmIHNwZWNpZmllZC4KCiAgICBteSAkUmVzcG9uc2UgPSAkT3BlcmF0aW9uT2JqZWN0LT5fQ29uZmlnSXRlbUNyZWF0ZSgKICAgICAgICBDb25maWdJdGVtICAgICA9PiAkQ29uZmlnSXRlbSwgICAgICAgICAgICAgIyBhbGwgY29uZmlndXJhdGlvbiBpdGVtIHBhcmFtZXRlcnMKICAgICAgICBBdHRhY2htZW50TGlzdCA9PiAkQXR0YWNobWVudCwgICAgICAgICAgICAgIyBhIGxpc3Qgb2YgYWxsIGF0dGFjaG1lbnRzCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gMTIzLAogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICRSZXNwb25zZSA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgZXZlcmV0aGluZyBpcyBPSwogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLAogICAgICAgICAgICBDb25maWdJdGVtTnVtYmVyID0+ICdDTjEyMycsCiAgICAgICAgfQogICAgfQoKICAgICRSZXNwb25zZSA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB1bmV4cGVjdGVkIGVycm9yCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkUGFyYW17RXJyb3JDb2RlfTogJFBhcmFte0Vycm9yTWVzc2FnZX0iLAogICAgfQoKPWN1dAoKc3ViIF9Db25maWdJdGVtQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ0l0ZW0gICAgID0gJFBhcmFte0NvbmZpZ0l0ZW19OwogICAgbXkgJEF0dGFjaG1lbnRMaXN0ID0gJFBhcmFte0F0dGFjaG1lbnRMaXN0fTsKCiAgICBteSAkRGVwbFN0YXRlSUQgPSAkU2VsZi0+e1JldmVyc2VEZXBsU3RhdGVMaXN0fS0+eyAkQ29uZmlnSXRlbS0+e0RlcGxTdGF0ZX0gfTsKICAgIG15ICRJbmNpU3RhdGVJRCA9ICRTZWxmLT57UmV2ZXJzZUluY2lTdGF0ZUxpc3R9LT57ICRDb25maWdJdGVtLT57SW5jaVN0YXRlfSB9OwoKICAgIG15ICRSYXdYTUxEYXRhID0gJENvbmZpZ0l0ZW0tPntDSVhNTERhdGF9OwoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgIyBnZXQgbGFzdCBjb25maWcgaXRlbSBkZWZpbnRpb24KICAgIG15ICREZWZpbml0aW9uRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uR2V0KAogICAgICAgIENsYXNzSUQgPT4gJFNlbGYtPntSZXZlcnNlQ2xhc3NMaXN0fS0+eyAkQ29uZmlnSXRlbS0+e0NsYXNzfSB9LAogICAgKTsKCiAgICAjIHJlcGxhY2UgZGF0ZSwgZGF0ZSB0aW1lLCBjdXN0b21lciwgY29tcGFueSBhbmQgZ2VuZXJhbCBjYXRhbG9nIHZhbHVlcwogICAgbXkgJFJlcGxhY2VkWE1MRGF0YSA9ICRTZWxmLT5SZXBsYWNlWE1MRGF0YSgKICAgICAgICBYTUxEYXRhICAgID0+ICRSYXdYTUxEYXRhLAogICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb25EYXRhLT57RGVmaW5pdGlvblJlZn0sCiAgICApOwoKICAgICMgY3JlYXRlIGFuIFhNTERhdGEgc3RydWN0dXJlIHN1aXRhYmxlIGZvciBWZXJzaW9uQWRkCiAgICBteSAkWE1MRGF0YSA9ICRTZWxmLT5Gb3JtYXRYTUxEYXRhKAogICAgICAgIFhNTERhdGEgPT4gJFJlcGxhY2VkWE1MRGF0YSwKICAgICk7CgogICAgIyBjcmVhdGUgbmV3IGNvbmZpZyBpdGVtCiAgICBteSAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbS0+e051bWJlcn0sCiAgICAgICAgQ2xhc3NJRCA9PiAkU2VsZi0+e1JldmVyc2VDbGFzc0xpc3R9LT57ICRDb25maWdJdGVtLT57Q2xhc3N9IH0sCiAgICAgICAgVXNlcklEICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIE5hbWUgICAgICAgICA9PiAkQ29uZmlnSXRlbS0+e05hbWV9LAogICAgICAgIERlZmluaXRpb25JRCA9PiAkRGVmaW5pdGlvbkRhdGEtPntEZWZpbml0aW9uSUR9LAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlSUQsCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVJRCwKICAgICAgICBYTUxEYXRhICAgICAgPT4gJFhNTERhdGEsCiAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICEkQ29uZmlnSXRlbUlEICYmICEkVmVyc2lvbklEICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvbmZpZ3VyYXRpb24gSXRlbSBjb3VsZCBub3QgYmUgY3JlYXRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIHN5c3RlbScKICAgICAgICAgICAgICAgIC4gJ2FkbWluaXN0cmF0b3InLAogICAgICAgIH07CiAgICB9CgogICAgIyBzZXQgYXR0YWNobWVudHMKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCRBdHRhY2htZW50TGlzdCkgKSB7CgogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoIEB7JEF0dGFjaG1lbnRMaXN0fSApIHsKICAgICAgICAgICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5DcmVhdGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgQXR0YWNobWVudCAgID0+ICRBdHRhY2htZW50LAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0KICAgICAgICAgICAgICAgICAgICAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSB8fCAiQXR0YWNobWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCwgcGxlYXNlIGNvbnRhY3QiCiAgICAgICAgICAgICAgICAgICAgLiAiIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciI7CgogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJEVycm9yTWVzc2FnZSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgQ29uZmlnSXRlbSBkYXRhCiAgICBteSAkQ29uZmlnSXRlbURhdGEgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJENvbmZpZ0l0ZW1EYXRhKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdDb3VsZCBub3QgZ2V0IG5ldyBjb25maWd1cmF0aW9uIGl0ZW0gaW5mb3JtYXRpb24sIHBsZWFzZSBjb250YWN0IHRoZScKICAgICAgICAgICAgICAgIC4gJyBzeXN0ZW0gYWRtaW5pc3RyYXRvcicsCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIE51bWJlciAgICAgICA9PiAkQ29uZmlnSXRlbURhdGEtPntOdW1iZXJ9LAogICAgICAgIH0sCiAgICB9Owp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtRGVsZXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1JTUU6OkJhc2U2NDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb21tb24KICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb21tb24KKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29uZmlnSXRlbURlbGV0ZSAtIEdlbmVyaWNJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBJdGVtIERlbGV0ZSBPcGVyYXRpb24gYmFja2VuZAoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiR290IG5vICROZWVkZWQhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgJFNlbGYtPntPcGVyYXRpb25OYW1lfSA9ICdDb25maWdJdGVtRGVsZXRlJzsKCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0dlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbURlbGV0ZScpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFJ1bigpCgpwZXJmb3JtIENvbmZpZ0l0ZW1EZWxldGUgT3BlcmF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGFibGUgdG8gcmV0dXJuCm9uZSBvciBtb3JlIENvbmZpZ0l0ZW0gZW50cmllcyBpbiBvbmUgY2FsbC4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBVc2VyTG9naW4gICAgICAgICA9PiAnc29tZSBhZ2VudCBsb2dpbicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlckxvZ2luIG9yIEN1c3RvbWVyVXNlckxvZ2luIG9yIFNlc3Npb25JRCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICByZXF1aXJlZAogICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnc29tZSBjdXN0b21lciBsb2dpbicsCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICAgICAgICAgID0+ICdzb21lIHBhc3N3b3JkJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gb3IgY3VzdG9tZXJVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBhc3N3b3JkIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgID0+ICczMiwzMycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXF1aXJlZCwgY291bGQgYmUgY29tYSBzZXBhcmF0ZWQgSURzIG9yIGFuIEFycmF5CiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlICAgID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGRhdGEgcGF5bG9hZCBhZnRlciBPcGVyYXRpb24KICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+IFsxMjMsIDQ1Nl0sICAgICAgICAgIyBDb25maWd1cmF0aW9uIEl0ZW0gSURzIG51bWJlciBpbiBPVFJTOjpJVFNNIChTZXJ2aWNlIGRlc2sgc3lzdGVtKQogICAgICAgICAgICBFcnJvciA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG91bGQgbm90IHJldHVybiBlcnJvcnMKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0NvbmZpZ0l0ZW1EZWxldGUuRXJyb3JDb2RlJwogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgRGVzY3JpcHRpb24nCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnV2Vic2VydmljZS5JbnZhbGlkQ29uZmlndXJhdGlvbicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICggJFVzZXJJRCwgJFVzZXJUeXBlICkgPSAkU2VsZi0+QXV0aCgKICAgICAgICAlUGFyYW0KICAgICk7CgogICAgaWYgKCAhJFVzZXJJRCApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJyRTZWxmLT57T3BlcmF0aW9uTmFtZX0uQXV0aEZhaWwnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IEF1dGhvcml6YXRpb24gZmFpbGluZyEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9LT57JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06ICROZWVkZWQgcGFyYW1ldGVyIGlzIG1pc3NpbmchIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBteSAkRXJyb3JNZXNzYWdlID0gJyc7CgogICAgIyBhbGwgbmVlZGVkIHZhcmlhYmxlcwogICAgbXkgQENvbmZpZ0l0ZW1JRHM7CiAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRQYXJhbXtEYXRhfS0+e0NvbmZpZ0l0ZW1JRH0gKSApIHsKICAgICAgICBAQ29uZmlnSXRlbUlEcyA9IHNwbGl0IC9ccyosXHMqLywgJFBhcmFte0RhdGF9LT57Q29uZmlnSXRlbUlEfTsKICAgIH0KICAgIGVsc2lmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0tPntDb25maWdJdGVtSUR9ICkgKSB7CiAgICAgICAgQENvbmZpZ0l0ZW1JRHMgPSBAeyAkUGFyYW17RGF0YX0tPntDb25maWdJdGVtSUR9IH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uV3JvbmdTdHJ1Y3R1cmUiLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IFN0cnVjdHVyZSBmb3IgQ29uZmlnSXRlbUlEIGlzIG5vdCBjb3JyZWN0ISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgIG15IEBEZWxldGVkQ29uZmlnSXRlbUlEczsKCiAgICAjIHN0YXJ0IENvbmZpZ0l0ZW0gbG9vcAogICAgQ09ORklHSVRFTToKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEIChAQ29uZmlnSXRlbUlEcykgewoKICAgICAgICAjIGNoZWNrIGNyZWF0ZSBwZXJtaXNzaW9ucwogICAgICAgIG15ICRQZXJtaXNzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgICAgIFNjb3BlICA9PiAnSXRlbScsCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVHlwZSAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgICk7CgogICAgICAgIGlmICggISRQZXJtaXNzaW9uICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkFjY2Vzc0RlbmllZCIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENhbiBub3QgZGVsZXRlIGNvbmZpZ3VyYXRpb24gaXRlbSEiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0KICAgICAgICBteSAkRGVsZXRlU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJERlbGV0ZVN1Y2Nlc3MgKSB7CgogICAgICAgICAgICAkRXJyb3JNZXNzYWdlID0gJ0NvdWxkIG5vdCBkZWxldGUgQ29uZmlnSXRlbSBJRCAnIC4gJENvbmZpZ0l0ZW1JRAogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtRGVsZXRlOjpSdW4oKSc7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICckU2VsZi0+e09wZXJhdGlvbk5hbWV9LkRlbGV0ZUVycm9yJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogJEVycm9yTWVzc2FnZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBEZWxldGVkQ29uZmlnSXRlbUlEcywgJENvbmZpZ0l0ZW1JRDsKCiAgICB9ICAgICMgZmluaXNoIENvbmZpZ0l0ZW0gbG9vcAoKICAgIGlmICggIUlzQXJyYXlSZWZXaXRoRGF0YSggXEBEZWxldGVkQ29uZmlnSXRlbUlEcyApICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvdWxkIG5vdCBkZWxldGUgQ29uZmlnSXRlbXMhJywKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gXEBEZWxldGVkQ29uZmlnSXRlbUlEcywKICAgICAgICB9LAogICAgfTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtR2V0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpNaWdyYXRpb25zOjpPVFJTNjo6U3lzQ29uZmlnKQoKdXNlIE1JTUU6OkJhc2U2NDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb21tb24KICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb21tb24KKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29uZmlnSXRlbUdldCAtIEdlbmVyaWNJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBJdGVtIEdldCBPcGVyYXRpb24gYmFja2VuZAoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KCBEZWJ1Z2dlck9iamVjdCBXZWJzZXJ2aWNlSUQgKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICAkU2VsZi0+e09wZXJhdGlvbk5hbWV9ID0gJ0NvbmZpZ0l0ZW1HZXQnOwoKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtR2V0Jyk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKCnBlcmZvcm0gQ29uZmlnSXRlbUdldCBPcGVyYXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgYWJsZSB0byByZXR1cm4Kb25lIG9yIG1vcmUgQ29uZmlnSXRlbSBlbnRyaWVzIGluIG9uZSBjYWxsLgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgICAgID0+ICdzb21lIGFnZW50IGxvZ2luJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHJlcXVpcmVkCiAgICAgICAgICAgIFBhc3N3b3JkICAgICAgICAgID0+ICdzb21lIHBhc3N3b3JkJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gaXMgc2VudCB0aGVuIFBhc3N3b3JkIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgID0+ICczMiwzMycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXF1aXJlZCwgY291bGQgYmUgY29tYSBzZXBhcmF0ZWQgSURzIG9yIGFuIEFycmF5CiAgICAgICAgICAgIEF0dGFjaG1lbnRzICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCwgMSBhcyBkZWZhdWx0LiBJZiBpdCdzIHNldCB3aXRoIHRoZSB2YWx1ZSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXR0YWNobWVudHMgZm9yIGFydGljbGVzIHdpbGwgYmUgaW5jbHVkZWQgb24gQ29uZmlnSXRlbSBkYXRhCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2Ugb2YgYW4gZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IFsKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICAgID0+ICcyMDEwMTAyNzAwMDAwMScsCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgPT4gJ3NvbWUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgID0+ICdzb21lIGNsYXNzJywKICAgICAgICAgICAgICAgICAgICBWZXJzaW9uSUQgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIExhc3RWZXJzaW9uSUQgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgICAgPT4gJ3NvbWUgaW5jaWRlbnQgc3RhdGUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgICA9PiAnc29tZSBpbmNpZGVudCBzdGF0ZSB0eXBlJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgPT4gJ3NvbWUgZGVwbG95bWVudCBzdGF0ZScsCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlVHlwZSAgICAgID0+ICdzb21lIGRlcGxveW1lbnQgc3RhdGUgdHlwZScsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICAgID0+ICdzb21lIGluY2lkZW50IHN0YXRlJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlICAgPT4gJ3NvbWUgaW5jaWRlbnQgc3RhdGUgdHlwZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICAgID0+ICdzb21lIGRlcGxveW1lbnQgc3RhdGUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgICA9PiAnc29tZSBkZXBsb3ltZW50IHN0YXRlIHR5cGUnLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICA9PiAnMjAxMC0xMC0yNyAyMDoxNTowMCcKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIENJWE1MRGF0YSAgICAgICAgICA9PiAkWE1MRGF0YUhhc2hSZWYsCgogICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgICAgPT4gInh4eHgiLCAgICAgIyBhY3R1YWwgYXR0YWNobWVudCBjb250ZW50cywgYmFzZTY0IGVuY29uZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgPT4gImFwcGxpY2F0aW9uL3BkZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgICAgICAgPT4gIlN0ZEF0dGFjaG1lbnQtVGVzdDEucGRmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVzaXplICAgICAgICAgICA9PiAiNC42IEtCeXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlcyAgICAgICAgPT4gJFByZWZlcmVuY2VzSGFzaFJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAjIC4gLiAuCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIyAuIC4gLgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgfTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUmVzdWx0ID0gJFNlbGYtPkluaXQoCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICk7CgogICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdXZWJzZXJ2aWNlLkludmFsaWRDb25maWd1cmF0aW9uJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgKCAkVXNlcklELCAkVXNlclR5cGUgKSA9ICRTZWxmLT5BdXRoKAogICAgICAgICVQYXJhbQogICAgKTsKCiAgICBpZiAoICEkVXNlcklEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnJFNlbGYtPntPcGVyYXRpb25OYW1lfS5BdXRoRmFpbCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQXV0aG9yaXphdGlvbiBmYWlsaW5nISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZ0l0ZW1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17RGF0YX0tPnskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5NaXNzaW5nUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogJE5lZWRlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZyEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIG15ICRFcnJvck1lc3NhZ2UgPSAnJzsKCiAgICAjIGFsbCBuZWVkZWQgdmFyaWFibGVzCiAgICBteSBAQ29uZmlnSXRlbUlEczsKICAgIGlmICggSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte0RhdGF9LT57Q29uZmlnSXRlbUlEfSApICkgewogICAgICAgIEBDb25maWdJdGVtSURzID0gc3BsaXQoIC8sLywgJFBhcmFte0RhdGF9LT57Q29uZmlnSXRlbUlEfSApOwogICAgfQogICAgZWxzaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRQYXJhbXtEYXRhfS0+e0NvbmZpZ0l0ZW1JRH0gKSApIHsKICAgICAgICBAQ29uZmlnSXRlbUlEcyA9IEB7ICRQYXJhbXtEYXRhfS0+e0NvbmZpZ0l0ZW1JRH0gfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5Xcm9uZ1N0cnVjdHVyZSIsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogU3RydWN0dXJlIGZvciBDb25maWdJdGVtSUQgaXMgbm90IGNvcnJlY3QhIiwKICAgICAgICApOwogICAgfQogICAgbXkgJEF0dGFjaG1lbnRzID0gJFBhcmFte0RhdGF9LT57QXR0YWNobWVudHN9IHx8IDA7CiAgICBteSAkUmV0dXJuRGF0YSAgPSB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfTsKCiAgICBteSBASXRlbTsKCiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgICMgc3RhcnQgQ29uZmlnSXRlbSBsb29wCiAgICBDT05GSUdJVEVNOgogICAgZm9yIG15ICRDb25maWdJdGVtSUQgKEBDb25maWdJdGVtSURzKSB7CgogICAgICAgICMgY2hlY2sgY3JlYXRlIHBlcm1pc3Npb25zCiAgICAgICAgbXkgJFBlcm1pc3Npb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICAgICAgU2NvcGUgID0+ICdJdGVtJywKICAgICAgICAgICAgSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFBlcm1pc3Npb24gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uQWNjZXNzRGVuaWVkIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ2FuIG5vdCBnZXQgY29uZmlndXJhdGlvbiBpdGVtISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgQ29uZmlnSXRlbSBlbnRyeQogICAgICAgIG15ICRDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgICAgICAjIGdldCBsYXRlc3QgdmVyc2lvbgogICAgICAgIG15ICRWZXJzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkVmVyc2lvbikgKSB7CgogICAgICAgICAgICAkRXJyb3JNZXNzYWdlID0gJ0NvdWxkIG5vdCBnZXQgQ29uZmlnSXRlbSBkYXRhJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtR2V0OjpSdW4oKSc7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICckU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiAkRXJyb3JNZXNzYWdlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVtb3ZlIHVubmVlZGVkIGl0ZW1zCiAgICAgICAgZGVsZXRlICRWZXJzaW9uLT57Q2xhc3NJRH07CiAgICAgICAgZGVsZXRlICRWZXJzaW9uLT57Q3VyRGVwbFN0YXRlSUR9OwogICAgICAgIGRlbGV0ZSAkVmVyc2lvbi0+e0N1ckluY2lTdGF0ZUlEfTsKICAgICAgICBkZWxldGUgJFZlcnNpb24tPntEZXBsU3RhdGVJRH07CiAgICAgICAgZGVsZXRlICRWZXJzaW9uLT57SW5jaVN0YXRlSUR9OwogICAgICAgIGRlbGV0ZSAkVmVyc2lvbi0+e1hNTERlZmluaXRpb25JRH07CgogICAgICAgIG15ICREZWZpbml0aW9uID0gZGVsZXRlICRWZXJzaW9uLT57WE1MRGVmaW5pdGlvbn07CgogICAgICAgIG15ICRGb3JtYXRlZFhNTERhdGEgPSAkU2VsZi0+SW52ZXJ0Rm9ybWF0WE1MRGF0YSgKICAgICAgICAgICAgWE1MRGF0YSA9PiAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufSwKICAgICAgICApOwoKICAgICAgICBteSAkUmVwbGFjZWRYTUxEYXRhID0gJFNlbGYtPkludmVydFJlcGxhY2VYTUxEYXRhKAogICAgICAgICAgICBYTUxEYXRhICAgID0+ICRGb3JtYXRlZFhNTERhdGEsCiAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb24sCiAgICAgICAgKTsKCiAgICAgICAgJFZlcnNpb24tPntYTUxEYXRhfSA9ICRSZXBsYWNlZFhNTERhdGE7CgogICAgICAgICMgcmVuYW1lIFhNTERhdGEgc2luY2UgU09BUCB0cmFuc3BvcnQgY29tcGxhaW5zIGFib3V0IFhNTCBwcmVmaXggb24gbmFtZXMKICAgICAgICAkVmVyc2lvbi0+e0NJWE1MRGF0YX0gPSBkZWxldGUgJFZlcnNpb24tPntYTUxEYXRhfTsKCiAgICAgICAgIyBzZXQgQ29uZmlnSXRlbSBlbnRyeSBkYXRhCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1CdW5kbGUgPSAkVmVyc2lvbjsKCiAgICAgICAgaWYgKCRBdHRhY2htZW50cykgewoKICAgICAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgQEF0dGFjaG1lbnREZXRhaWxzOwogICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICBmb3IgbXkgJEZpbGVuYW1lIChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRGaWxlbmFtZTsKCiAgICAgICAgICAgICAgICBteSAkQXR0YWNobWVudCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIG5leHQgaWYgbm90IGF0dGFjaG1lbnQKICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJEF0dGFjaG1lbnQpOwoKICAgICAgICAgICAgICAgICMgY29udmVydCBjb250ZW50IHRvIGJhc2U2NAogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnQtPntDb250ZW50fSA9IGVuY29kZV9iYXNlNjQoICRBdHRhY2htZW50LT57Q29udGVudH0gKTsKICAgICAgICAgICAgICAgIHB1c2ggQEF0dGFjaG1lbnREZXRhaWxzLCAkQXR0YWNobWVudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgQ29uZmlnSXRlbSBlbnRyeSBkYXRhCiAgICAgICAgICAgICRDb25maWdJdGVtQnVuZGxlLT57QXR0YWNobWVudH0gPSAnJzsKICAgICAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoIFxAQXR0YWNobWVudERldGFpbHMgKSApIHsKICAgICAgICAgICAgICAgICRDb25maWdJdGVtQnVuZGxlLT57QXR0YWNobWVudH0gPSBcQEF0dGFjaG1lbnREZXRhaWxzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGFkZAogICAgICAgIHB1c2ggQEl0ZW0sICRDb25maWdJdGVtQnVuZGxlOwoKICAgIH0gICAgIyBmaW5pc2ggQ29uZmlnSXRlbSBsb29wCgogICAgaWYgKCAhc2NhbGFyIEBJdGVtICkgewogICAgICAgICRFcnJvck1lc3NhZ2UgPSAnQ291bGQgbm90IGdldCBDb25maWdJdGVtIGRhdGEnCiAgICAgICAgICAgIC4gJyBpbiBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29uZmlnSXRlbUdldDo6UnVuKCknOwoKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJyRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTm9Db25maWdJdGVtRGF0YScsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogJEVycm9yTWVzc2FnZSIsCiAgICAgICAgKTsKCiAgICB9CgogICAgIyBzZXQgQ29uZmlnSXRlbSBkYXRhIGludG8gcmV0dXJuIHN0cnVjdHVyZQogICAgJFJldHVybkRhdGEtPntEYXRhfS0+e0NvbmZpZ0l0ZW19ID0gJyc7CiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggXEBJdGVtICkgKSB7CiAgICAgICAgJFJldHVybkRhdGEtPntEYXRhfS0+e0NvbmZpZ0l0ZW19ID0gXEBJdGVtOwogICAgfQoKICAgICMgcmV0dXJuIHJlc3VsdAogICAgcmV0dXJuICRSZXR1cm5EYXRhOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtU2VhcmNoOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb21tb24KICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb21tb24KKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29uZmlnSXRlbVNlYXJjaCAtIEdlbmVyaWNJbnRlcmZhY2UgQ29uZmlnSXRlbSBDb25maWdJdGVtU2VhcmNoIE9wZXJhdGlvbiBiYWNrZW5kCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICRTZWxmLT57T3BlcmF0aW9uTmFtZX0gPSAnQ29uZmlnSXRlbVNlYXJjaCc7CgogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW1TZWFyY2gnKTsKCiAgICAkU2VsZi0+e0NvbmZpZ30tPntEZWZhdWx0VmFsdWV9ID0gJ05vdCBEZWZpbmVkJzsKCiAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKCiAgICAjIGdldCBhIGxpc3Qgb2YgYWxsIGNvbmZpZyBpdGVtIGNsYXNzZXMKICAgICRTZWxmLT57Q2xhc3NMaXN0fSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRTZWxmLT57Q2xhc3NMaXN0fSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0RlYnVnZ2VyT2JqZWN0fS0+RXJyb3IoCiAgICAgICAgICAgIFN1bW1hcnkgPT4gJ0Vycm9yIHdoZW4gdHJ5aW5nIHRvIGdldCBjbGFzcyBsaXN0aW5nIG9mIElUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGEgbGlzdCBvZiBhbGwgaW5jaXN0YXRlcwogICAgJFNlbGYtPntJbmNpU3RhdGVMaXN0fSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntJbmNpU3RhdGVMaXN0fSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0RlYnVnZ2VyT2JqZWN0fS0+RXJyb3IoCiAgICAgICAgICAgIFN1bW1hcnkgPT4gJ0Vycm9yIHdoZW4gdHJ5aW5nIHRvIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0aW5nIG9mJwogICAgICAgICAgICAgICAgLiAnIElUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgYSBsaXN0IG9mIGFsbCBkZXBsc3RhdGVzCiAgICAkU2VsZi0+e0RlcGxTdGF0ZUxpc3R9ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRTZWxmLT57RGVwbFN0YXRlTGlzdH0gKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntEZWJ1Z2dlck9iamVjdH0tPkVycm9yKAogICAgICAgICAgICBTdW1tYXJ5ID0+ICdFcnJvciB3aGVuIHRyeWluZyB0byBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdGluZyBvZicKICAgICAgICAgICAgICAgIC4gJyBJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBhbHNvIHByb3ZpZGUgdGhlIGNsYXNzbGlzdCBpbiByZXZlcnNlZCBmb3JtIGZvciBlYXNpZXIgcmV2ZXJzZSBsb29rdXBzCiAgICBteSAlUmV2ZXJzZUNsYXNzTGlzdCA9IHJldmVyc2UgJXsgJFNlbGYtPntDbGFzc0xpc3R9IH07CiAgICAkU2VsZi0+e1JldmVyc2VDbGFzc0xpc3R9ID0gXCVSZXZlcnNlQ2xhc3NMaXN0OwoKICAgICMgYWxzbyBwcm92aWRlIHRoZSBpbmNpc3RhdGVsaXN0IGluIHJldmVyc2VkIGZvcm0gZm9yIGVhc2llciByZXZlcnNlIGxvb2t1cHMKICAgIG15ICVSZXZlcnNlSW5jaVN0YXRlTGlzdCA9IHJldmVyc2UgJXsgJFNlbGYtPntJbmNpU3RhdGVMaXN0fSB9OwogICAgJFNlbGYtPntSZXZlcnNlSW5jaVN0YXRlTGlzdH0gPSBcJVJldmVyc2VJbmNpU3RhdGVMaXN0OwoKICAgICMgYWxzbyBwcm92aWRlIHRoZSBkZXBsc3RhdGVsaXN0IGluIHJldmVyc2VkIGZvcm0gZm9yIGVhc2llciByZXZlcnNlIGxvb2t1cHMKICAgIG15ICVSZXZlcnNlRGVwbFN0YXRlTGlzdCA9IHJldmVyc2UgJXsgJFNlbGYtPntEZXBsU3RhdGVMaXN0fSB9OwogICAgJFNlbGYtPntSZXZlcnNlRGVwbFN0YXRlTGlzdH0gPSBcJVJldmVyc2VEZXBsU3RhdGVMaXN0OwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFJ1bigpCgpwZXJmb3JtIENvbmZpZ0l0ZW1DcmVhdGUgT3BlcmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBjcmVhdGVkIGNvbmZpZyBpdGVtIG51bWJlci4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBVc2VyTG9naW4gICAgICAgICA9PiAnc29tZSBhZ2VudCBsb2dpbicsICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgcmVxdWlyZWQKCgogICAgICAgICAgICBQYXNzd29yZCAgPT4gJ3NvbWUgcGFzc3dvcmQnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGFzc3dvcmQgaXMgcmVxdWlyZWQKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ1RoZSBDb25maWdJdGVtIENsYXNzJywgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICA9PiAnVGhlIENvbmZpZ0l0ZW0gTnVtYmVyJywgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdUaGUgQ29uZmlnSXRlbSBOYW1lJywgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVzICAgPT4gWydkZXBsb3ltZW50IHN0YXRlJ10sICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAgICAgICAgIEluY2lTdGF0ZXMgICA9PiBbJ2luY2lkZW50IHN0YXRlJ10sICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAgICAgICAgICMgY29uZmlnIGl0ZW1zIHdpdGggY3JlYXRlZCB0aW1lIGFmdGVyIC4uLgogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJzIwMDYtMDEtMDkgMDA6MDA6MDEnLCAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICAgICAgICAgIyBjb25maWcgaXRlbXMgd2l0aCBjcmVhdGVkIHRpbWUgYmVmb3JlIHRoZW4gLi4uLgogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJzIwMDYtMDEtMTkgMjM6NTk6NTknLCAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICAgICAgICAgIyBjb25maWcgaXRlbXMgd2l0aCBjaGFuZ2VkIHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgICAgICAgICAjIGNvbmZpZyBpdGVtcyB3aXRoIGNoYW5nZWQgdGltZSBiZWZvcmUgdGhlbiAuLi4uCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZSA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgICAgPT4gJEFycmF5SGFzaFJlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCksIGl0IGRlcGVuZHMgb24gdGhlIENvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBJdGVtIGNsYXNzIGFuZCBkZWZpbml0aW9uCgogICAgICAgICAgICAgICAgUHJldmlvdXNWZXJzaW9uU2VhcmNoID0+IDEsICAjIChvcHRpb25hbCkgZGVmYXVsdCAwICgwfDEpCgogICAgICAgICAgICAgICAgT3JkZXJCeSA9PiBbICdDb25maWdJdGVtSUQnLCAnTnVtYmVyJyBdLCAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgICAgICAjIGRlZmF1bHQ6IFsgJ0NvbmZpZ0l0ZW1JRCcgXQogICAgICAgICAgICAgICAgIyAoQ29uZmlnSXRlbUlELCBOdW1iZXIsIENsYXNzSUQsIERlcGxTdGF0ZUlELCBJbmNpU3RhdGVJRCwKICAgICAgICAgICAgICAgICMgQ3JlYXRlVGltZSwgQ3JlYXRlQnksIENoYW5nZVRpbWUsIENoYW5nZUJ5KQoKICAgICAgICAgICAgICAgICMgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgT3JkZXJCeToKICAgICAgICAgICAgICAgICMgVGhlIE9yZGVyQnlEaXJlY3Rpb24gY2FuIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBPcmRlckJ5IGF0dHJpYnV0ZS4KICAgICAgICAgICAgICAgICMgVGhlIHBhaXJpbmcgaXMgbWFkZSBieSB0aGUgYXJyYXkgaW5kaWNlcy4KCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsgJ0Rvd24nLCAnVXAnIF0sICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAgICAgICAgICMgZGVmYXVsdDogWyAnRG93bicgXQogICAgICAgICAgICAgICAgIyAoRG93biB8IFVwKQoKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgID0+IDEyMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICAgICAgICAgID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAjIHJlc3VsdCBkYXRhIHBheWxvYWQgYWZ0ZXIgT3BlcmF0aW9uCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgPT4gWzEyMywgNDU2XSwgICAgICAgICAjIENvbmZpZ3VyYXRpb24gSXRlbSAgSURzIG51bWJlciBpbiBPVFJTOjpJVFNNIChTZXJ2aWNlIGRlc2sgc3lzdGVtKQogICAgICAgICAgICBFcnJvciA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG91bGQgbm90IHJldHVybiBlcnJvcnMKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0NvbmZpZ0l0ZW1TZWFyY2guRXJyb3JDb2RlJwogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgRGVzY3JpcHRpb24nCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnV2Vic2VydmljZS5JbnZhbGlkQ29uZmlndXJhdGlvbicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoCiAgICAgICAgISRQYXJhbXtEYXRhfS0+e1VzZXJMb2dpbn0KICAgICAgICAmJiAhJFBhcmFte0RhdGF9LT57U2Vzc2lvbklEfQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IFVzZXJMb2dpbiBvciBTZXNzaW9uSUQgaXMgcmVxdWlyZWQhIiwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0RhdGF9LT57VXNlckxvZ2lufSApIHsKCiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9LT57UGFzc3dvcmR9ICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IFBhc3N3b3JkIG9yIFNlc3Npb25JRCBpcyByZXF1aXJlZCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGF1dGhlbnRpY2F0ZSB1c2VyCiAgICBteSAoICRVc2VySUQsICRVc2VyVHlwZSApID0gJFNlbGYtPkF1dGgoJVBhcmFtKTsKCiAgICBpZiAoICEkVXNlcklEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5BdXRoRmFpbCIsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogVXNlciBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgaGFzaGVzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29uZmlnSXRlbSkpIHsKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9LT57JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5NaXNzaW5nUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiAkTmVlZGVkIHBhcmFtZXRlciBpcyBtaXNzaW5nIG9yIG5vdCB2YWxpZCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGlzb2xhdGUgY29uZmlnIGl0ZW0gcGFyYW1ldGVyCiAgICBteSAkQ29uZmlnSXRlbSA9ICRQYXJhbXtEYXRhfS0+e0NvbmZpZ0l0ZW19OwoKICAgICMgcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcwogICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXskQ29uZmlnSXRlbX0gKSB7CiAgICAgICAgaWYgKCByZWYgJEF0dHJpYnV0ZSBuZSAnSEFTSCcgJiYgcmVmICRBdHRyaWJ1dGUgbmUgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICNyZW1vdmUgbGVhZGluZyBzcGFjZXMKICAgICAgICAgICAgJENvbmZpZ0l0ZW0tPnskQXR0cmlidXRlfSA9fiBze1xBXHMrfXt9OwoKICAgICAgICAgICAgI3JlbW92ZSB0cmFpbGluZyBzcGFjZXMKICAgICAgICAgICAgJENvbmZpZ0l0ZW0tPnskQXR0cmlidXRlfSA9fiBze1xzK1x6fXt9OwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIGRlZmluZWQgJENvbmZpZ0l0ZW0tPntDSVhNTERhdGF9ICkgewogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX0gKSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5JbnZhbGlkUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhIGlzIGludmFsaWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBmb3IgQ0lYTUxEYXRhCiAgICAgICAgJFNlbGYtPl9DbGVhblhNTERhdGEoIFhNTERhdGEgPT4gJENvbmZpZ0l0ZW0tPntDSVhNTERhdGF9ICk7CiAgICB9CgogICAgaWYgKCAhKCAkQ29uZmlnSXRlbS0+e0NsYXNzfSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5NaXNzaW5nUGFyYW1ldGVyIiwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q2xhc3MgcGFyYW1ldGVyIGlzIG1pc3NpbmchIiwKICAgICAgICApOwogICAgfQoKICAgICMgY29udmVydCBzZWFyY2ggcGFyYW1zIHRvIGFycmF5cwogICAgaWYgKCBkZWZpbmVkICRDb25maWdJdGVtLT57SW5jaVN0YXRlc30gKSB7CiAgICAgICAgbXkgQEluY2lTdGF0ZXM7CiAgICAgICAgaWYgKCBJc1N0cmluZ1dpdGhEYXRhKCAkQ29uZmlnSXRlbS0+e0luY2lTdGF0ZXN9ICkgKSB7CiAgICAgICAgICAgIEBJbmNpU3RhdGVzID0gc3BsaXQoIC8sLywgJENvbmZpZ0l0ZW0tPntJbmNpU3RhdGVzfSApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJENvbmZpZ0l0ZW0tPntJbmNpU3RhdGVzfSApICkgewogICAgICAgICAgICBASW5jaVN0YXRlcyA9IEB7ICRDb25maWdJdGVtLT57SW5jaVN0YXRlc30gfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uV3JvbmdTdHJ1Y3R1cmUiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IFN0cnVjdHVyZSBmb3IgQ29uZmlnSXRlbS0+SW5jaVN0YXRlcyBpcyBub3QgY29ycmVjdCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkQ29uZmlnSXRlbS0+e0luY2lTdGF0ZXN9ID0gXEBJbmNpU3RhdGVzOwogICAgfQoKICAgIGlmICggZGVmaW5lZCAkQ29uZmlnSXRlbS0+e0RlcGxTdGF0ZXN9ICkgewogICAgICAgIG15IEBEZXBsU3RhdGVzOwogICAgICAgIGlmICggSXNTdHJpbmdXaXRoRGF0YSggJENvbmZpZ0l0ZW0tPntEZXBsU3RhdGVzfSApICkgewogICAgICAgICAgICBARGVwbFN0YXRlcyA9IHNwbGl0KCAvLC8sICRDb25maWdJdGVtLT57RGVwbFN0YXRlc30gKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRDb25maWdJdGVtLT57RGVwbFN0YXRlc30gKSApIHsKICAgICAgICAgICAgQERlcGxTdGF0ZXMgPSBAeyAkQ29uZmlnSXRlbS0+e0RlcGxTdGF0ZXN9IH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9Lldyb25nU3RydWN0dXJlIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogU3RydWN0dXJlIGZvciBEZXBsU3RhdGVzIGlzIG5vdCBjb3JyZWN0ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRDb25maWdJdGVtLT57RGVwbFN0YXRlc30gPSBcQERlcGxTdGF0ZXM7CiAgICB9CgogICAgaWYgKCBkZWZpbmVkICRDb25maWdJdGVtLT57T3JkZXJCeX0gKSB7CiAgICAgICAgbXkgQE9yZGVyQnk7CiAgICAgICAgaWYgKCBJc1N0cmluZ1dpdGhEYXRhKCAkQ29uZmlnSXRlbS0+e09yZGVyQnl9ICkgKSB7CiAgICAgICAgICAgIEBPcmRlckJ5ID0gc3BsaXQoIC8sLywgJENvbmZpZ0l0ZW0tPntPcmRlckJ5fSApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJENvbmZpZ0l0ZW0tPntPcmRlckJ5fSApICkgewogICAgICAgICAgICBAT3JkZXJCeSA9IEB7ICRDb25maWdJdGVtLT57T3JkZXJCeX0gfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uV3JvbmdTdHJ1Y3R1cmUiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBTdHJ1Y3R1cmUgZm9yIE9yZGVyQnkgaXMgbm90IGNvcnJlY3QhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJENvbmZpZ0l0ZW0tPntPcmRlckJ5fSA9IFxAT3JkZXJCeTsKICAgIH0KCiAgICBpZiAoIGRlZmluZWQgJENvbmZpZ0l0ZW0tPntPcmRlckJ5RGlyZWN0aW9ufSApIHsKICAgICAgICBteSBAT3JkZXJCeURpcmVjdGlvbjsKICAgICAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRDb25maWdJdGVtLT57T3JkZXJCeURpcmVjdGlvbn0gKSApIHsKICAgICAgICAgICAgQE9yZGVyQnlEaXJlY3Rpb24gPSBzcGxpdCggLywvLCAkQ29uZmlnSXRlbS0+e09yZGVyQnlEaXJlY3Rpb259ICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggSXNBcnJheVJlZldpdGhEYXRhKCAkQ29uZmlnSXRlbS0+e09yZGVyQnlEaXJlY3Rpb259ICkgKSB7CiAgICAgICAgICAgIEBPcmRlckJ5RGlyZWN0aW9uID0gQHsgJENvbmZpZ0l0ZW0tPntPcmRlckJ5RGlyZWN0aW9ufSB9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5Xcm9uZ1N0cnVjdHVyZSIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogU3RydWN0dXJlIGZvciBPcmRlckJ5RGlyZWN0aW9uIGlzIG5vdCBjb3JyZWN0ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRDb25maWdJdGVtLT57T3JkZXJCeURpcmVjdGlvbn0gPSBcQE9yZGVyQnlEaXJlY3Rpb247CiAgICB9CgogICAgIyBjaGVjayBDb25maWdJdGVtIGF0dHJpYnV0ZSB2YWx1ZXMKICAgIG15ICRDb25maWdJdGVtQ2hlY2sgPSAkU2VsZi0+X0NoZWNrQ29uZmlnSXRlbSggQ29uZmlnSXRlbSA9PiAkQ29uZmlnSXRlbSApOwoKICAgIGlmICggISRDb25maWdJdGVtQ2hlY2stPntTdWNjZXNzfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKCAleyRDb25maWdJdGVtQ2hlY2t9ICk7CiAgICB9CgogICAgIyBjaGVjayBzZWFyY2ggcGVybWlzc2lvbnMKICAgIG15ICRQZXJtaXNzaW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPlBlcm1pc3Npb24oCiAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgIENsYXNzSUQgPT4gJFNlbGYtPntSZXZlcnNlQ2xhc3NMaXN0fS0+eyAkQ29uZmlnSXRlbS0+e0NsYXNzfSB9LAogICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRCwKICAgICAgICBUeXBlICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgKTsKCiAgICBpZiAoICEkUGVybWlzc2lvbiApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uQWNjZXNzRGVuaWVkIiwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDYW4gbm90IHNlYXJjaCBjb25maWd1cmF0aW9uIGl0ZW1zISIsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGYtPl9Db25maWdJdGVtU2VhcmNoKAogICAgICAgIENvbmZpZ0l0ZW0gPT4gJENvbmZpZ0l0ZW0sCiAgICAgICAgVXNlcklEICAgICA9PiAkVXNlcklELAogICAgKTsKfQoKPWhlYWQxIElOVEVSTkFMIElOVEVSRkFDRQoKPWhlYWQyIF9DbGVhblhNTERhdGEoKQoKcmVtb3ZlZCB0cmFpbGluZyBhbmQgbGVhZGluZyB3aGl0ZSBzcGFjZXMgaW4gdGhlIFhNTERhdGEuCgogICAgbXkgJFhNTERhdGFDbGVhbiA9ICRPcGVyYXRpb25PYmplY3QtPl9DbGVhblhNTERhdGEoCiAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmaW5pdGlvbkFycmF5UmVmLCAgICAgICAgICAjIENvbmZpZyBJdGVtIERlZmluaXRpb24gb3QganVzdCBwYXJ0IG9mIGl0CiAgICAgICAgWE1MRGF0YSAgICA9PiAkWE1MRGF0YUhhc2hSZWYsCiAgICApOwoKICAgIHJldHVybnM6CgogICAgJFhNTERhdGFDbGVhbiA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgZXZlcnl0aGluZyBpcyBPSwogICAgfQoKICAgICRYTUxEYXRhQ2xlYW4gPSB7CiAgICAgICAgRXJyb3JDb2RlICAgID0+ICdGdW5jdGlvbi5FcnJvcicsICAgICAgICAgICAjIGlmIGVycm9yCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdFcnJvciBkZXNjcmlwdGlvbicsCiAgICB9Cgo9Y3V0CgpzdWIgX0NsZWFuWE1MRGF0YSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRYTUxEYXRhID0gJFBhcmFte1hNTERhdGF9OwoKICAgIEtFWToKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JFhNTERhdGF9ICkgewogICAgICAgIGlmICggcmVmICRYTUxEYXRhLT57JEtleX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgRUxFTUVOVDoKICAgICAgICAgICAgZm9yIG15ICRFbGVtZW50ICggQHsgJFhNTERhdGEtPnskS2V5fSB9ICkgewogICAgICAgICAgICAgICAgaWYgKCByZWYgJEVsZW1lbnQgZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICRTZWxmLT5fQ2xlYW5YTUxEYXRhKCBYTUxEYXRhID0+ICRFbGVtZW50ICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBFTEVNRU5UOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCByZWYgJEVsZW1lbnQgZXEgJycgKSB7CgogICAgICAgICAgICAgICAgICAgICNyZW1vdmUgbGVhZGluZyBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudCA9fiBze1xBXHMrfXt9OwoKICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICRFbGVtZW50ID1+IHN7XHMrXHp9e307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCByZWYgJFhNTERhdGEtPnskS2V5fSBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAkU2VsZi0+X0NsZWFuWE1MRGF0YSggWE1MRGF0YSA9PiAkWE1MRGF0YS0+eyRLZXl9ICk7CiAgICAgICAgICAgIG5leHQgS0VZOwoKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCByZWYgJFhNTERhdGEtPnskS2V5fSBlcSAnJyApIHsKCiAgICAgICAgICAgICNyZW1vdmUgbGVhZGluZyBzcGFjZXMKICAgICAgICAgICAgJFhNTERhdGEtPnskS2V5fSA9fiBze1xBXHMrfXt9OwoKICAgICAgICAgICAgI3JlbW92ZSB0cmFpbGluZyBzcGFjZXMKICAgICAgICAgICAgJFhNTERhdGEtPnskS2V5fSA9fiBze1xzK1x6fXt9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9DaGVja0NvbmZpZ0l0ZW0oKQoKY2hlY2tzIGlmIHRoZSBnaXZlbiBjb25maWcgaXRlbSBwYXJhbWV0ZXJzIGFyZSB2YWxpZC4KCiAgICBteSAkQ29uZmlnSXRlbUNoZWNrID0gJE9wZXJhdGlvbk9iamVjdC0+X0NoZWNrQ29uZmlnSXRlbSgKICAgICAgICBDb25maWdJdGVtID0+ICRDb25maWdJdGVtLCAgICAgICAgICAgICAgICAgICMgYWxsIGNvbmZpZyBpdGVtIHBhcmFtZXRlcnMKICAgICk7CgogICAgcmV0dXJuczoKCiAgICAkQ29uZmlnSXRlbUNoZWNrID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBldmVyeXRoaW5nIGlzIE9LCiAgICB9CgogICAgJENvbmZpZ0l0ZW1DaGVjayA9IHsKICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0Z1bmN0aW9uLkVycm9yJywgICAgICAgICAgICMgaWYgZXJyb3IKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0Vycm9yIGRlc2NyaXB0aW9uJywKICAgIH0KCj1jdXQKCnN1YiBfQ2hlY2tDb25maWdJdGVtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ0l0ZW0gPSAkUGFyYW17Q29uZmlnSXRlbX07CgogICAgIyBjaGVjayBjb25maWcgaXRlbSBpbnRlcm5hbGx5CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENsYXNzKSkgewogICAgICAgIGlmICggISRDb25maWdJdGVtLT57JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPiROZWVkZWQgcGFyYW1ldGVyIGlzIG1pc3NpbmchIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBDb25maWdJdGVtLT5DbGFzcwogICAgaWYgKCAhJFNlbGYtPlZhbGlkYXRlQ2xhc3MoICV7JENvbmZpZ0l0ZW19ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDb25maWdJdGVtLT5DbGFzcyBwYXJhbWV0ZXIgaXMgaW52YWxpZCEiLAogICAgICAgIH07CiAgICB9CgogICAgIyBjaGVjayBvcHRpb25hbCBzdHVmZgogICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRDb25maWdJdGVtLT57SW5jaVN0YXRlc30gKSApIHsKCiAgICAgICAgZm9yIG15ICRJbmNpU3RhdGUgKCBAeyAkQ29uZmlnSXRlbS0+e0luY2lTdGF0ZXN9IH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIENvbmZpZ0l0ZW0tPkluY2lTdGF0ZXMKICAgICAgICAgICAgaWYgKCAhJFNlbGYtPlZhbGlkYXRlSW5jaVN0YXRlKCBJbmNpU3RhdGUgPT4gJEluY2lTdGF0ZSApICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDb25maWdJdGVtLT5JbmNpU3RhdGVzIHBhcmFtZXRlciBpcyBpbnZhbGlkISIsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkQ29uZmlnSXRlbS0+e0RlcGxTdGF0ZXN9ICkgKSB7CgogICAgICAgIGZvciBteSAkRGVwbFN0YXRlICggQHsgJENvbmZpZ0l0ZW0tPntEZXBsU3RhdGVzfSB9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBDb25maWdJdGVtLT5JbmNpU3RhdGVzCiAgICAgICAgICAgIGlmICggISRTZWxmLT5WYWxpZGF0ZURlcGxTdGF0ZSggRGVwbFN0YXRlID0+ICREZXBsU3RhdGUgKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+RGVwbFN0YXRlcyBwYXJhbWV0ZXIgaXMgaW52YWxpZCEiLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgbXkgJFRpbWVQYXJhbSAoCiAgICAgICAgcXcoQ3JlYXRlVGltZU5ld2VyRGF0ZSBDcmVhdGVUaW1lT2xkZXJEYXRlIENoYW5nZVRpbWVOZXdlckRhdGUgQ2hhbmdlVGltZU9sZGVyRGF0ZSkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCBkZWZpbmVkICRDb25maWdJdGVtLT57IkNvbmZpZ0l0ZW0kVGltZVBhcmFtIn0gKSB7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkU2VsZi0+VmFsaWRhdGVJbnB1dERhdGVUaW1lKAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRDb25maWdJdGVtLT57IkNvbmZpZ0l0ZW0kVGltZVBhcmFtIn0sCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q29uZmlnSXRlbSRUaW1lUGFyYW0gcGFyYW1ldGVyIGlzIGludmFsaWQhIiwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCBkZWZpbmVkICRDb25maWdJdGVtLT57TGltaXR9ICkgewogICAgICAgIGlmICggIUlzTnVtYmVyKCAkQ29uZmlnSXRlbS0+e0xpbWl0fSApICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkxpbWl0IHBhcmFtZXRlciBpcyBpbnZhbGlkISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRDb25maWdJdGVtLT57Q0lYTUxEYXRhfSApICkgewoKICAgICAgICAjIGdldCBsYXN0IGNvbmZpZyBpdGVtIGRlZmludGlvbgogICAgICAgIG15ICREZWZpbml0aW9uRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5EZWZpbml0aW9uR2V0KAogICAgICAgICAgICBDbGFzc0lEID0+ICRTZWxmLT57UmV2ZXJzZUNsYXNzTGlzdH0tPnsgJENvbmZpZ0l0ZW0tPntDbGFzc30gfSwKICAgICAgICApOwoKICAgICAgICBteSAkWE1MRGF0YUNoZWNrUmVzdWx0ID0gJFNlbGYtPl9DaGVja1NlYXJjaFhNTERhdGEoCiAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb25EYXRhLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgIFhNTERhdGEgICAgPT4gJENvbmZpZ0l0ZW0tPntDSVhNTERhdGF9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRYTUxEYXRhQ2hlY2tSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgcmV0dXJuICRYTUxEYXRhQ2hlY2tSZXN1bHQ7CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgZXZlcnl0aGluZyBpcyBPSyB0aGVuIHJldHVybiBTdWNjZXNzCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH07Cn0KCj1oZWFkMiBfQ29uZmlnSXRlbVNlYXJjaCgpCgpzZWFyY2ggYSBjb25maWd1cmF0aW9uIGl0ZW1zLgoKICAgIG15ICRSZXNwb25zZSA9ICRPcGVyYXRpb25PYmplY3QtPl9Db25maWdJdGVtU2VhcmNoKAogICAgICAgIENvbmZpZ0l0ZW0gICAgID0+ICRDb25maWdJdGVtLCAgICAgICAgICAgICAjIGFsbCBjb25maWd1cmF0aW9uIGl0ZW0gcGFyYW1ldGVycwogICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEyMywKICAgICk7CgogICAgcmV0dXJuczoKCiAgICAkUmVzcG9uc2UgPSB7CiAgICAgICAgU3VjY2VzcyA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGV2ZXJldGhpbmcgaXMgT0sKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEcyA9PiBbMTIzLCA0NTZdLAogICAgICAgIH0KICAgIH0KCiAgICAkUmVzcG9uc2UgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgdW5leHBlY3RlZCBlcnJvcgogICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFBhcmFte0Vycm9yQ29kZX06ICRQYXJhbXtFcnJvck1lc3NhZ2V9IiwKICAgIH0KCj1jdXQKCnN1YiBfQ29uZmlnSXRlbVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdJdGVtID0gJFBhcmFte0NvbmZpZ0l0ZW19OwoKICAgIG15ICVTZWFyY2hQYXJhbXM7CgogICAgIyBzZXQgc2VhcmNoIHBhcmFtZXRlcnMgdGhhdCBkb2VzIG5vdCBuZWVkIGFueSBjb252ZXJzaW9uCiAgICBmb3IgbXkgJFBsYWluUGFyYW0gKAogICAgICAgIHF3KAogICAgICAgIE5hbWUgTnVtYmVyIFByZXZpb3VzVmVyc2lvblNlYXJjaCBPcmRlckJ5IE9yZGVyQnlEaXJlY3Rpb24gTGltaXQKICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU5ld2VyRGF0ZSBDb25maWdJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZSBDb25maWdJdGVtQ2hhbmdlVGltZU5ld2VyRGF0ZQogICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lT2xkZXJEYXRlCiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoIGRlZmluZWQgJENvbmZpZ0l0ZW0tPnskUGxhaW5QYXJhbX0gKSB7CiAgICAgICAgICAgICRTZWFyY2hQYXJhbXN7JFBsYWluUGFyYW19ID0gJENvbmZpZ0l0ZW0tPnskUGxhaW5QYXJhbX07CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IHNlYWNoIGNsYXNzCiAgICBteSAkQ2xhc3NJRCA9ICRTZWxmLT57UmV2ZXJzZUNsYXNzTGlzdH0tPnsgJENvbmZpZ0l0ZW0tPntDbGFzc30gfTsKICAgICRTZWFyY2hQYXJhbXN7Q2xhc3NJRHN9ID0gWyRDbGFzc0lEXTsKCiAgICAjIHNldCBzZWFyY2ggaW5jaWRlbnQgc3RhdGVzCiAgICBpZiAoIGRlZmluZWQgJENvbmZpZ0l0ZW0tPntJbmNpU3RhdGVzfSApIHsKICAgICAgICBteSBASW5jaVN0YXRlSURzOwogICAgICAgIGZvciBteSAkSW5jaVN0YXRlICggQHsgJENvbmZpZ0l0ZW0tPntJbmNpU3RhdGVzfSB9ICkgewogICAgICAgICAgICBteSAkSW5jaVN0YXRlSUQgPSAkU2VsZi0+e1JldmVyc2VJbmNpU3RhdGVMaXN0fS0+eyRJbmNpU3RhdGV9OwogICAgICAgICAgICBwdXNoIEBJbmNpU3RhdGVJRHMsICRJbmNpU3RhdGVJRDsKICAgICAgICB9CiAgICAgICAgJFNlYXJjaFBhcmFtc3tJbmNpU3RhdGVJRHN9ID0gXEBJbmNpU3RhdGVJRHM7CiAgICB9CgogICAgIyBzZXQgc2VhcmNoIGRlcGxveW1lbnQgc3RhdGVzCiAgICBpZiAoIGRlZmluZWQgJENvbmZpZ0l0ZW0tPntEZXBsU3RhdGVzfSApIHsKICAgICAgICBteSBARGVwbFN0YXRlSURzOwogICAgICAgIGZvciBteSAkRGVwbFN0YXRlICggQHsgJENvbmZpZ0l0ZW0tPntEZXBsU3RhdGVzfSB9ICkgewogICAgICAgICAgICBteSAkRGVwbFN0YXRlSUQgPSAkU2VsZi0+e1JldmVyc2VEZXBsU3RhdGVMaXN0fS0+eyREZXBsU3RhdGV9OwogICAgICAgICAgICBwdXNoIEBEZXBsU3RhdGVJRHMsICREZXBsU3RhdGVJRDsKICAgICAgICB9CiAgICAgICAgJFNlYXJjaFBhcmFtc3tEZXBsU3RhdGVJRHN9ID0gXEBEZXBsU3RhdGVJRHM7CiAgICB9CgogICAgbXkgJFJhd1hNTERhdGEgPSAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX07CgogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRSYXdYTUxEYXRhKSApIHsKCiAgICAgICAgIyBnZXQgbGFzdCBjb25maWcgaXRlbSBkZWZpbnRpb24KICAgICAgICBteSAkRGVmaW5pdGlvbkRhdGEgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkdldCgKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkU2VsZi0+e1JldmVyc2VDbGFzc0xpc3R9LT57ICRDb25maWdJdGVtLT57Q2xhc3N9IH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXBsYWNlIGRhdGUsIGRhdGUgdGltZSwgY3VzdG9tZXIsIGNvbXBhbnkgYW5kIGdlbmVyYWwgY2F0YWxvZyB2YWx1ZXMKICAgICAgICBteSAkUmVwbGFjZWRYTUxEYXRhID0gJFNlbGYtPlJlcGxhY2VYTUxEYXRhKAogICAgICAgICAgICBYTUxEYXRhICAgID0+ICRSYXdYTUxEYXRhLAogICAgICAgICAgICBEZWZpbml0aW9uID0+ICREZWZpbml0aW9uRGF0YS0+e0RlZmluaXRpb25SZWZ9LAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuIFhNTERhdGEgc3RydWN0dXJlIHN1aXRhYmxlIGZvciBDb25maWdJdGVtU2VhcmNoCiAgICAgICAgbXkgJFhNTERhdGEgPSAkU2VsZi0+X0Zvcm1hdFNlYXJjaFhNTERhdGEoCiAgICAgICAgICAgIFhNTERhdGEgPT4gJFJlcGxhY2VkWE1MRGF0YSwKICAgICAgICApOwoKICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkWE1MRGF0YSkgKSB7CiAgICAgICAgICAgICRTZWFyY2hQYXJhbXN7V2hhdH0gPSAkWE1MRGF0YTsKICAgICAgICB9CiAgICB9CgogICAgJFNlbGYtPntEZWJ1Z2dlck9iamVjdH0tPkluZm8oCiAgICAgICAgU3VtbWFyeSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogU2VhcmNoIFBhcmFtZXRlcnMiLAogICAgICAgIERhdGEgICAgPT4gXCVTZWFyY2hQYXJhbXMsCiAgICApOwoKICAgIG15ICRDb25maWdJdGVtSURzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCglU2VhcmNoUGFyYW1zKTsKCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkQ29uZmlnSXRlbUlEcykgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRHMgPT4gJENvbmZpZ0l0ZW1JRHMsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSURzID0+ICcnLAogICAgICAgIH0sCiAgICB9Owp9Cgo9aGVhZDIgX0NoZWNrU2VhcmNoWE1MRGF0YSgpCgpjaGVja3MgaWYgdGhlIGdpdmVuIFhNTERhdGEgdmFsdWUgYXJlIHZhbGlkLgoKICAgIG15ICRYTUxEYXRhQ2hlY2sgPSAkQ29tbW9uT2JqZWN0LT5fQ2hlY2tTZWFyY2hYTUxEYXRhKAogICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb25BcnJheVJlZiwgICAgICAgICAgIyBDb25maWcgSXRlbSBEZWZpbml0aW9uIG90IGp1c3QgcGFydCBvZiBpdAogICAgICAgIFhNTERhdGEgICAgPT4gJFhNTERhdGFIYXNoUmVmLAogICAgICAgIFBhcmVudCAgICAgPT4gJ3NvbWUgcGFyZW50JywKICAgICk7CgogICAgcmV0dXJuczoKCiAgICAkWE1MRGF0YUNoZWNrID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBldmVyeXRoaW5nIGlzIE9LCiAgICB9CgogICAgJFhNTERhdGFDaGVjayA9IHsKICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0Z1bmN0aW9uLkVycm9yJywgICAgICAgICAgICMgaWYgZXJyb3IKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0Vycm9yIGRlc2NyaXB0aW9uJywKICAgIH0KCj1jdXQKCnN1YiBfQ2hlY2tTZWFyY2hYTUxEYXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJERlZmluaXRpb24gPSAkUGFyYW17RGVmaW5pdGlvbn07CiAgICBteSAkWE1MRGF0YSAgICA9ICRQYXJhbXtYTUxEYXRhfTsKICAgIG15ICRQYXJlbnQgICAgID0gJFBhcmFte1BhcmVudH0gfHwgJyc7CgogICAgbXkgJENoZWNrVmFsdWVSZXN1bHQ7CiAgICBmb3IgbXkgJERlZkl0ZW0gKCBAeyREZWZpbml0aW9ufSApIHsKICAgICAgICBteSAkSXRlbUtleSA9ICREZWZJdGVtLT57S2V5fTsKCiAgICAgICAgaWYgKCByZWYgJFhNTERhdGEtPnskSXRlbUtleX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgZm9yIG15ICRBcnJheUl0ZW0gKCBAeyAkWE1MRGF0YS0+eyRJdGVtS2V5fSB9ICkgewogICAgICAgICAgICAgICAgaWYgKCByZWYgJEFycmF5SXRlbSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJENoZWNrVmFsdWVSZXN1bHQgPSAkU2VsZi0+X0NoZWNrVmFsdWUoCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJEFycmF5SXRlbS0+eyRJdGVtS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgICA9PiAkRGVmSXRlbS0+e0lucHV0fSwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUtleSA9PiAkSXRlbUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgUGFyZW50ICA9PiAkUGFyZW50LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENoZWNrVmFsdWVSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRDaGVja1ZhbHVlUmVzdWx0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggcmVmICRBcnJheUl0ZW0gZXEgJycgKSB7CiAgICAgICAgICAgICAgICAgICAgJENoZWNrVmFsdWVSZXN1bHQgPSAkU2VsZi0+X0NoZWNrVmFsdWUoCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJEFycmF5SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgICA9PiAkRGVmSXRlbS0+e0lucHV0fSwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUtleSA9PiAkSXRlbUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgUGFyZW50ICA9PiAkUGFyZW50LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENoZWNrVmFsdWVSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRDaGVja1ZhbHVlUmVzdWx0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5JbnZhbGlkUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiIGlzIGludmFsaWQhIiwKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggcmVmICRYTUxEYXRhLT57JEl0ZW1LZXl9IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgaWYgKCAkWE1MRGF0YS0+eyRJdGVtS2V5fS0+eyRJdGVtS2V5fSApIHsKICAgICAgICAgICAgICAgICRDaGVja1ZhbHVlUmVzdWx0ID0gJFNlbGYtPl9DaGVja1ZhbHVlKAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJFhNTERhdGEtPnskSXRlbUtleX0tPnskSXRlbUtleX0sCiAgICAgICAgICAgICAgICAgICAgSW5wdXQgICA9PiAkRGVmSXRlbS0+e0lucHV0fSwKICAgICAgICAgICAgICAgICAgICBJdGVtS2V5ID0+ICRJdGVtS2V5LAogICAgICAgICAgICAgICAgICAgIFBhcmVudCAgPT4gJFBhcmVudCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2tWYWx1ZVJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkQ2hlY2tWYWx1ZVJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgb25seSBwZXJmb3JtIGNoZWNrcyBpZiBpdGVtIHJlYWxseSBleGl0cyBpbiB0aGUgWE1MRGF0YQogICAgICAgICAgICAjIENvdW50TmluIGNoZWNrcyB3YXMgdmVyaWZpZWQgYW5kIHBhc3NlZCBiZWZvcmUhLCBzbyBpdCBpcyBzYWZlIHRvIHNraXAgaWYgbmVlZGVkCiAgICAgICAgICAgIGlmICggJFhNTERhdGEtPnskSXRlbUtleX0gKSB7CiAgICAgICAgICAgICAgICAkQ2hlY2tWYWx1ZVJlc3VsdCA9ICRTZWxmLT5fQ2hlY2tWYWx1ZSgKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICRYTUxEYXRhLT57JEl0ZW1LZXl9LAogICAgICAgICAgICAgICAgICAgIElucHV0ICAgPT4gJERlZkl0ZW0tPntJbnB1dH0sCiAgICAgICAgICAgICAgICAgICAgSXRlbUtleSA9PiAkSXRlbUtleSwKICAgICAgICAgICAgICAgICAgICBQYXJlbnQgID0+ICRQYXJlbnQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJENoZWNrVmFsdWVSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJENoZWNrVmFsdWVSZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgYSBzdWIgYW5kIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgIGlmICggZGVmaW5lZCAkRGVmSXRlbS0+e1N1Yn0gKSB7CgogICAgICAgICAgICBpZiAoIHJlZiAkWE1MRGF0YS0+eyRJdGVtS2V5fSBlcSAnQVJSQVknICkgewogICAgICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgICAgICAgICAgZm9yIG15ICRBcnJheUl0ZW0gKCBAeyAkWE1MRGF0YS0+eyRJdGVtS2V5fSB9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbiBmb3IgZWFjaCBhcnJheSBpdGVtCiAgICAgICAgICAgICAgICAgICAgbXkgJFhNTERhdGFDaGVjayA9ICRTZWxmLT5fQ2hlY2tTZWFyY2hYTUxEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uID0+ICREZWZJdGVtLT57U3VifSwKICAgICAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICA9PiAkQXJyYXlJdGVtLAogICAgICAgICAgICAgICAgICAgICAgICBQYXJlbnQgICAgID0+ICRQYXJlbnQgLiAkSXRlbUtleSAuICJbJENvdW50ZXJdLT4iLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFhNTERhdGFDaGVjay0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFhNTERhdGFDaGVjazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIHJlZiAkWE1MRGF0YS0+eyRJdGVtS2V5fSBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAgICAgICAgIG15ICRYTUxEYXRhQ2hlY2sgPSAkU2VsZi0+X0NoZWNrU2VhcmNoWE1MRGF0YSgKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uID0+ICREZWZJdGVtLT57U3VifSwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgID0+ICRYTUxEYXRhLT57JEl0ZW1LZXl9LAogICAgICAgICAgICAgICAgICAgIFBhcmVudCAgICAgPT4gJFBhcmVudCAuICRJdGVtS2V5IC4gJy0+JywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkWE1MRGF0YUNoZWNrLT57U3VjY2Vzc30gKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRYTUxEYXRhQ2hlY2s7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzdGFydCByZWN1c3JzaW9uCiAgICAgICAgICAgICAgICBteSAkWE1MRGF0YUNoZWNrID0gJFNlbGYtPl9DaGVja1NlYXJjaFhNTERhdGEoCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgICAgICAgICBQYXJlbnQgICAgID0+ICRQYXJlbnQgLiAkSXRlbUtleSAuICctPicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJFhNTERhdGFDaGVjay0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkWE1MRGF0YUNoZWNrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfTsKfQoKPWhlYWQyIF9DaGVja1ZhbHVlKCkKCmNoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgdmFsaWQuCgogICAgbXkgJFZhbHVlQ2hlY2sgPSAkQ29tbW9uT2JqZWN0LT5fQ2hlY2tWYWx1ZSgKICAgICAgICBWYWx1ZSAgID0+ICRWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICMgJFZhbHVlIGNvdWxkIGJlIGEgc3RyaW5nLCBhIHRpbWUgc3RhbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIG5hbWUsIG9yIGEgaW50ZWdlcgogICAgICAgIElucHV0ICAgPT4gJElucHV0RGVmaW5pdGlvbkhhc2hSZWYsICAgICAgIyBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZWxlbWVudCBpbnB1dCBleHRyYWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBmcm9tIHRoZSBDb25maWd1cmF0aW9uIEl0ZW0gZGVmaW5pdGlvbiBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBmb3IgZWFjaCB2YWx1ZQogICAgICAgIEl0ZW1LZXkgPT4gJ3NvbWUga2V5JywgICAgICAgICAgICAgICAgICAgIyBUaGUgbmFtZSBvZiB0aGUgdmFsdWUgYXMgc2VudCBpbiB0aGUgU09BUAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHJlcXVlc3QKICAgICAgICBQYXJlbnQgID0+ICdzb2VtIHBhcmVudCBrZXktPicsICAgICAgICAgICMgVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBmb2xsb3dlZCBieSAtPiBvciBlbXB0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIGZvciByb290IGtleSBpdGVtcwogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICRWYWx1ZUNoZWNrID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBldmVyeXRoaW5nIGlzIE9LCiAgICB9CgogICAgJFZhbHVlQ2hlY2sgPSB7CiAgICAgICAgRXJyb3JDb2RlICAgID0+ICdGdW5jdGlvbi5FcnJvcicsICAgICAgICAjIGlmIGVycm9yCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdFcnJvciBkZXNjcmlwdGlvbicsCiAgICB9Cgo9Y3V0CgpzdWIgX0NoZWNrVmFsdWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFyZW50ICA9ICRQYXJhbXtQYXJlbnR9OwogICAgbXkgJEl0ZW1LZXkgPSAkUGFyYW17SXRlbUtleX07CgogICAgaWYgKCAkUGFyYW17SW5wdXR9LT57VHlwZX0gZXEgJ1RleHQnIHx8ICRQYXJhbXtJbnB1dH0tPntUeXBlfSBlcSAnVGV4dEFyZWEnICkgewoKICAgICAgICAjIHJ1biBUZXh0IHZhbGlkYXRpb25zCiAgICAgICAgaWYgKCAhJFNlbGYtPlZhbGlkYXRlSW5wdXRUZXh0KCVQYXJhbSkgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIHZhbHVlIgogICAgICAgICAgICAgICAgICAgIC4gIiBleGNlZGVzIHRoZSBtYXhpdW0gbGVuZ3RoISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17SW5wdXR9LT57VHlwZX0gZXEgJ0RhdGUnICkgewoKICAgICAgICAjIHJ1biBEYXRlIHZhbGlkYXRpb25zCiAgICAgICAgaWYgKCAhJFNlbGYtPlZhbGlkYXRlSW5wdXREYXRlKCVQYXJhbSkgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIHZhbHVlIgogICAgICAgICAgICAgICAgICAgIC4gIiBpcyBub3QgYSB2YWxpZCBEYXRlIGZvcm1hdCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFBhcmFte0lucHV0fS0+e1R5cGV9IGVxICdEYXRlVGltZScgKSB7CgogICAgICAgICMgcnVuIERhdGVUaW1lIHZhbGlkYXRpb25zCiAgICAgICAgaWYgKCAhJFNlbGYtPlZhbGlkYXRlSW5wdXREYXRlVGltZSglUGFyYW0pICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+JFBhcmVudCRJdGVtS2V5IHBhcmFtZXRlciB2YWx1ZSIKICAgICAgICAgICAgICAgICAgICAuICIgaXMgbm90IGEgdmFsaWQgRGF0ZVRpbWUgZm9ybWF0ISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17SW5wdXR9LT57VHlwZX0gZXEgJ0N1c3RvbWVyJyApIHsKCiAgICAgICAgIyBydW4gQ3VzdG9tZXIgdmFsaWRhdGlvbnMKICAgICAgICBpZiAoICEkU2VsZi0+VmFsaWRhdGVJbnB1dEN1c3RvbWVyKCVQYXJhbSkgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIHZhbHVlIgogICAgICAgICAgICAgICAgICAgIC4gIiBpcyBub3QgYSB2YWxpZCBjdXN0b21lciEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFBhcmFte0lucHV0fS0+e1R5cGV9IGVxICdDdXN0b21lckNvbXBhbnknICkgewoKICAgICAgICAjIHJ1biBDdXN0b21lckNvbXBhbnkgdmFsaWRhdGlvbnMKICAgICAgICBpZiAoICEkU2VsZi0+VmFsaWRhdGVJbnB1dEN1c3RvbWVyQ29tcGFueSglUGFyYW0pICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+JFBhcmVudCRJdGVtS2V5IHBhcmFtZXRlciB2YWx1ZSIKICAgICAgICAgICAgICAgICAgICAuICIgaXMgbm90IGEgdmFsaWQgY3VzdG9tZXIgY29tcGFueSEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFBhcmFte0lucHV0fS0+e1R5cGV9IGVxICdJbnRlZ2VyJyApIHsKCiAgICAgICAgIyBydW4gSW50ZWdlciB2YWxpZGF0aW9ucwogICAgICAgIGlmICggISRTZWxmLT5WYWxpZGF0ZUlucHV0SW50ZWdlciglUGFyYW0pICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+JFBhcmVudCRJdGVtS2V5IHBhcmFtZXRlciB2YWx1ZSIKICAgICAgICAgICAgICAgICAgICAuICIgaXMgbm90IGEgdmFsaWQgSW50ZWdlciBvciBvdXQgb2YgcmFuZ2UhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtJbnB1dH0tPntUeXBlfSBlcSAnR2VuZXJhbENhdGFsb2cnICkgewoKICAgICAgICAjIHJ1biBHZW5lcmFsIENhdGFsb2cgdmFsaWRhdGlvbnMKICAgICAgICBpZiAoICEkU2VsZi0+VmFsaWRhdGVJbnB1dEdlbmVyYWxDYXRhbG9nKCVQYXJhbSkgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT4kUGFyZW50JEl0ZW1LZXkgcGFyYW1ldGVyIHZhbHVlIgogICAgICAgICAgICAgICAgICAgIC4gIiBpcyBub3QgYSB2YWxpZCBmb3IgR2VuZXJhbCBDYXRhbG9nICckUGFyYW17SW5wdXR9LT57Q2xhc3N9JyEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIFRoZSB0eXBlIGlzIGR1bW15LCBkbyBub3RoaW5nCiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgX0Zvcm1hdFNlYXJjaFhNTERhdGEoKQoKQ3JlYXRlIGEgWE1MRGF0YSBzdWl0YWJsZSBmb3IgQ29uZmlnSXRlbVNlYWNoLgoKICAgIG15ICROZXdYTUxEYXRhID0gJE9wZXJhdGlvbk9iamVjdC0+X0Zvcm1hdFNlYXJjaFhNTERhdGEoCiAgICAgICAgWE1MRGF0YSAgICA9PiAkWE1MRGF0YUhhc2hSZWYsCiAgICAgICAgQ2hpbGQgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgIyBvciAwLCBvcHRpb25hbAogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICROZXdYTUxEYXRhID0gJFhNTERhdGFIYXNoUmVmLCAgICAgICAgICAgICAgICAgICMgc3VpdGFibGUgZm9yIHZlcnNpb24gYWRkCgo9Y3V0CgpzdWIgX0Zvcm1hdFNlYXJjaFhNTERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkWE1MRGF0YSA9ICRQYXJhbXtYTUxEYXRhfTsKICAgIG15ICRQYXJlbnQgID0gJFBhcmFte1BhcmVudH0gfHwgJyc7CiAgICBteSAkQ2hpbGQgICA9ICRQYXJhbXtDaGlsZH07CgogICAgbXkgJE5ld1hNTERhdGEgPSAkUGFyYW17TmV3WE1MRGF0YX0gfHwge307CgogICAgZm9yIG15ICRSb290S2V5ICggc29ydCBrZXlzICV7JFhNTERhdGF9ICkgewogICAgICAgIGlmICggcmVmICRYTUxEYXRhLT57JFJvb3RLZXl9IGVxICdBUlJBWScgKSB7CgogICAgICAgICAgICBmb3IgbXkgJEFycmF5SXRlbSAoIEB7ICRYTUxEYXRhLT57JFJvb3RLZXl9IH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoIHJlZiAkQXJyYXlJdGVtIGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBleHRyYWN0IHRoZSByb290IGtleSBmcm9tIHRoZSBoYXNoIGFuZCBhc3NpbmcgaXQgdG8gY29udGVudCBrZXkKICAgICAgICAgICAgICAgICAgICBteSAkQ29udGVudCA9IGRlbGV0ZSAkQXJyYXlJdGVtLT57JFJvb3RLZXl9OwoKICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAgICAgICAgIG15ICROZXdYTUxEYXRhUGFydCA9ICRTZWxmLT5fRm9ybWF0U2VhcmNoWE1MRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSA9PiAkQXJyYXlJdGVtLAogICAgICAgICAgICAgICAgICAgICAgICBQYXJlbnQgID0+ICRQYXJlbnQgLiAkUm9vdEtleSAuICc6OicsCiAgICAgICAgICAgICAgICAgICAgICAgIENoaWxkICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJENvbnRlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkTmV3WE1MRGF0YS0+eyAkUGFyZW50IC4gJFJvb3RLZXkgfSB9LCAkQ29udGVudDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYXNzYW1ibGUgdGhlIGZpbmFsIHZhbHVlIGZyb20gdGhlIHBhcnRzCiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICROZXdLZXkgKCAleyROZXdYTUxEYXRhUGFydH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIEB7ICROZXdYTUxEYXRhUGFydC0+eyROZXdLZXl9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICROZXdYTUxEYXRhLT57JE5ld0tleX0gfSwgJEl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoIHJlZiAkQXJyYXlJdGVtIGVxICcnICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJE5ld1hNTERhdGEtPnsgJFBhcmVudCAuICRSb290S2V5IH0gfSwgJEFycmF5SXRlbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCByZWYgJFhNTERhdGEtPnskUm9vdEtleX0gZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IHRoZSByb290IGtleSBmcm9tIHRoZSBoYXNoIGFuZCBhc3NpbmcgaXQgdG8gY29udGVudCBrZXkKICAgICAgICAgICAgbXkgJENvbnRlbnQgPSBkZWxldGUgJFhNTERhdGEtPnskUm9vdEtleX0tPnskUm9vdEtleX07CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICBteSAkTmV3WE1MRGF0YVBhcnQgPSAkU2VsZi0+X0Zvcm1hdFNlYXJjaFhNTERhdGEoCiAgICAgICAgICAgICAgICBYTUxEYXRhID0+ICRYTUxEYXRhLT57JFJvb3RLZXl9LAogICAgICAgICAgICAgICAgUGFyZW50ICA9PiAkUGFyZW50IC4gJFJvb3RLZXkgLiAiOjoiLAogICAgICAgICAgICAgICAgQ2hpbGQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRDb250ZW50KSB7CiAgICAgICAgICAgICAgICBwdXNoIEB7ICROZXdYTUxEYXRhLT57ICRQYXJlbnQgLiAkUm9vdEtleSB9IH0sICRDb250ZW50OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFzc2FtYmxlIHRoZSBmaW5hbCB2YWx1ZSBmcm9tIHRoZSBwYXJ0CiAgICAgICAgICAgICV7JE5ld1hNTERhdGF9ID0gKCAleyROZXdYTUxEYXRhfSwgJXskTmV3WE1MRGF0YVBhcnR9ICk7CiAgICAgICAgfQoKICAgICAgICBlbHNpZiAoIHJlZiAkWE1MRGF0YS0+eyRSb290S2V5fSBlcSAnJyApIHsKICAgICAgICAgICAgcHVzaCBAeyAkTmV3WE1MRGF0YS0+eyAkUGFyZW50IC4gJFJvb3RLZXkgfSB9LCAkWE1MRGF0YS0+eyRSb290S2V5fTsKICAgICAgICB9CiAgICB9CgogICAgIyByZXR1cm4gb25seSB0aGUgcGFydCBvbiByZWN1cnNpb24KICAgIGlmICgkQ2hpbGQpIHsKICAgICAgICByZXR1cm4gJE5ld1hNTERhdGE7CiAgICB9CgogICAgIyByZXR1cm4gdGhlIGNvbXBsZXRlIFhNTERhdGEgYXMgbmVlZGVkIGZvciBDb25maWdJdGVtU2VhcmNoCiAgICBteSBAUmV0dXJuU3RydWN0dXJlOwogICAgZm9yIG15ICRTZWFyY2hQYXJhbSAoIHNvcnQga2V5cyAleyROZXdYTUxEYXRhfSApIHsKICAgICAgICBteSAkU2VhcmNoS2V5ID0gJFNlYXJjaFBhcmFtOwogICAgICAgICRTZWFyY2hLZXkgPX4gc3sgOjogfXtcJ1x9WyVdXHtcJ314bXNnOwogICAgICAgICRTZWFyY2hLZXkgPSAiWzFdeydWZXJzaW9uJ31bMV17JyRTZWFyY2hLZXknfVslXXsnQ29udGVudCd9IjsKICAgICAgICBwdXNoIEBSZXR1cm5TdHJ1Y3R1cmUsIHsKICAgICAgICAgICAgJFNlYXJjaEtleSA9PiAkTmV3WE1MRGF0YS0+eyRTZWFyY2hQYXJhbX0sCiAgICAgICAgfTsKICAgIH0KICAgIHJldHVybiBcQFJldHVyblN0cnVjdHVyZTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtVXBkYXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpNaWdyYXRpb25zOjpPVFJTNjo6U3lzQ29uZmlnKQoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb21tb24KICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb21tb24KKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29uZmlnSXRlbVVwZGF0ZSAtIEdlbmVyaWNJbnRlcmZhY2UgQ29uZmlnSXRlbSBDb25maWdJdGVtVXBkYXRlIE9wZXJhdGlvbiBiYWNrZW5kCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRGVidWdnZXJPYmplY3QgV2Vic2VydmljZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICAjIGRlZmluZSBvcGVyYXRpb24gbmFtZQogICAgJFNlbGYtPntPcGVyYXRpb25OYW1lfSA9ICdDb25maWdJdGVtVXBkYXRlJzsKCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0dlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbVVwZGF0ZScpOwoKICAgICRTZWxmLT57Q29uZmlnfS0+e0RlZmF1bHRWYWx1ZX0gPSAnTm90IERlZmluZWQnOwoKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICMgZ2V0IGEgbGlzdCBvZiBhbGwgY29uZmlnIGl0ZW0gY2xhc3NlcwogICAgJFNlbGYtPntDbGFzc0xpc3R9ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntDbGFzc0xpc3R9ICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57RGVidWdnZXJPYmplY3R9LT5FcnJvcigKICAgICAgICAgICAgU3VtbWFyeSA9PiAnRXJyb3Igd2hlbiB0cnlpbmcgdG8gZ2V0IGNsYXNzIGxpc3Rpbmcgb2YgSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgYSBsaXN0IG9mIGFsbCBpbmNpc3RhdGVzCiAgICAkU2VsZi0+e0luY2lTdGF0ZUxpc3R9ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkU2VsZi0+e0luY2lTdGF0ZUxpc3R9ICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57RGVidWdnZXJPYmplY3R9LT5FcnJvcigKICAgICAgICAgICAgU3VtbWFyeSA9PiAnRXJyb3Igd2hlbiB0cnlpbmcgdG8gZ2V0IGluY2lkZW50IHN0YXRlIGxpc3Rpbmcgb2YnCiAgICAgICAgICAgICAgICAuICcgSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBhIGxpc3Qgb2YgYWxsIGRlcGxzdGF0ZXMKICAgICRTZWxmLT57RGVwbFN0YXRlTGlzdH0gPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntEZXBsU3RhdGVMaXN0fSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0RlYnVnZ2VyT2JqZWN0fS0+RXJyb3IoCiAgICAgICAgICAgIFN1bW1hcnkgPT4gJ0Vycm9yIHdoZW4gdHJ5aW5nIHRvIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0aW5nIG9mJwogICAgICAgICAgICAgICAgLiAnIElUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFsc28gcHJvdmlkZSB0aGUgY2xhc3NsaXN0IGluIHJldmVyc2VkIGZvcm0gZm9yIGVhc2llciByZXZlcnNlIGxvb2t1cHMKICAgIG15ICVSZXZlcnNlQ2xhc3NMaXN0ID0gcmV2ZXJzZSAleyAkU2VsZi0+e0NsYXNzTGlzdH0gfTsKICAgICRTZWxmLT57UmV2ZXJzZUNsYXNzTGlzdH0gPSBcJVJldmVyc2VDbGFzc0xpc3Q7CgogICAgIyBhbHNvIHByb3ZpZGUgdGhlIGluY2lzdGF0ZWxpc3QgaW4gcmV2ZXJzZWQgZm9ybSBmb3IgZWFzaWVyIHJldmVyc2UgbG9va3VwcwogICAgbXkgJVJldmVyc2VJbmNpU3RhdGVMaXN0ID0gcmV2ZXJzZSAleyAkU2VsZi0+e0luY2lTdGF0ZUxpc3R9IH07CiAgICAkU2VsZi0+e1JldmVyc2VJbmNpU3RhdGVMaXN0fSA9IFwlUmV2ZXJzZUluY2lTdGF0ZUxpc3Q7CgogICAgIyBhbHNvIHByb3ZpZGUgdGhlIGRlcGxzdGF0ZWxpc3QgaW4gcmV2ZXJzZWQgZm9ybSBmb3IgZWFzaWVyIHJldmVyc2UgbG9va3VwcwogICAgbXkgJVJldmVyc2VEZXBsU3RhdGVMaXN0ID0gcmV2ZXJzZSAleyAkU2VsZi0+e0RlcGxTdGF0ZUxpc3R9IH07CiAgICAkU2VsZi0+e1JldmVyc2VEZXBsU3RhdGVMaXN0fSA9IFwlUmV2ZXJzZURlcGxTdGF0ZUxpc3Q7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKCnBlcmZvcm0gQ29uZmlnSXRlbVVwZGF0ZSBPcGVyYXRpb24uIFRoaXMgd2lsbCByZXR1cm4gdGhlIHVwZGF0ZWQgY29uZmlnIGl0ZW0gbnVtYmVyLgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAnc29tZSBhZ2VudCBsb2dpbicsICAgICAgICAgICAgICAgICMgVXNlckxvZ2luIG9yIFNlc3Npb25JRCBpcwogICAgICAgICAgICBTZXNzaW9uSUQgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgcmVxdWlyZWQKCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAnc29tZSBwYXNzd29yZCcsICAgICAgICAgICAgICAgICAgICMgaWYgVXNlckxvZ2luIGlzIHNlbnQgdGhlbiBQYXNzd29yZCBpcyByZXF1aXJlZAoKICAgICAgICAgICAgUmVwbGFjZUV4aXN0aW5nRGF0YSA9PiAwLCAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgMCBvciAxLCBkZWZhdWx0IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHdpbGwgcmVwbGFjZSB0aGUgZXhpc3RpbmcgWE1MIGRhdGEgYW5kIGF0dGFjaG1lbnRzCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCgogICAgICAgICAgICBDb25maWdJdGVtICAgPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb25maWcgSXRlbSBDbGFzcycsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RoZSBOYW1lJywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnZGVwbG95bWVudCBzdGF0ZScsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ2luY2lkZW50IHN0YXRlJywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiAkQXJyYXlIYXNoUmVmLCAgICAgICAgICAgICAgICAgIyBpdCBkZXBlbmRzIG9uIHRoZSBDb25maWd1cmF0aW9uIEl0ZW0gY2xhc3MgYW5kIGRlZmluaXRpb24KCiAgICAgICAgICAgICAgICBBdHRhY2htZW50ID0+IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdjb250ZW50JyAgICAgICAgICAgICMgYmFzZTY0IGVuY29kZWQKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3NvbWUgY29udGVudCB0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnc29tZSBmaW5lIG5hbWUnCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAjIC4uLgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICMgb3IKICAgICAgICAgICAgICAgICNBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgICMgICBDb250ZW50ICAgICA9PiAnY29udGVudCcKICAgICAgICAgICAgICAgICMgICBDb250ZW50VHlwZSA9PiAnc29tZSBjb250ZW50IHR5cGUnCiAgICAgICAgICAgICAgICAjICAgRmlsZW5hbWUgICAgPT4gJ3NvbWUgZmluZSBuYW1lJwogICAgICAgICAgICAgICAgI30sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlICAgID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGRhdGEgcGF5bG9hZCBhZnRlciBPcGVyYXRpb24KICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywgICAgICAgICAgICAgICAgICAgICMgQ29uZmlndXJhdGlvbiBJdGVtICBJRCBudW1iZXIgaW4gT1RSUzo6SVRTTSAoU2VydmljZSBkZXNrIHN5c3RlbSkKICAgICAgICAgICAgTnVtYmVyICAgICAgID0+IDIzMjQ0NTQzMjMzMjIgICAgICAgICAgICMgQ29uZmlndXJhdGlvbiBJdGVtICBOdW1iZXIgaW4gT1RSUzo6SVRTTSAoU2VydmljZSBkZXNrIHN5c3RlbSkKICAgICAgICAgICAgRXJyb3IgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdWxkIG5vdCByZXR1cm4gZXJyb3JzCiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDb25maWdJdGVtVXBkYXRlLkVycm9yQ29kZScKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0Vycm9yIERlc2NyaXB0aW9uJwogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+SW5pdCgKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1dlYnNlcnZpY2UuSW52YWxpZENvbmZpZ3VyYXRpb24nLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKAogICAgICAgICEkUGFyYW17RGF0YX0tPntVc2VyTG9naW59CiAgICAgICAgJiYgISRQYXJhbXtEYXRhfS0+e1Nlc3Npb25JRH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9Lk1pc3NpbmdQYXJhbWV0ZXIiLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1VzZXJMb2dpbn0gKSB7CgogICAgICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1Bhc3N3b3JkfSApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9Lk1pc3NpbmdQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBQYXNzd29yZCBvciBTZXNzaW9uSUQgaXMgcmVxdWlyZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBhdXRoZW50aWNhdGUgdXNlcgogICAgbXkgKCAkVXNlcklELCAkVXNlclR5cGUgKSA9ICRTZWxmLT5BdXRoKCVQYXJhbSk7CgogICAgaWYgKCAhJFVzZXJJRCApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uQXV0aEZhaWwiLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IFVzZXIgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIGhhc2hlcwogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZ0l0ZW0pKSB7CiAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtEYXRhfS0+eyROZWVkZWR9ICkgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogJE5lZWRlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZyBvciBub3QgdmFsaWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgaXRlbXMKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtSUQpKSB7CiAgICAgICAgaWYgKCAhSXNQb3NpdGl2ZUludGVnZXIoICRQYXJhbXtEYXRhfS0+eyROZWVkZWR9ICkgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogJE5lZWRlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZyBvciBub3QgdmFsaWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBmb3IgdmFsaWQgQ29uZmlnSXRlbUlECiAgICBteSAkQ29uZmlnSXRlbUlEID0gJFBhcmFte0RhdGF9LT57Q29uZmlnSXRlbUlEfTsKCiAgICAjIGdldCBjb25maWcgaXRlbSBvYmplY3QKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgIyBnZXQgQ29uZmlnSXRlbSBkYXRhCiAgICBteSAkQ29uZmlnSXRlbURhdGEgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJENvbmZpZ0l0ZW1EYXRhKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbUlEIGlzIGludmFsaWQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgaXNvbGF0ZSBjb25maWcgaXRlbSBwYXJhbWV0ZXIKICAgIG15ICRDb25maWdJdGVtID0gJFBhcmFte0RhdGF9LT57Q29uZmlnSXRlbX07CgogICAgIyByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyRDb25maWdJdGVtfSApIHsKICAgICAgICBpZiAoIHJlZiAkQXR0cmlidXRlIG5lICdIQVNIJyAmJiByZWYgJEF0dHJpYnV0ZSBuZSAnQVJSQVknICkgewoKICAgICAgICAgICAgIyByZW1vdmUgbGVhZGluZyBzcGFjZXMKICAgICAgICAgICAgJENvbmZpZ0l0ZW0tPnskQXR0cmlidXRlfSA9fiBze1xBXHMrfXt9OwoKICAgICAgICAgICAgIyByZW1vdmUgdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgICAgICRDb25maWdJdGVtLT57JEF0dHJpYnV0ZX0gPX4gc3tccytcen17fTsKICAgICAgICB9CiAgICB9CgogICAgIyBpZiB0aGUgcGFyYW1ldGVyIFJlcGxhY2VFeGlzdGluZ0RhdGEgaXMgc2V0IHRvIDAgb3IgaWYgaXQgaXMgbWlzc2luZwogICAgIyB0aGVuIG1pc3NpbmcsIGVtcHR5IG9yIG9ubHkgcGFydGlhbGx5IGRlZmluZWQgQ0lYTUxEYXRhIHBhcmFtZXRlciBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkCiAgICAjIGluIHRoaXMgY2FzZSB0aGUgZXhpc3RpbmcgQ0lYTUxEYXRhIGlzIHVzZWQgZm9yIHRoZSBtaXNzaW5nIHBhcnRzLgogICAgIyBBIG1pc3NpbmcgKHVuZGVmaW5lZCkgQ0lYTUxEYXRhIGF0dHJpYnV0ZSBoYXMgdGhlIHNhbWUgZWZmZWN0CiAgICAjIHRoZSBSZXBsYWNlRXhpc3RpbmdEYXRhIHBhcmFtZXRlciBhbHNvIGluZmx1ZW5jZXMgaWYgZXhpc3RpbmcgYXR0YWNobWVudHMgc2hvdWxkIGJlIHJlcGxhY2VkIG9yIGtlcHQKICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1JlcGxhY2VFeGlzdGluZ0RhdGF9IHx8ICFkZWZpbmVkICRDb25maWdJdGVtLT57Q0lYTUxEYXRhfSApIHsKCiAgICAgICAgIyBzZXQgdG8gZW1wdHkgaGFzaCByZWZlcmVuY2UgaWYgZW1wdHkgb3Igbm90IGRlZmluZWQKICAgICAgICAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX0gfHw9IHt9OwoKICAgICAgICAjIENJWE1MRGF0YSBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UKICAgICAgICBpZiAoIHJlZiAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9Lk1pc3NpbmdQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDb25maWdJdGVtLT5DSVhNTERhdGEgaXMgbWlzc2luZyBvciBpbnZhbGlkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBsYXRlc3QgdmVyc2lvbiBkYXRhIGZyb20gY29uZmlnaXRlbQogICAgICAgIG15ICRWZXJzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkVmVyc2lvbikgKSB7CgogICAgICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gJ0NvdWxkIG5vdCBnZXQgQ29uZmlnSXRlbSBkYXRhJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtVXBkYXRlOjpSdW4oKSc7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICckU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiAkRXJyb3JNZXNzYWdlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVtb3ZlIHVubmVlZGVkIGl0ZW1zCiAgICAgICAgZGVsZXRlICRWZXJzaW9uLT57Q2xhc3NJRH07CiAgICAgICAgZGVsZXRlICRWZXJzaW9uLT57Q3VyRGVwbFN0YXRlSUR9OwogICAgICAgIGRlbGV0ZSAkVmVyc2lvbi0+e0N1ckluY2lTdGF0ZUlEfTsKICAgICAgICBkZWxldGUgJFZlcnNpb24tPntEZXBsU3RhdGVJRH07CiAgICAgICAgZGVsZXRlICRWZXJzaW9uLT57SW5jaVN0YXRlSUR9OwogICAgICAgIGRlbGV0ZSAkVmVyc2lvbi0+e1hNTERlZmluaXRpb25JRH07CgogICAgICAgIG15ICREZWZpbml0aW9uID0gZGVsZXRlICRWZXJzaW9uLT57WE1MRGVmaW5pdGlvbn07CgogICAgICAgIG15ICRGb3JtYXRlZFhNTERhdGEgPSAkU2VsZi0+SW52ZXJ0Rm9ybWF0WE1MRGF0YSgKICAgICAgICAgICAgWE1MRGF0YSA9PiAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufSwKICAgICAgICApOwoKICAgICAgICBteSAkUmVwbGFjZWRYTUxEYXRhID0gJFNlbGYtPkludmVydFJlcGxhY2VYTUxEYXRhKAogICAgICAgICAgICBYTUxEYXRhICAgID0+ICRGb3JtYXRlZFhNTERhdGEsCiAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb24sCiAgICAgICAgKTsKCiAgICAgICAgJFZlcnNpb24tPntYTUxEYXRhfSA9ICRSZXBsYWNlZFhNTERhdGE7CgogICAgICAgICMgcmVuYW1lIFhNTERhdGEgc2luY2UgU09BUCB0cmFuc3BvcnQgY29tcGxhaW5zIGFib3V0IFhNTCBwcmVmaXggb24gbmFtZXMKICAgICAgICAkVmVyc2lvbi0+e0NJWE1MRGF0YX0gPSBkZWxldGUgJFZlcnNpb24tPntYTUxEYXRhfTsKCiAgICAgICAgIyBtZXJnZSBleGlzdGluZyBkYXRhIGFuZCBuZXcgZGF0YSBmcm9tIHBhcmFtZXRlcnMKICAgICAgICAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX0gPSB7CiAgICAgICAgICAgICV7ICRWZXJzaW9uLT57Q0lYTUxEYXRhfSB9LAogICAgICAgICAgICAleyAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX0gfSwKICAgICAgICB9OwogICAgfQoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX0gKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhIGlzIGVtcHR5IG9yIGludmFsaWQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBmb3IgQ0lYTUxEYXRhCiAgICAkU2VsZi0+X0NsZWFuWE1MRGF0YSggWE1MRGF0YSA9PiAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX0gKTsKCiAgICAjIGNoZWNrIENvbmZpZ0l0ZW0gYXR0cmlidXRlIHZhbHVlcwogICAgbXkgJENvbmZpZ0l0ZW1DaGVjayA9ICRTZWxmLT5fQ2hlY2tDb25maWdJdGVtKCBDb25maWdJdGVtID0+ICRDb25maWdJdGVtICk7CgogICAgaWYgKCAhJENvbmZpZ0l0ZW1DaGVjay0+e1N1Y2Nlc3N9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoICV7JENvbmZpZ0l0ZW1DaGVja30gKTsKICAgIH0KCiAgICAjIGNoZWNrIHVwZGF0ZSBwZXJtaXNzaW9ucwogICAgbXkgJFBlcm1pc3Npb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBTY29wZSAgID0+ICdDbGFzcycsCiAgICAgICAgQ2xhc3NJRCA9PiAkU2VsZi0+e1JldmVyc2VDbGFzc0xpc3R9LT57ICRDb25maWdJdGVtLT57Q2xhc3N9IH0sCiAgICAgICAgVXNlcklEICA9PiAkVXNlcklELAogICAgICAgIFR5cGUgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICApOwoKICAgIGlmICggISRQZXJtaXNzaW9uICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5BY2Nlc3NEZW5pZWQiLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENhbiBub3QgdXBkYXRlIGNvbmZpZ3VyYXRpb24gaXRlbXMhIiwKICAgICAgICApOwogICAgfQoKICAgICMgaGFuZGxlIGF0dGFjaG1lbnRzCiAgICBteSAkQXR0YWNobWVudDsKICAgIG15IEBBdHRhY2htZW50TGlzdDsKCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0RhdGF9LT57Q29uZmlnSXRlbX0tPntBdHRhY2htZW50fSApIHsKCiAgICAgICAgIyBpc29sYXRlIEF0dGFjaG1lbnQgcGFyYW1ldGVyCiAgICAgICAgJEF0dGFjaG1lbnQgPSBkZWxldGUgJFBhcmFte0RhdGF9LT57Q29uZmlnSXRlbX0tPntBdHRhY2htZW50fTsKCiAgICAgICAgIyBob21vbG9nYXRlIGltcHV0IHRvIGFycmF5CiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkQXR0YWNobWVudCkgKSB7CiAgICAgICAgICAgIHB1c2ggQEF0dGFjaG1lbnRMaXN0LCAkQXR0YWNobWVudDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoJEF0dGFjaG1lbnQpICkgewogICAgICAgICAgICBAQXR0YWNobWVudExpc3QgPSBAeyRBdHRhY2htZW50fTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQ29uZmlnSXRlbS0+QXR0YWNobWVudCBwYXJhbWV0ZXIgaXMgaW52YWxpZCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBBdHRhY2htZW50IGludGVybmFsIHN0cnVjdHVyZQogICAgICAgIGZvciBteSAkQXR0YWNobWVudEl0ZW0gKEBBdHRhY2htZW50TGlzdCkgewogICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkQXR0YWNobWVudEl0ZW0pICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDb25maWdJdGVtLT5BdHRhY2htZW50IHBhcmFtZXRlciBpcyBpbnZhbGlkISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXskQXR0YWNobWVudEl0ZW19ICkgewogICAgICAgICAgICAgICAgaWYgKCByZWYgJEF0dHJpYnV0ZSBuZSAnSEFTSCcgJiYgcmVmICRBdHRyaWJ1dGUgbmUgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICAgICAgICAgI3JlbW92ZSBsZWFkaW5nIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50SXRlbS0+eyRBdHRyaWJ1dGV9ID1+IHN7XEFccyt9e307CgogICAgICAgICAgICAgICAgICAgICNyZW1vdmUgdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnRJdGVtLT57JEF0dHJpYnV0ZX0gPX4gc3tccytcen17fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBBdHRhY2htZW50IGF0dHJpYnV0ZSB2YWx1ZXMKICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnRDaGVjayA9ICRTZWxmLT5fQ2hlY2tBdHRhY2htZW50KCBBdHRhY2htZW50ID0+ICRBdHRhY2htZW50SXRlbSApOwoKICAgICAgICAgICAgaWYgKCAhJEF0dGFjaG1lbnRDaGVjay0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvciggJXskQXR0YWNobWVudENoZWNrfSApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkU2VsZi0+X0NvbmZpZ0l0ZW1VcGRhdGUoCiAgICAgICAgQ29uZmlnSXRlbSAgICAgICAgICA9PiAkQ29uZmlnSXRlbSwKICAgICAgICBDb25maWdJdGVtSUQgICAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgQXR0YWNobWVudExpc3QgICAgICA9PiBcQEF0dGFjaG1lbnRMaXN0LAogICAgICAgIFJlcGxhY2VFeGlzdGluZ0RhdGEgPT4gJFBhcmFte0RhdGF9LT57UmVwbGFjZUV4aXN0aW5nRGF0YX0sCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAkVXNlcklELAogICAgKTsKfQoKPWhlYWQxIElOVEVSTkFMIElOVEVSRkFDRQoKPWhlYWQyIF9DbGVhblhNTERhdGEoKQoKcmVtb3ZlZCB0cmFpbGluZyBhbmQgbGVhZGluZyB3aGl0ZSBzcGFjZXMgaW4gdGhlIFhNTERhdGEuCgogICAgbXkgJFhNTERhdGFDbGVhbiA9ICRPcGVyYXRpb25PYmplY3QtPl9DbGVhblhNTERhdGEoCiAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmaW5pdGlvbkFycmF5UmVmLCAgICAgICAgICAjIENvbmZpZyBJdGVtIERlZmluaXRpb24gb3QganVzdCBwYXJ0IG9mIGl0CiAgICAgICAgWE1MRGF0YSAgICA9PiAkWE1MRGF0YUhhc2hSZWYsCiAgICApOwoKICAgIHJldHVybnM6CgogICAgJFhNTERhdGFDbGVhbiA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgZXZlcnl0aGluZyBpcyBPSwogICAgfQoKICAgICRYTUxEYXRhQ2xlYW4gPSB7CiAgICAgICAgRXJyb3JDb2RlICAgID0+ICdGdW5jdGlvbi5FcnJvcicsICAgICAgICAgICAjIGlmIGVycm9yCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdFcnJvciBkZXNjcmlwdGlvbicsCiAgICB9Cgo9Y3V0CgpzdWIgX0NsZWFuWE1MRGF0YSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRYTUxEYXRhID0gJFBhcmFte1hNTERhdGF9OwoKICAgIEtFWToKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JFhNTERhdGF9ICkgewogICAgICAgIGlmICggcmVmICRYTUxEYXRhLT57JEtleX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgRUxFTUVOVDoKICAgICAgICAgICAgZm9yIG15ICRFbGVtZW50ICggQHsgJFhNTERhdGEtPnskS2V5fSB9ICkgewogICAgICAgICAgICAgICAgaWYgKCByZWYgJEVsZW1lbnQgZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICRTZWxmLT5fQ2xlYW5YTUxEYXRhKCBYTUxEYXRhID0+ICRFbGVtZW50ICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBFTEVNRU5UOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCByZWYgJEVsZW1lbnQgZXEgJycgKSB7CgogICAgICAgICAgICAgICAgICAgICNyZW1vdmUgbGVhZGluZyBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudCA9fiBze1xBXHMrfXt9OwoKICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICRFbGVtZW50ID1+IHN7XHMrXHp9e307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCByZWYgJFhNTERhdGEtPnskS2V5fSBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAkU2VsZi0+X0NsZWFuWE1MRGF0YSggWE1MRGF0YSA9PiAkWE1MRGF0YS0+eyRLZXl9ICk7CiAgICAgICAgICAgIG5leHQgS0VZOwoKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCByZWYgJFhNTERhdGEtPnskS2V5fSBlcSAnJyApIHsKCiAgICAgICAgICAgICMgVE9ETzogVXNlIFN0cmluZ0NsZWFuIGZ1bmN0aW9uIQoKICAgICAgICAgICAgI3JlbW92ZSBsZWFkaW5nIHNwYWNlcwogICAgICAgICAgICAkWE1MRGF0YS0+eyRLZXl9ID1+IHN7XEFccyt9e307CgogICAgICAgICAgICAjcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcwogICAgICAgICAgICAkWE1MRGF0YS0+eyRLZXl9ID1+IHN7XHMrXHp9e307CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0NoZWNrQ29uZmlnSXRlbSgpCgpjaGVja3MgaWYgdGhlIGdpdmVuIGNvbmZpZyBpdGVtIHBhcmFtZXRlcnMgYXJlIHZhbGlkLgoKICAgIG15ICRDb25maWdJdGVtQ2hlY2sgPSAkT3BlcmF0aW9uT2JqZWN0LT5fQ2hlY2tDb25maWdJdGVtKAogICAgICAgIENvbmZpZ0l0ZW0gPT4gJENvbmZpZ0l0ZW0sICAgICAgICAgICAgICAgICAgIyBhbGwgY29uZmlnIGl0ZW0gcGFyYW1ldGVycwogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICRDb25maWdJdGVtQ2hlY2sgPSB7CiAgICAgICAgU3VjY2VzcyA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGV2ZXJ5dGhpbmcgaXMgT0sKICAgIH0KCiAgICAkQ29uZmlnSXRlbUNoZWNrID0gewogICAgICAgIEVycm9yQ29kZSAgICA9PiAnRnVuY3Rpb24uRXJyb3InLCAgICAgICAgICAgIyBpZiBlcnJvcgogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgZGVzY3JpcHRpb24nLAogICAgfQoKPWN1dAoKc3ViIF9DaGVja0NvbmZpZ0l0ZW0gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnSXRlbSA9ICRQYXJhbXtDb25maWdJdGVtfTsKCiAgICAjIGNoZWNrIGNvbmZpZyBpdGVtIGludGVybmFsbHkKICAgIGZvciBteSAkTmVlZGVkIChxdyhDbGFzcyBOYW1lIERlcGxTdGF0ZSBJbmNpU3RhdGUgQ0lYTUxEYXRhKSkgewogICAgICAgIGlmICggISRDb25maWdJdGVtLT57JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uTWlzc2luZ1BhcmFtZXRlciIsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPiROZWVkZWQgcGFyYW1ldGVyIGlzIG1pc3NpbmchIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBDb25maWdJdGVtLT5DbGFzcwogICAgaWYgKCAhJFNlbGYtPlZhbGlkYXRlQ2xhc3MoICV7JENvbmZpZ0l0ZW19ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9LkludmFsaWRQYXJhbWV0ZXIiLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9OiBDb25maWdJdGVtLT5DbGFzcyBwYXJhbWV0ZXIgaXMgaW52YWxpZCEiLAogICAgICAgIH07CiAgICB9CgogICAgIyBjaGVjayBDb25maWdJdGVtLT5EZXBsU3RhdGUKICAgIGlmICggISRTZWxmLT5WYWxpZGF0ZURlcGxTdGF0ZSggJXskQ29uZmlnSXRlbX0gKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkRlcGxTdGF0ZSBwYXJhbWV0ZXIgaXMgaW52YWxpZCEiLAogICAgICAgIH07CiAgICB9CgogICAgIyBjaGVjayBDb25maWdJdGVtLT5EZXBsU3RhdGUKICAgIGlmICggISRTZWxmLT5WYWxpZGF0ZUluY2lTdGF0ZSggJXskQ29uZmlnSXRlbX0gKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBFcnJvckNvZGUgPT4gIiRTZWxmLT57T3BlcmF0aW9uTmFtZX0uSW52YWxpZFBhcmFtZXRlciIsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IENvbmZpZ0l0ZW0tPkluY2lTdGF0ZSBwYXJhbWV0ZXIgaXMgaW52YWxpZCEiLAogICAgICAgIH07CiAgICB9CgogICAgIyBnZXQgbGFzdCBjb25maWcgaXRlbSBkZWZpbnRpb24KICAgIG15ICREZWZpbml0aW9uRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5EZWZpbml0aW9uR2V0KAogICAgICAgIENsYXNzSUQgPT4gJFNlbGYtPntSZXZlcnNlQ2xhc3NMaXN0fS0+eyAkQ29uZmlnSXRlbS0+e0NsYXNzfSB9LAogICAgKTsKCiAgICBteSAkWE1MRGF0YUNoZWNrUmVzdWx0ID0gJFNlbGYtPkNoZWNrWE1MRGF0YSgKICAgICAgICBEZWZpbml0aW9uID0+ICREZWZpbml0aW9uRGF0YS0+e0RlZmluaXRpb25SZWZ9LAogICAgICAgIFhNTERhdGEgICAgPT4gJENvbmZpZ0l0ZW0tPntDSVhNTERhdGF9LAogICAgKTsKCiAgICBpZiAoICEkWE1MRGF0YUNoZWNrUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgcmV0dXJuICRYTUxEYXRhQ2hlY2tSZXN1bHQ7CiAgICB9CgogICAgIyBpZiBldmVyeXRoaW5nIGlzIE9LIHRoZW4gcmV0dXJuIFN1Y2Nlc3MKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfTsKfQoKPWhlYWQyIF9DaGVja0F0dGFjaG1lbnQoKQoKY2hlY2tzIGlmIHRoZSBnaXZlbiBhdHRhY2htZW50IHBhcmFtZXRlciBpcyB2YWxpZC4KCiAgICBteSAkQXR0YWNobWVudENoZWNrID0gJE9wZXJhdGlvbk9iamVjdC0+X0NoZWNrQXR0YWNobWVudCgKICAgICAgICBBdHRhY2htZW50ID0+ICRBdHRhY2htZW50LCAgICAgICAgICAgICAgICAgICMgYWxsIGF0dGFjaG1lbnQgcGFyYW1ldGVycwogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICRBdHRhY2htZW50Q2hlY2sgPSB7CiAgICAgICAgU3VjY2VzcyA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGV2ZXJldGhpbmcgaXMgT0sKICAgIH0KCiAgICAkQXR0YWNobWVudENoZWNrID0gewogICAgICAgIEVycm9yQ29kZSAgICA9PiAnRnVuY3Rpb24uRXJyb3InLCAgICAgICAgICAgIyBpZiBlcnJvcgogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgZGVzY3JpcHRpb24nLAogICAgfQoKPWN1dAoKc3ViIF9DaGVja0F0dGFjaG1lbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQXR0YWNobWVudCA9ICRQYXJhbXtBdHRhY2htZW50fTsKCiAgICAjIGNoZWNrIGF0dGFjaG1lbnQgaXRlbSBpbnRlcm5hbGx5CiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29udGVudCBDb250ZW50VHlwZSBGaWxlbmFtZSkpIHsKICAgICAgICBpZiAoICEkQXR0YWNobWVudC0+eyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICIkU2VsZi0+e09wZXJhdGlvbk5hbWV9Lk1pc3NpbmdQYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIiRTZWxmLT57T3BlcmF0aW9uTmFtZX06IEF0dGFjaG1lbnQtPiROZWVkZWQgIHBhcmFtZXRlciBpcyBtaXNzaW5nISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgQXJ0aWNsZS0+Q29udGVudFR5cGUKICAgIGlmICggJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0gKSB7CgogICAgICAgICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9ID0gbGMgJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX07CgogICAgICAgICMgY2hlY2sgQ2hhcnNldCBwYXJ0CiAgICAgICAgbXkgJENoYXJzZXQgPSAnJzsKICAgICAgICBpZiAoICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9ID1+IC9jaGFyc2V0PS9pICkgewogICAgICAgICAgICAkQ2hhcnNldCA9ICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9OwogICAgICAgICAgICAkQ2hhcnNldCA9fiBzLy4rP2NoYXJzZXQ9KCJ8J3wpKFx3KykvJDIvZ2k7CiAgICAgICAgICAgICRDaGFyc2V0ID1+IHMvInwnLy9nOwogICAgICAgICAgICAkQ2hhcnNldCA9fiBzLyguKz8pOy4qLyQxL2c7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRDaGFyc2V0ICYmICEkU2VsZi0+VmFsaWRhdGVDaGFyc2V0KCBDaGFyc2V0ID0+ICRDaGFyc2V0ICkgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5JbnZhbGlkUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQXR0YWNobWVudC0+Q29udGVudFR5cGUgaXMgaW52YWxpZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBNaW1lVHlwZSBwYXJ0CiAgICAgICAgbXkgJE1pbWVUeXBlID0gJyc7CiAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfSA9fiAvXihcdytcL1x3KykvaSApIHsKICAgICAgICAgICAgJE1pbWVUeXBlID0gJDE7CiAgICAgICAgICAgICRNaW1lVHlwZSA9fiBzLyJ8Jy8vZzsKICAgICAgICB9CgogICAgICAgIGlmICggISRTZWxmLT5WYWxpZGF0ZU1pbWVUeXBlKCBNaW1lVHlwZSA9PiAkTWltZVR5cGUgKSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfS5JbnZhbGlkUGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogQXR0YWNobWVudC0+Q29udGVudFR5cGUgaXMgaW52YWxpZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGlmIGV2ZXJ5dGhpbmcgaXMgT0sgdGhlbiByZXR1cm4gU3VjY2VzcwogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgX0NvbmZpZ0l0ZW1VcGRhdGUoKQoKdXBkYXRlcyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGF0dGFjaG1lbnRzIGlmIHNwZWNpZmllZC4KCiAgICBteSAkUmVzcG9uc2UgPSAkT3BlcmF0aW9uT2JqZWN0LT5fQ29uZmlnSXRlbVVwZGF0ZSgKICAgICAgICBDb25maWdJdGVtSUQgICAgICAgID0+IDEyMywKICAgICAgICBDb25maWdJdGVtICAgICAgICAgID0+ICRDb25maWdJdGVtLCAgICAgICAgICAgICAjIGFsbCBjb25maWd1cmF0aW9uIGl0ZW0gcGFyYW1ldGVycwogICAgICAgIEF0dGFjaG1lbnRMaXN0ICAgICAgPT4gJEF0dGFjaG1lbnQsICAgICAgICAgICAgICMgYSBsaXN0IG9mIGFsbCBhdHRhY2htZW50cwogICAgICAgIFJlcGxhY2VFeGlzdGluZ0RhdGEgPT4gMCwgICAgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIGV4aXN0aW5nIHhtbCBhdHRyaWJ1dGVzIGFuZCBhdHRhY2htZW50cyBzaG91bGQgYmUgcmVwbGFjZWQgb3Iga2VwdAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMTIzLAogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICRSZXNwb25zZSA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgZXZlcmV0aGluZyBpcyBPSwogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLAogICAgICAgICAgICBDb25maWdJdGVtTnVtYmVyID0+ICdDTjEyMycsCiAgICAgICAgfQogICAgfQoKICAgICRSZXNwb25zZSA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB1bmV4cGVjdGVkIGVycm9yCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICIkUGFyYW17RXJyb3JDb2RlfTogJFBhcmFte0Vycm9yTWVzc2FnZX0iLAogICAgfQoKPWN1dAoKc3ViIF9Db25maWdJdGVtVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ0l0ZW1JRCAgID0gJFBhcmFte0NvbmZpZ0l0ZW1JRH07CiAgICBteSAkQ29uZmlnSXRlbSAgICAgPSAkUGFyYW17Q29uZmlnSXRlbX07CiAgICBteSAkQXR0YWNobWVudExpc3QgPSAkUGFyYW17QXR0YWNobWVudExpc3R9OwoKICAgIG15ICREZXBsU3RhdGVJRCA9ICRTZWxmLT57UmV2ZXJzZURlcGxTdGF0ZUxpc3R9LT57ICRDb25maWdJdGVtLT57RGVwbFN0YXRlfSB9OwogICAgbXkgJEluY2lTdGF0ZUlEID0gJFNlbGYtPntSZXZlcnNlSW5jaVN0YXRlTGlzdH0tPnsgJENvbmZpZ0l0ZW0tPntJbmNpU3RhdGV9IH07CgogICAgbXkgJFJhd1hNTERhdGEgPSAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX07CgogICAgIyBnZXQgY29uZmlnIGl0ZW0gb2JqZWN0CiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgICMgZ2V0IGxhc3QgY29uZmlnIGl0ZW0gZGVmaW50aW9uCiAgICBteSAkRGVmaW5pdGlvbkRhdGEgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkdldCgKICAgICAgICBDbGFzc0lEID0+ICRTZWxmLT57UmV2ZXJzZUNsYXNzTGlzdH0tPnsgJENvbmZpZ0l0ZW0tPntDbGFzc30gfSwKICAgICk7CgogICAgIyByZXBsYWNlIGRhdGUsIGRhdGUgdGltZSwgY3VzdG9tZXIsIGNvbXBhbnkgYW5kIGdlbmVyYWwgY2F0YWxvZyB2YWx1ZXMKICAgIG15ICRSZXBsYWNlZFhNTERhdGEgPSAkU2VsZi0+UmVwbGFjZVhNTERhdGEoCiAgICAgICAgWE1MRGF0YSAgICA9PiAkUmF3WE1MRGF0YSwKICAgICAgICBEZWZpbml0aW9uID0+ICREZWZpbml0aW9uRGF0YS0+e0RlZmluaXRpb25SZWZ9LAogICAgKTsKCiAgICAjIGNyZWF0ZSBhbiBYTUxEYXRhIHN0cnVjdHVyZSBzdWl0YWJsZSBmb3IgVmVyc2lvbkFkZAogICAgbXkgJFhNTERhdGEgPSAkU2VsZi0+Rm9ybWF0WE1MRGF0YSgKICAgICAgICBYTUxEYXRhID0+ICRSZXBsYWNlZFhNTERhdGEsCiAgICApOwoKICAgICMgZ2V0IHRoZSBjdXJyZW50IGNvbmZpZyBpdGVtIHZlcnNpb24gZGF0YQogICAgbXkgJEN1cnJlbnRWZXJzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICRDb25maWdJdGVtLT57TmFtZX0sCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICREZWZpbml0aW9uRGF0YS0+e0RlZmluaXRpb25JRH0sCiAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVJRCwKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUlELAogICAgICAgIFhNTERhdGEgICAgICA9PiAkWE1MRGF0YSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIGlmICggISRWZXJzaW9uSUQgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ29uZmlndXJhdGlvbiBJdGVtIGNvdWxkIG5vdCBiZSB1cGRhdGVkLCBwbGVhc2UgY29udGFjdCB0aGUgc3lzdGVtJwogICAgICAgICAgICAgICAgLiAnYWRtaW5pc3RyYXRvcicKICAgICAgICB9OwogICAgfQoKICAgICMgZ2V0IHRoZSB2ZXJzaW9uIElEIG9mIHRoZSBjb25maWcgaXRlbSBiZWZvcmUgdGhlIHVwZGF0ZQogICAgbXkgJEN1cnJlbnRWZXJzaW9uSUQgPSAkQ3VycmVudFZlcnNpb24tPntWZXJzaW9uSUR9IHx8ICcnOwoKICAgICMgY29tcGFyZSBvbGQgdmVyc2lvbiBhbmQgbmV3IHZlcnNpb24gSURzCiAgICBpZiAoICRDdXJyZW50VmVyc2lvbklEIGVxICRWZXJzaW9uSUQgKSB7CiAgICAgICAgJFNlbGYtPntEZWJ1Z2dlck9iamVjdH0tPk5vdGljZSgKICAgICAgICAgICAgU3VtbWFyeSA9PiAiJFNlbGYtPntPcGVyYXRpb25OYW1lfTogTm8gY2hhbmdlIGluIGNvbmZpZ3VyYXRpb24gaXRlbSB2ZXJzaW9uIiwKICAgICAgICAgICAgRGF0YSAgICA9PiAnVGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdhcyBpbmRlbnRpY2FsIHRvIHRoZSBsYXN0JwogICAgICAgICAgICAgICAgLiAnIG9uZSwgbm8gdXBkYXRlIHdhcyBwZXJmb3JtZWQnLAogICAgICAgICk7CiAgICB9CgogICAgIyB0aGUgUmVwbGFjZUV4aXN0aW5nRGF0YSBmbGFnIGlzIHNldAogICAgaWYgKCAkUGFyYW17UmVwbGFjZUV4aXN0aW5nRGF0YX0gKSB7CgogICAgICAgICMgZ2V0IGEgbGlzdCBvZiBhbGwgYXR0YWNobWVudHMKICAgICAgICBteSBARXhpc3RpbmdBdHRhY2htZW50cyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudExpc3QoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGFsbCBhdHRhY2htZW50cyBvZiB0aGlzIGNvbmZpZyBpdGVtCiAgICAgICAgRklMRU5BTUU6CiAgICAgICAgZm9yIG15ICRGaWxlbmFtZSAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICMgZGVsZXRlIHRoZSBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICREZWxldGlvblN1Y2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUF0dGFjaG1lbnREZWxldGUoCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICA9PiAkRmlsZW5hbWUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkRGVsZXRpb25TdWNjZXNzICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5rbm93biBwcm9ibGVtIHdoZW4gZGVsZXRpbmcgYXR0YWNobWVudCAkRmlsZW5hbWUgb2YgQ29uZmlnSXRlbSAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIiRDb25maWdJdGVtSUQuIFBsZWFzZSBjaGVjayB0aGUgVmlydHVhbEZTIGJhY2tlbmQgZm9yIHN0YWxlIGZpbGVzISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGF0dGFjaG1lbnRzCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkQXR0YWNobWVudExpc3QpICkgewoKICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCBAeyRBdHRhY2htZW50TGlzdH0gKSB7CiAgICAgICAgICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+Q3JlYXRlQXR0YWNobWVudCgKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgICA9PiAkQXR0YWNobWVudCwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0KICAgICAgICAgICAgICAgICAgICB8fCAiQXR0YWNobWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIjsKCiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkRXJyb3JNZXNzYWdlLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBDb25maWdJdGVtIGRhdGEKICAgIG15ICRDb25maWdJdGVtRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkQ29uZmlnSXRlbURhdGEpICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvdWxkIG5vdCBnZXQgbmV3IGNvbmZpZ3VyYXRpb24gaXRlbSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnRhY3QgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yJywKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgTnVtYmVyICAgICAgID0+ICRDb25maWdJdGVtRGF0YS0+e051bWJlcn0sCiAgICAgICAgfSwKICAgIH07Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmFyX1NBX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ9io2YrZhic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICfYp9mE2YXZg9iq2KgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmJnX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGC0LUg0LXQtNC40L3QuNGG0LggQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICfQn9GA0L7QvNGP0L3QsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnREYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICfQmtC70LDRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn0J/QvtGB0LvQtdC00L3QsCDQv9GA0L7QvNGP0L3QsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gYW5vdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENvbmZpZ3VyYXRpb24gSXRlbSBudW1iZXIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbmZpZyBpdGVtPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAn0LLRgNC10LzQtSDQvdCwINGB0YrQt9C00LDQstCw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAn0JTQsCDRgtGK0YDRgdC4INC4INCyINC/0YDQtdC00LjRiNC90LjRgtC1INCy0LXRgNGB0LjQuD8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfQn9C+0YHQu9C10LTQvdC+INC/0YDQvtC80LXQvdC10L0g0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICfQnNC10LbQtNGDJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAn0JzQvtC00LXQuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICfQodC10YDQuNC10L0g0J3QvtC80LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICfQn9GA0L7RhtC10YHQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ9Cf0LDQvNC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAn0KLQstGK0YDQtCDQtNC40YHQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ9Ca0LDQv9Cw0YbQuNGC0LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICfQnNGA0LXQttC+0LIg0LDQtNCw0L/RgtC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnSVAg0L7RgiBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUCDQsNC00YDQtdGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ9CT0YDQsNGE0LjRh9C90LAg0LrQsNGA0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICfQlNGA0YPQs9C+INC+0LHQvtGA0YPQtNCy0LDQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ9CU0LDRgtCwINC90LAg0LjQt9GC0LjRh9Cw0L3QtSDQvdCwINCz0LDRgNCw0L3RhtC40Y/RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ9CU0LDRgtCwINC90LAg0LjQvdGB0YLQsNC70LDRhtC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICfQnNGA0LXQttC+0LIg0LDQtNGA0LXRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ9Cc0LDRgdC60LAg0L3QsCDQv9C+0LTQvNGA0LXQttCw0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAn0JPQtdC50YIg0L/RgNC10YXQvtC0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ9Ci0LjQvyDQvdCwINC70LjRhtC10L3Qt9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAn0JvQuNGG0LXQvdC30LXQvSDQutC70Y7Rhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ9CU0LDRgtCwINC90LAg0LjQt9GC0LjRh9Cw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ9Cc0LXQtNC40Y8nOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICfQmNC30YLQtdC60LvQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ9Cf0L7QtNC00YDRitC20LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ9Cf0LjQu9C+0YIt0LLQvtC00LDRhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn0J/Qu9Cw0L3QuNGA0LDQvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICfQoNC10LzQvtC90YIv0JLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAn0JjQt9C70Y/Qt9GK0Lsg0L7RgiDRg9C/0L7RgtGA0LXQsdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ9Cf0YDQtdCz0LvQtdC20LTQsNC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICfQotC10YHRgi/QmtCw0YfQtdGB0YLQstC10L0g0LrQvtC90YLRgNC+0LsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAn0J/RgNC10L3QvtGB0LjQvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAn0J3QsNGB0YLQvtC70LXQvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAn0KHRitGA0LLRitGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn0JTRgNGD0LPQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAn0JzQvtC90LjRgtC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ9Cf0YDQuNC90YLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ9Ca0L7QvdGG0LXQvdGC0YDQsNGC0L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICfQoNGD0YLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiDRgtC+0YfQutCwINC30LAg0LTQvtGB0YLRitC/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ9CjLdCy0L4g0LfQsCDRgdC40LPRg9GA0L3QvtGB0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ9CQ0YDRhdC40LLQuNGA0LDRidC+INGDLdCy0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICfQnNC40YjQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAn0JrQu9Cw0LLQuNCw0YLRg9GA0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAn0JrQsNC80LXRgNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ9CR0LjQvNC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICfQnNC+0LTQtdC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBINC60LDRgNGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQiDQo9GB0YLRgNC+0LnRgdGC0LLQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICfQlNC+0LrQuNC90LMg0YHRgtCw0L3RhtC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ9Ch0LrQtdC90LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICfQntGE0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICdUZWxjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAn0J/QvtGC0YDQtdCx0LjRgtC10LvRgdC60Lgg0L/RgNC40LvQvtC20LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ9Ch0YDQtdC00L3QviDQvdC40LLQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICfQodGK0YDQstGK0YDQvdC+INC/0YDQuNC70L7QttC10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ9Cf0L7RgtGA0LXQsdC40YLQtdC70YHQutCwINCe0L/QtdGALtGBLdC80LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAn0YHRitGA0LLRitGA0L3QsCDQntC/0LXRgC7RgS3QvNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICfQkNC00LzQuNC90LjRgdGC0YDQsNGC0LjQstC90LXQvSDQuNC90YHRgtGA0YPQvNC10L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICfQmtC70LjQtdC90YLRgdC60Lgg0LjQvdGB0YLRgNGD0LzQtdC90YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICfQktCz0YDQsNC00LXQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAn0JXQtNC40L3QuNGH0LXQvSDQu9C40YbQtdC90LcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICfQm9C40YbQtdC90LfQuNGA0LDQvdC1INC30LAg0L/QvtGC0YDQtdCx0LjRgtC10LsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ9Cb0LjRhtC10L3Qt9C40YDQsNC90LUg0LfQsCDQv9GA0L7RhtC10YHQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICfQm9C40YbQtdC90LfQuNGA0LDQvdC1INC30LAg0YHRitGA0LLRitGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAn0JvQuNGG0LXQvdC30LjRgNCw0L3QtSDQvdCwINGC0L7Rh9C60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICfQodC/0LXRhtC40LDQu9C90Lgg0L7QsdC10LzQvdC4INC/0YDQvtCz0YDQsNC80LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAn0JXQvdGC0YrRgNC/0YDQsNC50YEg0LvQuNGG0LXQvdC3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAn0JvQuNGG0LXQvdC3INC30LAg0YDQsNC30YDQsNCx0L7RgtGH0LjRhtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICfQlNC10LzQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICfQm9C40YbQtdC90LcsINC+0LPRgNCw0L3QuNGH0LXQvSDQv9C+INCy0YDQtdC80LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICfQkdC10LfQv9C70LDRgtC90L4g0YDQsNC30L/RgNC+0YHRgtGA0LDQvdGP0LLQsNC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAn0KHQvtGE0YLRg9C10YAg0YEg0L7RgtCy0L7RgNC10L0g0LrQvtC0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ9Cd0LXQvtCz0YDQsNC90LjRh9C10L0g0LvQuNGG0LXQvdC3JzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAn0J3QsNC/0YDQsNCy0Lgg0LrQvtC/0LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDQv9GA0LjQvNC10YDQvdC40YLQtSDRgNCw0LfRgNC10YjQuNGC0LXQu9C90Lgg0LPRgNGD0L/QuCDQvtGCINCw0YLRgNC40LHRg9GC0LjRgtC1INC90LAg0L7QsdGJ0LjRjyDQutCw0YLQsNC70L7Qsy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNhX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdWaXN0YSBkZSB6b29tJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdFbnRyZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdPZmljaW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdTcHLDoXZhIEtvbmZpZ3VyYcSNbsOtY2ggUG9sb8W+ZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICdabcSbbml0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudERhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGF2IEluY2lkZW50dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnU3RhdiBOYXNhemVuw60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdUxZnDrWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnQWt0dcOhbG7DrSBTdGF2IEluY2lkZW50dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnUG9zbGVkbsOtIHptxJtuYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdLb25maWcuIFBvbG/FvmthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnSm3DqW5vIHTDqXRvIEtvbmZpZy4gUG9sb8W+a3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnRG9iYSB2eXR2b8WZZW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ05hc3RhdmVuw60ga29udGV4dHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJ0hsZWRhdCB0YWvDqSB2IHDFmWVkY2hvesOtY2ggdmVyesOtY2g/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdBa3R1w6FsbsOtIFN0YXYgTmFzYXplbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1Bvc2xlZG7DrSB6bcSbbmEgb2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdTdGF2IE5hc2F6ZW7DrSB0w6l0byBLb25maWcuIFBvbG/Fvmt5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnU3RhdiBJbmNpZGVudHUgdMOpdG8gS29uZmlnLiBQb2xvxb5reSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdNZXppJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ01heCBwb8SNZXQgamVkbsOpIFBvbG/Fvmt5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnUMWZZXNrb8SNZW5vJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdTw6lyaW92w6kgxIzDrXNsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdQcm9jZXNvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICdSQU0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnUGV2bsO9IERpc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdLYXBhY2l0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdTw63FpW92w70gQWRhcHRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCB6IERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJ0lQIEFkcmVzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdHcmFmaWNrw6EgS2FydGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnSmluw6kgVnliYXZlbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ0tvbmVjIHBsYXRub3N0aSB6w6FydWt5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0RhdHVtIEluc3RhbGFjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZWZvbiAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICdUZWxlZm9uIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ1PDrcWlb3bDoSBBZHJlc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdNYXNrYSBQb2Rzw610xJsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ0dhdGV3YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnRHJ1aCBsaWNlbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnTGljZW7EjW7DrSBLbMOtxI0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICdNbm/FvnN0dsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ0tvbmVjIFBsYXRub3N0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ03DqWRpdW0nOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdQcm9wYWRudXTDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ8OaZHLFvmJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnxZjDrWTDrWPDrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnTmFwbMOhbm92w6Fubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdPcHJhdmEvT2Jub3ZlbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdNaW1vIHByb3Zveic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdQxZllaGxlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnVGVzdC9Lb250cm9sYSBrdmFsaXR5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ01vYmlsbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdTdG9sbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdKaW7DqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTW9uaXRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnVGlza8Ohcm5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N3aXRjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSb3V0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICdQxZnDrXN0dXBvdsO9IEJvZCBXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ0JlenBlxI1ub3N0bsOtIFphxZnDrXplbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdaw6Fsb2hvdsOhY8OtIFphxZnDrXplbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnTXnFoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJ0tsw6F2ZXNuaWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0thbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICdCZWFtZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQSBrYXJ0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVVNCIFphxZnDrXplbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ0RvayBTdGFuaWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICdTa2VuZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdCdWRvdmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnS2FuY2Vsw6HFmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ3BvZGxhxb7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnTcOtc3Rub3N0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ1ByYWNvdmnFoXTEmyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICdGaWxpw6Fsa2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdJVCBQxZnDrXNsdcWhZW5zdHbDrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICdUZWxjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnVcW+aXZhdGVsc2vDqSBBcGxpa2FjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnU3TFmWVkbsOtIMO6cm92ZcWIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ1NlcnZlcm92w6EgQXBsaWthY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnVcW+aXZhdGVsc2vDvSBPcGVyYcSNbsOtIFN5c3TDqW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU2VydmVyb3bDvSBPcGVyYcSNbsOtIFN5c3TDqW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ0FkbWluaXN0cmHEjW7DrSBuw6FzdHJvaic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICdVxb5pdmF0ZWxza8O9IE7DoXN0cm9qJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnVmVzdGF2xJtuw70nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdKZWRub2R1Y2jDoSBMaWNlbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnbmEgVcW+aXZhdGVsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnbmEgUHJvY2Vzb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ25hIFNlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ25hIFV6ZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdTdmF6a292w6EgTGljZW5jZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdQb2RuaWtvdsOhIExpY2VuY2UgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnTGljZW5jZSBWw712b2rDocWZZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnRGVtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICfEjGFzb3bEmyBvbWV6ZW7DoSBMaWNlbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnRnJlZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdTb2Z0d2FyZSBzIE90ZXbFmWVuw71tIEvDs2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdOZW9tZXplbsOhJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaWthY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJ5IHNrdXBpbnkgcHJvIHDFmcOta2xhZCBvcHLDoXZuxJtuw60gb2JlY27DvWNoIGF0cmlidXTFryBrYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdDb25maWcgSXRlbSBzdHlyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlJ30gPSAnU2tpZnQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50IHRpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICdEZXBsb3ltZW50IHRpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnS2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnTnV2w6ZyZW5kZSBJbmNpZGVudCB0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnU2lkc3Qgw6ZuZHJldCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdDb25maWcgSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQnVsawogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDb25maWdJdGVtIEJ1bGsgQWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byBhbm90aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ29uZmlndXJhdGlvbiBJdGVtIG51bWJlciEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG51bWJlciBvZiBhbm90aGVyIENvbmZpZ3VyYXRpb24gSXRlbSB0byBsaW5rIHdpdGguJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ05hdm5ldCBww6UgZGVubmUgQ29uZmlnIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJ0hpc3RvcmlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICdPcHJldHRlbHNlc3RpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdab29tLXZpc25pbmcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnU8O4ZyBvZ3PDpSBpIHRpZGxpZ2VyZSB2ZXJzaW9uZXI/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdOdXbDpnJlbmRlIGRlcGxveW1lbnQgc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1NpZHN0IMOmbmRyZXQgYWYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdEZXBsb3ltZW50IHRpbHN0YW5kIGZvciBkZW5uZSBDb25maWcgaXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0luY2lkZW50IHRpbHN0YW5kIGZvciBkZW5uZSBDb25maWcgSXRlbSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdNZWxsZW0nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnTWF4aW11bSBhbnRhbCBhZiBldCBlbGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdTZXJpZW51bW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdDUFUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnUkFNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ0hhcmRkaXNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnS2FwYWNpdGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ05ldGtvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnSVAgdmlhIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJ0lQIGFkcmVzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnR3JhZmlra29ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICdBbmRldCB1ZHN0eXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnVWRsw7hic2RhdG8gZm9yIGdhcmFudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnSW5zdGFsbGF0aW9uc2RhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ1RlbGVmb24gMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsZWZvbiAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdOZXR2w6Zya3NhZHJlc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnU3VibmV0IG1hc2tlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdHYXRld2F5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ0xpY2Vuc3R5cGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdMaWNlbnNuw7hnbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICdNw6ZuZ2RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ1VkbMO4YnNkYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTWVkaWUnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdVZGzDuGJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ1ZlZGxpZ2Vob2xkZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ1BpbG90JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdQbGFubGFndCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdSZXBlcmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdQZXJzaW9uZXJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdBbm1lbGRlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdUZXN0L1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ0xhcHRvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnRGVza3RvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnU2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnQW5kZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ01vbml0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ1ByaW50ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3dpdGNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1JvdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1dMQU4gQWNjZXNzIFBvaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ1Npa2tlcmhlZHNlbmhlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnQmFja3VwIGVuaGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnTXVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnVGFzdGF0dXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnS2FtZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ0JlYW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBIGtvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQiBlbmhlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdEb2NraW5nIFN0YXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ1NrYW5uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdCeWduaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ0tvbnRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ0V0YWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ1JhY2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnQXJiZWpkc3BsYWRzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ1N0aWtrb250YWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnSVQgZmFjaWxpdGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdLbGllbnQgYXBsaWthdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnTWlkZGxld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICdTZXJ2ZXIgYXBsaWthdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdLbGllbnQgT1MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU2VydmVyIE9TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdBZG1pbiB2w6Zya3TDuGplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICdCcnVnZXIgdsOmcmt0w7hqZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdFbWJlZGRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ0Vua2VsdGxpY2Vucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ1ByIGJydWdlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUHIgcHJvY2Vzc29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQciBzZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdQciBub2RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnVm9sdW1lbiBMaWNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnRW50ZXJwcmlzZSBsaWNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdVZHZpa2xlciBsaWNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RlbW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnVGlkc2JlZ3LDpm5zZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdGcmVld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ09wZW4gU291cmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ1VuYmVncsOmbnNldCc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnRHVwbGlrZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdDb25maWdJdGVtLVZlcndhbHR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdLbGFzc2VuLURlZmluaXRpb24gw6RuZGVybic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBDbGFzcyd9ID0gJ0NvbmZpZ0l0ZW0tS2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICdEZWZpbml0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSd9ID0gJ8OEbmRlcm4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1ZvcmZhbGxzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ1ZlcndlbmR1bmdzc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnS2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ1ZlcndlbmR1bmdzc3RhdHVzLVR5cCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnQWt0dWVsbGVyIFZvcmZhbGxzc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ0FrdHVlbGxlciBWb3JmYWxsc3N0YXR1cy1UeXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnWnVsZXR6dCBnZcOkbmRlcnQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnQ29uZmlnIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnRmlsdGVyIGbDvHIgS2xhc3Nlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICdXw6RobGVuIFNpZSBlaW5lIEtsYXNzZSBhdXMgZGVyIExpc3RlIGF1cyB1bSBlaW4gbmV1ZXMgQ29uZmlnIEl0ZW0genUgZXJzdGVsbGVuLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJ0lUU00gQ29uZmlnSXRlbSBTYW1tZWxha3Rpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJ1ZlcndlbmR1bmdzc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlJ30gPSAnVm9yZmFsbHN0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICdadSBlaW5lbSBhbmRlcmVuIHZlcmtuw7xwZmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ29uZmlndXJhdGlvbiBJdGVtIG51bWJlciEnfSA9ICdVbmfDvGx0aWdlIENvbmZpZ3VyYXRpb24gSXRlbSBOdW1tZXIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJ0RpZSBOdW1tZXIgZGVzIHp1IHZlcmtuw7xwZmVuZGVuIENvbmZpZ3VyYXRpb24gSXRlbXMuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnV29sbGVuIFNpZSBkaWVzZXMgQ29uZmlndXJhdGlvbiBJdGVtIHdpcmtsaWNoIGzDtnNjaGVuPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdEZXIgTmFtZSBkaWVzZXMgQ29uZmlndXJhdGlvbiBJdGVtcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAnTmFtZSB3aXJkIGJlcmVpdHMgdm9uIGRlbiBDb25maWd1cmF0aW9uIEl0ZW1zIG1pdCBkZW4gZm9sZ2VuZGVuIE51bW1lcm4gdmVyd2VuZGV0OiAlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnSGlzdG9yaWUgdm9uIENvbmZpZ3VyYXRpb24gSXRlbTogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBDb250ZW50J30gPSAnw4RuZGVydW5nc3ZlcmxhdWYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJ0Vyc3RlbGx0IGFtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20gdmlldyd9ID0gJ0RldGFpbGFuc2ljaHQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0tvbnRleHQtRWludHN0ZWxsdW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtcyBwcm8gU2VpdGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICdFaW5lIGdlbmVyaXNjaGUgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0tVGFiZWxsZS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICdTdWNoZSBhdXNmw7xocmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJ0F1Y2ggaW4gZnLDvGhlcmVuIFZlcnNpb25lbiBzdWNoZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJ0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdBa3R1ZWxsZXIgVmVyd2VuZHVuZ3NzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnWnVsZXR6dCBnZcOkbmRlcnQgdm9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdOdXIgZWluZSBWZXJzaW9uIGFuemVpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnQWxsZSBWZXJzaW9uZW4gYW56ZWlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ1ZvcmZhbGxzdGF0dXMtVmVyc2lvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICdWZXJzaW9uIGRlcyBWZXJ3ZW5kdW5nc3N0YXR1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICdWZXJzaW9uc251bW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtLVZlcnNpb25zZGV0YWlscyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ0VpZ2Vuc2NoYWZ0JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnRXMgd2lyZCBrZWluIFp1Z3JpZmYgYXVmIGRpZSBLbGFzc2UgZ2V3w6RocnQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICfDnGJlcnNpY2h0OiBJVFNNIENvbmZpZ0l0ZW0nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnS2VpbmUgSUQgZsO8ciBkYXMgQ29uZmlndXJhdGlvbiBJdGVtIGFuZ2VnZWJlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICdTaWUgYmVuw7Z0aWdlbiB3ZW5pZ3N0ZW5zIGVpbiBhdXNnZXfDpGhsdGVzIENvbmZpZ3VyYXRpb24gSXRlbSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICdTaWUgaGFiZW4ga2VpbmUgU2NocmVpYi1CZXJlY2h0aWd1bmdlbiBmw7xyIGRpZXNlcyBDb25maWd1cmF0aW9uIEl0ZW06ICVzLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtICIlcyIgaW4gRGF0ZW5iYW5rIG5pY2h0IGdlZnVuZGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJ0VzIHdhciBuaWNodCBtw7ZnbGljaCwgZGllIENvbmZpZ3VyYXRpb24gSXRlbS1JRCAlcyB6dSBsw7ZzY2hlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJ0tlaW5lIFZlcnNpb24gZsO8ciBDb25maWd1cmF0aW9uIEl0ZW0tSUQgJXMgZ2VmdW5kZW4hJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJ0tlaW5lIENvbmZpZ3VyYXRpb24gSXRlbS1JRCwgRHVwbGlrYXRzLUlEIG9kZXIgS2xhc3Nlbi1JRCBhbmdlZ2ViZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICdLZWluIFp1Z3JpZmYgZ2V3w6RocnQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJ0tlaW5lIERlZmluaXRpb24gZsO8ciBLbGFzc2UgJXMgZGVmaW5pZXJ0ISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICdLYW5uIEhpc3RvcmllIG5pY2h0IGFuemVpZ2VuLCBrZWluZSBDb25maWd1cmF0aW9uIEl0ZW0tSUQgw7xiZXJtaXR0ZWx0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJ0thbm4gSGlzdG9yaWUgbmljaHQgYW56ZWlnZW4sIGtlaW5lIENvbmZpZ3VyYXRpb24gSXRlbS1JRCDDvGJlcm1pdHRlbHQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICdOZXVlcyBDb25maWd1cmF0aW9uIEl0ZW0gKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnTmV1ZSBWZXJzaW9uIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICdWZXJ3ZW5kdW5nc3N0YXR1cyBha3R1YWxpc2llcnQgKG5ldT0lcywgYWx0PSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICdWb3JmYWxsc3RhdHVzIGFrdHVhbGlzaWVydCAobmV1PSVzLCBhbHQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnQ29uZmlnSXRlbSAoSUQ9JXMpIGdlbMO2c2NodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJ1Zlcmtuw7xwZnVuZyB6dSAlcyAoVHlwPSVzKSBoaW56dWdlZsO8Z3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJ1Zlcmtuw7xwZnVuZyB6dSAlcyAoVHlwPSVzKSBnZWzDtnNjaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJ0NvbmZpZ0l0ZW0tRGVmaW5pdGlvbiBha3R1YWxpc2llcnQgKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ05hbWUgYWt0dWFsaXNpZXJ0IChuZXU9JXMsIGFsdD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICdBdHRyaWJ1dCAlcyBha3R1YWxpc2llcnQgdm9uICIlcyIgbmFjaCAiJXMiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJ1ZlcnNpb24gJXMgZ2Vsw7ZzY2h0JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnS2VpbmUgQ29uZmlndXJhdGlvbiBJdGVtLUlEIG9kZXIgVmVyc2lvbnMtSUQgYW5nZWdlYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICdDb25maWd1cmF0aW9uIEl0ZW0ga2FubiBuaWNodCBhbmdlemVpZ3Qgd2VyZGVuLCBrZWluZSBadWdyaWZmc3JlY2h0ZSB2ZXJnZWJlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdDb25maWd1cmF0aW9uIEl0ZW0tSUQgJXMgaW4gRGF0ZW5iYW5rIG5pY2h0IGdlZnVuZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1ZlcnNpb25zLUlEICVzIGluIERhdGVuYmFuayBuaWNodCBnZWZ1bmRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ0NvbmZpZ0l0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJ2dlZHJ1Y2t0IHZvbiAlcyBhbSAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJ1VuZ8O8bHRpZ2UgS2xhc3Nlbi1JRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICdLZWluZSBLbGFzc2VuLUlEIMO8YmVybWl0dGVsdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICdLZWluZSBadWdyaWZmc3JlY2h0ZSBmw7xyIGRpZXNlIEtsYXNzZSB2ZXJnZWJlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJ0tlaW4gRXJnZWJuaXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnQ29uZmlnIEl0ZW0tU3VjaGVyZ2Vibmlzc2UnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJ0thbm4gZGFzIENvbmZpZ3VyYXRpb24gSXRlbSBuaWNodCBhbnplaWdlbiwga2VpbmUgWnVncmlmZnNyZWNodGUgZsO8ciBDb25maWd1cmF0aW9uIEl0ZW1zIHZlcmdlYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJ09wZXJhdGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICdXYXJudW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnVm9yZmFsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnRGVyIFZlcndlbmR1bmdzc3RhdHVzIGRpZXNlcyBDb25maWcgSXRlbXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdEZXIgVm9yZmFsbHN0YXR1cyBkaWVzZXMgQ29uZmlnIEl0ZW1zJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnQW5nZXplaWd0ZSBDb25maWd1cmF0aW9uIEl0ZW1zJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ1p3aXNjaGVuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ01heGltYWxlIEFuemFobCBlaW5lcyBFbGVtZW50cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICdMZWVyZSBGZWxkZXIgemVpZ2VuIGFuLCBkYXNzIGRpZSBha3R1ZWxsZW4gV2VydGUgYmVpYmVoYWx0ZW4gd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnw5xiZXJzcHJ1bmdlbic7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnTW9kZWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICdLdW5kZW51bnRlcm5laG1lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnU2VyaWVubnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICdSQU0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnRmVzdHBsYXR0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ0thcGF6aXTDpHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnTmV0endlcmstQWRhcHRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCDDvGJlciBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUC1BZGRyZXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdHcmFmaWstQWRhcHRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICdTb25zdGlnZSBBdXNzdGF0dHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICdHYXJhbnRpZSBBYmxhdWZkYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdJbnN0YWxsYXRpb25zZGF0dW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ1RlbGVmb24gMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsZWZvbiAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJ0UtTWFpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdOZXR6d2Vyay1BZHJlc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnU3VibmV0ei1NYXNrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnR2F0ZXdheSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICdMaXplbnp0eXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdMaXplbnpzY2hsw7xzc2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnTWVuZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnQWJsYXVmZGF0dW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICdNZWRpdW0nOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJ0NvbXB1dGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnSGFyZHdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJ05ldHp3ZXJrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnU29mdHdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ0FiZ2VsYXVmZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICdJbiBXYXJ0dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3RiZXRyaWViJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdHZXBsYW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ0luIFJlcGFyYXR1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnQXXDn2VyIERpZW5zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdVbnRlciBSZXZpZXcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1Rlc3QvUVMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnTGFwdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdEZXNrdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdTb25zdGlnZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ01vbml0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ0RydWNrZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3dpdGNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1JvdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1dMQU4tWnVnYW5nc3B1bmt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ1NpY2hlcmhlaXRzZ2Vyw6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdCYWNrdXAtR2Vyw6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnTWF1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJ1Rhc3RhdHVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0thbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICdCZWFtZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQS1LYXJ0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVVNCLUdlcsOkdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdEb2NraW5nLVN0YXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ1NjYW5uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdHZWLDpHVkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdCw7xybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ0V0YWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICdSYXVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ0FyYmVpdHNwbGF0eic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICdBbnNjaGx1c3Nkb3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnSVQtRWlucmljaHR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsa28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ0NsaWVudC1BbndlbmR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ01pZGRsZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnU2VydmVyLUFud2VuZHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdDbGllbnQtQmV0cmllYnNzeXN0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU2VydmVyLUJldHJpZWJzc3lzdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdBZG1pbmlzdHJhdG9yLVRvb2wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnQmVudXR6ZXItVG9vbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ0VtYmVkZGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnRWluemVsbGl6ZW56JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUHJvIEJlbnV0emVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICdQcm8gUHJvemVzc29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQcm8gU2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUHJvIEtub3Rlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ1ZvbHVtZS1MaXplbnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnRW50ZXJwcmlzZS1MaXplbnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdFbnR3aWNrbGVyLUxpemVueic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnRGVtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICdaZWl0bGljaCBiZWdyZW56dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0ZyZWV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnT3BlbiBTb3VyY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnVW5saW1pdGllcnQnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICdadWdld2llc2VuZSBDb25maWd1cmF0aW9uIEl0ZW1zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnWnVtIEt1bmRlbiB6dWdld2llc2VuZSBDb25maWd1cmF0aW9ucyBJdGVtcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJ1p1bSBLdW5kZW5iZW51dHplciB6dWdld2llc2VuZSBDb25maWd1cmF0aW9ucyBJdGVtcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnQ01EQi1FaW5zdGVsbHVuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICdQcsO8ZnQgTmFtZW4gYXVmIEVpbmRldXRpZ2tlaXQgaW5uZXJoYWxiIGRlciBzZWxiZW4gQ29uZmlndXJhdGlvbiBJdGVtLUtsYXNzZSBvZGVyIGdsb2JhbCwgZC5oLiBlcyB3ZXJkZW4gYWxsZSBDb25maWd1cmF0aW9uIEl0ZW1zIGplZ2xpY2hlciBDb25maWd1cmF0aW9uIEl0ZW0tS2xhc3NlIGJlaSBkZXIgUHLDvGZ1bmcgYXVmIGVpbmVuIGVpbmRldXRpZ2VuIE5hbWVuIGJlcsO8Y2tzaWNodGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtIGhpbnp1ZsO8Z2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJ0NvbmZpZ3VyYXRpb24gSXRlbSBiZWFyYmVpdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQ29uZmlndXJhdGlvbiBJdGVtLUVyZWlnbmlzbW9kdWwsIGRhc3MgZGllIFByb3Rva29sbGllcnVuZyBkZXIgSGlzdG9yaWUgaW0gQWdlbnRlbi1JbnRlcmZhY2UgZXJtw7ZnbGljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtLUhpc3RvcmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICdDb25maWd1cmF0aW9uIEl0ZW0gZHJ1Y2tlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICdDb25maWd1cmF0aW9uIEl0ZW0tRGV0YWlsYW5zaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJ0NvbmZpZ3VyYXRpb24gSXRlbS1OdW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnQ29uZmlndXJhdGlvbiBJdGVtLUxpbWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICdDb25maWd1cmF0aW9uIEl0ZW0tTGltaXQgcHJvIFNlaXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtLVNhbW1lbGFrdGlvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICdEaWUgRGVmaW5pdGlvbmVuIHZvbiBDb25maWd1cmF0aW9uIEl0ZW0tTGltaXQgZXJzdGVsbGVuIHVuZCB2ZXJ3YWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdEZWZpbmllcmVuIFNpZSBBY3Rpb25zLCBpbiBkZW5lbiBpbSBWZXJrbsO8cGZ0ZS1PYmpla3RlLVdpZGdldCBlaW4gRWluc3RlbGx1bmdlbi1Lbm9wZiB2ZXJmw7xnYmFyIHNlaW4gc29sbCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBCaXR0ZSBiZWFjaHRlbiBTaWUsIGRhc3MgZsO8ciBkaWVzZSBBY3Rpb25zIGRpZSBmb2xnZW5kZW4gSlMtIHVuZCBDU1MtRGF0ZWllbiByZWdpc3RyaWVydCBzZWluIG3DvHNzZW46ICBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyB1bmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBiZW7DtnRpZ3RlbiBCZXJlY2h0aWd1bmdlbiB6dW0gRXJzdGVsbGVuIHZvbiBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbXMgZHVyY2ggZGFzIEdlbmVyaWMgSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBiZW7DtnRpZ3RlbiBCZXJlY2h0aWd1bmdlbiB6dW0gTMO2c2NoZW4gdm9uIElUU00gQ29uZmlndXJhdGlvbiBJdGVtcyBkdXJjaCBkYXMgR2VuZXJpYyBJbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIGJlbsO2dGlndGVuIEJlcmVjaHRpZ3VuZ2VuLCB1bSBJVFNNLUNvbmZpZ3VyYXRpb24gSXRlbXMgw7xiZXIgZGFzIEdlbmVyaWMgSW50ZXJmYWNlIGFienVydWZlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYmVuw7Z0aWd0ZW4gQmVyZWNodGlndW5nZW4sIHVtIG5hY2ggSVRTTS1Db25maWd1cmF0aW9uIEl0ZW1zIG1pdCBkZW0gR2VuZXJpYyBJbnRlcmZhY2UgenUgc3VjaGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBiZW7DtnRpZ3RlbiBCZXJlY2h0aWd1bmdlbiwgdW0gSVRTTS1HZW5lcmljIEl0ZW1zIG1pdCBkZW0gR2VuZXJpYyBJbnRlcmZhY2UgenUgYWt0dWFsaXNpZXJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRhcyDDnGJlcnNpY2h0c21vZHVsIHVtIGRpZSAiS2xlaW4iLUFuc2ljaHQgZWluZXIgQ29uZmlndXJhdGlvbiBJdGVtcy1MaXN0ZSBhbnp1emVpZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IHJlZ3Vsw6RyZSBBdXNkcsO8Y2tlIGluZGl2aWR1ZWxsIGbDvHIgamVkZXMgQ29uZmlndXJhdGlvbiBJdGVtLCB1bSBkZW4gTmFtZW4gZGVzIENvbmZpZ3VyYXRpb24gSXRlbSB6dSDDvGJlcnByw7xmZW4gdW5kIGVudHNwcmVjaGVuZGUgRmVobGVybWVsZHVuZ2VuIGFuenV6ZWlnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGFzIFN0YW5kYXJkLVVudGVyb2JqZWt0IGRlciBLbGFzc2UgXCdJVFNNQ29uZmlnSXRlbVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIEFuemFobCBkZXIgWmVpbGVuIGbDvHIgZGVuIEVkaXRvciBkZXIgQ29uZmlndXJhdGlvbiBJdGVtLURlZmluaXRpb24gaW0gQWRtaW5pc3RyYXRvci1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgUmVpaGVuZm9sZ2UgZGVyIFZvcmZhbGxzdGF0dXMgdm9uIGhvY2ggKGJzcHcuIGtyaXRpc2NoKSBuYWNoIG5pZWRyaWcgKGJzcHcuIGZ1bmt0aW9uYWwpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgcmVsZXZhbnRlbiBWZXJ3ZW5kdW5nc3N0YXVzLCBiZWkgZGVuZW4gdmVya27DvHBmdGUgVGlja2V0cyBkZW4gU3RhdHVzIGVpbmVzIENvbmZpZ3VyYXRpb24gSXRlbXMgYmVlaW5mbHVzc2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkYXMgU3VjaGxpbWl0IGbDvHIgZGllIElUU00gQ29uZmlndXJhdGlvbi1BbnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkYXMgU3VjaGxpbWl0IGbDvHIgZGllIENvbmZpZ3VyYXRpb24gSXRlbXMtU3VjaGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYW5nZXplaWd0ZW4gVGFiZWxsZW5zcGFsdGVuIGluIGRlciBDb25maWd1cmF0aW9uIEl0ZW0tw5xiZXJzaWNodC4gRGllc2UgT3B0aW9uIGhhdCBrZWluZW4gRWZmZWt0IGF1ZiBkaWUgUG9zaXRpb24gZGVyIFNwYWx0ZW4uIEhpbndlaXM6IEtsYXNzZW5zcGFsdGUgaXN0IGltbWVyIHZlcmbDvGdiYXIsIHdlbm4gRmlsdGVyICJBbGxlIiBnZXfDpGhsdCBpc3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYW5nZXplaWd0ZW4gVGFiZWxsZW5zcGFsdGVuIGbDvHIgZGllIENvbmZpZ3VyYXRpb24gSXRlbS1TdWNoZS4gRGllc2UgT3B0aW9uIGhhdCBrZWluZW4gRWZmZWt0IGF1ZiBkaWUgUG9zaXRpb24gZGVyIFNwYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYW5nZXplaWd0ZW4gU3BhbHRlbiB2b24gQ29uZmlndXJhdGlvbiBJdGVtcyBpbiBkZXIgQ29uZmlndXJhdGlvbiBJdGVtLcOcYmVyc2ljaHQgaW4gQWJow6RuZ2lna2VpdCB2b24gZGVyIENvbmZpZ3VyYXRpb24gSXRlbS1LbGFzc2UuIEplZGVtIEVpbnRyYWcgbcO8c3NlbiBkZXIgS2xhc3Nlbm5hbWUgdW5kIERvcHBlbHB1bmt0ZSB2b3Jhbmdlc3RlbGx0IHdlcmRlbiAoei5CLiBDb21wdXRlcjo6OikuIEVzIGdpYnQgZWluaWdlIENvbmZpZ3VyYXRpb24gSXRlbS1BdHRyaWJ1dGUsIGRpZSBhbGxlbiBDb25maWd1cmF0aW9uIEl0ZW1zIGdlbWVpbnNhbSBzaW5kIChCZWlzcGllbCBmw7xyIGRpZSBLbGFzc2UgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFVtIGVpbnplbG5lIENvbmZpZ3VyYXRpb24gSXRlbS1BdHRyaWJ1dGUsIHdpZSBzaWUgaW4gZGVyIENvbmZpZ3VyYXRpb24gSXRlbS1EZWZpbml0aW9uIGRlZmluaWVydCBzaW5kLCBkYXJ6dXN0ZWxsZW4sIG11c3MgZGFzIGZvbGdlbmRlIFNjaGVtYSB2ZXJ3ZW5kZXQgd2VyZGVuIChCZWlzcGllbCBmw7xyIGRpZSBLbGFzc2UgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6S2FwYXppdMOkdDo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkthcGF6aXTDpHQ6OjEuIFdlbm4gZXMga2VpbmVuIEVpbnRyYWcgZsO8ciBlaW5lIENvbmZpZ3VyYXRpb24gSXRlbS1LbGFzc2UgZ2lidCwgd2VyZGVuIGRpZSBTdGFuZGFyZC1TcGFsdGVuIHNvIGFuZ2V6ZWlndCwgd2llIGluIGRlciBFaW5zdGVsbHVuZyAiSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMiIGRlZmluaWVydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYW5nZXplaWd0ZW4gU3BhbHRlbiB2b24gQ29uZmlndXJhdGlvbiBJdGVtcyBpbiBkZXIgQ29uZmlndXJhdGlvbiBJdGVtLVN1Y2hlIGluIEFiaMOkbmdpZ2tlaXQgdm9uIGRlciBDb25maWd1cmF0aW9uIEl0ZW0tS2xhc3NlLiBKZWRlbSBFaW50cmFnIG3DvHNzZW4gZGVyIEtsYXNzZW5uYW1lIHVuZCBEb3BwZWxwdW5rdGUgdm9yYW5nZXN0ZWxsdCB3ZXJkZW4gKHouQi4gQ29tcHV0ZXI6OjopLiBFcyBnaWJ0IGVpbmlnZSBDb25maWd1cmF0aW9uIEl0ZW0tQXR0cmlidXRlLCBkaWUgYWxsZW4gQ29uZmlndXJhdGlvbiBJdGVtcyBnZW1laW5zYW0gc2luZCAoQmVpc3BpZWwgZsO8ciBkaWUgS2xhc3NlIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBVbSBlaW56ZWxuZSBDb25maWd1cmF0aW9uIEl0ZW0tQXR0cmlidXRlLCB3aWUgc2llIGluIGRlciBDb25maWd1cmF0aW9uIEl0ZW0tRGVmaW5pdGlvbiBkZWZpbmllcnQgc2luZCwgZGFyenVzdGVsbGVuLCBtdXNzIGRhcyBmb2xnZW5kZSBTY2hlbWEgdmVyd2VuZGV0IHdlcmRlbiAoQmVpc3BpZWwgZsO8ciBkaWUgS2xhc3NlIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkthcGF6aXTDpHQ6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpLYXBheml0w6R0OjoxLiBXZW5uIGVzIGtlaW5lbiBFaW50cmFnIGbDvHIgZWluZSBDb25maWd1cmF0aW9uIEl0ZW0tS2xhc3NlIGdpYnQsIHdlcmRlbiBkaWUgU3RhbmRhcmQtU3BhbHRlbiBzbyBhbmdlemVpZ3QsIHdpZSBpbiBkZXIgRWluc3RlbGx1bmcgIklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zIiBkZWZpbmllcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIGFuZ2V6ZWlndGVuIFNwYWx0ZW4gdm9uIENvbmZpZ3VyYXRpb24gSXRlbXMgaW4gZGVyIENvbmZpZ3VyYXRpb24gSXRlbS3DnGJlcnNpY2h0IGluIEFiaMOkbmdpZ2tlaXQgdm9uIGRlciBDb25maWd1cmF0aW9uIEl0ZW0tS2xhc3NlLiBKZWRlbSBFaW50cmFnIG3DvHNzZW4gZGVyIEtsYXNzZW5uYW1lIHVuZCBEb3BwZWxwdW5rdGUgdm9yYW5nZXN0ZWxsdCB3ZXJkZW4gKHouQi4gQ29tcHV0ZXI6OjopLiBFcyBnaWJ0IGVpbmlnZSBDb25maWd1cmF0aW9uIEl0ZW0tQXR0cmlidXRlLCBkaWUgYWxsZW4gQ29uZmlndXJhdGlvbiBJdGVtcyBnZW1laW5zYW0gc2luZCAoQmVpc3BpZWwgZsO8ciBkaWUgS2xhc3NlIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBVbSBlaW56ZWxuZSBDb25maWd1cmF0aW9uIEl0ZW0tQXR0cmlidXRlLCB3aWUgc2llIGluIGRlciBDb25maWd1cmF0aW9uIEl0ZW0tRGVmaW5pdGlvbiBkZWZpbmllcnQgc2luZCwgZGFyenVzdGVsbGVuLCBtdXNzIGRhcyBmb2xnZW5kZSBTY2hlbWEgdmVyd2VuZGV0IHdlcmRlbiAoQmVpc3BpZWwgZsO8ciBkaWUgS2xhc3NlIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkthcGF6aXTDpHQ6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpLYXBheml0w6R0OjoxLiBXZW5uIGVzIGtlaW5lbiBFaW50cmFnIGbDvHIgZWluZSBDb25maWd1cmF0aW9uIEl0ZW0tS2xhc3NlIGdpYnQsIHdlcmRlbiBkaWUgU3RhbmRhcmQtU3BhbHRlbiBzbyBhbmdldXplaWd0LCB3aWUgaW4gZGVyIEVpbnN0ZWxsdW5nICJBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSIgZGVmaW5pZXJ0IChTY2hsw7xzc2VsICJEZWZhdWx0Q29sdW1ucyIpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYW5nZXplaWd0ZW4gU3BhbHRlbiBpbiBkZXIgS29tcGxleGFuc2ljaHQgZGVyIFZlcmtuw7xwZnVuZ3N0YWJlbGxlIGbDvHIgYWxsZSBDb25maWd1cmF0aW9uIEl0ZW0tS2xhc3Nlbi4gV2VubiBlcyBrZWluZW4gRWludHJhZyBnaWJ0LCB3ZXJkZW4gZGllIFN0YW5kYXJkc3BhbHRlbiBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIGFuZ2V6ZWlndGVuIFNwYWx0ZW4gdm9uIENvbmZpZ3VyYXRpb24gSXRlbXMgaW4gZGVyIEtvbXBsZXhhbnNpY2h0IGRlciBWZXJrbsO8cGZ1bmdzdGFiZWxsZSBhYmjDpG5naWcgdm9uIGRlciBDb25maWd1cmF0aW9uIEl0ZW0tS2xhc3NlLiBEZWZpbmllcnQgZGllIGFuZ2V6ZWlndGVuIFNwYWx0ZW4gdm9uIENvbmZpZ3VyYXRpb24gSXRlbXMgaW4gZGVyIENvbmZpZ3VyYXRpb24gSXRlbS3DnGJlcnNpY2h0IGluIEFiaMOkbmdpZ2tlaXQgdm9uIGRlciBDb25maWd1cmF0aW9uIEl0ZW0tS2xhc3NlLiBKZWRlbSBFaW50cmFnIG3DvHNzZW4gZGVyIEtsYXNzZW5uYW1lIHVuZCBEb3BwZWxwdW5rdGUgdm9yYW5nZXN0ZWxsdCB3ZXJkZW4gKHouQi4gQ29tcHV0ZXI6OjopLiBFcyBnaWJ0IGVpbmlnZSBDb25maWd1cmF0aW9uIEl0ZW0tQXR0cmlidXRlLCBkaWUgYWxsZW4gQ29uZmlndXJhdGlvbiBJdGVtcyBnZW1laW5zYW0gc2luZCAoQmVpc3BpZWwgZsO8ciBkaWUgS2xhc3NlIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBVbSBlaW56ZWxuZSBDb25maWd1cmF0aW9uIEl0ZW0tQXR0cmlidXRlLCB3aWUgc2llIGluIGRlciBDb25maWd1cmF0aW9uIEl0ZW0tRGVmaW5pdGlvbiBkZWZpbmllcnQgc2luZCwgZGFyenVzdGVsbGVuLCBtdXNzIGRhcyBmb2xnZW5kZSBTY2hlbWEgdmVyd2VuZGV0IHdlcmRlbiAoQmVpc3BpZWwgZsO8ciBkaWUgS2xhc3NlIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkthcGF6aXTDpHQ6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpLYXBheml0w6R0OjoxLiBXZW5uIGVzIGtlaW5lbiBFaW50cmFnIGbDvHIgZWluZSBDb25maWd1cmF0aW9uIEl0ZW0tS2xhc3NlIGdpYnQsIHdlcmRlbiBkaWUgU3RhbmRhcmRzcGFsdGVuIGFuZ2V6ZWlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnTGVndCBmZXN0LCB3ZWxjaGUgQXJ0IHZvbiBMaW5rIChhdXMgZGVyIFRpY2tldHBlcnNwZWt0aXZlIGJlbmFubnQpIGRlbiBTdGF0dXMgZWluZXMgdmVybGlua3RlbiBDSSBiZWVpbmZsdXNzZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICdEZWZpbmllcnQsIHdlbGNoZXIgVHlwIHZvbiBUaWNrZXQgZGVuIFN0YXR1cyBlaW5lcyB2ZXJrbsO8cGZ0ZW4gQ29uZmlndXJhdGlvbiBJdGVtcyBiZWVpbmZsdXNzZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ0NvbmZpZ3VyYXRpb24gSXRlbSBsw7ZzY2hlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJ1ZlcndlbmR1bmdzc3RhdHVzLUZhcmJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpemllcmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJ0FrdGl2aWVydCBkaWUgRnVua3Rpb24gIlNhbW1lbGFrdGlvbiIgZsO8ciBkYXMgQWdlbnRlbi1Gcm9udGVuZCwgdW0genVyIGdsZWljaGVuIFplaXQgYW4gbWVocmVyZW4gQ29uZmlndXJhdGlvbiBJdGVtcyBhcmJlaXRlbiB6dSBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnQWt0aXZpZXJ0IGRpZSBGdW5rdGlvbiAiU2FtbWVsYWt0aW9uIiBudXIgZsO8ciBkaWUgZ2VsaXN0ZXRlbiBHcnVwcGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnKERlLSlBa3RpdmllcnQgZGllIEZ1bmt0aW9uYWxpdMOkdCB1bSBDb25maWdJdGVtcyBhdWYgZWluZGV1dGlnZSBOYW1lbiB6dSDDvGJlcnByw7xmZW4uIEJldm9yIFNpZSBkaWVzZSBPcHRpb24gYWt0aXZpZXJlbiwgc29sbHRlbiBTaWUgSWhyIFN5c3RlbSBhdWYgYmVyZWl0cyB2b3JoYW5kZW5lIENvbmZpZ0l0ZW1zIG1pdCBnbGVpY2hlbSBOYW1lbiDDvGJlcnByw7xmZW4uIFNpZSBrw7ZubmVuIGRpZXMgbWl0IEhpbGZlIGRlcyBzY3JpcHRzIGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwgdHVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICdFaW4gRXJlaWduaXNtb2R1bCBkYXMgYmVpbSBWZXJrbsO8cGZlbiB2b24gVGlja2V0cyBtaXQgQ29uZmlndXJhdGlvbiBJdGVtcyBkZW4gU3RhdHVzIGRlcyBDb25maWd1cmF0aW9uIEl0ZW1zIHZlcsOkbmRlcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0tw5xiZXJzaWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJ01vZHVsIHp1ciDDnGJlcnByw7xmdW5nIGRlciBHcnVwcGUsIGRpZSBmw7xyIGVpbmUgS2xhc3NlIHZlcmFudHdvcnRsaWNoIGlzdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICdNb2R1bCwgdW0gZGllIEdydXBwZSB6dSDDvGJlcnByw7xmZW4sIGRpZSBmw7xyIGVpbiBDb25maWd1cmF0aW9uIEl0ZW0gdmVyYW50d29ydGxpY2ggaXN0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJ01vZHVsIHp1bSBHZW5lcmllcmVuIHZvbiBJVFNNLUNvbmZpZ3VyYXRpb24gSXRlbS1TdGF0aXN0aWtlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnT2JqZWt0LUJhY2tlbmQgTW9kdWwgUmVnaXN0cmF0aW9uIGRlcyBJbXBvcnQvRXhwb3J0IE1vZHVscy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnTGVndCBkaWUgUGFyYW1ldGVyIGbDvHIgZGFzIERhc2hib2FyZC1CYWNrZW5kIGZlc3QuICJMaW1pdCIgbGVndCBkaWUgQW56YWhsIGFuIEVpbnRyw6RnZW4gZmVzdCwgZGllIHN0YW5kYXJkbcOkw59pZyBhbmdlemVpZ3Qgd2VyZGVuLiAiR3JvdXAiIGJlc2NocsOkbmt0IGRlbiBadWdhbmcgenVtIGpld2VpbGlnZW4gRGFzaGxldCAoei4gQi4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDIpLiAiRGVmYXVsdCIgYmVzdGltbXQsIG9iIGRhcyBEYXNobGV0IHN0YW5kYXJkbcOkw59pZyBha3RpdiBpc3Qgb2RlciB2b20gTnV0emVyIG1hbnVlbGwgYWt0aXZpZXJ0IHdlcmRlbiBtdXNzLiAiQ2FjaGVUVExMb2NhbCIgYmVzdGltbXQgZGllIENhY2hpbmdkYXVlciBmw7xyIGRhcyBEYXNobGV0IGluIE1pbnV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGFyYW1ldGVyIGbDvHIgZGllIEZhcmJlbiBkZXIgVmVyd2VuZHVuZ3NzdGF0dXMgaW4gZGVuIHBlcnPDtm5saWNoZW4gRWluc3RlbGx1bmdlbiBpbSBBZ2VudGVuLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgZsO8ciBkaWUgRmFyYmVuIGRlciBWZXJ3ZW5kdW5nc3N0YXR1cyBpbiBkZW4gcGVyc8O2bmxpY2hlbiBFaW5zdGVsbHVuZ2VuIGltIEFnZW50ZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgZsO8ciBkaWUgenVncmlmZnNiZXJlY2h0aWd0ZSBHcnVwcGUgZGVyIEdlbmVyYWwtS2F0YWxvZy1BdHRyaWJ1dGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciBmw7xyIGRpZSBTZWl0ZW4sIGluIGRlbmVuIENvbmZpZ3VyYXRpb24gSXRlbXMgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJ0JlcmVjaHRpZ3VuZ3NncnVwcGUgXConOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VyZm9yZGVybGljaGUgQmVyZWNodGlndW5nZW4sIHVtIGRpZSBBbnNpY2h0IHp1ciBLb25maWd1cmF0aW9uIHZvbiBDb25maWd1cmF0aW9uIEl0ZW1zIGltIEFnZW50ZW4tSW50ZXJmYWNlIG51dHplbiB6dSBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VyZm9yZGVybGljaGUgQmVyZWNodGlndW5nZW4sIHVtIGRpZSBBbnNpY2h0IHp1ciBTdWNoZSB2b24gQ29uZmlndXJhdGlvbiBJdGVtcyBpbSBBZ2VudGVuLUludGVyZmFjZSBudXR6ZW4genUga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXJmb3JkZXJsaWNoZSBCZXJlY2h0aWd1bmdlbiwgdW0gZGllIERldGFpbGFuc2ljaHQgdm9uIENvbmZpZ3VyYXRpb24gSXRlbXMgaW0gQWdlbnRlbi1JbnRlcmZhY2UgbnV0emVuIHp1IGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXJmb3JkZXJsaWNoZSBCZXJlY2h0aWd1bmdlbiwgdW0gZGllIEFuc2ljaHQgenVtIEhpbnp1ZsO8Z2VuIHZvbiBDb25maWd1cmF0aW9uIEl0ZW1zIGltIEFnZW50ZW4tSW50ZXJmYWNlIG51dHplbiB6dSBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFcmZvcmRlcmxpY2hlIEJlcmVjaHRpZ3VuZ2VuLCB1bSBkaWUgQW5zaWNodCB6dW0gQmVhcmJlaXRlbiB2b24gQ29uZmlndXJhdGlvbiBJdGVtcyBpbSBBZ2VudGVuLUludGVyZmFjZSBudXR6ZW4genUga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXJmb3JkZXJsaWNoZSBCZXJlY2h0aWd1bmdlbiwgdW0gZGllIEhpc3Rvcmllbi1BbnNpY2h0IHZvbiBDb25maWd1cmF0aW9uIEl0ZW1zIGltIEFnZW50ZW4tSW50ZXJmYWNlIG51dHplbiB6dSBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXJmb3JkZXJsaWNoZSBCZXJlY2h0aWd1bmdlbiwgdW0gZGllIEFuc2ljaHQgenVtIERydWNrZW4gdm9uIENvbmZpZ3VyYXRpb24gSXRlbXMgaW0gQWdlbnRlbi1JbnRlcmZhY2UgbnV0emVuIHp1IGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICdFcmZvcmRlcmxpY2hlIEJlcmVjaHRpZ3VuZ2VuLCB1bSBDb25maWd1cmF0aW9uIEl0ZW1zIGzDtnNjaGVuIHp1IGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnQ29uZmlndXJhdGlvbiBJdGVtcyBzdWNoZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJ1fDpGhsdCBkYXMgTW9kdWwgenVtIEVyemV1Z2VuIGRlciBDb25maWd1cmF0aW9uIEl0ZW0tTnVtbWVyLiAiQXV0b0luY3JlbWVudCIgZXJow7ZodCBkaWUgTnVtbWVyIGRlcyBDb25maWd1cmF0aW9uIEl0ZW1zLCBkaWUgU3lzdGVtLUlELCBkaWUgS2xhc3Nlbi1JRCB1bmQgZGVzIGJlbnV0emVuIFrDpGhsZXJzLiBEYXMgRm9ybWF0IGlzdCAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGJzcHcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICdTZXR0enQgZGVuIFZvcmZhbGxzdGF0dXMgZWluZXMgQ29uZmlndXJhdGlvbiBJdGVtcyBhdXRvbWF0aXNjaCwgd2VubiBlaW4gVGlja2V0IG1pdCBlaW5lbSBDb25maWd1cmF0aW9uIEl0ZW0gdmVya27DvHBmdCB3aXJkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1NldHp0IGRlbiBWZXJ3ZW5kdW5nc3N0YXR1cyBmw7xyIGRpZSBGdW5rdGlvbiAiU2FtbWVsYWt0aW9uIiBmw7xyIENvbmZpZ3VyYXRpb24gSXRlbXMgaW0gQWdlbnRlbi1JbnRlcmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2V0enQgZGVuIFZlcndlbmR1bmdzc3RhdHVzIGbDvHIgZGllIEZ1bmt0aW9uICJTYW1tZWxha3Rpb24iIGbDvHIgQ29uZmlndXJhdGlvbiBJdGVtcyBpbSBBZ2VudGVuLUludGVyYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGVpbmUgVmVya27DvHBmdW5nIGltIE1lbsO8LCBkaWUgZXMgZXJsYXVidCBlaW4gQ29uZmlndXJhdGlvbiBJdGVtIG1pdCBlaW5lbSBhbmRlcmVuIE9iamVrdCBpbiBkZXIgRGV0YWlsYW5zaWNodCBkZXMgQ29uZmlndXJhdGlvbiBJdGVtcyBkZXMgQWdlbnRlbi1JbnRlcmZhY2UgenUgdmVya27DvHBmZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgaW0gTWVuw7wgZGVyIENvbmZpZ3VyYXRpb24gSXRlbS3DnGJlcnNpY2h0IGRpZSBWZXJrbsO8cGZ1bmcgenVyIEhpc3RvcmllIGVpbmVzIENvbmZpZ3VyYXRpb24gSXRlbXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGltIE1lbsO8IGRlciBDb25maWd1cmF0aW9uIEl0ZW0tRGV0YWlsYW5zaWNodCBkaWUgVmVya27DvHBmdW5nIHp1ciBIaXN0b3JpZSBlaW5lcyBDb25maWd1cmF0aW9uIEl0ZW1zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGltIE1lbsO8IGRlciBEZXRhaWxhbnNpY2h0IGVpbmVzIENvbmZpZ3VyYXRpb24gSXRlbXMgZGllIFZlcmtuw7xwZnVuZyB6dW0gTMO2c2NoZW4gZWluZXMgQ29uZmlndXJhdGlvbiBJdGVtcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBpbSBNZW7DvCBkZXIgQ29uZmlndXJhdGlvbiBJdGVtLcOcYmVyc2ljaHQgZGllIFZlcmtuw7xwZnVuZyB6dW0gRHVwbGl6aWVyZW4gZWluZXMgQ29uZmlndXJhdGlvbiBJdGVtcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgaW0gTWVuw7wgZGVyIERldGFpbGFuc2ljaHQgZWluZXMgQ29uZmlndXJhdGlvbiBJdGVtcyBkaWUgVmVya27DvHBmdW5nIHp1bSBEdXBsaXppZXJlbiBlaW5lcyBDb25maWd1cmF0aW9uIEl0ZW1zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgaW0gTWVuw7wgZGVyIERldGFpbGFuc2ljaHQgZWluZXMgQ29uZmlndXJhdGlvbiBJdGVtcyBkaWUgVmVya27DvHBmdW5nIHp1bSBCZWFyYmVpdGVuIGVpbmVzIENvbmZpZ3VyYXRpb24gSXRlbXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBpbSBNZW7DvCBkZXIgRGV0YWlsYW5zaWNodCBlaW5lcyBDb25maWd1cmF0aW9uIEl0ZW0gZWluZSBWZXJrbsO8cGZ1bmcgenVtIFp1csO8Y2tnZWhlbiBhdWYgZGllIHZvcmhlcmlnZSBBbnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGltIE1lbsO8IGRlciBEZXRhaWxhbnNpY2h0IGVpbmVzIENvbmZpZ3VyYXRpb24gSXRlbXMgZGllIFZlcmtuw7xwZnVuZyB6dW0gRHJ1Y2tlbiBlaW5lcyBDb25maWd1cmF0aW9uIEl0ZW1zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGVpbmUgVmVya27DvHBmdW5nIGltIE1lbsO8IGRlciBBbnNpY2h0ICJDb25maWd1cmF0aW9uIEl0ZW0tw5xiZXJzaWNodCIsIHVtIHp1ciBEZXRhaWxhbnNpY2h0IGRlcyBDb25maWd1cmF0aW9uIEl0ZW1zIHp1IGdlbGFuZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgZGllIENvbmZpZ3VyYXRpb24gSXRlbS1IaXN0b3JpZSAodW1nZWtlaHJ0ZSBSZWloZW5mb2xnZSkgaW0gQWdlbnRlbi1JbnRlcmZhY2UgYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICdEZXIgSWRlbnRpZmlrYXRvciBmw7xyIGVpbiBDb25maWd1cmF0aW9uIEl0ZW0sIGJzcHcuICJDb25maWdJdGVtIyIgLCAiTWVpbkNvbmZpZ0l0ZW0jIi4gRGVyIFN0YW5kYXJkIGlzdCAiQ29uZmlnSXRlbSMiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJ0tsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICdHbG9iYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICdQb3N0LXByb2R1a3Rpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnUHJlLXByb2R1a3Rpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnUHJvZHVrdGl2JzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVsX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ86czrXPhM6xzr7PjSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICfOk8+BzrHPhs61zq/Ovyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVuX0NBX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ0xpY2Vuc2UgVHlwZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0xpY2Vuc2UgS2V5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICdLZXlib2FyZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ1NpbmdsZSBMaWNlbnNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ1ZvbHVtZSBMaWNlbnNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0VudGVycHJpc2UgTGljZW5zZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0RldmVsb3BlciBMaWNlbnNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVuX0dCX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICdDaGFuZ2UnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdMYXN0IGNoYW5nZWQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICdIaXN0b3J5IENvbnRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJ0NyZWF0ZXRpbWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWm9vbSB2aWV3J30gPSAnWm9vbSB2aWV3JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdDb250ZXh0IFNldHRpbmdzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdMYXN0IGNoYW5nZWQgYnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICdObyBSZXN1bHQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ0JldHdlZW4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJ0tleWJvYXJkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdPZmZpY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZ3VlIGF0dHJpYnV0ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0NPX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdWaXN0YSBkZXRhbGxhZGEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ0VudHJlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ09maWNpbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBFbGVtZW50b3MgZGUgQ29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdDYW1iaWFyIGRlZmluaWNpw7NuIGRlIGxhIENsYXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIENsYXNzJ30gPSAnQ2xhc2UgZGUgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ0RlZmluaWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSd9ID0gJ01vZGlmaWNhcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnREYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlbCBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZSBsYSBJbXBsZW1lbnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdDbGFzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICdUaXBvIGRlIGVzdGFkbyBkZSBpbXBsZW1lbnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBY3R1YWwgZGVsIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdFc3RhZG8gYWN0dWFsIGRlbCBUaXBvIGRlIGluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1hIG1vZGlmaWNhY2nDs24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnRWxlbWVudG8gZGUgQ29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAnRmlsdHJvIHBhcmEgQ2xhc2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ1NlbGVjY2lvbmUgdW5hIENsYXNlIGRlIGxhIGxpc3RhIHBhcmEgY3JlYXIgdW4gbnVldm8gSXRlbSBkZSBDb25maWd1cmFjacOzbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJ0lUU00gQ29uZmlnSXRlbSBBY2Npw7NuIE1hc2l2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlJ30gPSAnRXN0YWRvIGRlIGRlc3BsaWVndWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUnfSA9ICdFc3RhZG8gZGVsIGluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICdFbmxhemFyIGNvbiBvdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ29uZmlndXJhdGlvbiBJdGVtIG51bWJlciEnfSA9ICfCoU7Dum1lcm8gZGUgw410ZW0gZGUgQ29uZmlndXJhY2nDs24gbm8gdmFsaWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICdFbCBuw7ptZXJvIGRlIG90cm8gZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24gY29uIGVsIHF1ZSB2aW5jdWxhci4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICfCv1JlYWxtZW50ZSBkZXNlYSBlbGltaW5hciBlc3RlIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdFbCBub21icmUgZGUgZXN0ZSBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAnRWwgbm9tYnJlIHlhIGVzdGEgZW4gdXNvIHBvciDDjXRlbXMgZGUgQ29uZmlndXJhY2nDs24gY29uIGxvcyBzaWd1aWVudGVzIG7Dum1lcm8ocyk6ICVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICdIaXN0b3JpYWwgZGVsIEVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuOiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICdDb250ZW5pZG8gZGVsIGhpc3RvcmlhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnRmVjaGEgZGUgQ3JlYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20gdmlldyd9ID0gJ1Zpc3RhIGRldGFsbGFkYSAnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0FqdXN0ZXMgZGUgQ29udGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnQ0lzIHBvciBww6FnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnVW5hIHRhYmxhIGdlbsOpcmljYSBkZSDDrXRlbXMgZGUgY29uZmlndXJhY2nDs24gZGUgSVRTTSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJ0VqZWN1dGFyIGxhIGLDunNxdWVkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICfCv0Rlc2VhIGJ1c2NhciBlbiB2ZXJzaW9uZXMgYW50ZXJpb3Jlcz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICdFbGVtZW50byBkZSBjb25maWd1cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2nDs24gZGVsIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBY3R1YWwgZGUgbGEgSW1wbGVtZW50YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ8OabHRpbWEgbW9kaWZpY2FjacOzbiBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJ01vc3RyYXIgdW5hIHZlcnNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnTW9zdHJhciB0b2RhcyBsYXMgdmVyc2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGVsIGluY2lkZW50ZSBkZSBsYSB2ZXJzacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgbGEgdmVyc2nDs24gZGUgaW1wbGVtZW50YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnTsO6bWVybyBkZSB2ZXJzacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnRWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24gRGV0YWxsZXMgZGUgbGEgdmVyc2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICdQcm9waWVkYWQnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICfCoU5vIHNlIGhhIHByb3BvcmNpb25hZG8gYWNjZXNvIGEgQ2xhc2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICdSZXN1bWVuOiBJVFNNIENvbmZpZ0l0ZW0nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnwqFObyBzZSBoYSBwcm9wb3JjaW9uYWRvIENvbmZpZ0l0ZW1JRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICfCoU5lY2VzaXRhIGFsIG1lbm9zIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIHNlbGVjY2lvbmFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICdObyB0aWVuZSBwZXJtaXNvIGRlIGVzY3JpdHVyYSBwYXJhIGVzdGUgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs246ICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfCoUVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuICIlcyIgIG5vIHNlIGVuY29udHLDsyBlbiBsYSBiYXNlIGRlIGRhdG9zISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJ8KhTm8gZnVlIHBvc2libGUgZWxpbWluYXIgZWwgY29uZmlnaXRlbSBJRCAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJ8KhTm8gc2UgZW5jb250csOzIFZlcnNpw7NuIHBhcmEgQ29uZmlnSXRlbUlEICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICfCoU5vIHNlIGhhIHByb3BvcmNpb25hZG8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvIENsYXNzSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICfCoU5vIHNlIGhhIHByb3BvcmNpb25hZG8gYWNjZXNvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICfCoU5pbmd1bmEgZGVmaW5pY2nDs24gZnVlIGRlZmluaWRhIHBhcmEgY2xhc2UgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJ8KhTm8gc2UgcHVlZGUgbW9zdHJhciBlbCBoaXN0b3JpYWwsIG5vIHNlIGhhIHByb3BvcmNpb25hZG8gQ29uZmlnSXRlbUlEISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJ8KhTm8gc2UgcHVlZGUgbW9zdHJhciBlbCBoaXN0b3JpYWwsIG5vIHNlIGhhbiBwcm9wb3JjaW9uYWRvIHBlcm1pc29zIGRlIGFjY2VzbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJ051ZXZvIENvbmZpZ0l0ZW0gKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnTnVldmEgdmVyc2nDs24gKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ0FjdHVhbGl6YWRvIGVzdGFkbyBkZSBkZXNwbGllZ3VlIChudWV2bz0lcywgdmllam89JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ0FjdHVhbGl6YWRvIGVzdGFkbyBkZSBpbmNpZGVuY2lhIChudWV2bz0lcyx2aWVqbz0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICdDb25maWdJdGVtIChJRD0lcykgZWxpbWluYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnRW5sYWNlIGEgJXMgKHRpcG89JXMpIGHDsWFkaWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICdFbmxhY2UgYSAlcyAodGlwbz0lcykgZWxpbWluYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICdBY3R1YWxpemFkYSBkZWZpbmljacOzbiBkZSBDb25maWdJdGVtIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICdOb21icmUgYWN0dWFsaXphZG8gKG51ZXZvPSVzLHZpZWpvPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJ0F0cmlidXRvICVzIGFjdHVhbGl6YWRvIGRlICIlcyIgYSAiJXMiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJ1ZlcnNpw7NuICVzIGVsaW1pbmFkYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJ8KhTm8gc2UgaGEgcHJvcG9yY2lvbmFkbyBDb25maWdJdGVtSUQgbyBWZXJzaW9uSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJ8KhTm8gc2UgcHVlZGUgbW9zdHJhciBlbCBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiwgbm8gc2UgaGFuIHByb3BvcmNpb25hZG8gcGVybWlzb3MgZGUgYWNjZXNvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ8KhQ29uZmlnSXRlbUlEICVzIG5vIHNlIGVuY29udHLDsyBlbiBsYSBiYXNlIGRlIGRhdG9zISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ8KhVmVyc2lvbklEICVzIG5vIHNlIGVuY29udHLDsyBlbiBsYSBiYXNlIGRlIGRhdG9zISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnQ29uZmlnSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnaW1wcmVzbyBwb3IgJXMgZW4gJXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICfCoUNsYXNzSUQgbm8gZXMgdsOhbGlkYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICfCoU5vIHNlIGhhIHByb3BvcmNpb25hZG8gQ2xhc3NJRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICfCoU5vIHNlIGhhIHByb3BvcmNpb25hZG8gcGVybWlzb3MgZGUgYWNjZXNvIHBhcmEgZXN0YSBjbGFzZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJ8KhU2luIHJlc3VsdGFkb3MhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnUmVzdWx0YWRvcyBkZSBiw7pzcXVlZGEgZGUgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJ8KhTm8gc2UgcHVlZGUgbW9zdHJhciBlbCBlbGVtZW50bywgbm8gc2UgaGFuIHByb3BvcmNpb25hZG8gcGVybWlzb3MgZGUgYWNjZXNvIHBhcmEgQ29uZmlnSXRlbSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnRWwgZXN0YWRvIGRlIGltcGxlbWVudGFjacOzbiBkZSBlc3RlIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnRWwgZXN0YWRvIGRlIGVzdGUgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvSVRTTUNvbmZpZ0l0ZW1HZW5lcmljLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93biBjb25maWcgaXRlbXMnfSA9ICdTZSBtdWVzdHJhbiBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbS9MYXlvdXREYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZXR3ZWVuJ30gPSAnRW50cmUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIHVuIGVsZW1lbnRvICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICdMb3MgY2FtcG9zIHZhY8Otb3MgaW5kaWNhbiBxdWUgbG9zIHZhbG9yZXMgYWN0dWFsZXMgc2UgbWFudGllbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdTYWx0YWRvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnTsO6bWVybyBTZXJpYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JBTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdEaXNjbyBEdXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnQ2FwYWNpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ0FkYXB0YWRvciBkZSBSZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnSVAgc29icmUgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnRGlyZWNjacOzbiBJUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdUYXJqZXRhIEdyw6FmaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ090cm8gRXF1aXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ0ZlY2hhIGRlIEV4cGlyYWNpw7NuIGRlIGxhIEdhcmFudMOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdGZWNoYSBkZSBJbnN0YWxhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ1RlbMOpZm9ubyAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICdUZWzDqWZvbm8gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICdFLU1haWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnRGlyZWNjacOzbiBkZSBSZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdNw6FzY2FyYSBkZSBTdWJyZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ1B1ZXJ0YSBkZSBlbmxhY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnVGlwbyBkZSBMaWNlbmNpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0NsYXZlIGRlIExpY2VuY2lhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnQ2FudGlkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnRmVjaGEgZGUgRXhwaXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICdNZWRpbyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnT3JkZW5hZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnSGFyZHdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJ1JlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJ1NvZnR3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdFeHBpcmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ01hbnRlbmltaWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ1BsYW5pZmljYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ1JlcGFyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdSZXRpcmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdSZXZpc2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnUHJ1ZWJhIC8gQ29udHJvbCBkZSBjYWxpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ09yZGVuYWRvciBwb3J0w6F0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ0VzY3JpdG9yaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnQWdlbmRhIFBlcnNvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3Rybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTW9uaXRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnSW1wcmVzb3JhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N3aXRjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdFbnJ1dGFkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICdQdW50byBkZSBBY2Nlc28gV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBkZSBTZWd1cmlkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIGRlIFJlc3BhbGRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnUmF0w7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnVGVjbGFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdDw6FtYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ1Byb3llY3Rvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ03Ds2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1RhcmpldGEgUENNQ0lBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBVU0InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnRXN0YWNpw7NuIGRlIGFjb3BsYW1pZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnRXNjw6FuZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdFZGlmaWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdPZmljaW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnUGlzbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnSGFiaXRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ1JhY2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnTHVnYXIgZGUgdHJhYmFqbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICdPdXRsZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdJbnN0YWxhY2lvbmVzIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ0NvbmZlcmVuY2lhIHRlbGVmw7NuaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcGxpY2FjacOzbiBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ0FwbGljYWNpw7NuIFNlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ1Npc3RlbWEgT3BlcmF0aXZvIGRlbCBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ1Npc3RlbWEgb3BlcmF0aXZvIGRlbCBTZXJ2aWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnSGVycmFtaWVudGEgZGUgQWRtaW5pc3RyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0hlcnJhbWllbnRhIGRlIFVzdWFyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdFbWJlYmlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ0xpY2VuY2lhIMOabmljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ1BvciBVc3VhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICdQb3IgUHJvY2VzYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnUG9yIFNlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUG9yIE5vZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdMaWNlbmNpYSBwb3IgVm9sdW1lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdMaWNlbmNpYSBDb3Jwb3JhdGl2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0xpY2VuY2lhIGRlIERlc2Fycm9sbGFkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RlbW9zdHJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnVGllbXBvIFJlc3RyaW5naWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnRnJlZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdDw7NkaWdvIEFiaWVydG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnSWxpbWl0YWRhJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnQ0lzIGFzaWduYWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJ0NpcyBhc2lnbmFkb3MgYSBsYSBFbXByZXNhIGRlbCBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnQ2lzIGFzaWduYWRvcyBhbCB1c3VhcmlvIGRlbCBjbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICdDb25maWd1cmFjaW9uZXMgQ01EQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnQnVzcXVlIHVuIG5vbWJyZSDDum5pY28gc29sbyBkZW50cm8gZGUgbGEgbWlzbWEgY2xhc2UgZGUgQ29uZmlnSXRlbSAoXCdjbGFzZVwnKSBvIGdsb2JhbG1lbnRlIChcJ2dsb2JhbFwnKSwgbG8gcXVlIHNpZ25pZmljYSBxdWUgY2FkYSBDb25maWdJdGVtIGV4aXN0ZW50ZSBzZSB0aWVuZSBlbiBjdWVudGEgY3VhbmRvIHNlIGJ1c2NhbiBkdXBsaWNhZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICdFbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJ0HDsWFkaXIgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICdFZGl0YXIgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIGV2ZW50byBkZSBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gcXVlIGhhYmlsaXRhIGVsIGFjY2VzbyBhIGxhIGhpc3RvcmlhIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnSGlzdG9yaWFsIGRlbCBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnSW1wcmltaXIgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnRGV0YWxsZXogZGVsIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnQ29uZmlnSXRlbU51bWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICdMw61taXRlIGRlIEVsZW1lbnRvcyBkZSBDb25maWd1cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnTMOtbWl0ZSBkZSBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBwb3IgcMOhZ2luYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJ0dlc3Rpw7NuIGRlIGxhIENvbmZpZ3VyYWNpw7NuIGRlIEJhc2VzIGRlIERhdG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICdFbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBkZWwgbcOzZHVsbyBtYXNpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUm91dGVyIGJhY2tlbmQgZGUgYsO6c3F1ZWRhIGRlIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnQ3JlYSB5IGdlc3Rpb25hIGxhcyBkZWZpbmljaW9uZXMgZGUgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ0RlZmluaXIgYWNjaW9uZXMgZG9uZGUgZXN0w6EgZGlzcG9uaWJsZSB1biBib3TDs24gZGUgY29uZmlndXJhY2nDs24gZW4gZWwgd2lkZ2V0IGRlIG9iamV0b3MgdmluY3VsYWRvcyAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBUZW5nYSBlbiBjdWVudGEgcXVlIGVzdGFzIGFjY2lvbmVzIGRlYmVuIGhhYmVyIHJlZ2lzdHJhZG8gbG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3MgSlMgeSBDU1M6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIHkgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBwZXJtaXNvcyBuZWNlc2FyaW9zIHBhcmEgY3JlYXIgZWxlbWVudG9zIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIElUU00gdXRpbGl6YW5kbyBsYSBpbnRlcmZheiBnZW7DqXJpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIHBlcm1pc29zIG5lY2VzYXJpb3MgcGFyYSBlbGltaW5hciBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gZGUgSVRTTSBtZWRpYW50ZSBsYSBpbnRlcmZheiBnZW7DqXJpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIHBlcm1pc29zIG5lY2VzYXJpb3MgcGFyYSBvYnRlbmVyIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBkZSBJVFNNIHV0aWxpemFuZG8gbGEgaW50ZXJmYXogZ2Vuw6lyaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBwZXJtaXNvcyBuZWNlc2FyaW9zIHBhcmEgYnVzY2FyIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBkZSBJVFNNIHV0aWxpemFuZG8gbGEgaW50ZXJmYXogZ2Vuw6lyaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBwZXJtaXNvcyBuZWNlc2FyaW9zIHBhcmEgYWN0dWFsaXphciBsb3MgZWxlbWVudG9zIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIElUU00gbWVkaWFudGUgbGEgaW50ZXJmYXogZ2Vuw6lyaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICdEZWZpbmUgdW4gbcOzZHVsbyBkZSByZXN1bWVuIHBhcmEgbW9zdHJhciBsYSBwZXF1ZcOxYSB2aXN0YSBkZSB1bmEgbGlzdGEgZGUgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICdEZWZpbmUgZXhwcmVzaW9uZXMgcmVndWxhcmVzIGluZGl2aWR1YWxtZW50ZSBwYXJhIGNhZGEgY2xhc2UgQ29uZmlnSXRlbSBwYXJhIHZlcmlmaWNhciBlbCBub21icmUgZGUgQ29uZmlnSXRlbSB5IHBhcmEgbW9zdHJhciBsb3MgbWVuc2FqZXMgZGUgZXJyb3IgY29ycmVzcG9uZGllbnRlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBzdWJvYmpldG8gcG9yIGRlZmF1bHQgZGUgbGEgY2xhc2UgXCdJVFNNQ29uZmlnSXRlbVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgbsO6bWVybyBkZSBmaWxhcyBwYXJhIGVsIGVkaXRvciBkZSBkZWZpbmljaW9uZXMgZGUgQ0kgZW4gbGEgaW50ZXJmYXogZGUgYWRtaW5pc3RyYWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICdEZWZpbmUgZWwgb3JkZW4gZGUgbG9zIGVzdGFkb3MgZGUgaW5jaWRlbmNpYSBkZXNkZSBhbHRvIChwb3IgZWplbXBsbywgY3LDrXRpY28pIGEgYmFqbyAocG9yIGVqZW1wbG8sIGZ1bmNpb25hbCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBlc3RhZG9zIGRlIGltcGxlbWVudGFjacOzbiByZWxldmFudGVzIGRvbmRlIGxvcyB0aWNrZXRzIHZpbmN1bGFkb3MgcHVlZGVuIGFmZWN0YXIgZWwgZXN0YWRvIGRlIHVuIENJLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBsw61taXRlIGRlIGLDunNxdWVkYSBwYXJhIGxhIHBhbnRhbGxhIEFnZW50SVRTTUNvbmZpZ0l0ZW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnRGVmaW5lIGVsIGzDrW1pdGUgZGUgYsO6c3F1ZWRhIHBhcmEgbGEgcGFudGFsbGEgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBtb3N0cmFkYXMgZW4gbGEgZGVzY3JpcGNpw7NuIGdlbmVyYWwgZGVsIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuLiBFc3RhIG9wY2nDs24gbm8gdGllbmUgZWZlY3RvIGVuIGxhIHBvc2ljacOzbiBkZSBsYSBjb2x1bW5hLiBOb3RhOiBMYSBjb2x1bW5hIGRlIGNsYXNlIHNpZW1wcmUgZXN0w6EgZGlzcG9uaWJsZSBzaSBzZSBzZWxlY2Npb25hIGVsIGZpbHRybyBcJ1RvZG9zXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBsYXMgY29sdW1uYXMgbW9zdHJhZGFzIGVuIGxhIGLDunNxdWVkYSBkZSBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24uIEVzdGEgb3BjacOzbiBubyB0aWVuZSBlZmVjdG8gZW4gbGEgcG9zaWNpw7NuIGRlIGxhIGNvbHVtbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ0RlZmluZSBsYXMgY29sdW1uYXMgZGUgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBxdWUgc2UgbXVlc3RyYW4gZW4gbGEgdmlzdGEgZ2VuZXJhbCBkZWwgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24sIGVuIGZ1bmNpw7NuIGRlIGxhIGNsYXNlIENJLiBDYWRhIGVudHJhZGEgZGViZSBpciBwcmVjZWRpZGEgZGVsIG5vbWJyZSBkZSBsYSBjbGFzZSB5IGRvcyBwdW50b3MgZG9ibGVzIChlcyBkZWNpciwgY29tcHV0YWRvcmE6IDopLiBIYXkgYWxndW5vcyBhdHJpYnV0b3MgZGUgQ0kgcXVlIHNvbiBjb211bmVzIGEgdG9kb3MgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiAoZWplbXBsbyBwYXJhIGxhIGNsYXNlIENvbXB1dGFkb3JhOiBDb21wdXRhZG9yYSA6OiBOb21icmUsIENvbXB1dGFkb3JhIDo6IEN1ckRlcGxTdGF0ZSwgQ29tcHV0YWRvcmEgOjogQ3JlYXRlVGltZSkuIFBhcmEgbW9zdHJhciBsb3MgSUMtQXRyaWJ1dG9zIGluZGl2aWR1YWxlcyBkZWZpbmlkb3MgZW4gbGEgRGVmaW5pY2nDs24tQ0ksIHNlIGRlYmUgdXRpbGl6YXIgZWwgc2lndWllbnRlIGVzcXVlbWEgKGVqZW1wbG8gcGFyYSBsYSBjbGFzZSBDb21wdXRhZG9yYSk6IENvbXB1dGFkb3JhIDo6IERpc2NvIER1cm8gOjogMSwgQ29tcHV0YWRvcmEgOjogRGlzY28gRHVybyA6OiAxIDo6IENhcGFjaWRhZCA6OiAxLCBDb21wdXRhZG9yYSA6OiBEaXNjbyBEdXJvIDo6IDIsIENvbXB1dGFkb3JhIDo6IERpc2NvIER1cm8gOjogMiA6OiBDYXBhY2lkYWQgOjogMS4gU2kgbm8gaGF5IG5pbmd1bmEgZW50cmFkYSBwYXJhIHVuYSBjbGFzZSBDSSwgbGFzIGNvbHVtbmFzIHByZWRldGVybWluYWRhcyBzZSBtdWVzdHJhbiBjb21vIHNlIGRlZmluZSBlbiBsYSBjb25maWd1cmFjacOzbiBJVFNNQ29uZmlnSXRlbSA6OiBGcm9udGVuZCA6OiBBZ2VudElUU01Db25maWdJdGVtICMjIyBTaG93Q29sdW1ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ0RlZmluZSBsYXMgY29sdW1uYXMgZGUgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiBtb3N0cmFkb3MgZW4gbGEgYsO6c3F1ZWRhIGRlbCBlbGVtZW50byBjb25maWcgZGVwZW5kaWVuZG8gZGUgbGEgY2xhc2UgQ0kuIENhZGEgZW50cmFkYSBkZWJlIGlyIHByZWNlZGlkYSBkZWwgbm9tYnJlIGRlIGxhIGNsYXNlIHkgZG9zIHB1bnRvcyBkb2JsZXMgKGVzIGRlY2lyLCBjb21wdXRhZG9yYTogOikuIEhheSBhbGd1bm9zIGF0cmlidXRvcyBkZSBDSSBxdWUgc29uIGNvbXVuZXMgYSB0b2RvcyBsb3MgZWxlbWVudG9zIGRlIGNvbmZpZ3VyYWNpw7NuIChlamVtcGxvIHBhcmEgbGEgY2xhc2UgQ29tcHV0YWRvcmE6IENvbXB1dGFkb3JhIDo6IE5vbWJyZSwgQ29tcHV0YWRvcmEgOjogQ3VyRGVwbFN0YXRlLCBDb21wdXRhZG9yYSA6OiBDcmVhdGVUaW1lKS4gUGFyYSBtb3N0cmFyIGxvcyBJQy1BdHJpYnV0b3MgaW5kaXZpZHVhbGVzIGRlZmluaWRvcyBlbiBsYSBEZWZpbmljacOzbi1DSSwgc2UgZGViZSB1dGlsaXphciBlbCBzaWd1aWVudGUgZXNxdWVtYSAoZWplbXBsbyBwYXJhIGxhIGNsYXNlIENvbXB1dGFkb3JhKTogQ29tcHV0YWRvcmEgOjogRGlzY28gRHVybyA6OiAxLCBDb21wdXRhZG9yYSA6OiBEaXNjbyBEdXJvIDo6IDEgOjogQ2FwYWNpZGFkIDo6IDEsIENvbXB1dGFkb3JhIDo6IERpc2NvIER1cm8gOjogMiwgQ29tcHV0YWRvcmEgOjogRGlzY28gRHVybyA6OiAyIDo6IENhcGFjaWRhZCA6OiAxLiBTaSBubyBoYXkgbmluZ3VuYSBlbnRyYWRhIHBhcmEgdW5hIGNsYXNlIENJLCBsYXMgY29sdW1uYXMgcHJlZGV0ZXJtaW5hZGFzIHNlIG11ZXN0cmFuIGNvbW8gc2UgZGVmaW5lIGVuIGxhIGNvbmZpZ3VyYWNpw7NuIElUU01Db25maWdJdGVtIDo6IEZyb250ZW5kIDo6IEFnZW50SVRTTUNvbmZpZ0l0ZW0gIyMjIFNob3dDb2x1bW5zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnRGUgbGFzIGNvbHVtbmFzIGRlIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIG1vc3RyYWRhcyBlbiBlbCB3aWRnZXQgc2Vnw7puIGxhIGNsYXNlIGRlIENJLiBDYWRhIGVudHJhZGEgZGViZSBpciBwcmVjZWRpZGEgY29uIGVsIG5vbWJyZSBkZSBsYSBjbGFzZSB5IGRvcyBwdW50b3MgZG9ibGVzKCBlcyBkZWNpcjsgT3JkZW5hZG9yOjopLiBIYXkgYWxndW5vcyBhdHJpYnV0b3MgZGUgQ0kgcXVlIHNvbiBjb211bmVzIGEgdG9kb3MgbG9zIENJcyAoZWplbXBsbyBwYXJhIGxhIGNsYXNlIENvbXB1dGVyOiBPcmRlbmFkb3I6Ok5vbWJyZSwgT3JkZW5hZG9yOjpDdXJEZXBsU3RhdGUsIE9yZGVuYWRvcjo6RmVjaGFDcmVhY2nDs24pLiBQYXJhIG1vc3RyYXIgbG9zIGF0cmlidXRvcyBkZSBDSSBpbmRpdmlkdWFsZXMgZGVmaW5pZG9zIGVuIGxhIGRlZmluaWNpw7NuLUNJLCBzZSBkZWJlIHV0aWxpemFyIGVsIHNpZ3VpZW50ZSBlc3F1ZW1hIChlamVtcGxvIHBhcmEgbGEgY2xhc2UgT3JkZW5hZG9yKSBPcmRlbmFkb3I6OkRpc2NvRHVybzo6MSwgT3JkZW5hZG9yOjpEaXNjb0R1cm86OjE6OkNhcGFjaWRhZDo6MSwgT3JkZW5hZG9yOjpEaXNjb0R1cm86OjIsIE9yZGVuYWRvcjo6RGlzY29EdXJvOjoyOjpDYXBhY2lkYWQ6OjEuIFNpIG5vIGhheSBuaW5ndW5hIGVudHJhZGEgcGFyYSB1bmEgY2xhc2UgQ0ksIGxhcyBjb2x1bW5hcyBwb3IgZGVmZWN0byBzZSBtdWVzdHJhbiBlbiBsYSBzaWd1aWVudGUgY29uZmlndXJhY2nDs24gQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICdEZWZpbmUgbGFzIGNvbHVtbmFzIGRlIGxvcyBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gbW9zdHJhZG9zIGVuIGxhIHZpc3RhIGNvbXBsZWphIGRlIGxhIHRhYmxhIGRlIGVubGFjZXMsIHNlZ8O6biBsYSBjbGFzZSBkZSBDSS4gQ2FkYSBlbnRyYWRhIGRlYmUgaXIgcHJlY2VkaWRhIGRlbCBub21icmUgZGUgbGEgY2xhc2UgeSBkb3MgcHVudG9zIGRvYmxlcyAoZXMgZGVjaXIsIGNvbXB1dGFkb3JhOiA6KS4gSGF5IGFsZ3Vub3MgYXRyaWJ1dG9zIGRlIENJIHF1ZSBzb24gY29tdW5lcyBhIHRvZG9zIGxvcyBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gKGVqZW1wbG8gcGFyYSBsYSBjbGFzZSBDb21wdXRhZG9yYTogQ29tcHV0YWRvcmEgOjogTm9tYnJlLCBDb21wdXRhZG9yYSA6OiBDdXJEZXBsU3RhdGUsIENvbXB1dGFkb3JhIDo6IENyZWF0ZVRpbWUpLiBQYXJhIG1vc3RyYXIgbG9zIElDLUF0cmlidXRvcyBpbmRpdmlkdWFsZXMgZGVmaW5pZG9zIGVuIGxhIERlZmluaWNpw7NuLUNJLCBzZSBkZWJlIHV0aWxpemFyIGVsIHNpZ3VpZW50ZSBlc3F1ZW1hIChlamVtcGxvIHBhcmEgbGEgY2xhc2UgQ29tcHV0YWRvcmEpOiBDb21wdXRhZG9yYSA6OiBEaXNjbyBEdXJvIDo6IDEsIENvbXB1dGFkb3JhIDo6IERpc2NvIER1cm8gOjogMSA6OiBDYXBhY2lkYWQgOjogMSwgQ29tcHV0YWRvcmEgOjogRGlzY28gRHVybyA6OiAyLCBDb21wdXRhZG9yYSA6OiBEaXNjbyBEdXJvIDo6IDIgOjogQ2FwYWNpZGFkIDo6IDEuIFNpIG5vIGhheSB1bmEgZW50cmFkYSBwYXJhIHVuYSBjbGFzZSBDSSwgc2UgbXVlc3RyYW4gbGFzIGNvbHVtbmFzIHByZWRldGVybWluYWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnRGVmaW5lIHF1w6kgdGlwbyBkZSBlbmxhY2UgKG5vbWJyYWRvIGRlc2RlIGxhIHBlcnNwZWN0aXZhIGRlbCB0aWNrZXQpIHB1ZWRlIGFmZWN0YXIgZWwgZXN0YWRvIGRlIHVuIENJIHZpbmN1bGFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICdEZWZpbmUgcXXDqSB0aXBvIGRlIHRpY2tldCBwdWVkZSBhZmVjdGFyIGVsIGVzdGFkbyBkZSB1biBDSSB2aW5jdWxhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICdFbGltaW5hciBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnQ29sb3IgZGVsIGVzdGFkbyBkZSBkZXNwbGllZ3VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpY2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICdQZXJtaXRlIHF1ZSBsYSBjYXJhY3RlcsOtc3RpY2EgZGUgYWNjacOzbiBtYXNpdmEgZGVsIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIHBhcmEgbGEgaW50ZXJmYXogZGVsIGFnZW50ZSBmdW5jaW9uZSBlbiBtw6FzIGRlIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIGEgbGEgdmV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnSGFiaWxpdGEgbGEgY2FyYWN0ZXLDrXN0aWNhIGRlIGFjY2nDs24gbWFzaXZhIGRlbCBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBzb2xvIHBhcmEgbG9zIGdydXBvcyBlbnVtZXJhZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnSGFiaWxpdGEgLyBkZXNoYWJpbGl0YSBsYSBmdW5jaW9uYWxpZGFkIHBhcmEgdmVyaWZpY2FyIENvbmZpZ0l0ZW1zIHBhcmEgbm9tYnJlcyDDum5pY29zLiBBbnRlcyBkZSBoYWJpbGl0YXIgZXN0YSBvcGNpw7NuLCBkZWJlIHZlcmlmaWNhciBlbiBzdSBzaXN0ZW1hIGxvcyBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24geWEgZXhpc3RlbnRlcyBjb24gbm9tYnJlcyBkdXBsaWNhZG9zLiBQdWVkZSBoYWNlciBlc3RvIGNvbiBlbCBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBldmVudG9zIHBhcmEgY29uZmlndXJhciBjb25maWdpdGVtLXN0YXR1cyBlbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJ0Rlc2NyaXBjacOzbiBnZW5lcmFsIGRlbCBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBkZSBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgZWwgZ3J1cG8gcmVzcG9uc2FibGUgZGUgdW5hIGNsYXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgZWwgZ3J1cG8gcmVzcG9uc2FibGUgZGUgdW4gZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnTcOzZHVsbyBwYXJhIGdlbmVyYXIgZXN0YWTDrXN0aWNhcyBkZSBsb3MgZWxlbWVudG9zIGRlIGNvbmZpZ3VyYWNpw7NuIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGRlIG9iamV0byBiYWNrZW5kIHBhcmEgZWwgbcOzZHVsbyBkZSBpbXBvcnRhY2nDs24vZXhwb3J0YWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICdWaXN0YSBnZW5lcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBwYXJhIGVsIGJhY2tlbmQgZGVsIFBhbmVsIFByaW5jaXBhbCBkZWwgcmVzdW1lbiBkZSBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBkZSBsYSBlbXByZXNhIGRlbCBjbGllbnRlIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuICJMw61taXRlIiBlcyBlbCBuw7ptZXJvIGRlIGVudHJhZGFzIG1vc3RyYWRhcyBwb3IgZGVmZWN0by4gIkdydXBvIiBzZSB1c2EgcGFyYSByZXN0cmluZ2lyIGVsIGFjY2VkbyBhbCBjb21wbGVtZW50byAocG9yIGVqZW1wbG8sIEdydXBvOiBhZG1pbjtncnVwbzE7Z3J1cG8yKS4gIlBvciBkZWZlY3RvIiBkZXRlcm1pbmEgc2kgZWwgY29tcGxlbWVudG8gZXN0w6EgaGFiaWxpdGFkbyBwb3IgZGVmZWN0byBvIHNpIGVsIHVzdWFybyBuZWNlc2l0YSBoYWJpbGl0YXJsbyBtYW51YWxtZW50ZS4gIkNhY2hlVFRMTG9jYWwiIGVzIGVsIHRpZW1wbyBkZSBjYWNow6kgZW4gbWludXRvcyBwYXJhIGVsIGNvbXBsZW1lbnRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0xvcyBwYXLDoW1ldHJvcyBwYXJhIGxhIGltcGxlbWVudGFjacOzbiBpbmRpY2FuIGVsIGNvbG9yIGVuIGxhIHZpc3RhIGRlIHByZWZlcmVuY2lhcyBkZSBsYSBpbnRlcmZheiBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBsb3MgZXN0YWRvcyBkZSBpbXBsZW1lbnRhY2nDs24gZW4gbGEgdmlzdGEgZGUgcHJlZmVyZW5jaWFzIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgbG9zIHBlcm1pc29zIGRlIGVqZW1wbG8gZGUgbG9zIGF0cmlidXRvcyBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgbGFzIHDDoWdpbmFzIChkb25kZSBzZSBtdWVzdHJhbiBsb3MgZWxlbWVudG9zIGRlIGNvbmZpZ3VyYWNpw7NuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNvcyBuZWNlc2FyaW9zIHBhcmEgdXNhciBsYSB2ZW50YW5hIGRlIGxvcyBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNvcyBuZWNlc2FyaW9zIHBhcmEgdXNhciBsYSB2ZW50YW5hIGRlIGLDunNxdWVkYSBkZSBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzb3MgbmVjZXNhcmlvcyBwYXJhIHVzYXIgbGEgdmVudGFuYSBkZSBkZXRhbGxlIGRlIGxvcyBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNvcyBuZWNlc2FyaW9zIHBhcmEgdXNhciBsYSB2ZW50YW5hIHBhcmEgYWdyZWdhciBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzb3MgbmVjZXNhcmlvcyBwYXJhIHVzYXIgbGEgdmVudGFuYSBkZSBlZGljacOzbiBkZSBsb3MgZWxlbWVudG9zIGRlIGNvbmZpZ3VyYWNpw7NuIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc29zIG5lY2VzYXJpb3MgcGFyYSB1c2FyIGxhIHZlbnRhbmEgZGUgaGlzdG9yaWFsIGRlIGxvcyBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc29zIG5lY2VzYXJpb3MgcGFyYSB1c2FyIGxhIHZlbnRhbmEgZGUgaW1wcmVzacOzbiBkZSBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSBlbGltaW5hciBsb3MgZWxlbWVudG9zIGRlIGNvbmZpZ3VyYWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJ0J1c2NhciBlbGVtZW50b3MgZGUgY29uZmlndXJhY2nDs24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJ1NlbGVjY2lvbmEgZWwgbcOzZHVsbyBnZW5lcmFkb3IgZGUgbsO6bWVyb3MgZGUgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbi4gIkF1dG9JbmNyZW1lbnRhciIgaW5jcmVtZW50YSBlbCBuw7ptZXJvIGRlbCBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbjsgZWwgU3lzdGVtSUQsIGVsIENvbmZpZ0l0ZW1DbGFzc0lEIHkgZWwgY29udGFkb3Igc29uIHVzYWRvcy4gRWwgZm9ybWF0byBlcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIHBvciBlamVtcGxvOiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnRXN0YWJsZXpjYSBlbCBlc3RhZG8gZGUgaW5jaWRlbnRlIGRlIHVuIENJIGF1dG9tw6F0aWNhbWVudGUgY3VhbmRvIHVuIHRpY2tldCBlc3TDqSB2aW5jdWxhZG8gYSB1biBDSS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFc3RhYmxlY2UgZWwgZXN0YWRvIGRlIGltcGxlbWVudGFjacOzbiBlbiBsYSBwYW50YWxsYSBtYXNpdmEgZGVsIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIGxhIGludGVyZmF6IGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXN0YWJsZWNlIGVsIGVzdGFkbyBkZWwgaW5jaWRlbnRlIGVuIGxhIHBhbnRhbGxhIG1hc2l2YSBkZWwgZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24gZGUgbGEgaW50ZXJmYXogZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gbGluayBlbiBlbCBtZW7DuiBwYXJhIHZpbmN1bGFyIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIGNvbiBvdHJvIG9iamV0bywgZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biBlbmxhY2UgZW4gZWwgbWVuw7ogcGFyYSBhY2NlZGVyIGFsIGhpc3RvcmlhbCBkZSB1biBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBlbiBsYSB2aXN0YSBnZW5lcmFsIGRlbCBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBkZSBsYSBpbnRlcmZheiBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gbGluayBlbiBlbCBtZW7DuiBwYXJhIGFjY2VkZXIgYSBsYSBoaXN0b3JpYSBkZSB1biBlbGVtZW50byBkZSBjb25maWd1cmFjaW9uIGVuIHN1IHZpc3RhIGRldGFsbGFkYSwgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBwYXJhIGVsaW1pbmFyIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIGVuIHN1IHZpc3RhIGFtcGxpYWRhIGRlIGxhIGludGVyZmF6IGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBwYXJhIGR1cGxpY2FyIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIGVuIGxhIGRlc2NyaXBjacOzbiBnZW5lcmFsIGRlbCBlbGVtZW50byBkZSBjb25maWd1cmFjacOzbiBkZSBsYSBpbnRlcmZheiBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gbGluayBlbiBlbCBtZW7DuiBwYXJhIGR1cGxpY2FyIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpb24gZW4gc3UgdmlzdGEgZGV0YWxsYWRhLCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biBsaW5rIGVuIGVsIG1lbsO6IHBhcmEgZWRpdGFyIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpb24gZW4gc3UgdmlzdGEgZGV0YWxsYWRhLCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biBlbmxhY2UgZW4gZWwgbWVuw7ogcGFyYSB2b2x2ZXIgYSBsYSB2aXN0YSBkZSB6b29tIGRlIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIGxhIGludGVyZmF6IGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGxpbmsgZW4gZWwgbWVuw7ogcGFyYSBpbXByaW1pciB1biBlbGVtZW50byBkZSBjb25maWd1cmFjaW9uIGVuIHN1IHZpc3RhIGRldGFsbGFkYSwgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBwYXJhIGFjZXJjYXJzZSBhIHVuIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIGVuIGxhIHZpc3RhIGdlbmVyYWwgZGVsIGVsZW1lbnRvIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIGxhIGludGVyZmF6IGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgbGEgaGlzdG9yaWEgZGUgbG9zIGVsZW1lbnRvcyBkZSBjb25maWd1cmFjacOzbiAob3JkZW5hZG9zIGludmVyc2FtZW50ZSkgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJ0VsIGlkZW50aWZpY2Fkb3IgZGUgdW4gZWxlbWVudG8gZGUgY29uZmlndXJhY2nDs24sIHBvciBlamVtcGxvLiBDb25maWdJdGVtICMsIE15Q29uZmlnSXRlbSAjLiBFbCB2YWxvciBwb3IgZGVmZWN0byBlcyBDb25maWdJdGVtICMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnY2xhc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnZ2xvYmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAncG9zdHByb2R1Y3Rpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJ3ByZXByb2R1Y3Rpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJ3Byb2R1Y3Rpdm8nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX01YX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZWwgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdDbGFzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZWwgSW5jaWRlbnRlIEFjdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltbyBjYW1iaW8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdWaXN0YSBkZXRhbGxhZGEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ0VudHJlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ09taXRpZG8nOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ03Ds2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnRGlzY28gRHVybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ0NhcGFjaWRhZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdBZGFwdGFkb3IgZGUgUmVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHNvYnJlIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJ0RpcmVjY2nDs24gSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ090cm8gRXF1aXBhbWllbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdGZWNoYSBkZSBJbnN0YWxhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdEaXJlY2Npw7NuIGRlIFJlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ0NhbnRpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ0V4cGlyYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnUmVwYXJhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnUmV0aXJhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnTGFwdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdFc2NyaXRvcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2aWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ090cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ01vbml0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICdTd2l0Y2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnUnV0ZWFkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBkZSBSZXNwYWxkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJ01vdXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnVGVjbGFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdDw6FtYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnVGFyamV0YSBQQ01DSUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ0VzY2FuZXIgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnRWRpZmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnT2ZpY2luYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ1Bpc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnUmFjayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcGxpY2FjacOzbiBkZWwgQ2xpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdTaXN0ZW1hIE9wZXJhdGl2byBkZWwgQ2xpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICdTaXN0ZW1hIE9wZXJhdGl2byBkZSBTZXJ2aWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnSGVycmFtaWVudGEgZGVsIEFkbWluaXN0cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdQb3IgVXN1YXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUG9yIFByb2Nlc2Fkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ1BvciBTZXJ2aWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ1BvciBOb2RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0xpY2VuY2lhIGRlbCBEZXNhcnJvbGxhZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEZW1vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0ZyZWV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnT3BlbiBTb3VyY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnSWxpbWl0YWRvJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnRHVwbGljYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICdWaXN0YSBHZW5lcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBlbCBlamVtcGxvIGRlIHBlcm1pc29zIGRlIGdydXBvIGRlbCBjYXTDoWxvZ28gZ2VuZXJhbCBkZSBhdHJpYnV0b3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmV0X0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ0JldHdlZW4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnS29udG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZhX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICfZhdiv24zYsduM2KogQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICfYqti624zbjNixINiq2LnYsduM2YEg2qnZhNin2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ9iq2LnYsduM2YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlJ30gPSAn2KrYutuM24zYsSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnREYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYsdiu2K/Yp9ivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICfZiNi22LnbjNiqINmG2LXYqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ9qp2YTYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ9mG2YjYuSDZiNi22LnbjNiqINmG2LXYqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYrNin2LHbjCDYsdiu2K/Yp9ivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ9mG2YjYuSDZiNi22LnbjNiqINis2KfYsduMINix2K7Yr9in2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn2KLYrtix24zZhiDYqti624zbjNixJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ9ii24zYqtmFINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAn2YHbjNmE2KrYsSDYqNix2KfbjCDaqdmE2KfYs+KAjNmH2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAn2qnZhNin2LPbjCDYsdinINio2LHYp9uMINiz2KfYrtiqINuM2qkg2KLbjNiq2YUg2b7YqNqp2LHYqNmG2K/bjCDYrNiv24zYryDYp9mG2KrYrtinINqp2YbbjNivLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gYW5vdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENvbmZpZ3VyYXRpb24gSXRlbSBudW1iZXIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbmZpZyBpdGVtPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICfZhtin2YUg2KfbjNmGINii24zYqtmF4oCM2YfYp9uMINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJ9mF2K3YqtmI2KfbjCDYs9in2KjZgtmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICfYstmF2KfZhiDYp9uM2KzYp9ivICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICfZhtmF2KfbjCDaqdin2YXZhCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn2KrZhti424zZhdin2Kog2YXZgdin2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAn2KrYudiv2KfYryDYotuM2KrZheKAjNmH2KfbjCDZvtuM2qnYsdio2YbYr9uMINiv2LEg2YfYsSDYtdmB2K3Zhyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICfYr9ixINmI24zYsdin24zYtOKAjNmH2KfbjCDZgtio2YTbjCDZh9mFINis2LPYqtis2Ygg2KfZhtis2KfZhSDYtNmI2K/Ynyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ9ii24zYqtmFINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ9mI2LbYuduM2Kog2YHYudmE24wg2YbYtdioJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ9ii2K7YsduM2YYg2KrYutuM24zYsSDYqNmHINmI2LPbjNmE2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJ9mG2YXYp9uM2LQg24zaqSDZhtiz2K7Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJ9mG2YXYp9uM2LQg2KrZhdin2YUg2YbYs9iu2YfigIzZh9inJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICfZiNi22LnbjNiqINix2K7Yr9in2K8g2YbYs9iu2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAn2LTZhdin2LHZhyDZhtiz2K7Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAn2KzYstim24zYp9iqINmG2LPYrtmHINii24zYqtmFINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICfZiNuM2pjar9uMJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ9ii24zYqtmFINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn2YjYtti524zYqiDZhti12Kgg2KfbjNmGIENJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn2YjYtti524zYqiDYsdiu2K/Yp9ivINin24zZhiBDSSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICfYqNuM2YYnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAn2K3Yr9in2qnYq9ixINi02YXYp9ix2Ycg24zaqSDYudmG2LXYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICfZgduM2YTYr9mH2KfbjCDYrtin2YTbjCDZhdi02K7YtSDZhduM4oCM2qnZhtivINqp2Ycg2YXZgtin2K/bjNixINqp2YbZiNmG24wg2KjYp9mC24wg2K7ZiNin2YfZhtivINmF2KfZhtivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ9mF2K/ZhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICfYtNmF2KfYsdmHINiz2LHbjNin2YQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAn2LPbjOKAjNm+24zigIzbjNmIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ9ix2YUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAn2YfYp9ix2K8g2K/bjNiz2qknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICfYuNix2YHbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ9qp2KfYsdiqINi02KjaqdmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQINin2LIg2LfYsduM2YIgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAn2KLYr9ix2LMgSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAn2qnYp9ix2Kog2q/Ysdin2YHbjNqpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ9iq2KzZh9uM2LLYp9iqINmF2KrZgdix2YLZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICfYqtin2LHbjNiuINin2YbZgti22KfbjCDYttmF2KfZhtiq4oCM2YbYp9mF2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAn2KrYp9ix24zYriDZhti12KgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ9iq2YTZgdmGINuxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICfYqtmE2YHZhiDbsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAn2KLYr9ix2LMg2LTYqNqp2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdTdWJuZXQgTWFzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnR2F0ZXdheSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICfZhtmI2Lkg2KfYrNin2LLZh+KAjNmG2KfZhdmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAn2qnZhNuM2K8g2KfYrNin2LLZh+KAjNmG2KfZhdmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAn2KrYudiv2KfYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICfYqtin2LHbjNiuINin2YbZgti22KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICfYsdiz2KfZhtmHJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAn2YXZhtmC2LbbjCDYtNiv2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICfZvti02KrbjNio2KfZhtuMINmIINmG2q/Zh9iv2KfYsduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAn2YbZhdmI2YbZhyDYotiy2YXYp9uM2LTbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn2KjYsdmG2KfZhdmHINix24zYstuMINi02K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICfYqti52YXbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICfYqNin2LLZhti02LPYqtmHINi02K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICfYqNin2LLYqNuM2YbbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAn2KrYs9iqL9iq2LbZhduM2YYg2qnbjNmB24zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICfaqduM2YHbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAn2LHZiNmF24zYstuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICfYs9ix2YjYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ9i624zYsdmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICfYtdmB2K3ZhyDZhtmF2KfbjNi0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICfahtin2b7ar9ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ9iz2YjbjNqGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ9mF2LPbjNix24zYp9ioJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAn2YbZgtin2Lcg2K/Ys9iq2LHYs9uMIFdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAn2YjYs9in24zZhCDYp9mF2YbbjNiq24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ9mI2LPYp9uM2YQg2b7YtNiq24zYqNin2YbigIzar9uM2LHbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJ9mF2KfZiNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAn2LXZgdit2Ycg2qnZhNuM2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAn2K/ZiNix2KjbjNmGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ9m+2LHYqtmIINin2YHaqdmGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAn2YXZiNiv2YUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICfaqdin2LHYqiBQQ01DSUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ9iq2KzZh9uM2LLYp9iqIFVTQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICfYp9uM2LPYqtqv2KfZhyDYp9iq2LXYp9mEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICfYp9iz2qnZhtixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAn2LPYp9iu2KrZhdin2YYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAn2YXYrdmEINqp2KfYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ9i32KjZgtmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICfYp9iq2KfZgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAn2YLZgdiz2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAn2YXYrdmEINqp2KfYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICfZvtix24zYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJ9iq2LPZh9uM2YTYp9iqIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICfYqNix2YbYp9mF2YfigIzZh9in24wg2qnZhNin24zZhtiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICfZhduM2KfZhiDYp9mB2LLYp9ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ9mG2LHZhSDYp9mB2LLYp9ixINiz2LHZiNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ9iz24zYs9iq2YUg2LnYp9mF2YQg2qnZhNin24zZhtiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ9iz24zYs9iq2YUg2LnYp9mF2YQg2LPYsdmI2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ9in2KjYstin2LEg2YXYr9uM2LHbjNiq24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAn2KfYqNiy2KfYsSDaqdin2LHYqNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAn2K/Yp9iu2YTbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ9in2KzYp9iy2YfigIzZhtin2YXZhyDYqtqp24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICfYqNmHINin2LLYp9uMINqp2KfYsdio2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ9io2Ycg2KfYstin24wg2b7Ysdiv2KfYsti02q/YsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAn2KjZhyDYp9iy2KfbjCDYs9ix2YjYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ9io2Ycg2KfYstin24wg2qnYp9mF2b7bjNmI2KrYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ9in2KzYp9iy2YfigIzZhtin2YXZhyDYrdis2YXbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICfYp9is2KfYstmH4oCM2YbYp9mF2Ycg2LPYp9iy2YXYp9mG24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICfYp9is2KfYstmH4oCM2YbYp9mF2Ycg2KrZiNiz2LnZhyDYr9mH2YbYr9mHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICfZhtiz2K7ZhyDZhtmF2KfbjNi024wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAn2K/Yp9ix2KfbjCDZhdit2K/ZiNiv2Ycg2LLZhdin2YbbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ9mG2LHZhSDYp9mB2LLYp9ixINmF2KzYp9mG24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICfaqdivINio2KfYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICfZhtin2YXYrdiv2YjYryc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICfYqtin24zbjNivJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn2YXYp9qY2YjZhCDYsdmI24zYr9in2K8g2KLbjNiq2YUg2b7bjNqp2LHYqNmG2K/bjCDaqdmHINir2KjYqiDZiNmC2KfbjNi5INiv2LEg2KrYp9ix24zYrtqG2Ycg2LHYpyDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyDZgdi52KfZhCDZhduM4oCM2LPYp9iy2K8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJ9mF2K3Yr9mI2K/bjNiqINii24zYqtmFINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICfYs9in2K7YqiDZiCDZhdiv24zYsduM2Kog2KrYudin2LHbjNmBINii24zYqtmF4oCM2YfYp9uMINm+24zaqdix2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAn2Kraqdir24zYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfZvtin2LHYp9mF2KrYsdmH2KfbjNuMINio2LHYp9uMINqv2LHZiNmH4oCM2YfYp9uMINiv2LPYqtix2LPbjCDZhtmF2YjZhtmHINmF2LHYqNmI2Lcg2KjZhyDZiNuM2pjar9uM4oCM2YfYp9uMINmB2YfYsdiz2Kog2LnZhdmI2YXbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZpX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ1bDpGxpbGzDpCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdUb2ltaXN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0NBX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdWdWUgZGUgbGEgc3ludGjDqHNlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdlbnRyZSBsZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdCdXJlYXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIGRlcyDDqWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdNb2RpZmllciBsYSBkw6lmaW5pdGlvbiBkXCd1bmUgY2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIENsYXNzJ30gPSAnQ2xhc3NlIGRcJ8OpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICdEw6lmaW5pdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICdNb2RpZmllcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnREYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnw4l0YXQgZFwnaW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ8OJdGF0IGRlIGTDqXBsb2llbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ0NsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICdUeXBlIGRcJ8OpdGF0IGR1IGTDqXBsb2llbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnw4l0YXQgYWN0dWVsIGRlIGxcJ2luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ1R5cGUgZFwnw6l0YXQgYWN0dWVsIGRlIGxcJ2luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ0Rlcm5pw6hyZXMgbW9kaWZpY2F0aW9ucyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICfDiWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdGaWx0cmVzIHBvdXIgbGVzIGNsYXNzZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnQ2hvaXNpc3NleiB1bmUgY2xhc3NlIHBvdXIgY3LDqWVyIHVuIG5vdXZlbCDDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbi4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJ8OJdGF0IGR1IGTDqXBsb2llbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJ8OJdGF0IGRlIGxcJ2luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gYW5vdGhlcid9ID0gJ0xpZXIgw6AgdW4gYXV0cmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJ051bcOpcm8gZFwnw6lsw6ltZW50IGRlIGNvbmZpZ3VyYXRpb24gaW52YWxpZGUgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICdMZSBudW3DqXJvIGRcJ3VuIGF1dHJlIMOpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uIMOgIGxpZXIuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnVm91bGV6LXZvdXMgdnJhaW1lbnQgc3VwcHJpbWVyIGNldCDDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiA/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0xlIG5vbSBkZSBjZXQgw6lsw6ltZW50IGRlIGNvbmZpZ3VyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJ0xlIG5vbSBlc3QgZMOpasOgIHV0aWxpc8OpIHBhciBsXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiBhdmVjIGxlIG51bcOpcm8gc3VpdmFudCA6ICVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICdIaXN0b3JpcXVlIGRlIGxcJ8OpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJ0NvbnRlbnUgZGUgbFwnaGlzdG9yaXF1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnRGF0ZSBkZSBjcsOpYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWm9vbSB2aWV3J30gPSAnVnVlIGTDqXRhaWxsw6llJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdSw6lnbGFnZXMgZGUgY29udGV4dGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnw4lsw6ltZW50cyBkZSBjb25maWd1cmF0aW9uIHBhciBwYWdlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnTGFuY2VyIGxhIHJlY2hlcmNoZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdDaGVyY2hlciDDqWdhbGVtZW50IGRhbnMgbGVzIHZlcnNpb25zIHByw6ljw6lkZW50ZXMgPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ8OJbMOpbWVudCBkZSBjb25maWd1cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF0aW9ucyBkZSBsXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICfDiXRhdCBhY3R1ZWwgZGUgZMOpcGxvaWVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ0Rlcm5pw6hyZXMgbW9kaWZpY2F0aW9ucyBlZmZlY3R1w6llcyBwYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJ0FmZmljaGVyIHVuZSBzZXVsZSB2ZXJzaW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnQWZmaWNoZXIgdG91dGVzIGxlcyB2ZXJzaW9ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnw4l0YXQgZGUgbGEgdmVyc2lvbiBkZSBsXCdpbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICfDiXRhdCBkZSBsYSB2ZXJzaW9uIGR1IGTDqXBsb2llbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ051bcOpcm8gZGUgdmVyc2lvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnRMOpdGFpbHMgZGUgbGEgdmVyc2lvbiBkZSBsXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ1Byb3ByacOpdMOpJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnQXVjdW4gYWNjw6hzIMOgIGxhIGNsYXNzZSBuXCdhIMOpdMOpIGRvbm7DqSAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICdWdWUgZFwnZW5zZW1ibGU6IMOpbMOpbWVudHMgZGUgY29uZmlndXJhdGlvbic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICdBdWN1biBJRCBkXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiBuXCdhIMOpdMOpIGRvbm7DqSAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnVm91cyBkZXZleiBzw6lsZWN0aW9ubmVyIGF1IG1vaW5zIHVuIMOpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICdWb3VzIG5cJ2F2ZXogcGFzIGxlIGRyb2l0IGRlIG1vZGlmaWVyIGxcJ8OpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uICVzLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnTFwnw6lsw6ltZW50IGRlIGNvbmZpZ3VyYXRpb24gIiVzIiBuXCdhIHBhcyDDqXTDqSB0cm91dsOpIGRhbnMgbGEgYmFzZSBkZSBkb25uw6llcyAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbFwnSUQgZGUgbFwnw6lsw6ltZW50IGRlIGNvbmZpZ3VyYXRpb24gJXMgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnQXVjdW5lIHZlcnNpb24gdHJvdXbDqWUgcG91ciBsXCdJRCBkZSBsXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiAlcyAhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJ0F1Y3VuIElEIGRcJ8OpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uLCBkZSBkdXBsaWNhdGlvbiBvdSBkZSBjbGFzc2UgblwnYSDDqXTDqSBkb25uw6kgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnQXVjdW4gYWNjw6hzIG5cJ2Egw6l0w6kgZG9ubsOpICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnQXVjdW5lIGTDqWZpbml0aW9uIGTDqWZpbmllIHBvdXIgbGEgY2xhc3NlICVzICEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnSW1wb3NzaWJsZSBkXCdhZmZpY2hlciBsXCdoaXN0b3JpcXVlLCBhdWN1biBJRCBkXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiBuXCdhIMOpdMOpIGRvbm7DqSAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnSW1wb3NzaWJsZSBkXCdhZmZpY2hlciBsXCdoaXN0b3JpcXVlLCBhdWN1biBhY2PDqHMgblwnYSDDqXTDqSBkb25uw6kgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnTm91dmVsIMOpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJ05vdXZlbGxlIHZlcnNpb24gKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ8OJdGF0IGRlIGTDqXBsb2llbWVudCBtaXMgw6Agam91ciAobm91dmVhdT0lcywgYW5jaWVuPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICfDiXRhdCBkZSBsXCdpbmNpZGVudCBtaXMgw6Agam91ciAobm91dmVhdT0lcywgYW5jaWVuPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJ8OJbMOpbWVudCBkZSBjb25maWd1cmF0aW9uIChJRD0lcykgc3VwcHJpbcOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnTGllciDDoCAlcyAodHlwZT0lcykgYWpvdXTDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnTGllciDDoCAlcyAodHlwZT0lcykgc3VwcHJpbcOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICdEw6lmaW5pdGlvbiBkZSBsXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiBtaXNlIMOgIGpvdXIgKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ05vbSBtaXMgw6Agam91ciAobm91dmVhdT0lcywgYW5jaWVuPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJ0F0dHJpYnVlICVzIG1pcyDDoCBqb3VyIGRlICIlcyIgw6AgIiVzIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICdWZXJzaW9uICVzIHN1cHByaW3DqWUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICdBdWN1biBJRCBkXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiBvdSBkZSB2ZXJzaW9uIG5cJ2Egw6l0w6kgZG9ubsOpICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnSW1wb3NzaWJsZSBkXCdhZmZpY2hlciBsXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiwgYXVjdW4gYWNjw6hzIG5cJ2Egw6l0w6kgZG9ubsOpICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdMXCdJRCBkZSBsXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiAlcyBuXCdhIHBhcyDDqXTDqSB0cm91dsOpIGRhbnMgbGEgYmFzZSBkZSBkb25uw6llcyAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnTFwnSUQgZGUgdmVyc2lvbiAlcyBuXCdhIHBhcyDDqXTDqSB0cm91dsOpIGRhbnMgbGEgYmFzZSBkZSBkb25uw6llcyAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICfDiWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnSW1wcmltw6kgcGFyICVzIMOgICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnSUQgZGUgY2xhc3NlIGludmFsaWRlICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICdBdWN1biBJRCBkZSBjbGFzc2UgblwnYSDDqXTDqSBkb25uw6kgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJ0F1Y3VucyBkcm9pdHMgZFwnYWNjw6hzIHBvdXIgY2V0dGUgY2xhc3NlIG5cJ2Egw6l0w6kgZG9ubsOpICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJ0F1Y3VucyByw6lzdWx0YXRzICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICdSw6lzdWx0YXQgZGUgbGEgcmVjaGVyY2hlIGRlcyDDqWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJ0ltcG9zc2libGUgZFwnYWZmaWNoZXIgbFwnw6lsw6ltZW50LCBhdWN1bnMgZHJvaXRzIGRcJ2FjY8OocyBwb3VyIGNldCDDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbiBuXCdhIMOpdMOpIGRvbm7DqSAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0xcJ8OpdGF0IGRlIGTDqXBsb2llbWVudCBkZSBjZXQgw6lsw6ltZW50IGRlIGNvbmZpZ3VyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdMXCfDqXRhdCBkXCdpbmNpZGVudCBkZSBjZXQgw6lsw6ltZW50IGRlIGNvbmZpZ3VyYXRpb24nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvSVRTTUNvbmZpZ0l0ZW1HZW5lcmljLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93biBjb25maWcgaXRlbXMnfSA9ICdBZmZpY2hlciBsZXMgw6lsw6ltZW50cyBkZSBjb25maWd1cmF0aW9uJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ0VudHJlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ1F1YW50aXTDqSBtYXhpbWFsZSBwb3VyIHVuIMOpbMOpbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICdMZXMgY2hhbXBzIHZpZGVzIGluZGlxdWVudCBxdWUgbGVzIHZhbGV1cnMgcGFyIGTDqWZhdXRzIHNvbnQgZ2FyZMOpZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ1Bhc3PDqShzKSc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnTW9kw6hsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdOdW3DqXJvIGRlIHPDqXJpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdDUFUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnUkFNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ0Rpc3F1ZSBkdXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdDYXBhY2l0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnQWRhcHRhdGV1ciByw6lzZWF1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHN1ciBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdBZHJlc3NlIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ0FkYXB0YXRldXIgZ3JhcGhpcXVlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ0F1dHJlIMOpcXVpcGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ0RhdGUgZFwnZXhwaXJhdGlvbiBkZSBsYSBnYXJhbnRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdEYXRlIGRcJ2luc3RhbGxhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVMOpbMOpcGhvbmUgMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVMOpbMOpcGhvbmUgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICdBZHJlc3NlIGUtbWFpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdBZHJlc3NlIHLDqXNlYXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdNYXNxdWUgZHUgc291cyByw6lzZWF1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdQYXNzZXJlbGxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ1R5cGUgZGUgbGEgbGljZW5jZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0Nsw6kgZGUgbGEgbGljZW5jZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ1F1YW50aXTDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICdEYXRlIGRcJ2V4cGlyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICdNw6lkaWEnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJ09yZGluYXRldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICdNYXTDqXJpZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJ1LDqXNlYXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICdMb2dpY2llbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnRXhwaXLDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ01haW50ZW5hbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdQbGFuaWZpw6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnRW4gcsOpcGFyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ1JldGlyw6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnUmV2dWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1Rlc3QvUUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnT3JkaW5hdGV1ciBwb3J0YWJsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnT3JkaW5hdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnU2VydmV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0F1dHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnSW1wcmltYW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICdDb21tdXRhdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSb3V0ZXVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnUG9pbnQgZFwnYWNjZXNzIFdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnUMOpcmlwaMOpcmlxdWUgZGUgc8OpY3VyaXTDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnw4lsw6ltZW50IGRlIHNhdXZlZ2FyZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdTb3VyaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICdDbGF2aWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0NhbcOpcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnVmlkw6lvcHJvamVjdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnQ2FydGUgUENNQ0lBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdQw6lyaXBow6lyaXF1ZSBVU0InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnU3RhdGlvbiBkXCdhY2N1ZWlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICdTY2FubmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnQsOidGltZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ0J1cmVhdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ8OJdGFnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnUGnDqGNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ0VtcGxhY2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ1ByaXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnRMOpcGFydGVtZW50ICJUZWNobm9sb2dpZXMgZGUgbFwnSW5mb3JtYXRpb24iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcHBsaWNhdGlvbiBjbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdJbnRlcmdpY2llbCAobWlkZGxld2FyZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnQXBwbGljYXRpb24gc2VydmV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdPUyBjbGllbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnT1Mgc2VydmV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnT3V0aWwgZFwnYWRtaW5pc3RyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnT3V0aWwgdXRpbGlzYXRldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdFbWJhcnF1w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdMaWNlbnNlIHVuaXF1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ1BhciB1dGlsaXNhdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUGFyIHByb2Nlc3NldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ1BhciBzZXJ2ZXVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUGFyIG5vZXVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnTGljZW5zZSBwYXIgdm9sdW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0xpY2Vuc2UgZW50cmVwcmlzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0xpY2Vuc2UgZMOpdmVsb3BwZXVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEw6ltbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICdMaW1pdMOpZSBkYW5zIGxlIHRlbXBzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnTG9naWNpZWwgZ3JhdHVpdCAoZnJlZXdhcmUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnT3Blbi1zb3VyY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnSWxsaW1pdMOpJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnw4lsw6ltZW50cyBkZSBjb25maWd1cmF0aW9uIGF0dHJpYnXDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICfDiWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24gYXR0cmlidcOpcyDDoCB1biBjbGllbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICfDiWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24gYXR0cmlidcOpcyDDoCB1biB1dGlsaXNhdGV1ciBjbGllbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJ1BhcmFtw6h0cmVzIGRlIGxhIENNREIgKGJhc2UgZGUgZG9ubsOpZXMgZGVzIMOpbMOpbWVudHMgZGUgY29uZmlndXJhdGlvbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICfDiWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJ8OJbMOpbWVudCBkZSBjb25maWd1cmF0aW9uIGFqb3V0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICfDiWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24gw6lkaXTDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnSGlzdG9yaXF1ZSBkZSBsXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnSW1wcmVzc2lvbiBkZSBsXCfDqWzDqW1lbnQgZGUgY29uZmlndXJhdGlvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICdWdWUgZMOpdGFpbGzDqWUgZGUgbFwnw6lsw6ltZW50IGRlIGNvbmZpZ3VyYXRpb24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICdOdW3DqXJvIGRlIGxcJ8OpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJ0xpbWl0ZSBkXCfDqWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJ0xpbWl0ZSBkXCfDqWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24gcGFyIHBhZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICdCYXNlIGRlIGRvbm7DqWVzIGRlcyDDqWzDqW1lbnRzIGRlIGNvbmZpZ3VyYXRpb24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICdDcsOpZXIgZXQgZ8OpcmVyIGxlcyBkw6lmaW5pdGlvbnMgZGVzIMOpbMOpbWVudHMgZGUgY29uZmlndXJhdGlvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnU3VwcHJpbWVyIHVuIMOpbMOpbWVudCBkZSBjb25maWd1cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICdDb3VsZXVyIGRlIGxcJ8OpdGF0IGRlIGTDqXBsb2llbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaXF1ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICdWdWUgZFwnZW5zZW1ibGUgZGUgbFwnw6lsw6ltZW50IGRlIGNvbmZpZ3VyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJ1Z1ZSBkXCdlbnNlbWJsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtw6h0cmVzIHBvdXIgbFwnZXhlbXBsZSBkZXMgcGVybWlzc2lvbnMgZGUgZ3JvdXBlcyBkZXMgYXR0cmlidXRzIGR1IGNhdGFsb2d1ZSBnw6luw6lyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnUmVjaGVyY2hlciBsZXMgw6lsw6ltZW50cyBkZSBjb25maWd1cmF0aW9uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnY2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJ2dsb2JhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJ3Bvc3QtcHJvZHVjdGlmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICdwcsOpLXByb2R1Y3RpZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAncHJvZHVjdGlmJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmdsX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ0RlZmluaWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnREYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRvIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnQ2xhc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZG8gSW5jaWRlbnRlIGFjdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltbyBjYW1iaW8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ0ZpbHRyYXIgcG9yIGNsYXNlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJ0VzdGFkbyBkbyBpbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byBhbm90aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ29uZmlndXJhdGlvbiBJdGVtIG51bWJlciEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG51bWJlciBvZiBhbm90aGVyIENvbmZpZ3VyYXRpb24gSXRlbSB0byBsaW5rIHdpdGguJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBDb250ZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWm9vbSB2aWV3J30gPSAnVmlzdGEgem9vbSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ07Dum1lcm8gZGUgdmVyc2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ1Byb3BpZWRhZGUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdFbnRyZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICdOw7ptZXJvIG3DoXhpbW8gZHVuIGVsZW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ0NhbXBvcyBiYWxlaXJvcyBpbmRpY2FuIHF1ZSBvcyB2YWxvcmVzIGFjdHVhaXMgc29uIG1hbnRpZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdPbWl0aWRvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnTsO6bWVybyBkZSBzZXJpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdDUFUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ0Rpc2NvIGR1cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdDYXBhY2lkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ0FkYXB0YWRvciBkZSByZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHBvciBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdFbmRlcmV6byBJUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdBZGFwdGFkb3IgZ3LDoWZpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnT3V0cm8gZXF1aXBhbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0RhdGEgZGUgaW5zdGFsYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICdUZWzDqWZvbm8gMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsw6lmb25vIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ0VuZGVyZXpvIGRlIHJlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdNw6FzY2FyYSBkZSBzdWJyZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdQYXNhcmVsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICdUaXBvIExpY2VuemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdDaGF2ZSBMaWNlbnphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnQ2FudGlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ0RhdGEgZGUgY2FkdWNpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ1JlY3Vyc29zIG11bHRpbWVkaWEnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdDYWR1Y2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ01hbnRlbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICdQb3J0w6F0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ0VzY3JpdG9yaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnUERBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3V0cm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICdJbXByZXNvcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ0VuY2FtacOxYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1B1bnRvIGRlIGFjY2VzbyBhIHJlZGUgc2VuIGbDrW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIGRlIHNlZ3VyYW56YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnRGlzcG9zaXRpdm8gQmFja3VwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnUmF0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJ1RlY2xhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnQ8OhbWFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNw7NkZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICdQbGFjYSBQQ01DSUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIFVTQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdFc3RhY2nDs24gZGUgQWNvcGxhbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ0VzY8OhbmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnRWRpZmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnT2ZpY2luYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ0FuZGFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ0Jhc3RpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ0x1Z2FyIGRlIHRyYWJhbGxvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJ0luc3RhbGFjacOzbiBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdSZWRlIGxvY2FsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdSZWRlIHNlbiBmw61vcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnQXBsaWNhdGl2byBjbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ0FwbGljYXRpdm8gc2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnU2lzdGVtYSBvcGVyYXRpdm8gY2xpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICdTaXN0ZW1hIG9wZXJhdGl2byBkbyBzZXJ2aWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnRmVycmFtZW50YSBkZSBhZG1pbmlzdHJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnRmVycmFtZW50YSBkZSB1c3VhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnSW5jcnVzdGFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ0xpY2VuemEgw7puaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUG9yIHVzdWFyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ1BvciBwcm9jZXNhZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQb3Igc2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdQb3Igbm9kbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdMaWNlbnphIEVudGVycHJpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdMaWNlbnphIGRvIGRlc2Vudm9sdmVkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RlbW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnRnJlZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdDw7NkaWdvIGFiZXJ0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdJbGltaXRhZG8nOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaWNhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBvcyBncnVwb3MgZGUgcGVybWlzb3MgZGUgZXhlbXBsbyBkb3MgYXRyaWJ1dG9zIGRvIGNhdMOhbG9nbyB4ZXJhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmhlX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICfXnteR15gg15bXldedJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICfXkdeZ158nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAn157Xqdeo15MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmhpX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICfgpJzgpLzgpYLgpK4g4KSm4KWD4KS24KWN4KSvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICfgpJXgpYcg4KSs4KWA4KSaJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ+CkleCkvuCksOCljeCkr+CkvuCksuCkryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmhyX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdEZXRhbGpuaSBwcmVnbGVkJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdJem1lxJF1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ1VyZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdLb25maWd1csOhY2nDs2VsZW0tbWVuZWR6c21lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdPc3p0w6FseS1tZWdoYXTDoXJvesOhcyBtw7Nkb3PDrXTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIENsYXNzJ30gPSAnS29uZmlndXLDoWNpw7NlbGVtLW9zenTDoWx5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICdNZWdoYXTDoXJvesOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICdWw6FsdG96w6FzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudERhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdJbmNpZGVuc8OhbGxhcG90JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICfDnHplbWJlIMOhbGzDrXTDoXNpIMOhbGxhcG90JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnT3N6dMOhbHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnw5x6ZW1iZSDDoWxsw610w6FzaSDDoWxsYXBvdHTDrXB1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnSmVsZW5sZWdpIGluY2lkZW5zw6FsbGFwb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnSmVsZW5sZWdpIGluY2lkZW5zw6FsbGFwb3QgdMOtcHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1V0b2xzw7MgbcOzZG9zw610w6FzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdTesWxcsWRIGF6IG9zenTDoWx5b2tob3onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnVsOhbGFzc3pvbiBlZ3kgb3N6dMOhbHl0IGEgbGlzdMOhYsOzbCBlZ3kgw7pqIGtvbmZpZ3Vyw6FjacOzZWxlbSBsw6l0cmVob3rDoXPDoWhvei4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICdJVFNNIGtvbmZpZ3Vyw6FjacOzZWxlbSB0w7ZtZWdlcyBtxbF2ZWxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlJ30gPSAnw5x6ZW1iZSDDoWxsw610w6FzaSDDoWxsYXBvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJ0luY2lkZW5zw6FsbGFwb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byBhbm90aGVyJ30gPSAnSGl2YXRrb3rDoXMgZWd5IG3DoXNpayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENvbmZpZ3VyYXRpb24gSXRlbSBudW1iZXIhJ30gPSAnw4lydsOpbnl0ZWxlbiBrb25maWd1csOhY2nDs2VsZW0tc3rDoW0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJ0VneSBtw6FzaWsga29uZmlndXLDoWNpw7NlbGVtIHN6w6FtYSwgYW1lbGx5ZWwgw7Zzc3plIGtlbGwga8O2dG5pLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbmZpZyBpdGVtPyd9ID0gJ1ZhbMOzYmFuIHTDtnLDtmxuaSBzemVyZXRuw6kgZXp0IGEga29uZmlndXLDoWNpw7NlbGVtZXQ/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0Ega29uZmlndXLDoWNpw7NlbGVtIG5ldmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJ0EgbmV2ZXQgbcOhciBoYXN6bsOhbGrDoWsgYSBrb25maWd1csOhY2nDs2VsZW1layBhIGvDtnZldGtlesWRIHN6w6Ftb2trYWw6ICVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICdLb25maWd1csOhY2nDs2VsZW0gZWzFkXptw6lueWVpOiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICdFbMWRem3DqW55dGFydGFsb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJ0zDqXRyZWhvesOhcyBpZGVqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdOYWd5w610w6FzaSBuw6l6ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0vDtnJueWV6ZXQgYmXDoWxsw610w6Fzb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnS29uZmlndXLDoWNpw7NlbGVtZWsgb2xkYWxhbmvDqW50JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnRWd5IMOhbHRhbMOhbm9zIElUU00ga29uZmlndXLDoWNpw7NlbGVtIHTDoWJsw6F6YXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICdLZXJlc8OpcyBmdXR0YXTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJ0tlcmVzc2VuIGF6IGVsxZF6xZEgdmVyemnDs2tiYW4gaXM/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnS29uZmlndXLDoWNpw7NlbGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbS1pbmZvcm3DoWNpw7NrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0plbGVubGVnaSDDvHplbWJlIMOhbGzDrXTDoXNpIMOhbGxhcG90JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1V0b2xqw6FyYSBtw7Nkb3PDrXRvdHRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdFZ3kgdmVyemnDsyBtZWdqZWxlbsOtdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICfDlnNzemVzIHZlcnppw7MgbWVnamVsZW7DrXTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICdWZXJ6acOzIGluY2lkZW5zw6FsbGFwb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnVmVyemnDsyDDvHplbWJlIMOhbGzDrXTDoXNpIMOhbGxhcG90JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnVmVyemnDs3N6w6FtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICdLb25maWd1csOhY2nDs2VsZW0tdmVyemnDsyByw6lzemxldGVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnVHVsYWpkb25zw6FnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnTmluY3MgaG96esOhZsOpcsOpcyBtZWdhZHZhIGF6IG9zenTDoWx5aG96ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnw4F0dGVraW50w6lzOiBJVFNNIGtvbmZpZ3Vyw6FjacOzZWxlbSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICdOaW5jcyBrb25maWd1csOhY2nDs2VsZW0tYXpvbm9zw610w7MgbWVnYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICdTesO8a3PDqWdlIHZhbiBsZWdhbMOhYmIgZWd5IGtpdsOhbGFzenRvdHQga29uZmlndXLDoWNpw7NlbGVtcmUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnTmluY3Mgw61yw6FzaSBob3p6w6Fmw6lyw6lzZSBlaGhleiBhIGtvbmZpZ3Vyw6FjacOzZWxlbWhlejogJXMuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdBKHopIOKAniVz4oCdIGtvbmZpZ3Vyw6FjacOzZWxlbSBuZW0gdGFsw6FsaGF0w7MgYXogYWRhdGLDoXppc2JhbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICdOZW0gdm9sdCBsZWhldHPDqWdlcyBhKHopICVzIGtvbmZpZ3Vyw6FjacOzZWxlbS1hem9ub3PDrXTDsyB0w7ZybMOpc2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICdOZW0gdGFsw6FsaGF0w7MgdmVyemnDsyBhKHopICVzIGtvbmZpZ3Vyw6FjacOzZWxlbS1hem9ub3PDrXTDs27DoWwhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJ05pbmNzIGtvbmZpZ3Vyw6FjacOzZWxlbS1hem9ub3PDrXTDsywga2V0dMWResOpc2F6b25vc8OtdMOzIHZhZ3kgb3N6dMOhbHlhem9ub3PDrXTDsyBtZWdhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnTmluY3MgaG96esOhZsOpcsOpcyBtZWdhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICdOaW5jcyBtZWdoYXTDoXJvesOhcyBtZWdoYXTDoXJvenZhIGEoeikgJXMgb3N6dMOhbHlob3ohJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJ05lbSBsZWhldCBtZWdqZWxlbsOtdGVuaSBheiBlbMWRem3DqW55ZWtldCwgbmluY3Mga29uZmlndXLDoWNpw7NlbGVtLWF6b25vc8OtdMOzIG1lZ2FkdmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnTmVtIGxlaGV0IG1lZ2plbGVuw610ZW5pIGF6IGVsxZF6bcOpbnlla2V0LCBuaW5jc2VuZWsgaG96esOhZsOpcsOpc2kgam9nb2sgbWVnYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJ8OaaiBrb25maWd1csOhY2nDs2VsZW0gKGF6b25vc8OtdMOzID0gJXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICfDmmogdmVyemnDsyAoYXpvbm9zw610w7MgPSAlcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICfDnHplbWJlIMOhbGzDrXTDoXNpIMOhbGxhcG90IGZyaXNzw610dmUgKMO6aiA9ICVzLCByw6lnaSA9ICVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICdJbmNpZGVuc8OhbGxhcG90IGZyaXNzw610dmUgKMO6aiA9ICVzLCByw6lnaSA9ICVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbSAoYXpvbm9zw610w7MgPSAlcykgdMO2csO2bHZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnS2FwY3NvbGF0IGVoaGV6OiAlcyAodMOtcHVzID0gJXMpIGhvenrDoWFkdmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJ0thcGNzb2xhdCBlaGhlejogJXMgKHTDrXB1cyA9ICVzKSB0w7Zyw7ZsdmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbS1tZWdoYXTDoXJvesOhcyBmcmlzc8OtdHZlIChhem9ub3PDrXTDsyA9ICVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ07DqXYgZnJpc3PDrXR2ZSAow7pqID0gJXMsIHLDqWdpID0gJXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnQXR0cmliw7p0dW0gKCVzKSBmcmlzc8OtdHZlIGVycsWRbDog4oCeJXPigJ0sIGVycmU6IOKAniVz4oCdJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyVzLiB2ZXJ6acOzIHTDtnLDtmx2ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJ05pbmNzIGtvbmZpZ3Vyw6FjacOzZWxlbS1hem9ub3PDrXTDsyB2YWd5IHZlcnppw7Nhem9ub3PDrXTDsyBtZWdhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICdOZW0gbGVoZXQgbWVnamVsZW7DrXRlbmkgYSBrb25maWd1csOhY2nDs2VsZW1ldCwgbmluY3NlbmVrIGhvenrDoWbDqXLDqXNpIGpvZ29rIG1lZ2FkdmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnQSh6KSAlcyBrb25maWd1csOhY2nDs2VsZW0tYXpvbm9zw610w7MgbmVtIHRhbMOhbGhhdMOzIGF6IGFkYXRiw6F6aXNiYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnQSh6KSAlcyB2ZXJ6acOzYXpvbm9zw610w7MgbmVtIHRhbMOhbGhhdMOzIGF6IGFkYXRiw6F6aXNiYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICdLb25maWd1csOhY2nDs2VsZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJ255b210YXR0YTogJXMg4oCTICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnw4lydsOpbnl0ZWxlbiBvc3p0w6FseWF6b25vc8OtdMOzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJ05pbmNzIG9zenTDoWx5YXpvbm9zw610w7MgbWVnYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICdOaW5jc2VuZWsgaG96esOhZsOpcsOpc2kgam9nb2sgbWVnYWR2YSBlaGhleiBheiBvc3p0w6FseWhveiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJ05pbmNzIHRhbMOhbGF0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbSBrZXJlc8Opc2kgZXJlZG3DqW55ZWsnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJ05lbSBsZWhldCBtZWdqZWxlbsOtdGVuaSBheiBlbGVtZXQsIG5pbmNzZW5layBob3p6w6Fmw6lyw6lzaSBqb2dvayBtZWdhZHZhIGEga29uZmlndXLDoWNpw7NlbGVtaGV6ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJ8O8emVta8OpcGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICdmaWd5ZWxtZXp0ZXTDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICdpbmNpZGVucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnQSBrb25maWd1csOhY2nDs2VsZW0gw7x6ZW1iZSDDoWxsw610w6FzaSDDoWxsYXBvdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdBIGtvbmZpZ3Vyw6FjacOzZWxlbSBpbmNpZGVuc8OhbGxhcG90YSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJ01lZ2plbGVuw610ZXR0IGtvbmZpZ3Vyw6FjacOzZWxlbWVrJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ0vDtnrDtnR0JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ0VneSBlbGVtIGxlZ25hZ3lvYmIgc3rDoW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ0F6IMO8cmVzIG1lesWRayBhenQgamVsemlrLCBob2d5IGF6IGFrdHXDoWxpcyBtZXrFkWsgbWVndGFydMOhc3JhIGtlcsO8bG5layc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnS2loYWd5dmEnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ01vZGVsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnw5xneWbDqWwtdsOhbGxhbGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdTb3JvemF0c3rDoW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdNZXJldmxlbWV6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnS2FwYWNpdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdIw6Fsw7N6YXRpIGNzYXRvbMOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIGEgREhDUCBmw7Zsw7Z0dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSVAtY8OtbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdHcmFmaWt1cyBjc2F0b2zDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICdFZ3nDqWIgYmVyZW5kZXrDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnR2FyYW5jaWEgbGVqw6FyYXRpIGlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnVGVsZXDDrXTDqXMgZMOhdHVtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnMS4gdGVsZWZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnMi4gdGVsZWZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICdFLW1haWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnSMOhbMOzemF0aSBjw61tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnQWxow6Fsw7N6YXRpIG1hc3prJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICfDgXRqw6Fyw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnTGljZW5jdMOtcHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnTGljZW5jIGt1bGNzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnTWVubnlpc8OpZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICdMZWrDoXJhdGkgaWTFkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ0FkYXRob3Jkb3rDsyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnU3rDoW3DrXTDs2fDqXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICdIYXJkdmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICdIw6Fsw7N6YXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICdTem9mdHZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnTGVqw6FydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ0thcmJhbnRhcnTDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQcsOzYmHDvHplbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnVGVydmV6ZXR0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ0phdsOtdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnVmlzc3phdm9udCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdWaXpzZ8OhbGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdUZXN6dGVsw6lzL1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ0xhcHRvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnQXN6dGFsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnS2lzem9sZ8OhbMOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnRWd5w6liJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICdOeW9tdGF0w7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnS2FwY3NvbMOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ8OadHbDoWxhc3p0w7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICdXTEFOIGhvenrDoWbDqXLDqXNpIHBvbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnQml6dG9uc8OhZ2kgZXN6a8O2eic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnQml6dG9uc8OhZ2kgbWVudMOpcyBlc3prw7Z6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnRWfDqXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICdCaWxsZW50ecWxemV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0thbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICdCZWFtZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQSBrw6FydHlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdVU0IgZXN6a8O2eic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdEb2trb2zDsyDDoWxsb23DoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ0xhcG9sdmFzw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICfDiXDDvGxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdJcm9kYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ0VtZWxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnU3pvYmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ1JhY2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnTXVua2FoZWx5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ0Vsb3N6dMOzIGRvYm96JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnSVQtbMOpdGVzw610bcOpbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ0tsaWVucyBhbGthbG1hesOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnS8O2enRlcyByw6l0ZWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnS2lzem9sZ8OhbMOzIGFsa2FsbWF6w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ0tsaWVucyBvcGVyw6FjacOzcyByZW5kc3plcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICdLaXN6b2xnw6Fsw7Mgb3BlcsOhY2nDs3MgcmVuZHN6ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ0FkbWluaXN6dHLDoWNpw7NzIGVzemvDtnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnRmVsaGFzem7DoWzDs2kgZXN6a8O2eic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ0Jlw6FneWF6b3R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnRWd5ZWTDvGxpIGxpY2VuYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ0ZlbGhhc3puw6Fsw7Nua8OpbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ1Byb2Nlc3N6b3JvbmvDqW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdLaXN6b2xnw6Fsw7Nua8OpbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdDc29tw7Nwb250b25rw6ludCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ01lbm55aXPDqWdpIGxpY2VuYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdWw6FsbGFsYXRpIGxpY2VuYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0Zlamxlc3p0xZFpIGxpY2VuYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnQmVtdXRhdMOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ0lkxZFiZW4ga29ybMOhdG96b3R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnRnJlZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdOecOtbHQgZm9ycsOhc8O6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ0tvcmzDoXRsYW4nOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT0snOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICdIb3p6w6FyZW5kZWx0IGtvbmZpZ3Vyw6FjacOzZWxlbWVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnw5xneWbDqWwtdsOhbGxhbGF0aG96IGhvenrDoXJlbmRlbHQga29uZmlndXLDoWNpw7NlbGVtZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICfDnGd5ZsOpbC1mZWxoYXN6bsOhbMOzaG96IGhvenrDoXJlbmRlbHQga29uZmlndXLDoWNpw7NlbGVtZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJ0NNREIgYmXDoWxsw610w6Fzb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJ0VneWVkaSBuw6l2IGVsbGVuxZFyesOpc2Uga2l6w6Fyw7NsYWcgdWd5YW5hYmJhbiBhIGtvbmZpZ3Vyw6FjacOzZWxlbSBvc3p0w6FseWJhbiAo4oCeb3N6dMOhbHnigJ0pIHZhZ3kgZ2xvYsOhbGlzYW4gKOKAnmdsb2LDoWxpc+KAnSksIGFtZWx5IGF6dCBqZWxlbnRpLCBob2d5IG1pbmRlbiBtZWdsw6l2xZEga29uZmlndXLDoWNpw7NlbGVtIGVneSBmacOza2JhIGxlc3ogZmVsdsOpdmUgYSBrZXR0xZF6w6lzZWsga2VyZXPDqXNla29yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICdLb25maWd1csOhY2nDs2VsZW1layc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnS29uZmlndXLDoWNpw7NlbGVtIGhvenrDoWFkw6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICdLb25maWd1csOhY2nDs2VsZW0gc3plcmtlc3p0w6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0tvbmZpZ3Vyw6FjacOzZWxlbSBlc2Vtw6lueSBtb2R1bCwgYW1lbHkgZW5nZWTDqWx5ZXppIGEgbmFwbMOzesOhc3QgYXogZWzFkXptw6lueWVrYmUgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbSBlbMWRem3DqW55ZWkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbSBueW9tdGF0w6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICdLb25maWd1csOhY2nDs2VsZW0gbmFnecOtdMOhc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICdLb25maWd1csOhY2nDs2VsZW0tc3rDoW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnS29uZmlndXLDoWNpw7NlbGVtLWtvcmzDoXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbS1rb3Jsw6F0IG9sZGFsYW5rw6ludC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJ0tvbmZpZ3Vyw6FjacOzbWVuZWR6c21lbnQtYWRhdGLDoXppcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbSB0w7ZtZWdlcyBtb2R1bC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCBrb25maWd1csOhY2nDs2VsZW0ga2VyZXPDqXNpIGjDoXR0w6lycHJvZ3JhbSDDunR2w6FsYXN6dMOzamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICdNZWdoYXTDoXJvesOhc29rIGzDqXRyZWhvesOhc2Egw6lzIGtlemVsw6lzZSBhIGtvbmZpZ3Vyw6FjacOzZWxlbWVrbsOpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ03FsXZlbGV0ZWsgbWVnaGF0w6Fyb3rDoXNhLCBhaG9sIGVneSBiZcOhbGzDrXTDoXNvayBnb21iIMOpcmhldMWRIGVsIGEga2FwY3NvbHQgb2JqZWt0dW1vayBmZWzDvGxldGkgZWxlbWVuIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9IOKAnsO2c3N6ZXRldHTigJ0pLiBOZSBmZWxlZGplLCBob2d5IGV6ZWtuZWsgYSBtxbF2ZWxldGVrbmVrIHJlbmRlbGtlem5pw7xrIGtlbGwgYSBrw7Z2ZXRrZXrFkSBKUyDDqXMgQ1NTIGbDoWpsb2sgcmVnaXN6dHLDoWzDoXPDoXZhbDogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgw6lzIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdva2F0IGF6IElUU00ga29uZmlndXLDoWNpw7NlbGVtZWsgbMOpdHJlaG96w6Fzw6Fob3ogYXogw6FsdGFsw6Fub3MgZmVsw7xsZXQgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rYXQgYXogSVRTTSBrb25maWd1csOhY2nDs2VsZW1layB0w7ZybMOpc8OpaGV6IGF6IMOhbHRhbMOhbm9zIGZlbMO8bGV0IGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdva2F0IGF6IElUU00ga29uZmlndXLDoWNpw7NlbGVtZWsgbGVrw6lyw6lzw6loZXogYXogw6FsdGFsw6Fub3MgZmVsw7xsZXQgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rYXQgYXogSVRTTSBrb25maWd1csOhY2nDs2VsZW1layBrZXJlc8Opc8OpaGV6IGF6IMOhbHRhbMOhbm9zIGZlbMO8bGV0IGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdva2F0IGF6IElUU00ga29uZmlndXLDoWNpw7NlbGVtZWsgZnJpc3PDrXTDqXPDqWhleiBheiDDoWx0YWzDoW5vcyBmZWzDvGxldCBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJ0VneSDDoXR0ZWtpbnTFkSBtb2R1bHQgaGF0w6Fyb3ogbWVnIGVneSBrb25maWd1csOhY2nDs2VsZW0gbGlzdGEga2lzIG7DqXpldMOpbmVrIG1lZ2plbGVuw610w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICdSZWd1bMOhcmlzIGtpZmVqZXrDqXNla2V0IGhhdMOhcm96IG1lZyBlZ3nDqW5pbGVnIG1pbmRlbiBlZ3llcyBrb25maWd1csOhY2nDs2VsZW0gb3N6dMOhbHluw6FsIGEga29uZmlndXLDoWNpw7NlbGVtIG5ldsOpbmVrIGVsbGVuxZFyesOpc8OpaGV6LCB2YWxhbWludCBhIG1lZ2ZlbGVsxZEgaGliYcO8emVuZXRlayBtZWdqZWxlbsOtdMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBheiDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvc3p0w6FseSBhbGFww6lydGVsbWV6ZXR0IGFsb2JqZWt0dW3DoXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBDSSBtZWdoYXTDoXJvesOhcy1zemVya2VzenTFkSBzb3JhaW5hayBzesOhbcOhdCBheiBhZG1pbmlzenRyw6FjacOzcyBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IGluY2lkZW5zw6FsbGFwb3RvayBzb3JyZW5kasOpdCBhIGxlZ21hZ2FzYWJidMOzbCAocMOpbGTDoXVsIGtyaXRpa3VzKSBhIGxlZ2FsYWNzb255YWJiaWcgKHDDqWxkw6F1bCBmdW5rY2lvbsOhbGlzKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEga2FwY3NvbMOzZMOzIMO8emVtYmUgw6FsbMOtdMOhc2kgw6FsbGFwb3Rva2F0LCBhaG9sIGEga2FwY3NvbHQgamVneWVrIGJlZm9secOhc29saGF0asOhayBlZ3kga29uZmlndXLDoWNpw7NlbGVtIMOhbGxhcG90w6F0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBrZXJlc8Opc2kga29ybMOhdG90IGF6IEFnZW50SVRTTUNvbmZpZ0l0ZW0ga8OpcGVybnnFkW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIGtlcmVzw6lzaSBrb3Jsw6F0b3QgYXogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBrw6lwZXJuecWRbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIG1lZ2plbGVuw610ZXR0IG9zemxvcG9rYXQgYSBrb25maWd1csOhY2nDs2VsZW0gw6F0dGVraW50xZFiZW4uIEVubmVrIGEgYmXDoWxsw610w6FzbmFrIG5pbmNzIGhhdMOhc2EgYXogb3N6bG9wIGhlbHl6ZXTDqXJlLiBNZWdqZWd5esOpczogYXogb3N6dMOhbHkgb3N6bG9wIG1pbmRpZyBsw6F0aGF0w7MsIGhhIGF6IOKAnsOWc3N6ZXPigJ0gc3rFsXLFkSBraSB2YW4gdsOhbGFzenR2YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIG1lZ2plbGVuw610ZXR0IG9zemxvcG9rYXQgYSBrb25maWd1csOhY2nDs2VsZW0ga2VyZXPFkWJlbi4gRW5uZWsgYSBiZcOhbGzDrXTDoXNuYWsgbmluY3MgaGF0w6FzYSBheiBvc3psb3AgaGVseXpldMOpcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBDSS1rIG1lZ2plbGVuw610ZXR0IG9zemxvcGFpdCBhIGtvbmZpZ3Vyw6FjacOzZWxlbSDDoXR0ZWtpbnTFkWJlbiBhIENJIG9zenTDoWx5dMOzbCBmw7xnZ8WRZW4uIE1pbmRlbiBiZWplZ3l6w6lzdCBheiBvc3psb3AgbmV2ZSDDqXMgZHVwbGEga2V0dMWRc3BvbnQgZWzFkXRhZ2dhbCBrZWxsIGVsbMOhdG5pIChhemF6IENvbXB1dGVyOjopLiBWYW4gbsOpaMOhbnkgb2x5YW4gQ0ktYXR0cmliw7p0dW0sIGFtZWx5IGvDtnrDtnMgbWluZGVuIENJLXZlbCAocMOpbGTDoXVsIGEgQ29tcHV0ZXIgb3N6dMOhbHluw6FsOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBBeiBlZ3nDqW5pIENJLWF0dHJpYsO6dHVtb2sgbWVnamVsZW7DrXTDqXPDqWhleiwgYWhvZ3kgYXpvayBhIENJLW1lZ2hhdMOhcm96w6FzYmFuIG1lZyB2YW5uYWsgYWR2YSwgYSBrw7Z2ZXRrZXrFkSBzw6ltw6F0IGtlbGwgaGFzem7DoWxuaSAocMOpbGTDoXVsIGEgQ29tcHV0ZXIgb3N6dMOhbHluw6FsKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIEhhIGVneSBDSSBvc3p0w6FseWhveiBuaW5jcyBiZWplZ3l6w6lzLCBha2tvciBheiBhbGFww6lydGVsbWV6ZXR0IG9zemxvcG9rIGxlc3puZWsgbWVnamVsZW7DrXR2ZSwgYWhvZ3kgYXogSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMgYmXDoWxsw610w6FzYmFuIG1lZyB2YW4gaGF0w6Fyb3p2YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBDSS1rIG1lZ2plbGVuw610ZXR0IG9zemxvcGFpdCBhIGtvbmZpZ3Vyw6FjacOzZWxlbSBrZXJlc8WRYmVuIGEgQ0kgb3N6dMOhbHl0w7NsIGbDvGdnxZFlbi4gTWluZGVuIGJlamVneXrDqXN0IGF6IG9zemxvcCBuZXZlIMOpcyBkdXBsYSBrZXR0xZFzcG9udCBlbMWRdGFnZ2FsIGtlbGwgZWxsw6F0bmkgKGF6YXogQ29tcHV0ZXI6OikuIFZhbiBuw6low6FueSBvbHlhbiBDSS1hdHRyaWLDunR1bSwgYW1lbHkga8O2esO2cyBtaW5kZW4gQ0ktdmVsIChww6lsZMOhdWwgYSBDb21wdXRlciBvc3p0w6FseW7DoWw6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIEF6IGVnecOpbmkgQ0ktYXR0cmliw7p0dW1vayBtZWdqZWxlbsOtdMOpc8OpaGV6LCBhaG9neSBhem9rIGEgQ0ktbWVnaGF0w6Fyb3rDoXNiYW4gbWVnIHZhbm5hayBhZHZhLCBhIGvDtnZldGtlesWRIHPDqW3DoXQga2VsbCBoYXN6bsOhbG5pIChww6lsZMOhdWwgYSBDb21wdXRlciBvc3p0w6FseW7DoWwpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSGEgZWd5IENJIG9zenTDoWx5aG96IG5pbmNzIGJlamVneXrDqXMsIGFra29yIGF6IGFsYXDDqXJ0ZWxtZXpldHQgb3N6bG9wb2sgbGVzem5layBtZWdqZWxlbsOtdHZlLCBhaG9neSBheiBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucyBiZcOhbGzDrXTDoXNiYW4gbWVnIHZhbiBoYXTDoXJvenZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIGtvbmZpZ3Vyw6FjacOzZWxlbWVrIG1lZ2plbGVuw610ZXR0IG9zemxvcGFpdCBhIGtvbmZpZ3Vyw6FjacOzZWxlbSDDoXR0ZWtpbnTFkWJlbiBhIGtvbmZpZ3Vyw6FjacOzZWxlbS1vc3p0w6FseXTDs2wgZsO8Z2fFkWVuLiBNaW5kZW4gYmVqZWd5esOpc3QgYXogb3N6bG9wIG5ldmUgw6lzIGR1cGxhIGtldHTFkXNwb250IGVsxZF0YWdnYWwga2VsbCBlbGzDoXRuaSAoYXpheiBDb21wdXRlcjo6KS4gVmFuIG7DqWjDoW55IG9seWFuIGtvbmZpZ3Vyw6FjacOzZWxlbS1hdHRyaWLDunR1bSwgYW1lbHkga8O2esO2cyBtaW5kZW4ga29uZmlndXLDoWNpw7NlbGVtbWVsIChww6lsZMOhdWwgYSBDb21wdXRlciBvc3p0w6FseW7DoWw6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIEF6IGVnecOpbmkga29uZmlndXLDoWNpw7NlbGVtLWF0dHJpYsO6dHVtb2sgbWVnamVsZW7DrXTDqXPDqWhleiwgYWhvZ3kgYXpvayBhIGtvbmZpZ3Vyw6FjacOzZWxlbS1tZWdoYXTDoXJvesOhc2JhbiBtZWcgdmFubmFrIGFkdmEsIGEga8O2dmV0a2V6xZEgc8OpbcOhdCBrZWxsIGhhc3puw6FsbmkgKHDDqWxkw6F1bCBhIENvbXB1dGVyIG9zenTDoWx5bsOhbCk6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBIYSBlZ3kga29uZmlndXLDoWNpw7NlbGVtIG9zenTDoWx5aG96IG5pbmNzIGJlamVneXrDqXMsIGFra29yIGF6IGFsYXDDqXJ0ZWxtZXpldHQgb3N6bG9wb2sgbGVzem5layBtZWdqZWxlbsOtdHZlLCBhaG9neSBheiBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucyBiZcOhbGzDrXTDoXNiYW4gbWVnIHZhbiBoYXTDoXJvenZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBrb25maWd1csOhY2nDs2VsZW1layBtZWdqZWxlbsOtdGV0dCBvc3psb3BhaXQgYSBrYXBjc29sYXRpIHTDoWJsYSBrb21wbGV4IG7DqXpldMOpYmVuIGF6IMO2c3N6ZXMga29uZmlndXLDoWNpw7NlbGVtLW9zenTDoWx5bsOhbC4gSGEgbmluY3MgYmVqZWd5esOpcywgYWtrb3IgYXogYWxhcMOpcnRlbG1lemV0dCBvc3psb3BvayBsZXN6bmVrIG1lZ2plbGVuw610dmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEgQ0ktayBtZWdqZWxlbsOtdGV0dCBvc3psb3BhaXQgYSBrYXBjc29sYXRpIHTDoWJsYSBrb21wbGV4IG7DqXpldMOpYmVuIGEgQ0kgb3N6dMOhbHl0w7NsIGbDvGdnxZFlbi4gTWluZGVuIGJlamVneXrDqXN0IGF6IG9zemxvcCBuZXZlIMOpcyBkdXBsYSBrZXR0xZFzcG9udCBlbMWRdGFnZ2FsIGtlbGwgZWxsw6F0bmkgKGF6YXogQ29tcHV0ZXI6OikuIFZhbiBuw6low6FueSBvbHlhbiBDSS1hdHRyaWLDunR1bSwgYW1lbHkga8O2esO2cyBtaW5kZW4gQ0ktdmVsIChww6lsZMOhdWwgYSBDb21wdXRlciBvc3p0w6FseW7DoWw6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIEF6IGVnecOpbmkgQ0ktYXR0cmliw7p0dW1vayBtZWdqZWxlbsOtdMOpc8OpaGV6LCBhaG9neSBhem9rIGEgQ0ktbWVnaGF0w6Fyb3rDoXNiYW4gbWVnIHZhbm5hayBhZHZhLCBhIGvDtnZldGtlesWRIHPDqW3DoXQga2VsbCBoYXN6bsOhbG5pIChww6lsZMOhdWwgYSBDb21wdXRlciBvc3p0w6FseW7DoWwpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSGEgZWd5IENJIG9zenTDoWx5aG96IG5pbmNzIGJlamVneXrDqXMsIGFra29yIGF6IGFsYXDDqXJ0ZWxtZXpldHQgb3N6bG9wb2sgbGVzem5layBtZWdqZWxlbsOtdHZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphLCBob2d5IG1lbHkga2FwY3NvbGF0dMOtcHVzb2sgKGEgamVneSBuw6l6xZFwb250asOhYsOzbCBlbG5ldmV6dmUpIGJlZm9secOhc29saGF0asOhayBlZ3kga2FwY3NvbHQga29uZmlndXLDoWNpw7NlbGVtIMOhbGxhcG90w6F0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEsIGhvZ3kgbWVseSBqZWd5dMOtcHVzIGJlZm9secOhc29saGF0amEgZWd5IGthcGNzb2x0IGtvbmZpZ3Vyw6FjacOzZWxlbSDDoWxsYXBvdMOhdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ0tvbmZpZ3Vyw6FjacOzZWxlbSB0w7ZybMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJ8OcemVtYmUgw6FsbMOtdMOhc2kgw6FsbGFwb3Qgc3rDrW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0tldHTFkXrDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnRW5nZWTDqWx5ZXppIGEga29uZmlndXLDoWNpw7NlbGVtIHTDtm1lZ2VzIG3FsXZlbGV0IGZ1bmtjacOzdCBheiDDvGd5aW50w6l6xZFpIGVsxZF0w6l0cHJvZ3JhbW7DoWwsIGhvZ3kgZWd5c3plcnJlIGVneW7DqWwgdMO2YmIga29uZmlndXLDoWNpw7NlbGVtbWVsIGRvbGdvemhhc3Nvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJ0NzYWsgYSBmZWxzb3JvbHQgY3NvcG9ydG9rbmFrIGVuZ2Vkw6lseWV6aSBhIGtvbmZpZ3Vyw6FjacOzZWxlbSB0w7ZtZWdlcyBtxbF2ZWxldCBmdW5rY2nDs3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICdFbmdlZMOpbHllemkgdmFneSBsZXRpbHRqYSBhenQgYSBmdW5rY2lvbmFsaXTDoXN0LCBhbWVseSBhIGtvbmZpZ3Vyw6FjacOzZWxlbWVrIGVneWVkaSBuZXZlaXQgZWxsZW7FkXJ6aS4gQSBsZWhldMWRc8OpZyBlbmdlZMOpbHllesOpc2UgZWzFkXR0IGVsbGVuxZFyaXpuaWUga2VsbCBhIHJlbmRzemVyw6l0LCBob2d5IHZhbm5hay1lIG3DoXIgbMOpdGV6xZEga29uZmlndXLDoWNpw7NlbGVtZWsga2V0dMWResO2dHQgbsOpdnZlbC4gRXp0IG1lZ3RlaGV0aSBhIGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwgcGFyYW5jc2bDoWpsbGFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICdFc2Vtw6lueW1vZHVsIGEga29uZmlndXLDoWNpw7NlbGVtIMOhbGxhcG90w6FuYWsgYmXDoWxsw610w6Fzw6Fob3ogZWd5IGplZ3kga29uZmlndXLDoWNpw7NlbGVtIGhpdmF0a296w6Fzw6FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJ0lUU00ga29uZmlndXLDoWNpw7NlbGVtIMOhdHRla2ludMOpcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICdFZ3kgbW9kdWwgZWd5IG9zenTDoWx5w6lydCBmZWxlbMWRcyBjc29wb3J0IGVsbGVuxZFyesOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJ0VneSBtb2R1bCBlZ3kga29uZmlndXLDoWNpw7NlbGVtw6lydCBmZWxlbMWRcyBjc29wb3J0IGVsbGVuxZFyesOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJ0VneSBtb2R1bCBJVFNNIGtvbmZpZ3Vyw6FjacOzZWxlbSBzdGF0aXN6dGlrw6FrIGVsxZHDoWxsw610w6Fzw6Fob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ09iamVrdHVtIGjDoXR0w6lycHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBheiBpbXBvcnTDoWzDoXMvZXhwb3J0w6Fsw6FzIG1vZHVsaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICfDgXR0ZWtpbnTDqXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcmFtw6l0ZXJlayBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IMO8Z3lmw6lsLXbDoWxsYWxhdCBrb25maWd1csOhY2nDs2VsZW0gw6F0dGVraW50xZFqw6luZWsgdmV6w6lybMWRcHVsdCBow6F0dMOpcnByb2dyYW1qw6Fob3ouIEEg4oCeTGltaXTigJ0gYXogYWxhcMOpcnRlbG1lemV0dGVuIG1lZ2plbGVuw610ZXR0IGJlamVneXrDqXNlayBzesOhbWEuIEEg4oCeR3JvdXDigJ0gaGFzem7DoWxoYXTDsyBhIGhvenrDoWbDqXLDqXMga29ybMOhdG96w6Fzw6Fob3ogYSBixZF2w610bcOpbnlyZSAocMOpbGTDoXVsIEdyb3VwOiBhZG1pbjtjc29wb3J0MTtjc29wb3J0MjspLiBBIOKAnkRlZmF1bHTigJ0gYXp0IGhhdMOhcm96emEgbWVnLCBob2d5IGEgYsWRdsOtdG3DqW55IGFsYXDDqXJ0ZWxtZXpldHRlbiBlbmdlZMOpbHllenZlIHZhbiwgdmFneSBob2d5IGEgZmVsaGFzem7DoWzDs25hayBrw6l6emVsIGtlbGwgZW5nZWTDqWx5ZXpuaWUgYXp0LiBBIOKAnkNhY2hlVFRMTG9jYWzigJ0gYSBixZF2w610bcOpbnkgZ3lvcnPDrXTDs3TDoXIgaWRlamUgcGVyY2Jlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQYXJhbcOpdGVyZWsgYXogw7x6ZW1iZSDDoWxsw610w6FzaSDDoWxsYXBvdG9rIHN6w61uZWloZXogYXogw7xneWludMOpesWRaSBmZWzDvGxldCBiZcOhbGzDrXTDoXNvayBuw6l6ZXTDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQYXJhbcOpdGVyZWsgYXogw7x6ZW1iZSDDoWxsw610w6FzaSDDoWxsYXBvdG9raG96IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgYmXDoWxsw610w6Fzb2sgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtw6l0ZXJlayBheiDDoWx0YWzDoW5vcyBrYXRhbMOzZ3VzIGF0dHJpYsO6dHVtYWluYWsgcMOpbGRhIGpvZ29zdWx0c8OhZyBjc29wb3J0amFpaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICdQYXJhbcOpdGVyZWsgYXogb2xkYWxha2hveiAoYW1lbHlla2VuIGEga29uZmlndXLDoWNpw7NlbGVtZWsgbWVnamVsZW5uZWspLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnSm9nb3N1bHRzw6FnaSBjc29wb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGF6IElUU00ga29uZmlndXLDoWNpw7NlbGVtIGvDqXBlcm55xZFqw6luZWsgaGFzem7DoWxhdMOhaG96IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGF6IElUU00ga29uZmlndXLDoWNpw7NlbGVtIGtlcmVzw6lzaSBrw6lwZXJuecWRasOpbmVrIGhhc3puw6FsYXTDoWhveiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgYXogSVRTTSBrb25maWd1csOhY2nDs2VsZW0gbmFnecOtdMOhc2kga8OpcGVybnnFkWrDqW5layBoYXN6bsOhbGF0w6Fob3ogYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgYXogSVRTTSBrb25maWd1csOhY2nDs2VsZW0gaG96esOhYWTDoXNhIGvDqXBlcm55xZFqw6luZWsgaGFzem7DoWxhdMOhaG96IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBheiBJVFNNIGtvbmZpZ3Vyw6FjacOzZWxlbSBzemVya2VzenTDqXNlIGvDqXBlcm55xZFqw6luZWsgaGFzem7DoWxhdMOhaG96IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBheiBJVFNNIGtvbmZpZ3Vyw6FjacOzZWxlbSBlbMWRem3DqW55ZWsga8OpcGVybnnFkWrDqW5layBoYXN6bsOhbGF0w6Fob3ogYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBheiBJVFNNIGtvbmZpZ3Vyw6FjacOzZWxlbSBueW9tdGF0w6FzYSBrw6lwZXJuecWRasOpbmVrIGhhc3puw6FsYXTDoWhveiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGEga29uZmlndXLDoWNpw7NlbGVtZWsgdMO2cmzDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICdLb25maWd1csOhY2nDs2VsZW1layBrZXJlc8Opc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJ0tpdsOhbGFzenRqYSBhIGtvbmZpZ3Vyw6FjacOzZWxlbSBzesOhbWVsxZHDoWxsw610w7MgbW9kdWxqw6F0LiBBeiDigJ5BdXRvSW5jcmVtZW504oCdIG7DtnZlbGkgYSBrb25maWd1csOhY2nDs2VsZW0gc3rDoW3DoXQsIGEgaGFzem7DoWx0IFN5c3RlbUlELCBDb25maWdJdGVtQ2xhc3NJRCDDqXMgc3rDoW1sw6Fsw7Mgw6lydMOpa8OpdC4gQSBmb3Jtw6F0dW06IOKAnlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXLigJ0sIHDDqWxkw6F1bDogMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJ0VneSBrb25maWd1csOhY2nDs2VsZW0gaW5jaWRlbnPDoWxsYXBvdMOhbmFrIGF1dG9tYXRpa3VzIGJlw6FsbMOtdMOhc2EsIGFtaWtvciBlZ3kgamVneWV0IGthcGNzb2xuYWsgZWd5IGtvbmZpZ3Vyw6FjacOzZWxlbWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCZcOhbGzDrXRqYSBheiDDvHplbWJlIMOhbGzDrXTDoXNpIMOhbGxhcG90b3QgYXogw7xneWludMOpesWRaSBmZWzDvGxldCBrb25maWd1csOhY2nDs2VsZW0gdMO2bWVnZXMgbcWxdmVsZXQga8OpcGVybnnFkWrDqW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Jlw6FsbMOtdGphIGF6IGluY2lkZW5zw6FsbGFwb3RvdCBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IGtvbmZpZ3Vyw6FjacOzZWxlbSB0w7ZtZWdlcyBtxbF2ZWxldCBrw6lwZXJuecWRasOpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuLCBhbWVseSBsZWhldMWRdsOpIHRlc3ppIGVneSBrb25maWd1csOhY2nDs2VsZW0gw7Zzc3pla2FwY3NvbMOhc8OhdCBlZ3kgbcOhc2lrIG9iamVrdHVtbWFsIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQga29uZmlndXLDoWNpw7NlbGVtIG5hZ3nDrXTDoXNpIG7DqXpldMOpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGVneSBrb25maWd1csOhY2nDs2VsZW0gZWzFkXptw6lueWVpbmVrIGVsw6lyw6lzw6loZXogYXogw7xneWludMOpesWRaSBmZWzDvGxldCBrb25maWd1csOhY2nDs2VsZW0gw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4gZWd5IGtvbmZpZ3Vyw6FjacOzZWxlbSBlbMWRem3DqW55ZWluZWsgZWzDqXLDqXPDqWhleiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gYXogZWxlbSBuYWd5w610w6FzaSBuw6l6ZXTDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGVneSBrb25maWd1csOhY2nDs2VsZW0gdMO2cmzDqXPDqWhleiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gYXogZWxlbSBuYWd5w610w6FzaSBuw6l6ZXTDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGVneSBrb25maWd1csOhY2nDs2VsZW0ga2V0dMWResOpc8OpaGV6IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQga29uZmlndXLDoWNpw7NlbGVtIMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGVneSBrb25maWd1csOhY2nDs2VsZW0ga2V0dMWResOpc8OpaGV6IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBheiBlbGVtIG5hZ3nDrXTDoXNpIG7DqXpldMOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBlZ3kga29uZmlndXLDoWNpw7NlbGVtIHN6ZXJrZXN6dMOpc8OpaGV6IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBheiBlbGVtIG5hZ3nDrXTDoXNpIG7DqXpldMOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IGtvbmZpZ3Vyw6FjacOzZWxlbSBuYWd5w610w6FzaSBuw6l6ZXRoZXogdmFsw7Mgdmlzc3phdMOpcsOpc2hlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGVneSBrb25maWd1csOhY2nDs2VsZW0gbnlvbXRhdMOhc8OhaG96IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBheiBlbGVtIG5hZ3nDrXTDoXNpIG7DqXpldMOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4gZWd5IGtvbmZpZ3Vyw6FjacOzZWxlbWJlIHTDtnJ0w6luxZEgbmFnecOtdMOhc2hveiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IGtvbmZpZ3Vyw6FjacOzZWxlbSDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lZ2plbGVuw610aSBhIGtvbmZpZ3Vyw6FjacOzZWxlbSBlbMWRem3DqW55ZWl0IChmb3Jkw610b3R0IHNvcnJlbmRiZW4pIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJ0VneSBrb25maWd1csOhY2nDs2VsZW0gYXpvbm9zw610w7NqYSwgcMOpbGTDoXVsOiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gQXogYWxhcMOpcnRlbG1lemV0dDogQ29uZmlnSXRlbSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnb3N6dMOhbHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnZ2xvYsOhbGlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnYmXDvHplbWVsw6lzIHV0w6FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICdiZcO8emVtZWzDqXMgZWzFkXR0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICdiZcO8emVtZWx2ZSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmlkX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdQZW5nZWxvbGFhbiBpdGVtIGtvbmZpZ3VyYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAndWJhaCBkZWZpbmlzaSBrZWxhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnRGVmaW5pc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlJ30gPSAnVWJhaCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnREYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnS29uZGlzaSBpbnNpZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICdTdGF0dXMgcGVueWViYXJhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ0tlbGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ1RpcGUgc3RhdHVzIHBlbnllYmFyYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0tvbmRpc2kgaW5zaWRlbiBzYWF0IGluaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdUaXBlIFN0YXR1cyBpbnNpZGVuIHNhYXQgaW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1RlcmFraGlyIGRpdWJhaCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdJdGVtIGtvbmZpZ3VyYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ1NhcmluZ2FuIHVudHVrIGtlbGFzLWtlbGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ1BpbGloIHNhdHUga2VsYXMgZGFyaSBkYXRhciB1bnR1ayBtZW1idWF0IHNlYnVhaCBpdGVtIGtvbmZpZ3VyYXNpIGJhcnUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICdUaW5kYWthbiBtYXNhbCBJdGVtS29uZmlndXJhc2kgSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlJ30gPSAnU3RhdHVzIHBlbnllYmFyYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUnfSA9ICdTdGF0dXMgaW5zaWRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICdUYXV0YW4gdW50dWsga2UgbGFpbm55YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENvbmZpZ3VyYXRpb24gSXRlbSBudW1iZXIhJ30gPSAnTm9tb3IgaXRlbSBrb25maWd1cmFzaSB0aWRhayBzYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG51bWJlciBvZiBhbm90aGVyIENvbmZpZ3VyYXRpb24gSXRlbSB0byBsaW5rIHdpdGguJ30gPSAnSnVtbGFoIGl0ZW0ga29uZmlndXJhc2kgbGFpbm55YSB5YW5nIGFrYW4gZGkgaHVidW5na2FuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ05hbWEgaXRlbSBrb25maWd1cmFzaSBpbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJ05hbWEgaW5pIHRlbGFoIGRpIGd1bmFrYW4gb2xlaCBJdGVtS29uZmlndXJhc2kgZGVuZ2FuIG5vbW9yKG5vbW9yLW5vbW9yKSBiZXJpa3V0OiAlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJ0lzaSBzZWphcmFoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICdCdWF0V2FrdHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWm9vbSB2aWV3J30gPSAnUGFuZGFuZ2FuIGRla2F0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdTZXR0aW5nIEtvbnRla3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnSXRlbSBrb25maWd1cmFzaSBwZXIgaGFsYW1hbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJ011bGFpIFBlbmNhcmlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdDYXJpIGRpIHZlcnNpIHNlYmVsdW1ueWEganVnYSA/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnSXRlbSBLb25maWd1cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2kgaXRlbSBrb25maWd1cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdTdGF0dXMgcGVueWViYXJhYW4gc2FhdCBpbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnVGVyYWtoaXIgZGlydWJhaCBvbGVoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdUdW5qdWthbiBzYXR1IHZlcnNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnVHVuanVrYW4gc2VtdWEgdmVyc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ1ZlcnNpIHN0YXR1cyBpbnNpZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJ1ZlcnNpIHN0YXR1cyBwZW55ZWJhcmFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnTm9tb3IgdmVyc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ1JpbmNpYW4gdmVyc2kgaXRlbSBrb25maWd1cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ01pbGlrJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ0l0ZW1Lb25maWd1cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICdUaWRhayBhZGEgaGFzaWwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnS29uZmlndXJhc2kgcGVuY2FyaWFuIG5pbGFpJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnU3RhdHVzIHBlbnllYmFyYW4gaXRlbSBrb25maWd1cmFzaSBpbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdTdGF0dXMgaW5zaWRlbiBpdGVtIGtvbmZpZ3VyYXNpIGluaSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdEaWFudGFyYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICdKdW1sYWggbWFrc2ltdW0gZGFyaSAxIGVsZW1lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICdCaWRhbmcga29zb25nIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBuaWxhaSBzYWF0IGluaSBkaXNpbXBhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnRGlsZXdhdGknOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ01vZGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ05vbW9yIHNlcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdIYXJkIERpc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdLYXBhc2l0YXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnQWRhcHRlciBKYXJpbmdhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCBsZWJpaCBkYXJpIERIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJ0FsYW1hdCBJUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdBZGFwdGVyIGdyYWZpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICdQZXJhbGF0YW4gbGFpbm55YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICdUYW5nZ2FsIGthZGFsdWFyc2EgZ2FyYW5zaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdUYW5nZ2FsIGluc3RhbGFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZXBvbiAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICdUZWxlcG9uIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ0FsYW1hdCBKYXJpbmdhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ1N1Ym5ldCBNYXNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdHYXRld2F5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ1RpcGUgTGlzZW5zaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ0t1bmNpIGxpc2Vuc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICdLdWFudGl0YXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnVGFuZ2dhbCBLYWRhbHVhcnNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTWVkaWEnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdUZWxhaCBrYWRhbHVhcnNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnUGVtZWxpaGFyYWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ1RlbGFoIGRpcmVuY2FuYWthbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdQZXJiYWlraSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnUGVuc2l1bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdVbGFzYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1VqaS9RQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICdMYXB0b3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ0Rlc2t0b3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnUERBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0xhaW4tbGFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTW9uaXRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnUGVuY2V0YWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnVHVrYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnUm91dGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnVGl0aWsgYWtzZXMgV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICdQZXJhbmdrYXQga2VhbWFuYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ1BlcmFuZ2thdCBCYWNrdXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdNb3VzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJ0tleWJvYXJkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0thbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICdCZWFtZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ0thcnR1IFBDTUNJQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnUGVyYW5na2F0IFVTQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdTdGFzaXVuIGRvayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnUGVtaW5kYWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdNZW1iYW5ndW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnS2FudG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnTGFudGFpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICdSdWFuZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnVGVtcGF0IGtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ091dGxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJ0Zhc2lsaXRhcyBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICdUZWxjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnQXBsaWthc2kgcGVsYW5nZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ0FwbGlrYXNpIHNlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdPUyBwZWxhbmdnYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnT1MgU2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdQZXJhbGF0YW4gQWRtaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnUGVyYWxhdGFuIHBlbmdndW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnVGVydGFuYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdMaXNlbnNpIHR1bmdnYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdQZXIgUGVuZ2d1bmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ1BlciBQcm9zZXNvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnUGVyIHNlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ1BlciBOb2RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnTGlzZW5zaSBKaWxpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdMaXNlbnNpIHBlcnVzYWhhYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdMaXNlbnNpIHBlbmdlbWJhbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RlbW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnRGliYXRhc2kgd2FrdHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdGcmVld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ1N1bWJlciBUZXJidWthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ1RpZGFrIHRlcmJhdGFzJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJ1Blcmlrc2EgaGFueWEgbmFtYSB1bmlrIHNhamEgZGkgZGFsYW0ga2VsYXMoXCdrZWxhc1wnKSBpdGVta29uZmlndXJhc2kgeWFuZyBzYW1hIGF0YXUgc2VjYXJhIGdsb2JhbCAoXCdnbG9iYWwpLCB5YW5nIGJlcmFydGkgc2V0aWFwIEl0ZW1Lb25maWd1cmFzaSB5YW5nIGFkYSBha2FuIGRpcGVyaGl0dW5na2FuIGtldGlrYSBtZW5jYXJpIGR1cGxpa2F0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJ2l0ZW0ga29uZmlndXJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9kdWwgcGVyaXN0aXdhIGl0ZW0ga29uZmlndXJhc2kgeWFuZyBtZW5nYWt0aWZrYW4gbG9nZ2luZyBrZSByaXdheWF0IHBhZGEgYW50YXJtdWthIGFnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnQmF0YXMgaXRlbSBrb25maWd1cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSb3V0ZXIgcGVuY2FyaWFuIGJhY2tlbmQgaXRlbSBrb25maWd1cmFzaSBwYWRhIGFudGFybXVrYSBhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICdCdWF0IGRhbiBhdHVyIGRlZmluaXNpIC0gZGVmaW5pc2kgdW50dWsgaXRlbSBrb25maWd1cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmlzaWthbiBpemluIHlhbmcgZGkgYnV0dWhrYW4gdW50dWsgbWVuY2lwdGFrYW4gaXRlbSBrb25maWd1cmFzaSBJVFNNIGRlbmdhbiBtZW5nZ3VuYWthbiBhbnRhcm11a2EgdW11bS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pc2lrYW4gaXppbiB5YW5nIGRpIGJ1dHVoa2FuIHVudHVrIG1lbmRhcGF0a2FuIGl0ZW0ga29uZmlndXJhc2kgSVRTTSBkZW5nYW4gbWVuZ2d1bmFrYW4gYW50YXJtdWthIHVtdW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmlzaWthbiBpemluIHlhbmcgZGkgYnV0dWhrYW4gdW50dWsgbWVuY2FyaSBpdGVtIGtvbmZpZ3VyYXNpIElUU00gZGVuZ2FuIG1lbmdndW5ha2FuIGFudGFybXVrYSB1bXVtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pc2lrYW4gaXppbiB5YW5nIGRpIGJ1dHVoa2FuIHVudHVrIG1lbXBlcmJhcnVpIGl0ZW0ga29uZmlndXJhc2kgSVRTTSBkZW5nYW4gbWVuZ2d1bmFrYW4gYW50YXJtdWthIHVtdW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJ0RlZmluaXNpa2FuIG1vZHVsIGdhbWJhcmFuIHVudHVrIG1lbnVuanVrYW4gdGFtcGlsYW4ga2VjaWwgZGFyaSBzZWJ1YWggZGFmdGFyIGl0ZW0ga29uZmlndXJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJ0RlZmluaXNpa2FuIGVrc3ByZXNpIHJlZ3VsYXIgc2VjYXJhIGluZGl2aWR1YWwgdW50dWsgc2V0aWFwIGtlbGFzIEl0ZW1Lb25maWd1cmFzaSB1bnR1ayBtZW1lcmlrc2EgbmFtYSBJdGVtS29uZmlndXJhc2kgdW50dWsgbWVudW5qdWthbiBwZXNhbiBlcnJvciB5YW5nIHNlc3VhaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnRGVmaW5pc2lrYW4gc3Vib2JqZWsgZGVmYXVsdCBkYXJpIGtlbGFzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pc2lrYW4ganVtbGFoIGJhcmlzIHVudHVrIHBlbmd1YmFoIGRlZmluaXNpQ0kgcGFkYSBhbnRhcm11a2EgQWRtaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnRGVmaW5pc2lrYW4gYmF0YXMgcGVuY2FyaWFuIHVudHVrIGxheWFyIEFnZW50SVRTTUNvbmZpZ0l0ZW0gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnRGVmaW5pc2lrYW4gYmF0YXMgcGVuY2FyaWFuIHVudHVrIExheWFyIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ0RlZmluaXNpa2FuIGtvbG9tIHlhbmcgZGkgdHVuanVrYW4gcGFkYSBnYW1iYXJhbiBpdGVtIGtvbmZpZ3VyYXNpLiBQaWxpaGFuIGluaSB0aWRhayBtZW1wZW5nYXJ1aGkgcG9zaXNpIGtvbG9tLiBDYXRhdGFuOiBrb2xvbSBrZWxhcyBzZWxhbHUgdGVyc2VkaWEgamlrYSBzYXJpbmdhbiBcJ1NlbXVhXCcgZGlwaWxpaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5pc2lrYW4ga29sb20geWFuZyBkaXR1bmp1a2FuIGRpZGFsYW0gcGVuY2FyaWFuIGl0ZW0ga29uZmlndXJhc2kuIFBpbGloYW4gaW5pIHRpZGFrIG1lbXBlbmdhcnVoaSBwb3Npc2kga29sb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnRGVmaW5pc2lrYW4ga29sb20geWFuZyBkaXR1bmp1a2FuIG9sZWggQ0kgZGkgZGFsYW0gZ2FtYmFyYW4gaXRlbSBrb25maWd1cmFzaSB0ZXJnYW50dW5nIHBhZGEga2VsYXMgQ0kuIFNldGlhcCBlbnRyaSBoYXJ1cyBkaWF3YWxpIGRlbmdhbiBuYW1hIGtlbGFzIGRhbiBkdWEgdGFuZGEgdGl0aWsgZHVhIChjb250b2hueWEga29tcHV0ZXI6OikuIEFkYSBiZWJlcmFwYSBDSS1BdHJpYnV0IHlhbmcgdW11bSBwYWRhIHNlbXVhIENJIChDb250b2ggdW50dWsga2VsYXMgS29tcHV0ZXI6IEtvbXB1dGVyOjpOYW1hLCBLb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBLb21wdXRlcjo6V2FrdHVwZW1idWF0YW4pLiBVbnR1ayBtZW51bmp1a2FuIENJLUF0cmlidXQgc2VjYXJhIGluZGl2aWR1YWwgc2VwZXJ0aSB5YW5nIGRpZGVmaW5pc2lrYW4gZGkgZGFsYW0gQ0ktRGVmaW5pc2ksIFNrZW1hIGJlcmlrdXQgaW5pIGhhcnVzIGRpIGd1bmFrYW4gKENvbnRvaCB1bnR1ayBrZWxhcyBLb21wdXRlcik6IEtvbXB1dGVyOjpIYXJkRGlzazo6MSwga29tcHV0ZXI6OkhhcmREaXNrOjoxOjprYXBhc2l0YXM6OjEsIGtvbXB1dGVyOjpIYXJkRGlzazo6MiwgS29tcHV0ZXI6OkhhcmREaXNrOjoyOjpLYXBhc2l0YXM6OjEuIEppa2EgdGlkYWsgYWRhIGVudHJpIHVudHVrIHNlYnVhaCBrZWxhcyBDSSwgTWFrYSBrb2xvbSBkZWZhdWx0IHlhbmcgYWthbiBkaXR1bmp1a2FuIHNlc3VhaSBkZW5nYW4geWFuZyBkaSB0ZW50dWthbiBwYWRhIHBlbmdhdHVyYW5JVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGtvbG9tIHlhbmcgZGl0YW1waWxrYW4gZGFyaSBDSSBkYWxhbSBwZW5jYXJpYW4gY29uZmlnIGJhcmFuZyB0ZXJnYW50dW5nIHBhZGEga2VsYXMgQ0kuIFNldGlhcCBlbnRyaSBoYXJ1cyBkaWF3YWxpIGRlbmdhbiBuYW1hIGtlbGFzIGRhbiB0aXRpayBkdWEgZ2FuZGEgKGkuZS4gQ29tcHV0ZXI6OikuIEFkYSBiZWJlcmFwYSBDSS1BdHJpYnV0IHlhbmcgdW11bSB1bnR1ayBzZW11YSBDSSAoQ29udG9oIHVudHVrIEtvbXB1dGVyIGtlbGFzOiBLb21wdXRlciA6OiBOYW1hLCBLb21wdXRlciA6OiBDdXJEZXBsU3RhdGUsIEtvbXB1dGVyIDo6IENyZWF0ZVRpbWUpLiBVbnR1ayBtZW51bmp1a2thbiBpbmRpdmlkdSBDSS1BdHJpYnV0IHNlYmFnYWltYW5hIGRpZGVmaW5pc2lrYW4gZGFsYW0gQ0ktRGVmaW5pdGlvbiwgc2tlbWEgYmVyaWt1dCBoYXJ1cyBkaWd1bmFrYW4gKG1pc2FsbnlhIHVudHVrIEtvbXB1dGVyIGtlbGFzKTogIENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBKaWthIHRpZGFrIGFkYSBlbnRyaSB1bnR1ayBrZWxhcyBDSSwgbWFrYSBrb2xvbSBzdGFuZGFyIGRpdGFtcGlsa2FuIHNlYmFnYWltYW5hIGRpZGVmaW5pc2lrYW4gZGFsYW0gcGVuZ2F0dXJhbiBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4ga29sb20geWFuZyBkaXRhbXBpbGthbiBkYXJpIENJIGRpIGxpbmsgdGFiZWwgdGFtcGlsYW4geWFuZyBrb21wbGVrcywgdGVyZ2FudHVuZyBwYWRhIGtlbGFzIENJLiBTZXRpYXAgZW50cmkgaGFydXMgZGlhd2FsaSBkZW5nYW4gbmFtYSBrZWxhcyBkYW4gdGl0aWsgZHVhIGdhbmRhIChpLmUuIENvbXB1dGVyOjopLiBBZGEgYmViZXJhcGEgQ0ktQXRyaWJ1dCB5YW5nIHVtdW0gdW50dWsgc2VtdWEgQ0kgKENvbnRvaCB1bnR1ayBLb21wdXRlciBrZWxhczogS29tcHV0ZXIgOjogTmFtYSwgS29tcHV0ZXIgOjogQ3VyRGVwbFN0YXRlLCBLb21wdXRlciA6OiBDcmVhdGVUaW1lKS4gVW50dWsgbWVudW5qdWtrYW4gaW5kaXZpZHUgQ0ktQXRyaWJ1dCBzZWJhZ2FpbWFuYSBkaWRlZmluaXNpa2FuIGRhbGFtIENJLURlZmluaXRpb24sIHNrZW1hIGJlcmlrdXQgaGFydXMgZGlndW5ha2FuIChtaXNhbG55YSB1bnR1ayBLb21wdXRlciBrZWxhcyk6ICBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSmlrYSB0aWRhayBhZGEgZW50cmkgdW50dWsga2VsYXMgQ0ksIG1ha2Ega29sb20gc3RhbmRhciBkaXRhbXBpbGthbiBzZWJhZ2FpbWFuYSBkaWRlZmluaXNpa2FuIGRhbGFtIHBlbmdhdHVyYW4gSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnRHVwbGlrYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnTWVtdW5na2lua2FuIGZpdHVyIGl0ZW0ga29uZmlndXJhc2kgdGluZGFrYW4gbWFzc2FsIHVudHVrIGFnZW4gZnJvbnRlbmQgdW50dWsgYmVrZXJqYSBwYWRhIGxlYmloIGRhcmkgc2F0dSBpdGVtIGtvbmZpZ3VyYXNpIHBhZGEgc3VhdHUgd2FrdHUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICdNZW11bmdraW5rYW4gZml0dXIgdGluZGFrYW4gbWFzc2FsIGl0ZW0ga29uZmlndXJhc2kgaGFueWEgdW50dWsga2Vsb21wb2sgdGVyZGFmdGFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnTWVuZ2FrdGlma2FuIC8gbWVub25ha3RpZmthbiBmdW5nc2kgdW50dWsgbWVtZXJpa3NhIENvbmZpZ0l0ZW1zIHVudHVrIG5hbWEgeWFuZyB1bmlrLiBTZWJlbHVtIG1lbmdha3RpZmthbiBvcHNpIGluaSBBbmRhIGhhcnVzIG1lbWVyaWtzYSBzaXN0ZW0gYW5kYSB1bnR1ayBwcm9kdWstY29uZmlnIHlhbmcgc3VkYWggYWRhIGRlbmdhbiBuYW1hIGR1cGxpa2F0LiBBbmRhIGRhcGF0IG1lbGFrdWthbiBpbmkgZGVuZ2FuIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICdNb2R1bCB1bnR1ayBtZW1lcmlrc2Ega2Vsb21wb2sgeWFuZyBiZXJ0YW5nZ3VuZyBqYXdhYiB1bnR1ayBrZWxhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICdNb2R1bCB1bnR1ayBtZW1lcmlrc2Ega2Vsb21wb2sgeWFuZyBiZXJ0YW5nZ3VuZyBqYXdhYiB1bnR1ayBpdGVtIGtvbmZpZ3VyYXNpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJ01vZHVsIHVudHVrIG1lbmdoYXNpbGthbiBzdGF0aXN0aWsgY29uZmlnIGJhcmFuZyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdPYmplayBiYWNrZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIG1vZHVsIGltcG9yIC8gZWtzcG9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGFyYW1ldGVyIHVudHVrIHdhcm5hIHN0YXRlIHBlbnllYmFyYW4gZGFsYW0gcHJlZmVyZW5zaSBtZWxpaGF0IGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayBzdGF0ZSBwZW55ZWJhcmFuIGRhbGFtIHByZWZlcmVuc2kgbWVsaWhhdCBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyIHVudHVrIGdydXAgY29ub3RoIHBlcml6aW5hbiBkYXJpIGF0cmlidXQga2F0YWxvZyB1bXVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayBoYWxhbWFuIChkaSBtYW5hIGl0ZW0ga29uZmlndXJhc2kgYWthbiBkaXRhbXBpbGthbikuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ2l6aW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmdndW5ha2FuIGxheWFyIGl0ZW0ga29uZmlndXJhc2kgSVRTTSBkaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdpemluIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5nZ3VuYWthbiBrb25maWd1cmFzaSBJVFNNIGxheWFyIHBlbmNhcmlhbiBpdGVtIGRhbGFtIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdpemluIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5nZ3VuYWthbiBrb25maWd1cmFzaSBJVFNNIGl0ZW0gbGF5YXIgem9vbSBkaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdpemluIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5nZ3VuYWthbiBhZGQgSVRTTSBsYXlhciBpdGVtIGtvbmZpZ3VyYXNpIGRhbGFtIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdpemluIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5nZ3VuYWthbiBtZW5nZWRpdCBJVFNNIGxheWFyIGl0ZW0ga29uZmlndXJhc2kgZGFsYW0gYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ2l6aW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmdndW5ha2FuIHNlamFyYWggSVRTTSBsYXlhciBpdGVtIGtvbmZpZ3VyYXNpIGRhbGFtIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSXppbiBZYW5nIGRpcGVybHVrYW4gdW50dWsgcmV2aWV3IHVzaW5nIFNlamFyYWggSVRTTSBMYXlhciBJdGVtIEtvbmZpZ3VyYXNpIEFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJ01lbWlsaWggaXRlbSBrb25maWd1cmFzaSBtb2R1bCBnZW5lcmF0b3Igbm9tb3IuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnQgbm9tb3IgaXRlbSBrb25maWd1cmFzaSwgU3lzdGVtSUQsIHlhbmcgQ29uZmlnSXRlbUNsYXNzSUQgZGFuIG1lamEgeWFuZyBkaWd1bmFrYW4uIEZvcm1hdG55YSBhZGFsYWggIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBtaXNhbG55YSAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQXR1ciBzdGF0dXMgcGVueWViYXJhbiBkaSBpdGVtIGtvbmZpZ3VyYXNpIGxheWFyIHRlcmJlc2FyIGRhcmkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0F0dXIgc3RhdHVzIGtlamFkaWFuIHBhZGEgaXRlbSBrb25maWd1cmFzaSBsYXlhciB0ZXJiZXNhciBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB5YW5nIG1lbXVuZ2tpbmthbiBtZW5naHVidW5na2FuIGl0ZW0ga29uZmlndXJhc2kgZGVuZ2FuIG9iamVrIGxhaW4gZGkgY29uZmlnIGJhcmFuZyBwYW5kYW5nYW4gem9vbSBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB1bnR1ayBtZW5nYWtzZXMgc2VqYXJhaCBpdGVtIGtvbmZpZ3VyYXNpIHBhZGEgaXRlbSBrb25maWd1cmFzaSBnYW1iYXJhbiBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsgbWVuZ2Frc2VzIHNlamFyYWggaXRlbSBrb25maWd1cmFzaSBkYWxhbSB0YW1waWxhbiB6b29tLW55YSBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB1bnR1ayBtZW5kdXBsaWthc2kgaXRlbSBrb25maWd1cmFzaSBwYWRhIGl0ZW0ga29uZmlndXJhc2kgZ2FtYmFyYW4gZGFyaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gbGluayBkYWxhbSBtZW51IHVudHVrIG1lbmR1cGxpa2FzaSBpdGVtIGtvbmZpZ3VyYXNpIGRhbGFtIHRhbXBpbGFuIHpvb20tbnlhIGRhcmkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsgbWVuZ2VkaXQgaXRlbSBrb25maWd1cmFzaSBkYWxhbSB0YW1waWxhbiB6b29tLW55YSBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsgbWVuY2V0YWsgaXRlbSBrb25maWd1cmFzaSBkYWxhbSB0YW1waWxhbiB6b29tLW55YSBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gc2VqYXJhaCBjb25maWcgaXRlbSAodXJ1dGFuIHRlcmJhbGlrKSBkaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJ1BlbmdlbmFsIHVudHVrIGl0ZW0ga29uZmlndXJhc2ksIG1pc2FsbnlhIENvbmZpZ0l0ZW0gIywgTXlDb25maWcgSXRlbSAjLiBkZWZhdWx0IGFkYWxhaCBDb25maWdJdGVtICMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uZSBkZWdsaSBlbGVtZW50aSBkaSBjb25maWd1cmF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnRGVmaW5pemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlJ30gPSAnTW9kaWZpY2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXRvIGRlbGxcJ2luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnU3RhdG8gZGkgaW1wbGVtZW50YXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnU3RhdG8gYXR0dWFsZSBkZWxsXCdpbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1VsdGltYSBtb2RpZmljYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdFbGVtZW50byBkaSBjb25maWd1cmF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdGaWx0cm8gcGVyIGNsYXNzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICdDb2xsZWdhIGEgdW4gYWx0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICdWdW9pIGRhdnZlcm8gZWxpbWluYXJlIHF1ZXN0byBlbGVtZW50byBkaSBjb25maWd1cmF6aW9uZT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnSWwgbm9tZSBkaSBxdWVzdG8gZWxlbWVudG8gZGkgY29uZmlndXJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJ0NvbnRlbnV0byBkZWxsbyBzdG9yaWNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICdJc3RhbnRlIGRpIGNyZWF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdWaXN0YSBkaSBEZXR0YWdsaW8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0ltcG9zdGF6aW9uaSBkaSBjb250ZXN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICdFc2VndWkgcmljZXJjYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdDZXJjYXJlIGFuY2hlIGluIHZlcnNpb25pIHByZWNlZGVudGk/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnRWxlbWVudG8gZGkgY29uZmlndXJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ1N0YXRvIGF0dHVhbGUgZGkgaW1wbGVtZW50YXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1VsdGltYSBtb2RpZmljYSBkaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnTW9zdHJhIHVuYSB2ZXJzaW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJ01vc3RyYSB0dXR0ZSBsZSB2ZXJzaW9uaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ051bWVybyBkaSB2ZXJzaW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnUHJvcHJpZXTDoCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnTmVzc3VuIHJpc3VsdGF0byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdMbyBzdGF0byBkaSBpbXBsZW1lbnRhemlvbmUgZGkgcXVlc3RvIGVsZW1lbnRvIGRpIGNvbmZpZ3VyYXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTG8gc3RhdG8gZGkgaW5jaWRlbnRlIGRpIHF1ZXN0byBlbGVtZW50byBkaSBjb25maWd1cmF6aW9uZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdmcmEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnTnVtZXJvIG1hc3NpbW8gZGkgdW4gZWxlbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdTYWx0YXRvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbGxvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ051bWVybyBzZXJpYWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICdSYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnRGlzY28gZmlzc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdDYXBhY2l0w6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnU2NoZWRhIGRpIHJldGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnSVAgc3UgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSW5kaXJpenpvIElQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ1NjaGVkYSBncmFmaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ0FsdHJpIGFwcGFyYXRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ0RhdGEgZGkgc2NhZGVuemEgZGVsbGEgZ2FyYW56aWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnRGF0YSBkaSBpbnN0YWxsYXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICdUZWxlZm9ubyAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICdUZWxlZm9ubyAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdJbmRpcml6em8gZGkgcmV0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ01hc2NoZXJhIGRpIHJldGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ0dhdGV3YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnVGlwbyBkaSBsaWNlbnphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnQ2hpYXZlIGRpIGxpY2VuemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICdRdWFudGl0w6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSBkaSBzY2FkZW56YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ1N1cHBvcnRvJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICdDb21wdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJ0hhcmR3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICdSZXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnU29mdHdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ1NjYWR1dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICdNYW51dGVuemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnUGlhbmlmaWNhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnUmlwYXJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ1JpdGlyYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ1JldmlzaW9uYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdUZXN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ1BvcnRhdGlsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnRGVza3RvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQYWxtYXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0FsdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICdTdGFtcGFudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3dpdGNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1JvdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1dMQU4gQWNjZXNzIFBvaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIGRpIHNpY3VyZXp6YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnRGlzcG9zaXRpdm8gZGkgY29waWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdNb3VzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJ1Rhc3RpZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ1ZpZGVvY2FtZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ0JlYW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnU2NoZWRhIFBDTUNJQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnRGlzcG9zaXRpdm8gVVNCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ0RvY2tpbmcgU3RhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnU2Nhbm5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ0VkaWZpY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ1VmZmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdQaWFubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnU3RhbnphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdBcm1hZGlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ0FwcGxpY2F6aW9uZSBjbGllbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ01pZGRsZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnQXBwbGljYXppb25lIHNlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdTTyBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ1NPIHNlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnU3RydW1lbnRpIGRpIGFtbWluaXN0cmF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICdTdHJ1bWVudGkgdXRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnSW50ZWdyYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnTGljZW56YSBzaW5nb2xhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUGVyIHV0ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUGVyIHByb2Nlc3NvcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ1BlciBzZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdQZXIgbm9kbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ0xpY2VuemEgcGVyIHZvbHVtZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdMaWNlbnphIGF6aWVuZGFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0xpY2VuemEgZGkgc3ZpbHVwcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RpbW9zdHJhdGl2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICdMaW1pdGF0YSBuZWwgdGVtcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdGcmVld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ09wZW4gU291cmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ0lsbGltaXRhdGEnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJ0VsZW1lbnRpIGRpIGNvbmZpZ3VyYXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICdDcmVhIGUgZ2VzdGlzY2kgbGUgZGVmaW5pemlvbmkgcGVyIGdsaSBlbGVtZW50aSBkaSBjb25maWd1cmF6aW9uZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJ0RlZmluaXNjZSBpbCBzb3R0by1vZ2dldHRvIHByZWRlZmluaXRvIGRlbGxhIGNsYXNzZSBcJ0lUU01Db25maWdJdGVtXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaWNhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICdNb2R1bG8gcGVyIGNvbnRyb2xsYXJlIGlsIGdydXBwbyByZXNwb25zYWJpbGUgcGVyIHVuYSBjbGFzc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnTW9kdWxvIHBlciBnZW5lcmFyZSBsZSBzdGF0aXN0aWNoZSBkZWdsaSBlbGVtZW50aSBkaSBjb25maWd1cmF6aW9uZSBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnVmlzdGEgR2xvYmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSBwZXIgaSBncnVwcGkgZGkgcGVybWVzc2kgZGkgZXNlbXBpbyBkZWdsaSBhdHRyaWJ1dGkgZGVsIGNhdGFsb2dvIGdlbmVyYWxlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICdQYXJhbWV0cmkgcGVyIGxlIHBhZ2luZSAobmVsbGUgcXVhbGkgZ2xpIGVsZW1lbnRpIGRpIGNvbmZpZ3VyYXppb25lIHNvbm8gbW9zdHJhdGkpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6DnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICfjgq/jg6njgrnlrprnvqnjgpLlpInmm7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6Djga7jgq/jg6njgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ+iomOi/sCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICflpInmm7QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOeKtuazgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAn44OH44OX44Ot44Kk44O744K544OG44O844K/44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAn44Kv44Op44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ+ODh+ODl+ODreOCpOODu+OCueODhuODvOOCv+OCueOBruOCv+OCpOODlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn54++5Zyo44Gu44Kk44Oz44K344OH44Oz44OI44O744K544OG44O844K/44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ+ePvuWcqOOBruOCpOODs+OCt+ODh+ODs+ODiOODu+OCueODhuODvOOCv+OCueOBruOCv+OCpOODlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfmnIDntYLlpInmm7Tml6XmmYInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAn5qeL5oiQ44Ki44Kk44OG44OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ+OCr+ODqeOCueOBp+ODleOCo+ODq+OCvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICfmlrDopo/jga7mp4vmiJDjgqLjgqTjg4bjg6DjgpLkvZzmiJDjgZnjgovjgavjga/jgIHjg6rjgrnjg4jjgYvjgonjgq/jg6njgrnjgpLpgbjmip7jgZfjgabjgY/jgaDjgZXjgYTjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6DkuIDmi6zjgqLjgq/jgrfjg6fjg7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJ+ODh+ODl+ODreOCpOODu+OCueODhuODvOOCv+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOeKtuazgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICfku5bjgajjg6rjg7Pjgq/jgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJ+ani+aIkOOCouOCpOODhuODoOOBruWApOOBjOS4jeato+OBp+OBmSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG51bWJlciBvZiBhbm90aGVyIENvbmZpZ3VyYXRpb24gSXRlbSB0byBsaW5rIHdpdGguJ30gPSAn5LuW44Gu5qeL5oiQ44Ki44Kk44OG44Og44G444Gu44Oq44Oz44Kv5pWwJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAn5pys5b2T44Gr44GT44Gu5qeL5oiQ44Ki44Kk44OG44Og44KS5YmK6Zmk44GX44G+44GZ44GL77yfJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ+OBk+OBriDmp4vmiJDjgqLjgqTjg4bjg6Ag44Gu5ZCN56ewJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICfjgZPjga7lkI3np7Djga/jgZnjgafjgasgTnVtYmVyKHMpOiAlcyDjga7mp4vmiJDjgqLjgqTjg4bjg6Djgafkvb/nlKjkuK3jgafjgZnjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJ+ani+aIkOOCouOCpOODhuODoOOBruWxpeattDogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBDb250ZW50J30gPSAn5bGl5q205YaF5a65JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICfkvZzmiJDml6XmmYInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWm9vbSB2aWV3J30gPSAn44K644O844Og44O744OT44Ol44O8JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICfjgrPjg7Pjg4bjgq3jgrnjg4jjga7oqK3lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnMeODmuODvOOCuOavjuOBruioreWumumgheebric7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJ+OCuOOCp+ODjeODquODg+OCr+ani+aIkOOCouOCpOODhuODoOOBruODhuODvOODluODqyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJ+aknOe0ouOCkuWun+ihjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICfjg5fjg6zjg5Pjg6Xjg7zmmYLjgIHku6XliY3jga7jg5Djg7zjgrjjg6fjg7PjgoLmpJzntKLlr77osaHjgajjgZfjgb7jgZnjgYvvvJ8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAn5qeL5oiQ44Ki44Kk44OG44Og5oOF5aCxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ+ePvuWcqOOBruODh+ODl+ODreOCpOODu+OCueODhuODvOOCv+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfmnIDntYLlpInmm7TogIUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJ+iqrOaYjuOCkuihqOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJ+OBmeOBueOBpuOBruiqrOaYjuOCkuihqOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAn44Kk44Oz44K344OH44Oz44OI54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJ+ODkOODvOOCuOODp+ODs+OBruODh+ODl+ODreOCpOODu+OCueODhuODvOOCv+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ+ODkOODvOOCuOODp+ODs+ODiuODs+ODkOODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAn5qeL5oiQ44Ki44Kk44OG44Og44Gu6Kmz57SwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAn6aCF55uuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAn44Kv44Op44K544G444Gu44Ki44Kv44K744K55qip44Gv44GC44KK44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICfkuIDopqc6IOani+aIkOOCouOCpOODhuODoCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICdDb25maWdJdGVtSUTjgYzmjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICflsJHjgarjgY/jgajjgoIx44Gk44Gu6YG45oqe44GV44KM44Gf5qeL5oiQ44Ki44Kk44OG44Og44GM5b+F6KaB44Gn44GZ77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAn44GT44Gu5qeL5oiQ44Ki44Kk44OG44Og44G444Gu5pu444GN6L6844G/44Ki44Kv44K744K55qip44GM44GC44KK44G+44Gb44KTOiAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn5qeL5oiQ44Ki44Kk44OG44OgICIlcyLjgYzjg4fjg7zjgr/jg5njg7zjgrnjgavopovjgaTjgYvjgorjgb7jgZvjgpPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6BJRCVz44KS5YmK6Zmk44Gn44GN44G+44Gb44KT44Gn44GX44Gf77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICdDb25maWdJdGVtSUQlc+OBruODkOODvOOCuOODp+ODs+OBjOimi+OBpOOBi+OCiuOBvuOBm+OCk++8gSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICdDb25maWdJdGVtSUTjgIFEdXBsaWNhdGVJROOAgUNsYXNzSUTjga/mjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJ+OCouOCr+OCu+OCueaoqeOBr+OBguOCiuOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICfjgq/jg6njgrklc+OBruWumue+qeOBjOWumue+qeOBleOCjOOBpuOBhOOBvuOBm+OCk++8gSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICflsaXmrbTjgpLooajnpLrjgZnjgovjgZPjgajjga/jgafjgY3jgb7jgZvjgpPjgYzjgIFDb25maWdJdGVtSUTjga/mjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICflsaXmrbTjgpLooajnpLrjgZnjgovjgZPjgajjga/jgafjgY3jgb7jgZvjgpPjgILjgqLjgq/jgrvjgrnmqKnjga/kuI7jgYjjgonjgozjgabjgYTjgb7jgZvjgpPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJ+aWsOOBl+OBhOani+aIkOOCouOCpOODhuODoChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJ+aWsOOBl+OBhOODkOODvOOCuOODp+ODs++8iElEID0lc++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ+ODh+ODl+ODreOCpOODu+OCueODhuODvOOCv+OCueOBjOabtOaWsOOBleOCjOOBvuOBl+OBn+OAgu+8iOaWsOimjz0lc+OAgeWJjT0lc++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4jnirbmhYvjgYzmm7TmlrDjgZXjgozjgb7jgZfjgZ/vvIjmlrDopo89JXPjgIHlj6TjgYQ9JXPvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6DjgpLliYrpmaQgKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyVz77yI44K/44Kk44OXPSVz77yJ44G444Gu44Oq44Oz44Kv44GM6L+95Yqg44GV44KM44G+44GX44GfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICclc++8iOOCv+OCpOODlz0lc++8ieOBuOOBruODquODs+OCr+OBjOWJiumZpOOBleOCjOOBvuOBl+OBnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnQ29uZmlnSXRlbeWumue+qeOBjOabtOaWsOOBleOCjOOBvuOBl+OBn++8iElEID0lc++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ+WQjeWJjeOBjOabtOaWsOOBleOCjOOBvuOBl+OBn++8iOaWsOimjz0lc+OAgeWPpOOBhD0lc++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJ+WxnuaApyVz44GMICIlcyLjgYvjgokgIiVzIuOBq+abtOaWsOOBleOCjOOBvuOBl+OBnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICfjg5Djg7zjgrjjg6fjg7Mlc+OBjOWJiumZpOOBleOCjOOBvuOBl+OBnyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJ0NvbmZpZ0l0ZW1JROOBvuOBn+OBr1ZlcnNpb25JROOBr+aMh+WumuOBleOCjOOBpuOBhOOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6DjgpLooajnpLrjgafjgY3jgb7jgZvjgpPjgILjgqLjgq/jgrvjgrnmqKnjga/jgYLjgorjgb7jgZvjgpPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdDb25maWdJdGVtSUQlc+OBr+ODh+ODvOOCv+ODmeODvOOCueOBq+imi+OBpOOBi+OCiuOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1ZlcnNpb25JRCVz44Gv44OH44O844K/44OZ44O844K544Gr6KaL44Gk44GL44KK44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyVz44GnJXPjgafljbDliLfjgZXjgozjgb7jgZfjgZ8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICdDbGFzc0lE44GM54Sh5Yq544Gn44GZ77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnQ2xhc3NJROOBr+aMh+WumuOBleOCjOOBpuOBhOOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJ+OBk+OBruOCr+ODqeOCueOBruOCouOCr+OCu+OCueaoqeOBr+OBguOCiuOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAn57WQ5p6c44GM44GC44KK44G+44Gb44KT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAn5qeL5oiQ44Ki44Kk44OG44Og44Gu5qSc57Si57WQ5p6cJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICfmp4vmiJDjgqLjgqTjg4bjg6DjgpLooajnpLrjgafjgY3jgb7jgZvjgpPjgILmp4vmiJDjgqLjgqTjg4bjg6Djga7jgqLjgq/jgrvjgrnmqKnjga/kuI7jgYjjgonjgozjgabjgYTjgb7jgZvjgpPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn44GT44Gu5qeL5oiQ44Ki44Kk44OG44Og44Gu44OH44OX44Ot44Kk44O744K544OG44O844K/44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn44GT44Gu5qeL5oiQ44Ki44Kk44OG44Og44Gu44Kk44Oz44K344OH44Oz44OI54q25oWLJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ+OBk+OBrumWkyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICfkuIDjgqjjg6zjg6Hjg7Pjg4jjgYLjgZ/jgorjga7mnIDlpKfmlbAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAn56m65qyE44Gu6aCF55uu44Gv54++5Zyo44Gu5YCk44GM5L+d5oyB44GV44KM44KL44GT44Go5oSP5ZGz44GX44G+44GZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICfjgrnjgq3jg4Pjg5fjgZXjgozjgb7jgZfjgZ8nOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ+ODouODh+ODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICfjgrfjg6rjgqLjg6vjg4rjg7Pjg5Djg7wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JBTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICfjg4/jg7zjg4njg4fjgqPjgrnjgq8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICflrrnph48nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAn44ON44OD44OI44Ov44O844Kv44Ki44OA44OX44K/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0RIQ1DmnInlirknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJ0lQIOOCouODieODrOOCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICfjgrDjg6njg5XjgqPjg4Pjgq/jgqLjg4Djg5fjgr8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAn44Gd44Gu5LuW44Gu5qmf5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ+ODr+ODqeODs+ODhuOCo+e1guS6huaXpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICfjgqTjg7Pjgrnjg4jjg7zjg6vml6Xku5gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ+mbu+ipsSAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICfpm7voqbEgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICfjg6Hjg7zjg6vjgqLjg4njg6zjgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAn44ON44OD44OI44Ov44O844Kv44Ki44OJ44Os44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAn44K144OW44ON44OD44OI44Oe44K544KvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICfjgrLjg7zjg4jjgqbjgqfjgqQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAn44Op44Kk44K744Oz44K544K/44Kk44OXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAn44Op44Kk44K744Oz44K544Kt44O8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAn5pWw6YePJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ+acieWKueacn+mZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ+ODoeODh+OCo+OCoic7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAn44Kz44Oz44OU44Ol44O844K/44O8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAn44OP44O844OJ44Km44Kn44KiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICfjg43jg4Pjg4jjg6/jg7zjgq8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICfjgr3jg5Xjg4jjgqbjgqfjgqInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ+acn+mZkOWIh+OCjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ+ODoeODs+ODhuODiuODs+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ+ODkeOCpOODreODg+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn6KiI55S7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ+S/rueQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAn5byV6YCAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ+ODrOODk+ODpeODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAn44OG44K544OIIC8gUUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAn44OO44O844OIUEMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ+ODh+OCueOCr+ODiOODg+ODlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAn44K144O844OQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn5LuWJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICfjg6Ljg4vjgr8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ+ODl+ODquODs+OCvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICfjgrnjgqTjg4Pjg4EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAn44Or44O844K/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiDjgqLjgq/jgrvjgrnjg53jgqTjg7Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAn44K744Kt44Ol44Oq44OG44Kj44OH44OQ44Kk44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICfjg5Djg4Pjgq/jgqLjg4Pjg5fjg7vjg4fjg5DjgqTjgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICfjg57jgqbjgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICfjgq3jg7zjg5zjg7zjg4knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAn44Kr44Oh44OpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ+ODl+ODreOCuOOCp+OCr+OCv+ODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ+ODouODh+ODoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQSDjgqvjg7zjg4knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQuODh+ODkOOCpOOCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICfjg4njg4Pjgq3jg7PjgrDjgrnjg4bjg7zjgrfjg6fjg7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ+OCueOCreODo+ODiic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ+ani+eviSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICfkuovli5nmiYAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICfliIfmjajjgaYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ+WupOWGhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAn44Op44OD44KvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ+iBt+WgtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICfjgqLjgqbjg4jjg6zjg4Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdJVOODleOCoeOCt+ODquODhuOCoyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICfpm7voqbHkvJrnpL4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ+OCr+ODqeOCpOOCouODs+ODiOOCveODleODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAn44Of44OJ44Or44Km44Kn44KiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ+OCteODvOODkOOCveODleODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICfjgq/jg6njgqTjgqLjg7Pjg4hPUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICfjgrXjg7zjg5BPUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAn566h55CG44OE44O844OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ+ODpuODvOOCtuODu+ODhOODvOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ+Wfi+OCgei+vOOBv+OCquODluOCuOOCp+OCr+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ+OCt+ODs+OCsOODq+ODqeOCpOOCu+ODs+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ+ODpuODvOOCtuavjic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAn44OX44Ot44K744OD44K15q+OJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICfjgrXjg7zjg5Dmr44nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICfjg47jg7zjg4nmr44nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICfjg5zjg6rjg6Xjg7zjg6Djg6njgqTjgrvjg7PjgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAn44Ko44Oz44K/44O844OX44Op44Kk44K644O744Op44Kk44K744Oz44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAn6ZaL55m66ICF44Op44Kk44K744Oz44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICfjg4fjg6InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAn5pmC6ZaT5Yi26ZmQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAn44OV44Oq44O844Km44Kn44KiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAn44Kq44O844OX44Oz44K944O844K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ+eEoeWItumZkCc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnQ01EQuOBruioreWumic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAn5ZCM44GYQ29uZmlnSXRlbeOCr+ODqeOCue+8iCBcJ2NsYXNzXCfvvInlhoXjgb7jgZ/jga/jgrDjg63jg7zjg5Djg6vvvIggXCdnbG9iYWxcJ++8ieWGheOBp+OBruOBv+S4gOaEj+OBruWQjeWJjeOCkueiuuiqjeOBl+OBvuOBmeOAguOBk+OCjOOBr+OAgemHjeikh+OCkuaknOe0ouOBmeOCi+OBqOOBjeOBq+aXouWtmOOBrkNvbmZpZ0l0ZW3jgYzjgZnjgbnjgabogIPmha7jgZXjgozjgovjgZPjgajjgpLmhI/lkbPjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAn5qeL5oiQ44Ki44Kk44OG44OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6DjgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6DjgpLkv67mraMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAhVdlYuOCpOODs+OCv+ODleOCp+ODvOOCueOBruWxpeattOOCkuiomOmMsuOBmeOCi+ani+aIkOOCouOCpOODhuODoOOBruOCpOODmeODs+ODiOODouOCuOODpeODvOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJ+ani+aIkOOCouOCpOODhuODoOOBruWxpeattCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6DjgpLljbDliLcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6Djga7jgrrjg7zjg6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJ+ani+aIkOOCouOCpOODhuODoOeVquWPtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6Djga7liLbpmZAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJ+ODmuODvOOCuOOBguOBn+OCiuOBruani+aIkOOCouOCpOODhuODoOOBruihqOekuuWItumZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAn5qeL5oiQ566h55CG44OH44O844K/44OZ44O844K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6Djga7kuIDmi6zjg6Ljgrjjg6Xjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44O844OV44Kn44O844K544Gu5qeL5oiQ44Ki44Kk44OG44Og44Gu5qSc57Si44OQ44OD44Kv44Ko44Oz44OJ44Or44O844K/44O8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6Djga7kvZzmiJDjgb7jgZ/jga/lpInmm7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ+ODquODs+OCr+OCquODluOCuOOCp+OCr+ODiOOCpuOCo+OCuOOCp+ODg+ODiO+8iExpbmtPYmplY3QgOjogVmlld01vZGUgPSAiY29tcGxleCLvvInjgafoqK3lrprjg5zjgr/jg7PjgpLkvb/nlKjjgafjgY3jgovjgqLjgq/jgrfjg6fjg7PjgpLlrprnvqnjgZfjgb7jgZnjgIIg44GT44KM44KJ44Gu44Ki44Kv44K344On44Oz44Gv44CB5qyh44GuSlPjgYrjgojjgbNDU1Pjg5XjgqHjgqTjg6vjgpLnmbvpjLLjgZfjgabjgYTjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgIJDb3JlLkFsbG9jYXRpb25MaXN0LmNzc+OAgUNvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanPjgIFDb3JlLlVJLlRhYmxlLlNvcnQuanPjgIFDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qc+OAgeWPiuOBs0NvcmUuQWdlbnQgLkxpbmtPYmplY3QuanMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ+OCuOOCp+ODjeODquODg+OCr+OCpOODs+OCv+ODvOODleOCp+OCpOOCueOCkua0u+eUqOOBl+OBpuani+aIkOOCouOCpOODhuODoOOCkuS9nOaIkOOBmeOCi+aoqemZkOOCkuWumue+qeOBmeOCi+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn44K444Kn44ON44Oq44OD44Kv44O744Kk44Oz44K/44O844OV44Kn44O844K544KS5rS755So44GX44Gm5qeL5oiQ44Ki44Kk44OG44Og44KS5YmK6Zmk44GZ44KL44Gf44KB44Gr5b+F6KaB44Gq5qip6ZmQ44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICfjgrjjgqfjg43jg6rjg4Pjgq/jgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjgpLmtLvnlKjjgZfjgabmp4vmiJDjgqLjgqTjg4bjg6DjgpLlj5blvpfjgZnjgovmqKnpmZDjgpLlrprnvqnjgZnjgovjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ+OCuOOCp+ODjeODquODg+OCr+OCpOODs+OCv+ODvOODleOCp+OCpOOCueOCkua0u+eUqOOBl+OBpuani+aIkOOCouOCpOODhuODoOOCkuaknOe0ouOBmeOCi+aoqemZkOOCkuWumue+qeOBmeOCi+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn44K444Kn44ON44Oq44OD44Kv44Kk44Oz44K/44O844OV44Kn44Kk44K544KS5rS755So44GX44Gm5qeL5oiQ44Ki44Kk44OG44Og44KS5aSJ5pu044GZ44KL5qip6ZmQ44KS5a6a576p44GZ44KL44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJ+ani+aIkOOCouOCpOODhuODoOOCkuWumue+qeOBl+OBpuOAgeani+aIkOOCouOCpOODhuODoOOBruODquOCueODiOOBruWwj+OBleOBquODk+ODpeODvOOCkuihqOekuuOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAn5ZCEQ29uZmlnSXRlbeOCr+ODqeOCueOBruato+imj+ihqOePvuOCkuWAi+WIpeOBq+Wumue+qeOBl+OBpuOAgUNvbmZpZ0l0ZW3lkI3jgpLnorroqo3jgZfjgIHlr77lv5zjgZnjgovjgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrjjgpLooajnpLrjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJ+ani+aIkOOCouOCpOODhuODoOOBruOCr+ODqeOCueOBruODh+ODleOCqeODq+ODiOOBruOCteODluOCquODluOCuOOCp+OCr+ODiOOCkuWumue+qeOBmeOCi+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICfnrqHnkIbjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrkgQ2wg5a6a576p44Ko44OH44Kj44K/44Gu6KGM5pWw44KS5a6a576p44GZ44KL44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJ+OCpOODs+OCt+ODh+ODs+ODiOeKtuaFi+OBrumrmO+8iOS+izog5Y2x6Zm677yJ44GL44KJ5L2O77yI5L6LOiDmg4XloLHvvInjgbjjga7jgqTjg7Pjgrfjg4fjg7Pjg4jnirbmhYvjga7poIbluo/jgpLlrprnvqnjgZnjgovjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jgZXjgozjgZ/jg4HjgrHjg4Pjg4jjgYxDSeOBruOCueODhuODvOOCv+OCueOBq+W9semfv+OCkuS4juOBiOOCi+WPr+iDveaAp+OBjOOBguOCi+OAgemWoumAo+OBmeOCi+ODh+ODl+ODreOCpOODu+OCueODhuODvOOCv+OCueOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJ+ani+aIkOOCouOCpOODhuODoOOBrueUu+mdouOBruaknOe0ouWItumZkOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJ+ani+aIkOOCouOCpOODhuODoOOBruaknOe0oueUu+mdouOBruaknOe0ouWItumZkOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICfmp4vmiJDjgqLjgqTjg4bjg6Djga7kuIDopqfjgavooajnpLrjgZXjgozjgovliJfjgpLlrprnvqnjgZfjgb7jgZnjgIIg44GT44Gu44Kq44OX44K344On44Oz44Gv5YiX44Gu5L2N572u44Gr44Gv5b2x6Z+/44GX44G+44Gb44KT44CCIOazqO+8muOCr+ODqeOCueWIl+OBr+OAgeODleOCo+ODq+OCv+ODvOOAjOWFqOOBpuOAjeOBjOmBuOaKnuOBleOCjOOBpuOBhOOCi+WgtOWQiOOBr+W4uOOBq+S9v+eUqOWPr+iDveOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfmp4vmiJDjgqLjgqTjg4bjg6Djga7mpJzntKLjgavooajnpLrjgZXjgozjgovliJfjgpLlrprnvqnjgZfjgb7jgZnjgIIg44GT44Gu44Kq44OX44K344On44Oz44Gv5YiX44Gu5L2N572u44Gr44Gv5b2x6Z+/44GX44G+44Gb44KT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ0NJ44Kv44Op44K544Gr5b+c44GY44Gm44CB6KGo56S644GV44KM44KLQ0njga7liJfjgpLoqK3lrprpoIXnm67jga7mpoLopoHjgaflrprnvqnjgZfjgb7jgZnjgIIg5ZCE44Ko44Oz44OI44Oq44Gu5YWI6aCt44Gr44Gv44CB44Kv44Op44K55ZCN44Go5LqM6YeN44Kz44Ot44Oz77yI44Gk44G+44KK44CBQ29tcHV0ZXI6OinjgpLku5jjgZHjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgILlhajjgabjga5DSeOBq+WFsemAmuOBrkNJ5bGe5oCn44GM44GE44GP44Gk44GL44GC44KK44G+44GZ44CC77yI44Kz44Oz44OU44Ol44O844K/44Kv44Op44K544Gu5L6L77yaQ29tcHV0ZXI6Ok5hbWXjgIFDb21wdXRlcjo6Q3VyRGVwbFN0YXRl44CBQ29tcHV0ZXI6OkNyZWF0ZVRpbWXvvIkKwqBDSeWumue+qeOBp+Wumue+qeOBleOCjOOBpuOBhOOCi+WAi+OAheOBrkNJ5bGe5oCn44KS6KGo56S644GZ44KL44Gr44Gv44CB5Lul5LiL44Gu44K544Kt44O844Og44KS5L2/55So44GZ44KL5b+F6KaB44GM44GC44KK44G+44GZ77yI44Kz44Oz44OU44Ol44O844K/44Kv44Op44K544Gu5L6L77yJ44CCCkNvbXB1dGVyOjpIYXJkRGlzazo6MSwKQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwKQ29tcHV0ZXI6OkhhcmREaXNrOjoyLApDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxCkNJ44Kv44Op44K544Gu44Ko44Oz44OI44Oq44GM44Gq44GE5aC05ZCI44Gv44CBSVRTTUNvbmZpZ0l0ZW0gOjogRnJvbnRlbmQgOjogQWdlbnRJVFNNQ29uZmlnSXRlbSAjIyMgU2hvd0NvbHVtbnPjga7oqK3lrprjgaflrprnvqnjgZXjgozjgabjgYTjgovjg4fjg5Xjgqnjg6vjg4jjga7liJfjgYzooajnpLrjgZXjgozjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAn44Oq44Oz44Kv44GV44KM44GfQ0njga7jgrnjg4bjg7zjgr/jgrnjgavlvbHpn7/jgZnjgovjg6rjg7Pjgq/jga7jgr/jgqTjg5fvvIjjg4HjgrHjg4Pjg4jjga7oprPngrnjgYvjgonlkI3liY3jgYzku5jjgZHjgonjgozjgb7jgZnvvInjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jgZXjgozjgZ9DSeOBruOCueODhuODvOOCv+OCueOBq+W9semfv+OBmeOCi+ODgeOCseODg+ODiOOBruOCv+OCpOODl+OCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAn5qeL5oiQ44Ki44Kk44OG44Og44KS5YmK6ZmkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICfjg4fjg5fjg63jgqTjg7vjgrnjg4bjg7zjgr/jgrnjga7jgqvjg6njg7wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAn44Kz44OU44O8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheODleODreODs+ODiOOCqOODs+ODieOBjOS4gOW6puOBq+ikh+aVsOOBruioreWumumgheebruOBp+apn+iDveOBmeOCi+OCiOOBhuOBq+ioreWumumgheebruS4gOaLrOaTjeS9nOapn+iDveOCkuacieWKueOBq+OBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAn44Oq44K544OI44GV44KM44Gf44Kw44Or44O844OX44Gu5qeL5oiQ44Ki44Kk44OG44Og5LiA5ous5Yem55CG5qmf6IO944Gu44G/44KS5pyJ5Yq544Gr44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAn44OB44Kx44OD44OI5qeL5oiQ44Ki44Kk44OG44Og44Gu44Oq44Oz44Kv44Gr5qeL5oiQ44Ki44Kk44OG44Og44Gu44K544OG44O844K/44K544KS6Kit5a6a44GZ44KL44Kk44OZ44Oz44OI44Oi44K444Ol44O844OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAn5qeL5oiQ44Ki44Kk44OG44Og44Gu5LiA6KanJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAn44Kv44Op44K544KS5ouF5b2T44GZ44KL44Kw44Or44O844OX44KS44OB44Kn44OD44Kv44GZ44KL44Oi44K444Ol44O844OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAn5qeL5oiQ44Ki44Kk44OG44Og44KS5ouF5b2T44GZ44KL44Kw44Or44O844OX44KS44OB44Kn44OD44Kv44GZ44KL44Oi44K444Ol44O844OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAn5qeL5oiQ44K/44Kk44OG44Og44Gu44Os44Od44O844OI44KS55Sf5oiQ44GZ44KL44Gf44KB44Gu44Oi44K444Ol44O844OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ+OCpOODs+ODneODvOODiC/jgqjjgq/jgrnjg53jg7zjg4jjg6Ljgrjjg6Xjg7zjg6vjga7jgqrjg5bjgrjjgqfjgq/jg4jjg5Djg4Pjgq/jgqjjg7Pjg4njg6Ljgrjjg6Xjg7zjg6vnmbvpjLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAn5qaC6KaBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+ODh+ODl+ODreOCpOODoeODs+ODiOOBruODkeODqeODoeODvOOCv+OBr+OAgeaLheW9k+iAhVdlYuOCpOODs+OCv+ODleOCp+ODvOOCueOBrueSsOWig+ioreWumuODk+ODpeODvOOBp+iJsuOCkuekuuOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAhVdlYuOCpOODs+OCv+ODleOCp+ODvOOCueOBrueSsOWig+ioreWumuODk+ODpeODvOOBp+WxlemWi+eKtuaFi+OBruODkeODqeODoeODvOOCvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfjgrjjgqfjg43jg6njg6vjgqvjgr/jg63jgrDlsZ7mgKfjga7jg5Hjg7zjg5/jg4Pjgrfjg6fjg7PjgrDjg6vjg7zjg5fjgIDjga7oqK3lrprlgKQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAn44Oa44O844K444Gu44OR44Op44Oh44O844K/77yI5qeL5oiQ44Ki44Kk44OG44Og44GM6KGo56S644GV44KM44G+44GZ77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAhVdlYuOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBp+ani+aIkOOCouOCpOODhuODoOeUu+mdouOCkuS9v+eUqOOBmeOCi+OBn+OCgeOBq+W/heimgeOBquaoqemZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAhVdlYuOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBruani+aIkOOCouOCpOODhuODoOOBruaknOe0oueUu+mdouOCkuS9v+eUqOOBmeOCi+OBn+OCgeOBq+W/heimgeOBquaoqemZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIVXZWLjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnmp4vmiJDjgqLjgqTjg4bjg6Djga7jgrrjg7zjg6DnlLvpnaLjgpLkvb/nlKjjgZnjgovjgZ/jgoHjgavlv4XopoHjgarmqKnpmZAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIVXZWLjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjgafmp4vmiJDjgqLjgqTjg4bjg6Djga7ov73liqDnlLvpnaLjgpLkvb/nlKjjgZnjgovjgZ/jgoHjgavlv4XopoHjgarmqKnpmZAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICFV2Vi44Kk44Oz44K/44O844OV44Kn44Kk44K544Gn5qeL5oiQ44Ki44Kk44OG44Og44Gu57eo6ZuG55S76Z2i44KS5L2/55So44GZ44KL44Gf44KB44Gr5b+F6KaB44Gq5qip6ZmQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAhVdlYuOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBp+ani+aIkOOCouOCpOODhuODoOOBruWxpeattOeUu+mdouOCkuS9v+eUqOOBmeOCi+OBn+OCgeOBq+W/heimgeOBquaoqemZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICFV2Vi44Kk44Oz44K/44OV44Kn44O844K544Gn5qeL5oiQ44Ki44Kk44OG44Og44Gu5Y2w5Yi355S76Z2i44KS5L2/55So44GZ44KL44Gf44KB44Gr5b+F6KaB44Gq5qip6ZmQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6DjgpLliYrpmaTjgZnjgovjgZ/jgoHjgavlv4XopoHjgarnibnmqKknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICfmp4vmiJDjgqLjgqTjg4bjg6DjgpLmpJzntKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICfjg4HjgrHjg4Pjg4jjgYxDSeOBq+ODquODs+OCr+OBleOCjOOBpuOBhOOCi+WgtOWQiOOAgUNJ44Gu44Kk44Oz44K344OH44Oz44OI44Gu44K544OG44O844K/44K544KS6Ieq5YuV55qE44Gr6Kit5a6a44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfjg6Hjg4vjg6Xjg7zjgavjg6rjg7Pjgq/jgpLooajnpLrjgZfjgabjgIHmi4XlvZPogIVXZWLjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga7jgrrjg7zjg6DooajnpLrjgafoqK3lrprpoIXnm67jgpLliYrpmaTjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICFV2Vi44Kk44Oz44K/44O844OV44Kn44Kk44K544Gn5qeL5oiQ44Ki44Kk44OG44Og44Gu5bGl5q2077yI6YCG6aCG77yJ44KS6KGo56S644GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICfmp4vmiJDjgqLjgqTjg4bjg6Djga7orZjliKXlrZDjgIIgQ29uZmlnSXRlbe+8g+OAgU15Q29uZmlnSXRlbe+8g+OAgSDjg4fjg5Xjgqnjg6vjg4jjga9Db25maWdJdGVt77yD44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAn44Kv44Op44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJ+OCsOODreODvOODkOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJ+asoeOBrueUn+eUoyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAn5YaN55Sf55SjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICfnlJ/nlKMnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmtvX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omx0X0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdQcml0cmF1a3RpIGFwxb52YWxnxIUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ1RhcnAnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnQml1cmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omx2X0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ1N0YXJwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ0Jpcm9qcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1rX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICfQmtC+0L3RhNC40LMg0KfQu9C10L0g0JzQtdC90LDRn9C80LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAn0J/RgNC+0LzQtdC90Lgg0LTQtdGE0LjQvdC40YbQuNGY0LAg0L3QsCDQutC70LDRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICfQlNC10YTQuNC90LjRhtC40ZjQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ9Ch0L7RgdGC0L7RmNCx0LAg0L3QsCDQmNC90YbQuNC00LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICfQodC+0YHRgtC+0ZjQsdCwINC90LAg0KDQsNGB0L/QvtGA0LXQtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ9Ca0LvQsNGB0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAn0KLQuNC/INC90LAg0KHQvtGB0YLQvtGY0LHQsCDQvdCwINCg0LDRgdC/0L7RgNC10LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ9Ch0LXQs9Cw0YjQvdCwINCh0L7RgdGC0L7RmNCx0LAg0L3QsCDQmNC90YbQuNC00LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ9Ch0LXQs9Cw0YjQtdC9INCi0LjQvyDQvdCwINCh0L7RgdGC0L7RmNCx0LAg0L3QsCDQmNC90YbQuNC00LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9Cf0L7RgdC70LXQtNC90L4g0L/RgNC+0LzQtdC90LXRgtC+JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ9Ca0L7QvdGE0LjQsyDQp9C70LXQvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICfQpNC40LvRgtC10YAg0LfQsCDQmtC70LDRgdC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ9Ce0LTQsdC10YDQuCDQmtC70LDRgdCwINC+0LQg0LvQuNGB0YLQsNGC0LAg0LfQsCDQtNCwINC60YDQtdC40YDQsNGC0LUg0L3QvtCyINCa0L7QvdGE0LjQsyDQp9C70LXQvS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICdJVFNNINCa0L7QvdGE0LjQs9Cn0LvQtdC9IEJ1bGsgQWN0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUnfSA9ICfQoNCw0YHQv9C+0YDQtdC00YPQstCw0YfQutCwINGB0L7RgdGC0L7RmNCx0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUnfSA9ICfQodC+0YHQvtGC0ZjQsdCwINC90LAg0JjQvdGG0LjQtNC10L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICfQn9C+0LLRgNC30Lgg0YHQviDQtNGA0YPQsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENvbmZpZ3VyYXRpb24gSXRlbSBudW1iZXIhJ30gPSAn0J3QtdCy0LDQu9C40LTQtdC9INCa0L7RhNC40LPRg9GA0LDRhtC40YHQutC4INCx0YDQvtGYINC90LAg0KfQu9C10L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJ9CR0YDQvtGY0L7RgiDQvdCwINC00YDRg9CzINCa0L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0KfQu9C10L0g0YHQviDQu9C40L3QuiDRiNC40YDQuNC90LAuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ9CY0LzQtdGC0L4g0L3QsCDQvtCy0L7RmCDQutC+0L3RhNC40LMg0YfQu9C10L0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJ9CY0LzQtdGC0L4g0LUg0LLQtdGc0LUg0LLQviDRg9C/0L7RgtGA0LXQsdCwINC+0LQg0YHRgtGA0LDQvdCwINC90LAg0JrQvtC90YTQuNCz0KfQu9C10L3QvtCy0LjRgtC1INGB0L4g0YHQu9C10LTQvdC+0LIv0YLQtSDQkdGA0L7RmCjQtdCy0LgpOiAlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20gdmlldyd9ID0gJ9CX0YPQvNC40YDQsNGYJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAn0JrQvtC90YTQuNCzINCn0LvQtdC90L7QstC4INC/0L4g0YHRgtGA0LDQvdC40YbQsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJ9Cf0YDQtdCy0LDRgNGD0LLQsNGYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJ9CY0YHRgtC+INGC0LDQutCwINCx0LDRgNCw0Zgg0LLQviDQv9GA0LXRgtGF0L7QtNC90LjRgtC1INCy0LXRgNC30Lg/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAn0JrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDQp9C70LXQvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICfQmtC+0L3RhNC40LPRg9GA0LDRhtC40YHQutC4INCn0LvQtdC9INCY0L3RhNC+0YDQvNCw0YbQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAn0KHQtdCz0LDRiNC90LAg0KHQvtGB0YLQvtGY0LHQsCDQvdCwINCg0LDRgdC/0L7RgNC10LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICfQn9GA0LjQutCw0LbQuCDQtdC00L3QsCDQstC10YDQt9C40ZjQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJ9Cf0YDQuNC60LDQttC4INCz0Lgg0YHQuNGC0LUg0LLQtdGA0LfQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICfQktC10YDQt9C40ZjQsCDQvdCwINCY0L3RhtC40LTQtdC90YIg0KHQvtGB0YLQvtGY0LHQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICfQktC10YDQt9C40ZjQsCDQvdCwINCh0L7RgdGC0L7RmNCx0LAg0L3QsCDQoNCw0YHQv9C+0YDQsNC00YPQstCw0ZrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ9CR0YDQvtGYINC90LAg0JLQtdGA0LfQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ9Ca0L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0KfQu9C10L0g0JTQtdGC0LDQu9C4INC30LAg0JLQtdGA0LfQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICfQodCy0L7RmNGB0YLQstCwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ9Ca0L7QvdGE0LjQs9Cn0LvQtdC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ9Cg0LDRgdC/0L7RgNC10LTRg9Cy0LDRh9C60LDRgtCwINGB0L7RgdGC0L7RmNCx0LAg0L3QsCDQvtCy0L7RmCDQutC+0L3RhNC40LMg0YfQu9C10L0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICfQmNC90LjQtNC10L3RgiDRgdC+0YHRgtC+0ZjQsdCwINC90LAg0L7QstC+0Zgg0LrQvtC90YTQuNCzINGH0LvQtdC9JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ9CY0LfQvNC10ZPRgyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICfQnNCw0LrRgdC40LzQsNC70LXQvSDQsdGA0L7RmCDQvdCwINC10LTQtdC9INC10LvQtdC80LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ9Cf0YDQsNC30L3QuNGC0LUg0L/QvtC70LjRmtCwINC40L3QtNC40YbQuNGA0LDQsNGCINC00LXQutCwINGB0LXQs9Cw0YjQvdC40YLQtSDQstGA0LXQtNC90L7RgdGC0Lgg0YHQtSDQt9Cw0LTRgNC20LDQvdC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICfQodC60L7QutC90LDRgtC+JzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICfQnNC+0LTQtdC7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ9Ch0LXRgNC40YHQutC4INCR0YDQvtGYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ9Cf0YDQvtGG0LXRgdC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnUmFtINC80LXQvNC+0YDQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAn0KLQstGA0LQg0JTQuNGB0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICfQmtCw0L/QsNGG0LjRgtC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAn0JzRgNC10LbQtdC9INCQ0LTQsNC/0YLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQINC/0YDQtdC60YMgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSVAg0JDQtNGA0LXRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ9CT0YDQsNGE0LjRh9C60Lgg0JDQtNCw0L/RgtC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAn0JTRgNGD0LPQsCDQntC/0YDQtdC80LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAn0JTQsNGC0YPQvCDQvdCwINCY0YHRgtC10LrRg9Cy0LDRmtC1INC90LAg0JPQsNGA0LDQvdGG0LjRmNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ9CU0LDRgtGD0Lwg0L3QsCDQuNC90YHRgtCw0LvQuNGA0LDRmtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICfQotC10LvQtdGE0L7QvSAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICfQotC10LvQtdGE0L7QvSAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICfQnNGA0LXQttC90LAg0JDQtNGA0LXRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAn0JzQsNGB0LrQsCDQvdCwINCf0L7QtNC80YDQtdC20LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ9Cf0L7RgNGC0LDQuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICfQotC40L8g0L3QsCDQm9C40YbQtdC90YbQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ9Ca0LvRg9GHINC90LAg0JvQuNGG0LXQvdGG0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICfQmtCy0LDQvdGC0LjRgtC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAn0JTQsNGC0LAg0L3QsCDQuNGB0YLQtdC60YPQstCw0ZrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ9Cc0LXQtNC40LAnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICfQmNGB0YLQtdGH0LXQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAn0J7QtNGA0LbRg9Cy0LDRmtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAn0J/QuNC70L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn0J/Qu9Cw0L3QuNGA0LDQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ9Cf0L7Qv9GA0LDQstC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICfQn9GA0LXQutC40L3QsNGC0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAn0J/RgNC10LPQu9C10LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ9Ci0LXRgdGCL1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ9Cb0LDQv9GC0L7Qvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAn0KDQsNCx0L7RgtC90LAg0L/QvtCy0YDRiNC40L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAn0KHQtdGA0LLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn0JTRgNGD0LPQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAn0JzQvtC90LjRgtC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ9Cf0LXRh9Cw0YLQsNGHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ9Cf0YDQtdC60LvQvtC/0L3QuNC6KFN3aXRjaCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAn0KDRg9GC0LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ9CR0LXQttC40YfQvdCwINCb0L7QutCw0LvQvdCwINCc0YDQtdC20LAg0JzQtdGB0YLQviDQt9CwINCf0YDQuNGB0YLQsNC/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ9CR0LXQt9Cx0LXQtNC90L7RgdC10L0g0KPRgNC10LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ9CR0LXQutCw0L8g0KPRgNC10LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICfQk9C70YPRiNC10YYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICfQotCw0YHRgtCw0YLRg9GA0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAn0JrQsNC80LXRgNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ9CR0LjQvNC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICfQnNC+0LTQtdC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBINCa0LDRgNGC0LjRh9C60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQiDQo9GA0LXQtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICfQn9GA0LjQutC70YPRh9C90LAg0KHRgtCw0L3QuNGG0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ9Ch0LrQtdC90LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ9CT0YDQsNC00LXRmNGc0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAn0JrQsNC90YbQtdC70LDRgNC40ZjQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ9Cf0L7QtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAn0KHQvtCx0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ9Cg0LDQvNC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAn0KDQsNCx0L7RgtC90L7QvNC10YHRgtC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ9CY0LfQu9C10LfQvdC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnSVQg0J7QsdGY0LXQutGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ9Cb0L7QutCw0LvQvdCwINCc0YDQtdC20LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ9CR0LXQttC40YfQvdCwINCb0L7QutCw0LvQvdCwINCc0YDQtdC20LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICdUZWxjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAn0JrQu9C40LXQvdGCINCQ0L/Qu9C40LrQsNGG0LjRmNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ9Ch0LXRgNCy0LjRgdC90LAg0JDQv9C70LjQutCw0YbQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAn0JrQu9C40LXQvdGCINCe0KEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAn0KHQtdGA0LLQtdGAINCe0KEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ9CQ0LTQvNC40L0g0JDQu9Cw0YLQutC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ9Ca0L7RgNC40YHQvdC40Log0JDQu9Cw0YLQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAn0JLQs9GA0LDQtNC10L3QuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ9CV0LTQuNC90LXRh9C90LAg0JvQuNGG0LXQvdGG0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICfQn9C+INCa0L7RgNC40YHQvdC40LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ9Cf0L4g0J/RgNC+0YbQtdGB0L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAn0J/QviDQodC10YDQstC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICfQn9C+INCI0LDQt9C+0LsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICfQktC+0LvRg9C80LXQvdGCINC90LAg0JvQuNGG0LXQvdGG0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAn0J/RgNC10YLQv9GA0LjRmNCw0YLQuNC1INCb0LjRhtC10L3RhtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAn0KDQsNC30LLQuNCy0LDRhyDQm9C40YbQtdC90YbQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAn0JTQtdC80L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAn0JLRgNC10LzQtSDQvdCwINCX0LDQsdGA0LDQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAn0JHQtdGB0L/Qu9Cw0YLQtdC9INGB0L7RhNGC0LLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAn0J7RgtCy0L7RgNC10L0g0JjQt9Cy0L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICfQndC10L7Qs9GA0LDQvdC40YfQtdC90L4nOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJ9Cf0YDQvtCy0LXRgNC4INC30LAg0YPQvdC40LrQsNGC0L3QviDQuNC80LUg0YHQsNC80L4g0LLQviDRgNCw0LzQutC40YLQtSDQvdCwINC40YHRgtCwINCa0L7QvdGE0LjQs9Cn0LvQtdC9INC60LvQsNGB0LAgKFwnY2xhc3NcJykg0LjQu9C4INCz0LvQvtCx0LDQu9C90L4gKFwnZ2xvYmFsXCcpLCDRiNGC0L4g0LfQvdCw0YfQuCDQtNC10LrQsCDRgdC10LrQvtGYINC/0L7RgdGC0L7RmNCw0YfQutC4INCa0L7QvdGE0LjQs9Cn0LvQtdC9INC1INC30LXQvNC10L0g0LLQviDQv9GA0L7RhNC40LvQvtGCINC60L7Qs9CwINGB0LUg0LHQsNGA0LDQsNGCINC00YPQv9C70LjQutCw0YLQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAn0JrQvtC90YTQuNCzINCn0LvQtdC90L7QstC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ca0L7QvdGE0LjQsyDRh9C70LXQvSDQvdCw0YHRgtCw0L0g0LzQvtC00YPQu9C4INC60L7QuCDQvtCy0L7Qt9C80L7QttGD0LLQsNCw0YIg0LfQsNC/0LjRiNGD0LLQsNCw0YIg0LvQvtCz0L7QstC4INCy0L4g0LjRgdGC0L7RgNC40ZjQsCDQvdCwINCw0LPQtdC90YIg0LjQvdGC0LXRhNC10ZjRgdC+0YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJ9Ca0L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0KfQu9C10L0g0JvQuNC80LjRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJ9Ca0YDQtdC40YDQsNGYINC4INC80LXQvdCw0Z/QuNGA0LDRmCDQtNC10YTQuNC90LjRhtC40Lgg0LfQsCDQmtC+0L3RhNC40LPRg9GA0LDRhtC40YHQutC4INCn0LvQtdC90L7QstC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRgNCwINCR0LDRgNCw0L3QuCDQv9C10YDQvNC40YHQuNC4INC00LAg0LrRgNC10LjRgNCwIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvdC+0LLQuCDQutC+0YDQuNGB0YLQtdGY0ZzQuCDQk9C10L3QtdGA0LjRh9C60Lgg0JjQvdGC0LXRgNGE0LXRmNGB0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGA0LAg0JHQsNGA0LDQvdC4INC/0LXRgNC80LjRgdC40Lgg0LfQsCAg0LTQsCDQt9C10LzQtSBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0YfQu9C10L3QvtCy0Lgg0LrQvtGA0LjRgdGC0LXRmNGc0Lgg0JPQtdC90LXRgNC40YfQutC4INCY0L3RgtC10YDRhNC10ZjRgS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGA0LAg0JHQsNGA0LDQvdC4INC/0LXRgNC80LjRgdC40Lgg0LfQsCBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0YfQu9C10L3QvtCy0Lgg0LrQvtGA0LjRgdGC0LXRmNGc0Lgg0JPQtdC90LXRgNC40YfQutC4INCY0L3RgtC10YDRhNC10ZjRgdC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YDQsCDQkdCw0YDQsNC90Lgg0L/QtdGA0LzQuNGB0LjQuCDQt9CwINC90LDQtNCz0YDQsNC00LHQsCDQvdCwIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvdC+0LLQuCDQvdCwINCT0LXQvdC10YDQuNGH0LrQuCDQmNC90YLQtdGA0YTQtdGY0YEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGA0LAg0L/RgNC10LPQu9C10LQg0LzQvtC00YPQuyDQt9CwINC/0YDQuNC60LDQtyDQvdCwINC80LDQuyDQv9GA0LXQs9C70LXQtCDQvdCwINC60L7RhNC40LPRg9GA0LDRhtC40YHQutCwINC70YfQtdC9INC70LjRgdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRgNCwINGA0LXQs9GD0LvQsNGA0L3QuCDQuNC30YDQsNC30Lgg0LjQvdC00LjQstC40LTRg9Cw0LvQvdC+INC30LAg0YHQtdC60L7RmNCwINCa0L7QvdGE0LjQs9Cn0LvQtdC9INC60LvQsNGB0LAg0LfQsCDQtNCwINC/0YDQvtCy0LXRgNC4INCa0L7QvdGE0LjQs9Cn0LvQtdC9INC40LzQtSDQuCDQtNCwINCz0Lgg0L/RgNC40LrQsNC20LUg0LPRgNC10YjQvdC40YLQtSDQutC+0YDQtdGB0L/QvtC90LTQuNGA0LDRh9C60LjRgtC1INC/0L7RgNCw0LrQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGA0LAg0YHRgtCw0L3QtNCw0YDQtNC10L0g0YHRg9Cx0L7QsdGY0LXQutGCINC30LAg0LrQu9Cw0YHQsNGC0LAgXCdJVFNNQ29uZmlnSXRlbVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRgNCwINCx0YDQvtGYINC90LAg0YDQtdC00LjRhtC4INC30LAgQ0kg0LTQtdGE0LjQvdC40YbQuNGB0LrQuNC+0YIg0YPRgNC10LTQvdC40Log0LLQviDQsNC00LzQuNC9INC40L3RgtC10YDRhNC10ZjRgdC+0YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGA0LAg0LvQuNC80LjRgiDQt9CwINCx0LDRgNCw0ZrQsCDQt9CwIEFnZW50SVRTTUNvbmZpZ0l0ZW0g0LXQutGA0LDQvdC+0YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YDQsCDQu9C40LzQuNGCINC30LAg0LHQsNGA0LDRmtCwINC30LAgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCDQtdC60YDQsNC90L7Rgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YDQsCDQv9GA0LjQutCw0Lcg0L3QsCDQutC+0LvQvtC90Lgg0LLQviDQutC+0L3RhNC40LMg0YfQu9C10L3QvtGCINC/0YDQtdCz0LvQtdC0LiDQntCy0LDQsCDQvtC/0YbQuNGY0LAg0L3QtdC80LAg0LXRhNC10LrRgiDQvdCwINC/0L7Qt9C40YbQuNGY0LDRgtCwINC90LAg0LrQvtC70L7QvdC4LiDQl9Cw0LHQtdC70LXRiNC60LA6INCa0LvQsNGB0L3QuCDQutC+0LvQvtC90Lgg0YHQtSDRgdC10LrQvtCz0LDRiCDQtNC+0YHRgtCw0L/QvdC4INCw0LrQviDRhNC40LvRgtC10YDQvtGCIFwnQWxsXCcg0LUg0L7QtNCx0YDQsNC9Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRgNCwINC/0YDQuNC60LDQtyDQvdCwINC60L7Qu9C+0L3QuCDQstC+INC60L7QvdGE0LjQsyDRh9C70LXQvSDQsdCw0YDQsNGa0LUuINCe0LLQsNCwINC+0L/RhtC40ZjQsCDQvdC10LzQsCDQtdGE0LXQutGCINC90LAg0L/QvtC30LjRhtC40ZjQsNGC0LAg0L3QsCDQutC+0LvQvtC90LjRgtC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRgNCwINC/0YDQuNC60LDQtyDQvdCwINC60L7Qu9C+0L3QuCDQvtC0IENJcyDQstC+INC60L7QvdGE0LjQsyDRh9C70LXQvdC+0YIg0L/RgNC10LPQu9C10LTQvtGCINCy0L4g0LfQsNCy0LjRgdC90L7RgdGCINC+0LQgQ0kg0LrQu9Cw0YHQsNGC0LAuINCh0LXQutC+0Zgg0LLQu9C10Lcg0LzQvtGA0LAg0LTQsCDQuNC80LAg0L/RgNC10YTQuNC60YEg0YHQviDQutC70LDRgdC90L4g0LjQvNC1INC4INC00LLQvtGY0L3QuCDQutC+0LvQvtC90LggKGkuZS4gQ29tcHV0ZXI6OikuINCY0LzQsCDQvdC10LrQvtC70LrRgyBDSS3QkNGC0YDQuNCx0YPRgtC4INC60L7QuCDRgdC1INGH0LXRgdGC0Lgg0YHQviDRgdC40YLQtSBDSXMgKNC/0YDQuNC80LXRgCDQt9CwINC60LvQsNGB0YLQsCBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4g0JfQsCDQv9GA0LjQutCw0Lcg0L3QsCDQuNC00LjQstC40LTRg9Cw0LvQvdC4IENJLUF0dHJpYnV0ZXMg0LrQsNC60L4g0YjRgtC+INGB0LUg0LTQtdGE0LjQvdC40YDQsNC90Lgg0LLQviAgQ0kt0JTQtdGE0LjQvdC40YbQuNGY0LDRgtCwLCDRgdC70LXQtNC90LDQstCwINGI0LXQvNCwINC80L7RgNCwINC00LAg0LHQuNC00LUg0LjRgdC60L7RgNC40YHRgtC10L3QsCAo0L/RgNC40LzQtdGAINC30LAg0LrQu9Cw0YHQsNGC0LAgIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuINCQ0LrQviDQvdC10LzQsCDQstC70LXQtyDQt9CwIENJINC60LvQsNGB0LAsINGC0L7Qs9Cw0Ygg0YHRgtCw0L3QtNCw0YDQtNC90LjRgtC1INC60L7Qu9C+0L3QuCDRgdC1INC/0YDQuNC60LDQttCw0L3QuCDQutCw0LrQviDRiNGC0L4g0YHQtSDQtNC10YTQuNC90LjRgNCw0L3QuCDQstC+INC/0L7RgdGC0LDQstGD0LLQsNGa0LXRgtC+IElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YDQsCDQv9GA0LjQutCw0Lcg0L3QsCDQutC+0LvQvtC90Lgg0L7QtCBDSXMg0LLQviDQutC+0L3RhNC40LMg0YfQu9C10L3QvtGCINC/0YDQtdCz0LvQtdC00L7RgiDQstC+INC30LDQstC40YHQvdC+0YHRgiDQvtC0IENJINC60LvQsNGB0LDRgtCwLiDQodC10LrQvtGYINCy0LvQtdC3INC80L7RgNCwINC00LAg0LjQvNCwINC/0YDQtdGE0LjQutGBINGB0L4g0LrQu9Cw0YHQvdC+INC40LzQtSDQuCDQtNCy0L7RmNC90Lgg0LrQvtC70L7QvdC4IChpLmUuIENvbXB1dGVyOjopLiDQmNC80LAg0L3QtdC60L7Qu9C60YMgQ0kt0JDRgtGA0LjQsdGD0YLQuCDQutC+0Lgg0YHQtSDRh9C10YHRgtC4INGB0L4g0YHQuNGC0LUgQ0lzICjQv9GA0LjQvNC10YAg0LfQsCDQutC70LDRgdGC0LAgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuINCX0LAg0L/RgNC40LrQsNC3INC90LAg0LjQtNC40LLQuNC00YPQsNC70L3QuCBDSS1BdHRyaWJ1dGVzINC60LDQutC+INGI0YLQviDRgdC1INC00LXRhNC40L3QuNGA0LDQvdC4INCy0L4gIENJLdCU0LXRhNC40L3QuNGG0LjRmNCw0YLQsCwg0YHQu9C10LTQvdCw0LLQsCDRiNC10LzQsCDQvNC+0YDQsCDQtNCwINCx0LjQtNC1INC40YHQutC+0YDQuNGB0YLQtdC90LAgKNC/0YDQuNC80LXRgCDQt9CwINC60LvQsNGB0LDRgtCwICBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiDQkNC60L4g0L3QtdC80LAg0LLQu9C10Lcg0LfQsCBDSSDQutC70LDRgdCwLCDRgtC+0LPQsNGIINGB0YLQsNC90LTQsNGA0LTQvdC40YLQtSDQutC+0LvQvtC90Lgg0YHQtSDQv9GA0LjQutCw0LbQsNC90Lgg0LrQsNC60L4g0YjRgtC+INGB0LUg0LTQtdGE0LjQvdC40YDQsNC90Lgg0LLQviDQv9C+0YHRgtCw0LLRg9Cy0LDRmtC10YLQviBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YDQsCDQv9GA0LjQutCw0Lcg0L3QsCDQutC+0LvQvtC90Lgg0L7QtCBDSXMg0LLQviDQutC+0L3RhNC40LMg0YfQu9C10L3QvtGCINC/0YDQtdCz0LvQtdC00L7RgiDQstC+INC30LDQstC40YHQvdC+0YHRgiDQvtC0IENJINC60LvQsNGB0LDRgtCwLiDQodC10LrQvtGYINCy0LvQtdC3INC80L7RgNCwINC00LAg0LjQvNCwINC/0YDQtdGE0LjQutGBINGB0L4g0LrQu9Cw0YHQvdC+INC40LzQtSDQuCDQtNCy0L7RmNC90Lgg0LrQvtC70L7QvdC4IChpLmUuIENvbXB1dGVyOjopLiDQmNC80LAg0L3QtdC60L7Qu9C60YMgQ0kt0JDRgtGA0LjQsdGD0YLQuCDQutC+0Lgg0YHQtSDRh9C10YHRgtC4INGB0L4g0YHQuNGC0LUgQ0lzICjQv9GA0LjQvNC10YAg0LfQsCDQutC70LDRgdGC0LAgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuINCX0LAg0L/RgNC40LrQsNC3INC90LAg0LjQtNC40LLQuNC00YPQsNC70L3QuCBDSS1BdHRyaWJ1dGVzINC60LDQutC+INGI0YLQviDRgdC1INC00LXRhNC40L3QuNGA0LDQvdC4INCy0L4gIENJLdCU0LXRhNC40L3QuNGG0LjRmNCw0YLQsCwg0YHQu9C10LTQvdCw0LLQsCDRiNC10LzQsCDQvNC+0YDQsCDQtNCwINCx0LjQtNC1INC40YHQutC+0YDQuNGB0YLQtdC90LAgKNC/0YDQuNC80LXRgCDQt9CwINC60LvQsNGB0LDRgtCwICBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiDQkNC60L4g0L3QtdC80LAg0LLQu9C10Lcg0LfQsCBDSSDQutC70LDRgdCwLCDRgtC+0LPQsNGIINGB0YLQsNC90LTQsNGA0LTQvdC40YLQtSDQutC+0LvQvtC90Lgg0YHQtSDQv9GA0LjQutCw0LbQsNC90LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAn0JTRg9C/0LvQuNC60LDRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICfQntCy0L7Qt9C80L7QttGD0LLQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40YHQutC4INGH0LvQtdC9IGJ1bGsgYWN0aW9uINC60LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60Lgg0LfQsCDQsNCz0LXQvdGCINC/0YDQtdC00LXQvdC00LXQuyDQt9CwINC00LAg0YDQsNCx0L7RgtC4INGB0L4g0L/QvtCy0LXRmtC1INC+0LQg0LXRhNC10L0g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSDQstC+INC40YHRgtC+INCy0YDQvNC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAn0J7QstC+0LfQvNC+0LbRg9Cy0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSBidWxrIGFjdGlvbiDQutCw0YDQsNC60YLQtdGA0LjRgdGC0LjQutC4INGB0LDQvNC+INC30LAg0LPRgNGD0L/QvdC40YLQtSDQu9C40YHRgtC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAn0J7QstC+0LfQvNC+0LbRg9Cy0LAv0L7QvdC10LLQvtC30LzQvtC20YPQstCwINGE0YPQvdC60YbQuNC+0L3QsNC70L3QvtGB0YLQuCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQmtC+0L3RhNC40LPQp9C70LXQvdC+0LLQuCDQt9CwINGD0L3QuNC60LDRgtC90Lgg0LjQvNC40ZrQsC4g0J/RgNC10LQg0LTQsCDRmNCwINC+0LLQvtC30LzQvtC20LjRgtC1INC+0LLQsNCwINC+0L/RhtC40ZjQsCDRgtGA0LXQsdCwINC00LAg0LPQviDQv9GA0L7QstC10YDQuNGC0LUg0LLQsNGI0LjQvtGCINGB0LjRgdGC0LXQvCDQtNCw0LvQuCDQstC10ZzQtSDQv9C+0YHRgtC+0ZjQsNGCINC60L7QvdGE0LjQsyDRh9C70LXQvdC+0LLQuCDRgdC+INC40YHRgtC+INC40LzQtS4g0JLQuNC1INC80L7QttC10YLQtSDQtNCwINCz0L4g0L3QsNC/0YDQsNCy0LjRgtC1INGB0L4g0YHQutGA0LjQv9Cw0YLQsCAgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQvtC00LPQvtCy0L7RgNC90L7RgdGCINC90LAg0LPRgNGD0L/QsCDQt9CwINC60LvQsNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAn0JzQvtC00YPQuyDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQvtC00L7Qs9C+0LLRgNC90L7RgdGCINC90LAg0LPRgNGD0L/QsCDQt9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0YfQu9C10L0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAn0JzQvtC00YPQuyDQt9CwINCz0LXQvdC10YDQuNGA0LDRmtC1IElUU00g0LrQvtC90YTQuNCzINGH0LvQtdC9INGB0YLQsNGC0LjRgdGC0LjQutCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICfQntCx0ZjQtdC60YIg0L/QvtC30LDQtNC40L3RgdC60Lgg0LzQvtC00YPQuyDRgNC10LPQuNGA0YHRgtCw0YbQuNCwINC30LAg0YPQstC+0Lcv0LjQt9Cy0L7QtyDQvNC+0LTRg9C70L7Rgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQt9CwINCx0L7RmNCwINC90LAg0YDQsNGB0L/QvtGA0LXQtCDRgdC+0YHRgtC+0ZjQsdC40YLQtSDQstC+INC/0YDQtdCz0LvQtdC00L7RgiDRgdC+INC+0L/RhtC40LjRgtC1ICDQvdCwINCw0LPQtdC90YIg0LjQvdGC0LXRgNGE0LXRmNGB0L7Rgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDRgNCw0YHQv9C+0YDQtdC0INGB0L7RgdGC0L7RmNCx0LjRgtC1INCy0L4g0L/RgNC10LPQu9C10LTQvtGCINGB0L4g0L7Qv9GG0LjQuNGC0LUgINC90LAg0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDQv9GA0LjQvNC10YAg0LTQvtC30LLQvtC70LjRgtC1INC30LAg0LPRgNGD0L/QuCDQvtC0INCz0LXQvdC10YDQsNC70L3QuCDQutCw0YLQsNC70L7QsyDQsNGC0YDQuNCx0YPRgtC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDRgdGC0YDQsNC90LjQstC4KNCy0L4g0LrQvtC4INC60L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60LjRgtC1INGH0LvQtdC90L7QstC4INGB0LUg0L/RgNC40LrQsNC20LDQvdC4KS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JHQsNGA0LDQvdC4INC/0YDQtdC80LjRgdC40Lgg0LfQsCDRg9C/0L7RgtGA0LXQsdCwINC90LAgSVRTTSAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSDQtdC60YDQsNC9INCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CR0LDRgNCw0L3QuCDQv9GA0LXQvNC40YHQuNC4INC30LAg0YPQv9C+0YLRgNC10LHQsCDQvdCwIElUU00gINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0YfQu9C10L0g0LXQutGA0LDQvSDQv9GA0LXQsdCw0YDRg9Cy0LDRmtC1INCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQkdCw0YDQsNC90Lgg0L/RgNC10LzQuNGB0LjQuCDQt9CwINGD0L/QvtGC0YDQtdCx0LAg0L3QsCBJVFNNICDQutC+0L3RhNC40LPRg9GA0LDRhtC40YHQutC4INGH0LvQtdC9INC30LPQvtC70LXQvNGD0LLQsNGH0LrQuCDQtdC60YDQsNC9INCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CR0LDRgNCw0L3QuCDQv9GA0LXQvNC40YHQuNC4INC30LAg0YPQv9C+0YLRgNC10LHQsCDQvdCwINC00L7QtNCw0LLQsNGa0LUg0L3QsCBJVFNNICDQutC+0L3RhNC40LPRg9GA0LDRhtC40YHQutC4INGH0LvQtdC9INC10LrRgNCw0L0g0LLQviDQsNCz0LXQvdGCINC40L3RgtC10YDRhNC10ZjRgdC+0YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CR0LDRgNCw0L3QuCDQv9GA0LXQvNC40YHQuNC4INC30LAg0YPQv9C+0YLRgNC10LHQsCDQvdCwINGD0YDQtdC00LggSVRTTSAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSDQtdC60YDQsNC9INCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQkdCw0YDQsNC90Lgg0L/RgNC10LzQuNGB0LjQuCDQt9CwINGD0L/QvtGC0YDQtdCx0LAg0L3QsCDQuNGB0YLQvtGA0LjRmNCwINC90LAgSVRTTSAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSDQtdC60YDQsNC9INCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JHQsNGA0LDQvdC4INC/0YDQtdC80LjRgdC40Lgg0LfQsCDRg9C/0L7RgtGA0LXQsdCwINC90LAg0L/RgNC40L3RgiDQvdCwIElUU00gINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0YfQu9C10L0g0LXQutGA0LDQvSDQstC+INCw0LPQtdC90YIg0LjQvdGC0LXRgNGE0LXRmNGB0L7Rgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICfQntC00LHQuNGA0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSDQsdGA0L7RmCDQs9C10L3QtdGA0LjRgNCw0YfQutC4INC80L7QtNGD0LsuICAiQXV0b0luY3JlbWVudCIgINC40L3QutGA0LXQvNC10L3RgtC40YDQsCDQutC+0L3RhNC40LPRg9GA0LDQstC40YHQutC4INGH0LXQvSDQsdGA0L7RmCwgU3lzdGVtSUQsQ29uZmlnSXRlbUNsYXNzSUQgINC4INCx0YDQvtGY0LDRh9C+0YIg0LUg0LjRgdC60L7RgNC40YHRgtC10L0uINCk0L7RgNC80LDRgtC+0YIg0LUgICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwg0L8u0YAuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQodC10YLQuNGA0LAg0YDQsNGB0L/QvtGA0LXQtCDRgdC+0YHRgtC+0ZjQsdCwINC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSBidWxrINC10LrRgNCw0L3QvtGCINC+0LQg0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQodC10YLQuNGA0LAg0LjQvdGG0LjQtNC10L3RgiDRgdC+0YHRgtC+0ZjQsdCwINC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSBidWxrINC10LrRgNCw0L3QvtGCINC+0LQg0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0YDQuNC60LDQttGD0LLQsCDQu9C40L3QuiDQstC+INC80LXQvdC40YLQviDQutC+0LUg0L7QstC+0LfQvNC+0LbRg9Cy0LAg0L/QvtCy0YDQt9GD0LLQsNGa0LUg0YHQviDQutC+0L3RhNC40LPRg9GA0LDRhtC40YHQutC4INGH0LvQtdC9INGB0L4g0LTRgNGD0LMg0L7QsdGY0LXQutGCINCy0L4g0LrQvtC90YTQuNCzINGH0LvQtdC9ICDQt9Cz0L7Qu9C10LzQtdC9INC/0YDQtdCz0LvQtdC0INCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0YDQuNC60LDQttGD0LLQsCDQu9C40L3QuiDQstC+INC80LXQvdC40YLQviDQutC+0LUg0L/RgNC40YHRgtCw0L/Rg9Cy0LAg0LLQviDQuNGB0YLQvtGA0LjRmNCw0YLQsCDQvdCwICDQutC+0L3RhNC40LPRg9GA0LDRhtC40YHQutC4INGH0LvQtdC9INCy0L4g0LrQvtC90YTQuNCzINGH0LvQtdC9INC/0YDQtdCz0LvQtdC0INCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9GA0LjQutCw0LbRg9Cy0LAg0LvQuNC90Log0LLQviDQvNC10L3QuNGC0L4g0LrQvtC1INC+0LLQvtC30LzQvtC20YPQstCwINC/0YDQuNGB0YLQsNC/INC00L4g0LjRgdGC0L7RgNC40ZjQsNGC0LAg0L3QsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40YHQutC4INGH0LvQtdC9INCy0L4g0LrQvtC90YTQuNCzINGH0LvQtdC9ICDQt9Cz0L7Qu9C10LzQtdC9INC/0YDQtdCz0LvQtdC0INCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0YDQuNC60LDQttGD0LLQsCDQu9C40L3QuiDQstC+INC80LXQvdC40YLQviDRgdC+INC00YPQv9C70LjQutCw0YIg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSDQstC+INC60L7QvdGE0LjQsyDRh9C70LXQvSDQv9GA0LXQs9C70LXQtCDQstC+INCw0LPQtdC90YIg0LjQvdGC0LXRgNGE0LXRmNGB0L7Rgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/RgNC40LrQsNC20YPQstCwINC70LjQvdC6INCy0L4g0LzQtdC90LjRgtC+INGB0L4g0LTRg9C/0LvQuNC60LDRgiDQutC+0L3RhNC40LPRg9GA0LDRhtC40YHQutC4INGH0LvQtdC9INCy0L4g0LfQs9C+0LvQtdC80LXQvSDQv9GA0LXQs9C70LXQtCDQstC+INCw0LPQtdC90YIg0LjQvdGC0LXRgNGE0LXRmNGB0L7Rgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0YDQuNC60LDQttGD0LLQsCDQu9C40L3QuiDQstC+INC80LXQvdC40YLQviDQt9CwINGD0YDQtdC00YPQstCw0ZrQtSDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0YfQu9C10L0g0LLQviDQt9Cz0L7Qu9C10LzQtdC9INC/0YDQtdCz0LvQtdC0INCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/RgNC40LrQsNC20YPQstCwINC70LjQvdC6INCy0L4g0LzQtdC90LjRgtC+INC30LAg0L/QtdGH0LDRgtC10ZrQtSDQstC+INC60L7QvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0YfQu9C10L0g0LfQs9C+0LvQtdC80LXQvSDQv9GA0LXQs9C70LXQtCDQstC+INCw0LPQtdC90YIg0LjQvdGC0LXRgNGE0LXRmNGB0L7Rgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9GA0LjQutCw0LbRg9Cy0LAg0LvQuNC90Log0LLQviDQvNC10L3QuNGC0L4g0YHQviDQt9Cz0L7Qu9C10LzRg9Cy0LDRmtC1INC90LAg0LrQvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0YfQu9C10L0g0LLQviAg0LrQvdGE0LjQs9GD0YDQsNGG0LjRgdC60Lgg0YfQu9C10L0g0L/RgNC10LPQu9C10LQg0LLQviDQsNCz0LXQvdGCINC40L3RgtC10YDRhNC10ZjRgdC+0YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9GA0LjQutCw0LbRg9Cy0LAgINC60L7QvdGE0LjQsyDRh9C70LXQvSDQuNGB0YLQvtGA0LjRmNCwICjQstC+INC+0LHRgNCw0YLQtdC9INGA0LXQtNC+0YHQu9C10LQpINCy0L4g0LDQs9C10L3RgiDQuNC90YLQtdGA0YTQtdGY0YHQvtGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAn0JjQtNC90LXRgtC40YTQuNC60YPQstCw0YfQvtGCINC30LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGB0LrQuCDRh9C70LXQvSwg0L8u0YAuICBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4g0KHRgtCw0L3QtNCw0YDQtNC+0YIg0LUgQ29uZmlnSXRlbSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1zX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdQZW5ndXJ1c2FuIENvbmZpZyBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnVWJhaCBkZWZpbmlzaSBrZWxhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnRGVmaW5pc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlJ30gPSAnVWJhaCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnREYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnaW5zaWRlbiBrZWFkYWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICdLZWFkYWFuIFBlcnR1a2FyYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdLZWxhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICdKZW5pcyBQZXJ0dWthcmFuIEtlYWRhYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0luc2lkZW4ga2VhZGFhbiBzZW1hc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnTnlhdGFrYW4gSmVuaXMgSW5zaWRlbiBTZW1hc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnVGVya2luaSBiZXJ1YmFoJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ0NvbmZpZyBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ01lbmFwaXMgS2VsYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnUGlsaWggS2VsYXMgZGFyaSBzZW5hcmFpIHVudHVrIG1ld3VqdWRrYW4gUGVya2FyYSBDb25maWcgYmFydS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICdJdGVtS29uZmlnIElUU00gVGluZGFrYW4gUHVrYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJ0tlYWRhYW4gcGVydHVrYXJhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJ0tlYWRhYW4gaW5zaWRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICdQYXV0IGtlIGxhaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJ05vbWJvciBCYXJhbmdhbiBLb25maWd1cmFzaSBUaWRhayBTYWghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJ05vbWJvciBCYXJhbmdhbiBLb25maWd1cmFzaSBsYWluIHVudHVrIGRpcGF1dGthbiBkZW5nYW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnQW5kYSBiZW5hciBpbmdpbiBtZW1idWFuZyBpdGVtIGNvbmZpZyBpbmk/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ05hbWEgY29uZmlnIGl0ZW0gaW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICdOYW1hIHN1ZGFoIGRpZ3VuYWthbiBvbGVoIENvbmZpZ0l0ZW1zIGRlbmdhbiBOb21ib3Iobm9tYm9yLW5vbWJvcikgYmVyaWt1dDogJXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICdLYW5kdW5nYW4gc2VqYXJhaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnQ2lwdGEgbWFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdQYW5kYW5nYW4gZGliZXNhcmthbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAna29udGVrcyBUZXRhcGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJ0l0ZW0gY29uZmlnIHBlciBoYWxhbWFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnSmFsYW5rYW4gQ2FyaWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJ0p1Z2EgbWVuY2FyaSBkYWxhbSB2ZXJzaSBzZWJlbHVtbnlhPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ1BlcmthcmEga29uZmlndXJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnTWFrbHVtYXQgQmFyYW5nYW4gS29uZmlndXJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnUGVydHVrYXJhbiBrZWFkYWFuIHNlbWFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdUZXJha2hpciBkaXViYWggb2xlaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnVHVuanVra2FuIHNhdHUgdmVyc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICdUdW5qdWtrYW4gc2VtdWEgdmVyc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ1ZlcnNpIEluc2lkZW4gTmVnZXJpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJ1ZlcnNpIEtlYWRhYW4gUGVydHVrYXJhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ0JpbGFuZ2FuIHZlcnNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICdLb25maWd1cmFzaSBWZXJzaSBJdGVtIEtlcGVyaW5jaGlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ2hhcnRhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ0NvbmZpZ0l0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnVGlhZGEgS2VwdXR1c2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJ0hhc2lsIGNhcmlhbiBDb25maWdJdGVtJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnS2VhZGFhbiBwZW5lbXBhdGFuIGl0ZW0gaW5pIGNvbmZpZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0tlYWRhYW4gaW5zaWRlbiBiYWdpIGNvbmZpZyBpdGVtIGluaSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdCZXR3ZWVuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ0JpbGFuZ2FuIG1ha3NpbXVtIHNhdHUgZWxlbWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ01lZGFuIGtvc29uZyBtZW51bmp1a2thbiBiYWhhd2EgbmlsYWkgc2VtYXNhIGRpc2ltcGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdNZWxhbmdrYXVpJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdOb21ib3IgU2VyaWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICdtZW1vcmkgdXRhbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnQ2FrZXJhIEtlcmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnTXVhdGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ05ldHdvcmsgQWRhcHRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCBsZWJpaCBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUCBBZGRyZXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdQZW55ZXN1YWkgZ3JhZmlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ1BlcmFsYXRhbiBsYWluLWxhaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnVGFyaWtoIFdhcmFudGkgUGVsdXB1dGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ1Bhc2FuZyBUYXJpa2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ1RlbGVmb24gMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsZWZvbiAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdBbGFtYXQgUmFuZ2thaWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnU3VibmV0IE1hc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ0dlcmJhbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnSmVuaXMgTGVzZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdLdW5jaSBMZXNlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ0t1YW50aXRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ1RhcmlraCBUYW1hdCBUZW1wb2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICdNZWRpYSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ1RhbWF0IFRlbXBvaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ3BlbnllbGVuZ2dhcmFhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ1BpbG90JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdEaXJhbmNhbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnTWVtYmFpa2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ2JlcnNhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnbWVuZ2thamknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1VqaWFuL1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ0xhcHRvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnRGVza3RvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnUGVsYXlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ2xhaW4tbGFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTW9uaXRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAncGVuY2V0YWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnVHVrYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnUm91dGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAncHVzYXQgYWtzZXMgV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICdQZXJhbnRpIEtlc2VsYW1hdGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdQZXJhbGF0YW4gQmFja3VwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAndGV0aWt1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJ0p1cnV0ZWtuaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnS2FtZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ0JlYW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBIEthZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnUGVyYW50aSBVU0InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnRG9rIFN0ZXNlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnUGVuZ2ltYmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnQmFuZ3VuYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnUGVqYWJhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ3RpbmdrYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ0JpbGlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnVGVtcGF0IGtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ091dGxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJ0lUIEtlbXVkYWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICdUZWxrbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnQXBsaWthc2kgcGVsYW5nZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ1Blcm1vaG9uYW4gUGVsYXlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdPUyBQZWxhbmdnYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU2VydmVyIE9TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdBZG1pbiBUb29sJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0FsYXQgcGVuZ2d1bmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICd0ZXJiZW5hbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ0xlc2VuIFNhaGFqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ3NldGlhcCBQZW5nZ3VuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAndW50dWsgUGVtcHJvc2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdTZXRpYXAgcGVsYXlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ3BlciBOb2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdMZXNlbiBKaWxpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICdMZXNlbiBFbnRlcnByaXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnTGVzZW4gUGVtYWp1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEZW1vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ21hc2EgVGVyaGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnRnJlZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdTdW1iZXIgVGVyYnVrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdUaWFkYSBiYXRhc2FuJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJ1NlbWFrIG5hbWEgeWFuZyB1bmlrIHNhaGFqYSBkaSBkYWxhbSBrZWxhcyBDb25maWdJdGVtIHlhbmcgc2FtYSAoXCdrZWxhc1wnKSBhdGF1IGRpIHBlcmluZ2thdCBnbG9iYWwgKFwnZ2xvYmFsXCcpLCB5YW5nIGJlcm1ha3N1ZCBzZXRpYXAgQ29uZmlnSXRlbSBzZWRpYSBhZGEgZGlhbWJpbCBraXJhIGtldGlrYSBtZW5jYXJpIHBlbmR1YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnQmFyYW5nYW4gS29uZmlndXJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJ1RhbWJhaCBpdGVtIGNvbmZpZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICdFZGl0IGl0ZW0gY29uZmlnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9kdWwgYWNhcmEgYmFyYW5nYW4ga29uZmlndXJhc2kgeWFuZyBtZW1iZW5hcmthbiB1bnR1ayBsb2cga2Ugc2VqYXJhaCBkYWxhbSBhbnRhcmEgbXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJ1NlamFyYWggaXRlbSBjb25maWcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJ0NldGFrIGl0ZW0gY29uZmlnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJ1p1bSBpdGVtIGNvbmZpZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICdIYWQgQmFyYW5nYW4gS29uZmlndXJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnS29uZmlndXJhc2kgUGVuZ3VydXNhbiBQYW5na2FsYW4gRGF0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJ0tvbmZpZ3VyYXNpIGl0ZW0gbW9kdWwgcHVrYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyBSb3V0ZXIgY2FyaWFuIGJlbGFrYW5nIGJhcmFuZ2FuIGtvbmZpZ3VyYXNpIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICdDaXB0YSBkYW4gdXJ1cyB0YWtyaWZhbiB1bnR1ayBCYXJhbmdhbiBLb25maWd1cmFzaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ1Rha3JpZmthbiBUaW5kYWthbiBkaW1hbmEgYnV0YW5nIHRldGFwYW4gaXR1IGFkYSBkYWxhbSB3aWRnZXQgb2JqZWsgYmVyc2FtYnVuZyAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBTaWxhIHBhc3Rpa2FuIHlhbmcgVGluZGFrYW4gaW5pIHBlcmx1IGRpZGFmdGFya2FuIHlhbmcgYmVyaWt1dCBmYWlsLWZhaWwgSlMgZGFuIENTUzogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBrZWJlbmFyYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNpcHRhIGJhcmFuZ2FuIGtvbmZpZ3VyYXNpIElUU00gbWVuZ2d1bmFrYW4gQW50YXJhIE11a2EgR2VuZXJpay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Rha3JpZmthbiBrZWl6aW5hbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVtYnVhbmcgaXRlbSBrb25maWd1cmFzaSBJVFNNIG1lbmdndW5ha2FuIEFudGFyYW11a2EgVW11bS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBrZWJlbmFyYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmRhcGF0a2FuIGJhcmFuZ2FuIGtvbmZpZ3VyYXNpIElUU00gbWVuZ2d1bmFrYW4gQW50YXJhIE11a2EgR2VuZXJpay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBrZWJlbmFyYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNhcmkgYmFyYW5nYW4ga29uZmlndXJhc2kgSVRTTSBtZW5nZ3VuYWthbiBBbnRhcmEgTXVrYSBHZW5lcmlrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtlYmVuYXJhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVuZ2VtYXNraW5pIGJhcmFuZ2FuIGtvbmZpZ3VyYXNpIElUU00gbWVuZ2d1bmFrYW4gQW50YXJhIE11a2EgR2VuZXJpay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIG1vZHVsIGdhbWJhcmFuIHVudHVrIG1lbnVuanVra2FuIHBhbmRhbmdhbiB5YW5nIGtlY2lsIHNlbmFyYWkgaXRlbSBrb25maWd1cmFzaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiB1bmdrYXBhbiBiaWFzYSBzZWNhcmEgaW5kaXZpZHUgdW50dWsgc2V0aWFwIGtlbGFzIEl0ZW1Lb25maWcgdW50dWsgbWVtZXJpa3NhIG5hbWEgSXRlbUtvbmZpZyBkYW4gdW50dWsgbWVudW5qdWtrYW4gbWVzZWogcmFsYXQgc2VwYWRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkYXMgU3RhbmRhcmQtU3Vib2JqZWN0IGRlciBLbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVuZW50dWthbiBiaWxhbmdhbiBiYXJpcyB1bnR1ayBlZGl0b3IgZGVmaW5pc2kgQ0kgZGFsYW0gYW50YXJhIG11a2EgYWRtaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJ1Rha3JpZmthbiBzdXN1bmFuIGtlYWRhYW4gaW5zaWRlbiBkYXJpcGFkYSB0aW5nZ2kgKGN0aC4ga3JpdGlrYWwpIGtlIHJlbmRhaCAoY3RoLiBmdW5nc2lhbikuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnVGFrcmlma2FuIGtlYWRhYW4gcGVuZW1wYXRhbiB5YW5nIHJlbGV2ZW4gZGltYW5hIHRpa2V0IGJlcnNhbWJ1bmcgYm9sZWggbWVuamVqYXNrYW4gc3RhdHVzIGJhZ2kgQ0kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGhhZCBjYXJpYW4gdW50dWsgc2tyaW4gSXRlbUtvbmZpZ0lUU01BZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBoYWQgY2FyaWFuIHVudHVrIHNrcmluIENhcmlhbkl0ZW1Lb25maWdJVFNNQWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHJ1YW5nYW4gZGl0dW5qdWtrYW4gZGFsYW0gZ2FtYmFyYW4ga2VzZWx1cnVoYW4gaXRlbSBrb25maWcuIFBpbGloYW4gaW5pIHRpZGFrIG1lbXB1bnlhaSBrZXNhbiBrZSBhdGFzIGtlZHVkdWthbiBydWFuZ2FuLiBOb3RhOiBydWFuZ2FuIEtlbGFzIHNlbnRpYXNhIGFkYSBqaWthIHBlbmFwaXMgXCdTZW11YVwnIGRpcGlsaWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBydWFuZ2FuIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0gY2FyaWFuIGl0ZW0ga29uZmlnLiBQaWxpaGFuIGluaSB0aWRhayBtZW1wdW55YWkga2VzYW4ga2UgYXRhcyBrZWR1ZHVrYW4gdGlhbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBydWFuZ2FuIGRpdHVuanVra2FuIGRhcmlwYWRhIENJcyBkYWxhbSBnYW1iYXJhbiBrZXNlbHVydWhhbiBpdGVtIGtvbmZpZyBiZXJnYW50dW5nIGtlcGFkYSBrZWxhcyBDSSAuIFNldGlhcCBwZW55ZXJ0YWFuIGhlbmRha2xhaCBkaW11bGFrYW4gZGVuZ2FuIG5hbWEga2VsYXMgZGFuIHRpdGlrIGJlcnRpbmRpaCBkdWEgKGlhaXR1IEtvbXB1dGVyOjopLiBUZXJkYXBhdCBiZWJlcmFwYSBzaWZhdC1DSSB5YW5nIGFkYSBwYWRhIGtlc2VtdWEgQ0lzIChjb250b2ggdW50dWsga2VsYXMgS29tcHV0ZXI6S29tcHV0ZXI6Ok5hbWEsIEtvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIEtvbXB1dGVyOjpNYXNhQ2lwdGEpLiBVbnR1ayBtZW51bmp1a2thbiBzaWZhdCBpbmRpdmlkdSBDSSBzZWJhZ2FpbWFuYSB5YW5nIGRpdGFrcmlma2FuIGRhbGFtIERlZmluaXNpLUNJLCBza2ltIGJlcmlrdXQgbWVzdGkgZGlndW5ha2FuIChjb250b2ggdW50dWsga2VsYXMgS29tcHV0ZXIpOiBLb21wdXRlcjo6aGFyZGRpc2s6OjEsIEtvbXB1dGVyOjpoYXJkZGlzazo6MTo6S2FwYXNpdGk6OjEsIGtvbXB1dGVyOjpoYXJkZGlzazo6MiwgS29tcHV0ZXI6OmhhcmRkaXNrOjoyOjpLYXBhc2l0aTo6MS4gSmlrYSB0aWFkYSBwZW55ZXJ0YWFuIHVudHVrIGtlbGFzIENJLCBtYWthIHJ1YW5nYW4gZGVmYXVsdCBkaXR1bmp1a2thbiBzZWJhZ2FpbWFuYSB5YW5nIGRpdGFrcmlma2FuIGRhbGFtIElUU01Lb25maWdJdGVtOjpCYWhhZ2lhbiBEZXBhbjo6QWdlbnRJVFNNS29uZmlnSXRlbSMjI1R1bmp1a1J1YW5nYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcnVhbmdhbiBkaXR1bmp1a2thbiBkYXJpcGFkYSBDSXMgZGFsYW0gZ2FtYmFyYW4ga2VzZWx1cnVoYW4gaXRlbSBrb25maWcgYmVyZ2FudHVuZyBrZXBhZGEga2VsYXMgQ0kgLiBTZXRpYXAgcGVueWVydGFhbiBoZW5kYWtsYWggZGltdWxha2FuIGRlbmdhbiBuYW1hIGtlbGFzIGRhbiB0aXRpayBiZXJ0aW5kaWggZHVhIChpYWl0dSBLb21wdXRlcjo6KS4gVGVyZGFwYXQgYmViZXJhcGEgc2lmYXQtQ0kgeWFuZyBhZGEgcGFkYSBrZXNlbXVhIENJcyAoY29udG9oIHVudHVrIGtlbGFzIEtvbXB1dGVyOktvbXB1dGVyOjpOYW1hLCBLb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBLb21wdXRlcjo6TWFzYUNpcHRhKS4gVW50dWsgbWVudW5qdWtrYW4gc2lmYXQgaW5kaXZpZHUgQ0kgc2ViYWdhaW1hbmEgeWFuZyBkaXRha3JpZmthbiBkYWxhbSBEZWZpbmlzaS1DSSwgc2tpbSBiZXJpa3V0IG1lc3RpIGRpZ3VuYWthbiAoY29udG9oIHVudHVrIGtlbGFzIEtvbXB1dGVyKTogS29tcHV0ZXI6OmhhcmRkaXNrOjoxLCBLb21wdXRlcjo6aGFyZGRpc2s6OjE6OkthcGFzaXRpOjoxLCBrb21wdXRlcjo6aGFyZGRpc2s6OjIsIEtvbXB1dGVyOjpoYXJkZGlzazo6Mjo6S2FwYXNpdGk6OjEuIEppa2EgdGlhZGEgcGVueWVydGFhbiB1bnR1ayBrZWxhcyBDSSwgbWFrYSBydWFuZ2FuIGRlZmF1bHQgZGl0dW5qdWtrYW4gc2ViYWdhaW1hbmEgeWFuZyBkaXRha3JpZmthbiBkYWxhbSBJVFNNS29uZmlnSXRlbTo6QmFoYWdpYW4gRGVwYW46OkFnZW50SVRTTUtvbmZpZ0l0ZW0jIyNUdW5qdWtSdWFuZ2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcnVhbmdhbiBkaXR1bmp1a2thbiBDSXMgZGFsYW0gcGFuZGFuZ2FuIHBhdXRhbiBqYWR1YWwga29tcGxla3MsIGJlcmdhbnR1bmcga2VwYWRhIGtlbGFzIENJIC4gU2V0aWFwIHBlbnllcnRhYW4gaGVuZGFrbGFoIGRpbXVsYWthbiBkZW5nYW4gbmFtYSBrZWxhcyBkYW4gdGl0aWsgYmVydGluZGloIGR1YSAoaWFpdHUgS29tcHV0ZXI6OikuIFRlcmRhcGF0IGJlYmVyYXBhIFNpZmF0LXNpZmF0LUNJIHlhbmcgc2FtYSBrZXBhZGEgc2VtdWEgQ0lzIChjb250b2ggdW50dWsga2VsYXMgS29tcHV0ZXI6S29tcHV0ZXI6Ok5hbWEsIEtvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIEtvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVW50dWsgbWVudW5qdWtrYW4gc2lmYXQgaW5kaXZpZHUgQ0kgc2ViYWdhaW1hbmEgeWFuZyBkaXRha3JpZmthbiBkYWxhbSBEZWZpbmlzaS1DSSwgc2tpbSBiZXJpa3V0IG1lc3RpIGRpZ3VuYWthbiAoY29udG9oIHVudHVrIGtlbGFzIEtvbXB1dGVyKTogS29tcHV0ZXI6OmhhcmRkaXNrOjoxLCBLb21wdXRlcjo6aGFyZGRpc2s6OjE6OkthcGFzaXRpOjoxLCBrb21wdXRlcjo6aGFyZGRpc2s6OjIsIEtvbXB1dGVyOjpoYXJkZGlzazo6Mjo6S2FwYXNpdGk6OjEuIEppa2EgdGlhZGEgcGVueWVydGFhbiB1bnR1ayBrZWxhcyBDSSwgbWFrYSBydWFuZ2FuIGRlZmF1bHQgZGlwYXBhcmthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnVGFrcmlma2FuIGplbmlzIHNhbWJ1bmdhbiB5YW5nIG1hbmEgKGRpbmFtYWthbiBkYXJpcGFkYSBwZXJzcGVrdGlmIHRpa2V0KSBib2xlaCBtZW5qZWphc2thbiBzdGF0dXMgYmFnaSBzYXR1IHNhbWJ1bmdhbiBDSS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICdUYWtyaWZrYW4gamVuaXMgdGlrZXQgeWFuZyBtYW5hIGJvbGVoIG1lbmplamFza2FuIHN0YXR1cyBiYWdpIHNhdHUgc2FtYnVuZ2FuIENJLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICdQZW5lbXBhdGFuIEtlYWRhYW4gV2FybmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0dhbmRha2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJ01lbWJvbGVoa2FuIGNpcmkgdGluZGFrYW4gcHVrYWwgaXRlbSBrb25maWd1cmFzaSB1bnR1ayBmcm9udGVuZCBlamVuIHVudHVrIGJla2VyamEgcGFkYSBsZWJpaCBkYXJpcGFkYSBzYXR1IGl0ZW0ga29uZmlndXJhc2kgcGFkYSBzYXR1IG1hc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICdNZW1ib2xlaGthbiBjaXJpIGl0ZW0ga29uZmlndXJhc2kgdGluZGFrYW4gcHVrYWwgaGFueWEgdW50dWsga3VtcHVsYW4geWFuZyBkaXNlbmFyYWlrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICdNZW1ib2xlaGthbi9tZWx1bXB1aGthbiBmdW5nc2kgdW50dWsgbWVueWVtYWsgS29uZmlnSXRlbSB1bnR1ayBuYW1hLW5hbWEgeWFuZyB1bmlrLiBTZWJlbHVtIG1lbWJvbGVoa2FuIHBpbGloYW4gaW5pIGFuZGEgcGVybHUgbWVueWVtYWsgc2lzdGVtIGFuZGEgdW50dWsgYmFyYW5nYW4ga29uZmlnIHlhbmcgdGVsYWggc2VkaWEgYWRhIGRlbmdhbiBuYW1hIHlhbmcgc2FtYS4gQW5kYSBib2xlaCBtZWxha3VrYW4gaW5pIGRlbmdhbiBiaW4gc2tyaXAvb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICdNb2RlbCBhY2FyYSB1bnR1ayBtZW55ZWRpYWthbiBzdGF0dXMtaXRlbWNvbmZpZyBhdGFzIHNhbWJ1bmdhbi1pdGVtY29uZmlnLXRpa2V0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJ3BhbmRhbmdhbiBpdGVtIGNvbmZpZyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJ01vZHVsIHVudHVrIG1lbnllbWFrIGt1bXB1bGFuIGJlcnRhbmdndW5namF3YWIgdW50dWsga2VsYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnTW9kdWwgdW50dWsgbWVueWVtYWsga3VtcHVsYW4gYmVydGFuZ2d1bmdqYXdhYiB1bnR1ayBpdGVtIGtvbmZpZ3VyYXNpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJ01vZHVsIHVudHVrIG1lbmphbmEgc3RhdGlzdGlrIGtvbmZpZyBpdGVtIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ09iamVrdC1CYWNrZW5kIE1vZHVsIFJlZ2lzdHJhdGlvbiBkZXMgSW1wb3J0L0V4cG9ydCBNb2R1bHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJ1BhbmRhbmdhbiBrZXNlbHVydWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGFyYW1ldGVyIHVudHVrIHdhcm5hIGtlYWRhYW4gbWVuZ2F0dXIga2VkdWR1a2FuIGRhbGFtIHBhcGFyYW4gcGlsaWhhbiBkYXJpIHBhcGFyYW4gZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsga2VhZGFhbiBtZW5nYXR1ciBrZWR1ZHVrYW4gZGFsYW0gcGFwYXJhbiBwaWxpaGFuIGRhcmkgcGFwYXJhbiBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgY29udG9oIGt1bXB1bGFuIHlhbmcgZGliZW5hcmthbiBwYWRhIGNpcmktY2lyaSBrYXRhbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgbXVrYSBzdXJhdCAoZGkgbWFuYSBpdGVtIGtvbmZpZ3VyYXNpIGRpdHVuanVra2FuKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVtZXJsdWthbiBrZWJlbmFyYW4gdW50dWsgbWVuZ2d1bmFrYW4gc2tyaW4gaXRlbSBrb25maWd1cmFzaSBJVFNNIGRhbGFtIHBhcGFyYW4gZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW1lcmx1a2FuIGtlYmVuYXJhbiB1bnR1ayBtZW5nZ3VuYWthbiBza3JpbiBjYXJpYW4gaXRlbSBrb25maWd1cmFzaSBJVFNNIGRhbGFtIHBhcGFyYW4gZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVtZXJsdWthbiBrZWJlbmFyYW4gdW50dWsgbWVuZ2d1bmFrYW4gc2tyaW4genVtIGl0ZW0ga29uZmlndXJhc2kgSVRTTSBkYWxhbSBwYXBhcmFuIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVtZXJsdWthbiBrZWJlbmFyYW4gdW50dWsgbWVuZ2d1bmFrYW4gc2tyaW4gdGFtYmFoIGl0ZW0ga29uZmlndXJhc2kgSVRTTSBkYWxhbSBwYXBhcmFuIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbWVybHVrYW4ga2ViZW5hcmFuIHVudHVrIG1lbmdndW5ha2FuIHNrcmluIGVkaXQgaXRlbSBrb25maWd1cmFzaSBJVFNNIGRhbGFtIHBhcGFyYW4gZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVtZXJsdWthbiBrZWJlbmFyYW4gdW50dWsgbWVuZ2d1bmFrYW4gc2tyaW4gc2VqYXJhaCBpdGVtIGtvbmZpZ3VyYXNpIElUU00gZGFsYW0gcGFwYXJhbiBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVtZXJsdWthbiBrZWJlbmFyYW4gdW50dWsgbWVuZ2d1bmFrYW4gc2tyaW4gY2V0YWsgaXRlbSBrb25maWd1cmFzaSBJVFNNIGRhbGFtIHBhcGFyYW4gZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJ0tlaXN0aW1ld2Fhbi1rZWlzdGltZXdhYW4gZGlrZWhlbmRha2kgdW50dWsgbWVtYWRhbWthbiBiYXJhbmctYmFyYW5nIGNvbmZpZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICdDYXJpIGJhcmFuZy1iYXJhbmcgY29uZmlnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICdNZW1pbGloIGl0ZW0ga29uZmlndXJhc2kgbW9kdWwgcGVuamFuYSBub21ib3IuICJQZW5hbWJhaGFuQXV0byIgbWVuYW1iYWggYmlsYW5nYW4gaXRlbSB0YXRhcmFqYWgsIFNpc3RlbUlELCBLb25maWdJdGVtQ2xhc3NJRCBkYW4ga2F1bnRlciBkaWd1bmFrYW4uIEZvcm1hdCBpbmkgYWRhbGFoICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyICIsIGNvbnRvaG55YSAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnTWVuZW50dWthbiBrZWFkYWFuIGluc2lkZW4gYmFnaSBDSSBzZWNhcmEgYXV0b21hdGlrIGFwYWJpbGEgc3VhdHUgVGlrZXQgZGlzYW1idW5na2FuIGtlcGFkYSBzdWF0dSBDSS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTZXQga2VhZGFhbiBwZW5lbXBhdGFuIGRhbGFtIHNrcmluIHB1a2FsIGl0ZW0ga29uZmlndXJhc2kgYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2V0IGtlYWRhYW4gaW5zaWRlbiBkYWxhbSBza3JpbiBwdWthbCBpdGVtIGtvbmZpZ3VyYXNpIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gcGF1dGFuIGRhbGFtIG1lbnUgeWFuZyBtZW1ib2xlaGthbiBtZW5naHVidW5na2FuIGl0ZW0ga29uZmlndXJhc2kgZGVuZ2FuIG9iamVrIGxhaW4gZGFsYW0gcGFuZGFuZ2FuIHp1bSBpdGVtIGtvbmZpZyBiYWdpIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVHVuanVrIHBhdXRhbiBkYWxhbSBtZW51IHVudHVrIG1lbmdha3NlcyBzZWphcmFoIGl0ZW0ga29uZmlndXJhc2kgZGkgZGFsYW0gZ2FtYmFyYW4ga2VzZWx1cnVoYW4gaXRlbSBrb25maWd1cmFzaSBhbnRhcmEgbXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBwYXV0YW4gZGFsYW0gbWVudSB1bnR1ayBtZW5nYWtzZXMgc2VqYXJhaCBpdGVtIGtvbmZpZ3VyYXNpIGRhbGFtIHBhbmRhbmdhbiB6dW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBzYXR1IHNhbWJ1bmdhbiBrZXBhZGEgbWVudSB1bnR1ayBtZW1hZGFtIHNhdHUgYmFyYW5nIGtvbmZpZ3VyYXNpICBkYWxhbSBwYW5kYW5nYW4genVtbnlhIGRhcmlwYWRhIGFudGFyYW11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdUdW5qdWsgcGF1dGFuIGRhbGFtIG1lbnUgdW50dWsgbWVueWFsaW4gaXRlbSBrb25maWd1cmFzaSBkaSBkYWxhbSBnYW1iYXJhbiBrZXNlbHVydWhhbiBpdGVtIGtvbmZpZ3VyYXNpIGFudGFyYSBtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHBhdXRhbiBkYWxhbSBtZW51IHVudHVrIG1lbnlhbGluIGJhcmFuZ2FuIGtvbmZpZ3VyYXNpIGRhbGFtIHBhbmRhbmdhbiB6dW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHBhdXRhbiBkYWxhbSBtZW51IHVudHVrIGVkaXQgYmFyYW5nYW4ga29uZmlndXJhc2kgZGFsYW0gcGFuZGFuZ2FuIHp1bSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnbWVudW5qdWtrYW4gc3VhdHUgc2FtYnVuZ2FuIHBhZGEgbWVudSB1bnR1ayBrZW1iYWxpIGRhbGFtIHpvb20gaXRlbSBrb25maWd1cmFzaSBkYXJpcGFkYSBhbnRhcmEgbXVrYSBhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gcGF1dGFuIGRhbGFtIG1lbnUgdW50dWsgbWVuY2V0YWsgYmFyYW5nYW4ga29uZmlndXJhc2kgZGFsYW0gcGFuZGFuZ2FuIHp1bSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1R1bmp1ayBwYXV0YW4gZGFsYW0gbWVudSB1bnR1ayB6dW0ga2UgZGFsYW0gYmFyYW5nYW4ga29uZmlndXJhc2kgZGkgZGFsYW0gZ2FtYmFyYW4ga2VzZWx1cnVoYW4gYmFyYW5nYW4ga29uZmlndXJhc2kgYW50YXJhIG11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1R1bmp1ayBzZWphcmFoIGJhcmFuZ2FuIGtvbmZpZyAodXJ1dGFuIHRlcmJhbGlrKSBkYWxhbSBhbnRhcmEgbXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnUGVuZ2VjYW0gdW50dWsgaXRlbSBrb25maWd1cmFzaSwgY29udG9oOiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gRGVmYXVsdCBpYWxhaCBDb25maWdJdGVtIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICdrZWxhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICdnbG9iYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5iX05PX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdBZG1pbmlzdHJhc2pvbiBhdiBrb25maWd1cmFzam9uc2VuaGV0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdFbmRyZSBrbGFzc2VkZWZpbmlzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIENsYXNzJ30gPSAnS29uZmlndXJhc2pvbnNlbmhldHNrbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ0RlZmluaXNqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlJ30gPSAnRW5kcmUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0hlbmRlbHNlc3RpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICdQcm9kdWtzam9uc3NldHRpbmdzdGlsc3RhbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdLbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnVHlwZSBwcm9kdWtzam9uc3NldHRpbmdzdGlsc3RhbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ07DpXbDpnJlbmRlIGhlbmRlbHNlc3RpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ07DpXbDpnJlbmRlIHR5cGUgaGVuZGVsc2VzdGlsc3RhbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnU2lzdCBlbmRyZXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnS29uZmlndXJhc2pvbnNlbmhldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdGaWx0ZXIgZm9yIGtsYXNzZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnVmVsZyBlbiBrbGFzc2UgZnJhIGxpc3RlbiBmb3Igw6Ugb3BwcmV0dGUgZW4gbnkga29uZmlndXJhc2pvbnNlbmhldCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJ01hc3NlcmVkaWdlcmluZyBhdiBrb25maWd1cmFzam9uc2VuaGV0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJ1Byb2R1a3Nqb25zc2V0dGluZ3N0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJ0hlbmRlbHNlc3RpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gYW5vdGhlcid9ID0gJ0tvYmxlIHRpbCBlbiBhbm5lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENvbmZpZ3VyYXRpb24gSXRlbSBudW1iZXIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbmZpZyBpdGVtPyd9ID0gJ1ZpbCBkdSB2aXJrZWxpZyBmamVybmUgZGVubmUga29uZmlndXJhc2pvbnNlbmhldGVuPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdOYXZuZXQgdGlsIGRlbm5lIGtvbmZpZ3VyYXNqb25zZW5oZXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICdIaXN0b3JpZW4gdGlsIGtvbmZpZ3VyYXNqb25zZW5oZXRlbjogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBDb250ZW50J30gPSAnSGlzdG9yaWtrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICdPcHByZXR0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWm9vbSB2aWV3J30gPSAnWm9vbSB2aXNuaW5nJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdLb250ZWtzdHZhbGcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnS29uZmlndXJhc2pvbnNlbmhldGVyIHBlciBzaWRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnVXRmw7hyIHPDuGtldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdPZ3PDpSBzw7hrZSBpIHRpZGxpZ2VyZSB2ZXJzam9uZXI/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnS29uZmlndXJhc2pvbnNlbmhldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICdPcHBseXNuaW5nZXIgb20ga29uZmlndXJhc2pvbnNlbmhldGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ07DpXbDpnJlbmRlIHByb2R1a3Nqb25zc2V0dGluZ3N0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdTaXN0IGVuZHJldCBhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnVmlzIMOpbiB2ZXJzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnVmlzIGFsbGUgdmVyc2pvbmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICdIZW5kZWxzZXN0aWxzdGFuZCBmb3IgdmVyc2pvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJ1Byb2R1a3Nqb25zc2V0dGluZ3N0aWxzdGFuZCBmb3IgdmVyc2pvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnVmVyc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnVmVyc2pvbnNkZXRhbGplciBmb3IgZW5oZXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ0VnZW5za2FwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ0tvbmZpZ3VyYXNqb25zZW5oZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnSW5nZW4gcmVzdWx0YXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ1Byb2R1a3Nqb25zc2V0dGluZ3N0aWxzdGFuZCBmb3IgZGVubmUga29uZmlndXJhc2pvbnNlbmhldGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnSGVuZGVsc2VzdGlsc3RhbmRlbiBmb3IgZGVubmUga29uZmlndXJhc2pvbnNlbmhldGVuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ01lbGxvbSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICdNYWtzLiBhbnRhbGwgYXYgZXR0IGVsZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnVG9tbWUgZmVsdGVyIGluZGlrZXJlciBhdCBkZSBuw6V2w6ZyZW5kZSB2ZXJkaWVuZSBiZWhvbGRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnSG9wcGV0IG92ZXInOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ01vZGVsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdTZXJpZW51bW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdQcm9zZXNzb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnSW50ZXJubWlubmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnSGFyZGRpc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdLYXBhc2l0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnTmV0dHZlcmtza29ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCBmcmEgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSVAtYWRyZXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdHcmFmaWtrb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ0FubmV0IHV0c3R5cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICdVdGzDuHBzZGF0byBmb3IgZ2FyYW50aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdJbnN0YWxsYXNqb25zZGF0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZWZvbiAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICdUZWxlZm9uIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ05ldHR2ZXJrc2FkcmVzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdTdWJuZXR0bWFza2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ1J1dGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ0xpc2Vuc3R5cGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdMaXNlbnNuw7hra2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnQW50YWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ1V0Z8OlciBkYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTWVkaWEnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnTmV0dHZlcmsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICdQcm9ncmFtdmFyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnVXRnw6V0dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ1ZlZGxpa2Vob2xkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ1BsYW5sYWd0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ1JlcGFyYXNqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ1V0ZmFzZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnRXZhbHVlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnVGVzdC9LdmFsaXRldHNrb250cm9sbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICdCw6ZyYmFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdTdGFzam9uw6ZyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdUamVuZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbm5ldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnU2tqZXJtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICdTa3JpdmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N2aXRzaic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1dMQU4tYmFzZXN0YXNqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnU2lra2VyaGV0c2VuaGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdCYWNrdXAtZW5oZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdNdXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICdUYXN0YXR1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdLYW1lcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnUHJvc2pla3TDuHInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQS1rb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdVU0ItZW5oZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnRG9ra2luZ3N0YXNqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ1NrYW5uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdCeWduaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ0tvbnRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ0V0YXNqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnUm9tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ0FyYmVpZHNzdGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ0tvbnRha3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdJVC1mYXNpbGl0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTG9rYWxuZXR0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsZXV0c3R5cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnS2xpZW50LWFwcGxpa2Fzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNZWxsb212YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ1RqZW5lci1hcHBsaWthc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdLbGllbnQtT1MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnVGplbmVyLU9TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdBZG1pbmlzdHJhdG9ydmVya3TDuHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnQnJ1a2VydmVya3TDuHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdJbm5lYnlnZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ0Vua2VsdGxpc2Vucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ1BlciBCcnVrZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ1BlciBQcm9zZXNzb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ1BlciBUamVuZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdQZXIgTm9kZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ1ZvbHVtbGlzZW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0VudGVycHJpc2UtbGlzZW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnVXR2aWtsZXJsaXNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RlbW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnVGlkc2JlZ3JlbnNldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0dyYXRpcyBwcm9ncmFtdmFyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ8OFcGVuIGtpbGRla29kZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdVYmVncmVuc2V0JzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICdLb25maWd1cmFzam9uc2VuaGV0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBEYXRhYmFzZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJ0ZhcmdlIGZvciBwcm9kdWtzam9uc3NldHRpbmdzdGlsc3RhbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnRHVwbGlzw6lyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnT3ZlcnNpa3Qgb3ZlciBJVFNNIGtvbmZpZ3VyYXNqb25zZW5oZXRlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJ092ZXJzaWt0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyZSBmb3IgdGlsZ2FuZ3NncnVwcGUtZWtzZW1wZWwgaSBhdHRyaWJ1dHRlbmUgZm9yIGdlbmVyZWxsIGthdGFsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnU8O4ayBldHRlciBrb25maWd1cmFzam9uc2VuaGV0ZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICdrbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnZ2xvYmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5sX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdDb25maWd1cmF0aWUtaXRlbSBiZWhlZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdXaWp6aWcgZGVmaW5pdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICdEZWZpbml0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlJ30gPSAnV2lqemlnZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50c3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICdTdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdLbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdBY3R1ZWxlIGluY2lkZW50c3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdMYWFzdGUgd2lqemlnaW5nJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ0NvbmZpZ3VyYXRpZS1pdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ0ZpbHRlciBvcCBrbGFzc2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ1NlbGVjdGVlciBlZW4ga2xhc3NlIHVpdCBkZSBsaWpzdCBvbSBlZW4gbmlldXcgY29uZmlndXJhdGllLWl0ZW0gYWFuIHRlIG1ha2VuLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gYW5vdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENvbmZpZ3VyYXRpb24gSXRlbSBudW1iZXIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbmZpZyBpdGVtPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdEZSBuYWFtIHZhbiBkaXQgY29uZmlndXJhdGllLWl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJ0luaG91ZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnQWFuZ2VtYWFrdCBvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdEZXRhaWxvdmVyemljaHQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0NvbnRleHQgSW5zdGVsbGluZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJ0FhbnRhbCBjb25maWd1cmF0aWUtaXRlbXMgcGVyIHBhZ2luYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdPb2sgaW4gZWVyZGVyZSB2ZXJzaWVzIHpvZWtlbj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICdDb25maWd1cmF0aWUtaXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICdDb25maWd1cmF0aWUtaXRlbSBpbmZvcm1hdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0FjdHVlbGUgc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ0xhYXN0ZSB3aWp6aWdpbmcgZG9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnVG9vbiDDqcOpbiB2ZXJzaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICdUb29uIGFsbGUgdmVyc2llcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnVmVyc2llIEluY2lkZW50LXN0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICdWZXJzaWVudW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ0NvbmZpZ3VyYXRpZS1pdGVtIHZlcnNpZSBkZXRhaWxzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnQXR0cmlidXV0JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICdHZWVuIHJlc3VsdGFhdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdEZSBzdGF0dXMgdmFuIGRpdCBjb25maWd1cmF0aWUtaXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0RlIGluY2lkZW50c3RhdHVzIHZhbiBkaXQgY29uZmlndXJhdGllLWl0ZW0nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvSVRTTUNvbmZpZ0l0ZW1HZW5lcmljLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93biBjb25maWcgaXRlbXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbS9MYXlvdXREYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZXR3ZWVuJ30gPSAnVHVzc2VuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ01heGltYWxlIGhvZXZlZWxoZWlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnT3Zlcmdlc2xhZ2VuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdTZXJpZW51bW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdDUFUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnUkFNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ0hhcmRlIHNjaGlqZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ0NhcGFjaXRlaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnTmV0d2VyayBhZGFwdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIHZpYSBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUCBhZHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdWaWRlb2thYXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ092ZXJpZ2UgdWl0cnVzdGluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICdFaW5kZGF0dW0gZ2FyYW50aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnSW5zdGFsbGF0aWVkYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZWZvb24gMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsZWZvb24gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnTmV0d2Vya2FkcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnU3VibmV0IE1hc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ0dhdGV3YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnTGljZW50aWV0eXBlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnTGljZW50aWVzbGV1dGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnSG9ldmVlbGhlaWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnRXhwaXJhdGllZGF0dW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICdNZWRpYSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ1ZlcmxvcGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnSW4gb25kZXJob3VkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ0dlcGxhbm5lZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdJbiByZXBhcmF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ1VpdGdlZmFzZWVyZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdSZXZpZXcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1Rlc3QvUUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnTGFwdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdEZXNrdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdmVyaWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICdQcmludGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N3aXRjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSb3V0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICdXTEFOIEFjY2VzcyBQb2ludCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICdTZWN1cml0eSBkZXZpY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ0JhY2t1cGFwcGFyYWF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnTXVpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJ1RvZXRzZW5ib3JkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0NhbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICdCZWFtZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQSBrYWFydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVVNCIGFwcGFyYWF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ0RvY2tpbmcgc3RhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnU2Nhbm5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ0dlYm91dyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdLYW50b29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnRXRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ0thbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhY2snfSA9ICdSYWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ1dlcmtwbGVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ0FhbnNsdWl0aW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnU2VydmVycnVpbXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdDbGllbnR0b2VwYXNzaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ1NlcnZlcnRvZXBhc3NpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnQ2xpZW50IGJlc3R1cmluZ3NzeXN0ZWVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ1NlcnZlciBiZXN0dXJpbmdzc3lzdGVlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnQWRtaW4gVG9vbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICdVc2VyIFRvb2wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdFbWJlZGRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ1NpbmdsZSBMaWNlbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUGVyIGdlYnJ1aWtlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUGVyIENQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnUGVyIHNlcnZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ1BlciBub2RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAnVm9sdW1lIExpY2VudGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0VudGVycHJpc2VsaWNlbnRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ09udHdpa2tlbGFhcnNsaWNlbnRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAnRGVtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICdUaW1lIHJlc3RyaWN0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdGcmVld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ09wZW4gU291cmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ09uZ2VsaW1pdGVlcmQnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT0snOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJ0NvbmZpZ3VyYXRpZS1pdGVtcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnQWFubWFrZW4gZW4gYmVoZXJlbiB2YW4gZGVmaW5pdGllcyB2b29yIGNvbmZpZ3VyYXRpZS1pdGVtcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnRHVwbGljZXJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXJzIHZvb3IgZGUgdm9vcmJlZWxkIHBlcmltc3NpZWdyb2VwZW4gdmFuIGRlIGFsZ2VtZW5lIGNhdGFsb2cgYXR0cmlidXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnBsX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdaYXJ6xIVkemFuaWUgQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICdabWllxYQgZGVmaW5pY2rEmSBrbGFzeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBDbGFzcyd9ID0gJ0tsYXNhIENJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICdEZWZpbmljamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlJ30gPSAnWm1pYW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudERhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGFuIHpkYXJ6ZW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnU3RhbiB3ZHJvxbxlbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnS2xhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnVHlwIHN0YW51IHdkcm/FvGVuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0FrdHVhbG55IHN0YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnQWt0dWFsbnkgdHlwIHN0YW51JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ09zdGF0bmlvIHptaWVuaW9uZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdDSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdGaWx0ciBkbGEga2xhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICdaYXpuYWN6IGtsYXPEmSBuYSBsacWbY2llIGFieSB1dHdvcnp5xIcgbm93ZSBDSS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICdBa2NqYSBncnVwb3dhIG5hIENJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUnfSA9ICdTdGFuIHdkcm/FvGVuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUnfSA9ICdTdGFuIHpkYXJ6ZW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICdQb8WCxIVjeiB6IGlubnltJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ29uZmlndXJhdGlvbiBJdGVtIG51bWJlciEnfSA9ICdOaWVwcmF3aWTFgm93eSBudW1lciBDSSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG51bWJlciBvZiBhbm90aGVyIENvbmZpZ3VyYXRpb24gSXRlbSB0byBsaW5rIHdpdGguJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ05hendhIHRlZ28gQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJ05hendhIGplc3QganXFvCB1xbx5d2FuYSBwcnpleiBDSSBvIG5hc3TEmXB1asSFY3ljaCBudW1lcmFjaDogJXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICdaYXdhcnRvxZvEhyBoaXN0b3JpaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnVXR3b3J6b25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20gdmlldyd9ID0gJ1dpZG9rIHN6Y3plZ8OzxYJvd3knOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ1VzdGF3aWVuaWEga29udGVrc3R1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJ0xpY3piYSBDSSBuYSBzdHJvbmllJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnVXJ1Y2hvbSB3eXN6dWtpd2FuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnVXd6Z2zEmWRuacSHIHBvcHJ6ZWRuaWUgd2Vyc2plPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ0NJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjamUgbyBDSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdBa3R1YWxueSBzdGFuIHdkcm/FvGVuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnT3N0YXRuaW8gem1pZW5pb25lIHByemV6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdQb2thxbwgamVkbsSFIHdlcnNqxJkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnUG9rYcW8IHdzenlzdGtpZSB3ZXJzamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnU3RhbiB3ZHJvxbxlbmlhIHdlcnNqaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ1dlcnNqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnU3pjemVnw7PFgnkgd2Vyc2ppIENJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnV8WCYcWbY2l3b8WbxIcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnQnJhayBXeW5pa8OzdyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdTdGFuIHdkcm/FvGVuaWEgdGVnbyBDSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ1N0YW4gemRhcnplbmlhIHRlZ28gQ0knOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvSVRTTUNvbmZpZ0l0ZW1HZW5lcmljLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93biBjb25maWcgaXRlbXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbS9MYXlvdXREYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZXR3ZWVuJ30gPSAnUG9tacSZZHp5JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ01ha3N5bWFsbmEgbGljemJhIHd5c3TEhXBpZcWEIHBvamVkbnljemVnbyBlbGVtZXRudHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnUHVzdGUgcG9sYSB6bmFjemFqxIUsIMW8ZSB6YXRyenltYW5lIGLEmWTEhSBiaWXFvMSFY2Ugd2FydG/Fm2NpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdQb21pbmnEmXRlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICdOdW1lciBzZXJ5am55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ1Byb2Nlc29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JBTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdEeXNrIHR3YXJkeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ1BvamVtbm/Fm8SHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ0thcnRhIHNpZWNpb3dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0FkcmVzIElQIHogREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnQWRyZXMgSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnS2FydGEgZ3JhZmljem5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ1Bvem9zdGHFgmUgd3lwb3NhxbxlbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ0RhdGEgd3lnYcWbbmnEmWNpYSBnd2FyYW5jamknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnRGF0YSBpbnN0YWxhY2ppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICdUZWxlZm9uIDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ1RlbGVmb24gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnQWRyZXMgc2llY2lvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdNYXNrYSBzaWVjaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnQnJhbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnVHlwIGxpY2VuY2ppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnS2x1Y3ogbGljZW5jeWpueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ0lsb8WbxIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSB3eWdhxZtuacSZY2lhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTm/Fm25payc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ1d5Z2FzxYJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnVXRyenltYW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ1BpbG90YcW8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdQbGFub3dhbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnTmFwcmF3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnV3ljb2ZhbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnUHJ6ZWdsxIVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdUZXN0L1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ0xhcHRvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnRGVza3RvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnU2Vyd2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnSW5uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTW9uaXRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnRHJ1a2Fya2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3dpdGNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1J1dGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnQWNjZXNzIFBvaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ1VyesSFZHplbmllIHphYmV6cGllY3phasSFY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ1VyesSFZHplbmllIGRvIHR3b3J6ZW5pYSBrb3BpaSB6YXBhc293ZWonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdNeXN6a2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICdLbGF3aWF0dXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0thbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICdQcm9qZWt0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ0thcnRhIFBDTUNJQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVXJ6xIVkemVuaWUgVVNCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ1N0YWNqYSBkb2t1asSFY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ1NrYW5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ0J1ZHluZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnQml1cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdQacSZdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICdQb2vDs2onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ1JhY2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnTWllanNjZSBwcmFjeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICdQdW5rdCBzcHJ6ZWRhxbx5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnRHppYcWCIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcGxpa2FjamEga2xpZW5ja2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ01pZGRsZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnQXBsaWthY2phIHNlcndlcm93YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdTeXN0ZW0ga2xpZW5ja2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU3lzdGVtIHNlcndlcm93eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnTmFyesSZZHppZSBhZG1pbmlzdHJhdG9yYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICdOYXJ6xJlkemllIFXFvHl0a293bmlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ09zYWR6b255JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnUG9qZWR5xYRjemEgbGljZW5jamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdOYSBVxbx5dGtvd25pa2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ05hIHByb2Nlc29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdOYSBzZXJ3ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdOYSB1cnrEhWR6ZW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ1piaW9yY3phIGxpY2VuY2phJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0xpY2VuY2phIEVudGVycHJpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdMaWNlbmNqYSBkZXZlbG9wZXJza2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RlbW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnQ3phc293byBvZ3Jhbmljem9uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0ZyZWV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnT3BlbiBzb3VyY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnQmV6IGxpbWl0dSc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICdMaW1pdCBsaWN6YnkgQ0knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICdUd29yemVuaWUgaSB6YXJ6xIVkemFuaWUgZGVmaW5pY2phbWkgZWxlbWVudMOzdyBrb25maWd1cmFjamkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpa2F0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICdQcnplZ2zEhWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cnkgZGxhIHByenlrxYJhZG93eWNoIGdydXAgdXByYXduaWXFhCBhdHJ5YnV0w7N3IGthdGFsb2d1IGfFgsOzd25lZ28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdHZXJlbmNpYW1lbnRvIGRlIEl0ZW5zIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnTXVkYXIgZGVmaW5pw6fDo28gZGUgY2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIENsYXNzJ30gPSAnQ2xhc3NlIGRvIEl0ZW0gZGUgQ29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ0RlZmluacOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSd9ID0gJ0FsdGVyYXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZSBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZSBJbXBsYW50YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ1RpcG8gZGUgRXN0YWRvIGRlIEltcGxhbnRhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkbyBJbmNpZGVudGUgQXR1YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnRXN0YWRvIEF0dWFsIGRlIEluY2lkZW50ZSBwb3IgdGlwbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1hIG1vZGlmaWNhw6fDo28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnSXRlbSBkZSBDb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdGaWx0cm8gcGFyYSBDbGFzc2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ1NlbGVjaW9uZSB1bWEgY2xhc3NlIGEgcGFydGlyIGRhIGxpc3RhIHBhcmEgY3JpYXIgdW0gbm92byBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJ0HDp8OjbyBlbSBNYXNzYSBlbSBJQ3MgSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlJ30gPSAnRXN0YWRvIGRlIGltcGxhbnRhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUnfSA9ICdFc3RhZG8gZGUgaW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gYW5vdGhlcid9ID0gJ0Fzc29jaWFyIGEgb3V0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJ07Dum1lcm8gZGUgSXRlbSBkZSBDb25maWd1cmHDp8OjbyBpbnbDoWxpZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJ08gbsO6bWVybyBkZSBvdXRybyBJdGVtIGRlIENvbmZpZ3VyYcOnw6NvIHBhcmEgYXNzb2NpYXIuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnRGVzZWphIHJlYWxtZW50ZSBleGNsdWlyIGVzdGUgaXRlbSBkZSBjb25maWd1cmHDp8Ojbz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTyBub21lIGRlc3RlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJ05vbWUgasOhIGVtIHVzbyBwZWxvcyBJQ3MgY29tIG9zIHNlZ3VpbnRlcyBOw7ptZXJvKHMpOiAlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnSGlzdMOzcmljbyBkbyBJdGVtIGRlIENvbmZpZ3VyYcOnw6NvOiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICdDb250ZcO6ZG8gZG8gSGlzdMOzcmljbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnSG9yYSBkZSBjcmlhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWm9vbSB2aWV3J30gPSAnVmlzw6NvIGRlIGRldGFsaGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0NvbmZpZ3VyYcOnw7VlcyBkZSBDb250ZXh0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICdJdGVucyBkZSBjb25maWd1cmHDp8OjbyBwb3IgcMOhZ2luYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJ1VtYSB0YWJlbGEgZ2Vuw6lyaWNhIGRlIEl0ZW5zIGRlIENvbmZpZ3VyYcOnw6NvIEdTVEknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICdFeGVjdXRhciBQZXNxdWlzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdQcm9jdXJhciBuYXMgdmVyw7VlcyBhbnRlcmlvcmVzIHRhbWLDqW0/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnSXRlbSBkZSBjb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDo28gZG8gSXRlbSBkZSBDb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgSW1wbGFudGHDp8OjbyBBdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1hIG1vZGlmaWNhw6fDo28gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdWaXN1YWxpemFyIHVtYSB2ZXJzw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnVmlzdWFsaXphciB0b2RhcyBhcyB2ZXJzw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEluY2lkZW50ZSBkYSBWZXJzw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZSBJbXBsYW50YcOnw6NvIGRhIFZlcnPDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICdOw7ptZXJvIGRhIHZlcnPDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ0RldGFsaGVzIGRhIFZlcnPDo28gZG8gSXRlbSBkZSBDb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ1Byb3ByaWVkYWRlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnTmVuaHVtIGFjZXNzbyBwYXJhIGEgY2xhc3NlIMOpIGRhZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICdWaXPDo28gZ2VyYWw6IElUU00gQ29uZmlnSXRlbSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICdOZW5odW0gQ29uZmlnSXRlbUlEIMOpIGRhZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnVm9jw6ogcHJlY2lzYSBzZWxlY2lvbmFyIHBlbG8gbWVub3MgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICdWb2PDqiBuw6NvIHRlbSBhY2Vzc28gZGUgZXNjcml0YSBwYXJhIGVzdGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbzogJXMuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdJdGVtIGRlIGNvbmZpZ3VyYcOnw6NvICIlcyIgbsOjbyBlbmNvbnRyYWRvIG5hIGJhc2UgZGUgZGFkb3MhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnTsOjbyBmb2kgcG9zc8OtdmVsIGV4Y2x1aXIgbyBJRCBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnTmVuaHVtYSB2ZXJzw6NvIGVuY29udHJhZGEgcGFyYSBvIENvbmZpZ0l0ZW1JRCAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnTmVuaHVtIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3UgQ2xhc3NJRCDDqSBkYWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnTmVuaHVtIGFjZXNzbyDDqSBkYWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICdOZW5odW1hIGRlZmluacOnw6NvIHBhcmEgYSBjbGFzc2UgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJ07Do28gw6kgcG9zc8OtdmVsIGV4aWJpciBoaXN0w7NyaWNvLiBOZW5odW0gQ29uZmlnSXRlbUlEIMOpIGRhZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnTsOjbyDDqSBwb3Nzw612ZWwgZXhpYmlyIGhpc3TDs3JpY28uIE5lbmh1bSBkaXJlaXRvIGRlIGFjZXNzbyDDqSBkYWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnTm92byBJdGVtIGRlIENvbmZpZ3VyYcOnw6NvIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJ05vdmEgdmVyc8OjbyAoSUQgPSAlcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICdFc3RhZG8gZGUgaW1wbGVtZW50YcOnw6NvIGF0dWFsaXphZG8gKG5vdm89JXMgLCBhbnRpZ289JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ0VzdGFkbyBkZSBpbmNpZGVudGUgYXR1YWxpemFkbyAobm92bz0lcywgYW50aWdvPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJ0l0ZW0gZGUgQ29uZmlndXJhw6fDo28gKElEPSVzKSBleGNsdcOtZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICdWw61uY3VsbyBwYXJhICVzICh0aXBvPSVzKSBhZGljaW9uYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICdWw61uY3VsbyBwYXJhICVzICh0aXBvPSVzKSBkZWxldGFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnRGVmaW5pw6fDo28gZGUgSXRlbSBkZSBDb25maWd1cmHDp8OjbyAoSUQ9JXMpIGF0dWFsaXphZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICdOb21lIGF0dWFsaXphZG8gKG5vdm89JXMsIGFudGlnbz0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICdBdHJpYnV0byAlcyBhdHVhbGl6YWRvIGRlICIlcyIgcGFyYSAiJXMiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJ1ZlcnPDo28gJXMgZXhjbHXDrWRhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnTmVuaHVtIENvbmZpZ0l0ZW1JRCBvdSBWZXJzaW9uSUQgw6kgZGFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnTsOjbyBmb2kgcG9zc8OtdmVsIGV4aWJpciBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvLiBOZW5odW0gZGlyZWl0byBkZSBhY2Vzc28gw6kgZGFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdDb25maWdJdGVtSUQgJXMgbsOjbyBlbmNvbnRyYWRvIG5hIGJhc2UgZGUgZGFkb3MhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnVmVyc2lvbklEICVzIG7Do28gZW5jb250cmFkbyBuYSBiYXNlIGRlIGRhZG9zISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnSXRlbSBkZSBjb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnSW1wcmVzc28gcG9yICVzIGVtICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnQ2xhc3NJRCBpbnbDoWxpZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnTmVuaHVtIENsYXNzSUQgw6kgZGFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICdOZW5odW0gZGlyZWl0byBkZSBhY2Vzc28gcGFyYSBlc3RhIGNsYXNzZSDDqSBkYWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnTmVuaHVtIHJlc3VsdGFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICdSZXN1bHRhZG9zIGRhIHBlc3F1aXNhIGRlIEl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICdOw6NvIGZvaSBwb3Nzw612ZWwgZXhpYmlyIGl0ZW0uIE5lbmh1bSBkaXJlaXRvIGRlIGFjZXNzbyBwYXJhIENvbmZpZ0l0ZW0gw6kgZGFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTyBlc3RhZG8gZGUgaW1wbGFudGHDp8OjbyBkZXN0ZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTyBlc3RhZG8gZGUgaW5jaWRlbnRlIGRlc3RlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvSVRTTUNvbmZpZ0l0ZW1HZW5lcmljLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93biBjb25maWcgaXRlbXMnfSA9ICdFeGliaXIgaXRlbnMgZGUgY29uZmlndXJhw6fDo28nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbS9MYXlvdXREYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZXR3ZWVuJ30gPSAnRW50cmUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIHVtIGVsZW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ09zIGNhbXBvcyB2YXppb3MgaW5kaWNhbSBxdWUgb3MgdmFsb3JlcyBhdHVhaXMgc8OjbyBtYW50aWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnRGVzY29uc2lkZXJhZG9zJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnTsO6bWVybyBkZSBTw6lyaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnUHJvY2Vzc2Fkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnTWVtw7NyaWEgUkFNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ0Rpc2NvIFLDrWdpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdDYXBhY2lkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ0FkYXB0YWRvciBkZSBSZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0RIQ1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJ0VuZGVyZcOnbyBJUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICdBZGFwdGFkb3IgR3LDoWZpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnT3V0cm8gRXF1aXBhbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSBkZSBFeHBpcmHDp8OjbyBkYSBHYXJhbnRpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdEYXRhIEluc3RhbGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnVGVsZWZvbmUgMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnVGVsZWZvbmUgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICdFLU1haWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnRW5kZXJlw6dvIGRlIFJlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICdNw6FzY2FyYSBkZSBTdWJyZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdSb3RlYWRvciBQYWRyw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ1RpcG8gZGUgTGljZW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdDaGF2ZSBkZSBMaWNlbsOnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ1F1YW50aWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSBkZSBFeHBpcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ03DrWRpYSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnQ29tcHV0YWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJ0hhcmR3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICdSZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnU29mdHdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ0V4cGlyYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnTWFudXRlbsOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnUGlsb3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdQbGFuZWphZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnUmVwYXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdSZXRpcmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdSZXZpc8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnVGVzdGUgZGUgUXVhbGlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ05vdGVib29rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdEZXNrdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2aWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ091dHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICdNb25pdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICdJbXByZXNzb3JhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N3aXRjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdSb3RlYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1dMQU4gQWNjZXNzIFBvaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIGRlIFNlZ3VyYW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ0Rpc3Bvc2l0aXZvIGRlIEJhY2t1cCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJ01vdXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnVGVjbGFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdDw6JtZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ1Byb2pldG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnTW9kZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICdDYXJ0w6NvIFBDTUNJQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnRGlzcG9zaXRpdm8gVVNCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ0RvY2tpbmcgU3RhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnU2Nhbm5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ1ZlcnPDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnRXNjcml0w7NyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdBbmRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnU2FsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnUmFjayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICdMb2NhbCBkZSBUcmFiYWxobyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICdUb21hZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdEZXBhcnRhbWVudG8gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnUkVERSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGVjb211bmljYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcGxpY2HDp8OjbyBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICdNaWRkbGV3YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ0FwbGljYcOnw6NvIFNlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ1NPIENsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnU08gU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ0ZlcnJhbWVudGEgZGUgQWRtaW5pc3RyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0ZlcnJhbWVudGEgZG8gVXN1w6FyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdJbnRlZ3JhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdMaWNlbsOnYSDDmm5pY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdQb3IgVXN1w6FyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ1BvciBQcm9jZXNzYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnUG9yIFNlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUG9yIE7Dsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ0xpY2Vuw6dhIHBvciBWb2x1bWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnTGljZW7Dp2EgQ29ycG9yYXRpdmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdMaWNlbsOnYSBkZSBEZXNlbnZvbHZlZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEZW1vbnN0cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICdUZW1wbyBSZXN0cml0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0xpdnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnQ8OzZGlnbyBhYmVydG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnSWxpbWl0YWRhJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnSUMgYXRyaWJ1aWRvIMOgIGVtcHJlc2EgY2xpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJ0lDIGF0cmlidWlkbyBhbyB1c3XDoXJpbyBjbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICdDb25maWd1cmHDp8O1ZXMgZG8gQ01EQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnVmVyaWZpcXVlIHNlIG8gbm9tZSDDqSDDum5pY28gYXBlbmFzIGRlbnRybyBkYSBtZXNtYSBjbGFzc2UgZGUgSUMgKFwnY2xhc3NlKSBvdSBnbG9iYWxtZW50ZSAoXCdnbG9iYWxcJyksIG8gcXVlIHNpZ25pZmljYSBxdWUgY2FkYSBJQyBleGlzdGVudGUgw6kgbGV2YWRvIGVtIGNvbnRhIGFvIHByb2N1cmFyIHBvciBkdXBsaWNhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICdJdGVucyBkZSBDb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnQWRpY2lvbmFyIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnRWRpdGFyIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIGV2ZW50byBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIHF1ZSBwZXJtaXRlIHJlZ2lzdHJhciBvIGhpc3TDs3JpY28gZGEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICdIaXN0w7NyaXZvIGRvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJ0ltcHJlc3PDo28gZG8gaXRlbSBkZSBjb25maWd1cmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICdab29tIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICdDb25maWdJdGVtTnVtYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJ0xpbWl0ZSBkZSBJdGVtIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICdMaW1pdGUgZG8gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBwb3IgcMOhZ2luYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJ0NvbmZpZ3VyYcOnw6NvIGRvIEdlcmVuY2lhbWVudG8gZG8gQmFuY28gZGUgRGFkb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICdNw7NkdWxvIGRlIGHDp8OjbyBlbSBtYXNzYSBlbSBJdGVucyBkZSBDb25maWd1cmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUm90ZWFkb3IgZGUgcGVzcXVpc2EgZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBkYSBpbnRlcmZhY2UgZG8gYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnQ3JpYXIgZSBnZXJlbmNpYXIgYXMgZGVmaW5pw6fDtWVzIGRlIEl0ZW5zIGRlIENvbmZpZ3VyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnRGVmaW5hIEHDp8O1ZXMgb25kZSB1bSBib3TDo28gZGUgY29uZmlndXJhw6fDtWVzIGVzdMOhIGRpc3BvbsOtdmVsIG5vIHdpZGdldCBkZSBvYmpldG9zIHZpbmN1bGFkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlPSJjb21wbGV4IikuIE9ic2VydmUgcXVlIGVzc2FzIGHDp8O1ZXMgZGV2ZW0gdGVyIHJlZ2lzdHJhZG8gb3Mgc2VndWludGVzIGFycXVpdm9zIEpTIGUgQ1NTOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBlIENvcmUuQWdlbnQgLkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgYXMgcGVybWlzc8O1ZXMgcmVxdWVyaWRhcyBwYXJhIGNyaWFyIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gdXNhbmRvIGEgSW50ZXJmYWNlIEdlbsOpcmljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBhIHBlcm1pc3PDo28gbmVjZXNzw6FyaW8gcGFyYSByZW1vdmVyIEl0ZW5zIGRlIENvbmZpZ3VyYcOnw6NvIHVzYW5kbyBhIEludGVyZmFjZSBHZW7DqXJpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgYXMgcGVybWlzc8O1ZXMgcmVxdWVyaWRhcyBwYXJhIG9idGVyIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gdXNhbmRvIGEgSW50ZXJmYWNlIEdlbsOpcmljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBwZXJtaXNzw7VlcyByZXF1ZXJpZGFzIHBhcmEgbG9jYWxpemFyIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gdXNhbmRvIGEgSW50ZXJmYWNlIEdlbsOpcmljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBwZXJtaXNzw7VlcyByZXF1ZXJpZGFzIHBhcmEgYXR1YWxpemFyIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gdXNhbmRvIGEgSW50ZXJmYWNlIEdlbsOpcmljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnRGVmaW5lIHVtIG3Ds2R1bG8gZGUgdmlzw6NvIGdlcmFsIHBhcmEgbW9zdHJhciBhIHZpc8OjbyBwZXF1ZW5hIGRhIGxpc3RhIGRlIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnRGVmaW5pZSBleHByZXNzw7VlcyByZWd1bGFyZXMgaW5kaXZpZHVhbG1lbnRlIHBhcmEgY2FkYSBjbGFzc2UgZGUgSUMgcGFyYSB2ZXJpZmljYXIgbyBub21lIGRvIElDIGUgcGFyYSBleGliaXIgYXMgbWVuc2FnZW5zIGRlIGVycm8gY29ycmVzcG9uZGVudGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnRGVmaW5lIG8gc3Vib2JqZXRvIHBhZHLDo28gZGEgY2xhc3NlIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gbsO6bWVybyBkZSBsaW5oYXMgZG8gZWRpdG9yIGRlIGRlZmluacOnw6NvIGRvIElDIG5hIGludGVyZmFjZSBkZSBhZG1pbmlzdHJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJ0RlZmluZSBhIG9yZGVtIGRvcyBlc3RhZG9zIGRlIGluY2lkZW50ZSBkZSBhbHRvIChleDogY3LDrXRpY28pIHBhcmEgYmFpeG8gKGV4OiBmdW5jaW9uYWwpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgaW1wbGFudGHDp8OjbyBvbmRlIGNoYW1hZG9zIGFzc29jaWFkb3MgcG9kZW0gYWZldGFyIG8gZXN0YWRvcyBkZSB1bSBJQy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICdEZWZpbmUgbyBsaW1pdGUgZGUgcGVzcXVpc2EgcGFyYSBhIHRlbGEgQWdlbnRJVFNNQ29uZmlnSXRlbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICdEZWZpbmUgbyBsaW1pdGUgZGUgcGVzcXVpc2EgcGFyYSBhIHRlbGEgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnRGVmaW5lIGFzIGNvbHVuYXMgZXhpYmlkYXMgbmEgdmlzw6NvIGdlcmFsIGRlIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIG5hIHBvc2nDp8OjbyBkYSBjb2x1bmEuIE5vdGE6IEEgY29sdW5hIGNsYXNzZSBlc3TDoSBzZW1wcmUgZGlzcG9uw612ZWwgc2UgbyBmaWx0cm8gIlRvZG9zIiBlc3RpdmVyIHNlbGVjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyBtb3N0cmFkYXMgbmEgYnVzY2EgZGUgaXRlbSBkZSBjb25maWd1cmHDp8Ojby4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIGRlIElDcyBleGliaWRhcyBuYSB2aXPDo28gZ2VyYWwgZGUgaXRlbnMgZGUgY29uZmlndXJhw6fDo28sIGRlcGVuZGVuZG8gZGEgY2xhc3NlIGRvIElDLiBDYWRhIGVudHJhZGEgZGV2ZSBzZXIgcHJlZml4YWRhIGNvbSBvIG5vbWUgZGEgY2xhc3NlIGUgZHVwbG8gZG9pcyBwb250b3MgKGV4LiBDb21wdXRhZG9yOjopLiBIw6EgYWxndW5zIGF0cmlidXRvcyBkZSBJQyBxdWUgc8OjbyBjb211bnMgYSB0b2RvcyBvcyBJQ3MgKHRhbCBjb21vIGEgY2xhc3NlIENvbXB1dGFkb3I6IENvbXB1dGFkb3I6Ok5vbWUsIENvbXB1dGFkb3I6OkVzdGFkb0ltcGxBdHVhbCwgQ29tcHV0YWRvcjo6SG9yYUNyaWFjYW8pLiBQYXJhIGV4aWJpciBhdHJpYnV0b3MgZGUgSUMgaW5kaXZpZHVhbG1lbnRlIGNvbW8gZGVmaW5pZG8gbmEgZGVmaW5pw6fDo28gZG8gSUMsIG8gc2VndWludGUgZXNxdWVtYSBkZXZlIHNlciB1c2FkbyAoY2xhc3NlIENvbXB1dGFkb3IsIHBvciBleGVtcGxvKTogQ29tcHV0YWRvcjo6RGlzY29SaWdpZG86OjEsIENvbXB1dGFkb3I6OkRpc2NvUmlnaWRvOjoxOjpDYXBhY2lkYWRlOjoxLCBDb21wdXRhZG9yOjpEaXNjb1JpZ2lkbzo6MiwgQ29tcHV0YWRvcjo6RGlzY29SaWdpZG86OjI6OkNhcGFjaWRhZGU6OjEuIFNlIG7Do28gaMOhIGVudHJhZGEgcGFyYSBhIGNsYXNzZSBJQywgZW50w6NvIGFzIGNvbHVuYXMgcGFkcsOjbyBzw6NvIGV4aWJpZGFzIGNvbW8gZGVmaW5pZG8gbmEgY29uZmlndXJhw6fDo28gSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyBkZSBJQ3MgZXhpYmlkYXMgbmEgdGVsYSBkZSBwZXNxdWlzYSBkZSBpdGVucyBkZSBjb25maWd1cmHDp8OjbywgZGVwZW5kZW5kbyBkYSBjbGFzc2UgZG8gSUMuIENhZGEgZW50cmFkYSBkZXZlIHNlciBwcmVmaXhhZGEgY29tIG8gbm9tZSBkYSBjbGFzc2UgZSBkdXBsbyBkb2lzIHBvbnRvcyAoZXguIENvbXB1dGFkb3I6OikuIEjDoSBhbGd1bnMgYXRyaWJ1dG9zIGRlIElDIHF1ZSBzw6NvIGNvbXVucyBhIHRvZG9zIG9zIElDcyAodGFsIGNvbW8gYSBjbGFzc2UgQ29tcHV0YWRvcjogQ29tcHV0YWRvcjo6Tm9tZSwgQ29tcHV0YWRvcjo6RXN0YWRvSW1wbEF0dWFsLCBDb21wdXRhZG9yOjpIb3JhQ3JpYWNhbykuIFBhcmEgZXhpYmlyIGF0cmlidXRvcyBkZSBJQyBpbmRpdmlkdWFsbWVudGUgY29tbyBkZWZpbmlkbyBuYSBkZWZpbmnDp8OjbyBkbyBJQywgbyBzZWd1aW50ZSBlc3F1ZW1hIGRldmUgc2VyIHVzYWRvIChjbGFzc2UgQ29tcHV0YWRvciwgcG9yIGV4ZW1wbG8pOiBDb21wdXRhZG9yOjpEaXNjb1JpZ2lkbzo6MSwgQ29tcHV0YWRvcjo6RGlzY29SaWdpZG86OjE6OkNhcGFjaWRhZGU6OjEsIENvbXB1dGFkb3I6OkRpc2NvUmlnaWRvOjoyLCBDb21wdXRhZG9yOjpEaXNjb1JpZ2lkbzo6Mjo6Q2FwYWNpZGFkZTo6MS4gU2UgbsOjbyBow6EgZW50cmFkYSBwYXJhIGEgY2xhc3NlIElDLCBlbnTDo28gYXMgY29sdW5hcyBwYWRyw6NvIHPDo28gZXhpYmlkYXMgY29tbyBkZWZpbmlkbyBuYSBjb25maWd1cmHDp8OjbyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnRGVmaW5lIGFzIGNvbHVuYXMgZGUgSUNzIGV4aWJpZGFzIG5hIHRlbGEgZGUgdGFiZWxhIGNvbXBsZXhhIGRlIGxpbmtzLCBkZXBlbmRlbmRvIGRhIGNsYXNzZSBkbyBJQy4gQ2FkYSBlbnRyYWRhIGRldmUgc2VyIHByZWZpeGFkYSBjb20gbyBub21lIGRhIGNsYXNzZSBlIGR1cGxvIGRvaXMgcG9udG9zIChleC4gQ29tcHV0YWRvcjo6KS4gSMOhIGFsZ3VucyBhdHJpYnV0b3MgZGUgSUMgcXVlIHPDo28gY29tdW5zIGEgdG9kb3Mgb3MgSUNzICh0YWwgY29tbyBhIGNsYXNzZSBDb21wdXRhZG9yOiBDb21wdXRhZG9yOjpOb21lLCBDb21wdXRhZG9yOjpFc3RhZG9JbXBsQXR1YWwsIENvbXB1dGFkb3I6OkhvcmFDcmlhY2FvKS4gUGFyYSBleGliaXIgYXRyaWJ1dG9zIGRlIElDIGluZGl2aWR1YWxtZW50ZSBjb21vIGRlZmluaWRvIG5hIGRlZmluacOnw6NvIGRvIElDLCBvIHNlZ3VpbnRlIGVzcXVlbWEgZGV2ZSBzZXIgdXNhZG8gKGNsYXNzZSBDb21wdXRhZG9yLCBwb3IgZXhlbXBsbyk6IENvbXB1dGFkb3I6OkRpc2NvUmlnaWRvOjoxLCBDb21wdXRhZG9yOjpEaXNjb1JpZ2lkbzo6MTo6Q2FwYWNpZGFkZTo6MSwgQ29tcHV0YWRvcjo6RGlzY29SaWdpZG86OjIsIENvbXB1dGFkb3I6OkRpc2NvUmlnaWRvOjoyOjpDYXBhY2lkYWRlOjoxLiBTZSBuw6NvIGjDoSBlbnRyYWRhIHBhcmEgYSBjbGFzc2UgSUMsIGVudMOjbyBhcyBjb2x1bmFzIHBhZHLDo28gc8OjbyBleGliaWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnRGVmaW5lIHF1YWwgdGlwbyBkZSBhc3NvY2lhw6fDo28gKG5vbWVhZG8gYSBwYXJ0aXIgZGEgcGVyc3BlY3RpdmEgZG8gY2hhbWFkbykgcG9kZSBhZmV0YXIgbyBlc3RhZG8gZGUgdW0gSUMgYXNzb2NpYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWFsIHRpcG8gZGUgY2hhbWFkbyBwb2RlIGFmZXRhciBvIGVzdGFkbyBkZSB1bSBJQyBhc3NvY2lhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICdFeGNsdWlyIGl0ZW0gZGUgY29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJ0NvciBkbyBFc3RhZG8gZGUgSW1wbGFudGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaWNhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICdIYWJpbGl0YSBhIGZ1bsOnw6NvIGRlIGHDp8OjbyBlbSBtYXNzYSBlbSBpdGVucyBkZSBjb25maWd1cmHDp8OjbyBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlIHBhcmEgdHJhYmFsaGFyIGVtIG1haXMgZGUgdW0gSUMgcG9yIHZlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJ0hhYmlsaXRhIGEgZnVuw6fDo28gZGUgYcOnw6NvIGVtIG1hc3NhIGVtIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvIGFwZW5hcyBwYXJhIGdydXBvcyBsaXN0YWRvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJ0hhYmlsaXRhL2Rlc2FiaWxpdGEgYSBmdW5jaW9uYWxpZGFkZSBkZSB2ZXJpZmljYcOnw6NvIGRlIG5vbWVzIMO6bmljb3MgZGUgSUNzLiBBbnRlcyBkZSBoYWJpbGl0YXIgZXN0YSBvcMOnw6NvLCB2b2PDqiBkZXZlIHZlcmlmaWNhciBzZSBow6EgSUNzIGNvbSBub21lcyBkdXBsaWNhZG9zIGVtIHNldSBzaXN0ZW1hLiBWb2PDqiBwb2RlIGZhemVyIGlzc28gcG9yIG1laW8gZG8gc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgRXZlbnRvIHBhcmEgY29uZmlndXJhciBvIGVzdGFkbyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIHF1YW5kbyB1bSBjaGFtYWRvIGZvciBhc3NvY2lhZG8gYSB1bSBJQy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICdWaXPDo28gR2VyYWwgIGRvIEl0ZW0gZGUgQ29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBvIGdydXBvIHJlc3BvbnPDoXZlbCBwb3IgdW1hIGNsYXNzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICdNw7NkdWxvIHBhcmEgdmVyaWZpY2FyIG8gZ3J1cG8gcmVzcG9uc8OhdmVsIHBvciB1bSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJ03Ds2R1bG8gcGFyYSBnZXJhciBlc3RhdMOtc3RpY2FzIGRvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnTW9kdWxvIGRlIHJlZ2lzdHJvIGRlIG9iamV0byBwYXJhIG8gbcOzZHVsbyBkZSBpbXBvcnRhw6fDo28vZXhwb3J0YcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICdWaXPDo28gR2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgYSBjb3IgZG9zIGVzdGFkb3MgZGUgaW1wbGFudGHDp8OjbyBuYSB0ZWxhIGRlIHByZWZlcsOqbmNpYXMgZGEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQYXLDom1ldHJvcyBkZSBlc3RhZG8gZGUgaW1wbGFudGHDp8OjbyBuYXMgcHJlZmVyw6puY2lhcyBkZSBleGliacOnw6NvIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIGRvIGdydXBvcyBkZSBwZXJtaXNzw6NvIGRlIGV4ZW1wbG8gZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIGRhcyBww6FnaW5hcyAobmFzIHF1YWlzIG9zIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvIHPDo28gbW9zdHJhZG9zKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBhIHRlbGEgZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBJVFNNIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBhIHRlbGEgZGUgcGVzcXVpc2EgZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBJVFNNIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgYSB0ZWxhIGRlIGRldGFsaGVzIGRvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgYSB0ZWxhIGRlIGFkacOnw6NvIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNzw7VlcyBuZWNlc3PDoXJpYXMgcGFyYSB1c2FyIGEgdGVsYSBkZSBlZGnDp8OjbyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBhIHRlbGEgZGUgaGlzdMOzcmljbyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgYSB0ZWxhIGRlIGltcHJlc3PDo28gZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBJVFNNIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgYXBhZ2FyIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJ1Byb2N1cmFyIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICdTZWxlY2lvbmEgbyBtw7NkdWxvIGRlIGdlcmHDp8OjbyBkZSBuw7ptZXJvIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uICJBdXRvaW5jcmVtZW50byIgaW5jcmVtZW50YSBvIG7Dum1lcm8gZG8gaXRlbSBkZSBjb25maWd1cmHDp8OjbywgbyBTeXN0ZW1JRCwgbyBDb25maWdJdGVtQ2xhc3NJRCBlIG8gQ291bnRlciBzw6NvIHVzYWRvcy4gTyBmb3JtYXRvIMOpICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgcG9yIGV4ZW1wbG8sIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICdDb25maWd1cmFyIG8gZXN0YWRvIGRlIHVtIElDIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gdW0gQ2hhbWFkbyBmb3IgYXNzb2NpYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0NvbmZpZ3VyYSBvIGVzdGFkbyBkZSBpbXBsYW50YcOnw6NvIG5hIHRlbGEgZGUgYcOnw6NvIGVtIG1hc3NhIGRlIElDcyBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdDb25maWd1cmEgbyBlc3RhZG8gZGUgaW5jaWRlbnRlIG5hIHRlbGEgZGUgYcOnw6NvIGVtIG1hc3NhIGRlIElDcyBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcXVlIHBlcm1pdGUgYXNzb2NpYXIgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBjb20gdW0gb3V0cm8gb2JqZXRvIG5hIHZpc8OjbyBkZSBkZXRhbGhlcyBkbyBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGFjZXNzYXIgbyBoaXN0w7NyaWNvIGRlIHVtIElDIG5hIHZpc8OjbyBnZXJhbCBkZSBpdGVucyBkZSBjb25maWd1cmHDp8OjbyBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgYWNlc3NhciBvIGhpc3TDs3JpY28gZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBuYSB2aXPDo28gZGUgZGV0YWxoZXMgZG8gbWVzbW8gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgYXBhZ2FyIG8gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBuYSBWaXPDo28gRGV0YWxoYWRhIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGR1cGxpY2FyIHVtIElDIG5hIHZpc8OjbyBnZXJhbCBkZSBpdGVucyBkZSBjb25maWd1cmHDp8OjbyBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgZHVwbGljYXIgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBuYSB2aXPDo28gZGUgZGV0YWxoZXMgZG8gbWVzbW8gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBlZGl0YXIgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbyBuYSB2aXPDo28gZGUgZGV0YWxoZXMgZG8gbWVzbW8gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSByZXRvcm5hciDDoCB0ZWxhIGRlIHZpc8OjbyBkZSBkZXRhbGhlcyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGltcHJpbWlyIHVtIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gbmEgdmlzw6NvIGRlIGRldGFsaGVzIGRvIG1lc21vIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGRldGFsaGFyIHVtIElDIG5hIHZpc8OjbyBnZXJhbCBkZSBpdGVucyBkZSBjb25maWd1cmHDp8OjbyBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIG8gaGlzdMOzcmljbyBkbyBpdGVtIGNvbmZpZ3VyYcOnw6NvIChvcmRlbSByZXZlcnNhKSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnTyBpZGVudGlmaWNhZG9yIHBhcmEgdW0gaXRlbSBkZSBjb25maWd1cmHDp8OjbywgZXguIEl0ZW1Db25maWcjLCBNZXVJdGVtQ29uZmlnIy4gTyBwYWRyw6NvIMOpIEl0ZW1Db25maWcjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJ2NsYXNzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJ2dsb2JhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJ3DDs3MtcHJvZHV0aXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICdpbXByb2R1dGl2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAncHJvZHV0aXZvJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRlIEl0ZW5zIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnTXVkYXIgZGVmaW5pw6fDo28gZGUgY2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICdEZWZpbmnDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICdBbHRlcmFyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudERhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgSW1wbGVtZW50YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ1RpcG8gZGUgRXN0YWRvIGRlIEltcGxlbWVudGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRvIEluY2lkZW50ZSBBdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdFc3RhZG8gQXR1YWwgZGUgSW5jaWRlbnRlIHBvciB0aXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ8OabHRpbWEgbW9kaWZpY2HDp8Ojbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICdJdGVtIGRlIENvbmZpZ3VyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ0ZpbHRybyBwYXJhIENsYXNzZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnU2VsZWNpb25lIHVtYSBjbGFzc2UgYSBwYXJ0aXIgZGEgbGlzdGEgcGFyYSBjcmlhciB1bSBub3ZvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQnVsawogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDb25maWdJdGVtIEJ1bGsgQWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUnfSA9ICdFc3RhZG8gZGUgSW1wbGVtZW50YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIGRlIGluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnTyBub21lIGRlc3RlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJ0hpc3TDs3JpY28gZG8gY29udGXDumRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICdIb3JhIGRlIGNyaWHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdWaXN0YSBkZSBkZXRhbGhlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdDb25maWd1cmHDp8O1ZXMgZGUgQ29udGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnSXRlbnMgZGUgY29uZmlndXJhw6fDo28gcG9yIHDDoWdpbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICdFeGVjdXRhciBQZXNxdWlzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdQcm9jdXJhciBuYXMgdmVyc8O1ZXMgYW50ZXJpb3JlcyB0YW1iw6ltPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ0l0ZW0gZGUgY29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRvIEl0ZW0gZGUgQ29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEltcGxlbWVudGHDp8OjbyBBdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1hIG1vZGlmaWNhw6fDo28gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdWaXN1YWxpemFyIHVtYSB2ZXJzw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnVmlzdWFsaXphciB0b2RhcyBhcyB2ZXJzw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRhIFZlcnPDo28gZGUgSW5jaWRlbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICdOw7ptZXJvIGRhIHZlcnPDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ0RldGFsaGVzIGRhIFZlcnPDo28gZG8gSXRlbSBkZSBDb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ1Byb3ByaWVkYWRlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ0l0ZW0gZGUgY29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnU2VtIHJlc3VsdGFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdPIGVzdGFkbyBkZSBpbXBsZW1lbnRhw6fDo28gZG8gaXRlbSBkZSBjb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ08gZXN0YWRvIGRlIGluY2lkZW50ZSBkZXN0ZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ0VudHJlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ07Dum1lcm8gbcOheGltbyBkZSB1bSBlbGVtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICdPcyBjYW1wb3MgdmF6aW9zIGluZGljYW0gcXVlIG9zIHZhbG9yZXMgYXR1YWlzIHPDo28gbWFudGlkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ0Rlc2NvbnNpZGVyYWRvcyc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnTW9kZWxvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ07Dum1lcm8gZGUgU8OpcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ1Byb2Nlc3NhZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ01lbcOzcmlhIFJBTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdEaXNjbyBSw61naWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnQ2FwYWNpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdBZGFwdGFkb3IgZGUgUmVkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdFbmRlcmXDp28gSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnQWRhcHRhZG9yIEdyw6FmaWNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ091dHJvIEVxdWlwYW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ0RhdGEgZGUgRXhwaXJhw6fDo28gZGEgR2FyYW50aWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnRGF0YSBJbnN0YWxhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ1RlbGVmb25lIDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ1RlbGVmb25lIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ0VuZGVyZcOnbyBkZSBSZWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnTcOhc2NhcmEgZGUgcmVkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ1RpcG8gZGUgTGljZW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdDaGF2ZSBkZSBMaWNlbsOnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ1F1YW50QW50aWd1aWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnRGF0YSBkZSBFeHBpcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ01lZGlhJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnRXhwaXJhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICdNYW51dGVuw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ1BsYW5lYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ1JlcGFyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdSZXRpcmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdSZXZpc8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnVGVzdGUgZGUgUXVhbGlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ3BvcnTDoXRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnw4FyZWEgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2aWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ091dHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ0ltcHJlc3NvcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3dpdGNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1JvdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBkZSBTZWd1cmFuw6dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBkZSBCYWNrdXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdyYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnVGVjbGFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICdDw6JtYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ1Byb2pldG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUGxhY2EgUENNQ0lBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdEaXNwb3NpdGl2byBVU0InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICdTY2FubmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnUHLDqWRpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdHYWJpbmV0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ1Bpc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ1NhbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICdMb2NhbCBkZSBUcmFiYWxobyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICdUb21hZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdEZXBhcnRhbWVudG8gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnUkVERSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsZWNvbXVuaWNhw6fDtWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdBcGxpY2HDp8OjbyBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnU2Vydmlkb3IgQXBsaWNhY2lvbmFsICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdTTyBDbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ1NPIFNlcnZpZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdGZXJyYW1lbnRhIGRlIEFkbWluaXN0cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICdGZXJyYW1lbnRhIGRlIFV0aWxpemFkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdJbnRlZ3JhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdMaWNlbsOnYSDDmm5pY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdQb3IgVXRpbGl6YWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnUG9yIFByb2Nlc3NhZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQb3IgU2Vydmlkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdQb3IgUG9zdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdMaWNlbsOnYSBwb3IgVm9sdW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0xpY2Vuw6dhIENvcnBvcmF0aXZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnTGljZW7Dp2EgZGUgZGVzZW52b2x2aW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEZW1vbnN0cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICdUZW1wbyBSZXN0cml0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ0xpdnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnQ8OzZGlnbyBhYmVydG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnSWxpbWl0YWRhJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICdJdGVucyBkZSBDb25maWd1cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIGV2ZW50byBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIHF1ZSBwZXJtaXRlIHJlZ2lzdGFyIG8gaGlzdMOzcmljbyBkYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICdMaW1pdGUgZGUgSXRlbXMgZGUgQ29uZmlndXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUm91dGVyIGRlIHBlc3F1aXNhIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gZGEgaW50ZXJmYWNlIGRvIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJ0NyaWFyIGUgZ2VyaXIgYXMgZGVmaW5pw6fDtWVzIGRlIEl0ZW5zIGRlIENvbmZpZ3VyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnRGVmaW5pciBBY8Onw7VlcyBvbmRlIHVtIGJvdMOjbyBkZSBjb25maWd1cmHDp8O1ZXMgZXN0w6EgZGlzcG9uw612ZWwgbmEgd2lkZ2V0IHRoZSBvYmplY3RvcyBsaWdhZG9zIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuICBFc3RhcyBBY8Onw7VlcyBkZXZlbSBlc3RhciByZWdpc3RhZGFzIG5vcyBzZWd1aW50ZXMgZmljaGVpcm9zIEpTIGUgQ1NTOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnRGVmaW5lIHVtIG3Ds2R1bG8gZGUgdmlzdGEgZ2VyYWwgcGFyYSBtb3N0cmFyIGEgdmlzdGEgcGVxdWVuYSBkYSBsaXN0YSBkZSBpdGVucyBkZSBjb25maWd1cmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAnRGVmaW5lIG8gc3Vib2JqZXRvIHBvciBvbWlzc8OjbyBkYSBjbGFzc2UgXCdJVFNNQ29uZmlnSXRlbVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyBtb3N0cmFkYXMgbmEgYnVzY2EgZGUgaXRlbSBkZSBjb25maWd1cmHDp8Ojby4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpY2FyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBvIGdydXBvIHJlc3BvbnPDoXZlbCBwb3IgdW1hIGNsYXNzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICdNw7NkdWxvIHBhcmEgdmVyaWZpY2FyIG8gZ3J1cG8gcmVzcG9uc8OhdmVsIHBvciB1bSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJ03Ds2R1bG8gcGFyYSBnZXJhciBlc3RhdMOtc3RpY2FzIGRvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnTW9kdWxvIGRlIHJlZ2lzdG8gZGUgb2JqZXRvIHBhcmEgbyBtw7NkdWxvIGRlIGltcG9ydGHDp8Ojby9leHBvcnRhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQYXLDom1ldHJvcyBkZSBlc3RhZG8gZGUgaW1wbGVtZW50YcOnw6NvIG5hcyBwcmVmZXLDqm5jaWFzIGRlIHZpc3VhbGl6YcOnw6NvIGRhIGludGVyZmFjZSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIGRvIGdydXBvcyBkZSBwZXJtaXNzw6NvIGRlIGV4ZW1wbG8gZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIGRhcyBww6FnaW5hcyAobmFzIHF1YWlzIG9zIGl0ZW5zIGRlIGNvbmZpZ3VyYcOnw6NvIHPDo28gdmlzdWFsaXphZG9zKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBvIGZvcm11bMOhcmlvIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBvIGZvcm11bMOhcmlvIGRlIHBlc3F1aXNhIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgbyBmb3JtdWzDoXJpbyBkZSBkZXRhbGhlcyBkbyBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgbyBmb3JtdWzDoXJpbyBkZSBhZGnDp8OjbyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIElUU00gZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNzw7VlcyBuZWNlc3PDoXJpYXMgcGFyYSB1c2FyIG8gZm9ybXVsw6FyaW8gZGUgZWRpw6fDo28gZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBJVFNNIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzIHBhcmEgdXNhciBvIGZvcm11bMOhcmlvIGRlIGhpc3TDs3JpY28gZGUgaXRlbSBkZSBjb25maWd1cmHDp8OjbyBJVFNNIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Blcm1pc3PDtWVzIG5lY2Vzc8OhcmlhcyBwYXJhIHVzYXIgbyBmb3JtdWzDoXJpbyBkZSBpbXByZXNzw6NvIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gSVRTTSBuYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJ1NlbGVjaW9uYSBvIG3Ds2R1bG8gZGUgZ2VyYcOnw6NvIGRlIG7Dum1lcm8gZGUgaXRlbSBkZSBjb25maWd1cmHDp8Ojby4gIkF1dG9pbmNyZW1lbnRvIiBpbmNyZW1lbnRhIG8gbsO6bWVybyBkbyBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvLCBvIFN5c3RlbUlELCBvIENvbmZpZ0l0ZW1DbGFzc0lEIGUgbyBDb3VudGVyIHPDo28gdXRpbGl6YWRvcy4gTyBmb3JtYXRvIMOpICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgcG9yIGV4ZW1wbG8sIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBxdWUgcGVybWl0ZSBhc3NvY2lhciB1bSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIGEgb3V0cm8gb2JqZXRvIG5hIHZpc3RhIGRlIGRldGFsaGVzIGRvIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgYWNlZGVyIG8gaGlzdMOzcmljbyBkZSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIG5hIHZpc3RhIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGR1cGxpY2FyIHVtIGl0ZW0gZGUgY29uZmlndXJhw6fDo28gbmEgdmlzdGEgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGVkaXRhciB1bSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIG5hIHZpc3RhIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBpbXByaW1pciB1bSBpdGVtIGRlIGNvbmZpZ3VyYcOnw6NvIG5hIHZpc3RhIGRlIGRldGFsaGVzIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSBvIGhpc3TDs3JpY28gZG8gaXRlbSBjb25maWd1cmHDp8OjbyAob3JkZW0gaW52ZXJzYSkgbm8gaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJvX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdWZWRlcmUgZGUgZGV0YWxpdSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvSVRTTUNvbmZpZ0l0ZW1HZW5lcmljLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93biBjb25maWcgaXRlbXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbS9MYXlvdXREYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZXR3ZWVuJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ1PEg3JpdCc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbHRlbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ0Jpcm91JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJ1X0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQmtC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90YvQvNC4INC10LTQuNC90LjRhtCw0LzQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJ9CY0LfQvNC10L3QuNGC0Ywg0L7Qv9C40YHQsNC90LjQtSDQutC70LDRgdGB0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICfQmtC70LDRgdGBINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QvtC5INC10LTQuNC90LjRhtGLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICfQntC/0LjRgdCw0L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSd9ID0gJ9CY0LfQvNC10L3QtdC90LjQtSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnREYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAn0JrQu9Cw0YHRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICfQotC40L8g0KHQvtGB0YLQvtGP0L3QuNGPINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICfQotC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ9Ci0LjQvyDQotC10LrRg9GJ0LXQs9C+INGB0L7RgdGC0L7Rj9C90LjRjyDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn0JLRgNC10LzRjyDQv9C+0YHQu9C10LTQvdC10LPQviDQuNC30LzQtdC90LXQvdC40Y8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAn0J7RgdC90L7QstC90YvQtSDRgdGA0LXQtNGB0YLQstCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ9Ck0LjQu9GM0YLRgCDQtNC70Y8g0LrQu9Cw0YHRgdC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAn0JLRi9Cx0LXRgNC40YLQtSDQutC70LDRgdGBINC40Lcg0YHQv9C40YHQutCwINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINC90L7QstC+0Lkg0JrQlSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJ0lUU00gQ29uZmlnSXRlbSDQvNCw0YHRgdC+0LLQvtC1INC00LXQudGB0YLQstC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJ9Ch0L7RgdGC0L7Rj9C90LjQtSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJ9Ch0L7RgdGC0L7Rj9C90LjQtSDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byBhbm90aGVyJ30gPSAn0KHQstGP0LfQsNGC0Ywg0YEg0LTRgNGD0LPQuNC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ29uZmlndXJhdGlvbiBJdGVtIG51bWJlciEnfSA9ICfQndC10LLQtdGA0L3Ri9C5INC90L7QvNC10YAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC+0Lkg0LXQtNC40L3QuNGG0YshJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INC00YDRg9Cz0LjRhSDQmtCVINC00LvRjyDRgdCy0Y/Qt9GL0LLQsNC90LjRjy4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICfQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDRjdGC0YMg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdGD0Y4g0LXQtNC40L3QuNGG0YM/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ9CY0LzRjyDRjdGC0L7Qs9C+INGD0YfQtdGC0L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAn0JjQvNGPINGD0LbQtSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LTRgNGD0LPQvtC5INCa0JUg0YHQviDRgdC70LXQtNGD0Y7RidC40Lwg0L3QvtC80LXRgNC+0LwgKNCw0LzQuCk6ICVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICfQmNGB0YLQvtGA0LjRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90L7QuSDQtdC00LjQvdC40YbRizogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBDb250ZW50J30gPSAn0KHQvtC00LXRgNC20LjQvNC+0LUg0LjRgdGC0L7RgNC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJ9CS0YDQtdC80Y8g0YHQvtC30LTQsNC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICfQn9C+0LTRgNC+0LHQvdGL0Lkg0L/QvtC60LDQtyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn0J/QsNGA0LDQvNC10YLRgNGLINC60L7QvdGC0LXQutGB0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICfQmtC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90YvRhSDQtdC00LjQvdC40YYg0L3QsCDRgdGC0YDQsNC90LjRhtGDJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAn0J7QsdGJ0LDRjyDRgtCw0LHQu9C40YbQsCDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IElUU00nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICfQktGL0L/QvtC70L3QuNGC0Ywg0L/QvtC40YHQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICfQmNGB0LrQsNGC0Ywg0Lgg0LIg0L/RgNC10LTRi9C00YPRidC40YUg0LLQtdGA0YHQuNGP0YU/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAn0JrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdCw0Y8g0LXQtNC40L3QuNGG0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnINCY0L3RhNC+0YDQvNCw0YbQuNGPINC+INCa0L7QvdGELiDQtdC0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICfQotC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn0JDQstGC0L7RgCDQv9C+0YHQu9C10LTQvdC10LPQviDQuNC30LzQtdC90LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0L7QtNC90YMg0LLQtdGA0YHQuNGOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAn0J/QvtC60LDQt9Cw0YLRjCDQstGB0LUg0LLQtdGA0YHQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICfQodC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwINCy0LXRgNGB0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICfQodC+0YHRgtC+0Y/QvdC40LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0LLQtdGA0YHQuNC4INC+0LHRitC10LrRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAn0J3QvtC80LXRgCDQstC10YDRgdC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ9Cf0L7Qu9C90LDRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQviDQmtCVINCy0YvQsdGA0LDQvdC90L7QuSDQstC10YDRgdC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICfQodCy0L7QudGB0YLQstC+JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAn0J3QtdGCINC00L7RgdGC0YPQv9CwINC6INC60LvQsNGB0YHRgyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJ9Ce0LHQt9C+0YA6IElUU00gQ29uZmlnSXRlbSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICfQndC10YIgQ29uZmlnSXRlbUlEISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJ9CS0LDQvCDQvdGD0LbQvdCwINGF0L7RgtGPINCx0Ysg0L7QtNC90LAg0LLRi9Cx0YDQsNC90L3QsNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QsNGPINC10LTQuNC90LjRhtCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJ9CjINCy0LDRgSDQvdC10YIg0LTQvtGB0YLRg9C/0LAg0L3QsCDQt9Cw0L/QuNGB0Ywg0Y3RgtC+0Lkg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC+0Lkg0LXQtNC40L3QuNGG0Ys6ICVzLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn0JrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdCw0Y8g0LXQtNC40L3QuNGG0LAgIiVzIiDQvdC1INC90LDQudC00LXQvdCwINCyINCx0LDQt9C1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdGD0Y4g0LXQtNC40L3QuNGG0YMg0YEgSUQgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICfQndC1INC90LDQudC00LXQvdCwINCy0LXRgNGB0LjRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90L7QuSDQtdC00LjQvdC40YbRiyAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAn0J3QtSDQv9GA0LjRgdCy0L7QtdC9IENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQg0LjQu9C4IENsYXNzSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICfQndC10YIg0LTQvtGB0YLRg9C/0LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJ9Ca0LvQsNGB0YEgJXMg0L3QtSDQsdGL0Lsg0L7Qv9GA0LXQtNC10LvQtdC9ISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICfQndC10LLQvtC30LzQvtC20L3QviDQv9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOLCDQvdC10YIgQ29uZmlnSXRlbUlEISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJ9Cd0LXQstC+0LfQvNC+0LbQvdC+INC/0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7RgNC40Y4sINC90LXQtNC+0YHRgtCw0YLQvtGH0L3QviDQv9GA0LDQsiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJ9Cd0L7QstCw0Y8g0JrQlSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICfQndC+0LLQsNGPINCy0LXRgNGB0LjRjyAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINC+0LHQvdC+0LLQu9C10L3QviAo0L3QvtCy0L7QtT0lcywg0YHRgtCw0YDQvtC1PSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICfQodC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwINC+0LHQvdC+0LLQu9C10L3QviAo0L3QvtCy0L7QtT0lcywg0YHRgtCw0YDQvtC1PSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJ9Ca0JUgKElEPSVzKSDRg9C00LDQu9C10L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJ9Ch0LLRj9C30Ywg0YEgJXMgKNGC0LjQvz0lcykg0LTQvtCx0LDQstC70LXQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICfQodCy0Y/Qt9GMINGBICVzICjRgtC40L89JXMpINGD0LTQsNC70LXQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICfQntC/0LjRgdCw0L3QuNC1INCa0JUg0L7QsdC90L7QstC70LXQvdC+IChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICfQmNC80Y8g0L7QsdC90L7QstC70LXQvdC+ICjQvdC+0LLQvtC1PSVzLCDRgdGC0LDRgNC+0LU9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAn0JDRgtGA0LjQsdGD0YIgJXMg0L7QsdC90L7QstC70LXQvSDRgSAiJXMiINC00L4gIiVzIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICfQktC10YDRgdC40Y8gJXMg0YPQtNCw0LvQtdC90LAnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICfQndC1INC/0YDQuNGB0LLQvtC10L0gQ29uZmlnSXRlbUlEINC40LvQuCBWZXJzaW9uSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJ9Cd0LXQstC+0LfQvNC+0LbQvdC+INC+0YLQvtCx0YDQsNC30LjRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3Rg9GOINC10LTQuNC90LjRhtGDLCDQvdC10YIg0LTQvtGB0YLRg9C/0LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn0JrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdCw0Y8g0LXQtNC40L3QuNGG0LAgJXMg0L3QtSDQvdCw0LnQtNC10L3QsCDQsiDQsdCw0LfQtSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfQktC10YDRgdC40Y8gJXMg0L3QtSDQvdCw0LnQtNC10L3QsCDQsiDQsdCw0LfQtSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ9Ca0L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QsNGPINC10LTQuNC90LjRhtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICfQvdCw0L/QtdGH0LDRgtCw0L3QviAlcyDQsiAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJ9Cd0LXQstC10YDQvdGL0LkgQ2xhc3NJRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICdDbGFzc0lEINC90LUg0L/RgNC40YHQstC+0LXQvSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICfQndC10YIg0LTQvtGB0YLRg9C/0LAg0LTQu9GPINGN0YLQvtCz0L4g0LrQu9Cw0YHRgdCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAn0J3QtdGCINGA0LXQt9GD0LvRjNGC0LDRgtCwL9Cg0LXRiNC10L3QuNGPISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJ9Cg0LXQt9GD0LvRjNGC0LDRgtGLINC/0L7QuNGB0LrQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90YvRhSDQtdC00LjQvdC40YYnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJ9Cd0LXQstC+0LfQvNC+0LbQvdC+INC+0YLQvtCx0YDQsNC30LjRgtGMINGN0LvQtdC80LXQvdGCLCDQvdC10LTQvtGB0YLQsNGC0L7Rh9C90L4g0L/RgNCw0LIg0LTQu9GPINCa0JUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ9Ch0L7RgdGC0L7Rj9C90LjQtSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDRjdGC0L7QuSDQmtCVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCDQtNC70Y8g0Y3RgtC+0Lkg0JrQlSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICfQnNC10LbQtNGDJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQvtC00L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICfQn9GD0YHRgtGL0LUg0L/QvtC70Y8g0L/QvtC60LDQt9GL0LLQsNGO0YIsINGH0YLQviDRgtC10LrRg9GJ0LjQtSDQt9C90LDRh9C10L3QuNGPINGB0L7RhdGA0LDQvdGP0YLRgdGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICfQn9GA0L7Qv9GD0YnQtdC90L4nOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJ9Cc0L7QtNC10LvRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICfQodC10YDQuNC50L3Ri9C5INC90L7QvNC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAn0KbQn9CjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ9Ce0JfQoyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICfQltC10YHRgtC60LjQuSDQtNC40YHQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ9Ce0LHRitC10LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAn0KHQtdGC0LXQstC+0Lkg0LDQtNCw0L/RgtC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnSVAg0L/QviBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUCDQsNC00YDQtdGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ9CS0LjQtNC10L4g0LDQtNCw0L/RgtC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAn0JTRgNGD0LPQvtC1INC+0LHQvtGA0YPQtNC+0LLQsNC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICfQodGA0L7QuiDQuNGB0YLQtdGH0LXQvdC40Y8g0LPQsNGA0LDQvdGC0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICfQlNCw0YLQsCDRg9GB0YLQsNC90L7QstC60LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ9Ci0LXQu9C10YTQvtC9IDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ9Ci0LXQu9C10YTQvtC9IDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnRS1NYWlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ9Ch0LXRgtC10LLQvtC5INCw0LTRgNC10YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICfQnNCw0YHQutCwINC/0L7QtNGB0LXRgtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICfQqNC70Y7Qtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICfQotC40L8g0LvQuNGG0LXQvdC30LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ9Cb0LjRhtC10L3Qt9C40L7QvdC90YvQuSDQutC70Y7Rhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ9Ch0YDQvtC6INC70LjRhtC10L3Qt9C40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICfQnNGD0LvRjNGC0LjQvNC10LTQuNC50L3Ri9C1INGB0YDQtdC00YHRgtCy0LAnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJ9Ca0L7QvNC/0YzRjtGC0LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJ9CQ0L/Qv9Cw0YDQsNGC0L3QvtC1INC+0LHQtdGB0L/QtdGH0LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJ9Ch0LXRgtGMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAn0J/RgNC+0LPRgNCw0LzQvNC90L7QtSDQvtCx0LXRgdC/0LXRh9C10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICfQo9GB0YLQsNGA0LXQu9C+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAn0KLQtdGF0L3QuNGH0LXRgdC60L7QtSDQvtCx0YHQu9GD0LbQuNCy0LDQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICfQrdC60YHQv9C10YDQuNC80LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICfQl9Cw0L/Qu9Cw0L3QuNGA0L7QstCw0L3QvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ9Cg0LXQvNC+0L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAn0KHQv9C40YHQsNC90L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAn0K3QutGB0L/QtdGA0YLQuNC30LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ9Ci0LXRgdGC0LjRgNC+0LLQsNC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICfQndC+0YPRgtCx0YPQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAn0J3QsNGB0YLQvtC70YzQvdGL0Lkg0J/Qmic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAn0KHQtdGA0LLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn0JTRgNGD0LPQvtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICfQnNC+0L3QuNGC0L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAn0J/RgNC40L3RgtC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAn0JrQvtC80LzRg9GC0LDRgtC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAn0JzQsNGA0YjRgNGD0YLQuNC30LDRgtC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICdXTEFOINGC0L7Rh9C60LAg0LTQvtGB0YLRg9C/0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAn0KHQvNCw0YDRgi3QutCw0YDRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICfQo9GB0YLRgNC+0LnRgdGC0LLQviDQsdGN0LrQsNC/0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICfQnNGL0YjQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAn0JrQu9Cw0LLQuNCw0YLRg9GA0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAn0JrQsNC80LXRgNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ9Cf0YDQvtC10LrRgtC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICfQnNC+0LTQtdC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBINC60LDRgNGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQiDRg9GB0YLRgNC+0LnRgdGC0LLQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICfQlNC+0Lot0YHRgtCw0L3RhtC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ9Ch0LrQsNC90LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ9CX0LTQsNC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICfQntGE0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGbG9vcid9ID0gJ9Ct0YLQsNC2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICfQmtCw0LHQuNC90LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAn0KHRgtC+0LnQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ9Cg0LDQsdC+0YfQtdC1INC80LXRgdGC0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAn0KDQvtC30LXRgtC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICfQmNCiINC+0LHRitC10LrRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICfQodC10YLQtdCy0LDRjyDQutCw0YDRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ9Ca0LvQuNC10L3RgtGB0LrQvtC1INC/0YDQuNC70L7QttC10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICfQn9GA0L7QvNC10LbRg9GC0L7Rh9C90L7QtSDQn9CeJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ9Ch0LXRgNCy0LXRgNC90L7QtSDQv9GA0LjQu9C+0LbQtdC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICfQmtC70LjQtdC90YLRgdC60LDRjyDQntChJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ9Ch0LXRgNCy0LXRgNC90LDRjyDQntChJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICfQodC40YHRgtC10LzQvdGL0LUg0YPRgtC40LvQuNGC0YsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAn0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0YHQutC40LUg0YPRgtC40LvQuNGC0YsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICfQktGB0YLRgNC+0LXQvdC90YvQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ9Ce0LTQvdC+0LrRgNCw0YLQvdCw0Y8g0LvQuNGG0LXQvdC30LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ9Cd0LAg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICfQndCwINCm0J/Qoyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAn0J3QsCDRgdC10YDQstC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICfQndCwINC90L7QtNGDKNGD0LfQtdC7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ9Ca0L7RgNC/0L7RgNCw0YLQuNCy0L3QsNGPINC70LjRhtC10L3Qt9C40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAn0JrQvtGA0L/QvtGA0LDRgtC40LLQvdCw0Y8g0LvQuNGG0LXQvdC30LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ9Cb0LjRhtC10L3Qt9C40Y8g0LTQu9GPINGA0LDQt9GA0LDQsdC+0YLRh9C40LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAn0JTQtdC80L4t0LLQtdGA0YHQuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ9Ce0LPRgNCw0L3QuNGH0LXQvdC90LDRjyDQv9C+INCy0YDQtdC80LXQvdC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAn0JHQtdGB0L/Qu9Cw0YLQvdC+0LUg0J/Qnic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ9Cf0J4g0YEg0L7RgtC60YDRi9GC0YvQvCDQutC+0LTQvtC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJ9CR0LXQtyDQvtCz0YDQsNC90LjRh9C10L3QuNC5JzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJ9Cf0YDQvtCy0LXRgNC60LAg0YPQvdC40LrQsNC70YzQvdC+0YHRgtC4INCY0LzQtdC90Lgg0LLQvdGD0YLRgNC4INGC0LXQutGD0YnQtdCz0L4g0LrQu9Cw0YHRgdCwINCa0JUoXCdjbGFzc1wnKSDQuNC70Lgg0LPQu9C+0LHQsNC70YzQvdC+IChcJ2dsb2JhbFwnKSzRh9GC0L4g0L7Qt9C90LDRh9Cw0LXRgiwg0YfRgtC+INC70Y7QsdCw0Y8g0YHRg9GJ0LXRgdGC0LLRg9GO0YnQsNGPINCa0JUg0YPRh9C40YLRi9Cy0LDQtdGC0YHRjyDQv9GA0Lgg0L/QvtC40YHQutC1INC00YPQsdC70LjQutCw0YLQvtCyICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICfQmtC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90YvQtSDQtdC00LjQvdC40YbRiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAn0KHQvtC30LTQsNGC0Ywg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdGD0Y4g0LXQtNC40L3QuNGG0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICfQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90YPRjiDQtdC00LjQvdC40YbRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQ29uZmlnIGl0ZW0gKNCa0JUpIGV2ZW50IG1vZHVsZSDQstC10LTRg9GJ0LjQuSDQt9Cw0L/QuNGB0Ywg0LIg0LjRgdGC0L7RgNC40Y4g0LIg0LDQs9C10L3RgtGB0LrQvtC8INC40L3RgtC10YDRhNC10LnRgdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJ9CY0YHRgtC+0YDQuNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QvtC5INC10LTQuNC90LjRhtGLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJ9Cf0LXRh9Cw0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90L7QuSDQtdC00LjQvdC40YbRiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJ9Cf0YDQvtGB0LzQvtGC0YAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC+0Lkg0LXQtNC40L3QuNGG0YsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJ9Cd0L7QvNC10YAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC+0Lkg0LXQtNC40L3QuNGG0YsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnINCb0LjQvNC40YIg0JrQlSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAn0JvQuNC80LjRgiDQmtCVINC90LAg0YHRgtGA0LDQvdC40YbRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAn0JHQsNC30LAg0YPQv9GA0LDQstC70LXQvdC40Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC10LknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJ9Ce0LHRitC10LzQvdGL0Lkg0LzQvtC00YPQu9GMINCa0JUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JzQvtC00YPQu9GMINC/0L7QuNGB0LrQsCDQmtCVINCyINCw0LPQtdC90YLRgdC60L7QvCDQuNC90YLQtdGA0YTQtdC50YHQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAn0KHQvtC30LTQsNC90LjQtSDQuCDRg9C/0YDQsNCy0LvQtdC90LjQtSDQvtC/0LjRgdCw0L3QuNGP0LzQuCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90YvRhSDQtdC00LjQvdC40YYuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0JTQtdC50YHRgtCy0LjRjy9BY3Rpb25zINC60L7Qs9C00LAg0LrQvdC+0L/QutCwINC90LDRgdGC0YDQvtC50LrQuCDQtNC+0YHRgtGD0L/QvdCwINCyINGB0LLRj9C30LDQvdC90L7QvCDQstC40LTQttC10YLQtSAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiDQntCx0YDQsNGC0LjRgtC1INCy0L3QuNC80LDQvdC40LUsINGH0YLQviDRjdGC0Lgg0JTQtdC50YHRgtCy0LjRjy9BY3Rpb25zINC00L7Qu9C20L3RiyDQuNC80LXRgtGMINC30LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDQvdC90YvQtSBKUyDQuNC70LggQ1NTINGE0LDQudC70Ys6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzINC4IENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0YLRjCDRgtGA0LXQsdGD0LXQvNGL0LUg0L/RgNCw0LLQsCDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyBJVFNNINCa0JUg0YEg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvCBHZW5lcmljIEludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0YLRjCDRgtGA0LXQsdGD0LXQvNGL0LUg0L/RgNCw0LLQsCDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjyBJVFNNINCa0JUg0YEg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvCBHZW5lcmljIEludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgtGA0LXQsdGD0LXQvNGL0LUg0L/RgNCw0LLQsCDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNGPIElUU00g0JrQlSDRgSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC8IEdlbmVyaWMgSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGC0YDQtdCx0YPQtdC80YvQtSDQv9GA0LDQstCwINC00LvRjyDQv9C+0LjRgdC60LAgSVRTTSDQmtCVINGBINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LwgR2VuZXJpYyBJbnRlcmZhY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgtGA0LXQsdGD0LXQvNGL0LUg0L/RgNCw0LLQsCDQtNC70Y8g0L7QtNC90L7QstC70LXQvdC40Y8gSVRTTSDQmtCVINGBINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LwgR2VuZXJpYyBJbnRlcmZhY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC80L7QtNGD0LvRjCDQv9GA0L7RgdC80L7RgtGA0LAg0JrQlSDQsiDQutGA0LDRgtC60L7QvCDQstC40LTQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgNC10LPRg9C70Y/RgNC90YvQtSDQstGL0YDQsNC20LXQvdC40Y8g0LTQu9GPINC60LDQttC00L7Qs9C+INC+0YLQtNC10LvRjNC90L7Qs9C+INC60LvQsNGB0YHQsCDQtNC70Y8g0L/RgNC+0LLQtdGA0LrQuCDQuNC80LXQvSDQmtCVINC4INCy0YvQtNCw0YfQuCDRgdC+0L7QsdGJ0LXQvdC40Lkg0L7QsSDQvtGI0LjQsdC60LDRhS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRg9C80LDQu9GH0LjQstCw0LzRi9C5INC/0L7QtNC+0LHRitC10LrRgiDQtNC70Y8g0LrQu9Cw0YHRgdCwIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLRgNC+0Log0LTQu9GPINGA0LXQtNCw0LrRgtC+0YDQsCDQvtC/0LjRgdCw0L3QuNC5INCa0JUgKENJKSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNC00LzQuNC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQv9C+0YDRj9C00L7QuiDRgdC+0YHRgtC+0Y/QvdC40Lkg0LjQvdGG0LjQtNC10L3RgtC+0LIg0L7RgiDQstGL0YHQvtC60LjRhSAo0L3QsNC/0YDQuNC80LXRgCwg0LrRgNC40YLQuNGH0LXRgdC60LjRhSkg0LTQviDQvdC40LfQutC40YUgKNC90LDQv9GA0LjQvNC10YAsINGE0YPQvdC60YbQuNC+0L3QsNC70YzQvdGL0YUpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LUg0YHQvtGB0YLQvtGP0L3QuNGPINGA0LDQt9Cy0LXRgNGC0YvQstCw0L3QuNGPLCDQutC+0LPQtNCwINGB0LLRj9C30LDQvdC90YvQtSDQt9Cw0Y/QstC60Lgg0LzQvtCz0YPRgiDQstC70LjRj9GC0Ywg0L3QsCDRgdGC0LDRgtGD0YEg0JrQlS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0LvQuNC80LjRgiDQv9C+0LjRgdC60LAg0L7QsdGK0LXQutGC0L7QsiDQtNC70Y8g0Y3QutGA0LDQvdCwIEFnZW50SVRTTUNvbmZpZ0l0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0LvQuNC80LjRgiDQv9C+0LjRgdC60LAg0L7QsdGK0LXQutGC0L7QsiDQtNC70Y8g0Y3QutGA0LDQvdCwIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0L/QuNGB0L7QuiDQv9C+0LrQsNC30YvQstCw0LXQvNGL0YUg0YHRgtC+0LvQsdGG0L7QsiDQsiDQvtCx0LfQvtGA0LUg0JrQlS4g0K3RgtC+0YIg0L/QsNGA0LDQvNC10YLRgCDQvdC1INCy0LvQuNGP0LXRgiDQvdCwINC40YUg0L/QvtGA0Y/QtNC+0LouINCf0L7QvNC90LjRgtC1OiDQodGC0L7Qu9Cx0LXRhiDQmtC70LDRgdGBINC00L7RgdGC0YPQv9C10L0g0YLQvtC70YzQutC+INC/0YDQuCDRg9GB0LvQvtCy0LjQuCDQstGL0LHQvtGA0LAg0LIg0YTQuNC70YzRgtGA0LUgItCS0YHQtSIoQWxsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHQv9C40YHQvtC6INC/0L7QutCw0LfRi9Cy0LDQtdC80YvRhSDRgdGC0L7Qu9Cx0YbQvtCyINCyINGA0LXQt9GD0LvRjNGC0LDRgtCw0YUg0L/QvtC40YHQutCwINCa0JUuINCt0YLQvtGCINC/0LDRgNCw0LzQtdGC0YAg0L3QtSDQstC70LjRj9C10YIg0L3QsCDQv9C+0YDRj9C00L7QuiDQuNGFINC+0YLQvtCx0YDQsNC20LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC/0LjRgdC+0Log0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINGB0YLQvtC70LHRhtC+0LIg0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSDRgdC/0LjRgdC60L7QsiDQmtCVINCyINC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiDQutC70LDRgdGB0LAuINCa0LDQttC00L7QtSDQuNC80Y8g0LDRgtGA0LjQsdGD0YLQsCDQtNC+0LvQttC90L4g0LjQvNC10YLRjCDQsiDQutCw0YfQtdGB0YLQstC1INC/0YDQtdGE0LjQutGB0LAgLSDQuNC80Y8g0LrQu9Cw0YHRgdCwINC4INC00LLQsCDQtNCy0L7QtdGC0L7Rh9C40Y8gKGkuZS4gQ29tcHV0ZXI6OikuINCV0YHRgtGMINGA0Y/QtCDQsNGC0YDQuNCx0YPRgtC+0LIsINC+0LHRidC40YUg0LTQu9GPINCy0YHQtdGFINC60LvQsNGB0YHQvtCyICjQvdCw0L/RgNC40LzQtdGALCDQtNC70Y8g0LrQu9Cw0YHRgdCwIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiDQlNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQuNC90LTQuNCy0LjQtNGD0LDQu9GM0L3Ri9GFINCw0YLRgNC40LHRg9GC0L7Qsiwg0YHQv9C10YbQuNGE0LjRh9C90YvRhSDQtNC70Y8g0LrQvtC90LrRgNC10YLQvdC+0LPQviDQutC70LDRgdGB0LAg0LjQtyDQvtC/0LjRgdCw0L3QuNGPINCa0JUgKENJLURlZmluaXRpb24pLCDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0YHQu9C10LTRg9GO0YnQuNC5INGB0LjQvdGC0LDQutGB0LjRgSAo0L3QsNC/0YDQuNC80LXRgCwg0LTQu9GPINC60LvQsNGB0YHQsCBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiDQldGB0LvQuCDQvdC10YIg0LDRgtGA0LjQsdGD0YLQvtCyINC00LvRjyDQutC+0L3QutGA0LXRgtC90L7Qs9C+INC60LvQsNGB0YHQsCwg0L7RgtC+0LHRgNCw0LbQsNGO0YLRgdGPINGB0YLQvtC70LHRhtGLINC30LDQtNCw0L3QvdGL0LUg0L/QsNGA0LDQvNC10YLRgNC+0LwgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHQv9C40YHQvtC6INC+0YLQvtCx0YDQsNC20LDQtdC80YvRhSDRgdGC0L7Qu9Cx0YbQvtCyINCyINGA0LXQt9GD0LvRjNGC0LDRgtCw0YUg0L/QvtC40YHQutCwINCa0JUg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINCy0YvQsdGA0LDQvdC90L7Qs9C+INC60LvQsNGB0YHQsC4g0JrQsNC20LTQvtC1INC40LzRjyDQsNGC0YDQuNCx0YPRgtCwINC00L7Qu9C20L3QviDQuNC80LXRgtGMINCyINC60LDRh9C10YHRgtCy0LUg0L/RgNC10YTQuNC60YHQsCAtINC40LzRjyDQutC70LDRgdGB0LAg0Lgg0LTQstCwINC00LLQvtC10YLQvtGH0LjRjyAoaS5lLiBDb21wdXRlcjo6KS4g0JXRgdGC0Ywg0YDRj9C0INCw0YLRgNC40LHRg9GC0L7Qsiwg0L7QsdGJ0LjRhSDQtNC70Y8g0LLRgdC10YUg0LrQu9Cw0YHRgdC+0LIgKNC90LDQv9GA0LjQvNC10YAsINC00LvRjyDQutC70LDRgdGB0LAgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuINCU0LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINC40L3QtNC40LLQuNC00YPQsNC70YzQvdGL0YUg0LDRgtGA0LjQsdGD0YLQvtCyLCDRgdC/0LXRhtC40YTQuNGH0L3Ri9GFINC00LvRjyDQutC+0L3QutGA0LXRgtC90L7Qs9C+INC60LvQsNGB0YHQsCDQuNC3INC+0L/QuNGB0LDQvdC40Y8g0JrQlSAoQ0ktRGVmaW5pdGlvbiksINC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDRgdC70LXQtNGD0Y7RidC40Lkg0YHQuNC90YLQsNC60YHQuNGBICjQvdCw0L/RgNC40LzQtdGALCDQtNC70Y8g0LrQu9Cw0YHRgdCwIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuINCV0YHQu9C4INC90LXRgiDQsNGC0YDQuNCx0YPRgtC+0LIg0LTQu9GPINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0LrQu9Cw0YHRgdCwLCDQvtGC0L7QsdGA0LDQttCw0Y7RgtGB0Y8g0YHRgtC+0LvQsdGG0Ysg0LfQsNC00LDQvdC90YvQtSDQv9Cw0YDQsNC80LXRgtGA0L7QvCBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC/0LXRgNC10YfQtdC90Ywg0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINGB0YLQvtC70LHRhtC+0LIg0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINCa0JUg0LIg0YLQsNCx0LvQuNGG0LUg0L/RgNC4INGB0L7Qt9C00LDQvdC40Lgg0YHQstGP0LfQuCwg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINC60LvQsNGB0YHQsC4g0JrQsNC20LTQvtC1INC40LzRjyDQsNGC0YDQuNCx0YPRgtCwINC00L7Qu9C20L3QviDQuNC80LXRgtGMINCyINC60LDRh9C10YHRgtCy0LUg0L/RgNC10YTQuNC60YHQsCAtINC40LzRjyDQutC70LDRgdGB0LAg0Lgg0LTQstCwINC00LLQvtC10YLQvtGH0LjRjyAoaS5lLiBDb21wdXRlcjo6KS4g0JXRgdGC0Ywg0YDRj9C0INCw0YLRgNC40LHRg9GC0L7Qsiwg0L7QsdGJ0LjRhSDQtNC70Y8g0LLRgdC10YUg0LrQu9Cw0YHRgdC+0LIgKNC90LDQv9GA0LjQvNC10YAsINC00LvRjyDQutC70LDRgdGB0LAgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuINCU0LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINC40L3QtNC40LLQuNC00YPQsNC70YzQvdGL0YUg0LDRgtGA0LjQsdGD0YLQvtCyLCDRgdC/0LXRhtC40YTQuNGH0L3Ri9GFINC00LvRjyDQutC+0L3QutGA0LXRgtC90L7Qs9C+INC60LvQsNGB0YHQsCDQuNC3INC+0L/QuNGB0LDQvdC40Y8g0JrQlSAoQ0ktRGVmaW5pdGlvbiksINC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDRgdC70LXQtNGD0Y7RidC40Lkg0YHQuNC90YLQsNC60YHQuNGBICjQvdCw0L/RgNC40LzQtdGALCDQtNC70Y8g0LrQu9Cw0YHRgdCwIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuINCV0YHQu9C4INC90LXRgiDQsNGC0YDQuNCx0YPRgtC+0LIg0LTQu9GPINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0LrQu9Cw0YHRgdCwLCDQvtGC0L7QsdGA0LDQttCw0Y7RgtGB0Y8g0YHRgtC+0LvQsdGG0Ysg0LfQsNC00LDQvdC90YvQtSDQv9Cw0YDQsNC80LXRgtGA0L7QvCBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINC60LDQutC+0Lkg0YLQuNC/INGB0LLRj9C30LggKNC90LDQt9Cy0LDQvdC90YvQuSDRgSDRgtC+0YfQutC4INC30YDQtdC90LjRjyDQt9Cw0Y/QstC60LgpINC80L7QttC10YIg0L/QvtCy0LvQuNGP0YLRjCDQvdCwINGB0YLQsNGC0YPRgSDRgdCy0Y/Qt9Cw0L3QvdC+0Lkg0JrQlS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0LrQsNC60L7QuSDRgtC40L8g0LfQsNGP0LLQutC4INC80L7QttC10YIg0L/QvtCy0LvQuNGP0YLRjCDQvdCwINGB0YLQsNGC0YPRgSDRgdCy0Y/Qt9Cw0L3QvdC+0Lkg0JrQlS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ9Cj0LTQsNC70LjRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3Rg9GOINC10LTQuNC90LjRhtGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICfQptCy0LXRgiDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAn0KDQtdC30LXRgNCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJ9CS0LrQu9GO0YfQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQvNCw0YHRgdC+0LLRi9GFINC00LXQudGB0YLQstC40Lkg0YEg0JrQlSDQtNC70Y8g0LjQvdGC0LXRgNGE0LXQudGB0LAg0LDQs9C10L3RgtCwINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0L3QtdGB0LrQvtC70YzQutC40LzQuCDQmtCVINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJ9CS0LrQu9GO0YfQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQvNCw0YHRgdC+0LLRi9GFINC00LXQudGB0YLQstC40Lkg0YEg0JrQlSDRgtC+0LvRjNC60L4g0LTQu9GPINC/0LXRgNC10YfQuNGB0LvQtdC90L3Ri9GFINCz0YDRg9C/0L8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICfQktC60LvRjtGH0LDQtdGCL9Cy0YvQutC70Y7Rh9Cw0LXRgiDQv9GA0L7QstC10YDQutGDINGD0L3QuNC60LDQu9GM0L3QvtGB0YLQuCDQuNC80LXQvSDQmtCVLiDQlNC+INCy0LrQu9GO0YfQtdC90LjRjyDRjdGC0L7Qs9C+INC/0LDRgNCw0LzQtdGC0YDQsCwg0L/RgNC+0LLQtdGA0YzRgtC1INCy0LDRiNGDINCR0JQg0L3QsCDQvdCw0LvQuNGH0LjQtSDQtNGD0LHQu9C40LrQsNGC0L7QsiDQuNC80LXQvSDQmtCVLiDQktGLINC80L7QttC10YLQtSDRgdC00LXQu9Cw0YLRjCDRjdGC0L4g0YEg0L/QvtC80L7RidGM0Y4g0YHQutGA0LjQv9GC0LAgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAn0JzQvtC00YPQu9GMINGD0YHRgtCw0L3QvtCy0LrQuCDRgdGC0LDRgtGD0YHQsCDQmtCVINC00LvRjyDRgdCy0Y/Qt9Cw0L3QvdC+0Lkg0YEg0L3QtdC5INC30LDRj9Cy0LrQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICfQntCx0LfQvtGAINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3Ri9GFINC10LTQuNC90LjRhiBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJ9Cc0L7QtNGD0LvRjCDQtNC70Y8g0L/RgNC+0LLQtdGA0LrQuCDQs9GA0YPQv9C/0Ysg0L7RgtCy0LXRgtGB0YLQstC10L3QvdC+0Lkg0LfQsCDQutC70LDRgdGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAn0JzQvtC00YPQu9GMINC00LvRjyDQv9GA0L7QstC10YDQutC4INCz0YDRg9C/0L/RiyDQvtGC0LLQtdGC0YHRgtCy0LXQvdC90L7QuSDQt9CwINCa0JUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICfQnNC+0LTRg9C70Ywg0YTQvtGA0LzQuNGA0L7QstCw0L3QuNGPINGB0YLQsNGC0LjRgdGC0LjQutC4INC/0L4g0JrQlS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0LzQvtC00YPQu9GPIEltcG9ydC9FeHBvcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJ9Ce0LHQt9C+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRhtCy0LXRgtC+0LIg0L7QsdC+0LfQvdCw0YfQsNGO0YnQuNGFINGB0L7RgdGC0L7Rj9C90LjRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQmtCVINCyINC90LDRgdGC0YDQvtC50LrQsNGFINC+0LHQt9C+0YDQvtCyINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Ysg0LTQu9GPINGB0L7RgdGC0L7Rj9C90LjQuSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQmtCVINCyINC90LDRgdGC0YDQvtC50LrQsNGFINC+0LHQt9C+0YDQvtCyINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDQv9GA0LjQvNC10YDQvdGL0YUg0LPRgNGD0L/Qv9C+0LLRi9GFINC/0YDQsNCyINC00LvRjyDQsNGC0YDQuNCx0YPRgtC+0LIg0J7QsdGJ0LXQs9C+INC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINGB0YLRgNCw0L3QuNGGICjQvdCwINC60L7RgtC+0YDRi9GFINC+0YLQvtCx0YDQsNC20LDRjtGC0YHRjyDQmtCVKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQotGA0LXQsdGD0LXQvNGL0LUg0L/RgNCw0LLQsCDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0L7QsdC30L7RgNCwINCa0JUg0LIgQ01EQiDQsNCz0LXQvdGC0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ci0YDQtdCx0YPQtdC80YvQtSDQv9GA0LDQstCwINC00LvRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQv9C+0LjRgdC60LAg0LIgQ01EQiDQsNCz0LXQvdGC0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQotGA0LXQsdGD0LXQvNGL0LUg0L/RgNCw0LLQsCDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0L/QvtC70L3QvtCz0L4g0L/RgNC+0YHQvNC+0YLRgNCwINCa0JUgKHpvb20gdmlldykg0LIgQ01EQiDQsNCz0LXQvdGC0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ci0YDQtdCx0YPQtdC80YvQtSDQv9GA0LDQstCwINC00LvRjyDQtNC+0LHQsNCy0LvQtdC90LjRjyDQmtCVINCyIENNREIg0LDQs9C10L3RgtC+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KLRgNC10LHRg9C10LzRi9C1INC/0YDQsNCy0LAg0LTQu9GPINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YHQvtC00LXRgNC20LjQvNC+0LPQviDQmtCVINCyIENNREIg0LDQs9C10L3RgtC+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KLRgNC10LHRg9C10LzRi9C1INC/0YDQsNCy0LAg0LTQu9GPINC/0YDQvtGB0LzQvtGC0YDQsCDQuNGB0YLQvtGA0LjQuCDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INCa0JUg0LIgQ01EQiDQsNCz0LXQvdGC0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KLRgNC10LHRg9C10LzRi9C1INC/0YDQsNCy0LAg0LTQu9GPINC/0LXRh9Cw0YLQuCDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQuiDQmtCVINCyIENNREIg0LDQs9C10L3RgtC+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJ9Cd0LXQvtCx0YXQvtC00LjQvNGLINC/0YDQsNCy0LAg0LTQu9GPINGD0LTQsNC70LXQvdC40Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdGL0YUg0LXQtNC40L3QuNGGLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJ9Cf0L7QuNGB0Log0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdGL0YUg0LXQtNC40L3QuNGGLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICfQktGL0LHQvtGAINC80L7QtNGD0LvRjyDQs9C10L3QtdGA0LDRhtC40Lgg0L3QvtC80LXRgNCwINCa0JUuICJBdXRvSW5jcmVtZW50IiDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L4g0YPQstC10LvQuNGH0LjQstCw0LXRgiDQvdC+0LzQtdGAINC90LAgMS7QlNC70Y8g0YTQvtGA0LzQuNGA0L7QstCw0L3QuNGPINC90L7QvNC10YDQsCDQuNGB0L/QvtC70YzQt9GD0Y7RgtGB0Y8gU3lzdGVtSUQsIENvbmZpZ0l0ZW1DbGFzc0lEINC4INGB0YfQtdGC0YfQuNC6LiDQpNC+0YDQvNCw0YIgLSAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsINGCLtC1LiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAn0KPRgdGC0LDQvdC+0LLQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCDQmtCVINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4LCDQutC+0LPQtNCwINC30LDRj9Cy0LrQsCDRgdCy0Y/Qt9Cw0L3QsCDRgSDQmtCVLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC+0YHRgtC+0Y/QvdC40LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0L3QsCDRjdC60YDQsNC90LUg0LzQsNGB0YHQvtCy0YvRhSDQtNC10LnRgdGC0LLQuNC5INGBINCa0JUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCDQvdCwINGN0LrRgNCw0L3QtSDQvNCw0YHRgdC+0LLRi9GFINC00LXQudGB0YLQstC40Lkg0YEg0JrQlSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtC60LDQt9GL0LLQsNC10YIg0L/Rg9C90LrRgiDQvNC10L3RjiDQodCy0Y/Qt9Cw0YLRjCAoTGluaykg0LTQu9GPINC+0YDQs9Cw0L3QuNC30LDRhtC40Lgg0YHQstGP0LfQuCDQmtCVINGBINC00YDRg9Cz0LjQvCDQvtCx0YrQtdC60YLQvtC8INC90LAg0Y3QutGA0LDQvdC1INC/0L7Qu9C90L7Qs9C+ICh6b29tIHZpZXcpINC/0YDQvtGB0LzQvtGC0YDQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7QutCw0LfRi9Cy0LDQtdGCINC/0YPQvdC60YIg0LzQtdC90Y4g0LTQu9GPINC00L7RgdGC0YPQv9CwINC6INC40YHRgtC+0YDQuNC4INCa0JUg0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSDQmtCVINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtC60LDQt9GL0LLQsNC10YIg0L/Rg9C90LrRgiDQvNC10L3RjiDQmNGB0YLQvtGA0LjRjyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC40YHRgtC+0YDQuNC4INCa0JUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0LrQsNC30YvQstCw0LXRgiDQv9GD0L3QutGCINC80LXQvdGOINC00LvRjyDRg9C00LDQu9C10L3QuNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QvtC5INC10LTQuNC90LjRhtGLINC/0YDQuCDQv9C+0LTRgNC+0LHQvdC+0Lwg0L/RgNC+0YHQvNC+0YLRgNC1INCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0LrQsNC30YvQstCw0LXRgiDQv9GD0L3QutGCINC80LXQvdGOINCU0YPQsdC70LjRgNC+0LLQsNGC0Ywg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0L3QvtCy0L7QuSDQmtCVINC/0YPRgtC10Lwg0LrQvtC/0LjRgNC+0LLQsNC90LjRjyDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQuiDRgtC10LrRg9GJ0LXQuSDQmtCVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7QutCw0LfRi9Cy0LDQtdGCINC/0YPQvdC60YIg0LzQtdC90Y4g0JTRg9Cx0LvQuNGA0L7QstCw0YLRjCDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQvdC+0LLQvtC5INCa0JUg0L/Rg9GC0LXQvCDQutC+0L/QuNGA0L7QstCw0L3QuNGPINGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC6INGC0LXQutGD0YnQtdC5INCa0JUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7QutCw0LfRi9Cy0LDQtdGCINC/0YPQvdC60YIg0LzQtdC90Y4g0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0LTQu9GPINC40LfQvNC10L3QtdC90LjRjyDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQuiDQmtCVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0LrQsNC30YvQstCw0LXRgiDQv9GD0L3QutGCINC80LXQvdGOINCd0LDQt9Cw0LQg0L/RgNC4INC/0L7QtNGA0L7QsdC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdGL0YUg0LXQtNC40L3QuNGGINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0LrQsNC30YvQstCw0LXRgiDQv9GD0L3QutGCINC80LXQvdGOINCf0LXRh9Cw0YLRjCDQtNC70Y8g0L/QtdGH0LDRgtC4INGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC6INCa0JUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0LrQsNC30YvQstCw0LXRgiDQv9GD0L3QutGCINC80LXQvdGOINC00LvRjyDQv9C+0LTRgNC+0LHQvdC+0LPQviDQv9GA0L7RgdC80L7RgtGA0LAg0JrQlSDQv9GA0Lgg0L7QsdC30L7RgNC1INCa0JUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0LrQsNC3INC40YHRgtC+0YDQuNC4INGB0L7QtNC10YDQttC40LzQvtCz0L4g0JrQlSAo0L/QvtGA0Y/QtNC+0Log0L/QvtC60LDQt9CwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAn0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAgKNC/0YDQtdGE0LjQutGBKSDQuiDQvdC+0LzQtdGA0YMg0JrQlSwg0YIu0LUg0JrQlV/ihJYsINCa0JUjLCDQo9GH0LXRgtC90YvQuV/RjdC70LXQvNC10L3Rgl/ihJYuINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIC0gQ29uZmlnSXRlbSMgKNC40LvQuCDQtdCz0L4g0L/QtdGA0LXQstC+0LQpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJ9C60LvQsNGB0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAn0LPQu9C+0LHQsNC70YzQvdGL0LknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICfQv9C+0YHRgtC/0YDQvtC00YPQutGC0LjQstC90YvQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAn0L/RgNC10LTQv9GA0L7QtNGD0LrRgtC40LLQvdGL0LknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJ9C/0YDQvtC00YPQutGC0LjQstC90YvQuSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNrX1NLX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdadsOkxI3FoWnFpSBwb2jEvmFkJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fsc28gc2VhcmNoIGluIHByZXZpb3VzIHZlcnNpb25zPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3VzZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW1lcmEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmVhbWVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG9ja2luZyBTdGF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnS2FuY2Vsw6FyaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNsX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdQb3ZlxI1hbiBwb2dsZWQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ01lZCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IHZhci9wYWNrYWdlc2V0dXAvSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcmlhbCBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdQaXNhcm5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNyX0N5cmxfSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLRmdCw0ZrQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC40Lwg0YHRgtCw0LLQutCw0LzQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJ9CU0LXRhNC40L3QuNGG0LjRmNCwINC60LvQsNGB0LUg0L/RgNC+0LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICfQmtC70LDRgdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24nfSA9ICfQlNC10YTQuNC90LjRhtC40ZjQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICfQn9GA0L7QvNC10L3QuCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnREYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn0KHRgtCw0ZrQtSDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ9Ch0YLQsNGC0YPRgSDRgNCw0YHQv9C+0YDQtdGS0LjQstCw0ZrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ9Ca0LvQsNGB0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAn0KLQuNC/INGB0YLQsNGC0YPRgdCwINGA0LDRgdC/0L7RgNC10ZLQuNCy0LDRmtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICfQotGA0LXQvdGD0YLQvdC+INGB0YLQsNGa0LUg0LjQvdGG0LjQtNC10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ9Ci0LjQvyDRgtGA0LXQvdGD0YLQvdC+0LMg0YHRgtCw0YLRg9GB0LAg0LjQvdGG0LjQtNC10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9CX0LDQtNGa0Lgg0L/Rg9GCINC/0YDQvtC80LXRmtC10L3Qvic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0nfSA9ICfQmtC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICfQpNC40LvRgtC10YAg0LfQsCDQutC70LDRgdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ9CY0LfQsNCx0LXRgNC40YLQtSDQutC70LDRgdGDINC40Lcg0LvQuNGB0YLQtSDRgNCw0LTQuCDQutGA0LXQuNGA0LDRmtCwINC90L7QstC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1Lic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJ0lUU00g0LzQsNGB0L7QstC90LAg0LDQutGG0LjRmNCwINC90LAg0YLQuNC60LXRgtGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUnfSA9ICfQodGC0LDRgtGD0YEg0YDQsNGB0L/QvtGA0LXRktC40LLQsNGa0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUnfSA9ICfQodGC0LDRmtC1INC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICfQn9C+0LLQtdC20Lgg0YHQsCDQtNGA0YPQs9C40LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJ9Cd0LXQuNGB0L/RgNCw0LLQsNC9INCx0YDQvtGYINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICfQkdGA0L7RmCDQtNGA0YPQs9C1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INC30LAg0L/QvtCy0LXQt9C40LLQsNGa0LUuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAn0JTQsCDQu9C4INGB0YLQstCw0YDQvdC+INC20LXQu9C40YLQtSDQtNCwINC+0LHRgNC40YjQtdGC0LUg0L7QstGDINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90YMg0YHRgtCw0LLQutGDPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICfQndCw0LfQuNCyINC+0LLQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAn0J3QsNC30LjQsiDRmNC1INCy0LXRmyDRgyDRg9C/0L7RgtGA0LXQsdC4INC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QuNC8INGB0YLQsNCy0LrQsNC80LAg0LHRgNC+0Zg6ICVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICfQmNGB0YLQvtGA0LjRmNCw0YIg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LU6ICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJ9Ch0LDQtNGA0LbQsNGYINC40YHRgtC+0YDQuNGY0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJ9CS0YDQtdC80LUg0LrRgNC10LjRgNCw0ZrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICfQo9Cy0LXRm9Cw0L3QuCDQv9GA0LXQs9C70LXQtCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn0J/QvtC00LXRiNCw0LLQsNGa0LUg0LrQvtC90YLQtdC60YHRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJ9Ca0L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INC/0L4g0YHRgtGA0LDQvdC4JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAn0JPQtdC90LXRgNC40YfQutCwINGC0LDQsdC10LvQsCBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAn0J/QvtC60YDQtdC90Lgg0L/RgNC10YLRgNCw0LPRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICfQn9GA0LXRgtGA0LDQttC40YLQtSDQuCDRgyDQv9GA0LXRgtGF0L7RgtC90LjQvCDQstC10YDQt9C40ZjQsNC80LA/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAn0JrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40ZjQsCDQviDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC+0Zgg0YHRgtCw0LLQutC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJ9Ci0YDQtdC90YPRgtC90Lgg0YHRgtCw0YLRg9GBINGA0LDRgdC/0L7RgNC10ZLQuNCy0LDRmtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ9Cf0YDQvtC80LXQvdC40L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJ9Cf0YDQuNC60LDQttC4INGY0LXQtNC90YMg0LLQtdGA0LfQuNGY0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICfQn9C+0LrQsNC20Lgg0YHQstC1INCy0LXRgNC30LjRmNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICfQktC10YDQt9C40ZjQsCAtINGB0YLQsNGC0YPRgSDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAn0JLQtdGA0LfQuNGY0LAgLSDRgdGC0LDRgtGD0YEg0L/RgNC40LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICfQkdGA0L7RmCDQstC10YDQt9C40ZjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAn0JTQtdGC0LDRmdC4INCy0LXRgNC30LjRmNC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAn0KHQstC+0ZjRgdGC0LLQvic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJ9Cd0LjRmNC1INC00LDRgiDQv9GA0LjRgdGC0YPQvyDQutC70LDRgdC4ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAn0J/RgNC10LPQu9C10LQ6IElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAn0J3QuNGY0LUg0LTQsNGCIENvbmZpZ0l0ZW1JRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICfQn9C+0YLRgNC10LHQvdCwINGY0LUg0LHQsNGAINGY0LXQtNC90LAg0LjQt9Cw0LHRgNCw0L3QsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICfQndC10LzQsNGC0LUg0L/RgNCw0LLQviDRg9C/0LjRgdCwINC30LAg0L7QstGDINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90YMg0YHRgtCw0LLQutGDOiAlcy4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ9Ca0L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwICIlcyIg0L3QuNGY0LUg0L3QsNGS0LXQvdCwINGDINCx0LDQt9C4INC/0L7QtNCw0YLQsNC60LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAn0J3QuNGY0LUg0LHQuNC70L4g0LzQvtCz0YPRm9C1INC+0LHRgNC40YHQsNGC0LggQ29uZmlnSXRlbUlEICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAn0J3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvdCwINCy0LXRgNC30LjRmNCwINC30LAgQ29uZmlnSXRlbUlEICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICfQndC40YHRgyDQtNCw0YLQuCBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEINC40LvQuCBDbGFzc0lEISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAn0J3QuNGY0LUg0LTQsNGCINC/0YDQuNGB0YLRg9C/ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICfQndC40ZjQtSDQv9GA0L7QvdCw0ZLQtdC90LAg0LTQtdGE0LjQvdC40YbQuNGY0LAg0LfQsCDQutC70LDRgdGDICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICfQndC1INC80L7QttC1INGB0LUg0L/RgNC40LrQsNC30LDRgtC4INC40YHRgtC+0YDQuNGY0LDRgiwg0ZjQtdGAINC90LjRmNC1INC00LDRgiBDb25maWdJdGVtSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAn0J3QtSDQvNC+0LbQtSDRgdC1INC/0YDQuNC60LDQt9Cw0YLQuCDQuNGB0YLQvtGA0LjRmNCw0YIsINC90LjRmNC1INC00L7Qt9Cy0L7RmdC10L0g0L/RgNC40YHRgtGD0L8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICfQndC+0LLQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICfQndC+0LLQsCDQstC10YDQt9C40ZjQsCAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAn0JDQttGD0YDQuNGA0LDQvdC+INGB0YLQsNGa0LUg0YDQsNGB0L/QvtGA0LXQtNCwICjQvdC+0LLQvj0lcywg0YHRgtCw0YDQvj0lcykgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ9CQ0LbRg9GA0LjRgNCw0L3QviDRgdGC0LDRmtC1INC40L3RhtC40LTQtdC90YLQsCAo0L3QvtCy0L49JXMsINGB0YLQsNGA0L49JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAn0J7QsdGA0LjRgdCw0L3QsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAn0J/QvtCy0LXQt9Cw0L3QviDRgdCwICVzICjRgtC40L89JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICfQntCx0YDQuNGB0LDQvdCwINCy0LXQt9CwINGB0LAgJXMgKNGC0LjQvz0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJ9CQ0LbRg9GA0LjRgNCw0L3QsCDQtNC10YTQuNC90LjRhtC40ZjQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAn0JDQttGD0YDQuNGA0LDQvSDQvdCw0LfQuNCyICjQvdC+0LLQuD0lcywg0YHRgtCw0YDQuD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICfQkNC20YPRgNC40YDQsNC9INCw0YLRgNC40LHRg9GCJXMg0YHQsCAiJXMiINC90LAgIiVzIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICfQktC10YDQt9C40ZjQsCAlcyDRmNC1INC+0LHRgNC40YHQsNC90LAnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICfQndC40YHRgyDQtNCw0YLQuCBDb25maWdJdGVtSUQg0LjQu9C4IFZlcnNpb25JRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAn0J3QtSDQvNC+0LbQtSDRgdC1INC/0YDQuNC60LDQt9Cw0YLQuCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCwg0L3QuNGY0LUg0LTQsNGCINC/0YDQuNGB0YLRg9C/ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ9CY0JQg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUgJXMg0L3QuNGY0LUg0L3QsNGS0LXQvSDRgyDQsdCw0LfQuCDQv9C+0LTQsNGC0LDQutCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ9CY0LQg0LLQtdGA0LfQuNGY0LUgJXMg0L3QuNGY0LUg0L3QsNGS0LXQvSDRgyDQsdCw0LfQuCDQv9C+0LTQsNGC0LDQutCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAn0JrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJ9GI0YLQsNC80L/QsNC90YMg0L7QtCDRgdGC0YDQsNC90LUgJXMg0YMgJXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICfQndC10LjRgdC/0YDQsNCy0LDQvSDQmNCUINC60LvQsNGB0LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAn0J3QuNGY0LUg0LTQsNGCINCY0JQg0LrQu9Cw0YHQtSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICfQndC40ZjQtSDQtNCw0YIg0L/RgNC40YHRgtGD0L8g0L7QstC+0Zgg0LrQu9Cw0YHQuCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJ9Cd0LXQvNCwINGA0LXQt9GD0LvRgtCw0YLQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICfQoNC10LfRg9C70YLQsNGCINC/0YDQtdGC0YDQsNCz0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QuNGFINGB0YLQsNCy0LrQuCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAn0J3QtSDQvNC+0LbQtSDRgdC1INC/0YDQuNC60LDQt9Cw0YLQuCDRgdGC0LDQstC60LAsINC90LjRmNC1INC00LDRgiDQv9GA0LjRgdGC0YPQvyDQt9CwINC+0LLRgyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdGDINGB0YLQsNCy0LrRgyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICfQvtC/0LXRgNCw0YLQuNCy0L3QuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAn0YPQv9C+0LfQvtGA0LXRmtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAn0LjQvdGG0LjQtNC10L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn0KHRgtCw0YLRg9GBINC/0YDQuNC80LXQvdC1INC+0LLQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ9Ch0YLQsNGC0YPRgSDQuNC90YbQuNC00LXQvdGC0LAg0L7QstC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAn0J/RgNC40LrQsNC30LDQvdC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ9CY0LfQvNC10ZLRgyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICfQnNCw0LrRgdC40LzQsNC70L3QuCDQsdGA0L7RmCDRmNC10LTQvdC+0LMg0LXQu9C10LzQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICfQn9GA0LDQt9C90LAg0L/QvtGZ0LAg0YPQutCw0LfRg9GY0YMg0LTQsCDRm9C1INCw0LrRgtGD0LXQu9C90LUg0LLRgNC10LTQvdC+0YHRgtC4INCx0LjRgtC4INC30LDQtNGA0LbQsNC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ9Cf0YDQtdGB0LrQvtGH0LXQvdC+JzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICfQnNC+0LTQtdC7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICfQpNC40YDQvNCwINC60LvQuNGY0LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ9Ch0LXRgNC40ZjRgdC60Lgg0LHRgNC+0ZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAn0J/RgNC+0YbQtdGB0L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICdSQU0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAn0KXQsNGA0LQg0LTQuNGB0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICfQmtCw0L/QsNGG0LjRgtC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAn0JzRgNC10LbQvdC4INCw0LTQsNC/0YLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQINC/0YDQtdC60L4gREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSVAg0LDQtNGA0LXRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ9CT0YDQsNGE0LjRh9C60Lgg0LDQtNCw0L/RgtC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAn0JTRgNGD0LPQsCDQvtC/0YDQtdC80LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAn0JTQsNGC0YPQvCDQuNGB0YLQuNGG0LDRmtCwINCz0LDRgNCw0L3RhtC40ZjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICfQlNCw0YLRg9C8INC40L3RgdGC0LDQu9Cw0YbQuNGY0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ9Ci0LXQu9C10YTQvtC9IDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ9Ci0LXQu9C10YTQvtC9IDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAn0JjQvNC10ZjQuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICfQnNGA0LXQttC90LAg0LDQtNGA0LXRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAn0J/QvtC00LzRgNC10LbQvdCwINC80LDRgdC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ9Cc0YDQtdC20L3QuCDQv9GA0L7Qu9Cw0LcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAn0KLQuNC/INC70LjRhtC10L3RhtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAn0JvQuNGG0LXQvdGG0L3QuCDQutGZ0YPRhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ9Ca0L7Qu9C40YfQuNC90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAn0JTQsNGC0YPQvCDQuNGB0YLQuNGG0LDRmtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAn0JzQtdC00LjRmNCwJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICfQoNCw0YfRg9C90LDRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJ9Cl0LDRgNC00LLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICfQnNGA0LXQttCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAn0KHQvtGE0YLQstC10YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ9CY0YHRgtC10LrQu9C+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAn0J7QtNGA0LbQsNCy0LDRmtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAn0J/QuNC70L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn0J/Qu9Cw0L3QuNGA0LDQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ9Cd0LAg0L/QvtC/0YDQsNCy0YbQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAn0KDQsNGB0YXQvtC00L7QstCw0L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICfQoNC10YbQtdC90LfQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ9Ci0LXRgdGCL1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ9Cb0LDQv9GC0L7Qvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAn0JTQtdGB0LrRgtC+0L8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnUERBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ9Ch0LXRgNCy0LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ9CU0YDRg9Cz0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ9Cc0L7QvdC40YLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICfQqNGC0LDQvNC/0LDRhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICfQodCy0LjRhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICfQoNGD0YLQtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiDQv9GA0LjRgdGC0YPQv9C90LAg0YLQsNGH0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICfQodC40LPRg9GA0L3QvtGB0L3QuCDRg9GA0LXRktCw0ZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ9Cj0YDQtdGS0LDRmCDQt9CwINGA0LXQt9C10YDQstC90LUg0LrQvtC/0LjRmNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAn0JzQuNGIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAn0KLQsNGB0YLQsNGC0YPRgNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ9Ca0LDQvNC10YDQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICfQn9GA0L7RmNC10LrRgtC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICfQnNC+0LTQtdC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBINC60LDRgNGC0LjRhtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdVU0Ig0YPRgNC10ZLQsNGYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ9Cf0YDQuNC60ZnRg9GH0L3QsCDRgdGC0LDQvdC40YbQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAn0KHQutC10L3QtdGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAn0JfQs9GA0LDQtNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ9Ca0LDQvdGG0LXQu9Cw0YDQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICfQodC/0YDQsNGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICfQodC+0LHQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAn0KDQtdC6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ9Cg0LDQtNC90L4g0LzQtdGB0YLQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICfQo9GC0LjRh9C90LjRhtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAn0JjQoiDQvtCx0ZjQtdC60LDRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICdUZWxjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAn0JrQu9C40ZjQtdC90YLRgdC60LAg0LDQv9C70LjQutCw0YbQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ9Cf0L7RgdGA0LXQtNC90LjRh9C60Lgg0L/RgNC+0LPRgNCw0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAn0KHQtdGA0LLQtdGA0YHQutCwINCw0L/Qu9C40LrQsNGG0LjRmNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ9Ca0LvQuNGY0LXQvdGC0YHQutC4IE9TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ9Ch0LXRgNCy0LXRgNGB0LrQuCBPUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAn0JDQtNC80LjQvdC40YHRgtGA0LDRgtC40LLQvdC4INCw0LvQsNGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ9Ca0L7RgNC40YHQvdC40YfQutC4INCw0LvQsNGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAn0KPQs9GA0LDRktC10L0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICfQn9C+0ZjQtdC00LjQvdCw0YfQvdCwINC70LjRhtC10L3RhtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAn0J/QviDQutC+0YDQuNGB0L3QuNC60YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ9Cf0L4g0L/RgNC+0YbQtdGB0L7RgNGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICfQn9C+INGB0LXRgNCy0LXRgNGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAn0J/QviDRh9Cy0L7RgNGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAn0JrQvtC70LjRh9C40L3RgdC60LUg0LvQuNGG0LXQvdGG0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAn0JrQvtC80L/QsNC90LjRmNGB0LrQsCDQu9C40YbQtdC90YbQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ9Cg0LDQt9Cy0L7RmNC90LAg0LvQuNGG0LXQvdGG0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ9CU0LXQvNC+0L3RgdGC0YDQsNGG0LjQvtC90LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAn0JLRgNC10LzQtdC90YHQutC4INC+0LPRgNCw0L3QuNGH0LXQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAn0JHQtdGB0L/Qu9Cw0YLQvdC4ICoqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAn0J7RgtCy0L7RgNC10L3QuCDQutC+0LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAn0J3QtdC+0LPRgNCw0L3QuNGH0LXQvdC+JzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ9CjINGA0LXQtNGDJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAn0JTQvtC00LXRmdC10L3QtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJ9Ca0L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INC00L7QtNC10ZnQtdC90LUg0YTQuNGA0LzQuCDQutC70LjRmNC10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAn0JrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0LTQvtC00LXRmdC10L3QtSDQutC70LjRmNC10L3RgtGDINC60L7RgNC40YHQvdC40LrRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnQ01EQiDQv9C+0LTQtdGI0LDQstCw0ZrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAn0J/RgNC+0LLQtdGA0LAg0ZjQtdC00LjQvdGB0YLQstC10L3QvtCzINC40LzQtdC90LAg0YHQsNC80L4g0YMg0L7QutCy0LjRgNGDINC40YHRgtC1INC60LvQsNGB0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QuNGFINGB0YLQsNCy0LrQuCAoXCfQutC70LDRgdCwXCcpINC40LvQuCDQs9C70L7QsdCw0LvQvdC+IChcJ9Cz0LvQvtCx0LDQu9C90L5cJyksINGI0YLQviDQt9C90LDRh9C4INC00LAg0ZjQtSDRgdCy0LDQutCwINC/0L7RgdGC0L7RmNC10ZvQsCDQmtC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCDRg9C30LXRgtCwINGDINC+0LHQt9C40YAg0YMg0L/RgNC+0LLQtdGA0Lgg0LTRg9C/0LvQuNC60LDRgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICfQmtC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAn0JTQvtC00LDQstCw0ZrQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICfQo9GA0LXRktC40LLQsNGa0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNC+0LTRg9C7INC00L7Qs9Cw0ZLQsNGY0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QuNGFINGB0YLQsNCy0LrQuCDQutC+0ZjQuCDQvtC80L7Qs9GD0ZvQsNCy0LAg0LHQtdC70LXQttC10ZrQtSDRgyDQuNGB0YLQvtGA0LjRmNCw0YIg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJ9CY0YHRgtC+0YDQuNGY0LDRgiDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAn0KjRgtCw0LzQv9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAn0JTQtdGC0LDRmdC90Lgg0L/RgNC40LrQsNC3INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvdC1INGB0YLQsNCy0LrQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJ9CR0YDQvtGYINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJ9Ce0LPRgNCw0L3QuNGH0LXRmtC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICfQntCz0YDQsNC90LjRh9C10ZrQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC40YUg0YHRgtCw0LLQutC4INC/0L4g0YHRgtGA0LDQvdC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAn0JHQsNC30LAg0L/QvtC00LDRgtCw0LrQsCDRg9C/0YDQsNCy0ZnQsNGa0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGY0L7QvC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJ9Cc0L7QtNGD0Lsg0LzQsNGB0L7QstC90LUg0LDQutGG0LjRmNC1INC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QuNC8INGB0YLQsNCy0LrQsNC80LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ca0L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC/0YDQtdGC0YDQsNC20YPRmNC1INC/0L7Qt9Cw0LTQuNC90YHQutC4INGA0YPRgtC10YAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAn0JrRgNC10LjRgNCw0ZrQtSDQuCDRg9C/0YDQsNCy0ZnQsNGa0LUg0LTQtdGE0LjQvdC40YbQuNGY0LAg0LfQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0LDQutGG0LjRmNC1INCz0LTQtSDRmNC1INC00YPQs9C80LUg0L/QvtGB0YLQsNCy0LrQuCDQtNC+0YHRgtGD0L/QvdC+INGDINC/0L7QstC10LfQsNC90L7QvCDQs9GA0LDRhNC40YfQutC+0Lwg0LXQu9C10LzQtdC90YLRgyDQvtCx0ZjQtdC60YLQsCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiDQnNC+0LvQuNC80L4g0LTQsCDQuNC80LDRgtC1INC90LAg0YPQvNGDINC00LAg0L7QstC1INCQ0LrRhtC40ZjQtSDQvNC+0YDQsNGY0YMg0LTQsCDQsdGD0LTRgyDRgNC10LPQuNGB0YLRgNC+0LLQsNC90LUg0YMg0YHQu9C10LTQtdGb0LjQvCBKUyDQuCBDU1Mg0LTQsNGC0L7RgtC10LrQsNC80LA6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzINC4IENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L3QtdC+0L/RhdC+0LTQvdC1INC00L7Qt9Cy0L7Qu9C1INC30LAg0LrRgNC10LjRgNCw0ZrQtSBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjRhSDRgdGC0LDQstC60Lgg0LrQvtGA0LjRiNGb0LXRmtC10Lwg0LPQtdC90LXRgNC40YfQutC+0LMg0LjQvdGC0LXRgNGE0LXRmNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC/0L7RgtGA0LXQsdC90LUg0LTQvtC30LLQvtC70LUg0LfQsCDQsdGA0LjRgdCw0ZrQtSBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjRhSDRgdGC0LDQstC60Lgg0LrRgNC+0Lcg0LPQtdC90LXRgNC40YfQutC4INC40L3RgtC10YDRhNC10ZjRgS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L3QtdC+0L/RhdC+0LTQvdC1INC00L7Qt9Cy0L7Qu9C1INC30LAg0LTQvtCx0LjRmNCw0ZrQtSBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjRhSDRgdGC0LDQstC60Lgg0LrQvtGA0LjRiNGb0LXRmtC10Lwg0LPQtdC90LXRgNC40YfQutC+0LMg0LjQvdGC0LXRgNGE0LXRmNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC90LXQvtC/0YXQvtC00L3QtSDQtNC+0LfQstC+0LvQtSDQt9CwINC/0YDQtdGC0YDQsNCz0YMgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC40YUg0YHRgtCw0LLQutC4INC60L7RgNC40YjRm9C10ZrQtdC8INCz0LXQvdC10YDQuNGH0LrQvtCzINC40L3RgtC10YDRhNC10ZjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQvdC10L7Qv9GF0L7QtNC90LUg0LTQvtC30LLQvtC70LUg0LfQsCDQsNC20YPRgNC40YDQsNGa0LUgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC40YUg0YHRgtCw0LLQutC4INC60L7RgNC40YjRm9C10ZrQtdC8INCz0LXQvdC10YDQuNGH0LrQvtCzINC40L3RgtC10YDRhNC10ZjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC80L7QtNGD0Lsg0L/RgNC10LPQu9C10LTQsCDQt9CwINC80LDQu9C4INC/0YDQuNC60LDQtyDQu9C40YHRgtC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjRhSDRgdGC0LDQstC60LguICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDRgNC10LPRg9C70LDRgNC90LUg0LjQt9GA0LDQt9C1INC30LAg0YHQstCw0LrRgyDQutC70LDRgdGDINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INGA0LDQtNC4INC/0YDQvtCy0LXRgNC1INC90LDQt9C40LLQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSDQuCDQv9GA0LjQutCw0LfQsCDQv9GA0LjQv9Cw0LTQsNGY0YPRm9C40YUg0L/QvtGA0YPQutCwINC+INCz0YDQtdGI0LrQsNC80LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC4INC/0L7QtNC+0LHRmNC10LrQsNGCINC60LvQsNGB0LUgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQsdGA0L7RmCDRgNC10LTQvtCy0LAg0LfQsCDQtdC00LjRgtC+0YAg0LTQtdGE0LjQvdC40YbQuNGY0LUgQ0kg0YMg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC40LLQvdC+0Lwg0LjQvdGC0LXRgNGE0LXRmNGB0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0YDQtdC00L7RgdC70LXQtCDQuNC90YbQuNC00LXQvdGC0L3QuNGFINGB0YLQsNGa0LAg0L7QtCDQstC40YHQvtC60L7QsyAo0L3Qv9GAINC60YDQuNGC0LjRh9C90L4pINC00L4g0L3QuNGB0LrQvtCzICjQvdC/0YAg0YTRg9C90LrRhtC40L7QvdCw0LvQvdC+KS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INGA0LXQu9C10LLQsNC90YLQvdCwINGB0YLQsNGa0LAg0YDQsNGB0L/QvtGA0LXRktC40LLQsNGa0LAg0LPQtNC1INC/0L7QstC10LfQsNC90Lgg0YLQuNC60LXRgtC4INC80L7Qs9GDINC00LAg0YPRgtC40YfRgyDQvdCwINGB0YLQsNGC0YPRgSBDSS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INCz0YDQsNC90LjRhtGDINC/0YDQtdGC0YDQsNCz0LUg0LfQsCDQtdC60YDQsNC9IEFnZW50SVRTTUNvbmZpZ0l0ZW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQs9GA0LDQvdC40YbRgyDQv9GA0LXRgtGA0LDQs9C1INC30LAg0LXQutGA0LDQvSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC/0YDQuNC60LDQt9Cw0L3QtSDQutC+0LvQvtC90LUg0YMg0L/RgNC10LPQu9C10LTRgyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC40YUg0YHRgtCw0LLQutC4LiDQntCy0LAg0L7Qv9GG0LjRmNC1INC90LXQvNCwINGD0YLQuNGG0LDRmCDQvdCwINC/0L7Qt9C40YbQuNGY0LUg0LrQvtC70L7QvdCwLiDQndCw0L/QvtC80LXQvdCwOiDRg9C60L7Qu9C40LrQviDRmNC1INC40LfQsNCx0YDQsNC9INGE0LjQu9GC0LXRgCBcJ9Ch0LLQtVwnINC60LvQsNGB0LAg0LrQvtC70L7QvdC1INGY0LUg0YPQstC10Log0LTQvtGB0YLRg9C/0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9GA0LjQutCw0LfQsNC90LUg0LrQvtC70L7QvdC1INGDINC/0YDQtdGC0YDQsNC30Lgg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QuNGFINGB0YLQsNCy0LrQuC4g0J7QstCwINC+0L/RhtC40ZjQtSDQvdC10LzQsCDRg9GC0LjRhtCw0Zgg0L3QsCDQv9C+0LfQuNGG0LjRmNC1INC60L7Qu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9GA0LjQutCw0LfQsNC90LUg0LrQvtC70L7QvdC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjRhSDRgdGC0LDQstC60Lgg0YMg0L/RgNC10LPQu9C10LTRgyDRgyDQt9Cw0LLQuNGB0L3QvtGB0YLQuCDQvtC0INC60LvQsNGB0LUuINCh0LLQsNC60Lgg0YPQvdC+0YEg0LzQvtGA0LAg0YHQsNC00YDQttCw0YLQuCDQv9GA0LXRhNC40LrRgSDRgdCwINC90LDQt9C40LLQvtC8INC60LvQsNGB0LUg0Lgg0LTQstC+0YLQsNGH0LrQvtC8ICjQvdC/0YAuIENvbXB1dGVyOjopLiDQn9C+0YHRgtC+0ZjQuCDQv9Cw0YAg0LDRgtGA0LjQsdGD0YLQsCDQutC+0ZjQuCDRgdGDINC30LDRmNC10LTQvdC40YfQutC4INC30LAg0YHQstC1INC60LvQsNGB0LUgKNC90L/RgC4g0LfQsCDQutC70LDRgdGDIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiDQl9CwINC/0YDQuNC60LDQtyDQv9C+0ZjQtdC00LjQvdCw0YfQvdC40YUg0LDRgtGA0LjQsdGD0YLQsCDQuNC3INC00LXRhNC40L3QuNGG0LjRmNC1LCDQvNC+0YDQsNGC0LUg0LrQvtGA0LjRgdGC0LjRgtC4INGB0LvQtdC00LXRm9GDINGI0LXQvNGDICjQv9GA0LjQvNC10YAg0LfQsCDQutC70LDRgdGDIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuINCj0LrQvtC70LjQutC+INC90LUg0L/QvtGB0YLQvtGY0Lgg0YPQvdC+0YEg0LfQsCDQv9C+0ZjQtdC00LjQvdCw0YfQvdGDINC60LvQsNGB0YMsINCx0LjRm9C1INC/0YDQuNC60LDQt9Cw0L3QtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDQutC+0LvQvtC90LUg0LTQtdGE0LjQvdC40YHQsNC90LUg0YMgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC/0YDQuNC60LDQt9Cw0L3QtSDQutC+0LvQvtC90LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QuNGFINGB0YLQsNCy0LrQuCDRgyDQv9GA0LXRgtGA0LDQt9C4INGDINC30LDQstC40YHQvdC+0YHRgtC4INC+0LQg0LrQu9Cw0YHQtS4g0KHQstCw0LrQuCDRg9C90L7RgSDQvNC+0YDQsCDRgdCw0LTRgNC20LDRgtC4INC/0YDQtdGE0LjQutGBINGB0LAg0L3QsNC30LjQstC+0Lwg0LrQu9Cw0YHQtSDQuCDQtNCy0L7RgtCw0YfQutC+0LwgKNC90L/RgC4gQ29tcHV0ZXI6OikuINCf0L7RgdGC0L7RmNC4INC/0LDRgCDQsNGC0YDQuNCx0YPRgtCwINC60L7RmNC4INGB0YMg0LfQsNGY0LXQtNC90LjRh9C60Lgg0LfQsCDRgdCy0LUg0LrQu9Cw0YHQtSAo0L3Qv9GALiDQt9CwINC60LvQsNGB0YMgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuINCX0LAg0L/RgNC40LrQsNC3INC/0L7RmNC10LTQuNC90LDRh9C90LjRhSDQsNGC0YDQuNCx0YPRgtCwINC40Lcg0LTQtdGE0LjQvdC40YbQuNGY0LUsINC80L7RgNCw0YLQtSDQutC+0YDQuNGB0YLQuNGC0Lgg0YHQu9C10LTQtdGb0YMg0YjQtdC80YMgKNC/0YDQuNC80LXRgCDQt9CwINC60LvQsNGB0YMgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4g0KPQutC+0LvQuNC60L4g0L3QtSDQv9C+0YHRgtC+0ZjQuCDRg9C90L7RgSDQt9CwINC/0L7RmNC10LTQuNC90LDRh9C90YMg0LrQu9Cw0YHRgywg0LHQuNGb0LUg0L/RgNC40LrQsNC30LDQvdC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC1INC60L7Qu9C+0L3QtSDQtNC10YTQuNC90LjRgdCw0L3QtSDRgyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/RgNC40LrQsNC30LDQvdC1INC60L7Qu9C+0L3QtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC40YUg0YHRgtCw0LLQutC4INGDINC00L7QtNCw0YLQutGDINC60L7QvNCw0L3QtNC90LUg0YLQsNCx0LvQtSDRgyDQt9Cw0LLQuNGB0L3QvtGB0YLQuCDQvtC0INC60LvQsNGB0LUuINCh0LLQsNC60Lgg0YPQvdC+0YEg0LzQvtGA0LAg0YHQsNC00YDQttCw0YLQuCDQv9GA0LXRhNC40LrRgSDRgdCwINC90LDQt9C40LLQvtC8INC60LvQsNGB0LUg0Lgg0LTQstC+0YLQsNGH0LrQvtC8ICjQvdC/0YAuIENvbXB1dGVyOjopLiDQn9C+0YHRgtC+0ZjQuCDQv9Cw0YAg0LDRgtGA0LjQsdGD0YLQsCDQutC+0ZjQuCDRgdGDINC30LDRmNC10LTQvdC40YfQutC4INC30LAg0YHQstC1INC60LvQsNGB0LUgKNC90L/RgC4g0LfQsCDQutC70LDRgdGDIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiDQl9CwINC/0YDQuNC60LDQtyDQv9C+0ZjQtdC00LjQvdCw0YfQvdC40YUg0LDRgtGA0LjQsdGD0YLQsCDQuNC3INC00LXRhNC40L3QuNGG0LjRmNC1LCDQvNC+0YDQsNGC0LUg0LrQvtGA0LjRgdGC0LjRgtC4INGB0LvQtdC00LXRm9GDINGI0LXQvNGDICjQv9GA0LjQvNC10YAg0LfQsCDQutC70LDRgdGDIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuINCj0LrQvtC70LjQutC+INC90LUg0L/QvtGB0YLQvtGY0Lgg0YPQvdC+0YEg0LfQsCDQv9C+0ZjQtdC00LjQvdCw0YfQvdGDINC60LvQsNGB0YMsINCx0LjRm9C1INC/0YDQuNC60LDQt9Cw0L3QtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDQutC+0LvQvtC90LUg0LTQtdGE0LjQvdC40YHQsNC90LUg0YMgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKNC60ZnRg9GHIERlZmF1bHRDb2x1bW5zKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC/0YDQuNC60LDQt9Cw0L3QtSDQutC+0LvQvtC90LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QuNGFINGB0YLQsNCy0LrQuCDRgyDRgtCw0LHQtdC70Lgg0LLQtdC30LAg0YMg0LfQsNCy0LjRgdC90L7RgdGC0Lgg0L7QtCDQutC70LDRgdC1LiDQo9C60L7Qu9C40LrQviDQvdC1INC/0L7RgdGC0L7RmNC4INGD0L3QvtGBINC30LAg0L/QvtGY0LXQtNC40L3QsNGH0L3RgyDQutC70LDRgdGDLCDQsdC40ZvQtSDQv9GA0LjQutCw0LfQsNC90LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90LUg0LrQvtC70L7QvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9GA0LjQutCw0LfQsNC90LUg0LrQvtC70L7QvdC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjRhSDRgdGC0LDQstC60Lgg0YMg0YLQsNCx0LXQu9C4INCy0LXQt9CwINGDINC30LDQstC40YHQvdC+0YHRgtC4INC+0LQg0LrQu9Cw0YHQtS4g0KHQstCw0LrQuCDRg9C90L7RgSDQvNC+0YDQsCDRgdCw0LTRgNC20LDRgtC4INC/0YDQtdGE0LjQutGBINGB0LAg0L3QsNC30LjQstC+0Lwg0LrQu9Cw0YHQtSDQuCDQtNCy0L7RgtCw0YfQutC+0LwgKNC90L/RgC4gQ29tcHV0ZXI6OikuINCf0L7RgdGC0L7RmNC4INC/0LDRgCDQsNGC0YDQuNCx0YPRgtCwINC60L7RmNC4INGB0YMg0LfQsNGY0LXQtNC90LjRh9C60Lgg0LfQsCDRgdCy0LUg0LrQu9Cw0YHQtSAo0L3Qv9GALiDQt9CwINC60LvQsNGB0YMgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuINCX0LAg0L/RgNC40LrQsNC3INC/0L7RmNC10LTQuNC90LDRh9C90LjRhSDQsNGC0YDQuNCx0YPRgtCwINC40Lcg0LTQtdGE0LjQvdC40YbQuNGY0LUsINC80L7RgNCw0YLQtSDQutC+0YDQuNGB0YLQuNGC0Lgg0YHQu9C10LTQtdGb0YMg0YjQtdC80YMgKNC/0YDQuNC80LXRgCDQt9CwINC60LvQsNGB0YMgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4g0KPQutC+0LvQuNC60L4g0L3QtSDQv9C+0YHRgtC+0ZjQuCDRg9C90L7RgSDQt9CwINC/0L7RmNC10LTQuNC90LDRh9C90YMg0LrQu9Cw0YHRgywg0LHQuNGb0LUg0L/RgNC40LrQsNC30LDQvdC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC1INC60L7Qu9C+0L3QtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQutC+0ZjQuCDRgtC40L8g0LLQtdC30LUgKNCz0LvQtdC00LDQvdC+INC40Lcg0L/QtdGA0YHQv9C10LrRgtC40LLQtSDRgtC40LrQtdGC0LApINC80L7QttC1INC00LAg0YPRgtC40YfQtSDQvdCwINC/0L7QstC10LfQsNC90YMgQ0kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQutC+0ZjQuCDRgtC40L8g0YLQuNC60LXRgtCwINC80L7QttC1INC00LAg0YPRgtC40YfQtSDQvdCwINGB0YLQsNGC0YPRgSDQv9C+0LLQtdC30LDQvdC1IENJLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAn0JHRgNC40YHQsNGa0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJ9CR0L7RmNCwINGB0YLQsNGC0YPRgdCwINGA0LDRgdC/0L7RgNC10ZLQuNCy0LDRmtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ9CU0YPQv9C70LjQutCw0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAn0J7QvNC+0LPRg9Gb0LDQstCwINC80LDRgdC+0LLQvdGDINCw0LrRhtC40ZjRgyDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjQvCDRgdGC0LDQstC60LDQvNCwINGDINC/0YDQuNGB0YLRg9C/0L3QvtC8INGB0LjRgdGC0LXQvNGDINC+0L/QtdGA0LDRgtC10YDQsCDQvdCwINCy0LjRiNC1INC+0LQg0ZjQtdC00L3QtSDRgdGC0LDQstC60LUg0LjRgdGC0L7QstGA0LXQvNC10L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJ9CQ0LrRgtC40LLQuNGA0LAg0YHQstC+0ZjRgdGC0LLQviDQvNCw0YHQvtCy0L3QtSDQsNC60YbQuNGY0LUg0L3QsCDQutC+0L3RhNC40LPQuNGA0LDRhtC40L7QvdC40Lwg0YHRgtCw0LLQutCw0LzQsCDRgdCw0LzQviDQt9CwINC40LfQu9C40YHRgtCw0L3QtSDQs9GA0YPQv9C1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAn0JDQutGC0LjQstC40YDQsC/QtNC10LDQutGC0LjQstC40YDQsCDRhNGD0L3QutGG0LjRmNGDINC30LAg0L/RgNC+0LLQtdGA0YMg0ZjQtdC00LjQvdGB0YLQstC10L3QvtGB0YLQuCDQuNC80LDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjRhSDRgdGC0LDQstC60LguINCf0YDQtSDQsNC60YLQuNCy0LjRgNCw0ZrQsCDQvtCy0LUg0L7Qv9GG0LjRmNC1INGC0YDQtdCx0LDRgtC1INC/0YDQvtCy0LXRgNC40YLQuCDRgyDQstCw0YjQtdC8INGB0LjRgdGC0LXQvNGDINC/0L7RgdGC0L7RmNCw0ZrQtSDQtNGD0L/Qu9C40LrQsNGC0LAg0L3QsCDQv9C+0YHRgtC+0ZjQtdGb0LjQvCDRgdGC0LDQstC60LDQvNCwLiDQotC+INC80L7QttC10YLQtSDRg9GA0LDQtNC40YLQuCDQv9C+0LzQvtGb0YMg0YHQutGA0LjQv9GC0LAgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJ9Cc0L7QtNGD0Lsg0LTQvtCz0LDRktCw0ZjQsCDQt9CwINC/0L7QtNC10YjQsNCy0LDRmtC1INGB0YLQsNGC0YPRgdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjRhSDRgdGC0LDQstC60Lgg0L/RgNC40LvQuNC60L7QvCDQv9C+0YHRgtCw0LLRmdCw0ZrQsCDQstC10LfQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICfQn9GA0LXQs9C70LXQtCBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0L7QstC10YDRgyDQs9GA0YPQv9C1INC+0LTQs9C+0LLQvtGA0L3QtSDQt9CwINC60LvQsNGB0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAn0JzQvtC00YPQuyDQt9CwINC/0YDQvtCy0LXRgNGDINCz0YDRg9C/0LUg0L7QtNCz0L7QstC+0YDQvdC1INC30LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3RgyDRgdGC0LDQstC60YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAn0JzQvtC00YPQuyDQt9CwINCz0LXQvdC10YDQuNGB0LDRmtC1INGB0YLQsNGC0LjRgdGC0LjQutC1IElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QuNGFINGB0YLQsNCy0LrQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRmNCwINC80L7QtNGD0LvQsCDQvtCx0ZjQtdC60YLQsCDQt9CwINC00L7QtNCw0YLQsNC6INGD0LLQvtC3L9C40LfQstC+0LcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJ9Cf0YDQtdCz0LvQtdC0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDQv9C+0LfQsNC00LjQvdGB0LrQuCDQv9GA0LjQutCw0Lcg0LrQvtC90YLRgNC+0LvQvdC1INGC0LDQsdC70LUg0LvQuNGB0YLQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC40YUg0YHRgtCw0LLQutC4INGE0LjRgNC80LUg0LrQu9C40ZjQtdC90YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuICJMaW1pdCIg0LTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQsdGA0L7RmCDQv9GA0LjQutCw0LfQsNC90LjRhSDRgdGC0LDQstC60LguICJHcm91cCIg0YHQtSDQutC+0YDQuNGB0YLQuCDQtNCwINC+0LPRgNCw0L3QuNGH0Lgg0L/RgNC40YHRgtGD0L8g0LTQvtC00LDRgtC60YMgKNC90L/RgC4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiINC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INGY0LUg0LTQvtC00LDRgtCw0Log0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4g0LDQutGC0LjQstC40YDQsNC9INC40LvQuCDQtNCwINGY0LUg0L3QtdC+0L/RhdC+0LTQvdC+INC00LAg0LPQsCDQutC+0YDQuNGB0L3QuNC6INC80LDQvdGD0LXQu9C90L4g0LDQutGC0LjQstC40YDQsC4gIkNhY2hlVFRMTG9jYWwiINGY0LUg0LLRgNC10LzQtSDRgyDQvNC40L3Rg9GC0LjQvNCwINC30LAg0LrQtdGI0LjRgNCw0ZrQtSDQtNC+0LTQsNGC0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDQsdC+0ZjQtSDRgdGC0LDRgtGD0YHQsCDQv9GA0LjQvNC10L3QtSDQvdCwINC/0YDQuNC60LDQt9GDINC/0L7RgdGC0LDQstC60Lgg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQt9CwINGB0YLQsNGC0YPRgdC1INC/0YDQuNC80LXQvdC1INC90LAg0L/RgNC40LrQsNC30YMg0L/QvtGB0YLQsNCy0LrQuCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQt9CwINCw0YLRgNC40LHRg9GC0LUg0YPQt9C+0YDQutCwINCz0YDRg9C/0LUg0LfQsCDQtNC+0LfQstC+0LvQtSDQvtC/0YjRgtC10LMg0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDRgdGC0YDQsNC90LjRhtC1ICjQvdCwINC60L7RmNC40LzQsCDRgdGDINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INC/0YDQuNC60LDQt9Cw0L3QtSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICfQk9GA0YPQv9CwINC/0YDQuNGB0YLRg9C/0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7RgtGA0LXQsdC90LUg0LTQvtC30LLQvtC70LUg0LfQsCDRg9C/0L7RgtGA0LXQsdGDINC10LrRgNCw0L3QsCBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0YLRgNC10LHQvdC1INC00L7Qt9Cy0L7Qu9C1INC30LAg0YPQv9C+0YLRgNC10LHRgyDQtdC60YDQsNC90LAg0L/RgNC10YLRgNCw0LPQtSBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtGC0YDQtdCx0L3QtSDQtNC+0LfQstC+0LvQtSDQt9CwINGD0L/QvtGC0YDQtdCx0YMg0LXQutGA0LDQvdCwINC00LXRgtCw0LvQvdC+0LMg0L/RgNC40LrQsNC30LAgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtGC0YDQtdCx0L3QtSDQtNC+0LfQstC+0LvQtSDQt9CwINGD0L/QvtGC0YDQtdCx0YMg0LXQutGA0LDQvdCwINC00L7QtNCw0LLQsNGa0LAgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7RgtGA0LXQsdC90LUg0LTQvtC30LLQvtC70LUg0LfQsCDRg9C/0L7RgtGA0LXQsdGDINC10LrRgNCw0L3QsCDQuNC30LzQtdC90LUgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7RgtGA0LXQsdC90LUg0LTQvtC30LLQvtC70LUg0LfQsCDRg9C/0L7RgtGA0LXQsdGDINC10LrRgNCw0L3QsCDQuNGB0YLQvtGA0LjRmNCw0YLQsCBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7RgtGA0LXQsdC90LUg0LTQvtC30LLQvtC70LUg0LfQsCDRg9C/0L7RgtGA0LXQsdGDINC10LrRgNCw0L3QsCDRiNGC0LDQvNC/0LUgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQsdGA0LjRgdCw0ZrQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICfQn9GA0LXRgtGA0LDQs9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LjRhSDRgdGC0LDQstC60LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJ9CR0LjRgNCwINC80L7QtNGD0Lsg0L7Qv9C10YDQsNGC0L7RgNCwINCw0YPRgtC+0LzQsNGC0YHQutC+0LMg0YPQstC10ZvQsNGa0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUuINCe0L/QtdGA0LDRgtC+0YAg0LDRg9GC0L7QvNCw0YLRgdC60L7QsyDRg9Cy0LXRm9Cw0ZrQsCDQv9C+0LLQtdGb0LDQstCwINCx0YDQvtGYINGB0YLQsNCy0LrQtSwgU3lzdGVtSUQsIENvbmZpZ0l0ZW1DbGFzc0lEINC4INC60L7RgNC40YjRm9C10L3QuCDQsdGA0L7RmNCw0YcuINCk0L7RgNC80LDRgiDRmNC1ICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC7QsdGA0L7RmNCw0YciLCDQvdC/0YAgMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJ9Cf0L7RgdGC0LDQstGZ0LAg0YHRgtCw0ZrQtSDQuNC90YbQuNC00LXQvdGC0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0LrQsNC00LAg0ZjQtSDRgtC40LrQtdGCINC/0L7QstC10LfQsNC9INGB0LAg0YHRgtCw0LLQutC+0LwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDRgdGC0LDRgtGD0YEg0L/RgNC40LzQtdC90LUg0L3QsCDQtdC60YDQsNC90YMg0LzQsNGB0L7QstC90LUg0LDQutGG0LjRmNC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDRgdGC0LDRgtGD0YEg0LjQvdGG0LjQtNC10L3RgtCwINC90LAg0LXQutGA0LDQvdGDINC80LDRgdC+0LLQvdC1INCw0LrRhtC40ZjQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQutC+0ZjQsCDQvtC80L7Qs9GD0ZvQsNCy0LAg0L/QvtCy0LXQt9C40LLQsNGa0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0YHQsCDQtNGA0YPQs9C40Lwg0L7QsdGY0LXQutGC0L7QvCDQvdCwINC00LXRgtCw0ZnQvdC+0Lwg0L/RgNC40LrQsNC30YMg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGY0LUg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDQv9GA0LjRgdGC0YPQvyDQuNGB0YLQvtGA0LjRmNCw0YLRgyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSDQvdCwINC/0YDQtdCz0LvQtdC00YMg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC30LAg0L/RgNC40YHRgtGD0L8g0LjRgdGC0L7RgNC40ZjQsNGC0YMg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC30LAg0LHRgNC40YHQsNGa0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0L3QsCDRmtC10L3QvtC8INC00LXRgtCw0ZnQvdC+0Lwg0L/RgNC40LrQsNC30YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDRg9C80L3QvtC20LDQstCw0ZrQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSDQvdCwINC/0YDQtdCz0LvQtdC00YMg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC30LAg0YPQvNC90L7QttCw0LLQsNGa0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0L3QsCDRmtC10L3QvtC8INC00LXRgtCw0ZnQvdC+0Lwg0L/RgNC40LrQsNC30YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQt9CwINC40LfQvNC10L3RgyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSDQvdCwINGa0LXQvdC+0Lwg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC30LAg0L/QvtCy0YDQsNGC0LDQuiDQvdCwINC00LXRgtCw0ZnQvdC4INC/0YDQuNC60LDQtyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC1INGB0YLQsNCy0LrQtSAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDRiNGC0LDQvNC/0YMg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0L3QsCDRmtC10L3QvtC8INC00LXRgtCw0ZnQvdC+0Lwg0L/RgNC40LrQsNC30YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDQtNC10YLQsNGZ0L3QuCDQv9GA0LjQutCw0Lcg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0L3QsCDQv9GA0LXQs9C70LXQtNGDINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LUg0YHRgtCw0LLQutC1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0YDQuNC60LDQt9GD0ZjQtSDQuNGB0YLQvtGA0LjRmNCw0YIg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUgKNC+0LHRgNC90YPRgiDRgNC10LTQvtGB0LvQtdC0KSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICfQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQt9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90YMg0YHRgtCw0LLQutGDLCDQvdC/0YAuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiDQn9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDRmNC1IENvbmZpZ0l0ZW0jLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJ9C60LvQsNGB0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAn0LPQu9C+0LHQsNC70L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJ9C/0L7RgdGCLdC/0YDQvtC00YPQutGG0LjRmNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICfQv9GA0LUt0L/RgNC+0LTRg9C60YbQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJ9C/0YDQvtC00YPQutGG0LjRmNCwJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNyX0xhdG5fSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ29uZmlnSXRlbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCd9ID0gJ1VwcmF2bGphbmplIGtvbmZpZ3VyYWNpb25pbSBzdGF2a2FtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgY2xhc3MgZGVmaW5pdGlvbid9ID0gJ0RlZmluaWNpamEga2xhc2UgcHJvbWVuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBDbGFzcyd9ID0gJ0tsYXNhIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnRGVmaW5pY2lqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICdQcm9tZW5pJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudERhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGFuamUgaW5jaWRlbnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICdTdGF0dXMgcmFzcG9yZcSRaXZhbmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnS2xhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnVGlwIHN0YXR1c2EgcmFzcG9yZcSRaXZhbmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdUcmVudXRubyBzdGFuamUgaW5jaWRlbnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ1RpcCB0cmVudXRub2cgc3RhdHVzYSBpbmNpZGVudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnWmFkbmppIHB1dCBwcm9tZW5qZW5vJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSd9ID0gJ0tvbmZpZ3VyYWNpb25hIHN0YXZrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdGaWx0ZXIgemEga2xhc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgQ2xhc3MgZnJvbSB0aGUgbGlzdCB0byBjcmVhdGUgYSBuZXcgQ29uZmlnIEl0ZW0uJ30gPSAnSXphYmVyaXRlIGtsYXN1IGl6IGxpc3RlIHJhZGkga3JlaXJhbmphIG5vdmUga29uZmlndXJhY2lvbmUgc3RhdmtlLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ29uZmlnSXRlbSBCdWxrIEFjdGlvbid9ID0gJ0lUU00gbWFzb3ZuYSBha2NpamEgbmEgdGlrZXR1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUnfSA9ICdTdGF0dXMgcmFzcG9yZcSRaXZhbmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlJ30gPSAnU3RhbmplIGluY2lkZW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICdQb3Zlxb5pIHNhIGRydWdpbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENvbmZpZ3VyYXRpb24gSXRlbSBudW1iZXIhJ30gPSAnTmVpc3ByYXZhbiBicm9qIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG51bWJlciBvZiBhbm90aGVyIENvbmZpZ3VyYXRpb24gSXRlbSB0byBsaW5rIHdpdGguJ30gPSAnQnJvaiBkcnVnZSBrb25maWd1cmFjaW9uZSBzdGF2a2UgemEgcG92ZXppdmFuamUuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY29uZmlnIGl0ZW0/J30gPSAnRGEgbGkgc3R2YXJubyDFvmVsaXRlIGRhIG9icmnFoWV0ZSBvdnUga29uZmlndXJhY2lvbnUgc3Rhdmt1Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdOYXppdiBvdmUga29uZmlndXJhY2lvbmUgc3RhdmtlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICdOYXppdiBqZSB2ZcSHIHUgdXBvdHJlYmkgbmEga29uZmlndXJhY2lvbmltIHN0YXZrYW1hIGJyb2o6ICVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICdJc3RvcmlqYXQga29uZmlndXJhY2lvbmUgc3RhdmtlOiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICdTYWRyxb5haiBpc3RvcmlqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnVnJlbWUga3JlaXJhbmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20gdmlldyd9ID0gJ1V2ZcSHYW5pIHByZWdsZWQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ1BvZGXFoWF2YW5qZSBrb250ZWtzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnS29uZmlndXJhY2lvbmUgc3RhdmtlIHBvIHN0cmFuaSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJ0dlbmVyacSNa2EgdGFiZWxhIElUU00ga29uZmlndXJhY2lvbmUgc3RhdmtlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnUG9rcmVuaSBwcmV0cmFndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICdQcmV0cmHFvml0ZSBpIHUgcHJldGhvdG5pbSB2ZXJ6aWphbWE/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnS29uZmlndXJhY2lvbmEgc3RhdmthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjaWphIG8ga29uZmlndXJhY2lvbm9qIHN0YXZraSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICdUcmVudXRuaSBzdGF0dXMgcmFzcG9yZcSRaXZhbmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1Byb21lbmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICdQcmlrYcW+aSBqZWRudSB2ZXJ6aWp1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnUG9rYcW+aSBzdmUgdmVyemlqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnVmVyemlqYSAtIHN0YXR1cyBpbmNpZGVudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnVmVyemlqYSAtIHN0YXR1cyBwcmltZW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnQnJvaiB2ZXJ6aWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICdEZXRhbGppIHZlcnppamUga29uZmlndXJhY2lvbmUgc3RhdmtlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnU3ZvanN0dm8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICdOaWplIGRhdCBwcmlzdHVwIGtsYXNpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnUHJlZ2xlZDogSVRTTSBrb25maWd1cmFjaW9uZSBzdGF2a2UnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnTmlqZSBkYXQgQ29uZmlnSXRlbUlEISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJ1BvdHJlYm5hIGplIGJhciBqZWRuYSBpemFicmFuYSBrb25maWd1cmFjaW9uYSBzdGF2a2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnTmVtYXRlIHByYXZvIHVwaXNhIHphIG92dSBrb25maWd1cmFjaW9udSBzdGF2a3U6ICVzLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnS29uZmlndXJhY2lvbmEgc3RhdmthICIlcyIgbmlqZSBuYcSRZW5hIHUgYmF6aSBwb2RhdGFrYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICdOaWplIGJpbG8gbW9ndcSHZSBvYnJpc2F0aSBDb25maWdJdGVtSUQgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICdOaWplIHByb25hxJFlbmEgdmVyemlqYSB6YSBDb25maWdJdGVtSUQgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJ05pc3UgZGF0aSBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIGlsaSBDbGFzc0lEISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnTmlqZSBkYXQgcHJpc3R1cCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnTmlqZSBwcm9uYcSRZW5hIGRlZmluaWNpamEgemEga2xhc3UgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJ05lIG1vxb5lIHNlIHByaWthemF0aSBpc3RvcmlqYXQsIGplciBuaWplIGRhdCBDb25maWdJdGVtSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnTmUgbW/FvmUgc2UgcHJpa2F6YXRpIGlzdG9yaWphdCwgbmlqZSBkb3p2b2xqZW4gcHJpc3R1cCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJ05vdmEga29uZmlndXJhY2lvbmEgc3RhdmthIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJ05vdmEgdmVyemlqYSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnQcW+dXJpcmFubyBzdGFuamUgcmFzcG9yZWRhIChub3ZvPSVzLCBzdGFybz0lcykgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJ0HFvnVyaXJhbm8gc3RhbmplIGluY2lkZW50YSAobm92bz0lcywgc3Rhcm89JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnT2JyaXNhbmEga29uZmlndXJhY2lvbmEgc3RhdmthIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICdQb3ZlemFubyBzYSAlcyAodGlwPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnT2JyaXNhbmEgdmV6YSBzYSAlcyAodGlwPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnQcW+dXJpcmFuYSBkZWZpbmljaWphIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnQcW+dXJpcmFuIG5heml2IChub3ZpPSVzLCBzdGFyaT0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICdBxb51cmlyYW4gYXRyaWJ1dCVzIHNhICIlcyIgbmEgIiVzIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICdWZXJ6aWphICVzIGplIG9icmlzYW5hJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnTmlzdSBkYXRpIENvbmZpZ0l0ZW1JRCBpbGkgVmVyc2lvbklEISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICdOZSBtb8W+ZSBzZSBwcmlrYXphdGkga29uZmlndXJhY2lvbmEgc3RhdmthLCBuaWplIGRhdCBwcmlzdHVwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ0lEIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSAlcyBuaWplIG5hxJFlbiB1IGJhemkgcG9kYXRha2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnSWQgdmVyemlqZSAlcyBuaWplIG5hxJFlbiB1IGJhemkgcG9kYXRha2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICdLb25maWd1cmFjaW9uYSBzdGF2a2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJ8WhdGFtcGFudSBvZCBzdHJhbmUgJXMgdSAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJ05laXNwcmF2YW4gSUQga2xhc2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnTmlqZSBkYXQgSUQga2xhc2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJ30gPSAnTmlqZSBkYXQgcHJpc3R1cCBvdm9qIGtsYXNpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnTmVtYSByZXp1bHRhdGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnUmV6dWx0YXQgcHJldHJhZ2Uga29uZmlndXJhY2lvbmloIHN0YXZraSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnTmUgbW/FvmUgc2UgcHJpa2F6YXRpIHN0YXZrYSwgbmlqZSBkYXQgcHJpc3R1cCB6YSBvdnUga29uZmlndXJhY2lvbnUgc3Rhdmt1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJ29wZXJhdGl2bmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJ3Vwb3pvcmVuamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICdpbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnU3RhdHVzIHByaW1lbmUgb3ZlIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ1N0YXR1cyBpbmNpZGVudGEgb3ZlIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJ1ByaWthemFuZSBrb25maWd1cmFjaW9uZSBzdGF2a2UnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbS9MYXlvdXREYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZXR3ZWVuJ30gPSAnSXptZcSRdSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvT2JqZWN0QmFja2VuZC9JVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygb25lIGVsZW1lbnQnfSA9ICdNYWtzaW1hbG5pIGJyb2ogamVkbm9nIGVsZW1lbnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ1ByYXpuYSBwb2xqYSB1a2F6dWp1IGRhIMSHZSBha3R1ZWxuZSB2cmVkbm9zdGkgYml0aSB6YWRyxb5hbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ1ByZXNrb8SNZW5vJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW55J30gPSAnRmlybWEga2xpamVudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ1Nlcmlqc2tpIGJyb2onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnUHJvY2Vzb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnUkFNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ0hhcmQgZGlzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ0thcGFjaXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICdNcmXFvm5pIGFkYXB0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnSVAgcHJla28gREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAnSVAgYWRyZXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ0dyYWZpxI1raSBhZGFwdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJ0RydWdhIG9wcmVtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICdEYXR1bSBpc3RpY2FuamEgZ2FyYW5jaWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ0RhdHVtIGluc3RhbGFjaWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICdUZWxlZm9uIDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ1RlbGVmb24gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICdJbWVqbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdNcmXFvm5hIGFkcmVzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ1BvZG1yZcW+bmEgbWFza2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ01yZcW+bmkgcHJvbGF6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ1RpcCBsaWNlbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnTGljZW5jbmkga2xqdcSNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnS29sacSNaW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ0RhdHVtIGlzdGljYW5qYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ01lZGlqYSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnUmHEjXVuYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICdIYXJkdmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICdNcmXFvmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICdTb2Z0dmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdJc3Rla2xvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnT2Ryxb5hdmFuamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnUGxhbmlyYW5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ05hIHBvcHJhdmNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdSYXNob2RvdmFubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdSZWNlbnppamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1Rlc3QvUUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnTGFwdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdEZXNrdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdEcnVnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTW9uaXRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnxaB0YW1wYcSNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ1N2acSNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1J1dGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiBwcmlzdHVwbmEgdGHEjWthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ1NpZ3Vybm9zbmkgdXJlxJFhaic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnVXJlxJFhaiB6YSByZXplcnZuZSBrb3BpamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdNacWhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnVGFzdGF0dXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ0thbWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICdQcm9qZWt0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICdNb2RlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQSBrYXJ0aWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdVU0IgdXJlxJFhaic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdQcmlrbGp1xI1uYSBzdGFuaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICdTa2VuZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdaZ3JhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnS2FuY2VsYXJpamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdTcHJhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb29tJ30gPSAnU29iYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnUmVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ1JhZG5vIG1lc3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J091dGxldCd9ID0gJ1V0acSNbmljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBGYWNpbGl0eSd9ID0gJ0lUIG9iamVrYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICdXTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbGNvJ30gPSAnVGVsY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ0tsaWplbnRza2EgYXBsaWthY2lqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnUG9zcmVkbmnEjWtpIHByb2dyYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnU2VydmVyc2thIGFwbGlrYWNpamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnS2xpamVudHNraSBPUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICdTZXJ2ZXJza2kgT1MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ0FkbWluaXN0cmF0aXZuaSBhbGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0tvcmlzbmnEjWtpIGFsYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdVZ3JhxJFlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ1BvamVkaW5hxI1uYSBsaWNlbmNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnUG8ga29yaXNuaWt1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICdQbyBwcm9jZXNvcnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJ1BvIHNlcnZlcnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdQbyDEjXZvcnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdLb2xpxI1pbnNrZSBsaWNlbmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0tvbXBhbmlqc2thIGxpY2VuY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdSYXp2b2puYSBsaWNlbmNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdEZW1vbnN0cmFjaW9uaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICdWcmVtZW5za2kgb2dyYW5pxI1lbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdCZXNwbGF0bmkgKionOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICdPdHZvcmVuaSBrb2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnTmVvZ3JhbmnEjWVubyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdVIHJlZHUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICdEb2RlbGplbmUga29uZmlndXJhY2lvbmUgc3RhdmtlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnS29uZmlndXJhY2lvbmUgc3RhdmtlIGRvZGVsamVuZSBmaXJtaSBrbGlqZW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJ0tvbmZpZ3VyYWNpb25lIHN0YXZrZSBkb2RlbGplbmUga2xpamVudHUga29yaXNuaWt1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICdDTURCIHBvZGXFoWF2YW5qYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnUHJvdmVyYSBqZWRpbnN0dmVub2cgaW1lbmEgc2FtbyB1IG9rdmlydSBpc3RlIGtsYXNlIGtvbmZpZ3VyYWNpb25paCBzdGF2a2kgKFwna2xhc2FcJykgaWxpIGdsb2JhbG5vIChcJ2dsb2JhbG5vXCcpLCDFoXRvIHpuYcSNaSBkYSBqZSBzdmFrYSBwb3N0b2plxIdhIEtvbmZpZ3VyYWNpb25hIHN0YXZrYSB1emV0YSB1IG9iemlyIHUgcHJvdmVyaSBkdXBsaWthdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJ0tvbmZpZ3VyYWNpb25lIHN0YXZrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnRG9kYXZhbmplIGtvbmZpZ3VyYWNpb25lIHN0YXZrZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICdVcmXEkWl2YW5qZSBrb25maWd1cmFjaW9uZSBzdGF2a2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb2R1bCBkb2dhxJFhamEga29uZmlndXJhY2lvbmloIHN0YXZraSBrb2ppIG9tb2d1xIdhdmEgYmVsZcW+ZW5qZSB1IGlzdG9yaWphdCB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJ0lzdG9yaWphdCBrb25maWd1cmFjaW9uZSBzdGF2a2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJ8WgdGFtcGEga29uZmlndXJhY2lvbmUgc3RhdmtlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnRGV0YWxqbmkgcHJpa2F6IGtvbmZpZ3VyYWNpbmUgc3RhdmtlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnQnJvaiBrb25maWd1cmFjaW9uZSBzdGF2a2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnT2dyYW5pxI1lbmplIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gbGltaXQgcGVyIHBhZ2UuJ30gPSAnT2dyYW5pxI1lbmplIGtvbmZpZ3VyYWNpb25paCBzdGF2a2kgcG8gc3RyYW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnQmF6YSBwb2RhdGFrYSB1cHJhdmxqYW5qYSBrb25maWd1cmFjaWpvbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgbW9kdWxlLid9ID0gJ01vZHVsIG1hc292bmUgYWtjaWplIG5hIGtvbmZpZ3VyYWNpb25pbSBzdGF2a2FtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnS29uZmlndXJhY2lvbmEgc3RhdmthIHByZXRyYcW+dWplIHBvemFkaW5za2kgcnV0ZXIgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIGRlZmluaXRpb25zIGZvciBDb25maWd1cmF0aW9uIEl0ZW1zLid9ID0gJ0tyZWlyYW5qZSBpIHVwcmF2bGphbmplIGRlZmluaWNpamEgemEga29uZmlndXJhY2lvbmUgc3RhdmtlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnRGVmaW5pxaFlIGFrY2lqZSBnZGUgamUgZHVnbWUgcG9zdGF2a2kgZG9zdHVwbm8gdSBwb3ZlemFub20gZ3JhZmnEjWtvbSBlbGVtZW50dSBvYmpla3RhIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE1vbGltbyBkYSBpbWF0ZSBuYSB1bXUgZGEgb3ZlIEFrY2lqZSBtb3JhanUgZGEgYnVkdSByZWdpc3Ryb3ZhbmUgdSBzbGVkZcSHaW0gSlMgaSBDU1MgZGF0b3Rla2FtYTogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgaSBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmnFoWUgbmVvcGhvZG5lIGRvenZvbGUgemEga3JlaXJhbmplIElUU00ga29uZmlndXJhY2lvbmloIHN0YXZraSBrb3JpxaHEh2VuamVtIGdlbmVyacSNa29nIGludGVyZmVqc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdPZHJlxJF1amUgcG90cmVibmUgZG96dm9sZSB6YSBicmlzYW5qZSBJVFNNIGtvbmZpZ3VyYWNpb25paCBzdGF2a2kga3JveiBnZW5lcmnEjWtpIGludGVyZmVqcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBuZW9waG9kbmUgZG96dm9sZSB6YSBkb2JpamFuamUgSVRTTSBrb25maWd1cmFjaW9uaWggc3RhdmtpIGtvcmnFocSHZW5qZW0gZ2VuZXJpxI1rb2cgaW50ZXJmZWpzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBuZW9waG9kbmUgZG96dm9sZSB6YSBwcmV0cmFndSBJVFNNIGtvbmZpZ3VyYWNpb25paCBzdGF2a2kga29yacWhxIdlbmplbSBnZW5lcmnEjWtvZyBpbnRlcmZlanNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pxaFlIG5lb3Bob2RuZSBkb3p2b2xlIHphIGHFvnVyaXJhbmplIElUU00ga29uZmlndXJhY2lvbmloIHN0YXZraSBrb3JpxaHEh2VuamVtIGdlbmVyacSNa29nIGludGVyZmVqc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBtb2R1bCBwcmVnbGVkYSB6YSBtYWxpIHByaWtheiBsaXN0ZSBrb25maWd1cmFjaW9uaWggc3RhdmtpLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSByZWd1bGFybmUgaXpyYXplIHphIHN2YWt1IGtsYXN1IGtvbmZpZ3VyYWNpb25lIHN0YXZrZSByYWRpIHByb3ZlcmUgbmF6aXZhIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSBpIHByaWthemEgcHJpcGFkYWp1xIdpaCBwb3J1a2EgbyBncmXFoWthbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICdPZHJlxJF1amUgcG9kcmF6dW1ldmFuaSBwb2RvYmpla2F0IGtsYXNlIElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPZHJlxJF1amUgYnJvaiByZWRvdmEgemEgZWRpdG9yIGRlZmluaWNpamUgQ0kgdSBhZG1pbmlzdHJhdGl2bm9tIGludGVyZmVqc3UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSByZWRvc2xlZCBpbmNpZGVudG5paCBzdGFuamEgb2Qgdmlzb2tvZyAobnByIGtyaXRpxI1ubykgZG8gbmlza29nIChucHIgZnVua2Npb25hbG5vKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICdPZHJlxJF1amUgcmVsZXZhbnRuYSBzdGFuamEgcmFzcG9yZcSRaXZhbmphIGdkZSBwb3ZlemFuaSB0aWtldGkgbW9ndSBkYSB1dGnEjXUgbmEgc3RhdHVzIENJLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBncmFuaWN1IHByZXRyYWdlIHphIGVrcmFuIEFnZW50SVRTTUNvbmZpZ0l0ZW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnRGVmaW5pxaFlIGdyYW5pY3UgcHJldHJhZ2UgemEgZWtyYW4gQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnT2RyZcSRdWplIHByaWthemFuZSBrb2xvbmUgdSBwcmVnbGVkdSBrb25maWd1cmFjaW9uaWggc3RhdmtpLiBPdmEgb3BjaWplIG5lbWEgdXRpY2FqIG5hIHBvemljaWplIGtvbG9uYS4gTmFwb21lbmE6IHVrb2xpa28gamUgaXphYnJhbiBmaWx0ZXIgXCdTdmVcJyBrbGFzYSBrb2xvbmUgamUgdXZlayBkb3N0dXBuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5pxaFlIHByaWthemFuZSBrb2xvbmUgdSBwcmV0cmF6aSBrb25maWd1cmFjaW9uaWggc3RhdmtpLiBPdmEgb3BjaWplIG5lbWEgdXRpY2FqIG5hIHBvemljaWplIGtvbG9uYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnRGVmaW5pxaFlIHByaWthemFuZSBrb2xvbmUga29uZmlndXJhY2lvbmloIHN0YXZraSB1IHByZWdsZWR1IHUgemF2aXNub3N0aSBvZCBrbGFzZS4gU3Zha2kgdW5vcyBtb3JhIHNhZHLFvmF0aSBwcmVmaWtzIHNhIG5heml2b20ga2xhc2UgaSBkdm90YcSNa29tIChucHIuIENvbXB1dGVyOjopLiBQb3N0b2ppIHBhciBhdHJpYnV0YSBrb2ppIHN1IHphamVkbmnEjWtpIHphIHN2ZSBrbGFzZSAobnByLiB6YSBrbGFzdSBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gWmEgcHJpa2F6IHBvamVkaW5hxI1uaWggYXRyaWJ1dGEgaXogZGVmaW5pY2lqZSwgbW9yYXRlIGtvcmlzdGl0aSBzbGVkZcSHdSDFoWVtdSAocHJpbWVyIHphIGtsYXN1IENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIFVrb2xpa28gbmUgcG9zdG9qaSB1bm9zIHphIHBvamVkaW5hxI1udSBrbGFzdSwgYmnEh2UgcHJpa2F6YW5lIHBvZHJhenVtZXZhbmUga29sb25lIGRlZmluaXNhbmUgdSBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBwcmlrYXphbmUga29sb25lIGtvbmZpZ3VyYWNpb25paCBzdGF2a2kgdSBwcmV0cmF6aSB1IHphdmlzbm9zdGkgb2Qga2xhc2UuIFN2YWtpIHVub3MgbW9yYSBzYWRyxb5hdGkgcHJlZmlrcyBzYSBuYXppdm9tIGtsYXNlIGkgZHZvdGHEjWtvbSAobnByLiBDb21wdXRlcjo6KS4gUG9zdG9qaSBwYXIgYXRyaWJ1dGEga29qaSBzdSB6YWplZG5pxI1raSB6YSBzdmUga2xhc2UgKG5wci4gemEga2xhc3UgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFphIHByaWtheiBwb2plZGluYcSNbmloIGF0cmlidXRhIGl6IGRlZmluaWNpamUsIG1vcmF0ZSBrb3Jpc3RpdGkgc2xlZGXEh3UgxaFlbXUgKHByaW1lciB6YSBrbGFzdSBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBVa29saWtvIG5lIHBvc3RvamkgdW5vcyB6YSBwb2plZGluYcSNbnUga2xhc3UsIGJpxIdlIHByaWthemFuZSBwb2RyYXp1bWV2YW5lIGtvbG9uZSBkZWZpbmlzYW5lIHUgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICdEZWZpbmnFoWUgcHJpa2F6YW5lIGtvbG9uZSBrb25maWd1cmFjaW9uaWggc3RhdmtpIHUgZG9kYXRrdSBrb21hbmRuZSB0YWJsZSB1IHphdmlzbm9zdGkgb2Qga2xhc2UuIFN2YWtpIHVub3MgbW9yYSBzYWRyxb5hdGkgcHJlZmlrcyBzYSBuYXppdm9tIGtsYXNlIGkgZHZvdGHEjWtvbSAobnByLiBDb21wdXRlcjo6KS4gUG9zdG9qaSBwYXIgYXRyaWJ1dGEga29qaSBzdSB6YWplZG5pxI1raSB6YSBzdmUga2xhc2UgKG5wci4gemEga2xhc3UgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFphIHByaWtheiBwb2plZGluYcSNbmloIGF0cmlidXRhIGl6IGRlZmluaWNpamUsIG1vcmF0ZSBrb3Jpc3RpdGkgc2xlZGXEh3UgxaFlbXUgKHByaW1lciB6YSBrbGFzdSBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBVa29saWtvIG5lIHBvc3RvamkgdW5vcyB6YSBwb2plZGluYcSNbnUga2xhc3UsIGJpxIdlIHByaWthemFuZSBwb2RyYXp1bWV2YW5lIGtvbG9uZSBkZWZpbmlzYW5lIHUgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtsanXEjSBEZWZhdWx0Q29sdW1ucykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnRGVmaW5pxaFlIHByaWthemFuZSBrb2xvbmUga29uZmlndXJhY2lvbmloIHN0YXZraSB1IHRhYmVsaSB2ZXphIHUgemF2aXNub3N0aSBvZCBrbGFzZS4gVWtvbGlrbyBuZSBwb3N0b2ppIHVub3MgemEgcG9qZWRpbmHEjW51IGtsYXN1LCBiacSHZSBwcmlrYXphbmUgcG9kcmF6dW1ldmFuZSBrb2xvbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICdEZWZpbmnFoWUgcHJpa2F6YW5lIGtvbG9uZSBrb25maWd1cmFjaW9uaWggc3RhdmtpIHUgdGFiZWxpIHZlemEgdSB6YXZpc25vc3RpIG9kIGtsYXNlLiBTdmFraSB1bm9zIG1vcmEgc2FkcsW+YXRpIHByZWZpa3Mgc2EgbmF6aXZvbSBrbGFzZSBpIGR2b3RhxI1rb20gKG5wci4gQ29tcHV0ZXI6OikuIFBvc3RvamkgcGFyIGF0cmlidXRhIGtvamkgc3UgemFqZWRuacSNa2kgemEgc3ZlIGtsYXNlIChucHIuIHphIGtsYXN1IENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBaYSBwcmlrYXogcG9qZWRpbmHEjW5paCBhdHJpYnV0YSBpeiBkZWZpbmljaWplLCBtb3JhdGUga29yaXN0aXRpIHNsZWRlxId1IMWhZW11IChwcmltZXIgemEga2xhc3UgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gVWtvbGlrbyBuZSBwb3N0b2ppIHVub3MgemEgcG9qZWRpbmHEjW51IGtsYXN1LCBiacSHZSBwcmlrYXphbmUgcG9kcmF6dW1ldmFuZSBrb2xvbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBrb2ppIHRpcCB2ZXplIChnbGVkYW5vIGl6IHBlcnNwZWt0aXZlIHRpa2V0YSkgbW/FvmUgZGEgdXRpxI1lIG5hIHBvdmV6YW51IENJLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBrb2ppIHRpcCB0aWtldGEgbW/FvmUgZGEgdXRpxI1lIG5hIHN0YXR1cyBwb3ZlemFuZSBDSS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ0JyaXNhbmplIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnQm9qYSBzdGF0dXNhIHJhc3BvcmXEkWl2YW5qYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaWthdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICdPbW9ndcSHYXZhIG1hc292bnUgYWtjaWp1IG5hIGtvbmZpZ3VyYWNpb25pbSBzdGF2a2FtYSB1IHByaXN0dXBub20gc2lzdGVtdSBvcGVyYXRlcmEgbmEgdmnFoWUgb2QgamVkbmUgc3RhdmtlIGlzdG92cmVtZW5vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnQWt0aXZpcmEgc3ZvanN0dm8gbWFzb3ZuZSBha2NpamUgbmEga29uZmlnaXJhY2lvbmltIHN0YXZrYW1hIHNhbW8gemEgaXpsaXN0YW5lIGdydXBlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnQWt0aXZpcmEvZGVha3RpdmlyYSBmdW5rY2lqdSB6YSBwcm92ZXJ1IGplZGluc3R2ZW5vc3RpIGltYW5hIGtvbmZpZ3VyYWNpb25paCBzdGF2a2kuIFByZSBha3RpdmlyYW5qYSBvdmUgb3BjaWplIHRyZWJhdGUgcHJvdmVyaXRpIHUgdmHFoWVtIHNpc3RlbXUgcG9zdG9qYW5qZSBkdXBsaWthdGEgbmEgcG9zdG9qZcSHaW0gc3RhdmthbWEuIFRvIG1vxb5ldGUgdXJhZGl0aSBwb21vxId1IHNrcmlwdGEgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJ01vZHVsIGRvZ2HEkWFqYSB6YSBwb2RlxaFhdmFuamUgc3RhdHVzYSBrb25maWd1cmFjaW9uaWggc3RhdmtpIHByaWxpa29tIHBvc3RhdmxqYW5qYSB2ZXphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJ1ByZWdsZWQgSVRTTSBrb25maWd1cmFjaW9uZSBzdGF2a2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnTW9kdWwgemEgcHJvdmVydSBncnVwZSBvZGdvdm9ybmUgemEga2xhc3UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnTW9kdWwgemEgcHJvdmVydSBncnVwZSBvZGdvdm9ybmUgemEga29uZmlndXJhY2lvbnUgc3Rhdmt1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJ01vZHVsIHphIGdlbmVyaXNhbmplIHN0YXRpc3Rpa2UgSVRTTSBrb25maWd1cmFjaW9uaWggc3RhdmtpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdSZWdpc3RyYWNpamEgbW9kdWxhIG9iamVrdGEgemEgZG9kYXRhayB1dm96L2l6dm96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICdQcmVnbGVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXJhbWV0cmkgemEgcG96YWRpbnNraSBwcmlrYXoga29udHJvbG5lIHRhYmxlIGxpc3RlIGtvbmZpZ3VyYWNpb25paCBzdGF2a2kgZmlybWUga2xpamVudGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4gIkxpbWl0IiBkZWZpbmnFoWUgcG9kcmF6dW1ldmFuaSBicm9qIHByaWthemFuaWggc3RhdmtpLiAiR3JvdXAiIHNlIGtvcmlzdGkgZGEgb2dyYW5pxI1pIHByaXN0dXAgZG9kYXRrdSAobnByLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgb2RyZcSRdWplIGRhIGxpIGplIGRvZGF0YWsgcG9kcmF6dW1ldmFubyBha3RpdmlyYW4gaWxpIGRhIGplIG5lb3Bob2RubyBkYSBnYSBrb3Jpc25payBtYW51ZWxubyBha3RpdmlyYS4gIkNhY2hlVFRMTG9jYWwiIGplIHZyZW1lIHUgbWludXRpbWEgemEga2XFoWlyYW5qZSBkb2RhdGthLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSB6YSBib2plIHN0YXR1c2EgcHJpbWVuZSBuYSBwcmlrYXp1IHBvc3RhdmtpIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGFyYW1ldHJpIHphIHN0YXR1c2UgcHJpbWVuZSBuYSBwcmlrYXp1IHBvc3RhdmtpIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSB6YSBhdHJpYnV0ZSB1em9ya2EgZ3J1cGUgemEgZG96dm9sZSBvcMWhdGVnIGthdGFsb2dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSB6YSBzdHJhbmljZSAobmEga29qaW1hIHN1IGtvbmZpZ3VyYWNpb25lIHN0YXZrZSBwcmlrYXphbmUpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnR3J1cGEgcHJpc3R1cGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BvdHJlYm5lIGRvenZvbGUgemEgdXBvdHJlYnUgZWtyYW5hIElUU00ga29uZmlndXJhY2lvbmUgc3RhdmtlIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUG90cmVibmUgZG96dm9sZSB6YSB1cG90cmVidSBla3JhbmEgcHJldHJhZ2UgSVRTTSBrb25maWd1cmFjaW9uZSBzdGF2a2UgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUG90cmVibmUgZG96dm9sZSB6YSB1cG90cmVidSBla3JhbmEgZGV0YWxub2cgcHJpa2F6YSBJVFNNIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BvdHJlYm5lIGRvenZvbGUgemEgdXBvdHJlYnUgZWtyYW5hIGRvZGF2YW5qYSBJVFNNIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQb3RyZWJuZSBkb3p2b2xlIHphIHVwb3RyZWJ1IGVrcmFuYSBpem1lbmUgSVRTTSBrb25maWd1cmFjaW9uZSBzdGF2a2UgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUG90cmVibmUgZG96dm9sZSB6YSB1cG90cmVidSBla3JhbmEgaXN0b3JpamF0YSBJVFNNIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUG90cmVibmUgZG96dm9sZSB6YSB1cG90cmVidSBla3JhbmEgxaF0YW1wZSBJVFNNIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgYnJpc2FuamUga29uZmlndXJhY2lvbmUgc3RhdmtlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJ1ByZXRyYWdhIGtvbmZpZ3VyYWNpb25paCBzdGF2a2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJ0JpcmEgbW9kdWwgb3BlcmF0b3JhIGF1dG9tYXRza29nIHV2ZcSHYW5qYSBrb25maWd1cmFjaW9uZSBzdGF2a2UuIE9wZXJhdG9yIGF1dG9tYXRza29nIHV2ZcSHYW5qYSBwb3ZlxIdhdmEgYnJvaiBzdGF2a2UsIFN5c3RlbUlELCBDb25maWdJdGVtQ2xhc3NJRCBpIGtvcmnFocSHZW5pIGJyb2phxI0uIEZvcm1hdCBqZSAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuYnJvamHEjSIsIG5wciAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnUG9zdGF2bGphIHN0YW5qZSBpbmNpZGVudGEga29uZmlndXJhY2lvbmUgc3RhdmtlIGthZGEgamUgdGlrZXQgcG92ZXphbiBzYSBzdGF2a29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBzdGF0dXMgcHJpbWVuZSBuYSBla3JhbnUgbWFzb3ZuZSBha2NpamUga29uZmlndXJhY2lvbmUgc3RhdmtlIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBzdGF0dXMgaW5jaWRlbnRhIG5hIGVrcmFudSBtYXNvdm5lIGFrY2lqZSBrb25maWd1cmFjaW9uZSBzdGF2a2UgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSBrb2phIG9tb2d1xIdhdmEgcG92ZXppdmFuamUga29uZmlndXJhY2lvbmUgc3RhdmtlIHNhIGRydWdpbSBvYmpla3RvbSBuYSBkZXRhbGpub20gcHJpa2F6dSBrb25maWd1cmFjaWplIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUgemEgcHJpc3R1cCBpc3RvcmlqYXR1IGtvbmZpZ3VyYWNpb25lIHN0YXZrZSBuYSBwcmVnbGVkdSBrb25maWd1cmFjaW9uZSBzdGF2a2UgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUgemEgcHJpc3R1cCBpc3RvcmlqYXR1IGtvbmZpZ3VyYWNpb25lIHN0YXZrZSBuYSBkZXRhbGpub20gcHJpa2F6dSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1UgbWVuaWp1IHByaWthenVqZSB2ZXp1IHphIGJyaXNhbmplIGtvbmZpZ3VyYWNpb25lIHN0YXZrZSBuYSBuamVub20gZGV0YWxqbm9tIHByaWthenUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSB6YSB1bW5vxb5hdmFuamUga29uZmlndXJhY2lvbmUgc3RhdmtlIG5hIHByZWdsZWR1IGtvbmZpZ3VyYWNpb25lIHN0YXZrZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSB6YSB1bW5vxb5hdmFuamUga29uZmlndXJhY2lvbmUgc3RhdmtlIG5hIG5qZW5vbSBkZXRhbGpub20gcHJpa2F6dSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUgemEgaXptZW51IGtvbmZpZ3VyYWNpb25lIHN0YXZrZSBuYSBuamVub20gZGV0YWxqbm9tIHByaWthenUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1UgbWVuaWp1IHByaWthenVqZSB2ZXp1IHphIHBvdnJhdGFrIG5hIGRldGFsam5pIHByaWtheiBrb25maWd1cmFjaW9uZSBzdGF2a2UgIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUgemEgxaF0YW1wdSBrb25maWd1cmFjaW9uZSBzdGF2a2UgbmEgbmplbm9tIGRldGFsam5vbSBwcmlrYXp1IHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUgemEgZGV0YWxqbmkgcHJpa2F6IGtvbmZpZ3VyYWNpb25lIHN0YXZrZSBuYSBwcmVnbGVkdSBrb25maWd1cmFjaW9uZSBzdGF2a2UgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1ByaWthenVqZSBpc3RvcmlqYXQga29uZmlndXJhY2lvbmUgc3RhdmtlIChvYnJudXQgcmVkb3NsZWQpIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICdJZGVudGlmaWthdG9yIHphIGtvbmZpZ3VyYWNpb251IHN0YXZrdSwgbnByLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gUG9kcmF6dW1ldmFubyBqZSBDb25maWdJdGVtIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICdrbGFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICdnbG9iYWxubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJ3Bvc3QtcHJvZHVrY2lqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAncHJlLXByb2R1a2NpamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJ3Byb2R1a2NpamEnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN2X0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdIYW50ZXJpbmcgYXYga29uZmlndXJhdGlvbnNlbmhldGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnw4RuZHJhIGtsYXNzZGVmaW5pdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uJ30gPSAnRGVmaW5pdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICfDhG5kcmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50bMOkZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0RyaWZ0bMOkZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICdLbGFzcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICdEcmlmdGzDpGdlc3R5cGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdOdXZhcmFuZGUgaW5jaWRlbnRsw6RnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdOdXZhcmFuZGUgdHlwIGF2IGluY2lkZW50bMOkZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnU2VuYXN0IMOkbmRyYWQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnS29uZmlndXJhdGlvbnNlbmhldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIENsYXNzZXMnfSA9ICdGaWx0cmVyYSBrbGFzc2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ1bDpGxqIGVuIGtsYXNzIGZyw6VuIGxpc3RhbiBmw7ZyIGF0dCBza2FwYSBlbiBueSBrb25maWd1cmF0aW9uc2VuaGV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQnVsawogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDb25maWdJdGVtIEJ1bGsgQWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUnfSA9ICdEcmlmdGzDpGdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlJ30gPSAnSW5jaWRlbnRsw6RnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICdMw6Rua2EgdGlsbCBhbm5hbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENvbmZpZ3VyYXRpb24gSXRlbSBudW1iZXIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbmZpZyBpdGVtPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdOYW1uZXQgcMOlIGRlbm5hIGtvbmZpZ3VyYXRpb25zZW5oZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJ05hbW5ldCBhbnbDpG5kcyByZWRhbiBpIGtvbmZpZ3VyYXRpb25zZW5oZXRlciBtZWQgZsO2cmxqYW5kZSBudW1tZXI6ICVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBDb250ZW50J30gPSAnSGlzdG9yaWtpbm5laMOlbGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJ1RpZHB1bmt0IGbDtnIgc2thcGFuZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWm9vbSB2aWV3J30gPSAnRm9rdXN2eSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnQW5wYXNzYSB2eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICdLb25maWd1cmF0aW9uc2VuaGV0ZXIgcGVyIHNpZGEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICdVdGbDtnIgc8O2a25pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnU8O2ayDDpHZlbiBpIHRpZGlnYXJlIHZlcnNpb25lcj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICdLb25maWd1cmF0aW9uc2VuaGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF0aW9uIG9tIGtvbmZpZ3VyYXRpb25zZW5oZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnTnV2YXJhbmRlIGRyaWZ0bMOkZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnU2VuYXN0IMOkbmRyYWQgYXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJ1Zpc2EgZW4gdmVyc2lvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJ1Zpc2EgYWxsYSB2ZXJzaW9uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50bMOkZ2UgZsO2ciB2ZXJzaW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJ1ZlcnNpb25zbnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICdWZXJzaW9uc2luZm9ybWF0aW9uIGbDtnIga29uZmlndXJhdGlvbnNlbmhldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ0VnZW5za2FwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ0tvbmZpZ3VyYXRpb25zZW5oZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnSW5nZXQgcmVzdWx0YXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnRHJpZnRsw6RnZSBmw7ZyIGtvbmZpZ3VyYXRpb25zZW5oZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdJbmNpZGVudGzDpGdlIGbDtnIga29uZmlndXJhdGlvbnNlbmhldCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICdNZWxsYW4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnTWF4IGFudGFsIGF2IGV0dCBlbGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ1RvbW1hIGbDpGx0IGFuZ2VyIGF0dCB0aWRpZ2FyZSB2w6RyZGVuIHNrYSBhbnbDpG5kYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdIb3BwYWRlIMO2dmVyJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICdNb2RlbGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnU2VyaWVudW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1BVJ30gPSAnQ1BVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhbSd9ID0gJ1JBTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkIERpc2snfSA9ICdIw6VyZGRpc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdLYXBhY2l0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGFwdGVyJ30gPSAnTsOkdHZlcmtza29ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCDDtnZlciBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUC1hZHJlc3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnR3JhZmlra29ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICdBbm5hbiB1dHJ1c3RuaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ1Npc3RhIGRhZyBmw7ZyIGdhcmFudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnSW5zdGFsbGF0aW9uc2RhdHVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICdUZWxlZm9uIDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ1RlbGVmb24gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnTsOkdHZlcmtzYWRyZXNzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnU3VibsOkdG1hc2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJ0dhdGV3YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnTGljZW5zdHlwZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdMaWNlbnNueWNrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICdNw6RuZ2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnTMO2cGVyIHV0IGRhdHVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTWVkaWEnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICdMw7ZwdCB1dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ1VuZGVyaMOlbGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICdQaWxvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnUGxhbmxhZ2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnUmVwZXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnUGVuc2lvbmVyYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnw5Z2ZXJzeW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ1Rlc3QvUUEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnTGFwdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdEZXNrdG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICdTZXJ2ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbm5hbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTW9uaXRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnU2tyaXZhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnU3dpdGNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJ1JvdXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ1dMQU4gQWNjZXNzcHVua3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnU8Oka2VyaGV0c3V0cnVzdG5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ0JhY2t1cGVuaGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnTXVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnVGFuZ2VudGJvcmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnS2FtZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ0JlYW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BDTUNJQSBDYXJkJ30gPSAnUENNQ0lBLWtvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVVNCIERldmljZSd9ID0gJ1VTQi1lbmhldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdEb2NrbmluZ3NzdGF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICdTY2FubmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnQnlnZ25hZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICdLb250b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdWw6VuaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICdSdW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ1JhY2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya3BsYWNlJ30gPSAnQXJiZXRzcGxhdHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnVsOkZ2drb250YWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnSVQtYnlnZ25hZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ1dMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICdUZWxjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAnS2xpZW50YXBwbGlrYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ01pZGRsZXdhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAnU2VydmVyYXBwbGlrYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnS2xpZW50LU9TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ1NlcnZlci1PUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnQWRtaW5pc3RyYXRpb25zdmVya3R5Zyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICdBbnbDpG5kYXJ2ZXJrdHlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnRW1iZWRkZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdFbnN0YWthIGxpY2Vucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ1BlciBhbnbDpG5kYXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICdQZXIgcHJvY2Vzc29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICdQZXIgc2VydmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAnUGVyIG5vZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJ1ZvbHltbGljZW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0VudGVycHJpc2VsaWNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICdVdHZlY2tsYXJsaWNlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ0RlbW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnVGlkc2JlZ3LDpG5zYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICdGcmVld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ8OWcHBlbiBrw6RsbGtvZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdPYmVncsOkbnNhZCc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnS29uZmlndXJhdGlvbnNlbmhldGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICdCZWdyw6Ruc25pbmcga29uZmlndXJhdGlvbnNlbmhldGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnU2thcGEgb2NoIGhhbnRlcmEgZGVmaW5pdGlvbmVyIGbDtnIga29uZmlndXJhdGlvbnNlbmhldGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnQW5nZXIgYW50YWwgcmFkZXIgZsO2ciBLRS1lZGl0b3JuIGkgYWRtaW5ncsOkbnNzbml0dGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uIE5vdGU6IENsYXNzIGNvbHVtbiBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGZpbHRlciBcJ0FsbFwnIGlzIHNlbGVjdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIGxpbmsgKG5hbWVkIGZyb20gdGhlIHRpY2tldCBwZXJzcGVjdGl2ZSkgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaWNlcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJhciBmw7ZyIGV4ZW1wZWwgcMOlIGJlaMO2cmlnaGV0c2VncnVwcGVyIGkgZ3J1bmRrYXRhbG9nZW5zIGF0dHJpYnV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN3X0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICdVc2FuaWRpIHdhIHVzaW1hbWl6aSB3YSBraXBlbmdlbGUgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJ30gPSAnQmFkaWxpIHVmYWZhbnV6aSB3YSB0YWJha2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ1VmYWZhbnV6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICdCYWRpbGlzaGEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0hhbGkgeWEgdHVraW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSd9ID0gJ0hhbGkgeWEga3V0dW1pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGFzcyd9ID0gJ1RhYmFrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIFR5cGUnfSA9ICdBaW5hIHlhIGhhbGkgeWEga3V0dW1pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnSGFsaSB5YSB0dWtpbyBsYSBzYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ0FpbmEgeWEgaGFsaSB5YSB0dWtpbyBsYSBzYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ013aXNobyBrdWJhZGlsaXNod2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnVXNhbmlkaSB3YSBLaXBlbmdlbGUgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ0NodWphIGt3YSBhamlsaSB5YSBtYXRhYmFrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICdDaGFndWEgdGFiYWthIGt1dG9rYSBrd2VueWUgb3JvZGhhIHlhIGt1dGVuZ2VuZXphIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSBraXB5YS4gJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtQnVsawogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDb25maWdJdGVtIEJ1bGsgQWN0aW9uJ30gPSAnVml0ZW5kbyB2eWEgd2luZ2kgdnlhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlJ30gPSAnSGFsaSB5YSBrdXR1bWlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlJ30gPSAnSGFsaSB5YSB0dWtpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICdVbmdhbmlzaGEgbmEgbnlpbmdpbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJ05hbWJhIHlhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSBuIGJhdGlsaSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG51bWJlciBvZiBhbm90aGVyIENvbmZpZ3VyYXRpb24gSXRlbSB0byBsaW5rIHdpdGguJ30gPSAnTmFtYmEgeWEga2lwZW5nZWxlIGtpbmdpbmUgY2hhIHVzYW5pZGkgY2hhIGt1dW5nYW5pc2hhIG5hY2hvLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbmZpZyBpdGVtPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdKaW5hIGxhIGhpa2kga2lwZW5nZWxlIGNoYSB1c2FuaWRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICdKaW5hIGhpbGkgdGF5YXJpIGxpbWVrd2lzaGEgdHVtaWthbmEga2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoZW55ZSBuYW1iYSBpKHopZnVhdGF6bzogJXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICdNYXVkaHVpIHlhIGhpc3RvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICdNdWRhIHdhIGt1dGVuZ2VuZXphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20gdmlldyd9ID0gJ01hbmRoYXJpIGlsaXlva3V6d2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ01pcGFuZ2lsaW8geWEgbXVrdGFkaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAnVmlwZW5nZWxlIHZ5YSB1c2FuaWRpIGt3YSBraWxhIHVrdXJ1c2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICdUYWZ1dGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnUGlhIHRhZnV0YSBrYXRpa2EgdG9sZW8gbGlsaWxvcGl0YT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICdLaXBlbmdlbGUgY2hhIFVzYW5pZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnVGFhcmlmYSB6YSBraXBlbmdlbGUgY2hhIHVzYW5pZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAnSGFsaSB5YSBrdXR1bWlhIHlhIHNhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnTXdpc2hvIGt1YmFkaWxpc2h3YSBuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAnT255ZXNoYSB0b2xlbyBtb2phJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAnT255ZXNoYSBtYXRvbGVvIHlvdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ1RvbGVvIGxhIGhhbGkgeWEgdHVraW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAnSGFsaSB5YSB0b2xlbyBsYSBrdXR1bWlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAnTmFtYmEgeWEgdG9sZW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ1RvbGVvIGxhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSBrd2EgdW5kYW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ01hbGknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAnS2lwZW5nZWxlIGNoYSB1c2FuaWRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ0hhbGkgeWEgbWF0dW1pemkgeWEgaGlpIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICdIYWxpIHlhIHR1a2lvIHlhIGhpa2kga2lwZW5nZWxlIGNoYSB1c2FuaWRpJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJ0thdGlrYXRpJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ0tpbWEgY2hhIGp1dSBjaGEgbmFtYmEgeWEgZWxlbWVudGkgbW9qYXdhcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0J30gPSAnVWdhIHppbGl6b3dhemkgemluYW9ueWVzaGEga3dhbWJhIHRoYW1hbmkgemEgc2FzYSB6aW1ld2Vrd2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdSdWt3YSc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnTWZhbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnTmFtYmEgdGFtYnVsaXNoaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdDUFUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnUmFtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ0Rpc2tpIGt1dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ1V3ZXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ0FkYXB0YSB5YSBtdGFuZGFvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0lQIGt3YSBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdBbndhbmkgeWEgSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnQWRhcHRhIHlhIE1jaG9ybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICdWaWZhYSB2aW5naW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ1RhcmVoZSB5YSBrdWlzaGEga3cgYXVkaGFtaW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICdUYXJlaGUgeWEga3VzYWtpbmlzaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ1NpbXUgeWEgMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnU2ltdSB5YSAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICdBbndhbmkgeWEgbXRhbmRhbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ1N1Ym5ldCBtYXNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdLaWNoYW5nYW5pc2hpIG10YW5kYW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnQWluYSB5YSBsZXNlbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICdOZW5vIGt1dSBsYSBsZXNlbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICdXaW5naSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICdUYXJlaGUgeWEgbXdpc2hvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnTWlkaWEnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnTXRhbmRhbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnSW1laXNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ01hdGVuZ2VuZXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnS3dhbnphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICdJbGl5b3Bhbmd3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICdSZWtlYmlzaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ1N0YWFmdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICdNYXBpdGlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICdKYXJpYmlvLyBNYXN3YWxpIG5hIE1hamlidSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICdLb21weXV0YSB5YSBta29ub25pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICdFbmVvIGthemknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnUERBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ1NldmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdFbmdpbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ01vbml0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnS2ljaGFwaXNoaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICdTd2ljaGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAnS2lwYW5nYSBuamlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnS2l1bmdvIHVmaWtpdnUgY2hhIFdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnS2lmYWEgY2hhIHVsaW56aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAnS2lmYWEgY2hhIGNoZWxlem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICdLaXBhbnlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAnQm9hYm9ueWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnS2FtZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ1Byb2plY3Rvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ01vZGVtdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ0thZGkgeWEgUENNQ0lBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICdLaWZhYSBjaGEgVVNCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ0tpdHVvIGVnZXNoaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnS2l0YW1iYXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnSmVuZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnT2Zpc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdTYWthZnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ0NodW1iYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnUmFjayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICdFbmVvIGxhIGthemknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAnU2VoZW11IHlhIGt1dG9rZWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICdQcm9ncmFtdS10dW1pemkgYSBtdGVqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnTWlkZGxld2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICdTZXZhIHlhIHByb2dyYW11LXR1bWl6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICdPUyB5YSBtdGVqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICdPUyB5YSBzZXZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICdLaWZhYSBjaGEga2lvbmdvemknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnS2lmYWEgY2hhIG10dW1pYWppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnUGFraWNod2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdMZXNlbmkgbW9qYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ0t3YSBtdHVtaWFqaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnS3dhIGtpY2hha2F0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnS3dhIHNldmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICdLd2EgZnVuZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdMZXNlbmkgeWEgc2F1dGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnTGVzZW5pIHlhIEVudGVycHJpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0xlc2VuaSB5YSBtdGVuZ2VuZXphamknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJ09ueWVzaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnTXVkYSB1bWV6dWlsaXdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnUHJvZ3JhbXUgeWEgYnVyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ0NoYW56byBjaGEgd2F6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdIYWluYSBraWtvbW8nOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnU2F3YSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICdBbmdhbGlhIG1hamluYSB5YSBraXBla2VlIHR1IGthdGlrYSB0YWJha2Egc2F3YSBsYSBraXBlbmdlbGUgY2hhIHVzYW5pZGkgKFwnVGFiYWthXCcpIGF1IHpvdGUgKFwnWm90ZVwnKSwgYW1iYXlvIGluYW1hYW5pc2hhIGtpbGEga2lwZW5nZWxlIGNoYSB1c2FuaWRpIGtpbGljaG9wbyBraW1lanVtdWlzaHdhIHdha2F0aSBuYWthbGEgcGFjaGEgemluYWFuZ2FsaXdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMnfSA9ICdWaXBlbmdlbGUgdnlhIHVzYW5pZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gYWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBlZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBldmVudCBtb2R1bGUgdGhhdCBlbmFibGVzIGxvZ2dpbmcgdG8gaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2FuaWRpIG1vZHVsaSB5YSB0dWtpbyB5YSBraXBlbmdlbGUgYW1iYWNobyBraW5hd2V6ZXNoYSBrdWluZ2lhIGthdGlrYSBoaXN0b3JpYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSB6b29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBMaW1pdCd9ID0gJ0tpa29tbyBjaGEga2lwZW5nZWxlIGNoYSB1c2FuaWRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0tpcGFuZ2EgbmppYSBjaGEgbWF6aW5naXJhIHlhIG55dW1hIGNoYSB1dGFmdXRhamkgd2Ega2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBraW9sZXN1cmEgY2hhIHdha2FsYS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICdUZW5nZW5lemEgbmEgc2ltYW1pYSB1ZmFmYW51emkgd2EgdmlwZW5nZWxlIHZ5YSB1c2FuaWRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHJ1aHVzYSB6aW5hem9oaXRhamlrYSBrdXRlbmdlbmV6YSB2aXBlbmdlbGUgdnlhIHVzYW5pZGkgdnlhIElUU00ga3dhIGt1dHVtaWEga2lvbGVzdXJhIGNoYSBqZW5lcmlraS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBkZWxldGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hZmFmYW51YSBydWh1c2EgemluYXpvaGl0YWppa2Ega3VwYXRhdmlwZW5nZWxlIHZ5YSB1c2FuaWRpIHZ5YSBJVFNNIGt3YSBrdXR1bWlhIGtpb2xlc3VyYSBjaGEgamVuZXJpa2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VhcmNoIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHJ1aHVzYSB6aW5hem9oaXRhamlrYSBrdXRhZnV0YSB2aXBlbmdlbGUgdnlhIHVzYW5pZGkgdnlhIElUU00ga3dhIGt1dHVtaWEga2lvbGVzdXJhIGNoYSBqZW5lcmlraS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgcnVodXNhIHppbmF6b2hpdGFqaWthIGt1c2FzaXNoYSB2aXBlbmdlbGUgdnlhIHVzYW5pZGkgdnlhIElUU00ga3dhIGt1dHVtaWEga2lvbGVzdXJhIGNoYSBqZW5lcmlraS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBtb2R1bGkgeWEgbWFwaXRpbyBrdW9ueWVzaGEgbWFuZGhhcmkgbmRvZ28geWEgb3JvZGhhIHlhIHZpcGVuZ2VsZSB2eWEgdXNhbmlkaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgc2VtaSB6YSBtYXJhIGt3YSBtYXJhIG1vamFtb2phIGt3YSBraWxhIHRhYmFrYSBsYSBraXBlbmdlbGUgY2ggdXNhbmlkaSBrdWFuZ2FsaWEgamluYSBsYSBraXBlbmdlbGUgY2hhIHVzYW5pZGkgbmEga3Vvbnllc2hhIHVqdW1iZSB3YSBtYWtvc2EgeWFuYXlvaHVzaWFuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEga2lwZW5nZWxlIGNoYSBjaGFndW8gbXNpbmdpIGNoYSB0YWJha2EgbGEgXCdLaXBlbmdlbGVjaGEgVXNhbmlkaSBjaGEgSVRTTVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIG5hbWJhIHlhIHNhZnUgbWxhbG8ga3dhIG1oYXJpcmkgd2EgdWZhZmFudXppIHdhIENJIGthdGlrYSBraW9sZXN1cmEgY2hhIGtpb25nb3ppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJ0luYXdlemVzaGEgdXBlbyB3YSBrdXRhZnV0YSBrd2Egc2tlcmluaSB5YSBLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU00gY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGtpa29tbyBjaGEga3V0YWZ1dGEga3dhIHNrcmluaSB5YSBLdXRhZnV0YSBLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU00gIGNoYSBXYWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ0luYWVsZXplYSBzYWZ1IHdpbWEgem90ZSB6aWxpem9vbnllc2h3YSBrYXRpa2EgbWFwaXRpbyB5YSBraXBlbmdlbGUgY2hhIHVzYW5pZGkuIEhpbGkgY2hhZ3VvIGhhbGluYSBtYWRoYXJhIGthdGlrYSBuYWZhc2kgeWEgc2FmdXdpbWEuIEtpZG9rZXpvOiBUYWJha2EgbGEgc2FmdXdpbWEgbGluYXBhdGlrYW5hIG1hcmEgem90ZSBrYW1hIGtpY2h1amlvIFwnVnlvdGVcJyBpdGFjaGFndWxpd2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgc2FmdSB3aW1hIHppbGl6b29ueWVzaHdhIGthdGlrYSB1dGFmdXRhamkgd2Ega2lwZW5nZWxlIGNoYSB1c2FuaWRpLiBDaGFndW8gaGlsaSBoYWxpbmEgbWFkaGFyYSBrYXRpa2EgbmFmYXNpIHlhIHNhZnV3aW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHNhZnUgd2ltYSB6YSBDSSB6aWxpem9vbnllc2h3YSBrYXRpa2EgbWFwaXRpbyB5YSBraXBlbmdlbGUgY2hhIHVzYW5pZGkga3V0ZWdlbWVhbmEgbmEgdGFiYWthIGxhIENJLiBLaWxhIGluZ2l6byBsYXppbWEgbGl3ZSBuYSBraWFtYmlzaGkgYXdhbGkgamluYSBsYSB0YWJha2EgbmEgOjogKCBtZmFubyBUYXJha2lsaXNoaTo6KUt1bmEgdml1bWJpIHZpY2hhY2hlIHZ5YSBDSSBhbWJhdnlvIHZpcG8ga3dhIENJIHpvdGUgKG1mYW5vIGt3ZW55ZSB0YWJha2EgbGEgdGFyYWtpbGlzaGk6IHRhcmFraWxpc2hpOjpqaW5hLCBUYXJha2lsaXNoaTo6SGFsaSB5YUN1ckRlcCwgVGFyYWtpbGlzaGk6Ok11ZGEgd2Ega3V0ZW5nZW5lemEpLiBLdW9ueWVzaGEga2l1bWJpIGNoYSBDSSBraW1vamEga2ltb2phIGthbWEgdmlsaXZ5byBmYWZhbnVsaXdhIGt3ZW55ZSB1ZmFmYW51emkgd2EgQ0ksIG1wYW5naWxpbyB1ZnVhdGFvIGxhemltYSB1dHVtaWtlIChtZmFubyBrd2VueWUgdGFiYWthIHRhcmFraWxpc2hpKTogVGFyYWtpbGlzaGk6OmRpc2tpIGt1dTo6MSwgVGFyYWtpbGlzaGk6OkRpc2tpIGt1dSBuZ3VtdTo6MVV3ZXpvOjoxLCBUYXJha2lsaXNoaTo6RGlza2kga3V1IG5ndW11OjoyLCBUYXJha2lsaXNoaTo6RGlza2kga3V1IG5ndW11OjoyOjpVd2V6bzo6MS4gS2FtYSBoYWt1bmEgaW5naXpvIGt3YSB0YWJha2EgbGEgQ0ksIHNhZnV3aW1hIGNoYWd1byBtc2luZ2kgemluYW9ueWVzaHdhIGthbWEgemlsaXZ5b2ZhZmFudWxpd2Ega2F0aWthIG1wYW5naWxpbwpJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnSW5hZmFmYW51YSBzYWZ1IHdpbWEgemEgQ0kgemlsaXpvb255ZXNod2Ega2F0aWthIGt1dGFmdXRhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSBrdXRlZ2VtZWFuYSBuYSB0YWJha2EgbGEgQ0kuIEtpbGEgaW5naXpvIGxhemltYSBsaXdlIG5hIGtpYW1iaXNoaSBhd2FsaSBqaW5hIGxhIHRhYmFrYSBuYSA6OiAoIG1mYW5vIFRhcmFraWxpc2hpOjopS3VuYSB2aXVtYmkgdmljaGFjaGUgdnlhIENJIGFtYmF2eW8gdmlwbyBrd2EgQ0kgem90ZSAobWZhbm8ga3dlbnllIHRhYmFrYSBsYSB0YXJha2lsaXNoaTogdGFyYWtpbGlzaGk6OmppbmEsIFRhcmFraWxpc2hpOjpIYWxpIHlhQ3VyRGVwLCBUYXJha2lsaXNoaTo6TXVkYSB3YSBrdXRlbmdlbmV6YSkuIEt1b255ZXNoYSBraXVtYmkgY2hhIENJIGtpbW9qYSBraW1vamEga2FtYSB2aWxpdnlvIGZhZmFudWxpd2Ega3dlbnllIHVmYWZhbnV6aSB3YSBDSSwgbXBhbmdpbGlvIHVmdWF0YW8gbGF6aW1hIHV0dW1pa2UgKG1mYW5vIGt3ZW55ZSB0YWJha2EgdGFyYWtpbGlzaGkpOiBUYXJha2lsaXNoaTo6ZGlza2kga3V1OjoxLCBUYXJha2lsaXNoaTo6RGlza2kga3V1IG5ndW11OjoxVXdlem86OjEsIFRhcmFraWxpc2hpOjpEaXNraSBrdXUgbmd1bXU6OjIsIFRhcmFraWxpc2hpOjpEaXNraSBrdXUgbmd1bXU6OjI6OlV3ZXpvOjoxLiBLYW1hIGhha3VuYSBpbmdpem8ga3dhIHRhYmFrYSBsYSBDSSwgc2FmdXdpbWEgY2hhZ3VvIG1zaW5naSB6aW5hb255ZXNod2Ega2FtYSB6aWxpdnlvZmFmYW51bGl3YSBrYXRpa2EgbXBhbmdpbGlvCklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgc2FmdSB3aW1hIHphIENJIHppbGl6b29ueWVzaHdhIGthdGlrYSBtYW5kaGFyaSB5YSBqZWR3YWxpIHRhdGEgbGEga2l1bmdvLGt1dGVnZW1lYW5hIG5hIHRhYmFrYSBsYSBDSS4gS2lsYSBpbmdpem8gbGF6aW1hIGxpd2UgbmEga2lhbWJpc2hpIGF3YWxpIGppbmEgbGEgdGFiYWthIG5hIDo6ICggbWZhbm8gVGFyYWtpbGlzaGk6OikuS3VuYSB2aXVtYmkgdmljaGFjaGUgdnlhIENJIGFtYmF2eW8gdmlwbyBrd2EgQ0kgem90ZSAobWZhbm8ga3dlbnllIHRhYmFrYSBsYSB0YXJha2lsaXNoaTogdGFyYWtpbGlzaGk6OmppbmEsIFRhcmFraWxpc2hpOjpIYWxpIHlhQ3VyRGVwLCBUYXJha2lsaXNoaTo6TXVkYSB3YSBrdXRlbmdlbmV6YSkuIEt1b255ZXNoYSBraXVtYmkgY2hhIENJIGtpbW9qYSBraW1vamEga2FtYSB2aWxpdnlvIGZhZmFudWxpd2Ega3dlbnllIHVmYWZhbnV6aSB3YSBDSSwgbXBhbmdpbGlvIHVmdWF0YW8gbGF6aW1hIHV0dW1pa2UgKG1mYW5vIGt3ZW55ZSB0YWJha2EgdGFyYWtpbGlzaGkpOiBUYXJha2lsaXNoaTo6ZGlza2kga3V1OjoxLCBUYXJha2lsaXNoaTo6RGlza2kga3V1IG5ndW11OjoxVXdlem86OjEsIFRhcmFraWxpc2hpOjpEaXNraSBrdXUgbmd1bXU6OjIsIFRhcmFraWxpc2hpOjpEaXNraSBrdXUgbmd1bXU6OjI6OlV3ZXpvOjoxLiBLYW1hIGhha3VuYSBpbmdpem8ga3dhIHRhYmFrYSBsYSBDSSwgc2FmdXdpbWEgY2hhZ3VvIG1zaW5naSB6aW5hb255ZXNod2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnTmFrYWxhIHBhY2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJ0luYXdlemVzaGEga2lwZW5nZWxlIGNoYSBraXRlbmRvIGNoIHdpbmdpIGNoYSBraXBlbmdlbGUgY2hhIHVzYW5pZGkga3dhIG1haW5naXJhIHlhIG1iZWxlIHlhIHdha2FsYSBrdWZhbnlhIGthemkga2F0aWthIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSB6YWlkaSB5YSBraW1vamEga3dhIG11ZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICdJbmF3ZXplc2hhIGtpcGVuZ2VsZSBjaGEga2l0ZW5kbyBjaGEgd2luZ2kgY2hhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSBrd2EgbWFrdW5kaSB5YWxpeW9vcm9kaGVzaHdhIHR1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnV2V6ZXNoYS9LdXRvd2V6ZXNoYSBraXRlbmRlYWthemkgY2hhIGt1YW5nYWxpYSB2aXBlbmdlbGUgdnlhIHVzYW5pZGkga3dhIG1hamluYSB5YSBwZWtlZS4gS2FibGEgeWEga3V3ZXplc2hhIGNoYWd1byBoaWxpIHVuYXRha2l3YSBrdWFuZ2FsaWEgbWZ1bW8gd2FrbyBrd2EgdmlwZW5nZWxlIHZ5YSB1c2FuaWRpIGthbWEgdmlwbyB0YXlhcmkga3dhIG1hamluYSBuYWthbGEgcGFjaGEuIFVuYXdlemEga3VmYW55YSBoaXZpIG5hIG1hYW5kaWtvIGJpbi9vdHJzLiBJVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICdNb2R1bGkgeWEga3VhbmdhbGlhIG1ha3VuZGkgeWFuYXlvaHVzaWthIG5hIHRhYmFrYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICdNb2R1bGUgeWEga3VhbmdhbGlhIG1ha3VuZGkgeWFuYXlvaHVzaWthIG5hIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICdNb2R1bGkgeWEga3V0ZW5nZW5lemEgdGFrd2ltdSB6YSBraXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU00+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBueXVtYSB5YSBraXBlbmdlZSBrd2EgbW9kdWxpIHlhIEt1aW5naXphL2t1aGFtaXNoYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1ZpZ2V6byBrd2EgYWppbGkgeWEgcmFuZ2kgeWEgaGFsaSB6YSBtYXR1bWl6aSBrYW1hIG1hbmRoYXJpIHlhIG1hcGVuZGVsZW8geWEga2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVmlnZXpvIGt3YSBhamlsaSB5YSBoYWxpIHphIG1hdHVtaXppIGthbWEgbWFuZGhhcmkgeWEgbWFwZW5kZWxlbyB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnVmlnZXpvIGt3YSBtZmFubyBydWh1c2EgemEgdmlrdW5kaSBrd2Egc2lmYSB6YSBrYXRhbG9naSB6YSB1anVtbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJ1ZpZ2V6byBrd2EgYWppbGkgeWEgdWt1cmFzYSAoYW1iYXZ5byB2aXBlbmdlbGUgdnlhIHVzYW5pZGkgdmltZW9ueWVzaHdhKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5haGl0YWppIHJ1aHVzYSBrdXR1bWlhIHNrcmluaSB5YSBraXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU00ga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYWhpdGFqaSBydWh1c2Ega3V0dW1pYSBza3JpbmkgeWEga3V0YWZ1dGEga2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5haGl0YWppIHJ1aHVzYSBrdXR1bWlhIHNrcmluaSBpbGl5b2t1endhIHlhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5haGl0YWppIHJ1aHVzYSBrdXR1bWlhIHNrcmluaSB5YSBraXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU00ga2lsaWNob29uZ2V6YSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYWhpdGFqaSBydWh1c2Ega3V0dW1pYSBza3JpbmkgeWEga2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNIGtpbGljaG9oYXJpcml3YSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYWhpdGFqaSBydWh1c2Ega3V0dW1pYSBza3JpbmkgeWEga2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNIGNoYSBoaXN0b3JpYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFoaXRhamkgcnVodXNhIGt1dHVtaWEgc2tyaW5pIHlhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTSBjaGEga3VjaGFwaXNoYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnSW5hY2hhZ3VhIG1vZHVsaSB5YSBrdXphbGlzaGEgbmFtYmEgeWEga2lwZW5nZWxlIGNoYSB1c2FuaWRpLiAiT25nZXphT3RvbWF0aWtpIiBpbmFvbmdlemEgbmFtYmEgeWEga2lwZW5nZWxlIHlhIHVzYW5pZGksIGtpdGFtYnVsaXNobyBjaGEgbWZ1bW8sIGtpdGFtYnVsaXNobyBjaGEgdGFiYWthIGxhIGtpcGVuZ2VsZSBzYW5pZGkgbmEga2loZXNhYnVqaSB2aW5hdHVtaWthLiBVbWJpem8gbmkgIktpdGFtYnVsaXNobyBjaGEgbWZ1bW8ua2l0YW1idWxpc2hvIGNoYSB0YWJha2EgbGEga2lwZW5nZWxlIHNhbmlkaS5LaWhlc2FidWppIi4gbWZhbm8gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYXdla2EgaGFsaSB5YSBrdXR1bWlhIGthdGlrYSBza3JpbmkgeWEgd2luZ2kgd2Ega2lwZW5nZWxlIGNoYSB1c2FuaWRpIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmF3ZWthIGhhbGkgeWEgdHVraW8ga2F0aWthIHNrcmluaSB5YSBraXBlbmdlbGUgY2hhIHVzYW5pZGkgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBraW9uZ28ga2F0aWthIG1lbnl1IGFtYmFjaG8ga2luYXVuZ2FuaXNoYSBraXBlbmdlbGUgY2hhIHVzYW5pZGkgbmEga2lwZW5nZWUga2luZ2luZSBrYXRpa2EgbWFuZGhhcmkgaWxpeW9rdXp3YSB5YSBraXBlbmdlbGUgY2hhIHVzYW5pZGkgeWEga2lvbGV1c3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYW9ueWVzaGEga2l1bmdvIGt3ZW55ZSAgbWVueXUga3V3ZXphIGt1ZmlraWEgaGlzdG9yaWEgeWEga2lwZW5nZWxlIGNoYSB1c2FuaWRpIGthdGlrYSBtYXBpdGlvIHlhIGtpcGVuZ2VsZSB5YSB1c2FuaWRpIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFvbnllc2hhIGtpdW5nbyBrd2VueWUgIG1lbnl1IGt1d2V6YSBrdWZpa2lhIGhpc3RvcmlhIHlhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSBrYXRpa2EgbWFuZGhhcmkgeWFrZSBpbGl5b2t1endhIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09ueWVzaGEga2l1bmdvIGthdGlrYSBtZW55dSBrdXRvYSBuYWthbGEgcGFjaGEgeWEga2lwZW5nZWxlIGNoYSB1c2FuaWRpIGthdGlrYSBtYXBpdGlvIHlhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnT255ZXNoYSBraXVuZ28ga2F0aWthIG1lbnl1IGt1dG9hIG5ha2FsYSBwYWNoYSB5YSBraXBlbmdlbGUgY2hhIHVzYW5pZGkga2F0aWthIG1hbmRoYXJpIHlha2UgeWEga2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09ueWVzaGEga2l1bmdvIGthdGlrYSBtZW55dSBrdWhhcmlyaSAga2lwZW5nZWxlIGNoYSB1c2FuaWRpIGthdGlrYSBtYW5kaGFyaSB5YWtlIGlsaXlva3V6d2EgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPbnllc2hhIGtpdW5nbyBrYXRpa2EgbWVueXUga3VjaGFwaXNoYSBraXBlbmdlbGUgY2hhIHVzYW5pZGkga2F0aWthIG1hbmRoYXJpIHlha2UgaWxpeW9rdXp3YSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPbnllc2hhIGtpdW5nbyBrYXRpa2EgbWVueXUga3VrdXphIGthdGlrYSBraXBlbmdlbGUgY2hhIHVzYW5pZGkga2F0aWthIG1hcGl0aW8geWEga2lwZW5nZWxlIGNoYSB1c2FuaWRpIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBoaXN0b3JpYSB5YSBraXBlbmdlbGUgY2hhIHVzYW5pZGkgKGt3YSBtcGFuZ2lsaW8gd2Ega3VydWRpIG55dW1hKSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICdLaXRhbWJ1bGlzaGkgY2hhIGtpcGVuZ2VsZSBjaGEgdXNhbmlkaSwgbWZhbm8uQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIENoYWd1LW1zaW5naSBuaSBDb25maWdJdGVtIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnRoX1RIX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICfguIHguLLguKPguIjguLHguJTguIHguLLguKMgQ29uZmlnIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICfguJnguLTguKLguLLguKHguILguK3guIfguITguKXguLLguKrguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ+C4meC4tOC4ouC4suC4oSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICfguYDguJvguKXguLXguYjguKLguJknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+C4quC4luC4suC4meC4oOC4suC4nuC4guC4reC4h+C5gOC4q+C4leC5jOC4geC4suC4o+C4k+C5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAn4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAn4LiE4Lil4Liy4LiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ+C4m+C4o+C4sOC5gOC4oOC4l+C4quC4luC4suC4meC4oOC4suC4nuC4geC4suC4o+C5g+C4iuC5ieC4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiC4Lit4LiH4LmA4Lir4LiV4LmM4LiB4Liy4Lij4LiT4LmM4Lib4Lix4LiI4LiI4Li44Lia4Lix4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ+C4m+C4o+C4sOC5gOC4oOC4l+C4quC4luC4suC4meC4oOC4suC4nuC4guC4reC4h+C5gOC4q+C4leC5jOC4geC4suC4o+C4k+C5jOC4m+C4seC4iOC4iOC4uOC4muC4seC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguKXguYjguLLguKrguLjguJQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnQ29uZmlnIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBDbGFzc2VzJ30gPSAn4LiV4Lix4Lin4LiB4Lij4Lit4LiH4Liq4Liz4Lir4Lij4Lix4Lia4LiE4Lil4Liy4LiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLid9ID0gJ+C5gOC4peC4t+C4reC4geC4hOC4peC4suC4quC4iOC4suC4geC4o+C4suC4ouC4geC4suC4o+C4l+C4teC5iOC4iOC4sOC4quC4o+C5ieC4suC4hyBDb25maWcgSXRlbSDguYPguKvguKHguYgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICfguIHguLLguKPguJfguLPguIfguLLguJnguYDguJvguYfguJnguIHguKXguLjguYjguKHguILguK3guIcgSVRTTSBDb25maWdJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUnfSA9ICfguKrguJbguLLguJnguKDguLLguJ7guIHguLLguKPguYPguIrguYnguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUnfSA9ICfguKrguJbguLLguJnguKDguLLguJ7guILguK3guIfguYDguKvguJXguLjguIHguLLguKPguJPguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byBhbm90aGVyJ30gPSAn4LmA4LiK4Li34LmI4Lit4Lih4LmC4Lii4LiH4LmE4Lib4LiX4Li14LmI4Lit4Li34LmI4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ29uZmlndXJhdGlvbiBJdGVtIG51bWJlciEnfSA9ICfguIjguLPguJnguKfguJnguKPguLLguKLguIHguLLguKPguIHguLLguKPguIHguLPguKvguJnguJTguITguYjguLLguYTguKHguYjguJbguLnguIHguJXguYnguK3guIchJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBudW1iZXIgb2YgYW5vdGhlciBDb25maWd1cmF0aW9uIEl0ZW0gdG8gbGluayB3aXRoLid9ID0gJ+C4iOC4s+C4meC4p+C4meC4guC4reC4h+C4o+C4suC4ouC4geC4suC4o+C4geC4suC4o+C4geC4s+C4q+C4meC4lOC4hOC5iOC4suC4reC4t+C5iOC4meC5huC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4hyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbmZpZyBpdGVtPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcg4LiK4Li34LmI4Lit4LiC4Lit4LiH4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbXMgd2l0aCB0aGUgZm9sbG93aW5nIE51bWJlcihzKTogJXMnfSA9CiAgICAgICAgJ+C4iuC4t+C5iOC4reC4l+C4teC5iOC4luC4ueC4geC4geC4suC4o+C5g+C4iuC5ieC4h+C4suC4meC5guC4lOC4oiBDb25maWdJdGVtcyDguKHguLXguIjguLPguJnguKfguJnguJTguLHguIfguJXguYjguK3guYTguJvguJnguLXguYkgKHMpOiAlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgQ29uZmlnIEl0ZW06ICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJ+C5gOC4meC4t+C5ieC4reC4q+C4suC4m+C4o+C4sOC4p+C4seC4leC4tCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAn4LmA4Lin4Lil4Liy4LiX4Li14LmI4Liq4Lij4LmJ4Liy4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pvb20gdmlldyd9ID0gJ+C4oeC4uOC4oeC4oeC4reC4h+C4geC4suC4o+C4i+C4ueC4oSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiC4LmJ4Lit4LiE4Lin4Liy4LihJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJ0NvbmZpZyBJdGVtcyDguYPguJnguYHguJXguYjguKXguLDguKvguJnguYnguLInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICfguJTguLPguYDguJnguLTguJnguIHguLLguKPguITguYnguJnguKvguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAn4LiE4LmJ4LiZ4Lir4Liy4LmA4Lin4Lit4Lij4LmM4LiK4Lix4LmI4LiZ4LiX4Li14LmI4LmB4Lil4LmJ4Lin4LiU4LmJ4Lin4Lii4Lir4Lij4Li34Lit4LmE4Lih4LmIPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ+C4o+C4suC4ouC4geC4suC4o+C4geC4suC4o+C4geC4s+C4q+C4meC4lOC4hOC5iOC4sic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICfguILguYnguK3guKHguLnguKXguKPguLLguKLguIHguLLguKPguIHguLLguKPguIHguLPguKvguJnguJTguITguYjguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAn4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZ4Lib4Lix4LiI4LiI4Li44Lia4Lix4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4peC5iOC4suC4quC4uOC4lOC5guC4lOC4oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAn4LmB4Liq4LiU4LiH4Lir4LiZ4Li24LmI4LiH4LmA4Lin4Lit4Lij4LmM4LiK4Lix4LmI4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAn4LmB4Liq4LiU4LiH4LmA4Lin4Lit4Lij4LmM4LiK4Lix4LmI4LiZ4LiX4Lix4LmJ4LiH4Lir4Lih4LiUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICfguYDguKfguK3guKPguYzguIrguLHguYjguJnguILguK3guIfguKrguJbguLLguJnguKDguLLguJ7guILguK3guIfguYDguKvguJXguLjguIHguLLguKPguJPguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAn4LmA4Lin4LmI4Lit4Lij4LmM4LiK4Lix4LmI4LiZ4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAn4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LmA4Lin4Lit4Lij4LmM4LiK4Lix4LmJ4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICfguYDguJnguLfguYnguK3guKvguLLguYDguKfguK3guKPguYzguIrguLHguYjguJkgQ29uZmlndXJhdGlvbiBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAn4LiE4Li44LiT4Liq4Lih4Lia4Lix4LiV4Li0JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJ0NvbmZpZ0l0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAn4LmE4Lih4LmI4Lih4Li14Lic4Lil4Lil4Lix4Lie4LiY4LmMISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ+C4quC4luC4suC4meC4oOC4suC4nuC4geC4suC4o+C4nuC4seC4kuC4meC4suC4geC4suC4o+C4guC4reC4hyBjb25maWcgaXRlbSDguJnguLXguYkgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LmA4Lir4LiV4Li44LiB4Liy4Lij4LiT4LmM4LiC4Lit4LiHIGNvbmZpZyBpdGVtIOC4meC4tSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICfguKPguLDguKvguKfguYjguLLguIcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAn4LiI4Liz4LiZ4Lin4LiZ4Liq4Li54LiH4Liq4Li44LiU4LiC4Lit4LiH4Lir4LiZ4Li24LmI4LiH4Lit4Li44Lib4LiB4Lij4LiT4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ+C5gOC4guC4leC4guC5ieC4reC4oeC4ueC4peC4p+C5iOC4suC4h+C5gOC4m+C4peC5iOC4suC4muC5iOC4h+C4iuC4teC5ieC4p+C5iOC4suC4hOC5iOC4suC4m+C4seC4iOC4iOC4uOC4muC4seC4meC4iOC4sOC4luC4ueC4geC5gOC4geC5h+C4muC5hOC4p+C5iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAn4LiC4LmJ4Liy4Lih4LmB4Lil4LmJ4LinJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICfguYLguKHguYDguJTguKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAn4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LiL4Li14LmA4Lij4Li14Lii4LilJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ+C4i+C4teC4nuC4teC4ouC4uSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICfguYHguKPguKEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAn4Liu4Liy4Lij4LmM4LiU4LiU4Li04Liq4LiB4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAn4LiE4Lin4Liy4Lih4LiI4Li4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ+C4geC4suC4o+C5jOC4lOC5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4reC5gOC4hOC4o+C4t+C4reC4guC5iOC4suC4oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICdJUCDguJzguYjguLLguJkgREhDUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBBZGRyZXNzJ30gPSAn4LiX4Li14LmI4Lit4Lii4Li54LmI4LmE4Lit4Lie4Li1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ+C4leC4seC4p+C4m+C4o+C4seC4muC4leC5iOC4reC4geC4o+C4suC4n+C4n+C4tOC4hCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICfguK3guLjguJvguIHguKPguJPguYzguK3guLfguYjguJkg4LmGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ+C4geC4suC4o+C4o+C4seC4muC4m+C4o+C4sOC4geC4seC4meC4p+C4seC4meC4q+C4oeC4lOC4reC4suC4ouC4uCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICfguKfguLHguJnguJXguLTguJTguJXguLHguYnguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ+C5guC4l+C4o+C4qOC4seC4nuC4l+C5jCAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICfguYLguJfguKPguKjguLHguJ7guJfguYwgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAn4LiX4Li14LmI4Lit4Lii4Li54LmI4LmA4LiE4Lij4Li34Lit4LiC4LmI4Liy4LiiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAn4LmA4LiE4Lij4Li34Lit4LiC4LmI4Liy4Lii4Lii4LmI4Lit4Lii4Lih4Liy4Liq4LmM4LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICfguJvguKPguLDguJXguLnguKrguLHguI3guI3guLLguJMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAn4Lib4Lij4Liw4LmA4Lig4LiX4Lil4Liy4Lii4LmA4LiL4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAn4LiB4Li44LiN4LmB4LiI4Lil4Liy4Lii4LmA4LiL4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAn4LiI4Liz4LiZ4Lin4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ+C4p+C4seC4meC4q+C4oeC4lOC4reC4suC4ouC4uCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ+C4oeC4teC5gOC4lOC4teC4oic7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ+C4q+C4oeC4lOC4reC4suC4ouC4uCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ+C4geC4suC4o+C4lOC4ueC5geC4peC4o+C4seC4geC4qeC4sic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ+C4geC4suC4o+C4meC4s+C4o+C5iOC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn4LiB4Liy4Lij4Lin4Liy4LiH4LmB4Lic4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ+C4i+C5iOC4reC4oSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAn4LmA4LiB4Lip4Li14Lii4LiTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ+C4leC4seC4p+C4reC4ouC5iOC4suC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAn4LiX4LiU4Liq4Lit4LiaL1FBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJ+C5geC4peC5h+C4m+C4l+C5h+C4reC4myc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAn4LmA4LiU4Liq4LiX4Lit4LibJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJ1BEQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICfguYDguIvguLTguKPguYzguJ/guYDguKfguK3guKPguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfguK3guLfguYjguJnguYYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJ+C4iOC4reC4oOC4suC4nic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAn4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJ+C4quC4seC4muC5gOC4m+C4peC4teC5iOC4ouC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICfguYDguKPguLLguYDguJXguK3guKPguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICfguIjguLjguJTguYDguIrguLfguYjguK3guKHguJXguYjguK1XTEFOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY3VyaXR5IERldmljZSd9ID0gJ+C4reC4uOC4m+C4geC4o+C4k+C5jOC4o+C4seC4geC4qeC4suC4hOC4p+C4suC4oeC4m+C4peC4reC4lOC4oOC4seC4oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrdXAgRGV2aWNlJ30gPSAn4Lit4Li44Lib4LiB4Lij4LiT4LmM4Liq4Liz4Lij4Lit4LiH4LiC4LmJ4Lit4Lih4Li54LilJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAn4LmA4Lih4LmJ4Liy4Liq4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleWJvYXJkJ30gPSAn4LmB4Lib4LmJ4LiZ4Lie4Li04Lih4Lie4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbWVyYSd9ID0gJ+C4geC4peC5ieC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZWFtZXInfSA9ICfguJzguLnguYnguITguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZW0nfSA9ICfguYLguKHguYDguJTguKEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICfguJrguLHguJXguKMgUENNQ0lBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VTQiBEZXZpY2UnfSA9ICfguK3guLjguJvguIHguKPguJPguYwgVVNCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJ+C4quC4luC4suC4meC4tSBEb2NraW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjYW5uZXInfSA9ICfguYDguITguKPguLfguYjguK3guIfguKrguYHguIHguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICfguIHguLLguKPguKrguKPguYnguLLguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAn4Lit4Lit4Lif4Lif4Li04LioJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zsb29yJ30gPSAn4LiK4Lix4LmJ4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jvb20nfSA9ICfguKvguYnguK3guIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFjayd9ID0gJ+C4iOC4s+C4nuC4p+C4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrcGxhY2UnfSA9ICfguJfguLXguYjguJfguLPguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAn4LmA4Lit4Liy4LiX4LmM4LmA4Lil4LmH4LiXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAn4Liq4Li04LmI4LiH4Lit4Liz4LiZ4Lin4Lii4LiE4Lin4Liy4Lih4Liq4Liw4LiU4Lin4LiB4LiU4LmJ4Liy4LiZ4LmE4Lit4LiX4Li1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xBTid9ID0gJ0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOJ30gPSAnV0xBTic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1RlbGNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dTTSd9ID0gJ0dTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgQXBwbGljYXRpb24nfSA9ICfguYHguK3guJ7guKXguLTguYDguITguIrguLHguJnguILguK3guIfguKXguLnguIHguITguYnguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ+C4oeC4tOC4lOC5gOC4lOC4tOC5ieC4peC5geC4p+C4ouC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgQXBwbGljYXRpb24nfSA9ICfguYHguK3guJ7guKXguLTguYDguITguIrguLHguJnguYDguIvguLTguKPguYzguJ/guYDguKfguK3guKPguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IE9TJ30gPSAnT1Mg4LiC4Lit4LiH4Lil4Li54LiB4LiE4LmJ4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ09TIOC5gOC4i+C4tOC4o+C5jOC4n+C5gOC4p+C4reC4o+C5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAn4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lih4Li34Lit4LmB4Lit4LiU4Lih4Li04LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ+C5gOC4hOC4o+C4t+C5iOC4reC4h+C4oeC4t+C4reC4guC4reC4h+C4nOC4ueC5ieC5g+C4iuC5iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJ+C4geC4suC4o+C4neC4seC4h+C4leC4seC4pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJ+C4peC4suC4ouC5gOC4i+C4meC4leC5jOC5gOC4lOC4teC4ouC4pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJ+C4leC5iOC4reC4nOC4ueC5ieC5g+C4iuC5iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAn4Liq4Liz4Lir4Lij4Lix4Lia4LiV4Lix4Lin4Lib4Lij4Liw4Lih4Lin4Lil4Lic4LilJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICfguJXguYjguK3guYDguIvguLTguKPguYzguJ/guYDguKfguK3guKPguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICfguJXguYjguK3guKvguJnguLbguYjguIfguYLguKvguJnguJQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICfguKXguLLguKLguYDguIvguJnguJXguYzguK3guLjguJvguIHguKPguJPguYzguYDguKrguLXguKLguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAn4Lil4Liy4Lii4LmA4Lin4LiZ4LiV4LmM4LmA4Lit4LmH4LiZ4LmA4LiV4Lit4Lij4LmM4LmE4Lie4Lij4Liq4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAn4Lil4Liy4Lii4LmA4LiL4LiZ4LiV4LmM4Lic4Li54LmJ4Lie4Lix4LiS4LiZ4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICfguIHguLLguKPguKrguLLguJjguLTguJUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAn4LmA4Lin4Lil4LiyIOC4iOC4s+C4geC4seC4lCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ+C4n+C4o+C4teC5geC4p+C4o+C5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ+C5guC4reC5gOC4nuC4meC4i+C4reC4o+C5jOC4qic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICfguYTguKHguYjguIjguLPguIHguLHguJQnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn4LmC4Lit4LmA4LiEJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgb25seSB3aXRoaW4gdGhlIHNhbWUgQ29uZmlnSXRlbSBjbGFzcyAoXCdjbGFzc1wnKSBvciBnbG9iYWxseSAoXCdnbG9iYWxcJyksIHdoaWNoIG1lYW5zIGV2ZXJ5IGV4aXN0aW5nIENvbmZpZ0l0ZW0gaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbG9va2luZyBmb3IgZHVwbGljYXRlcy4nfSA9CiAgICAgICAgJ+C4leC4o+C4p+C4iOC4quC4reC4muC4iuC4t+C5iOC4reC5gOC4ieC4nuC4suC4sOC5gOC4l+C5iOC4suC4meC4seC5ieC4meC4l+C4teC5iOC4reC4ouC4ueC5iOC5g+C4mSBDb25maWdJdGVtIOC4iuC4seC5ieC4meC5gOC4lOC4teC4ouC4p+C4geC4seC4mSAo4LiK4Lix4LmJ4LiZKSDguKvguKPguLfguK3guJfguLHguYnguIfguKvguKHguJQgKOC4l+C4seC5ieC4h+C4q+C4oeC4lCkg4LiL4Li24LmI4LiH4Lir4Lih4Liy4Lii4LiE4Lin4Liy4Lih4Lin4LmI4LiyQ29uZmlnSXRlbSDguJfguLXguYjguKHguLXguK3guKLguLnguYjguJfguLHguYnguIfguKvguKHguJTguIjguLDguJbguLnguIHguJnguLPguYDguILguYnguLLguJrguLHguI3guIrguLXguYDguJ7guLfguYjguK3guITguYnguJnguKvguLLguKPguLLguKLguIHguLLguKPguJfguLXguYjguIvguYnguLPguIHguLHguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnQ29uZmlnIEl0ZW1zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5guC4oeC4lOC4ueC4peC4geC4tOC4iOC4geC4o+C4o+C4oeC4guC4reC4h0NvbmZpZyBpdGVtIOC4l+C4teC5iOC4iuC5iOC4p+C4ouC5g+C4q+C5ieC5gOC4guC5ieC4suC4quC4ueC5iOC4o+C4sOC4muC4muC4m+C4o+C4sOC4p+C4seC4leC4tOC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4quC4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICfguIHguLLguKPguIjguLPguIHguLHguJQgQ29uZmlndXJhdGlvbiBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0NvbmZpZ3VyYXRpb24gSXRlbSDguITguYnguJnguKvguLIgYmFja2VuZCByb3V0ZXIg4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICfguKrguKPguYnguLLguIfguYHguKXguLDguIjguLHguJTguIHguLLguKPguITguLPguJnguLTguKLguLLguKHguKrguLPguKvguKPguLHguJogQ29uZmlndXJhdGlvbiBJdGVtcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKrguLTguJfguJjguLTguYzguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguKrguKPguYnguLLguIfguKPguLLguKLguIHguLLguKPguIHguLLguKPguJXguLHguYnguIfguITguYjguLIgSVRTTeC5guC4lOC4ouC5g+C4iuC5ieC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C4l+C4seC5iOC4p+C5hOC4myc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKrguLTguJfguJjguLTguYzguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguYDguK3guLLguKPguLLguKLguIHguLLguKPguIHguLLguKPguJXguLHguYnguIfguITguYjguLIgSVRTTeC5guC4lOC4ouC5g+C4iuC5ieC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C4l+C4seC5iOC4p+C5hOC4myc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4Liq4Li04LiX4LiY4Li04LmM4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LiE4LmJ4LiZ4Lir4Liy4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4LiyIElUU03guYLguJTguKLguYPguIrguYnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguJfguLHguYjguKfguYTguJsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4quC4tOC4l+C4mOC4tOC5jOC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4reC4seC4nuC5gOC4lOC4leC4o+C4suC4ouC4geC4suC4o+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4siBJVFNN4LmC4LiU4Lii4LmD4LiK4LmJ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiX4Lix4LmI4Lin4LmE4LibJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5guC4oeC4lOC4ueC4peC4oOC4suC4nuC4o+C4p+C4oeC5g+C4meC4geC4suC4o+C5geC4quC4lOC4h+C4oeC4uOC4oeC4oeC4reC4h+C4guC4meC4suC4lOC5gOC4peC5h+C4geC4guC4reC4h+C4o+C4suC4ouC4geC4suC4oyAgQ29uZmlndXJhdGlvbiBJdGVtcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiZ4Li04Lie4LiI4LiZ4LmM4LiX4Lix4LmI4Lin4LmE4Lib4LmA4Lib4LmH4LiZ4Lij4Liy4Lii4Lia4Li44LiE4LiE4Lil4LmD4LiZQ29uZmlnSXRlbSDguYHguJXguYjguKXguLDguIrguLHguYnguJkg4LmA4Lie4Li34LmI4Lit4LiV4Lij4Lin4LiI4Liq4Lit4Lia4LiK4Li34LmI4LitIENvbmZpZ0l0ZW0g4LmB4Lil4Liw4LmA4Lie4Li34LmI4Lit4LmB4Liq4LiU4LiH4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4Lic4Li04LiU4Lie4Lil4Liy4LiU4LiX4Li14LmI4Liq4Lit4LiU4LiE4Lil4LmJ4Lit4LiH4LiB4Lix4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguK3guJrguYDguIjguIHguJXguYzguKLguYjguK3guKLguYDguKPguLTguYjguKHguJXguYnguJnguILguK3guIfguITguKXguLLguKogXCdJVFNNQ29uZmlnSXRlbVwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4iOC4s+C4meC4p+C4meC5geC4luC4p+C4quC4s+C4q+C4o+C4seC4muC4leC4seC4p+C5geC4geC5ieC5hOC4guC4geC4suC4o+C4meC4tOC4ouC4suC4oSBDSSDguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guKrguILguK3guIfguJzguLnguYnguJTguLnguYHguKXguKPguLDguJrguJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiC4Li14LiU4LiI4Liz4LiB4Lix4LiU4LiC4Lit4LiH4LiB4Liy4Lij4LiE4LmJ4LiZ4Lir4Liy4Liq4Liz4Lir4Lij4Lix4Lia4Lir4LiZ4LmJ4Liy4LiI4LitIEFnZW50SVRTTUNvbmZpZ0l0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguILguLXguJTguIjguLPguIHguLHguJTguILguK3guIfguIHguLLguKPguITguYnguJnguKvguLLguKrguLPguKvguKPguLHguJrguKvguJnguYnguLLguIjguK0gQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguITguK3guKXguLHguKHguJnguYzguJfguLXguYjguIjguLDguYHguKrguJTguIfguYPguJnguKDguLLguJ7guKPguKfguKHguILguK3guIdjb25maWcgaXRlbSDguJXguLHguKfguYDguKXguLfguK3guIHguJnguLXguYnguIjguLDguYTguKHguYjguKHguLXguJzguKXguJXguYjguK3guJXguLPguYHguKvguJnguYjguIfguILguK3guIfguITguK3guKXguLHguKHguJnguYwg4Lir4Lih4Liy4Lii4LmA4Lir4LiV4Li4OiDguKPguLDguJTguLHguJrguILguK3guIfguITguK3guKXguLHguKHguJnguYzguKrguLLguKHguLLguKPguJbguYPguIrguYnguYTguJTguYnguYDguKrguKHguK3guJbguYnguLLguJXguLHguKfguIHguKPguK3guIcgXCfguJfguLHguYnguIfguKvguKHguJRcJyDguJbguLnguIHguYDguKXguLfguK3guIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4Lit4Lil4Lix4Lih4LiZ4LmM4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4LmD4LiZ4LiB4Liy4Lij4LiE4LmJ4LiZ4Lir4LiyIGNvbmZpZyBpdGVtIOC4leC4seC4p+C5gOC4peC4t+C4reC4geC4meC4teC5ieC4iOC4sOC5hOC4oeC5iOC4oeC4teC4nOC4peC4leC5iOC4reC4leC4s+C5geC4q+C4meC5iOC4h+C4guC4reC4h+C4hOC4reC4peC4seC4oeC4meC5jCAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4Lit4Lil4Lix4Lih4LiZ4LmM4LiX4Li14LmI4LmB4Liq4LiU4LiHIENJcyDguYPguJnguKDguLLguJ7guKPguKfguKHguILguK3guIfguKPguLLguKLguIHguLLguKPguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguIvguLbguYjguIfguILguLbguYnguJnguK3guKLguLnguYjguIHguLHguJrguITguKXguLLguKogQ0kg4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4Lib4LmJ4Lit4LiZ4LmB4LiV4LmI4Lil4Liw4Lij4Liy4Lii4LiB4Liy4Lij4LiI4Liw4LiV4LmJ4Lit4LiH4LiZ4Liz4Lir4LiZ4LmJ4Liy4LiU4LmJ4Lin4Lii4LiK4Li34LmI4Lit4LiE4Lil4Liy4Liq4LmB4Lil4Liw4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lir4Lih4Liy4Lii4LiX4Lin4Li04Lig4Liy4LiE4LiE4Li54LmIICjguYDguIrguYjguJnguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYw6IDopIOC4oeC4teC5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jCBDSSDguYDguJ7guLXguKLguIfguYTguKHguYjguIHguLXguYjguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYwg4LiX4Li14LmI4LmD4LiK4LmJ4LiB4Lix4LiZ4LiX4Lix4LmI4Lin4LmE4Lib4LmD4LiZIENJcyDguJfguLHguYnguIfguKvguKHguJQgKOC4leC4seC4p+C4reC4ouC5iOC4suC4h+C4quC4s+C4q+C4o+C4seC4muC4hOC4peC4suC4quC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDog4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMOjrguIrguLfguYjguK0sIOC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDo6Q3VyRGVwbFN0YXRlLCDguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYw6OkNyZWF0ZVRpbWUpIOC5g+C4meC4geC4suC4o+C5geC4quC4lOC4h+C5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jCBDSSDguJXguLLguKHguJfguLXguYjguIHguLPguKvguJnguJTguYTguKfguYnguYPguJnguITguLPguJnguLTguKLguLLguKEgQ0kg4LiI4Liw4LiV4LmJ4Lit4LiH4LmD4LiK4LmJ4Lij4Li54Lib4LmB4Lia4Lia4LiV4LmI4Lit4LmE4Lib4LiZ4Li14LmJKOC4leC4seC4p+C4reC4ouC5iOC4suC4h+C4quC4s+C4q+C4o+C4seC4muC4hOC4peC4suC4quC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jCk6IOC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDo64Liu4Liy4Lij4LmM4LiU4LiU4Li04Liq4LiB4LmMOjoxLCDguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYw6OuC4ruC4suC4o+C5jOC4lOC4lOC4tOC4quC4geC5jDo6MTo64LiE4Lin4Liy4Lih4LiI4Li4OjoxLCDguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYw6OuC4ruC4suC4o+C5jOC4lOC4lOC4tOC4quC4geC5jDo6Miwg4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMOjrguK7guLLguKPguYzguJTguJTguLTguKrguIHguYw6OjI6OuC4hOC4p+C4suC4oeC4iOC4uDo6MSAg4Lir4Liy4LiB4LmE4Lih4LmI4Lih4Li14LiB4Liy4Lij4Lib4LmJ4Lit4LiZ4LiE4Lil4Liy4Liq4LiX4Li14LmIIENJIOC5geC4peC5ieC4p+C4hOC4reC4peC4seC4oeC4meC5jOC5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4iOC4sOC5geC4quC4lOC4h+C4leC4suC4oeC4l+C4teC5iOC4geC4s+C4q+C4meC4lOC5hOC4p+C5ieC5g+C4meC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4siBJVFNNQ29uZmlnSXRlbSA6OkZyb250ZW5kIDo6IEFnZW50SVRTTUNvbmZpZ0l0ZW0gIyMjIFNob3dDb2x1bW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguITguK3guKXguLHguKHguJnguYzguJfguLXguYjguYHguKrguJTguIcgQ0lzIOC5g+C4meC4geC4suC4o+C4hOC5ieC4meC4q+C4suC4guC4reC4h+C4o+C4suC4ouC4geC4suC4o+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4i+C4tuC5iOC4h+C4guC4tuC5ieC4meC4reC4ouC4ueC5iOC4geC4seC4muC4hOC4peC4suC4qiBDSSDguKPguLLguKLguIHguLLguKPguIHguLLguKPguJvguYnguK3guJnguYHguJXguYjguKXguLDguKPguLLguKLguIHguLLguKPguIjguLDguJXguYnguK3guIfguJnguLPguKvguJnguYnguLLguJTguYnguKfguKLguIrguLfguYjguK3guITguKXguLLguKrguYHguKXguLDguYDguITguKPguLfguYjguK3guIfguKvguKHguLLguKLguJfguKfguLTguKDguLLguITguITguLnguYggKOC5gOC4iuC5iOC4meC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDogOikg4Lih4Li14LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIENJIOC5gOC4nuC4teC4ouC4h+C5hOC4oeC5iOC4geC4teC5iOC5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jCDguJfguLXguYjguYPguIrguYnguIHguLHguJnguJfguLHguYjguKfguYTguJvguYPguJkgQ0lzIOC4l+C4seC5ieC4h+C4q+C4oeC4lCAo4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiH4Liq4Liz4Lir4Lij4Lix4Lia4LiE4Lil4Liy4Liq4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMOiDguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYw6OuC4iuC4t+C5iOC4rSwg4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMOjpDdXJEZXBsU3RhdGUsIOC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDo6Q3JlYXRlVGltZSkg4LmD4LiZ4LiB4Liy4Lij4LmB4Liq4LiU4LiH4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIENJIOC4leC4suC4oeC4l+C4teC5iOC4geC4s+C4q+C4meC4lOC5hOC4p+C5ieC5g+C4meC4hOC4s+C4meC4tOC4ouC4suC4oSBDSSDguIjguLDguJXguYnguK3guIfguYPguIrguYnguKPguLnguJvguYHguJrguJrguJXguYjguK3guYTguJvguJnguLXguYko4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiH4Liq4Liz4Lir4Lij4Lix4Lia4LiE4Lil4Liy4Liq4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMKTog4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMOjrguK7guLLguKPguYzguJTguJTguLTguKrguIHguYw6OjEsIOC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDo64Liu4Liy4Lij4LmM4LiU4LiU4Li04Liq4LiB4LmMOjoxOjrguITguKfguLLguKHguIjguLg6OjEsIOC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDo64Liu4Liy4Lij4LmM4LiU4LiU4Li04Liq4LiB4LmMOjoyLCDguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYw6OuC4ruC4suC4o+C5jOC4lOC4lOC4tOC4quC4geC5jDo6Mjo64LiE4Lin4Liy4Lih4LiI4Li4OjoxIOC4q+C4suC4geC5hOC4oeC5iOC4oeC4teC4geC4suC4o+C4m+C5ieC4reC4meC4hOC4peC4suC4quC4l+C4teC5iCBDSSDguYHguKXguYnguKfguITguK3guKXguLHguKHguJnguYzguYDguKPguLTguYjguKHguJXguYnguJnguIjguLDguYHguKrguJTguIfguJXguLLguKHguJfguLXguYjguIHguLPguKvguJnguJTguYTguKfguYnguYPguJnguIHguLLguKPguJXguLHguYnguIfguITguYjguLIgSVRTTUNvbmZpZ0l0ZW0gOjpGcm9udGVuZCA6OiBBZ2VudElUU01Db25maWdJdGVtICMjIyBTaG93Q29sdW1ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gd2lkZ2V0IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55IChrZXkgRGVmYXVsdENvbHVtbnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldyBmb3IgYWxsIENJIGNsYXNzZXMuIElmIHRoZXJlIGlzIG5vIGVudHJ5LCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBsaW5rIHRhYmxlIGNvbXBsZXggdmlldywgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguITguK3guKXguLHguKHguJnguYzguJfguLXguYjguYHguKrguJTguIcgQ0lzIOC5g+C4meC4leC4suC4o+C4suC4h+C4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4oeC4uOC4oeC4oeC4reC4h+C4l+C4teC5iOC4i+C4seC4muC4i+C5ieC4reC4meC4i+C4tuC5iOC4h+C4guC4tuC5ieC4meC4reC4ouC4ueC5iOC4geC4seC4muC4hOC4peC4suC4qiBDSSDguKPguLLguKLguIHguLLguKPguIHguLLguKPguJvguYnguK3guJnguYHguJXguYjguKXguLDguKPguLLguKLguIHguLLguKPguIjguLDguJXguYnguK3guIfguJnguLPguKvguJnguYnguLLguJTguYnguKfguKLguIrguLfguYjguK3guITguKXguLLguKrguYHguKXguLDguYDguITguKPguLfguYjguK3guIfguKvguKHguLLguKLguJfguKfguLTguKDguLLguITguITguLnguYggKOC5gOC4iuC5iOC4meC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDogOikg4Lih4Li14LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIENJIOC5gOC4nuC4teC4ouC4h+C5hOC4oeC5iOC4geC4teC5iOC5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jCDguJfguLXguYjguYPguIrguYnguIHguLHguJnguJfguLHguYjguKfguYTguJvguYPguJkgQ0lzIOC4l+C4seC5ieC4h+C4q+C4oeC4lCAo4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiH4Liq4Liz4Lir4Lij4Lix4Lia4LiE4Lil4Liy4Liq4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMOiDguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYw6OuC4iuC4t+C5iOC4rSwg4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMOjpDdXJEZXBsU3RhdGUsIOC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDo6Q3JlYXRlVGltZSkg4LmD4LiZ4LiB4Liy4Lij4LmB4Liq4LiU4LiH4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIENJIOC4leC4suC4oeC4l+C4teC5iOC4geC4s+C4q+C4meC4lOC5hOC4p+C5ieC5g+C4meC4hOC4s+C4meC4tOC4ouC4suC4oSBDSSDguIjguLDguJXguYnguK3guIfguYPguIrguYnguKPguLnguJvguYHguJrguJrguJXguYjguK3guYTguJvguJnguLXguYko4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiH4Liq4Liz4Lir4Lij4Lix4Lia4LiE4Lil4Liy4Liq4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMKTog4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmMOjrguK7guLLguKPguYzguJTguJTguLTguKrguIHguYw6OjEsIOC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDo64Liu4Liy4Lij4LmM4LiU4LiU4Li04Liq4LiB4LmMOjoxOjrguITguKfguLLguKHguIjguLg6OjEsIOC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jDo64Liu4Liy4Lij4LmM4LiU4LiU4Li04Liq4LiB4LmMOjoyLCDguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYw6OuC4ruC4suC4o+C5jOC4lOC4lOC4tOC4quC4geC5jDo6Mjo64LiE4Lin4Liy4Lih4LiI4Li4OjoxIOC4q+C4suC4geC5hOC4oeC5iOC4oeC4teC4geC4suC4o+C4m+C5ieC4reC4meC4hOC4peC4suC4quC4l+C4teC5iCBDSSDguYHguKXguYnguKfguITguK3guKXguLHguKHguJnguYzguYDguKPguLTguYjguKHguJXguYnguJnguIjguLDguYHguKrguJTguIfguJXguLLguKHguJfguLXguYjguIHguLPguKvguJnguJTguYTguKfguYnguYPguJnguIHguLLguKPguJXguLHguYnguIfguITguYjguLIgSVRTTUNvbmZpZ0l0ZW0gOjpGcm9udGVuZCA6OiBBZ2VudElUU01Db25maWdJdGVtICMjIyBTaG93Q29sdW1ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ+C4i+C5ieC4syc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICfguYDguJvguLTguJTguYPguIrguYnguIfguLLguJnguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguKPguLLguKLguIHguLLguKPguITguLjguJPguKXguLHguIHguKnguJPguLDguILguK3guIfguIHguLLguKPguJfguLPguIfguLLguJnguYDguJvguYfguJnguIHguKXguLjguYjguKEg4Liq4Liz4Lir4Lij4Lix4Lia4Lif4Lij4Lit4LiZ4LiV4LmM4LmA4Lit4LiZ4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmM4LmA4Lie4Li34LmI4Lit4LiX4Liz4LiH4Liy4LiZ4LiB4Lix4Lia4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiX4Li14LmI4Lih4Li14Lih4Liy4LiB4LiB4Lin4LmI4Liy4Lir4LiZ4Li24LmI4LiH4LmD4LiZ4Lir4LiZ4Li24LmI4LiH4LiE4Lij4Lix4LmJ4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICfguYDguJvguLTguJTguYPguIrguYnguIfguLLguJnguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguKPguLLguKLguIHguLLguKPguITguLjguJPguKXguLHguIHguKnguJPguLDguILguK3guIfguIHguLLguKPguJfguLPguIfguLLguJnguYDguJvguYfguJnguIHguKXguLjguYjguKHguYDguInguJ7guLLguLDguKrguLPguKvguKPguLHguJrguIHguKXguLjguYjguKHguJfguLXguYjguKPguLDguJrguLjguYTguKfguYknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJ+C5gOC4m+C4tOC4lCAvIOC4m+C4tOC4lOC4geC4suC4o+C5g+C4iuC5ieC4h+C4suC4meC4n+C4seC4h+C4geC5jOC4iuC4seC5iOC4meC5gOC4nuC4t+C5iOC4reC4leC4o+C4p+C4iOC4quC4reC4miBDb25maWdJdGVtcyDguKrguLPguKvguKPguLHguJrguIrguLfguYjguK3guJfguLXguYjguYTguKHguYjguIvguYnguLPguIHguLHguJkg4LiB4LmI4Lit4LiZ4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiB4LiZ4Li14LmJ4LiE4Li44LiT4LiE4Lin4Lij4LiV4Lij4Lin4LiI4Liq4Lit4Lia4Lij4Liw4Lia4Lia4LiC4Lit4LiH4LiE4Li44LiT4Liq4Liz4Lir4Lij4Lix4Lia4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiX4Li14LmI4Lih4Li14Lit4Lii4Li54LmI4LmB4Lil4LmJ4Lin4LiU4LmJ4Lin4Lii4LiK4Li34LmI4Lit4LiX4Li14LmI4LiL4LmJ4Liz4LiB4Lix4LiZIOC4hOC4uOC4k+C4quC4suC4oeC4suC4o+C4luC4l+C4s+C5gOC4iuC5iOC4meC4meC4teC5ieC4lOC5ieC4p+C4ouC4quC4hOC4o+C4tOC4m+C4leC5jOC4lOC4seC4h+C4leC5iOC4reC5hOC4m+C4meC4teC5iSBiaW4gLyBvdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAn4LmC4Lih4LiU4Li54Lil4LmD4LiZ4LiB4Liy4Lij4LiV4Lij4Lin4LiI4Liq4Lit4Lia4Lic4Li54LmJ4Lij4Lix4Lia4Lic4Li04LiU4LiK4Lit4Lia4LiB4Lil4Li44LmI4Lih4Liq4Liz4Lir4Lij4Lix4Lia4LiE4Lil4Liy4LiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAn4LmC4Lih4LiU4Li54Lil4LmD4LiZ4LiB4Liy4Lij4LiV4Lij4Lin4LiI4Liq4Lit4Lia4Lic4Li54LmJ4Lij4Lix4Lia4Lic4Li04LiU4LiK4Lit4Lia4LiB4Lil4Li44LmI4Lih4Liq4Liz4Lir4Lij4Lix4LiaIGNvbmZpZ3VyYXRpb24gaXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJ+C5guC4oeC4lOC4ueC4peC4quC4o+C5ieC4suC4h+C4quC4luC4tOC4leC4tCBJVFNNIGNvbmZpZyBpdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4peC4h+C4l+C4sOC5gOC4muC4teC4ouC4meC5guC4oeC4lOC4ueC4pSBPYmplY3QgYmFja2VuZCDguKrguLPguKvguKPguLHguJrguYLguKHguJTguLnguKXguJnguLPguYDguILguYnguLLguKvguKPguLfguK3guKrguYjguIfguK3guK3guIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4nuC4suC4o+C4suC4oeC4tOC5gOC4leC4reC4o+C5jOC4quC4s+C4q+C4o+C4seC4muC4geC4suC4o+C4nuC4seC4kuC4meC4suC4quC4luC4suC4meC4oOC4suC4nuC4guC4reC4h+C4quC4teC5g+C4meC4oeC4uOC4oeC4oeC4reC4h+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4guC4reC4h+C4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4nuC4suC4o+C4suC4oeC4tOC5gOC4leC4reC4o+C5jOC4quC4s+C4q+C4o+C4seC4muC4geC4suC4o+C4nuC4seC4kuC4meC4suC4quC4luC4suC4meC4oOC4suC4nuC5g+C4meC4oeC4uOC4oeC4oeC4reC4h+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4guC4reC4h+C4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfguJ7guLLguKPguLLguKHguLTguYDguJXguK3guKPguYzguKrguLPguKvguKPguLHguJrguJXguLHguKfguK3guKLguYjguLLguIfguIHguKXguLjguYjguKHguJfguLXguYjguYTguJTguYnguKPguLHguJrguK3guJnguLjguI3guLLguJXguILguK3guIfguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYzguYHguITguYfguJXguJXguLLguKXguYfguK3guIHguJfguLHguYjguKfguYTguJsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAn4Lie4Liy4Lij4Liy4Lih4Li04LmA4LiV4Lit4Lij4LmM4Liq4Liz4Lir4Lij4Lix4Lia4LmB4LiV4LmI4Lil4Liw4Lir4LiZ4LmJ4LiyKOC4i+C4tuC5iOC4hyBjb25maWd1cmF0aW9uIGl0ZW1zIOC5geC4quC4lOC4hyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiI4Liz4LmA4Lib4LmH4LiZ4LiV4LmJ4Lit4LiH4Lih4Li14LiB4Liy4Lij4Lit4LiZ4Li44LiN4Liy4LiV4Li04LmD4LiZ4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZ4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4LiyIElUU00g4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiI4Liz4LmA4Lib4LmH4LiZ4LiV4LmJ4Lit4LiH4Lih4Li14LiB4Liy4Lij4Lit4LiZ4Li44LiN4Liy4LiV4Li04LmD4LiZ4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZ4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiB4Liy4Lij4LiE4LmJ4LiZ4Lir4Liy4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4LiyIElUU00g4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4iOC4s+C5gOC4m+C5h+C4meC4leC5ieC4reC4h+C4oeC4teC4geC4suC4o+C4reC4meC4uOC4jeC4suC4leC4tOC5g+C4meC4geC4suC4o+C5g+C4iuC5ieC4h+C4suC4meC5g+C4meC4q+C4meC5ieC4suC4iOC4reC4geC4suC4o+C4i+C4ueC4oeC4o+C4suC4ouC4geC4suC4o+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4siBJVFNNIOC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4iOC4s+C5gOC4m+C5h+C4meC4leC5ieC4reC4h+C4oeC4teC4geC4suC4o+C4reC4meC4uOC4jeC4suC4leC4tOC5g+C4meC4geC4suC4o+C5g+C4iuC5ieC4h+C4suC4meC4geC4suC4o+C5gOC4nuC4tOC5iOC4oeC5g+C4meC4q+C4meC5ieC4suC4iOC4reC4o+C4suC4ouC4geC4suC4o+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4siBJVFNNIOC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguIjguLPguYDguJvguYfguJnguJXguYnguK3guIfguKHguLXguIHguLLguKPguK3guJnguLjguI3guLLguJXguLTguYPguJnguIHguLLguKPguYPguIrguYnguIfguLLguJnguIHguLLguKPguYHguIHguYnguYTguILguYPguJnguKvguJnguYnguLLguIjguK3guKPguLLguKLguIHguLLguKPguIHguLLguKPguJXguLHguYnguIfguITguYjguLIgSVRTTSDguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguILguK3guIfguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiI4Liz4LmA4Lib4LmH4LiZ4LiV4LmJ4Lit4LiH4Lih4Li14LiB4Liy4Lij4Lit4LiZ4Li44LiN4Liy4LiV4Li04LmD4LiZ4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZ4Lib4Lij4Liw4Lin4Lix4LiV4Li04LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4LiyIElUU00g4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguIjguLPguYDguJvguYfguJnguJXguYnguK3guIfguKHguLXguIHguLLguKPguK3guJnguLjguI3guLLguJXguLTguYPguJnguIHguLLguKPguYPguIrguYnguIfguLLguJnguIHguLLguKPguJ7guLTguKHguJ7guYzguYPguJnguKvguJnguYnguLLguIjguK3guKPguLLguKLguIHguLLguKPguIHguLLguKPguJXguLHguYnguIfguITguYjguLIgSVRTTSDguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguILguK3guIfguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICfguYDguKXguLfguK3guIHguKvguKHguLLguKLguYDguKXguILguKPguLLguKLguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJXguLHguKfguIHguLPguYDguJnguLTguJTguYLguKHguJTguLnguKUgIkF1dG9JbmNyZW1lbnQiIOC4iOC4sOC5gOC4nuC4tOC5iOC4oeC4q+C4oeC4suC4ouC5gOC4peC4guC4o+C4suC4ouC4geC4suC4o+C4geC4s+C4q+C4meC4lOC4hOC5iOC4siBTeXN0ZW1JRCBDb25maWdJdGVtQ2xhc3NJRCDguYHguKXguLDguJXguLHguKfguJnguLHguJrguJfguLXguYjguKHguLXguIHguLLguKPguYPguIrguYkg4Lij4Li54Lib4LmB4Lia4Lia4LiE4Li34LitICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiDguYDguIrguYjguJkgMTIwNTAwMDAwNCwgMTIwNTAwMDAwNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4Liq4LiW4Liy4LiZ4Liw4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZ4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4Lij4Liy4Lii4LiB4Liy4Lij4LmA4Lib4LmH4LiZ4LiB4Lil4Li44LmI4Lih4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4leC4seC5ieC4h+C4hOC5iOC4suC4quC4luC4suC4meC4sOC4guC4reC4h+C5gOC4q+C4leC4uOC4geC4suC4o+C4k+C5jOC5g+C4meC4q+C4meC5ieC4suC4iOC4reC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4o+C4suC4ouC4geC4suC4o+C5gOC4m+C5h+C4meC4geC4peC4uOC5iOC4oeC4guC4reC4h+C4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4peC4tOC4h+C4hOC5jOC5g+C4meC5gOC4oeC4meC4ueC5gOC4nuC4t+C5iOC4reC4peC4tOC4h+C4hOC5jOC4o+C4suC4ouC4geC4suC4o+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4geC4seC4muC4reC4reC4muC5gOC4iOC4geC4hOC5jOC4reC4t+C5iOC4meC5g+C4meC4geC4suC4o+C4i+C4ueC4oeC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4peC4tOC4h+C4hOC5jOC5g+C4meC5gOC4oeC4meC4ueC5g+C4meC4geC4suC4o+C4l+C4teC5iOC4iOC4sOC5gOC4guC5ieC4suC4iuC4oeC4m+C4o+C4sOC4p+C4seC4leC4tOC4guC4reC4hyBjb25maWd1cmF0aW9uIGl0ZW0g4LmD4LiZ4Lih4Li44Lih4Lih4Lit4LiH4LiX4Lix4LmI4Lin4LmE4Lib4LiC4Lit4LiHY29uZmlndXJhdGlvbiBpdGVt4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4peC4tOC4h+C4hOC5jOC5g+C4meC5gOC4oeC4meC4ueC5g+C4meC4geC4suC4o+C4l+C4teC5iOC4iOC4sOC5gOC4guC5ieC4suC4iuC4oeC4m+C4o+C4sOC4p+C4seC4leC4tOC4guC4reC4hyBjb25maWd1cmF0aW9uIGl0ZW0g4LmD4LiZ4Lih4Li44Lih4Lih4Lit4LiH4LiB4Liy4Lij4LiL4Li54Lih4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LmB4Liq4LiU4LiH4Lil4Li04LiH4LiE4LmM4LmD4LiZ4LmA4Lih4LiZ4Li54LmD4LiZ4LiB4Liy4Lij4LiX4Li14LmI4LiI4Liw4LiI4Liz4Lil4Lit4LiHIGNvbmZpZ3VyYXRpb24gaXRlbSDguYPguJnguKHguLjguKHguKHguK3guIfguJfguLHguYjguKfguYTguJvguILguK3guIdjb25maWd1cmF0aW9uIGl0ZW0g4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguYHguKrguJTguIfguKXguLTguIfguITguYzguYPguJnguYDguKHguJnguLnguYPguJnguIHguLLguKPguJfguLXguYjguIjguLDguIjguLPguKXguK3guIdjb25maWd1cmF0aW9uIGl0ZW0g4LmD4LiZ4Lih4Li44Lih4Lih4Lit4LiH4LiB4Liy4Lij4LiL4Li54Lih4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LmB4Liq4LiU4LiH4Lil4Li04LiH4LiE4LmM4LmD4LiZ4LmA4Lih4LiZ4Li54LmD4LiZ4LiB4Liy4Lij4LiX4Li14LmI4LiI4Liw4LmB4LiB4LmJ4LmE4LiCIGNvbmZpZ3VyYXRpb24gaXRlbSDguYPguJnguKHguLjguKHguKHguK3guIfguIHguLLguKPguIvguLnguKHguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4peC4tOC4h+C4hOC5jOC5g+C4meC5gOC4oeC4meC4ueC5g+C4meC4geC4suC4o+C4l+C4teC5iOC4iOC4sOC4nuC4tOC4oeC4nuC5jCBjb25maWd1cmF0aW9uIGl0ZW0g4LmD4LiZ4Lih4Li44Lih4Lih4Lit4LiH4LiB4Liy4Lij4LiL4Li54Lih4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LmB4Liq4LiU4LiH4Lil4Li04LiH4LiE4LmM4LmD4LiZ4LmA4Lih4LiZ4Li54LmA4Lie4Li34LmI4Lit4LiL4Li54Lih4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LmD4LiZ4Lih4Li44Lih4Lih4Lit4LiH4Lig4Liy4Lie4Lij4Lin4Lih4LiC4Lit4LiH4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguYHguKrguJTguIfguJvguKPguLDguKfguLHguJXguLQgY29uZmlnIGl0ZW0gKOC4peC4s+C4lOC4seC4muC4ouC5ieC4reC4meC4geC4peC4seC4mikg4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICfguJXguLHguKfguJrguYjguIfguIrguLXguYnguKrguLPguKvguKPguLHguJogIENvbmZpZ3VyYXRpb24gSXRlbSDguYDguIrguYjguJkgQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMg4LiE4LmI4Liy4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LiE4Li34LitIENvbmZpZ0l0ZW0jJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnRyX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICdZYWvEsW5sYcWfdMSxcm1hIGfDtnLDvG7DvG3DvCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZ2VuZXJpYyBJVFNNIENvbmZpZ3VyYXRpb24gSXRlbSB0YWJsZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBvbmUgdmVyc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCB2ZXJzaW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gRGVwbG95bWVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gVmVyc2lvbiBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb3BlcnR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgdG8gQ2xhc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENvbmZpZ0l0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBkb25cJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBjb25maWd1cmF0aW9uIGl0ZW06ICVzLid9ID0KICAgICAgICAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY29uZmlnaXRlbSBJRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCwgRHVwbGljYXRlSUQgb3IgQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkZWZpbml0aW9uIHdhcyBkZWZpbmVkIGZvciBjbGFzcyAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHZlcnNpb24gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSAoSUQ9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBjb25maWcgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmludGVkIGJ5ICVzIGF0ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIENsYXNzSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvSVRTTUNvbmZpZ0l0ZW1HZW5lcmljLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93biBjb25maWcgaXRlbXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbS9MYXlvdXREYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZXR3ZWVuJ30gPSAnQXJhc8SxbmRhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyIEVxdWlwbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhcHRvcCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNrdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BEQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uaXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N3aXRjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTiBBY2Nlc3MgUG9pbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZmljZSd9ID0gJ09maXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBUb29sJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtYmVkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbmdsZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBVc2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBQcm9jZXNzb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFNlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb2x1bWUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbnRlcnByaXNlIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV2ZWxvcGVyIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFJlc3RyaWN0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJlZXdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5saW1pdGVkJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgZm9yIHRoZSBhZ2VudCBmcm9udGVuZCB0byB3b3JrIG9uIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBpdGVtIGF0IGEgdGltZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIG9ubHkgZm9yIHRoZSBsaXN0ZWQgZ3JvdXBzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMvZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgQ29uZmlnSXRlbXMgZm9yIHVuaXF1ZSBuYW1lcy4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSBzaG91bGQgY2hlY2sgeW91ciBzeXN0ZW0gZm9yIGFscmVhZHkgZXhpc3RpbmcgY29uZmlnIGl0ZW1zIHdpdGggZHVwbGljYXRlIG5hbWVzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgc2NyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtTGlzdER1cGxpY2F0ZXMucGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHRvIHNldCBjb25maWdpdGVtLXN0YXR1cyBvbiB0aWNrZXQtY29uZmlnaXRlbS1saW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY2xhc3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcmVzcG9uc2libGUgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBJVFNNIGNvbmZpZyBpdGVtIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ0dlbmVsIGthdGFsb2cgw7Z6bml0ZWxpa2xlcmluaW4gw7ZybmVrIGl6aW4gZ3J1cGxhcsSxbsSxbiBwYXJhbWV0cmVsZXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnVrX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICfQl9Cx0ZbQu9GM0YjQtdC90LjQuSDQstC40LQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvRGFzaGJvYXJkL0lUU01Db25maWdJdGVtR2VuZXJpYy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd24gY29uZmlnIGl0ZW1zJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvSVRTTUNvbmZpZ0l0ZW0vTGF5b3V0RGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmV0d2Vlbid9ID0gJyDQnNGW0LYnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0UtTWFpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkZHJlc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibmV0IE1hc2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2F0ZXdheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBLZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVhbnRpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01lZGlhJ30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcHV0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZHdhcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2Z0d2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BpbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rlc3QvUUEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2t0b3AnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUERBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3dpdGNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JvdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ9Cf0YDQuNGB0YLRgNGW0Lkg0YDQtdC30LXRgNCy0L3QvtCz0L4g0LrQvtC/0ZbRjtCy0LDQvdC90Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ0JlYW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvY2tpbmcgU3RhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2FubmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0J1aWxkaW5nJ30gPSAn0LHRg9C00LjQvdC+0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAn0J7RhNGW0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTEFOJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVsY28nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaWRkbGV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGllbnQgT1MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIE9TJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFRvb2wnfSA9ICfQkNC00LzRltC9LdGW0L3RgdGC0YDRg9C80LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbWJlZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaW5nbGUgTGljZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBTZXJ2ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIE5vZGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW50ZXJwcmlzZSBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldmVsb3BlciBMaWNlbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VubGltaXRlZCd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LTQu9GPINC/0YDQuNC60LvQsNC00YMg0LTQvtC30LLQvtC70YMg0LPRgNGD0L8g0LfQsNCz0LDQu9GM0L3QuNGFINCw0YLRgNC40LHRg9GC0ZbQsiDQutCw0YLQsNC70L7Qs9GDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZSBzaG93bikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2VhcmNoIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGFkZCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGVkaXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgcHJpbnQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY29uZmlnIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbnVtYmVyLCB0aGUgU3lzdGVtSUQsIHRoZSBDb25maWdJdGVtQ2xhc3NJRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQuIFRoZSBmb3JtYXQgaXMgIlN5c3RlbUlELkNvbmZpZ0l0ZW1DbGFzc0lELkNvdW50ZXIiLCBlLmcuIDEyMDUwMDAwMDQsIDEyMDUwMDAwMDUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dsb2JhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwb3N0cHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcmVwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Byb2R1Y3RpdmUnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdObycsCiAgICAnT2snLAogICAgJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nLAogICAgJ1NldHRpbmdzJywKICAgICdTdWJtaXQnLAogICAgJ1llcycsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnZpX1ZOX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1Ry4bqhbmcgdGjDoWkgc+G7sSBj4buRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdUcuG6oW5nIHRow6FpIHPhu7EgY+G7kSBoaeG7h24gdGjhu51pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdUaGF5IMSR4buVaSBs4bqnbiBjdeG7kWknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtQnVsay5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNvbmZpZ2l0ZW0gSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQsIER1cGxpY2F0ZUlEIG9yIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB2ZXJzaW9uIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uICVzIGRlbGV0ZWQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1QcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpbnRlZCBieSAlcyBhdCAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgcmlnaHRzIGZvciB0aGlzIGNsYXNzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIFNlYXJjaCBSZXN1bHRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgZGVwbG95bWVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAnVHLhuqFuZyB0aMOhaSB0cmnhu4NuIGtoYWkgY+G7p2EgxJHhu5FpIHTGsOG7o25nIG7DoHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvSVRTTUNvbmZpZ0l0ZW1HZW5lcmljLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93biBjb25maWcgaXRlbXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbS9MYXlvdXREYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZXR3ZWVuJ30gPSAnR2nhu69hJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICdUcsaw4budbmcgcuG7l25nIG5naMSpYSBsw6AgZ2nDoSB0cuG7iyBoaeG7h24gdOG6oWkga2jDtG5nIMSR4buVaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnQuG7iyBi4buPIHF1YSc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAnQ2jhu6duZyBsb+G6oWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAnU+G7kSBzZXJpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICdC4buZIG5o4bubJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ+G7lCBj4bupbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FwYWNpdHknfSA9ICdEdW5nIGzGsOG7o25nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ0NhcmQgbeG6oW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIG92ZXIgREhDUCd9ID0gJ0PhuqVwIElQIHF1YSBESENQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICfEkOG7i2EgY2jhu4kgSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhcGhpYyBBZGFwdGVyJ30gPSAnQ2FyZCDEkeG7kyBob+G6oSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICdUaGnhur90IGLhu4sga2jDoWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAnTmfDoHkgaOG6v3QgaOG6oW4gYuG6o28gaMOgbmgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdGFsbCBEYXRlJ30gPSAnTmfDoHkgY8OgaSDEkeG6t3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ8SQaeG7h24gdGhv4bqhaSAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bob25lIDInfSA9ICfEkGnhu4duIHRob+G6oWkgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAnxJDhu4thIGNo4buJIG3huqFuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ03hurd0IG7huqEgbOG7m3AgbeG6oW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICdD4buVbmcgdHJ1eSBj4bqtcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIFR5cGUnfSA9ICdMb+G6oWkgZ2nhuqV5IHBow6lwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAnS2hvw6EgYuG6o24gcXV54buBbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ1Phu5EgbMaw4bujbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJhdGlvbiBEYXRlJ30gPSAnTmfDoHkgaOG6v3QgaOG6oW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICdQaMawxqFuZyB0aeG7h24nOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICfEkMOjIGjhur90IGjhuqFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01haW50ZW5hbmNlJ30gPSAnQuG6o28gdHLDrCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAnVGhlbyBr4bq/IGhv4bqhY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwYWlyJ30gPSAnU+G7rWEgY2jhu69hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JldGlyZWQnfSA9ICdLaMO0bmcgc+G7rSBk4bulbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV2aWV3J30gPSAnVGjhuqltIMSR4buLbmgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ0tp4buDbSB0cmEvSOG7j2kgxJHDoXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFwdG9wJ30gPSAnTcOheSB4w6FjaCB0YXknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ03DoXkgxJHhu4MgYsOgbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdUaGnhur90IGLhu4sgY+G6p20gdGF5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlcid9ID0gJ03DoXkgY2jhu6cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdLaMOhYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb25pdG9yJ30gPSAnTcOgbiBow6xuaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludGVyJ30gPSAnTcOheSBpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICdC4buZIGNodXnhu4NuIG3huqFjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb3V0ZXInfSA9ICdC4buZIMSR4buLbmggdHV54bq/bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXTEFOIEFjY2VzcyBQb2ludCd9ID0gJ8SQaeG7g20gdHJ1eSBj4bqtcCBraMO0bmcgZMOieSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWN1cml0eSBEZXZpY2UnfSA9ICdUaGnhur90IGLhu4sgYuG6o28gbeG6rXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFja3VwIERldmljZSd9ID0gJ1RoaeG6v3QgYuG7iyBsxrB1IHRy4buvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdXNlJ30gPSAnQ2h14buZdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXlib2FyZCd9ID0gJ0LDoG4gcGjDrW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAnQ2FtZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ0Lhu5kgxJFp4buBdSBiaeG6v24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUENNQ0lBIENhcmQnfSA9ICdDYXJkIFBDTUNJQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVGhp4bq/dCBi4buLIFVTQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICdNw6F5IHRy4bqhbSBj4buRIMSR4buLbmgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ03DoXkgcXVldHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQnVpbGRpbmcnfSA9ICdUb8OgIG5ow6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmaWNlJ30gPSAnVsSDbiBwaMOybmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICdU4bqnbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ1Bow7JuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAnVOG7pyBSYWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ07GoWkgbMOgbSB2aeG7h2MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0bGV0J30gPSAn4buUIGPhuq9tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIEZhY2lsaXR5J30gPSAnQ8ahIHPhu58gQ05UVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICdMQU4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ03huqFuZyBraMO0bmcgZMOieSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ1Zp4buFbiB0aMO0bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR1NNJ30gPSAnR1NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBBcHBsaWNhdGlvbid9ID0gJ+G7qG5nIGThu6VuZyBraMOhY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlkZGxld2FyZSd9ID0gJ1Bo4bqnbiBt4buBbSB0cnVuZyBnaWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBBcHBsaWNhdGlvbid9ID0gJ+G7qG5nIGThu6VuZyBtw6F5IGNo4bunJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ0jEkEgga2jDoWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZlciBPUyd9ID0gJ0jEkEggbcOheSBjaOG7pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBUb29sJ30gPSAnQ8O0bmcgY+G7pSBxdeG6o24gbMO9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgVG9vbCd9ID0gJ0PDtG5nIGPhu6UgbmfGsOG7nWkgZMO5bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICdOaMO6bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICdHaeG6pXkgcGjDqXAgxJHGoW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICdUcsOqbiBuZ8aw4budaSBkw7luZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgUHJvY2Vzc29yJ30gPSAnVHLDqm4gYuG7mSB44butIGzDvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAnVHLDqm4gbcOheSBjaOG7pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgTm9kZSd9ID0gJ1Ryw6puIG5vZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm9sdW1lIExpY2VuY2UnfSA9ICdD4bqlcCBwaMOpcCBz4buRIGzGsOG7o25nIGzhu5tuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ0dp4bqleSBwaMOpcCBkb2FuaCBuZ2hp4buHcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ0dp4bqleSBwaMOpcCBwaMOhdCB0cmnhu4NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW8nfSA9ICdDaOG6oXkgdGjhu60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBSZXN0cmljdGVkJ30gPSAnR2nhu5tpIGjhuqFuIHRo4budaSBnaWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyZWV3YXJlJ30gPSAnUGjhuqduIG3hu4FtIG1p4buFbiBwaMOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW4gU291cmNlJ30gPSAnTcOjIG5ndeG7k24gbeG7nyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICdLaMO0bmcgZ2nhu5tpIGjhuqFuJzsKCiAgICAjIEpTIEZpbGU6IElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbmVkIENJcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgY29tcGFueSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSXMgYXNzaWduZWQgdG8gY3VzdG9tZXIgdXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDTURCIFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIGxpbWl0IHBlciBwYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgRGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBidWxrIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBkZWZpbml0aW9ucyBmb3IgQ29uZmlndXJhdGlvbiBJdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZGVsZXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBnZXQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgcmVndWxhciBleHByZXNzaW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggQ29uZmlnSXRlbSBjbGFzcyB0byBjaGVjayB0aGUgQ29uZmlnSXRlbSBuYW1lIGFuZCB0byBzaG93IGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJvYmplY3Qgb2YgdGhlIGNsYXNzIFwnSVRTTUNvbmZpZ0l0ZW1cJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBmb3IgdGhlIENJIGRlZmluaXRpb24gZWRpdG9yIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3JkZXIgb2YgaW5jaWRlbnQgc3RhdGVzIGZyb20gaGlnaCAoZS5nLiBjcmljaXRhbCkgdG8gbG93IChlLmcuIGZ1bmN0aW9uYWwpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHJlbGV2YW50IGRlcGxveW1lbnQgc3RhdGVzIHdoZXJlIGxpbmtlZCB0aWNrZXRzIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLiBOb3RlOiBDbGFzcyBjb2x1bW4gaXMgYWx3YXlzIGF2YWlsYWJsZSBpZiBmaWx0ZXIgXCdBbGxcJyBpcyBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHdpZGdldCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXI6OkJhY2tlbmQjIyMwMDYwLUNJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueSAoa2V5IERlZmF1bHRDb2x1bW5zKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcsIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgdGlja2V0IGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgQ29sb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlJ30gPSAnTmjDom4gxJHDtGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgdG8gc2V0IGNvbmZpZ2l0ZW0tc3RhdHVzIG9uIHRpY2tldC1jb25maWdpdGVtLWxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBjb25maWcgaXRlbSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjbGFzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBncm91cCByZXNwb25zaWJsZSBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIElUU00gY29uZmlnIGl0ZW0gc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIGN1c3RvbWVyIGNvbXBhbnkgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGNvbG9yIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRlcGxveW1lbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnVGhhbSBz4buRIGNobyBuaMOzbSBj4bqlcCBwaMOpcCBj4bunYSB0aHXhu5ljIHTDrW5oIGRhbmggbeG7pWMgY2h1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYXJlIHNob3duKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgYWRkIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGhpc3RvcnkgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBwcmludCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGluY2lkZW50IHN0YXRlIG9mIGEgQ0kgYXV0b21hdGljYWxseSB3aGVuIGEgVGlja2V0IGlzIExpbmtlZCB0byBhIENJLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlcGxveW1lbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGluY2lkZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNvbmZpZ3VyYXRpb24gaXRlbSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjb25maWcgaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGR1cGxpY2F0ZSBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBpbnRvIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY29uZmlnIGl0ZW0gaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbSwgZS5nLiBDb25maWdJdGVtIywgTXlDb25maWdJdGVtIy4gVGhlIGRlZmF1bHQgaXMgQ29uZmlnSXRlbSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX0NOX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICfnrqHnkIbphY3nva7pobknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICfkv67mlLnnsbvlrprkuYknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICfphY3nva7pobnnsbsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ+WumuS5iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICflj5jmm7QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+aVhemanOeKtuaAgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAn6YOo572y54q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAn57G7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ+mDqOe9sueKtuaAgeexu+Weiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn5b2T5YmN55qE5pWF6Zqc54q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ+W9k+WJjeeahOaVhemanOeKtuaAgeexu+Weiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfmnIDlkI7kv67mlLknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAn6YWN572u6aG5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ+exu+i/h+a7pOWZqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICflhYjku47liJfooajkuK3pgInmi6nnsbvvvIznhLblkI7liJvlu7rmlrDnmoTphY3nva7pobnjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICdJVFNNIOmFjee9rumhuSDmibnph4/mk43kvZwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJ+mDqOe9sueKtuaAgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJ+S6i+S7tueKtuaAgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICfpk77mjqXliLDlhbbku5YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJ+aXoOaViOeahOmFjee9rumhuee8luWPt++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICflsIbopoHpk77mjqXnmoTlj6blpJbkuIDkuKrphY3nva7pobnnvJblj7fjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICfkvaDnnJ/nmoTmg7PopoHliKDpmaTov5nkuKrphY3nva7pobnlkJc/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ+S4uui/meS4qumFjee9rumhueWRveWQjSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIGFscmVhZHkgaW4gdXNlIGJ5IHRoZSBDb25maWdJdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgTnVtYmVyKHMpOiAlcyd9ID0KICAgICAgICAn57yW5Y+35Li6KHMpOiVz55qE6YWN572u6aG55bey57uP5L2/55So5LqG5q2k5ZCN5a2XJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMnfSA9ICfphY3nva7pobnvvJolcyDnmoTljoblj7Lkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBDb250ZW50J30gPSAn5Y6G5Y+y5YC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZXRpbWUnfSA9ICfliJvlu7rml7bpl7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWm9vbSB2aWV3J30gPSAn6K+m5oOF6KeG5Zu+JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICfkuIrkuIvmloforr7nva4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zIHBlciBwYWdlJ30gPSAn5q+P6aG16YWN572u6aG55Liq5pWwJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBnZW5lcmljIElUU00gQ29uZmlndXJhdGlvbiBJdGVtIHRhYmxlJ30gPSAn5LiA5Liq6YCa55So55qESVRTTemFjee9rumhueihqOagvCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIFNlYXJjaCd9ID0gJ+aQnOe0oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8nfSA9ICflkIzml7bmkJzntKLku6XliY3nmoTniYjmnKzlkJc/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Db25maWdJdGVtWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtJ30gPSAn6YWN572u6aG5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBJbmZvcm1hdGlvbid9ID0gJ+mFjee9rumhueS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IERlcGxveW1lbnQgU3RhdGUnfSA9ICflvZPliY3nmoTpg6jnvbLnirbmgIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn5pyA5ZCO5L+u5pS55Lq6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgb25lIHZlcnNpb24nfSA9ICfmmL7npLrkuIDkuKrniYjmnKwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgdmVyc2lvbnMnfSA9ICfmmL7npLrmiYDmnInniYjmnKwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSd9ID0gJ+eJiOacrOaVhemanOeKtuaAgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uIERlcGxveW1lbnQgU3RhdGUnfSA9ICfniYjmnKzpg6jnvbLnirbmgIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBOdW1iZXInfSA9ICfniYjmnKzlj7cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyd9ID0gJ+mFjee9rumhueeJiOacrOivpuaDhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9wZXJ0eSd9ID0gJ+WxnuaApyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuISd9ID0gJ+ayoeacieexu+eahOiuv+mXruadg+mZkO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDb25maWdJdGVtJ30gPSAnSVRTTemFjee9rumhueamguiniCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICfmsqHmnInmjIflrprphY3nva7poblJRO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgQ29uZmlndXJhdGlvbiBJdGVtISd9ID0gJ+aCqOiHs+WwkemcgOimgeS4gOS4qumAieWumueahOmFjee9rumhue+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgZG9uXCd0IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtOiAlcy4nfSA9CiAgICAgICAgJ+S9oOayoeacieatpOmFjee9rumhueeahOWGmeadg+mZkO+8miVz44CCJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICflnKjmlbDmja7lupPkuK3mib7kuI3liLDphY3nva7pobnigJwlc+KAne+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJ+aXoOazleWIoOmZpOmFjee9rumhuUlEICVz77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZlcnNpb24gZm91bmQgZm9yIENvbmZpZ0l0ZW1JRCAlcyEnfSA9ICfmib7kuI3liLDphY3nva7poblJRCVz55qE54mI5pys77yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJ+ayoeacieaMh+WumumFjee9rumhuUlE44CBRHVwbGljYXRlSUTmiJZDbGFzc0lE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyBpcyBnaXZlbiEnfSA9ICfmsqHmnInorr/pl67mnYPpmZDvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJ30gPSAn5rKh5pyJ57G7ICVz55qE5a6a5LmJ77yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISd9ID0gJ+S4jeiDveaYvuekuuWOhuWPsuS/oeaBr++8jOWboOS4uuayoeacieaMh+WumumFjee9rumhuUlE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAn5peg5rOV5pi+56S65Y6G5Y+y6K6w5b2V77yM5Zug5Li65rKh5pyJ6K6/6Zeu5p2D6ZmQ77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBDb25maWdJdGVtIChJRD0lcyknfSA9ICfmlrDlu7rphY3nva7pobnvvIhJRD0lc++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAn5paw5bu654mI5pys77yISUQ9JXPvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICfpg6jnvbLnirbmgIHlt7Lmm7TmlrDvvIjmlrA9JXPvvIzml6c9JXPvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAn5pWF6Zqc54q25oCB5bey5pu05paw77yI5pawPSVz77yM5penPSVz77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJ30gPSAn6YWN572u6aG577yISUQ9JXPvvInlt7LliKDpmaQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayB0byAlcyAodHlwZT0lcykgYWRkZWQnfSA9ICfliLAlc+mTvuaOpeeahO+8iOexu+Weiz0lc++8ieW3sua3u+WKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAn5YiwJXPpk77mjqXnmoTvvIjnsbvlnos9JXPvvInlt7LliKDpmaQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKSd9ID0gJ+mFjee9rumhueWumuS5ieW3suabtOaWsO+8iElEPSVz77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAn5ZCN56ew5bey5pu05paw77yI5pawPSVz77yM5penPSVz77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dHJpYnV0ZSAlcyB1cGRhdGVkIGZyb20gIiVzIiB0byAiJXMiJ30gPSAn5bGe5oCnJXPlt7Lku47igJwlc+KAneabtOaWsOS4uuKAnCVz4oCdJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gJXMgZGVsZXRlZCd9ID0gJ+eJiOacrCVzIOW3suWIoOmZpCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDb25maWdJdGVtSUQgb3IgVmVyc2lvbklEIGlzIGdpdmVuISd9ID0gJ+ayoeacieaMh+WumumFjee9rumhuUlE5oiW54mI5pysSUTvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgY29uZmlnIGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZ2l2ZW4hJ30gPSAn5peg5rOV5pi+56S66YWN572u6aG577yM5Zug5Li65rKh5pyJ6K6/6Zeu5p2D6ZmQ77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn5Zyo5pWw5o2u5bqT5Lit5om+5LiN5Yiw6YWN572u6aG5SUQgJXPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbklEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICflnKjmlbDmja7lupPkuK3mib7kuI3liLDniYjmnKxJRCAlc++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAn6YWN572u6aG5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICfmiZPljbDkurrvvJolcyDvvIzmiZPljbDml6XmnJ/vvJolcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDbGFzc0lEISd9ID0gJ+aXoOaViOeahOexu0lE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENsYXNzSUQgaXMgZ2l2ZW4hJ30gPSAn5rKh5pyJ5oyH5a6a57G7SUTvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICfmsqHmnInov5nkuKrmjIflrprnsbvnmoTorr/pl67mnYPpmZDvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJ+aXoOe7k+aenO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbSBTZWFyY2ggUmVzdWx0cyd9ID0gJ+mFjee9rumhueaQnOe0oue7k+aenCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGl0ZW0sIG5vIGFjY2VzcyByaWdodHMgZm9yIENvbmZpZ0l0ZW0gYXJlIGdpdmVuISd9ID0KICAgICAgICAn5peg5rOV5pi+56S66YWN572u6aG577yM5Zug5Li65rKh5pyJ57uZ5a6a6YWN572u6aG555qE6K6/6Zeu5p2D6ZmQ77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAn5q2j5bi4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICforablkYonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICfmlYXpmpwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ+mFjee9rumhuemDqOe9sueKtuaAgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW5jaWRlbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbSd9ID0gJ+mFjee9rumhueaVhemanOeKtuaAgSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0Rhc2hib2FyZC9JVFNNQ29uZmlnSXRlbUdlbmVyaWMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3duIGNvbmZpZyBpdGVtcyd9ID0gJ+W3suaYvuekuueahOmFjee9rumhuSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0lUU01Db25maWdJdGVtL0xheW91dERhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JldHdlZW4nfSA9ICfml7bpl7TljLrpl7QnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L09iamVjdEJhY2tlbmQvSVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIG9uZSBlbGVtZW50J30gPSAn5Y2V5Liq5YWD57Sg55qE5pyA5aSn5pWw6YePJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCd9ID0gJ+epuuWtl+auteihqOekuuS/neaMgeW9k+WJjeWAvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAn6Lez6L+H55qEJzsKCiAgICAjIFBlcmwgTW9kdWxlOiB2YXIvcGFja2FnZXNldHVwL0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kZWwnfSA9ICflnovlj7cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgQ29tcGFueSd9ID0gJ+WuouaIt+WNleS9jSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJpYWwgTnVtYmVyJ30gPSAn5bqP5YiX5Y+3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NQVSd9ID0gJ0NQVSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYW0nfSA9ICflhoXlrZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGFyZCBEaXNrJ30gPSAn56Gs55uYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhcGFjaXR5J30gPSAn5a656YePJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRhcHRlcid9ID0gJ+e9keWNoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJUCBvdmVyIERIQ1AnfSA9ICfku45ESENQ6I635Y+WSVAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgQWRkcmVzcyd9ID0gJ0lQ5Zyw5Z2AJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYXBoaWMgQWRhcHRlcid9ID0gJ+aYvuWNoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlciBFcXVpcG1lbnQnfSA9ICflhbblroPorr7lpIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlJ30gPSAn5L+d5L+u6L+H5pyf5pel5pyfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgRGF0ZSd9ID0gJ+WuieijheaXpeacnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAxJ30gPSAn55S16K+dMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaG9uZSAyJ30gPSAn55S16K+dMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFLU1haWwnfSA9ICdFLU1haWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV0d29yayBBZGRyZXNzJ30gPSAn572R57uc5Zyw5Z2AJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Ym5ldCBNYXNrJ30gPSAn5a2Q572R5o6p56CBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dhdGV3YXknfSA9ICfnvZHlhbMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGljZW5jZSBUeXBlJ30gPSAn6K645Y+v57G75YirJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgS2V5J30gPSAn6K645Y+v5a+G6ZKlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YW50aXR5J30gPSAn5pWw6YePJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyYXRpb24gRGF0ZSd9ID0gJ+i/h+acn+aXpeacnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNZWRpYSd9ID0gJ+S7i+i0qCc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXB1dGVyJ30gPSAn6K6h566X5py6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmR3YXJlJ30gPSAn56Gs5Lu2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsnfSA9ICfnvZHnu5wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29mdHdhcmUnfSA9ICfova/ku7YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ+W3sui/h+acnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWludGVuYW5jZSd9ID0gJ+e7tOaKpCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQaWxvdCd9ID0gJ+ivlemqjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkJ30gPSAn5bey6K6h5YiSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGFpcid9ID0gJ+S/ruWkjSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXRpcmVkJ30gPSAn5oql5bqfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jldmlldyd9ID0gJ+WkjeWuoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXN0L1FBJ30gPSAn5rWL6K+VL+WTgei0qOS/neivgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICfnrJTorrDmnKwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ+WPsOW8j+eUteiEkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAn5pyN5Yqh5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn5YW25a6DJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICfmmL7npLrlmagnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ+aJk+WNsOacuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICfkuqTmjaLmnLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAn6Lev55Sx5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiDml6Dnur/orr/pl67ngrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAn5a6J5YWo6K6+5aSHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICflpIfku73orr7lpIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICfpvKDmoIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICfplK7nm5gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAn54Wn55u45py6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ+aKleW9seS7qic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ+iwg+ino+iwg+WZqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQeWNoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVVNCIOiuvuWkhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICflnZ7nq5knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ+aJq+aPj+S7qic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ+Wkp+WOpic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICflip7lhazlrqQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICfmpbzlsYInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ+aIv+mXtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAn5py65p62JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ+W3peS9nOmXtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICfmj5LluqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdJVOiuvuaWvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICflsYDln5/nvZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ+aXoOe6v+e9kee7nCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ+eUteivneWFrOWPuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICdHU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAn5a6i5oi356uv5bqU55So56iL5bqPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICfkuK3pl7Tku7YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAn5pyN5Yqh5Zmo5bqU55So56iL5bqPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ+WuouaIt+aTjeS9nOezu+e7nyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICfmnI3liqHlmajmk43kvZzns7vnu58nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ+euoeeQhuW3peWFtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICfnlKjmiLflt6XlhbcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICfltYzlhaXlvI8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICfljZXkuIDorrjlj68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICfmr4/kuKrnlKjmiLcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ+avj+S4quWkhOeQhuWZqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAn5q+P5Liq5pyN5Yqh5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAn5q+P5Liq6IqC54K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAn5om56YeP5o6I5p2DJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ+S8geS4muiuuOWPryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ+W8gOWPkeiuuOWPryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAn5ryU56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ+aXtumXtOmZkOWItic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ+WFjei0uei9r+S7tic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ+W8gOa6kCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICfml6DpmZDliLbnmoQnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn56Gu5a6aJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduZWQgQ0lzJ30gPSAn5bey5YiG6YWN55qE6YWN572u6aG5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciBjb21wYW55J30gPSAn5bey5YiG6YWN57uZ5a6i5oi35Y2V5L2N55qE6YWN572u6aG5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJcyBhc3NpZ25lZCB0byBjdXN0b21lciB1c2VyJ30gPSAn5bey5YiG6YWN57uZ5a6i5oi355So5oi355qE6YWN572u6aG5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NNREIgU2V0dGluZ3MnfSA9ICdDTURC6K6+572uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIG9ubHkgd2l0aGluIHRoZSBzYW1lIENvbmZpZ0l0ZW0gY2xhc3MgKFwnY2xhc3NcJykgb3IgZ2xvYmFsbHkgKFwnZ2xvYmFsXCcpLCB3aGljaCBtZWFucyBldmVyeSBleGlzdGluZyBDb25maWdJdGVtIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuJ30gPQogICAgICAgICfmo4Dmn6XmmK/lkKbkuLrllK/kuIDlkI3np7DnmoTojIPlm7TmmK/ku4XlnKhcJ2NsYXNzXCfvvIjphY3nva7pobnnsbvvvInlhoXov5jmmK9cJ2dsb2JhbFwnKOWFqOWxgCnvvIzlsLHmmK/lnKjmn6Xmib7ph43lpI3phY3nva7pobnlkI3np7Dml7bnmoTojIPlm7TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW1zJ30gPSAn6YWN572u6aG5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGFkZC4nfSA9ICfmt7vliqDphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZWRpdC4nfSA9ICfnvJbovpHphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gZXZlbnQgbW9kdWxlIHRoYXQgZW5hYmxlcyBsb2dnaW5nIHRvIGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+acjeWKoeS6uuWRmOeVjOmdoueUqOS6juiusOW9lemFjee9rumhueS6i+S7tuWIsOWOhuWPsueahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBoaXN0b3J5Lid9ID0gJ+mFjee9rumhueWOhuWPsuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBwcmludC4nfSA9ICfmiZPljbDphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gem9vbS4nfSA9ICfphY3nva7pobnor6bmg4XjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnSXRlbU51bWJlcid9ID0gJ0NvbmZpZ0l0ZW1OdW1iZXLvvIjphY3nva7pobnnvJblj7fvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAn6YWN572u6aG56ZmQ5Yi2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICfmr4/kuKrpobXpnaLkuIrnmoTphY3nva7pobnpmZDliLbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJ+mFjee9rueuoeeQhuaVsOaNruW6k+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAn6YWN572u6aG55om55aSE55CG5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+acjeWKoeS6uuWRmOeVjOmdoueahOmFjee9rumhueaQnOe0ouWQjuerr+i3r+eUseOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAn5Yib5bu65ZKM566h55CG6YWN572u6aG55a6a5LmJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICflrprkuYnpk77mjqXlr7nosaHlsI/pg6jku7YoTGlua09iamVjdDo6Vmlld01vZGUgPSBcImNvbXBsZXhcIinorr7nva7mjInpkq7kuK3nmoTmk43kvZzjgILor7fms6jmhI/vvIzov5nkupvmk43kvZzlv4Xpobvlt7Lnu4/lnKjku6XkuItKU+WSjENTU+aWh+S7tuS4reazqOWGjO+8mkNvcmUuQWxsb2NhdGlvbkxpc3QuY3Nz44CBQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qc+OAgSBDb3JlLlVJLlRhYmxlLlNvcnQuanPjgIFDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qc+WSjENvcmUuQWdlbnQuTGlua09iamVjdC5qc+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn5a6a5LmJ5L2/55So6YCa55So5o6l5Y+j5Yib5bu6SVRTTemFjee9rumhueaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn5a6a5LmJ5L2/55So6YCa55So5o6l5Y+j5Yig6ZmkSVRTTemFjee9rumhueaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGdldCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn5a6a5LmJ5L2/55So6YCa55So5o6l5Y+j6I635Y+WSVRTTemFjee9rumhueaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHNlYXJjaCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn5a6a5LmJ5L2/55So6YCa55So5o6l5Y+j5pCc57SiSVRTTemFjee9rumhueaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAn5a6a5LmJ5L2/55So6YCa55So5o6l5Y+j5pu05pawSVRTTemFjee9rumhueaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY29uZmlndXJhdGlvbiBpdGVtIGxpc3QuJ30gPQogICAgICAgICflrprkuYnmmL7npLrphY3nva7pobnliJfooajnroDmtIHop4blm77nmoTmpoLop4jmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyByZWd1bGFyIGV4cHJlc3Npb25zIGluZGl2aWR1YWxseSBmb3IgZWFjaCBDb25maWdJdGVtIGNsYXNzIHRvIGNoZWNrIHRoZSBDb25maWdJdGVtIG5hbWUgYW5kIHRvIHNob3cgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlcy4nfSA9CiAgICAgICAgJ+S4uuavj+S4qumFjee9rumhueexu+WumuS5ieeLrOeri+eahOato+WImeihqOi+vuW8j++8jOS7peajgOafpemFjee9rumhueWQjeensOW5tuaYvuekuuebuOW6lOeahOmUmeivr+a2iOaBr+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1Ym9iamVjdCBvZiB0aGUgY2xhc3MgXCdJVFNNQ29uZmlnSXRlbVwnLid9ID0KICAgICAgICAn5a6a5LmJXCdJVFNNQ29uZmlnSXRlbVwn57G755qE6buY6K6k5a2Q5a+56LGh44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgQ0kgZGVmaW5pdGlvbiBlZGl0b3IgaW4gdGhlIGFkbWluIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WumuS5ieWcqOezu+e7n+euoeeQhumdouadv+S4reS/ruaUuemFjee9rumhueWumuS5ieeahOe8lui+keWZqOeahOihjOaVsOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcmRlciBvZiBpbmNpZGVudCBzdGF0ZXMgZnJvbSBoaWdoIChlLmcuIGNyaWNpdGFsKSB0byBsb3cgKGUuZy4gZnVuY3Rpb25hbCkuJ30gPQogICAgICAgICflrprkuYnmlYXpmpznirbmgIHku47pq5jvvIjlpoLntKfmgKXvvInliLDkvY7vvIjlpoLmraPluLjvvInnmoTpobrluo/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVsZXZhbnQgZGVwbG95bWVudCBzdGF0ZXMgd2hlcmUgbGlua2VkIHRpY2tldHMgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgQ0kuJ30gPQogICAgICAgICflrprkuYnlhbPogZTnmoTpg6jnvbLnirbmgIHvvIzljbPpk77mjqXnmoTlt6XljZXlj6/ku6XlvbHlk43phY3nva7pobnnirbmgIHnmoTmg4XlhrXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgQWdlbnRJVFNNQ29uZmlnSXRlbSBzY3JlZW4uJ30gPQogICAgICAgICflrprkuYlBZ2VudElUU01Db25maWdJdGVt77yI5pyN5Yqh5Lq65ZGY6YWN572u6aG577yJ56qX5Y+j55qE5pCc57Si6ZmQ5Yi2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlYXJjaCBsaW1pdCBmb3IgdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAn5a6a5LmJQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaO+8iOacjeWKoeS6uuWRmOmFjee9rumhueaQnOe0ou+8ieeql+WPo+eahOaQnOe0oumZkOWItic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICflrprkuYnphY3nva7pobnmpoLop4jmmL7npLrnmoTlrZfmrrXjgILov5nkuKrpgInpobnkuI3kvJrlvbHlk43lrZfmrrXnmoTkvY3nva7jgILms6jmhI/vvJrlpoLmnpzpgInmi6nigJzlhajpg6jigJ3vvIzliJnigJxDbGFzc++8iOexu++8ieKAneWtl+auteaAu+aYr+S8muaYvuekuuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICflrprkuYnphY3nva7pobnmkJzntKLkuK3mmL7npLrnmoTlrZfmrrXjgILov5nkuKrpgInpobnkuI3kvJrlvbHlk43lrZfmrrXnmoTkvY3nva7jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIG92ZXJ2aWV3IGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAn5a6a5LmJ6YWN572u6aG55qaC6KeI6KeG5Zu+5Lit5oyJ6YWN572u6aG557G75YiG57G75pi+56S655qE5a2X5q6144CC5q+P5Liq5p2h55uu5Z2H6ZyA5Lul57G75ZCN5Li65YmN57yA5YaN5Yqg5LiK5Y+M5YaS5Y+377yI5aaC6K6h566X5py6OjrvvInjgILmnInkuIDkupvphY3nva7pobnlsZ7mgKfmmK/miYDmnInphY3nva7pobnpg73mnInnmoTvvIjkvovlpoLvvIzlr7nkuo7orqHnrpfmnLrnsbvvvJrorqHnrpfmnLo6OuWQjeensOOAgeiuoeeul+acujo6Q3VyRGVwbFN0YXRl5b2T5YmN6YOo572y54q25oCB44CB6K6h566X5py6OjpDcmVhdGVUaW1l5Yib5bu65pe26Ze077yJ44CC6KaB5pi+56S65Zyo6YWN572u6aG55a6a5LmJ5Lit5a6a5LmJ55qE54us54m555qE6YWN572u6aG55bGe5oCn77yM5b+F6aG75L2/55So5LiL6Z2i55qE5pa55qGI77yI5L6L5aaC77ya5a+55LqO6K6h566X5py657G777ya6K6h566X5py6Ojrnoaznm5g6OjHjgIHorqHnrpfmnLo6OuehrOebmDo65a656YePOjox44CB6K6h566X5py6Ojrnoaznm5g6OjLjgIHorqHnrpfmnLo6OuehrOebmDo6Muiuoeeul+acujo656Gs55uYOjoy77yJ44CC5aaC5p6c5LiA5Liq6YWN572u6aG557G75rKh5pyJ5p2h55uu5a2Y5Zyo77yM5YiZ5L2/55So5ZyoSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnPkuK3orr7nva7nmoTpu5jorqTlrZfmrrXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGNvbmZpZyBpdGVtIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJ+WumuS5ieaMiemFjee9rumhueexu+WIhuexu+eahOmFjee9rumhueaQnOe0oue7k+aenOS4reaYvuekuueahOWtl+auteOAguavj+S4quadoeebruWdh+mcgOS7peexu+WQjeS4uuWJjee8gOWGjeWKoOS4iuWPjOWGkuWPt++8iOWmguiuoeeul+acujo677yJ44CC5pyJ5LiA5Lqb6YWN572u6aG55bGe5oCn5piv5omA5pyJ6YWN572u6aG56YO95pyJ55qE77yI5L6L5aaC77yM5a+55LqO6K6h566X5py657G777ya6K6h566X5py6OjrlkI3np7DjgIHorqHnrpfmnLo6OkN1ckRlcGxTdGF0ZeW9k+WJjemDqOe9sueKtuaAgeOAgeiuoeeul+acujo6Q3JlYXRlVGltZeWIm+W7uuaXtumXtO+8ieOAguimgeaYvuekuuWcqOmFjee9rumhueWumuS5ieS4reWumuS5ieeahOeLrOeJueeahOmFjee9rumhueWxnuaAp++8jOW/hemhu+S9v+eUqOS4i+mdoueahOaWueahiO+8iOS+i+Wmgu+8muWvueS6juiuoeeul+acuuexu++8muiuoeeul+acujo656Gs55uYOjox44CB6K6h566X5py6Ojrnoaznm5g6OuWuuemHjzo6MeOAgeiuoeeul+acujo656Gs55uYOjoy44CB6K6h566X5py6Ojrnoaznm5g6OjLorqHnrpfmnLo6OuehrOebmDo6Mu+8ieOAguWmguaenOS4gOS4qumFjee9rumhueexu+ayoeacieadoeebruWtmOWcqO+8jOWImeS9v+eUqOWcqElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5z5Lit6K6+572u55qE6buY6K6k5a2X5q6144CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICflrprkuYnphY3nva7pobnlsI/pg6jku7bkuK3mjInphY3nva7pobnnsbvliIbnsbvmmL7npLrnmoTlrZfmrrXjgILmr4/kuKrmnaHnm67lnYfpnIDku6XnsbvlkI3kuLrliY3nvIDlho3liqDkuIrlj4zlhpLlj7fvvIjlpoLorqHnrpfmnLo6Ou+8ieOAguacieS4gOS6m+mFjee9rumhueWxnuaAp+aYr+aJgOaciemFjee9rumhuemDveacieeahO+8iOS+i+Wmgu+8jOWvueS6juiuoeeul+acuuexu++8mkNvbXB1dGVyOjpOYW1l44CBQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZeW9k+WJjemDqOe9sueKtuaAgeOAgUNvbXB1dGVyOjpDcmVhdGVUaW1l5Yib5bu65pe26Ze077yJ44CC6KaB5pi+56S65Zyo6YWN572u6aG55a6a5LmJ5Lit5a6a5LmJ55qE54us54m555qE6YWN572u6aG55bGe5oCn77yM5b+F6aG75L2/55So5LiL6Z2i55qE5pa55qGI77yI5L6L5aaC77ya5a+55LqO6K6h566X5py657G777yaQ29tcHV0ZXI6OkhhcmREaXNrOjox44CQ6K6h566X5py6Ojrnoaznm5g6OjHjgJHjgIFDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5Ojox44CQ6K6h566X5py6Ojrnoaznm5g6OuWuuemHjzo6MeOAkeOAgSBDb21wdXRlcjo6SGFyZERpc2s6OjLjgJDorqHnrpfmnLo6OuehrOebmDo6MuOAkeOAgUNvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjHjgJDorqHnrpfmnLo6OuehrOebmDo6Mjo65a656YePOjox44CR77yJ44CC5aaC5p6c5LiA5Liq6YWN572u6aG557G75rKh5pyJ5p2h55uu5a2Y5Zyo77yM5YiZ5L2/55So5ZyoQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkg5Lit6K6+572u55qE6buY6K6k5a2X5q61KERlZmF1bHRDb2x1bW5z6ZSuKeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgbGluayB0YWJsZSBjb21wbGV4IHZpZXcgZm9yIGFsbCBDSSBjbGFzc2VzLiBJZiB0aGVyZSBpcyBubyBlbnRyeSwgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJ+WcqOaJgOaciemFjee9rumhueexu+eahOmTvuaOpeihqOWkjeadguinhuWbvuS4reWumuS5ieimgeaYvuekuueahOmFjee9rumhueWtl+auteOAgiDlpoLmnpzmsqHmnInmnaHnm67vvIzliJnmmL7npLrpu5jorqTlrZfmrrXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJ+WumuS5iemTvuaOpeihqOWkjeWQiOinhuWbvuS4reaMiemFjee9rumhueexu+WIhuexu+aYvuekuueahOWtl+auteOAguavj+S4quadoeebruWdh+mcgOS7peexu+WQjeS4uuWJjee8gOWGjeWKoOS4iuWPjOWGkuWPt++8iOWmguiuoeeul+acujo677yJ44CC5pyJ5LiA5Lqb6YWN572u6aG55bGe5oCn5piv5omA5pyJ6YWN572u6aG56YO95pyJ55qE77yI5L6L5aaC77yM5a+55LqO6K6h566X5py657G777ya6K6h566X5py6OjrlkI3np7DjgIHorqHnrpfmnLo6OkN1ckRlcGxTdGF0ZeW9k+WJjemDqOe9sueKtuaAgeOAgeiuoeeul+acujo6Q3JlYXRlVGltZeWIm+W7uuaXtumXtO+8ieOAguimgeaYvuekuuWcqOmFjee9rumhueWumuS5ieS4reWumuS5ieeahOeLrOeJueeahOmFjee9rumhueWxnuaAp++8jOW/hemhu+S9v+eUqOS4i+mdoueahOaWueahiO+8iOS+i+Wmgu+8muWvueS6juiuoeeul+acuuexu++8muiuoeeul+acujo656Gs55uYOjox44CB6K6h566X5py6Ojrnoaznm5g6OuWuuemHjzo6MeOAgeiuoeeul+acujo656Gs55uYOjoy44CB6K6h566X5py6Ojrnoaznm5g6OjLorqHnrpfmnLo6OuehrOebmDo6Mu+8ieOAguWmguaenOS4gOS4qumFjee9rumhueexu+ayoeacieadoeebruWtmOWcqO+8jOWImeS9v+eUqOWcqElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5z5Lit6K6+572u55qE6buY6K6k5a2X5q6144CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiBsaW5rIChuYW1lZCBmcm9tIHRoZSB0aWNrZXQgcGVyc3BlY3RpdmUpIGNhbiBhZmZlY3QgdGhlIHN0YXR1cyBvZiBhIGxpbmtlZCBDSS4nfSA9CiAgICAgICAgJ+WumuS5ieWTquS4gOexuyjku47lt6XljZXop5Lluqblkb3lkI3nmoQp6ZO+5o6l5Y+v5Lul5b2x5ZON5LiA5Liq6ZO+5o6l55qE6YWN572u6aG555qE54q25oCB44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hpY2ggdHlwZSBvZiB0aWNrZXQgY2FuIGFmZmVjdCB0aGUgc3RhdHVzIG9mIGEgbGlua2VkIENJLid9ID0KICAgICAgICAn5a6a5LmJ5ZOq5LiA57G75bel5Y2V5Y+v5Lul5b2x5ZON5LiA5Liq6ZO+5o6l55qE6YWN572u6aG555qE54q25oCB44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25maWd1cmF0aW9uIEl0ZW0nfSA9ICfliKDpmaTphY3nva7pobknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBTdGF0ZSBDb2xvcid9ID0gJ+mDqOe9sueKtuaAgeeahOminOiJsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICflpI3liLYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBmb3IgdGhlIGFnZW50IGZyb250ZW5kIHRvIHdvcmsgb24gbW9yZSB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGl0ZW0gYXQgYSB0aW1lLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5ZCv55So6YWN572u6aG55om56YeP5pON5L2c5Yqf6IO977yM5Y+v5Lul5LiA5qyh5aSE55CG5aSa5Liq6YWN572u6aG544CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPQogICAgICAgICflj6rmnInliJfooajkuK3nmoTnu4TmiY3mnInmnYPpmZDkvb/nlKjphY3nva7pobnmibnph4/mk43kvZzlip/og73jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcy9kaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBDb25maWdJdGVtcyBmb3IgdW5pcXVlIG5hbWVzLiBCZWZvcmUgZW5hYmxpbmcgdGhpcyBvcHRpb24geW91IHNob3VsZCBjaGVjayB5b3VyIHN5c3RlbSBmb3IgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBzY3JpcHQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1MaXN0RHVwbGljYXRlcy5wbC4nfSA9CiAgICAgICAgJ+WQr+eUqC/npoHnlKjmo4Dmn6XphY3nva7pobnllK/kuIDlkI3np7Dlip/og73jgILlnKjlkK/nlKjov5nkuKrpgInpobnliY3vvIzmgqjlupTor6Xmo4Dmn6Xns7vnu5/kuK3mmK/lkKblt7Lnu4/lrZjlnKjph43lkI3nmoTphY3nva7pobnvvIzmgqjlj6/ku6Xkvb/nlKjov5nkuKrohJrmnKzmnaXmo4Dmn6Xph43lkI3mg4XlhrXvvJpiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBs44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJ+WcqOW3peWNlS3phY3nva7pobnnmoTpk77mjqXkuK3orr7nva7phY3nva7pobkt54q25oCB55qE5LqL5Lu25qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gY29uZmlnIGl0ZW0gb3ZlcnZpZXcuJ30gPSAnSVRTTemFjee9rumhueamguiniOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJ+eUqOS6juajgOafpemFjee9rumhueexu+eahOe7hOadg+mZkOeahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJ+eUqOS6juajgOafpemFjee9rumhueeahOe7hOadg+mZkOeahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJ+eUqOS6jueUn+aIkElUU03phY3nva7pobnnu5/orqHnmoTmqKHlnZcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAn55So5LqO5a+85YWlL+WvvOWHuuaooeWdl+eahOWvueixoeWQjuerr+aooeWdl+azqOWGjOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldy4nfSA9ICfmpoLop4jjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBjdXN0b21lciBjb21wYW55IGNvbmZpZyBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAn5pyN5Yqh5Lq65ZGY55WM6Z2i5a6i5oi35a6i5oi35Y2V5L2N6YWN572u6aG55qaC6KeI55qE5Luq6KGo5p2/5ZCO56uv55qE5Y+C5pWw44CCIkxpbWl077yI6ZmQ5Yi277yJIiDmmK/pu5jorqTnmoTmmL7npLrmnaHnm67mlbDvvIzigJxHcm91cOKAne+8iOe7hO+8ieeUqOS6juWIsOacrOaPkuS7tueahOiuv+mXruadg+mZkOmZkOWItu+8iOWmgiBHcm91cDphZG1pbjtncm91cDE7Z3JvdXAy77yJ44CC4oCcRGVmYXVsdO+8iOm7mOiupO+8ieKAneS7o+ihqOi/meS4quaPkuS7tuaYr+m7mOiupOWQr+eUqOi/mOaYr+mcgOimgeeUqOaIt+aJi+WKqOWQr+eUqOOAguKAnENhY2hlVFRM4oCd5piv5pys5o+S5Lu255qE57yT5a2Y6L+H5pyf5pe26Ze077yI5Y2V5L2N77ya5YiG6ZKf77yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBjb2xvciBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5pyN5Yqh5Lq65ZGY55WM6Z2i5YGP5aW96K6+572u6KeG5Zu+5Lit55So5LqO6YOo572y54q25oCB6aKc6Imy55qE5Y+C5pWw44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5pyN5Yqh5Lq65ZGY55WM6Z2i5YGP5aW96K6+572u6KeG5Zu+5Lit55So5LqO6YOo572y54q25oCB55qE5Y+C5pWw44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ+ebruW9leWxnuaAp+agt+S+iy3mnYPpmZDnu4TnmoTlj4LmlbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAn5pi+56S66YWN572u6aG555qE6aG16Z2i5Y+C5pWw44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICfmnYPpmZDnu4QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+acjeWKoeS6uuWRmOeVjOmdouS9v+eUqElUU03phY3nva7pobnnqpflj6PpnIDopoHnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmnI3liqHkurrlkZjnlYzpnaLkvb/nlKhJVFNN6YWN572u6aG55pCc57Si56qX5Y+j6ZyA6KaB55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+acjeWKoeS6uuWRmOeVjOmdouS9v+eUqElUU03phY3nva7pobnor6bmg4Xnqpflj6PpnIDopoHnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmnI3liqHkurrlkZjnlYzpnaLkvb/nlKjmt7vliqBJVFNN6YWN572u6aG556qX5Y+j6ZyA6KaB55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZWRpdCBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+acjeWKoeS6uuWRmOeVjOmdouS9v+eUqOe8lui+kUlUU03phY3nva7pobnnqpflj6PpnIDopoHnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBoaXN0b3J5IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5pyN5Yqh5Lq65ZGY55WM6Z2i5L2/55SoSVRTTemFjee9rumhueWOhuWPsueql+WPo+mcgOimgeeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5pyN5Yqh5Lq65ZGY55WM6Z2i5L2/55SoSVRTTemFjee9rumhueaJk+WNsOeql+WPo+mcgOimgeeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjb25maWcgaXRlbXMuJ30gPSAn5Yig6Zmk6YWN572u6aG55omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjb25maWcgaXRlbXMuJ30gPSAn5pCc57Si6YWN572u6aG544CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBudW1iZXIsIHRoZSBTeXN0ZW1JRCwgdGhlIENvbmZpZ0l0ZW1DbGFzc0lEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZC4gVGhlIGZvcm1hdCBpcyAiU3lzdGVtSUQuQ29uZmlnSXRlbUNsYXNzSUQuQ291bnRlciIsIGUuZy4gMTIwNTAwMDAwNCwgMTIwNTAwMDAwNS4nfSA9CiAgICAgICAgJ+mAieaLqemFjee9rumhueWPt+eggeeUn+aIkOWZqOaooeWdl+OAguKAnEF1dG9JbmNyZW1lbnToh6rliqjlop7ph4/igJ3kvb/nlKjns7vnu59JROOAgemFjee9rumhueexu0lE5ZKM6K6h5pWw5Zmo5p2l5aKe5Yqg6YWN572u6aG55Y+377yM5qC85byP5Li677ya57O757ufSUQu6YWN572u6aG557G7SUQu6K6h5pWw5Zmo77yM5aaCMTIwNTAwMDAwNOOAgTEyMDUwMDAwMDXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBhIENJIGF1dG9tYXRpY2FsbHkgd2hlbiBhIFRpY2tldCBpcyBMaW5rZWQgdG8gYSBDSS4nfSA9CiAgICAgICAgJ+W9k+S4gOS4quW3peWNlemTvuaOpeWIsOS4gOS4qumFjee9rumhueaXtuiHquWKqOiuvue9rui/meS4qumFjee9rumhueeahOaVhemanOeKtuaAgeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZXBsb3ltZW50IHN0YXRlIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdoumFjee9rumhueaJuemHj+aTjeS9nOeql+WPo+iuvue9rumDqOe9sueKtuaAgeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmNpZGVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLphY3nva7pobnmibnph4/mk43kvZznqpflj6Porr7nva7kuovku7bnirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjb25maWd1cmF0aW9uIGl0ZW0gd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY29uZmlnIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLphY3nva7pobnor6bmg4Xop4blm77kuK3vvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrlhYHorrjpk77mjqXphY3nva7pobnliLDlj6bkuIDlr7nosaHnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLphY3nva7pobnmpoLop4jop4blm77kuK3vvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrlhYHorrjorr/pl67phY3nva7pobnljoblj7LnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i6YWN572u6aG56K+m5oOF6KeG5Zu+5Lit77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq5YWB6K646K6/6Zeu6YWN572u6aG55Y6G5Y+y55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i6YWN572u6aG56K+m5oOF6KeG5Zu+5Lit77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq5Yig6Zmk6YWN572u6aG555qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i6YWN572u6aG55qaC6KeI6KeG5Zu+5Lit77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq5aSN5Yi26YWN572u6aG555qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkdXBsaWNhdGUgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdoumFjee9rumhueivpuaDheinhuWbvuS4re+8jOWcqOiPnOWNleS4reaYvuekuuS4gOS4quWkjeWItumFjee9rumhueeahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i6YWN572u6aG56K+m5oOF6KeG5Zu+5Lit77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq57yW6L6R6YWN572u6aG555qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLphY3nva7pobnor6bmg4Xop4blm77kuK3vvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrov5Tlm57pk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLphY3nva7pobnor6bmg4Xop4blm77kuK3vvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrmiZPljbDphY3nva7pobnnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHpvb20gaW50byBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLphY3nva7pobnmpoLop4jop4blm77kuK3vvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrmn6XnnIvphY3nva7pobnor6bmg4XnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdouaYvuekuumFjee9rumhueWOhuWPsu+8iOWAkuW6j++8ieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGUuZy4gQ29uZmlnSXRlbSMsIE15Q29uZmlnSXRlbSMuIFRoZSBkZWZhdWx0IGlzIENvbmZpZ0l0ZW0jLid9ID0KICAgICAgICAn6YWN572u6aG55qCH6K+G56ym77yM5aaCQ29uZmlnSXRlbSPjgIFNeUNvbmZpZ0l0ZW0j77yM6buY6K6k5pivQ29uZmlnSXRlbSPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2xhc3MnfSA9ICfnsbsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ2xvYmFsJ30gPSAn5YWo5bGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bvc3Rwcm9kdWN0aXZlJ30gPSAn6Zey572uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByZXByb2R1Y3RpdmUnfSA9ICflh4blpIfmipXkuqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJvZHVjdGl2ZSd9ID0gJ+aKleS6pyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ05vJywKICAgICdPaycsCiAgICAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IG9uZSBzZWFyY2ggdmFsdWUgb3IgKiB0byBmaW5kIGFueXRoaW5nLicsCiAgICAnU2V0dGluZ3MnLAogICAgJ1N1Ym1pdCcsCiAgICAnWWVzJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX1RXX0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNvbmZpZ0l0ZW0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtIE1hbmFnZW1lbnQnfSA9ICfnrqHnkIbphY3nva7poIUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGNsYXNzIGRlZmluaXRpb24nfSA9ICfkv67mlLnpoZ7lrprnvqknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbid9ID0gJ+Wumue+qSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UnfSA9ICfkv67mlLknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RGFzaGJvYXJkSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+aVhemanOeLgOaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlJ30gPSAn6YOo572y54uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsYXNzJ30gPSAn6aGe5YilJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgU3RhdGUgVHlwZSd9ID0gJ+mDqOe9sueLgOaFi+mhnuWeiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn55W25YmN55qE5pWF6Zqc54uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ+eVtuWJjeeahOaVhemanOeLgOaFi+mhnuWeiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfmnIDlvozkv67mlLknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtJ30gPSAn6YWN572u6aCFJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgQ2xhc3Nlcyd9ID0gJ+mBjua/vumhnic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBDbGFzcyBmcm9tIHRoZSBsaXN0IHRvIGNyZWF0ZSBhIG5ldyBDb25maWcgSXRlbS4nfSA9ICflhYjlvp7liJfooajkuK3pgbjmk4fpoZ7liKXvvIznhLblvozlu7rnq4vmlrDnmoTphY3nva7poIXjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENvbmZpZ0l0ZW0gQnVsayBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwbG95bWVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvIGFub3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbnVtYmVyIG9mIGFub3RoZXIgQ29uZmlndXJhdGlvbiBJdGVtIHRvIGxpbmsgd2l0aC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjb25maWcgaXRlbT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJ30gPSAn54K66YCZ5YCL6YWN572u6aCF5ZG95ZCNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzJ30gPQogICAgICAgICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIENvbmZpZyBJdGVtOiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IENvbnRlbnQnfSA9ICfmrbflj7LlhoXlrrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRldGltZSd9ID0gJ+WJteW7uuaZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydab29tIHZpZXcnfSA9ICfnvKnmlL7oppblnJYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ+S4iuS4i+aWh+ioree9ric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgSXRlbXMgcGVyIHBhZ2UnfSA9ICfmr4/poIHphY3nva7poIXlgIvmlbgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biBTZWFyY2gnfSA9ICfmkJzntKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxzbyBzZWFyY2ggaW4gcHJldmlvdXMgdmVyc2lvbnM/J30gPSAn5ZCM5pmC5pCc57Si5Lul5YmN55qE54mI5pysPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJ+mFjee9rumghSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIEl0ZW0gSW5mb3JtYXRpb24nfSA9ICfphY3nva7poIXkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBEZXBsb3ltZW50IFN0YXRlJ30gPSAn55W25YmN55qE6YOo572y54uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+acgOW+jOS/ruaUueaWvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9uZSB2ZXJzaW9uJ30gPSAn6aGv56S65LiA5YCL54mI5pysJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHZlcnNpb25zJ30gPSAn6aGv56S65omA5pyJ54mI5pysJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gSW5jaWRlbnQgU3RhdGUnfSA9ICfniYjmnKzmlYXpmpzni4DmhYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlJ30gPSAn54mI5pys6YOo5bGs54uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZlcnNpb24gTnVtYmVyJ30gPSAn54mI5pys6Jmf56K8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBWZXJzaW9uIERldGFpbHMnfSA9ICfphY3nva7poIXniYjmnKzoqbPmg4UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvcGVydHknfSA9ICflsazmgKcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW0ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFjY2VzcyB0byBDbGFzcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ29uZmlnSXRlbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGsucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIENvbmZpZ3VyYXRpb24gSXRlbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJ30gPQogICAgICAgICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2ZXJzaW9uIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY2Nlc3MgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIG5vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gYWNjZXNzIHJpZ2h0cyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IENvbmZpZ0l0ZW0gKElEPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdmVyc2lvbiAoSUQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IHN0YXRlIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtIChJRD0lcykgZGVsZXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBhZGRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIHRvICVzICh0eXBlPSVzKSBkZWxldGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW0gZGVmaW5pdGlvbiB1cGRhdGVkIChJRD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlICVzIHVwZGF0ZWQgZnJvbSAiJXMiIHRvICIlcyInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmVyc2lvbiAlcyBkZWxldGVkJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Db25maWdJdGVtUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWZXJzaW9uSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWdJdGVtJ30gPSAn6YWN572u6aCFJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaW50ZWQgYnkgJXMgYXQgJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgQ2xhc3NJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJ+aykuaciee1kOaenCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnfSA9ICfphY3nva7poIXnm67mkJzlsIvntZDmnpwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkZXBsb3ltZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICfphY3nva7poIXpg6jnvbLni4DmhYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nfSA9ICfphY3nva7poIXmlYXpmpzni4DmhYsnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvSVRTTUNvbmZpZ0l0ZW1HZW5lcmljLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93biBjb25maWcgaXRlbXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNQ29uZmlnSXRlbS9MYXlvdXREYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCZXR3ZWVuJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9PYmplY3RCYWNrZW5kL0lUU01Db25maWdJdGVtLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCd9ID0gJ+atpOWFg+e0oOeahOacgOWkp+aVuOmHjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnfSA9ICfnqbrlrZfmrrXooajnpLrnlbbliY3lgLzooqvkv53lrZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ+i3s+mBjueahCc7CgogICAgIyBQZXJsIE1vZHVsZTogdmFyL3BhY2thZ2VzZXR1cC9JVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGVsJ30gPSAn5Z6L6JmfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIENvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VyaWFsIE51bWJlcid9ID0gJ+W6j+WIl+iZnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDUFUnfSA9ICdDUFUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFtJ30gPSAn5YaF5a2YJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hhcmQgRGlzayd9ID0gJ+ehrOeinyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXBhY2l0eSd9ID0gJ+WuuemHjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrIEFkYXB0ZXInfSA9ICfntrLot6/ljaEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVAgb3ZlciBESENQJ30gPSAn5b6eREhDUOWPluW+l0lQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lQIEFkZHJlc3MnfSA9ICdJUOS9jeWdgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFwaGljIEFkYXB0ZXInfSA9ICfpoa/npLrljaEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXIgRXF1aXBtZW50J30gPSAn5YW25a6D6Kit5YKZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZSd9ID0gJ+S/nemkiuWkseaViOaXpeacnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0YWxsIERhdGUnfSA9ICflronoo4Xml6XmnJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMSd9ID0gJ+mbu+ipsTEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGhvbmUgMid9ID0gJ+mbu+ipsTInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRS1NYWlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldHdvcmsgQWRkcmVzcyd9ID0gJ+e2sui3r+S9jeWdgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJuZXQgTWFzayd9ID0gJ+WtkOe2sui3r+mBrueFpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHYXRld2F5J30gPSAn6ZaY6YGTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpY2VuY2UgVHlwZSd9ID0gJ+ioseWPr+mhnuWIqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWNlbmNlIEtleSd9ID0gJ+ioseWPr+WvhumRsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFudGl0eSd9ID0gJ+aVuOmHjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBpcmF0aW9uIERhdGUnfSA9ICflpLHmlYjml6XmnJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVkaWEnfSA9ICfku4vos6onOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wdXRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIYXJkd2FyZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXR3b3JrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvZnR3YXJlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGlyZWQnfSA9ICfliLDmnJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbnRlbmFuY2UnfSA9ICfntq3orbcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGlsb3QnfSA9ICfoqabpqZcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCd9ID0gJ+W3suioiOWKgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBhaXInfSA9ICfkv67lvqknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmV0aXJlZCd9ID0gJ+WgseW7oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXZpZXcnfSA9ICfopIflr6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVzdC9RQSd9ID0gJ+a1i+ippi9RQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXB0b3AnfSA9ICfnrYboqJjmnKwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVza3RvcCd9ID0gJ+ahjOS4iuWei+mbu+iFpic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQREEnfSA9ICdQREEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyJ30gPSAn5pyN5YuZ5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn5YW25a6DJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbml0b3InfSA9ICfpoa/npLrlmagnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnRlcid9ID0gJ+aJk+WNsOapnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTd2l0Y2gnfSA9ICfkuqTmj5vlmagnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm91dGVyJ30gPSAn6Lev55Sx5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dMQU4gQWNjZXNzIFBvaW50J30gPSAnV0xBTiDnhKHnt5rln7rlnLDlj7AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VjdXJpdHkgRGV2aWNlJ30gPSAn5a6J5YWo6Kit5YKZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2t1cCBEZXZpY2UnfSA9ICflgpnku73oqK3lgpknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW91c2UnfSA9ICfmu5HpvKAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5Ym9hcmQnfSA9ICfpjbXnm6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FtZXJhJ30gPSAn54Wn55u45qmfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JlYW1lcid9ID0gJ+aKleW9seWEgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RlbSd9ID0gJ+iqv+ino+iqv+WZqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQQ01DSUEgQ2FyZCd9ID0gJ1BDTUNJQeWNoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVU0IgRGV2aWNlJ30gPSAnVVNCIOioreWCmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb2NraW5nIFN0YXRpb24nfSA9ICfloaLnq5knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2Nhbm5lcid9ID0gJ+aOg+aPj+WEgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZGluZyd9ID0gJ+Wkp+W7iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZpY2UnfSA9ICfovqblhazlrqQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmxvb3InfSA9ICfmqJPlsaQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUm9vbSd9ID0gJ+aIv+mWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWNrJ30gPSAn5qmf5p62JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtwbGFjZSd9ID0gJ+W3peS9nOmWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXRsZXQnfSA9ICfmj5LluqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgRmFjaWxpdHknfSA9ICdJVOioreaWvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMQU4nfSA9ICfljYDln5/ntrLot68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV0xBTid9ID0gJ+eEoee3mue2sui3ryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZWxjbyd9ID0gJ+mbu+ipseWFrOWPuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHU00nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xpZW50IEFwcGxpY2F0aW9uJ30gPSAn5a6i5oi356uv5oeJ55So56iL5bqPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pZGRsZXdhcmUnfSA9ICfkuK3plpPku7YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmVyIEFwcGxpY2F0aW9uJ30gPSAn5pyN5YuZ5Zmo5oeJ55So56iL5bqPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NsaWVudCBPUyd9ID0gJ+WuouaIt+aTjeS9nOezu+e1sSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2ZXIgT1MnfSA9ICfmnI3li5nlmajmk43kvZzns7vntbEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gVG9vbCd9ID0gJ+euoeeQhuW3peWFtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFRvb2wnfSA9ICfnlKjmiLblt6XlhbcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1iZWRkZWQnfSA9ICfltYzlhaXlvI8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2luZ2xlIExpY2VuY2UnfSA9ICfllq7kuIDoqLHlj68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFVzZXInfSA9ICfmr4/lgIvnlKjmiLYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyIFByb2Nlc3Nvcid9ID0gJ+avj+WAi+iZleeQhuWZqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXIgU2VydmVyJ30gPSAn5q+P5YCL5pyN5YuZ5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlciBOb2RlJ30gPSAn5q+P5YCL56+A6bueJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvbHVtZSBMaWNlbmNlJ30gPSAn5om56YeP5o6I5qyKJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VudGVycHJpc2UgTGljZW5jZSd9ID0gJ+S8gealreWft+eFpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXZlbG9wZXIgTGljZW5jZSd9ID0gJ+mWi+eZvOioseWPryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vJ30gPSAn5ryU56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgUmVzdHJpY3RlZCd9ID0gJ+aZgumWk+mZkOWItic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmVld2FyZSd9ID0gJ+WFjeiyu+i7n+S7tic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuIFNvdXJjZSd9ID0gJ+mWi+a6kCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmxpbWl0ZWQnfSA9ICfnhKHpmZDliLbnmoQnOwoKICAgICMgSlMgRmlsZTogSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NpZ25lZCBDSXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIGNvbXBhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lzIGFzc2lnbmVkIHRvIGN1c3RvbWVyIHVzZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EQiBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBmb3IgYSB1bmlxdWUgbmFtZSBvbmx5IHdpdGhpbiB0aGUgc2FtZSBDb25maWdJdGVtIGNsYXNzIChcJ2NsYXNzXCcpIG9yIGdsb2JhbGx5IChcJ2dsb2JhbFwnKSwgd2hpY2ggbWVhbnMgZXZlcnkgZXhpc3RpbmcgQ29uZmlnSXRlbSBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBsb29raW5nIGZvciBkdXBsaWNhdGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBJdGVtcyd9ID0gJ+mFjee9rumghSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgaXRlbSBhZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIGV2ZW50IG1vZHVsZSB0aGF0IGVuYWJsZXMgbG9nZ2luZyB0byBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIGl0ZW0gcHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBpdGVtIHpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ0l0ZW1OdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBJdGVtIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gSXRlbSBsaW1pdCBwZXIgcGFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IERhdGFiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0aW9uIGl0ZW0gYnVsayBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyYXRpb24gaXRlbSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgZGVmaW5pdGlvbnMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMuJ30gPSAn5Ym15bu65ZKM566h55CG6YWN572u6aCF5a6a576pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gZ2V0IElUU00gY29uZmlndXJhdGlvbiBpdGVtcyB1c2luZyB0aGUgR2VuZXJpYyBJbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZWFyY2ggSVRTTSBjb25maWd1cmF0aW9uIGl0ZW1zIHVzaW5nIHRoZSBHZW5lcmljIEludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIFJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNpbmcgdGhlIEdlbmVyaWMgSW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5kaXZpZHVhbGx5IGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MgdG8gY2hlY2sgdGhlIENvbmZpZ0l0ZW0gbmFtZSBhbmQgdG8gc2hvdyBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc3Vib2JqZWN0IG9mIHRoZSBjbGFzcyBcJ0lUU01Db25maWdJdGVtXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBDSSBkZWZpbml0aW9uIGVkaXRvciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9yZGVyIG9mIGluY2lkZW50IHN0YXRlcyBmcm9tIGhpZ2ggKGUuZy4gY3JpY2l0YWwpIHRvIGxvdyAoZS5nLiBmdW5jdGlvbmFsKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWxldmFudCBkZXBsb3ltZW50IHN0YXRlcyB3aGVyZSBsaW5rZWQgdGlja2V0cyBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBDSS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzZWFyY2ggbGltaXQgZm9yIHRoZSBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4gTm90ZTogQ2xhc3MgY29sdW1uIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgZmlsdGVyIFwnQWxsXCcgaXMgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBDSXMgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcjogQ29tcHV0ZXI6Ok5hbWUsIENvbXB1dGVyOjpDdXJEZXBsU3RhdGUsIENvbXB1dGVyOjpDcmVhdGVUaW1lKS4gVG8gc2hvdyBpbmRpdmlkdWFsIENJLUF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ0ktRGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBzY2hlbWUgbXVzdCBiZSB1c2VkIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXIpOiBDb21wdXRlcjo6SGFyZERpc2s6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MTo6Q2FwYWNpdHk6OjEsIENvbXB1dGVyOjpIYXJkRGlzazo6MiwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyOjpDYXBhY2l0eTo6MS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgZm9yIGEgQ0kgY2xhc3MsIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24gYXMgZGVmaW5lZCBpbiB0aGUgc2V0dGluZyBJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW0jIyNTaG93Q29sdW1ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIG9mIENJcyBpbiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGRlcGVuZGluZyBvbiB0aGUgQ0kgY2xhc3MuIEVhY2ggZW50cnkgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIGFuZCBkb3VibGUgY29sb25zIChpLmUuIENvbXB1dGVyOjopLiBUaGVyZSBhcmUgYSBmZXcgQ0ktQXR0cmlidXRlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93biBhcyBkZWZpbmVkIGluIHRoZSBzZXR0aW5nIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgb2YgQ0lzIGluIHRoZSBjb25maWcgaXRlbSB3aWRnZXQgZGVwZW5kaW5nIG9uIHRoZSBDSSBjbGFzcy4gRWFjaCBlbnRyeSBtdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGNsYXNzIG5hbWUgYW5kIGRvdWJsZSBjb2xvbnMgKGkuZS4gQ29tcHV0ZXI6OikuIFRoZXJlIGFyZSBhIGZldyBDSS1BdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQ0lzIChleGFtcGxlIGZvciB0aGUgY2xhc3MgQ29tcHV0ZXI6IENvbXB1dGVyOjpOYW1lLCBDb21wdXRlcjo6Q3VyRGVwbFN0YXRlLCBDb21wdXRlcjo6Q3JlYXRlVGltZSkuIFRvIHNob3cgaW5kaXZpZHVhbCBDSS1BdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIENJLURlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgc2NoZW1lIG11c3QgYmUgdXNlZCAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyKTogQ29tcHV0ZXI6OkhhcmREaXNrOjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxLCBDb21wdXRlcjo6SGFyZERpc2s6OjIsIENvbXB1dGVyOjpIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciBhIENJIGNsYXNzLCB0aGVuIHRoZSBkZWZhdWx0IGNvbHVtbnMgYXJlIHNob3duIGFzIGRlZmluZWQgaW4gdGhlIHNldHRpbmcgQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyOjpCYWNrZW5kIyMjMDA2MC1DSUMtSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnkgKGtleSBEZWZhdWx0Q29sdW1ucykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3IGZvciBhbGwgQ0kgY2xhc3Nlcy4gSWYgdGhlcmUgaXMgbm8gZW50cnksIHRoZW4gdGhlIGRlZmF1bHQgY29sdW1ucyBhcmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBvZiBDSXMgaW4gdGhlIGxpbmsgdGFibGUgY29tcGxleCB2aWV3LCBkZXBlbmRpbmcgb24gdGhlIENJIGNsYXNzLiBFYWNoIGVudHJ5IG11c3QgYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBhbmQgZG91YmxlIGNvbG9ucyAoaS5lLiBDb21wdXRlcjo6KS4gVGhlcmUgYXJlIGEgZmV3IENJLUF0dHJpYnV0ZXMgdGhhdCBjb21tb24gdG8gYWxsIENJcyAoZXhhbXBsZSBmb3IgdGhlIGNsYXNzIENvbXB1dGVyOiBDb21wdXRlcjo6TmFtZSwgQ29tcHV0ZXI6OkN1ckRlcGxTdGF0ZSwgQ29tcHV0ZXI6OkNyZWF0ZVRpbWUpLiBUbyBzaG93IGluZGl2aWR1YWwgQ0ktQXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSBDSS1EZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBtdXN0IGJlIHVzZWQgKGV4YW1wbGUgZm9yIHRoZSBjbGFzcyBDb21wdXRlcik6IENvbXB1dGVyOjpIYXJkRGlzazo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoxOjpDYXBhY2l0eTo6MSwgQ29tcHV0ZXI6OkhhcmREaXNrOjoyLCBDb21wdXRlcjo6SGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgYSBDSSBjbGFzcywgdGhlbiB0aGUgZGVmYXVsdCBjb2x1bW5zIGFyZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHR5cGUgb2YgbGluayAobmFtZWQgZnJvbSB0aGUgdGlja2V0IHBlcnNwZWN0aXZlKSBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGljaCB0eXBlIG9mIHRpY2tldCBjYW4gYWZmZWN0IHRoZSBzdGF0dXMgb2YgYSBsaW5rZWQgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmZpZ3VyYXRpb24gSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBsb3ltZW50IFN0YXRlIENvbG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ+ikh+ijvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gaXRlbSBhdCBhIHRpbWUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBjb25maWd1cmF0aW9uIGl0ZW0gYnVsayBhY3Rpb24gZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzL2Rpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIENvbmZpZ0l0ZW1zIGZvciB1bmlxdWUgbmFtZXMuIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgc3lzdGVtIGZvciBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZyBpdGVtcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4gWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIHNjcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUxpc3REdXBsaWNhdGVzLnBsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSB0byBzZXQgY29uZmlnaXRlbS1zdGF0dXMgb24gdGlja2V0LWNvbmZpZ2l0ZW0tbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGNvbmZpZyBpdGVtIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNsYXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGdyb3VwIHJlc3BvbnNpYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gaXRlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSVRTTSBjb25maWcgaXRlbSBzdGF0aXN0aWNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcuJ30gPSAn5qaC5rOBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgY3VzdG9tZXIgY29tcGFueSBjb25maWcgaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIC4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgY29sb3IgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2VzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBhcmUgc2hvd24pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNlYXJjaCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIElUU00gY29uZmlndXJhdGlvbiBpdGVtIHpvb20gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBhZGQgSVRTTSBjb25maWd1cmF0aW9uIGl0ZW0gc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBlZGl0IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgaGlzdG9yeSBJVFNNIGNvbmZpZ3VyYXRpb24gaXRlbSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHByaW50IElUU00gY29uZmlndXJhdGlvbiBpdGVtIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGNvbmZpZyBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIG51bWJlciwgdGhlIFN5c3RlbUlELCB0aGUgQ29uZmlnSXRlbUNsYXNzSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkLiBUaGUgZm9ybWF0IGlzICJTeXN0ZW1JRC5Db25maWdJdGVtQ2xhc3NJRC5Db3VudGVyIiwgZS5nLiAxMjA1MDAwMDA0LCAxMjA1MDAwMDA1Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgaW5jaWRlbnQgc3RhdGUgb2YgYSBDSSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBUaWNrZXQgaXMgTGlua2VkIHRvIGEgQ0kuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVwbG95bWVudCBzdGF0ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgaW5jaWRlbnQgc3RhdGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY29uZmlndXJhdGlvbiBpdGVtIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNvbmZpZyBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZHVwbGljYXRlIGEgY29uZmlndXJhdGlvbiBpdGVtIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byB6b29tIGludG8gYSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjb25maWcgaXRlbSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY29uZmlndXJhdGlvbiBpdGVtLCBlLmcuIENvbmZpZ0l0ZW0jLCBNeUNvbmZpZ0l0ZW0jLiBUaGUgZGVmYXVsdCBpcyBDb25maWdJdGVtIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbG9iYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncG9zdHByb2R1Y3RpdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJlcHJvZHVjdGl2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcm9kdWN0aXZlJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnTm8nLAogICAgJ09rJywKICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmcuJywKICAgICdTZXR0aW5ncycsCiAgICAnU3VibWl0JywKICAgICdZZXMnLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5JVFNNQ29uZmlnSXRlbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIG9iamVjcwogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKSBpZiAhJENsYXNzTGlzdDsKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpIGlmIHJlZiAkQ2xhc3NMaXN0IG5lICdIQVNIJzsKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpIGlmICEleyRDbGFzc0xpc3R9OwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CiAgICBteSAkVXNlck9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWZpbml0aW9uIGxpc3QKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWZpbml0aW9uTGlzdCcgKSB7CgogICAgICAgICMgZ2V0IGNsYXNzIGlkCiAgICAgICAgbXkgJENsYXNzSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2xhc3NJRCcgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKSBpZiAhJENsYXNzSUQ7CgogICAgICAgICMgZ2VuZXJhdGUgQ2xhc3NPcHRpb25TdHJnCiAgICAgICAgbXkgJENsYXNzT3B0aW9uU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJENsYXNzTGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdDbGFzc0lEJywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NPcHRpb25TdHJnID0+ICRDbGFzc09wdGlvblN0cmcsCiAgICAgICAgICAgICAgICBDbGFzc1NlbGVjdGVkICAgPT4gewogICAgICAgICAgICAgICAgICAgIElEICAgPT4gJENsYXNzSUQsCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkQ2xhc3NMaXN0LT57JENsYXNzSUR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldyByZXN1bHQKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGVmaW5pdGlvbkxpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gJENsYXNzTGlzdC0+eyRDbGFzc0lEfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBkZWZpbml0aW9uIGxpc3QKICAgICAgICBteSAkRGVmaW5pdGlvbkxpc3QgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkxpc3QoCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICREZWZpbml0aW9uICggcmV2ZXJzZSBAeyREZWZpbml0aW9uTGlzdH0gKSB7CgogICAgICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICAgICAgbXkgJEZ1bGxOYW1lID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICREZWZpbml0aW9uLT57Q3JlYXRlQnl9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgZGVmaW5pdGlvbgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0RlZmluaXRpb25MaXN0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICV7JERlZmluaXRpb259LAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAkQ2xhc3NMaXN0LT57JENsYXNzSUR9LAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5VXNlciA9PiAkRnVsbE5hbWUsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBBY3Rpb25PdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlldycsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZGVmaW5pdGlvbiB2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVmaW5pdGlvblZpZXcnICkgewoKICAgICAgICAjIGdldCBkZWZpbml0aW9uIGlkCiAgICAgICAgbXkgJERlZmluaXRpb25JRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdEZWZpbml0aW9uSUQnICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICkgaWYgISREZWZpbml0aW9uSUQ7CgogICAgICAgICMgZ2V0IGRlZmluaXRpb24KICAgICAgICBteSAkRGVmaW5pdGlvbiA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uR2V0KAogICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJERlZmluaXRpb25JRCwKICAgICAgICApOwoKICAgICAgICAkRGVmaW5pdGlvbi0+e0RlZmluaXRpb25TdHJpbmd9ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCA9PiAkRGVmaW5pdGlvbi0+e0RlZmluaXRpb259LAogICAgICAgICk7CgogICAgICAgICMgZ2VuZXJhdGUgQ2xhc3NPcHRpb25TdHJnCiAgICAgICAgbXkgJENsYXNzT3B0aW9uU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJENsYXNzTGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdDbGFzc0lEJywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJERlZmluaXRpb24tPntDbGFzc0lEfSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc09wdGlvblN0cmcgPT4gJENsYXNzT3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIENsYXNzU2VsZWN0ZWQgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgSUQgICA9PiAkRGVmaW5pdGlvbi0+e0NsYXNzSUR9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJERlZmluaXRpb24tPntDbGFzc30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgVmVyc2lvblNlbGVjdGVkID0+IHsKICAgICAgICAgICAgICAgICAgICBJRCAgICAgID0+ICREZWZpbml0aW9uSUQsCiAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9PiAkRGVmaW5pdGlvbi0+e1ZlcnNpb259LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICBteSAkVXNlck5hbWUgPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkRGVmaW5pdGlvbi0+e0NyZWF0ZUJ5fSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldyByZXN1bHQKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGVmaW5pdGlvblZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICV7JERlZmluaXRpb259LAogICAgICAgICAgICAgICAgQ3JlYXRlQnlVc2VyID0+ICRVc2VyTmFtZSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIEFjdGlvbk92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWZpbml0aW9uIGNoYW5nZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0RlZmluaXRpb25DaGFuZ2UnICkgewoKICAgICAgICAjIGdldCBjbGFzcyBpZAogICAgICAgIG15ICRDbGFzc0lEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NsYXNzSUQnICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICkgaWYgISRDbGFzc0lEOwoKICAgICAgICAjIGdldCBjbGFzcyBsaXN0CiAgICAgICAgbXkgJENsYXNzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgZGVmaW5pdGlvbgogICAgICAgIG15ICREZWZpbml0aW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25HZXQoCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBDbGFzc09wdGlvblN0cmcKICAgICAgICBteSAkQ2xhc3NPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0NsYXNzSUQnLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc09wdGlvblN0cmcgPT4gJENsYXNzT3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIENsYXNzU2VsZWN0ZWQgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgSUQgICA9PiAkRGVmaW5pdGlvbi0+e0NsYXNzSUR9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJERlZmluaXRpb24tPntDbGFzc30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgRWRpdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEZWZpbml0aW9uQ2hhbmdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAleyREZWZpbml0aW9ufSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgICAgICAgICBDbGFzcyAgID0+ICRDbGFzc0xpc3QtPnskQ2xhc3NJRH0sCiAgICAgICAgICAgICAgICBSb3dzID0+CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpLT57RWRpdG9yUm93c30KICAgICAgICAgICAgICAgICAgICB8fCAzMCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIEFjdGlvbk92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWZpbml0aW9uIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWZpbml0aW9uU2F2ZScgKSB7CiAgICAgICAgbXkgJURlZmluaXRpb247CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIGZvciBteSAkRm9ybVBhcmFtIChxdyhDbGFzc0lEIERlZmluaXRpb24pKSB7CiAgICAgICAgICAgICREZWZpbml0aW9ueyRGb3JtUGFyYW19ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEZvcm1QYXJhbSApIHx8ICcnOwogICAgICAgIH0KICAgICAgICBmb3IgbXkgJEZvcm1QYXJhbSAocXcoQ2xhc3NJRCBEZWZpbml0aW9uKSkgewogICAgICAgICAgICBpZiAoICEkRGVmaW5pdGlvbnskRm9ybVBhcmFtfSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEZvcm1QYXJhbSEiCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBWYWxpZGF0ZSBZQU1MIGNvZGUgYnkgY29udmVydGluZyBpdCB0byBQZXJsLgogICAgICAgIG15ICREZWZpbml0aW9uUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OllBTUwnKS0+TG9hZCgKICAgICAgICAgICAgRGF0YSA9PiAkRGVmaW5pdGlvbntEZWZpbml0aW9ufSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpIGlmIHJlZiAkRGVmaW5pdGlvblJlZiBuZSAnQVJSQVknOwoKICAgICAgICAjIGFkZCB0byBkYXRhYmFzZQogICAgICAgIG15ICREZWZpbml0aW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkFkZCgKICAgICAgICAgICAgJURlZmluaXRpb24sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCkgaWYgISREZWZpbml0aW9uSUQ7CgogICAgICAgIG15ICRDb250aW51ZUFmdGVyU2F2ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKTsKICAgICAgICBpZiAoJENvbnRpbnVlQWZ0ZXJTYXZlKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1EZWZpbml0aW9uQ2hhbmdlO0NsYXNzSUQ9JERlZmluaXRpb257Q2xhc3NJRH0iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNvbmZpZyBpdGVtIGNsYXNzIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZW5lcmF0ZSBDbGFzc09wdGlvblN0cmcKICAgICAgICBteSAkQ2xhc3NPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0NsYXNzSUQnLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NPcHRpb25TdHJnID0+ICRDbGFzc09wdGlvblN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgcmVzdWx0CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRDbGFzc0lEICggc29ydCB7ICRDbGFzc0xpc3QtPnskYX0gY21wICRDbGFzc0xpc3QtPnskYn0gfSBrZXlzICV7JENsYXNzTGlzdH0gKSB7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gJENsYXNzTGlzdC0+eyRDbGFzc0lEfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IGNvbmZpZyBkYXRhCiAgICAkU2VsZi0+e1NlYXJjaExpbWl0fSA9ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaExpbWl0fSB8fCAxMDAwMDsKCiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4gb3ZlcnZpZXcKICAgICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgZGVmYXVsdCBwYXJhbWV0ZXJzLCB0cnkgdG8gZ2V0IGZpbHRlciAoQ2xhc3NJRCkgZnJvbSBzZXNzaW9uIGlmIG5vdCBnaXZlbiBhcyBwYXJhbWV0ZXIKICAgICRTZWxmLT57RmlsdGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkKICAgICAgICB8fCAkU2VsZi0+e0FnZW50SVRTTUNvbmZpZ0l0ZW1DbGFzc0ZpbHRlcn0KICAgICAgICB8fCAnJzsKICAgICRTZWxmLT57Vmlld30gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVmlldycgKSB8fCAnJzsKCiAgICAjIHN0b3JlIGZpbHRlciAoQ2xhc3NJRCkgaW4gc2Vzc2lvbgogICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbUNsYXNzRmlsdGVyJywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntGaWx0ZXJ9LAogICAgKTsKCiAgICAjIGdldCBzb3J0aW5nIHBhcmFtZXRlcnMKICAgIG15ICRTb3J0QnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J1NvcnRCeTo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ051bWJlcic7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0Rvd24nOwoKICAgICMgc2V0IFNvcnQgYW5kIE9yZGVyIGJ5IGFzIEFycmF5cwogICAgbXkgQFNvcnRCeUFycmF5ICA9ICgkU29ydEJ5KTsKICAgIG15IEBPcmRlckJ5QXJyYXkgPSAoJE9yZGVyQnkpOwoKICAgICMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBvYmplY3QKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgZ2V0IHBvc3NpYmxlIGRlcGxveW1lbnQgc3RhdGUgbGlzdCBmb3IgY29uZmlnIGl0ZW1zIHRvIGJlIHNob3duCiAgICBteSAkU3RhdGVMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gWyAncHJlcHJvZHVjdGl2ZScsICdwcm9kdWN0aXZlJyBdLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2V0IHRoZSBkZXBsb3ltZW50IHN0YXRlIElEcyBwYXJhbWV0ZXIgZm9yIHRoZSBzZWFyY2gKICAgIG15ICREZXBsU3RhdGVJRHM7CiAgICBmb3IgbXkgJERlcGxTdGF0ZUtleSAoIHNvcnQga2V5cyAleyRTdGF0ZUxpc3R9ICkgewogICAgICAgIHB1c2ggQHskRGVwbFN0YXRlSURzfSwgJERlcGxTdGF0ZUtleTsKICAgIH0KCiAgICAjIHRvIHN0b3JlIHRoZSBkZWZhdWx0IGNsYXNzCiAgICBteSAkQ2xhc3NJREF1dG8gPSAnJzsKCiAgICAjIHRvIHN0b3JlIHRoZSBOYXZCYXIgZmlsdGVycwogICAgbXkgJUZpbHRlcnM7CgogICAgIyBkZWZpbmUgcG9zaXRpb24gb2YgdGhlIGZpbHRlciBpbiB0aGUgZnJvbnRlbmQKICAgIG15ICRQcmlvQ291bnRlciA9IDEwMDA7CgogICAgIyB0byBzdG9yZSB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbmZpZyBpdGVtcyBpbiBhbGwgY2xhc3NlcyB0aGF0IHRoZSB1c2VyIGhhcyBhY2Nlc3MKICAgIG15ICRUb3RhbENvdW50OwoKICAgICMgdG8gc3RvcmUgYWxsIHRoZSBjbGFzZXMgdGhhdCB0aGUgdXNlciBoYXMgYWNjZXNzLCB1c2VkIGluIHNlYXJjaCBmb3IgZmlsdGVyICdBbGwnCiAgICBteSAkQWNjZXNzQ2xhc3NMaXN0OwoKICAgICMgbXkgY29uZmlnIGl0ZW0gb2JqZWN0CiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgIENMQVNTSUQ6CiAgICBmb3IgbXkgJENsYXNzSUQgKCBzb3J0IHsgJHskQ2xhc3NMaXN0fXskYX0gY21wICR7JENsYXNzTGlzdH17JGJ9IH0ga2V5cyAleyRDbGFzc0xpc3R9ICkgewoKICAgICAgICAjIHNob3cgbWVudSBsaW5rIG9ubHkgaWYgdXNlciBoYXMgYWNjZXNzIHJpZ2h0cwogICAgICAgIG15ICRIYXNBY2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICBVc2VySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgVHlwZSAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICApOwoKICAgICAgICBuZXh0IENMQVNTSUQgaWYgISRIYXNBY2Nlc3M7CgogICAgICAgICMgaW5zZXJ0IHRoaXMgY2xhc3MgdG8gYmUgcGFzc2VkIGFzIHNlYXJjaCBwYXJhbWV0ZXIgZm9yIGZpbHRlciAnQWxsJwogICAgICAgIHB1c2ggQHskQWNjZXNzQ2xhc3NMaXN0fSwgJENsYXNzSUQ7CgogICAgICAgICMgY291bnQgYWxsIHJlY29yZHMgb2YgdGhpcyBjbGFzcwogICAgICAgIG15ICRDbGFzc0NvdW50ID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1Db3VudCgKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0aGUgY29uZmlnIGl0ZW1zIG51bWJlciBpbiB0aGlzIGNsYXNzIHRvIHRoZSB0b3RhbAogICAgICAgICRUb3RhbENvdW50ICs9ICRDbGFzc0NvdW50OwoKICAgICAgICAjIGluY3JlYXNlIHRoZSBQcmlvQ291bnRlcgogICAgICAgICRQcmlvQ291bnRlcisrOwoKICAgICAgICAjIGFkZCBmaWx0ZXIgd2l0aCBwYXJhbXMgZm9yIHRoZSBzZWFyY2ggbWV0aG9kCiAgICAgICAgJEZpbHRlcnN7JENsYXNzSUR9ID0gewogICAgICAgICAgICBOYW1lICAgPT4gJENsYXNzTGlzdC0+eyRDbGFzc0lEfSwKICAgICAgICAgICAgUHJpbyAgID0+ICRQcmlvQ291bnRlciwKICAgICAgICAgICAgQ291bnQgID0+ICRDbGFzc0NvdW50LAogICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRHMgICAgICAgICA9PiBbJENsYXNzSURdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSURzICAgICA9PiAkRGVwbFN0YXRlSURzLAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBcQE9yZGVyQnlBcnJheSwKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gJFNlbGYtPntTZWFyY2hMaW1pdH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKCiAgICAgICAgIyByZW1lbWJlciB0aGUgZmlyc3QgY2xhc3MgaWQgdG8gc2hvdyB0aGlzIGluIHRoZSBvdmVydmlldwogICAgICAgICMgaWYgbm8gY2xhc3MgaWQgd2FzIGdpdmVuCiAgICAgICAgaWYgKCAhJENsYXNzSURBdXRvICkgewogICAgICAgICAgICAkQ2xhc3NJREF1dG8gPSAkQ2xhc3NJRDsKICAgICAgICB9CiAgICB9CgogICAgIyBpZiBvbmx5IG9uZSBmaWx0ZXIgZXhpc3RzCiAgICBpZiAoIHNjYWxhciBrZXlzICVGaWx0ZXJzID09IDEgKSB7CgogICAgICAgICMgZ2V0IHRoZSBuYW1lIG9mIHRoZSBvbmx5IGZpbHRlcgogICAgICAgIG15ICgkRmlsdGVyTmFtZSkgPSBrZXlzICVGaWx0ZXJzOwoKICAgICAgICAjIGFjdGl2YXRlIHRoaXMgZmlsdGVyCiAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJEZpbHRlck5hbWU7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBhZGQgZGVmYXVsdCBmaWx0ZXIsIHdoaWNoIHNob3dzIGFsbCBpdGVtcwogICAgICAgICRGaWx0ZXJze0FsbH0gPSB7CiAgICAgICAgICAgIE5hbWUgICA9PiAnQWxsJywKICAgICAgICAgICAgUHJpbyAgID0+IDEwMDAsCiAgICAgICAgICAgIENvdW50ICA9PiAkVG90YWxDb3VudCwKICAgICAgICAgICAgU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSURzICAgICAgICAgPT4gJEFjY2Vzc0NsYXNzTGlzdCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEcyAgICAgPT4gJERlcGxTdGF0ZUlEcywKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gXEBTb3J0QnlBcnJheSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gXEBPcmRlckJ5QXJyYXksCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgICAgICB9LAogICAgICAgIH07CgogICAgICAgICMgaWYgbm8gZmlsdGVyIHdhcyBzZWxlY3RlZCBhY3RpdmF0ZSB0aGUgZmlsdGVyIGZvciB0aGUgZGVmYXVsdCBjbGFzcwogICAgICAgIGlmICggISRTZWxmLT57RmlsdGVyfSApIHsKICAgICAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJENsYXNzSURBdXRvOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgaWYgZmlsdGVyIGlzIHZhbGlkCiAgICBpZiAoICEkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gYWNjZXNzIHRvIENsYXNzIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGludmVzdGlnYXRlIHJlZnJlc2gKICAgIG15ICRSZWZyZXNoID0gJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9ID8gNjAgKiAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gOiB1bmRlZjsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgICA9PiBUcmFuc2xhdGFibGUoJ092ZXJ2aWV3JyksCiAgICAgICAgUmVmcmVzaCA9PiAkUmVmcmVzaCwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICRMYXlvdXRPYmplY3QtPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICRPdXRwdXQgPSAnJzsKCiAgICAjIGRpc3BsYXkgYWxsIG5hdmJhciBmaWx0ZXJzCiAgICBteSAlTmF2QmFyRmlsdGVyOwogICAgZm9yIG15ICRGaWx0ZXIgKCBzb3J0IGtleXMgJUZpbHRlcnMgKSB7CgogICAgICAgICMgZGlzcGxheSB0aGUgbmF2YmFyIGZpbHRlcgogICAgICAgICROYXZCYXJGaWx0ZXJ7ICRGaWx0ZXJzeyRGaWx0ZXJ9LT57UHJpb30gfSA9IHsKICAgICAgICAgICAgRmlsdGVyID0+ICRGaWx0ZXIsCiAgICAgICAgICAgICV7ICRGaWx0ZXJzeyRGaWx0ZXJ9IH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIHNlYXJjaCBjb25maWcgaXRlbXMgd2hpY2ggbWF0Y2ggdGhlIHNlbGVjdGVkIGZpbHRlcgogICAgbXkgJENvbmZpZ0l0ZW1JRHMgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKAogICAgICAgICV7ICRGaWx0ZXJzeyAkU2VsZi0+e0ZpbHRlcn0gfS0+e1NlYXJjaH0gfSwKICAgICk7CgogICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgbXkgQFNob3dDb2x1bW5zOwogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgbXkgJVBvc3NpYmxlQ29sdW1uID0gJXsgJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9IH07CgogICAgICAgICMgc2hvdyBjb2x1bW4gIkNsYXNzIiBpZiBmaWx0ZXIgJ0FsbCcgaXMgc2VsZWN0ZWQKICAgICAgICBpZiAoICRTZWxmLT57RmlsdGVyfSBlcSAnQWxsJyApIHsKICAgICAgICAgICAgJFBvc3NpYmxlQ29sdW1ue0NsYXNzfSA9ICcxJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgIGZvciBteSAkTmFtZSAoIHNvcnQga2V5cyAlUG9zc2libGVDb2x1bW4gKSB7CiAgICAgICAgICAgIG5leHQgQ09MVU1OTkFNRSBpZiAhJFBvc3NpYmxlQ29sdW1ueyROYW1lfTsKICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICROYW1lOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0aGUgY29uZmlndXJlZCBjb2x1bW5zIGFuZCByZW9yZ2FuaXplIHRoZW0gYnkgY2xhc3MgbmFtZQogICAgaWYgKAogICAgICAgIElzQXJyYXlSZWZXaXRoRGF0YSggJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnNCeUNsYXNzfSApCiAgICAgICAgJiYgJFNlbGYtPntGaWx0ZXJ9CiAgICAgICAgJiYgJFNlbGYtPntGaWx0ZXJ9IG5lICdBbGwnCiAgICAgICAgKQogICAgewoKICAgICAgICBteSAlQ29sdW1uQnlDbGFzczsKICAgICAgICBOQU1FOgogICAgICAgIGZvciBteSAkTmFtZSAoIEB7ICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zQnlDbGFzc30gfSApIHsKICAgICAgICAgICAgbXkgKCAkQ2xhc3MsICRDb2x1bW4gKSA9IHNwbGl0IC86Oi8sICROYW1lLCAyOwoKICAgICAgICAgICAgbmV4dCBOQU1FIGlmICEkQ29sdW1uOwoKICAgICAgICAgICAgcHVzaCBAeyAkQ29sdW1uQnlDbGFzc3skQ2xhc3N9IH0sICRDb2x1bW47CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3BlY2lmaWMgY29sdW1uIGNvbmZpZyBmb3IgdGhlIHNlbGVjdGVkIGNsYXNzCiAgICAgICAgbXkgJFNlbGVjdGVkQ2xhc3MgPSAkQ2xhc3NMaXN0LT57ICRTZWxmLT57RmlsdGVyfSB9OwogICAgICAgIGlmICggJENvbHVtbkJ5Q2xhc3N7JFNlbGVjdGVkQ2xhc3N9ICkgewogICAgICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkQ29sdW1uQnlDbGFzc3skU2VsZWN0ZWRDbGFzc30gfTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IHRoZSBsaXN0CiAgICBteSAkTGlua1BhZ2UgPQogICAgICAgICdGaWx0ZXI9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7U29ydEJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICkKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rU29ydCA9CiAgICAgICAgJ0ZpbHRlcj0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJzsnOwogICAgbXkgJExpbmtGaWx0ZXIgPQogICAgICAgICdTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApCiAgICAgICAgLiAnO09yZGVyQnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKQogICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJzsnOwoKICAgICMgc2hvdyBjb25maWcgaXRlbSBsaXN0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPklUU01Db25maWdJdGVtTGlzdFNob3coCiAgICAgICAgQ29uZmlnSXRlbUlEcyA9PiAkQ29uZmlnSXRlbUlEcywKICAgICAgICBUb3RhbCAgICAgICAgID0+IHNjYWxhciBAeyRDb25maWdJdGVtSURzfSwKICAgICAgICBWaWV3ICAgICAgICAgID0+ICRTZWxmLT57Vmlld30sCiAgICAgICAgRmlsdGVyICAgICAgICA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgRmlsdGVycyAgICAgICA9PiBcJU5hdkJhckZpbHRlciwKICAgICAgICBGaWx0ZXJMaW5rICAgID0+ICRMaW5rRmlsdGVyLAogICAgICAgIFRpdGxlTmFtZSAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdPdmVydmlldzogSVRTTSBDb25maWdJdGVtJyksCiAgICAgICAgVGl0bGVWYWx1ZSAgICA9PiAkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0tPntOYW1lfSwKICAgICAgICBFbnYgICAgICAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlICAgICAgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ICAgICAgPT4gJExpbmtTb3J0LAogICAgICAgIFNob3dDb2x1bW5zICAgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICBTb3J0QnkgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApLAogICAgICAgIE9yZGVyQnkgICAgICAgPT4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApLAogICAgICAgIFJlcXVlc3RlZFVSTCAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbUFkZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7Cm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgZ2VuZXJhbCBjYXRhbG9nIG9iamVjdAogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgIyBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cwogICAgZm9yIG15ICRDbGFzc0lEICggc29ydCBrZXlzICV7JENsYXNzTGlzdH0gKSB7CiAgICAgICAgbXkgJEhhc0FjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5QZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259IiktPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgU2NvcGUgPT4gJ0NsYXNzJywKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgZGVsZXRlICRDbGFzc0xpc3QtPnskQ2xhc3NJRH0gaWYgISRIYXNBY2Nlc3M7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHNob3cgdGhlIGxpc3Qgb2YgQ0kgY2xhc3NlcyBzb3J0ZWQgYnkgbmFtZQogICAgZm9yIG15ICRJdGVtSUQgKCBzb3J0IHsgJHskQ2xhc3NMaXN0fXskYX0gY21wICR7JENsYXNzTGlzdH17JGJ9IH0ga2V5cyAleyRDbGFzc0xpc3R9ICkgewoKICAgICAgICAjIGdldCBpdGVtIGRhdGEKICAgICAgICBteSAkSXRlbURhdGEgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IGl0ZW0gbGlzdAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0l0ZW1MaXN0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRJdGVtSUQsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICRDbGFzc0xpc3QtPnskSXRlbUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ0FkZCcpLAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1BZGQnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIG91dHB1dCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Db25maWdJdGVtQnVsazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6TWlncmF0aW9uczo6T1RSUzY6OlN5c0NvbmZpZykKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIGlmIGJ1bGsgZmVhdHVyZSBpcyBlbmFibGVkCiAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QnVsa0ZlYXR1cmUnKSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdCdWxrIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQhJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBpbnZvbHZlZCBjb25maWcgaXRlbXMsIGZpbHRlcmluZyBlbXB0eSBDb25maWdJdGVtSURzCiAgICBteSBAQ29uZmlnSXRlbUlEcyA9IGdyZXAgeyRffQogICAgICAgICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdDb25maWdJdGVtSUQnICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggIUBDb25maWdJdGVtSURzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIENvbmZpZ0l0ZW1JRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1lvdSBuZWVkIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBDb25maWd1cmF0aW9uIEl0ZW0hJyksCiAgICAgICAgKTsKICAgIH0KICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVHlwZSA9PiAnU21hbGwnLAogICAgKTsKCiAgICAjIGRlY2xhcmUgdGhlIHZhcmlhYmxlcyBmb3IgYWxsIHRoZSBwYXJhbWV0ZXJzCiAgICBteSAlRXJyb3I7CgogICAgbXkgJUdldFBhcmFtOwoKICAgICMgZ2V0IGNvbmZpZyBpdGVtIG9iamVjdAogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICAjIGdldCBhbGwgcGFyYW1ldGVycyBhbmQgY2hlY2sgZm9yIGVycm9ycwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0RvJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBnZXQgYWxsIHBhcmFtZXRlcnMKICAgICAgICBmb3IgbXkgJEtleSAoCiAgICAgICAgICAgIHF3KCBMaW5rVG9nZXRoZXIgTGlua1RvZ2V0aGVyQW5vdGhlciBMaW5rVHlwZSBMaW5rVG9nZXRoZXJMaW5rVHlwZSBEZXBsU3RhdGVJRAogICAgICAgICAgICBJbmNpU3RhdGVJRCApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRHZXRQYXJhbXskS2V5fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRLZXkgKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgIGlmICggJEdldFBhcmFteydMaW5rVG9nZXRoZXJBbm90aGVyJ30gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgICAgICBTdHJpbmdSZWYgPT4gXCRHZXRQYXJhbXsnTGlua1RvZ2V0aGVyQW5vdGhlcid9LAogICAgICAgICAgICAgICAgVHJpbUxlZnQgID0+IDEsCiAgICAgICAgICAgICAgICBUcmltUmlnaHQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTG9va3VwKAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbU51bWJlciA9PiAkR2V0UGFyYW17J0xpbmtUb2dldGhlckFub3RoZXInfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJENvbmZpZ0l0ZW1JRCApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnTGlua1RvZ2V0aGVyQW5vdGhlckludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBwcm9jZXNzIGNvbmZpZyBpdGVtCiAgICBteSBAQ29uZmlnSXRlbUlEU2VsZWN0ZWQ7CiAgICBteSAkQWN0aW9uRmxhZyA9IDA7CiAgICBteSAkQ291bnRlciAgICA9IDE7CgogICAgIyBnZXQgbGluayBvYmplY3QKICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKCiAgICBDT05GSUdJVEVNX0lEOgogICAgZm9yIG15ICRDb25maWdJdGVtSUQgKEBDb25maWdJdGVtSURzKSB7CiAgICAgICAgbXkgJENvbmZpZ0l0ZW0gPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtRWRpdCIpOwoKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICAgICAgbXkgJEFjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBTY29wZSAgPT4gJ0l0ZW0nLAogICAgICAgICAgICBJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgVHlwZSAgID0+ICRDb25maWctPntQZXJtaXNzaW9ufSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkQWNjZXNzICkgewoKICAgICAgICAgICAgIyBlcnJvciBzY3JlZW4sIGRvbid0IHNob3cgY29uZmlnIGl0ZW0KICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBEYXRhID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAnWW91IGRvblwndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbTogJXMuJywKICAgICAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbS0+e051bWJlcn0sCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IENPTkZJR0lURU1fSUQ7CiAgICAgICAgfQoKICAgICAgICAjIHJlbWVtYmVyIHNlbGVjdGVkIGNvbmZpZyBpdGVtIGlkcwogICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1JRFNlbGVjdGVkLCAkQ29uZmlnSXRlbUlEOwoKICAgICAgICAjIGRvIHNvbWUgYWN0aW9ucyBvbiBDSXMKICAgICAgICBpZiAoICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEbycgKSAmJiAoICElRXJyb3IgKSApIHsKCiAgICAgICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAgICAgIyBidWxrIGFjdGlvbiB2ZXJzaW9uIGFkZAogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtEZXBsU3RhdGVJRH0gfHwgJEdldFBhcmFte0luY2lTdGF0ZUlEfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGNvbmZpZyBpdGVtCiAgICAgICAgICAgICAgICBteSAkQ3VycmVudFZlcnNpb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhR2V0ICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJE5ld0RlcGxTdGF0ZUlEID0gJEN1cnJlbnRWZXJzaW9uLT57RGVwbFN0YXRlSUR9OwogICAgICAgICAgICAgICAgbXkgJE5ld0luY2lTdGF0ZUlEID0gJEN1cnJlbnRWZXJzaW9uLT57SW5jaVN0YXRlSUR9OwoKICAgICAgICAgICAgICAgIGlmICggSXNOdW1iZXIoICRHZXRQYXJhbXtEZXBsU3RhdGVJRH0gKSApIHsKICAgICAgICAgICAgICAgICAgICAkTmV3RGVwbFN0YXRlSUQgPSAkR2V0UGFyYW17RGVwbFN0YXRlSUR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCBJc051bWJlciggJEdldFBhcmFte0luY2lTdGF0ZUlEfSApICkgewogICAgICAgICAgICAgICAgICAgICROZXdJbmNpU3RhdGVJRCA9ICRHZXRQYXJhbXtJbmNpU3RhdGVJRH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkQ3VycmVudFZlcnNpb24tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJEN1cnJlbnRWZXJzaW9uLT57RGVmaW5pdGlvbklEfSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJE5ld0RlcGxTdGF0ZUlELAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkTmV3SW5jaVN0YXRlSUQsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgID0+ICRDdXJyZW50VmVyc2lvbi0+e1hNTERhdGF9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGJ1bGsgYWN0aW9uIGxpbmtzCiAgICAgICAgICAgICMgbGluayBhbGwgY29uZmlnIGl0ZW1zIHRvIGFub3RoZXIgY29uZmlnIGl0ZW0KICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17J0xpbmtUb2dldGhlckFub3RoZXInfSApIHsKICAgICAgICAgICAgICAgIG15ICRNYWluQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1Mb29rdXAoCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbU51bWJlciA9PiAkR2V0UGFyYW17J0xpbmtUb2dldGhlckFub3RoZXInfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzcGxpdCB0aGUgdHlwZSBpZGVudGlmaWVyCiAgICAgICAgICAgICAgICBteSBAVHlwZSA9IHNwbGl0IHF7Ojp9LCAkR2V0UGFyYW17TGlua1R5cGV9OwoKICAgICAgICAgICAgICAgIGlmICggJFR5cGVbMF0gJiYgJFR5cGVbMV0gJiYgKCAkVHlwZVsxXSBlcSAnU291cmNlJyB8fCAkVHlwZVsxXSBlcSAnVGFyZ2V0JyApICkgewoKICAgICAgICAgICAgICAgICAgICBteSAkU291cmNlS2V5ID0gJENvbmZpZ0l0ZW1JRDsKICAgICAgICAgICAgICAgICAgICBteSAkVGFyZ2V0S2V5ID0gJE1haW5Db25maWdJdGVtSUQ7CgogICAgICAgICAgICAgICAgICAgIGlmICggJFR5cGVbMV0gZXEgJ1RhcmdldCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTb3VyY2VLZXkgPSAkTWFpbkNvbmZpZ0l0ZW1JRDsKICAgICAgICAgICAgICAgICAgICAgICAgJFRhcmdldEtleSA9ICRDb25maWdJdGVtSUQ7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRFBhcnRuZXIgKEBDb25maWdJdGVtSURzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJE1haW5Db25maWdJdGVtSUQgbmUgJENvbmZpZ0l0ZW1JRFBhcnRuZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGlua09iamVjdC0+TGlua0FkZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VLZXkgICAgPT4gJFNvdXJjZUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXRLZXkgICAgPT4gJFRhcmdldEtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJFR5cGVbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbGluayB0b2dldGhlcgogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXsnTGlua1RvZ2V0aGVyJ30gKSB7CgogICAgICAgICAgICAgICAgIyBzcGxpdCB0aGUgdHlwZSBpZGVudGlmaWVyCiAgICAgICAgICAgICAgICBteSBAVHlwZSA9IHNwbGl0IHF7Ojp9LCAkR2V0UGFyYW17TGlua1RvZ2V0aGVyTGlua1R5cGV9OwoKICAgICAgICAgICAgICAgIGlmICggJFR5cGVbMF0gJiYgJFR5cGVbMV0gJiYgKCAkVHlwZVsxXSBlcSAnU291cmNlJyB8fCAkVHlwZVsxXSBlcSAnVGFyZ2V0JyApICkgewogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEUGFydG5lciAoQENvbmZpZ0l0ZW1JRHMpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRTb3VyY2VLZXkgPSAkQ29uZmlnSXRlbUlEOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkVGFyZ2V0S2V5ID0gJENvbmZpZ0l0ZW1JRFBhcnRuZXI7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRUeXBlWzFdIGVxICdUYXJnZXQnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNvdXJjZUtleSA9ICRDb25maWdJdGVtSURQYXJ0bmVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRhcmdldEtleSA9ICRDb25maWdJdGVtSUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ0l0ZW1JRCBuZSAkQ29uZmlnSXRlbUlEUGFydG5lciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMaW5rT2JqZWN0LT5MaW5rQWRkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZU9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUtleSAgICA9PiAkU291cmNlS2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldEtleSAgICA9PiAkVGFyZ2V0S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkVHlwZVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkQWN0aW9uRmxhZyA9IDE7CiAgICAgICAgfQogICAgICAgICRDb3VudGVyKys7CiAgICB9CgogICAgIyByZWRpcmVjdAogICAgaWYgKCRBY3Rpb25GbGFnKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlBvcHVwQ2xvc2UoCiAgICAgICAgICAgIFVSTCA9PiAoICRTZWxmLT57TGFzdFNjcmVlbk92ZXJ2aWV3fSB8fCAnQWN0aW9uPUFnZW50RGFzaGJvYXJkJyApLAogICAgICAgICk7CiAgICB9CgogICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2soCiAgICAgICAgJVBhcmFtLAogICAgICAgICVHZXRQYXJhbSwKICAgICAgICBDb25maWdJdGVtSURzID0+IFxAQ29uZmlnSXRlbUlEU2VsZWN0ZWQsCiAgICAgICAgRXJyb3JzICAgICAgICA9PiBcJUVycm9yLAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKAogICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9NYXNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHByZXBhcmUgZXJyb3JzIQogICAgaWYgKCAkUGFyYW17RXJyb3JzfSApIHsKICAgICAgICBmb3IgbXkgJEtleUVycm9yICggc29ydCBrZXlzICV7ICRQYXJhbXtFcnJvcnN9IH0gKSB7CiAgICAgICAgICAgICRQYXJhbXskS2V5RXJyb3J9ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkUGFyYW17RXJyb3JzfS0+eyRLZXlFcnJvcn0gKTsKICAgICAgICB9CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQnVsa0FjdGlvbicsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIHJlbWVtYmVyIGNvbmZpZyBpdGVtIGlkcwogICAgaWYgKCAkUGFyYW17Q29uZmlnSXRlbUlEc30gKSB7CiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBAeyAkUGFyYW17Q29uZmlnSXRlbUlEc30gfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdVc2VkQ29uZmlnSXRlbUlEJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBkZXBsb3ltZW50IHN0YXRlCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e0RlcGxTdGF0ZX0gKSB7CiAgICAgICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICApOwoKICAgICAgICAjIGdlbmVyYXRlIERlcGxTdGF0ZVN0cmcKICAgICAgICAkUGFyYW17RGVwbFN0YXRlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICREZXBsU3RhdGVMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0RlcGxTdGF0ZUlEJywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17RGVwbFN0YXRlSUR9LAogICAgICAgICAgICBTb3J0ICAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICk7CiAgICB9CgogICAgIyBpbmNpZGVudCBzdGF0ZQogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntJbmNpU3RhdGV9ICkgewoKICAgICAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0CiAgICAgICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gWyAnb3BlcmF0aW9uYWwnLCAnaW5jaWRlbnQnIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBJbmNpU3RhdGVTdHJnCiAgICAgICAgJFBhcmFte0luY2lTdGF0ZVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkSW5jaVN0YXRlTGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdJbmNpU3RhdGVJRCcsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0luY2lTdGF0ZUlEfSwKICAgICAgICAgICAgU29ydCAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGxpbmsgb2JqZWN0CiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CgogICAgIyBsaW5rIHR5cGVzIGxpc3QKICAgICMgZ2V0IHBvc3NpYmxlIHR5cGVzIGxpc3QKICAgIG15ICVQb3NzaWJsZVR5cGVzTGlzdCA9ICRMaW5rT2JqZWN0LT5Qb3NzaWJsZVR5cGVzTGlzdCgKICAgICAgICBPYmplY3QxID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgT2JqZWN0MiA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGRlZmluZSBibGFuayBsaW5lIGVudHJ5CiAgICBteSAlQmxhbmtMaW5lID0gKAogICAgICAgIEtleSAgICAgID0+ICctJywKICAgICAgICBWYWx1ZSAgICA9PiAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScsCiAgICAgICAgRGlzYWJsZWQgPT4gMSwKICAgICk7CgogICAgIyBjcmVhdGUgdGhlIHNlbGVjdGFibGUgdHlwZSBsaXN0CiAgICBteSAkQ291bnRlciA9IDA7CiAgICBteSBAU2VsZWN0YWJsZVR5cGVzTGlzdDsKICAgIG15IEBMaW5rVG9nZXRoZXJUeXBlTGlzdDsKICAgIFBPU1NJQkxFVFlQRToKICAgIGZvciBteSAkUG9zc2libGVUeXBlICggc29ydCB7IGxjICRhIGNtcCBsYyAkYiB9IGtleXMgJVBvc3NpYmxlVHlwZXNMaXN0ICkgewoKICAgICAgICAjIGxvb2t1cCB0eXBlIGlkCiAgICAgICAgbXkgJFR5cGVJRCA9ICRMaW5rT2JqZWN0LT5UeXBlTG9va3VwKAogICAgICAgICAgICBOYW1lICAgPT4gJFBvc3NpYmxlVHlwZSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0eXBlCiAgICAgICAgbXkgJVR5cGUgPSAkTGlua09iamVjdC0+VHlwZUdldCgKICAgICAgICAgICAgVHlwZUlEID0+ICRUeXBlSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyB0eXBlIGxpc3QgZm9yIGxpbmsgdG9nZXRoZXIgY2FuIGNvbnRhaW4gb25seQogICAgICAgICMgbGluayB0eXBlcyB3aGljaCBhcmUgbm90IGRpcmVjdGVkIChub3QgcG9pbnRlZCkKICAgICAgICBpZiAoICEkVHlwZXtQb2ludGVkfSApIHsKCiAgICAgICAgICAgICMgY3JlYXRlIHRoZSBzb3VyY2UgbmFtZQogICAgICAgICAgICBteSAlU291cmNlTmFtZTsKICAgICAgICAgICAgJFNvdXJjZU5hbWV7S2V5fSAgID0gJFBvc3NpYmxlVHlwZSAuICc6OlNvdXJjZSc7CiAgICAgICAgICAgICRTb3VyY2VOYW1le1ZhbHVlfSA9ICRUeXBle1NvdXJjZU5hbWV9OwoKICAgICAgICAgICAgcHVzaCBATGlua1RvZ2V0aGVyVHlwZUxpc3QsIFwlU291cmNlTmFtZTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHRoZSBzb3VyY2UgbmFtZQogICAgICAgIG15ICVTb3VyY2VOYW1lOwogICAgICAgICRTb3VyY2VOYW1le0tleX0gICA9ICRQb3NzaWJsZVR5cGUgLiAnOjpTb3VyY2UnOwogICAgICAgICRTb3VyY2VOYW1le1ZhbHVlfSA9ICRUeXBle1NvdXJjZU5hbWV9OwoKICAgICAgICBwdXNoIEBTZWxlY3RhYmxlVHlwZXNMaXN0LCBcJVNvdXJjZU5hbWU7CgogICAgICAgIG5leHQgUE9TU0lCTEVUWVBFIGlmICEkVHlwZXtQb2ludGVkfTsKCiAgICAgICAgIyBjcmVhdGUgdGhlIHRhcmdldCBuYW1lCiAgICAgICAgbXkgJVRhcmdldE5hbWU7CiAgICAgICAgJFRhcmdldE5hbWV7S2V5fSAgID0gJFBvc3NpYmxlVHlwZSAuICc6OlRhcmdldCc7CiAgICAgICAgJFRhcmdldE5hbWV7VmFsdWV9ID0gJFR5cGV7VGFyZ2V0TmFtZX07CgogICAgICAgIHB1c2ggQFNlbGVjdGFibGVUeXBlc0xpc3QsIFwlVGFyZ2V0TmFtZTsKICAgIH0KICAgIGNvbnRpbnVlIHsKCiAgICAgICAgIyBhZGQgYmxhbmsgbGluZQogICAgICAgIHB1c2ggQFNlbGVjdGFibGVUeXBlc0xpc3QsIFwlQmxhbmtMaW5lOwoKICAgICAgICAkQ291bnRlcisrOwogICAgfQoKICAgICMgcmVtb3ZlZCBsYXN0IChlbXB0eSkgZW50cnkKICAgIHBvcCBAU2VsZWN0YWJsZVR5cGVzTGlzdDsKCiAgICAjIGFkZCBibGFuayBsaW5lcyBvbiB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgbGlzdCBpZiBtb3JlIHRoZW4gdHdvIGxpbmt0eXBlcwogICAgaWYgKCAkQ291bnRlciA+IDIgKSB7CiAgICAgICAgdW5zaGlmdCBAU2VsZWN0YWJsZVR5cGVzTGlzdCwgXCVCbGFua0xpbmU7CiAgICAgICAgcHVzaCBAU2VsZWN0YWJsZVR5cGVzTGlzdCwgXCVCbGFua0xpbmU7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBMaW5rVHlwZVN0cmcKICAgICRQYXJhbXtMaW5rVHlwZVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFxAU2VsZWN0YWJsZVR5cGVzTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ0xpbmtUeXBlJywKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMCwKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1R5cGVJZGVudGlmaWVyfSB8fCAnQWx0ZXJuYXRpdmVUbzo6U291cmNlJywKICAgICAgICBTb3J0ICAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICk7CiAgICAkUGFyYW17TGlua1RvZ2V0aGVyTGlua1R5cGVTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcQExpbmtUb2dldGhlclR5cGVMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnTGlua1RvZ2V0aGVyTGlua1R5cGUnLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAwLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17VHlwZUlkZW50aWZpZXJ9IHx8ICdBbHRlcm5hdGl2ZVRvOjpTb3VyY2UnLAogICAgICAgIFNvcnQgICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgKTsKCiAgICAkUGFyYW17TGlua1RvZ2V0aGVyWWVzTm9PcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1llc05vT3B0aW9ucycpLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0xpbmtUb2dldGhlcicsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17TGlua1RvZ2V0aGVyfSB8fCAwLAogICAgKTsKCiAgICAjIGdldCBvdXRwdXQgYmFjawogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1CdWxrJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbQogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Db25maWdJdGVtRGVsZXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpNaWdyYXRpb25zOjpPVFJTNjo6U3lzQ29uZmlnKQoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIENvbmZpZ0l0ZW1JRAogICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb25maWdJdGVtSUQnICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJENvbmZpZ0l0ZW1JRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBpdGVtIG9iamVjdAogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBTY29wZSAgPT4gJ0l0ZW0nLAogICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBpdGVtIGRhdGEKICAgIG15ICRDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBpZiBjb25maWcgaXRlbSBpcyBmb3VuZAogICAgaWYgKCAhJENvbmZpZ0l0ZW0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb25maWcgaXRlbSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkQ29uZmlnSXRlbUlEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZGVsZXRlIHRoZSBjb25maWcgaXRlbQogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NvbmZpZ0l0ZW1EZWxldGUnICkgewoKICAgICAgICAjIGRlbGV0ZSB0aGUgY29uZmlnIGl0ZW0KICAgICAgICBteSAkQ291bGREZWxldGVDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1EZWxldGUoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkQ291bGREZWxldGVDb25maWdJdGVtKSB7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIGNvbmZpZyBpdGVtIG92ZXJ2aWV3LCB3aGVuIHRoZSBkZWxldGlvbiB3YXMgc3VjY2Vzc2Z1bAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW0iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlLCB3aGVuIGRlbGV0ZSBmYWlsZWQKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjb25maWdpdGVtIElEICVzIScsICRDb25maWdJdGVtSUQgKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbGF0ZXN0IHZlcnNpb24gZGF0YQogICAgbXkgJFZlcnNpb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgaWYgKCAhJFZlcnNpb24tPntWZXJzaW9uSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzIScsICRDb25maWdJdGVtSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgdGhlIGRpYWxvZyB0eXBlLiBBcyBkZWZhdWx0LCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgIG15ICREaWFsb2dUeXBlID0gJ0NvbmZpcm1hdGlvbic7CgogICAgIyBvdXRwdXQgY29udGVudAogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1EZWxldGUnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskQ29uZmlnSXRlbX0sCiAgICAgICAgICAgICV7JFZlcnNpb259LAogICAgICAgIH0sCiAgICApOwoKICAgICMgYnVpbGQgdGhlIHJldHVybmVkIGRhdGEgc3RydWN0dXJlCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBIVE1MICAgICAgID0+ICRPdXRwdXQsCiAgICAgICAgRGlhbG9nVHlwZSA9PiAkRGlhbG9nVHlwZSwKICAgICk7CgogICAgIyByZXR1cm4gSlNPTi1TdHJpbmcgYmVjYXVzZSBvZiBBSkFYLU1vZGUKICAgIG15ICRPdXRwdXRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSggRGF0YSA9PiBcJURhdGEgKTsKCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXRKU09OLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6Ok1pZ3JhdGlvbnM6Ok9UUlM2OjpTeXNDb25maWcpCgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgbXkgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgY29uZmlnaXRlbSBpZCBhbmQgY2xhc3MgaWQKICAgIG15ICRDb25maWdJdGVtID0ge307CiAgICAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29uZmlnSXRlbUlEJyApIHx8IDA7CiAgICAkQ29uZmlnSXRlbS0+e0NsYXNzSUR9ICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2xhc3NJRCcgKSAgICAgIHx8IDA7CiAgICBteSAkRHVwbGljYXRlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRHVwbGljYXRlSUQnICkgfHwgMDsKCiAgICBteSAkSGFzQWNjZXNzOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01Db25maWdJdGVtOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBnZXQgbmVlZGVkIGRhdGEKICAgIGlmICggJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9ICYmICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSBuZSAnTkVXJyApIHsKCiAgICAgICAgIyBjaGVjayBhY2Nlc3MgZm9yIGNvbmZpZyBpdGVtCiAgICAgICAgJEhhc0FjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBTY29wZSAgPT4gJ0l0ZW0nLAogICAgICAgICAgICBJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY29uZmlnIGl0ZW0KICAgICAgICAkQ29uZmlnSXRlbSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoJER1cGxpY2F0ZUlEKSB7CgogICAgICAgICMgZ2V0IGNvbmZpZyBpdGVtIHRvIGR1cGxpY2F0ZQogICAgICAgICRDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkRHVwbGljYXRlSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBhY2Nlc3MgZm9yIGNvbmZpZyBpdGVtCiAgICAgICAgJEhhc0FjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBTY29wZSAgPT4gJ0l0ZW0nLAogICAgICAgICAgICBJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgY29uZmlnIGl0ZW0gaWQgYW5kIG51bWJlcgogICAgICAgICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSA9ICdORVcnOwogICAgICAgICRDb25maWdJdGVtLT57TnVtYmVyfSAgICAgICA9IFRyYW5zbGF0YWJsZSgnTmV3Jyk7CiAgICB9CiAgICBlbHNpZiAoICRDb25maWdJdGVtLT57Q2xhc3NJRH0gKSB7CgogICAgICAgICMgc2V0IGNvbmZpZyBpdGVtIGlkIGFuZCBudW1iZXIKICAgICAgICAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0gPSAnTkVXJzsKICAgICAgICAkQ29uZmlnSXRlbS0+e051bWJlcn0gICAgICAgPSBUcmFuc2xhdGFibGUoJ05ldycpOwoKICAgICAgICAjIGNoZWNrIGFjY2VzcyBmb3IgY29uZmlnIGl0ZW0KICAgICAgICAkSGFzQWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgICAgIFNjb3BlICAgPT4gJ0NsYXNzJywKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbS0+e0NsYXNzSUR9LAogICAgICAgICAgICBVc2VySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgVHlwZSAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBjbGFzcyBsaXN0CiAgICAgICAgbXkgJENsYXNzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgKTsKICAgICAgICAkQ29uZmlnSXRlbS0+e0NsYXNzfSA9ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSB9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gQ29uZmlnSXRlbUlELCBEdXBsaWNhdGVJRCBvciBDbGFzc0lEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGlmIHVzZXIgaGFzIG5vIGFjY2VzcyByaWdodHMgc2hvdyBlcnJvciBwYWdlCiAgICBpZiAoICEkSGFzQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIGFjY2VzcyBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGVmaW5pdGlvbgogICAgbXkgJFhNTERlZmluaXRpb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkdldCgKICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtLT57Q2xhc3NJRH0sCiAgICApOwoKICAgICMgYWJvcnQsIGlmIG5vIGRlZmluaXRpb24gaXMgZGVmaW5lZAogICAgaWYgKCAhJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggJ05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzIScsICRDb25maWdJdGVtLT57Q2xhc3N9ICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHVwbG9hZCBjYWNoZSBvYmplY3QKICAgIG15ICRVcGxvYWRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CgogICAgIyBnZXQgZm9ybSBpZAogICAgJFNlbGYtPntGb3JtSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1JRCcgKTsKCiAgICAjIGNyZWF0ZSBmb3JtIGlkCiAgICBpZiAoICEkU2VsZi0+e0Zvcm1JRH0gKSB7CiAgICAgICAgJFNlbGYtPntGb3JtSUR9ID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURDcmVhdGUoKTsKICAgIH0KCiAgICAjIHdoZW4gdGhlcmUncyBubyBDbGFzc0lEIGl0IG1lYW5zLCBhbiBleGlzdGluZyBjb25maWcgaXRlbSBpcyBlZGl0ZWQgYXMgdGhlIENsYXNzSUQgaXMgb25seQogICAgIyBwcm92aWRlZCBhcyBHRVQgcGFyYW0gd2hlbiBjcmVhdGluZyBhIG5ldyBjb25maWcgaXRlbQogICAgaWYgKCAhJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NsYXNzSUQnICkgKSB7CgogICAgICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBtZXRhIGRhdGEKICAgICAgICBteSBARXhpc3RpbmdBdHRhY2htZW50cyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudExpc3QoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjb3B5IGFsbCBleGlzdGluZyBhdHRhY2htZW50cyB0byB1cGxvYWQgY2FjaGUKICAgICAgICBGSUxFTkFNRToKICAgICAgICBmb3IgbXkgJEZpbGVuYW1lIChARXhpc3RpbmdBdHRhY2htZW50cykgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGV4aXN0aW5nIGF0dGFjaG1lbnQgZGF0YQogICAgICAgICAgICBteSAkQXR0YWNobWVudERhdGEgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50IHRvIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEF0dGFjaG1lbnREYXRhLT57RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEF0dGFjaG1lbnREYXRhLT57Q29udGVudH0sCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkQXR0YWNobWVudERhdGEtPntDb250ZW50VHlwZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHN1Ym1pdCBzYXZlCiAgICBteSAkU3VibWl0U2F2ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJtaXRTYXZlJyApOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBnZXQgeG1sIGRhdGEKICAgIG15ICRWZXJzaW9uID0ge307CiAgICBteSAkTmFtZUR1cGxpY2F0ZXM7CiAgICBteSAkQ0lOYW1lUmVnZXhFcnJvck1lc3NhZ2U7CiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVmVyc2lvblNhdmUnICkgewoKICAgICAgICAjIGdldCB0aGUgdXBsb2FkZWQgYXR0YWNobWVudAogICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICBQYXJhbSAgPT4gJ0ZpbGVVcGxvYWQnLAogICAgICAgICAgICBTb3VyY2UgPT4gJ3N0cmluZycsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCVVcGxvYWRTdHVmZikgewoKICAgICAgICAgICAgIyBhZGQgYXR0YWNobWVudCB0byB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAlVXBsb2FkU3R1ZmYsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkQWxsUmVxdWlyZWQgPSAxOwoKICAgICAgICAjIGdldCBnZW5lcmFsIGZvcm0gZGF0YQogICAgICAgIGZvciBteSAkRm9ybVBhcmFtIChxdyhOYW1lIERlcGxTdGF0ZUlEIEluY2lTdGF0ZUlEKSkgewogICAgICAgICAgICAkVmVyc2lvbi0+eyRGb3JtUGFyYW19ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEZvcm1QYXJhbSApOwogICAgICAgICAgICBpZiAoICEkVmVyc2lvbi0+eyRGb3JtUGFyYW19ICkgewogICAgICAgICAgICAgICAgJEFsbFJlcXVpcmVkID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgeG1sIGZvcm0gZGF0YQogICAgICAgICRWZXJzaW9uLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0gPSAkU2VsZi0+X1hNTEZvcm1HZXQoCiAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfSwKICAgICAgICAgICAgQWxsUmVxdWlyZWQgICA9PiBcJEFsbFJlcXVpcmVkLAogICAgICAgICAgICBDb25maWdJdGVtSUQgID0+ICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrLCB3aGV0aGVyIHRoZSBmZWF0dXJlIHRvIGNoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIGlzIGVuYWJsZWQKICAgICAgICBpZiAoCiAgICAgICAgICAgIElzU3RyaW5nV2l0aERhdGEoICRWZXJzaW9uLT57TmFtZX0gKQogICAgICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1VuaXF1ZUNJTmFtZTo6RW5hYmxlVW5pcXVlbmVzc0NoZWNrJykKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+e0RlYnVnfSA+IDAgKSB7CiAgICAgICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2hlY2tpbmcgZm9yIGR1cGxpY2F0ZSBuYW1lcyAoQ2xhc3NJRDogJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSwgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJOYW1lOiAkVmVyc2lvbi0+e05hbWV9LCBDb25maWdJdGVtSUQ6ICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSkiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE5hbWVEdXBsaWNhdGVzID0gJENvbmZpZ0l0ZW1PYmplY3QtPlVuaXF1ZU5hbWVDaGVjaygKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgPT4gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVmVyc2lvbi0+e05hbWV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzdG9wIHByb2Nlc3NpbmcgaWYgdGhlIG5hbWUgaXMgbm90IHVuaXF1ZQogICAgICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkTmFtZUR1cGxpY2F0ZXMpICkgewoKICAgICAgICAgICAgICAgICRBbGxSZXF1aXJlZCA9IDA7CgogICAgICAgICAgICAgICAgIyBidWlsZCBhIHN0cmluZyBvZiBhbGwgZHVwbGljYXRlIElEcwogICAgICAgICAgICAgICAgbXkgJE5hbWVEdXBsaWNhdGVzU3RyaW5nID0gam9pbiAnLCAnLCBAeyROYW1lRHVwbGljYXRlc307CgogICAgICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAiVGhlIG5hbWUgJFZlcnNpb24tPntOYW1lfSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbUlEKHMpOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJE5hbWVEdXBsaWNhdGVzU3RyaW5nLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIGNvbmZpZyBvcHRpb24gZm9yIHRoZSBuYW1lIHJlZ2V4IGNoZWNrcwogICAgICAgIG15ICRDSU5hbWVSZWdleENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNvbmZpZ0l0ZW06OkNJTmFtZVJlZ2V4Iik7CgogICAgICAgICMgY2hlY2sgaWYgdGhlIENJIG5hbWUgaXMgZ2l2ZW4gYW5kIHNob3VsZCBiZSBjaGVja2VkIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24KICAgICAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRWZXJzaW9uLT57TmFtZX0gKSAmJiAkQ0lOYW1lUmVnZXhDb25maWcgKSB7CgogICAgICAgICAgICAjIGdldCBjbGFzcyBsaXN0CiAgICAgICAgICAgIG15ICRDbGFzc0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBjbGFzcyBuYW1lCiAgICAgICAgICAgIG15ICRDbGFzc05hbWUgPSAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtLT57Q2xhc3NJRH0gfSB8fCAnJzsKCiAgICAgICAgICAgICMgZ2V0IHRoZSByZWdleCBmb3IgdGhpcyBjbGFzcwogICAgICAgICAgICBteSAkQ0lOYW1lUmVnZXggPSAkQ0lOYW1lUmVnZXhDb25maWctPnsgJENsYXNzTmFtZSAuICc6OicgLiAnQ0lOYW1lUmVnZXgnIH0gfHwgJyc7CgogICAgICAgICAgICAjIGlmIGEgcmVnZXggaXMgZGVmaW5lZCBhbmQgdGhlIENJIG5hbWUgZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgICAgICAgICBpZiAoICRDSU5hbWVSZWdleCAmJiAkVmVyc2lvbi0+e05hbWV9ICF+IG17ICRDSU5hbWVSZWdleCB9eG1zICkgewoKICAgICAgICAgICAgICAgICRBbGxSZXF1aXJlZCA9IDA7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgY2xhc3MKICAgICAgICAgICAgICAgICRDSU5hbWVSZWdleEVycm9yTWVzc2FnZSA9ICRDSU5hbWVSZWdleENvbmZpZy0+eyAkQ2xhc3NOYW1lIC4gJzo6JyAuICdDSU5hbWVSZWdleEVycm9yTWVzc2FnZScgfSB8fCAnJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHZlcnNpb24gdG8gZGF0YWJhc2UKICAgICAgICBpZiAoICRTdWJtaXRTYXZlICYmICRBbGxSZXF1aXJlZCApIHsKCiAgICAgICAgICAgIGlmICggJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9IGVxICdORVcnICkgewogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9ID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbS0+e0NsYXNzSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIGZyb20gdXBsb2FkIGNhY2hlCiAgICAgICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNEYXRhKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYnVpbGQgYSBsb29rdXAgbG9va3VwIGhhc2ggb2YgdGhlIG5ldyBhdHRhY2htZW50cwogICAgICAgICAgICBteSAlTmV3QXR0YWNobWVudDsKICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICAgICAjIHRoZSBrZXkgaXMgdGhlIGZpbGVuYW1lICsgZmlsZXNpemUgKyBjb250ZW50IHR5cGUKICAgICAgICAgICAgICAgIG15ICRLZXkgPSAkQXR0YWNobWVudC0+e0ZpbGVuYW1lfQogICAgICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnQtPntGaWxlc2l6ZX0KICAgICAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9OwoKICAgICAgICAgICAgICAgICMgc3RvcmUgYWxsIG9mIHRoZSBuZXcgYXR0YWNobWVudCBkYXRhCiAgICAgICAgICAgICAgICAkTmV3QXR0YWNobWVudHskS2V5fSA9ICRBdHRhY2htZW50OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgICAgIG15IEBFeGlzdGluZ0F0dGFjaG1lbnRzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIHRoZSBleGlzdGluZyBhdHRhY2htZW50cwogICAgICAgICAgICBGSUxFTkFNRToKICAgICAgICAgICAgZm9yIG15ICRGaWxlbmFtZSAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgZXhpc3RpbmcgYXR0YWNobWVudCBkYXRhCiAgICAgICAgICAgICAgICBteSAkQXR0YWNobWVudERhdGEgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgdGhlIGtleSBpcyB0aGUgZmlsZW5hbWUgKyBmaWxlc2l6ZSArIGNvbnRlbnQgdHlwZQogICAgICAgICAgICAgICAgIyAobm8gY29udGVudCBpZCwgYXMgZXhpc3RpbmcgYXR0YWNobWVudHMgZG9uJ3QgaGF2ZSBpdCkKICAgICAgICAgICAgICAgIG15ICRLZXkgPSAkQXR0YWNobWVudERhdGEtPntGaWxlbmFtZX0KICAgICAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50RGF0YS0+e0ZpbGVzaXplfQogICAgICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnREYXRhLT57Q29udGVudFR5cGV9OwoKICAgICAgICAgICAgICAgICMgYXR0YWNobWVudCBpcyBhbHJlYWR5IGV4aXN0aW5nLCB3ZSBjYW4gZGVsZXRlIGl0IGZyb20gdGhlIG5ldyBhdHRhY2htZW50IGhhc2gKICAgICAgICAgICAgICAgIGlmICggJE5ld0F0dGFjaG1lbnR7JEtleX0gKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICROZXdBdHRhY2htZW50eyRLZXl9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZXhpc3RpbmcgYXR0YWNobWVudCBpcyBubyBsb25nZXIgaW4gbmV3IGF0dGFjaG1lbnRzIGhhc2gKICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSB0aGUgZXhpc3RpbmcgYXR0YWNobWVudAogICAgICAgICAgICAgICAgICAgIG15ICREZWxldGVTdWNjZXNzZnVsID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50RGVsZXRlKAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgICAgICAgICBpZiAoICEkRGVsZXRlU3VjY2Vzc2Z1bCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgd3JpdGUgdGhlIG5ldyBhdHRhY2htZW50cwogICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCB2YWx1ZXMgJU5ld0F0dGFjaG1lbnQgKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgYXR0YWNobWVudAogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUF0dGFjaG1lbnRBZGQoCiAgICAgICAgICAgICAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCB2ZXJzaW9uCiAgICAgICAgICAgICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgICAgICAgICAgJXskVmVyc2lvbn0sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvbklEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIHpvb20gbWFzawogICAgICAgICAgICBteSAkU2NyZWVuVHlwZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTY3JlZW5UeXBlJyApIHx8IDA7CiAgICAgICAgICAgIGlmICgkU2NyZWVuVHlwZSkgewoKICAgICAgICAgICAgICAgIG15ICRVUkwgPSAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0iOwoKICAgICAgICAgICAgICAgICMgcmV0dXJuIHRvIG92ZXJ2aWV3IG9yIHNlYXJjaCByZXN1bHRzIGluc3RlYWQgaWYgY2FsbGVkIER1cGxpY2F0ZSBmcm9tIHJvdyBhY3Rpb24KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xhc3RTY3JlZW5WaWV3fSBlcSAnQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW0nCiAgICAgICAgICAgICAgICAgICAgfHwgJFNlbGYtPntMYXN0U2NyZWVuVmlld30gPX4gbXtcQSBBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbSg/OiBTZWFyY2gpPzt9bXN4CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRVUkwgPSAkU2VsZi0+e0xhc3RTY3JlZW5WaWV3fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgICAgIFVSTCA9PiAkVVJMLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICgkRHVwbGljYXRlSUQpIHsKICAgICAgICBteSAkVmVyc2lvbklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZlcnNpb25JRCcgKTsKICAgICAgICBpZiAoJFZlcnNpb25JRCkgewoKICAgICAgICAgICAgIyBnZXQgdmVyc2lvbiBkYXRhIHRvIGR1cGxpY2F0ZSBjb25maWcgaXRlbQogICAgICAgICAgICAkVmVyc2lvbiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgVmVyc2lvbklEID0+ICRWZXJzaW9uSUQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBnZXQgbGFzdCB2ZXJzaW9uIGRhdGEgdG8gZHVwbGljYXRlIGNvbmZpZyBpdGVtCiAgICAgICAgICAgICRWZXJzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJER1cGxpY2F0ZUlELAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9IG5lICdORVcnICkgewoKICAgICAgICAjIGdldCBsYXN0IHZlcnNpb24gZGF0YQogICAgICAgICRWZXJzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlWE1MRm9ybU91dHB1dFBhcmFtOwogICAgaWYgKCAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdICkgewogICAgICAgICRYTUxGb3JtT3V0cHV0UGFyYW17WE1MRGF0YX0gPSAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdOwogICAgfQoKICAgICMgb3V0cHV0IG5hbWUgaW52YWxpZCBibG9jawogICAgbXkgJFJvd05hbWVJbnZhbGlkID0gJyc7CiAgICBpZiAoICEkVmVyc2lvbi0+e05hbWV9ICYmICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVmVyc2lvblNhdmUnICYmICRTdWJtaXRTYXZlICkgewogICAgICAgICRSb3dOYW1lSW52YWxpZCA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyBjaGVjayBmb3IgbmFtZSBkdXBsaWNhdGVzCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkTmFtZUR1cGxpY2F0ZXMpICkgewogICAgICAgICRSb3dOYW1lSW52YWxpZCA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyBjaGVjayBmb3Igbm90IG1hdGNoZWQgbmFtZSByZWdleAogICAgaWYgKCRDSU5hbWVSZWdleEVycm9yTWVzc2FnZSkgewogICAgICAgICRSb3dOYW1lSW52YWxpZCA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyBvdXRwdXQgbmFtZSBibG9jawogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnUm93TmFtZScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICV7JFZlcnNpb259LAogICAgICAgICAgICBSb3dOYW1lSW52YWxpZCA9PiAkUm93TmFtZUludmFsaWQsCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKAogICAgICAgIElzU3RyaW5nV2l0aERhdGEoJFJvd05hbWVJbnZhbGlkKQogICAgICAgICYmICFJc0FycmF5UmVmV2l0aERhdGEoJE5hbWVEdXBsaWNhdGVzKQogICAgICAgICYmICEkQ0lOYW1lUmVnZXhFcnJvck1lc3NhZ2UKICAgICAgICApCiAgICB7CgogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+e0RlYnVnfSA+IDAgKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUmVuZGVyaW5nIGRlZmF1bHQgZXJyb3IgYmxvY2siLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jvd05hbWVFcnJvckRlZmF1bHQnLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkTmFtZUR1cGxpY2F0ZXMpICkgewoKICAgICAgICAjIGJ1aWxkIGFycmF5IHdpdGggQ0ktTnVtYmVycwogICAgICAgIG15IEBOYW1lRHVwbGljYXRlc0J5Q0lOdW1iZXI7CiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBAeyROYW1lRHVwbGljYXRlc30gKSB7CgogICAgICAgICAgICAjIGxvb2t1cCB0aGUgQ0kgbnVtYmVyCiAgICAgICAgICAgIG15ICRDSU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTG9va3VwKAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBOYW1lRHVwbGljYXRlc0J5Q0lOdW1iZXIsICRDSU51bWJlcjsKICAgICAgICB9CgogICAgICAgIG15ICREdXBsaWNhdGVTdHJpbmcgPSBqb2luICcsICcsIEBOYW1lRHVwbGljYXRlc0J5Q0lOdW1iZXI7CgogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+e0RlYnVnfSA+IDAgKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIlJlbmRlcmluZyBibG9jayBmb3IgZHVwbGljYXRlcyAoQ0ktTnVtYmVyczogJER1cGxpY2F0ZVN0cmluZykgZXJyb3IgbWVzc2FnZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUm93TmFtZUVycm9yRHVwbGljYXRlcycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRHVwbGljYXRlcyA9PiAkRHVwbGljYXRlU3RyaW5nLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgZWxzaWYgKCRDSU5hbWVSZWdleEVycm9yTWVzc2FnZSkgewoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUm93TmFtZUVycm9yUmVnRXgnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFJlZ0V4RXJyb3JNZXNzYWdlID0+ICRDSU5hbWVSZWdleEVycm9yTWVzc2FnZSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgKTsKCiAgICAjIG91dHB1dCBkZXBsb3ltZW50IHN0YXRlIGludmFsaWQgYmxvY2sKICAgIG15ICRSb3dEZXBsU3RhdGVJbnZhbGlkID0gJyc7CiAgICBpZiAoICEkVmVyc2lvbi0+e0RlcGxTdGF0ZUlEfSAmJiAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1ZlcnNpb25TYXZlJyAmJiAkU3VibWl0U2F2ZSApIHsKICAgICAgICAkUm93RGVwbFN0YXRlSW52YWxpZCA9ICcgU2VydmVyRXJyb3InOwogICAgfQoKICAgICMgZ2VuZXJhdGUgRGVwbFN0YXRlT3B0aW9uU3RyZwogICAgbXkgJERlcGxTdGF0ZU9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJERlcGxTdGF0ZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdEZXBsU3RhdGVJRCcsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdWYWxpZGF0ZV9SZXF1aXJlZCBNb2Rlcm5pemUnIC4gJFJvd0RlcGxTdGF0ZUludmFsaWQsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRWZXJzaW9uLT57RGVwbFN0YXRlSUR9LAogICAgKTsKCiAgICAjIG91dHB1dCBkZXBsb3ltZW50IHN0YXRlIGJsb2NrCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdSb3dEZXBsU3RhdGUnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBEZXBsU3RhdGVPcHRpb25TdHJnID0+ICREZXBsU3RhdGVPcHRpb25TdHJnLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKICAgIG15ICRJbmNpU3RhdGVMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+IFsgJ29wZXJhdGlvbmFsJywgJ2luY2lkZW50JyBdLAogICAgICAgIH0sCiAgICApOwoKICAgICMgb3V0cHV0IGluY2lkZW50IHN0YXRlIGludmFsaWQgYmxvY2sKICAgIG15ICRSb3dJbmNpU3RhdGVJbnZhbGlkID0gJyc7CiAgICBpZiAoICEkVmVyc2lvbi0+e0luY2lTdGF0ZUlEfSAmJiAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1ZlcnNpb25TYXZlJyAmJiAkU3VibWl0U2F2ZSApIHsKICAgICAgICAkUm93SW5jaVN0YXRlSW52YWxpZCA9ICcgU2VydmVyRXJyb3InOwogICAgfQoKICAgICMgZ2VuZXJhdGUgSW5jaVN0YXRlT3B0aW9uU3RyZwogICAgbXkgJEluY2lTdGF0ZU9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJEluY2lTdGF0ZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdJbmNpU3RhdGVJRCcsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdWYWxpZGF0ZV9SZXF1aXJlZCBNb2Rlcm5pemUnIC4gJFJvd0luY2lTdGF0ZUludmFsaWQsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRWZXJzaW9uLT57SW5jaVN0YXRlSUR9LAogICAgKTsKCiAgICAjIG91dHB1dCBpbmNpZGVudCBzdGF0ZSBibG9jawogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnUm93SW5jaVN0YXRlJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgSW5jaVN0YXRlT3B0aW9uU3RyZyA9PiAkSW5jaVN0YXRlT3B0aW9uU3RyZywKICAgICAgICB9LAogICAgKTsKCiAgICAjIG91dHB1dCB4bWwgZm9ybQogICAgaWYgKCAkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb259ICkgewogICAgICAgICRTZWxmLT57Q3VzdG9tZXJTZWFyY2hJdGVtSURzfSA9IFtdOwogICAgICAgICRTZWxmLT5fWE1MRm9ybU91dHB1dCgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9LAogICAgICAgICAgICAlWE1MRm9ybU91dHB1dFBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgJFBhcmFte0F0dGFjaG1lbnRMaXN0fSA9IFsKICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzTWV0YSgKICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICApCiAgICBdOwoKICAgIG15ICRPdXRwdXQgPSAnJzsKICAgIGlmICggKCAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0gJiYgJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9IG5lICdORVcnICkgfHwgJER1cGxpY2F0ZUlEICkgewoKICAgICAgICAjIG91dHB1dCBibG9jawogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTdGFydFNtYWxsJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyRDb25maWdJdGVtfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdFbmRTbWFsbCcgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgIFRpdGxlID0+IFRyYW5zbGF0YWJsZSgnRWRpdCcpLAogICAgICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgICAgICk7CgogICAgICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXskQ29uZmlnSXRlbX0sCiAgICAgICAgICAgICAgICBEdXBsaWNhdGVJRCA9PiAkRHVwbGljYXRlSUQsCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBOZWNlc3Nhcnkgc3R1ZmYgZm9yIEFkZCBOZXcKICAgICAgICAjIGdldCBjbGFzcyBsaXN0CiAgICAgICAgbXkgJENsYXNzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cwogICAgICAgIGZvciBteSAkQ2xhc3NJRCAoIHNvcnQga2V5cyAleyRDbGFzc0xpc3R9ICkgewogICAgICAgICAgICBteSAkSGFzQWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgICAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZGVsZXRlICRDbGFzc0xpc3QtPnskQ2xhc3NJRH0gaWYgISRIYXNBY2Nlc3M7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIENsYXNzT3B0aW9uU3RyZwogICAgICAgIG15ICRDbGFzc09wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRDbGFzc0xpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnQ2xhc3NJRCcsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdXMTAwcGMnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSwKICAgICAgICApOwoKICAgICAgICAjIEVuZCBOZWNlc3Nhcnkgc3R1ZmYgZm9yIEFkZCBOZXcKCiAgICAgICAgIyBvdXRwdXQgYmxvY2sKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU3RhcnROb3JtYWwnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzT3B0aW9uU3RyZyA9PiAkQ2xhc3NPcHRpb25TdHJnLAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXskQ29uZmlnSXRlbX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0VuZE5vcm1hbCcgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgIFRpdGxlID0+IFRyYW5zbGF0YWJsZSgnRWRpdCcpLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXskQ29uZmlnSXRlbX0sCiAgICAgICAgICAgICAgICBEdXBsaWNhdGVJRCA9PiAkRHVwbGljYXRlSUQsCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgfQoKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX1hNTEZvcm1HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgISRQYXJhbXtBbGxSZXF1aXJlZH07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17QWxsUmVxdWlyZWR9IG5lICdTQ0FMQVInOwogICAgcmV0dXJuIGlmICEkUGFyYW17Q29uZmlnSXRlbUlEfTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICBteSAkRm9ybURhdGEgPSB7fTsKCiAgICBJVEVNOgogICAgZm9yIG15ICRJdGVtICggQHsgJFBhcmFte1hNTERlZmluaXRpb259IH0gKSB7CiAgICAgICAgbXkgJENvdW50ZXJJbnNlcnQgPSAxOwoKICAgICAgICBDT1VOVEVSOgogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJEl0ZW0tPntDb3VudE1heH0gKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBpbnB1dGtleSBhbmQgYWRka2V5CiAgICAgICAgICAgIG15ICRJbnB1dEtleSA9ICRJdGVtLT57S2V5fSAuICc6OicgLiAkQ291bnRlcjsKICAgICAgICAgICAgbXkgJEFkZEtleSAgID0gJEl0ZW0tPntLZXl9IC4gJzo6QWRkJzsKICAgICAgICAgICAgaWYgKCAkUGFyYW17UHJlZml4fSApIHsKICAgICAgICAgICAgICAgICRJbnB1dEtleSA9ICRQYXJhbXtQcmVmaXh9IC4gJzo6JyAuICRJbnB1dEtleTsKICAgICAgICAgICAgICAgICRBZGRLZXkgICA9ICRQYXJhbXtQcmVmaXh9IC4gJzo6JyAuICRBZGRLZXk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IHBhcmFtCiAgICAgICAgICAgIG15ICRGb3JtVmFsdWVzID0gJExheW91dE9iamVjdC0+SVRTTUNvbmZpZ0l0ZW1Gb3JtRGF0YUdldCgKICAgICAgICAgICAgICAgIEtleSAgICAgICAgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgICAgICBJdGVtICAgICAgICAgPT4gJEl0ZW0sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoIGRlZmluZWQgJEZvcm1WYWx1ZXMtPntWYWx1ZX0gKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayByZXF1aXJlZCB2YWx1ZQogICAgICAgICAgICAgICAgaWYgKCAkRm9ybVZhbHVlcy0+e0ludmFsaWR9ICkgewogICAgICAgICAgICAgICAgICAgICR7ICRQYXJhbXtBbGxSZXF1aXJlZH0gfSA9IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjaGVjayBkZWxldGUgYnV0dG9uCiAgICAgICAgICAgICAgICBuZXh0IENPVU5URVIgaWYgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJElucHV0S2V5IC4gJzo6RGVsZXRlJyApOwoKICAgICAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAgICAgICAgIGlmICggJEl0ZW0tPntTdWJ9ICkgewogICAgICAgICAgICAgICAgICAgIG15ICRTdWJGb3JtRGF0YSA9ICRTZWxmLT5fWE1MRm9ybUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByZWZpeCAgICAgICAgPT4gJElucHV0S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBBbGxSZXF1aXJlZCAgID0+ICRQYXJhbXtBbGxSZXF1aXJlZH0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkRm9ybURhdGEtPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlckluc2VydF0gPSAkU3ViRm9ybURhdGE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkRm9ybURhdGEtPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlckluc2VydF0tPntDb250ZW50fSA9ICRGb3JtVmFsdWVzLT57VmFsdWV9OwogICAgICAgICAgICAgICAgJENvdW50ZXJJbnNlcnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGFkZCBidXR0b24KICAgICAgICAgICAgICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEFkZEtleSApICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJEl0ZW0tPntTdWJ9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRm9ybURhdGEtPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlckluc2VydF0gPSAkU2VsZi0+X1hNTERlZmF1bHRTZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRJdGVtLT57U3VifSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJEZvcm1EYXRhLT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJJbnNlcnRdLT57Q29udGVudH0gPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxhc3QgQ09VTlRFUjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJEZvcm1EYXRhOwp9CgpzdWIgX1hNTERlZmF1bHRTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwoKICAgIG15ICREZWZhdWx0RGF0YSA9IHt9OwoKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJEl0ZW0tPntDb3VudERlZmF1bHR9ICkgewoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICAgICBpZiAoICRJdGVtLT57U3VifSApIHsKICAgICAgICAgICAgICAgICREZWZhdWx0RGF0YS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXSA9ICRTZWxmLT5fWE1MRGVmYXVsdFNldCgKICAgICAgICAgICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRJdGVtLT57U3VifSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICREZWZhdWx0RGF0YS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9ID0gJyc7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkRGVmYXVsdERhdGE7Cn0KCnN1YiBfWE1MRm9ybU91dHB1dCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CgogICAgJFBhcmFte0xldmVsfSAgfHw9IDA7CiAgICAkUGFyYW17UHJlZml4fSB8fD0gJyc7CgogICAgIyBnZXQgc3VibWl0IHNhdmUKICAgIG15ICRTdWJtaXRTYXZlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1Ym1pdFNhdmUnICk7CgogICAgIyBzZXQgZGF0YSBwcmVzZW50IG1vZGUKICAgIG15ICREYXRhUHJlc2VudE1vZGUgPSAwOwogICAgaWYgKCAkUGFyYW17WE1MRGF0YX0gJiYgcmVmICRQYXJhbXtYTUxEYXRhfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgJERhdGFQcmVzZW50TW9kZSA9IDE7CiAgICB9CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBteSAkSXRlbUNvdW50ZXIgPSAxOwogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICAjIHNldCBsb29wCiAgICAgICAgbXkgJExvb3AgPSAkSXRlbS0+e0NvdW50RGVmYXVsdH07CiAgICAgICAgaWYgKCREYXRhUHJlc2VudE1vZGUpIHsKICAgICAgICAgICAgJExvb3AgPSAwOwoKICAgICAgICAgICAgIyBzZWFyY2ggdGhlIGxhc3QgY29udGVudAogICAgICAgICAgICBDT1VOVEVSOgogICAgICAgICAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uICRJdGVtLT57Q291bnRNYXh9ICkgewogICAgICAgICAgICAgICAgbGFzdCBDT1VOVEVSIGlmICFkZWZpbmVkICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9OwogICAgICAgICAgICAgICAgJExvb3AgPSAkQ291bnRlcjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgYWJzb2x1dCBtaW5pbXVtCiAgICAgICAgICAgIGlmICggJExvb3AgPCAkSXRlbS0+e0NvdW50TWlufSApIHsKICAgICAgICAgICAgICAgICRMb29wID0gJEl0ZW0tPntDb3VudE1pbn07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2V0IGRlbGV0ZQogICAgICAgIG15ICREZWxldGUgPSAwOwogICAgICAgIGlmICggJExvb3AgPiAkSXRlbS0+e0NvdW50TWlufSApIHsKICAgICAgICAgICAgJERlbGV0ZSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBjb250ZW50IHJvd3MKICAgICAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uICRMb29wICkgewoKICAgICAgICAgICAgIyBvdXRwdXQgcm93IGJsb2NrCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdYTUxSb3cnICk7CgogICAgICAgICAgICBpZiAoICEkUGFyYW17TGV2ZWx9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1hNTFJvd0ZpZWxkc2V0U3RhcnQnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3JlYXRlIGlucHV0a2V5IGFuZCBhZGRrZXkKICAgICAgICAgICAgbXkgJElucHV0S2V5ID0gJEl0ZW0tPntLZXl9IC4gJzo6JyAuICRDb3VudGVyOwogICAgICAgICAgICBpZiAoICRQYXJhbXtQcmVmaXh9ICkgewogICAgICAgICAgICAgICAgJElucHV0S2V5ID0gJFBhcmFte1ByZWZpeH0gLiAnOjonIC4gJElucHV0S2V5OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG91dHB1dCBibHVlIHJlcXVpcmVkIHN0YXIKICAgICAgICAgICAgbXkgJFhNTFJvd1ZhbHVlQ29udGVudFJlcXVpcmVkID0gMDsKICAgICAgICAgICAgbXkgJExhYmVsQ2xhc3MgICAgICAgICAgICAgICAgID0gJyc7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntSZXF1aXJlZH0gKSB7CiAgICAgICAgICAgICAgICAkWE1MUm93VmFsdWVDb250ZW50UmVxdWlyZWQgPSAxOwogICAgICAgICAgICAgICAgJExhYmVsQ2xhc3MgICAgICAgICAgICAgICAgID0gJ01hbmRhdG9yeSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3V0cHV0IHJlZCBpbnZhbGlkIHN0YXIKICAgICAgICAgICAgbXkgJFhNTFJvd1ZhbHVlQ29udGVudEludmFsaWQgPSAwOwogICAgICAgICAgICBpZiAoICRJdGVtLT57Rm9ybX0tPnskSW5wdXRLZXl9LT57SW52YWxpZH0gJiYgJFN1Ym1pdFNhdmUgKSB7CiAgICAgICAgICAgICAgICAkWE1MUm93VmFsdWVDb250ZW50SW52YWxpZCA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRJdGVtSUQgPSAnSXRlbScgLiAkSXRlbUNvdW50ZXIrKyAuICRQYXJhbXtQcmVmaXh9IC4gJFBhcmFte0xldmVsfTsKCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnQ3VzdG9tZXInICkgewogICAgICAgICAgICAgICAgcHVzaCBAeyAkU2VsZi0+e0N1c3RvbWVyU2VhcmNoSXRlbUlEc30gfSwgJEl0ZW1JRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjcmVhdGUgaW5wdXQgZWxlbWVudAogICAgICAgICAgICBteSAkSW5wdXRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5JVFNNQ29uZmlnSXRlbUlucHV0Q3JlYXRlKAogICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgICAgICBJdGVtICAgICAgICAgICAgID0+ICRJdGVtLAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICA9PiAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0tPntDb250ZW50fSwKICAgICAgICAgICAgICAgIEl0ZW1JZCAgICAgICAgICAgPT4gJEl0ZW1JRCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICAgICAgPT4gJFhNTFJvd1ZhbHVlQ29udGVudFJlcXVpcmVkLAogICAgICAgICAgICAgICAgSW52YWxpZCAgICAgICAgICA9PiAkWE1MUm93VmFsdWVDb250ZW50SW52YWxpZCwKICAgICAgICAgICAgICAgIE92ZXJyaWRlVGltZVpvbmUgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgSUQ/CiAgICAgICAgICAgIG15ICRMYWJlbEZvciA9ICRJdGVtSUQ7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnRGF0ZScgfHwgJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnRGF0ZVRpbWUnICkgewogICAgICAgICAgICAgICAgJExhYmVsRm9yID0gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWQgbmVlZGVkPwogICAgICAgICAgICBpZiAoJExhYmVsRm9yKSB7CiAgICAgICAgICAgICAgICAkTGFiZWxGb3IgPSAnZm9yPSInIC4gJExhYmVsRm9yIC4gJyInOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlzIHRoaXMgYSBzdWIgZmllbGQ/CiAgICAgICAgICAgIG15ICRDbGFzcyA9ICcnOwogICAgICAgICAgICBpZiAoICRQYXJhbXtMZXZlbH0gKSB7CiAgICAgICAgICAgICAgICAkQ2xhc3MgPSAnU3ViRWxlbWVudCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2xhc3MgbmVlZGVkPwogICAgICAgICAgICBpZiAoJExhYmVsQ2xhc3MpIHsKICAgICAgICAgICAgICAgICRMYWJlbENsYXNzID0gJ2NsYXNzPSInIC4gIiRDbGFzcyAgJExhYmVsQ2xhc3MiIC4gJyInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExhYmVsQ2xhc3MgPSAnY2xhc3M9IicgLiAkQ2xhc3MgLiAnIic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3V0cHV0IHJvdyB2YWx1ZSBjb250ZW50IGJsb2NrCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnWE1MUm93VmFsdWUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgICA9PiAkSXRlbUlELAogICAgICAgICAgICAgICAgICAgIExhYmVsRm9yICAgID0+ICRMYWJlbEZvciB8fCAnJywKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAkSXRlbS0+e0Rlc2NyaXB0aW9ufSB8fCAkSXRlbS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIElucHV0U3RyaW5nID0+ICRJbnB1dFN0cmluZywKICAgICAgICAgICAgICAgICAgICBMYWJlbENsYXNzICA9PiAkTGFiZWxDbGFzcyB8fCAnJywKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAkQ2xhc3MgfHwgJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0lucHV0fS0+e1JlcXVpcmVkfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdYTUxSb3dWYWx1ZUNvbnRlbnRSZXF1aXJlZCcgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBvdXRwdXQgZGVsZXRlIGJ1dHRvbgogICAgICAgICAgICBpZiAoJERlbGV0ZSkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnWE1MUm93VmFsdWVDb250ZW50RGVsZXRlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRLZXkgPT4gJElucHV0S2V5LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHRoZSBjb250ZW50IGlzIGludmFsaWQKICAgICAgICAgICAgaWYgKCRYTUxSb3dWYWx1ZUNvbnRlbnRJbnZhbGlkKSB7CgogICAgICAgICAgICAgICAgIyBzaG93IHJlZ2V4IGVycm9yIG1lc3NhZ2UgYmxvY2sKICAgICAgICAgICAgICAgIGlmICggJEl0ZW0tPntGb3JtfS0+eyRJbnB1dEtleX0tPntSZWdFeEVycm9yTWVzc2FnZX0gKSB7CgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdYTUxSb3dWYWx1ZVJlZ0V4RXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgICAgID0+ICRJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdFeEVycm9yTWVzc2FnZSA9PiAkSXRlbS0+e0Zvcm19LT57JElucHV0S2V5fS0+e1JlZ0V4RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIHNob3cgbm9ybWFsIHNlcnZlciBlcnJvciBibG9jawogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1hNTFJvd1ZhbHVlU2VydmVyRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e1N1Yn0gKSB7CiAgICAgICAgICAgICAgICBteSAlWE1MRm9ybU91dHB1dFBhcmFtOwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICREYXRhUHJlc2VudE1vZGUKICAgICAgICAgICAgICAgICAgICAmJiBkZWZpbmVkICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRYTUxGb3JtT3V0cHV0UGFyYW17WE1MRGF0YX0gPSAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFNlbGYtPl9YTUxGb3JtT3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgICVYTUxGb3JtT3V0cHV0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTGV2ZWwgID0+ICRQYXJhbXtMZXZlbH0gKyAxLAogICAgICAgICAgICAgICAgICAgIFByZWZpeCA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICEkUGFyYW17TGV2ZWx9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1hNTFJvd0ZpZWxkc2V0RW5kJyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG91dHB1dCByb3cgdG8gc29ydCByb3dzIGNvcnJlY3RseQogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnWE1MUm93JyApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgYWRkIGJ1dHRvbgogICAgICAgIGlmICggJExvb3AgPCAkSXRlbS0+e0NvdW50TWF4fSApIHsKCiAgICAgICAgICAgICMgaWYgbm8gaXRlbSBzaG91bGQgYmUgc2hvd24gd2UgbmVlZCB0byBzaG93IHRoZSBhZGQgYnV0dG9uCiAgICAgICAgICAgICMgYW5kIHRoZXJlZm9yZSB3ZSBuZWVkIHRvIHNob3cgdGhlIFhNTFJvdyBibG9jawogICAgICAgICAgICBpZiAoICEkTG9vcCApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdYTUxSb3cnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRDbGFzcyA9ICcnOwogICAgICAgICAgICBpZiAoICRQYXJhbXtMZXZlbH0gKSB7CiAgICAgICAgICAgICAgICAkQ2xhc3MgPSAnY2xhc3M9IlN1YkVsZW1lbnQiJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdYTUxSb3dGaWVsZHNldEVuZCcgKTsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdYTUxSb3dGaWVsZHNldFN0YXJ0JyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNldCBwcmVmaXgKICAgICAgICAgICAgbXkgJElucHV0S2V5ID0gJEl0ZW0tPntLZXl9OwogICAgICAgICAgICBpZiAoICRQYXJhbXtQcmVmaXh9ICkgewogICAgICAgICAgICAgICAgJElucHV0S2V5ID0gJFBhcmFte1ByZWZpeH0gLiAnOjonIC4gJElucHV0S2V5OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG91dHB1dCByb3cgYWRkIGNvbnRlbnQgYmxvY2sKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdYTUxSb3dBZGRDb250ZW50JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgID0+ICRJbnB1dEtleSAuICdBZGQnLAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRJdGVtLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJEl0ZW0tPntEZXNjcmlwdGlvbn0gfHwgJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBJbnB1dEtleSAgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJENsYXNzLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRTZWxmLT57Q3VzdG9tZXJTZWFyY2hJdGVtSURzfSApICkgewoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdDdXN0b21lclNlYXJjaEl0ZW1JRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0N1c3RvbWVyU2VhcmNoSXRlbUlEc30sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbUhpc3Rvcnk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgJFNlbGYtPntDb25maWdJdGVtSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbmZpZ0l0ZW1JRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNlbGYtPntDb25maWdJdGVtSUR9ICkgewoKICAgICAgICAjIGVycm9yIHBhZ2UKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBDb25maWdJdGVtSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWVkZWQgb2JqZWN0cwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKICAgIG15ICRDb25maWdPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzCiAgICBteSAkSGFzQWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgU2NvcGUgID0+ICdJdGVtJywKICAgICAgICBJdGVtSUQgPT4gJFNlbGYtPntDb25maWdJdGVtSUR9LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVHlwZSAgID0+ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKS0+e1Blcm1pc3Npb259LAogICAgKTsKCiAgICBpZiAoICEkSGFzQWNjZXNzICkgewoKICAgICAgICAjIGVycm9yIHBhZ2UKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIERlZmluZSB0cmFuc2xhdGFibGUgaGlzdG9yeSBzdHJpbmdzLgogICAgbXkgJUhpc3RvcnlTdHJpbmdzID0gKAogICAgICAgICdDSUhpc3Rvcnk6OkNvbmZpZ0l0ZW1DcmVhdGUnICAgICAgPT4gVHJhbnNsYXRhYmxlKCdOZXcgQ29uZmlnSXRlbSAoSUQ9JXMpJyksCiAgICAgICAgJ0NJSGlzdG9yeTo6VmVyc2lvbkNyZWF0ZScgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05ldyB2ZXJzaW9uIChJRD0lcyknKSwKICAgICAgICAnQ0lIaXN0b3J5OjpEZXBsb3ltZW50U3RhdGVVcGRhdGUnID0+IFRyYW5zbGF0YWJsZSgnRGVwbG95bWVudCBzdGF0ZSB1cGRhdGVkIChuZXc9JXMsIG9sZD0lcyknKSwKICAgICAgICAnQ0lIaXN0b3J5OjpJbmNpZGVudFN0YXRlVXBkYXRlJyAgID0+IFRyYW5zbGF0YWJsZSgnSW5jaWRlbnQgc3RhdGUgdXBkYXRlZCAobmV3PSVzLCBvbGQ9JXMpJyksCiAgICAgICAgJ0NJSGlzdG9yeTo6Q29uZmlnSXRlbURlbGV0ZScgICAgICA9PiBUcmFuc2xhdGFibGUoJ0NvbmZpZ0l0ZW0gKElEPSVzKSBkZWxldGVkJyksCiAgICAgICAgJ0NJSGlzdG9yeTo6TGlua0FkZCcgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0xpbmsgdG8gJXMgKHR5cGU9JXMpIGFkZGVkJyksCiAgICAgICAgJ0NJSGlzdG9yeTo6TGlua0RlbGV0ZScgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0xpbmsgdG8gJXMgKHR5cGU9JXMpIGRlbGV0ZWQnKSwKICAgICAgICAnQ0lIaXN0b3J5OjpEZWZpbml0aW9uVXBkYXRlJyAgICAgID0+IFRyYW5zbGF0YWJsZSgnQ29uZmlnSXRlbSBkZWZpbml0aW9uIHVwZGF0ZWQgKElEPSVzKScpLAogICAgICAgICdDSUhpc3Rvcnk6Ok5hbWVVcGRhdGUnICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdOYW1lIHVwZGF0ZWQgKG5ldz0lcywgb2xkPSVzKScpLAogICAgICAgICdDSUhpc3Rvcnk6OlZhbHVlVXBkYXRlJyAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBdHRyaWJ1dGUgJXMgdXBkYXRlZCBmcm9tICIlcyIgdG8gIiVzIicpLAogICAgICAgICdDSUhpc3Rvcnk6OlZlcnNpb25EZWxldGUnICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdWZXJzaW9uICVzIGRlbGV0ZWQnKSwKICAgICk7CgogICAgIyBnZXQgYWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb25maWcgaXRlbQogICAgbXkgJENvbmZpZ0l0ZW0gPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFNlbGYtPntDb25maWdJdGVtSUR9LAogICAgKTsKICAgIG15ICRDb25maWdJdGVtTmFtZSA9ICRDb25maWdJdGVtLT57TnVtYmVyfTsKCiAgICAjIGdldCBhbGwgZW50cmllcyBpbiB0aGUgaGlzdG9yeSBmb3IgdGhpcyBjb25maWcgaXRlbQogICAgbXkgJExpbmVzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkhpc3RvcnlHZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRTZWxmLT57Q29uZmlnSXRlbUlEfSwKICAgICk7CgogICAgIyBnZXQgc2hvd24gdXNlciBpbmZvCiAgICBteSBATmV3TGluZXMgPSBAeyRMaW5lc307CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpIaXN0b3J5T3JkZXInKSBlcSAncmV2ZXJzZScgKSB7CiAgICAgICAgQE5ld0xpbmVzID0gcmV2ZXJzZSBAeyRMaW5lc307CiAgICB9CgogICAgIyBnZXQgZGVmaW5pdGlvbiBmb3IgQ0kncyBjbGFzcwogICAgbXkgJERlZmluaXRpb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkdldCgKICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtLT57Q2xhc3NJRH0sCiAgICApOwoKICAgIG15ICRUYWJsZSAgID0gJyc7CiAgICBteSAkQ291bnRlciA9IDE7CiAgICBteSAkVmVyc2lvbiA9IDA7CiAgICBmb3IgbXkgJERhdGFUbXAgKEBOZXdMaW5lcykgewogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgbXkgJURhdGEgPSAoCiAgICAgICAgICAgICV7JERhdGFUbXB9LAogICAgICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb24sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgZ2VuZXJhbCBjYXRhbG9nIG9iamVjdAogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIHRyaW0gdGhlIGNvbW1lbnQgdG8gb25seSBzaG93IHZlcnNpb24gbnVtYmVyCiAgICAgICAgaWYgKCAkRGF0YXtIaXN0b3J5VHlwZX0gZXEgJ1ZlcnNpb25DcmVhdGUnICkgewogICAgICAgICAgICAkRGF0YXtDb21tZW50fSA9fiBzL1xELy9nOwogICAgICAgICAgICAkRGF0YXtWZXJzaW9uSUR9ID0gJERhdGF7Q29tbWVudH07CiAgICAgICAgICAgICRWZXJzaW9uID0gJERhdGF7Q29tbWVudH07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJERhdGF7SGlzdG9yeVR5cGV9IGVxICdWYWx1ZVVwZGF0ZScgKSB7CgogICAgICAgICAgICAjIGJlYXV0aWZ5IGNvbW1lbnQKICAgICAgICAgICAgbXkgQFBhcnRzID0gc3BsaXQgLyUlLywgJERhdGF7Q29tbWVudH07CiAgICAgICAgICAgICRQYXJ0c1swXSA9fiBzeyBcQSBcWy4qP1xdIFx7J1ZlcnNpb24nXH0gXFsuKj9cXSBceycgfXt9eG1zOwogICAgICAgICAgICAkUGFydHNbMF0gPX4gc3sgJ1x9IFxbLio/XF0gXHsnIH17Ojp9eG1zZzsKICAgICAgICAgICAgJFBhcnRzWzBdID1+IHN7ICdcfSBcWy4qP1xdIFx6IH17fXhtczsKCiAgICAgICAgICAgICMgZ2V0IGRlZmluaXRpb24gaW5mbyBhYm91dCBhdHRyaWJ1dGUKICAgICAgICAgICAgbXkgJEF0dHJpYnV0ZUluZm8gPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkF0dHJpYnV0ZUluZm8oCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uICAgID0+ICREZWZpbml0aW9uLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVQYXRoID0+ICRQYXJ0c1swXSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZUluZm8gJiYgJEF0dHJpYnV0ZUluZm8tPntJbnB1dH0tPntUeXBlfSBlcSAnR2VuZXJhbENhdGFsb2cnICkgewogICAgICAgICAgICAgICAgbXkgJEl0ZW1MaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQXR0cmlidXRlSW5mby0+e0lucHV0fS0+e0NsYXNzfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFBhcnRzWzFdID0gJEl0ZW1MaXN0LT57ICRQYXJ0c1sxXSB8fCAnJyB9IHx8ICcnOwogICAgICAgICAgICAgICAgJFBhcnRzWzJdID0gJEl0ZW1MaXN0LT57ICRQYXJ0c1syXSB8fCAnJyB9IHx8ICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFzc2VtYmxlIHBhcnRzCiAgICAgICAgICAgICREYXRhe0NvbW1lbnR9ID0gam9pbiAnJSUnLCBAUGFydHM7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJERhdGF7SGlzdG9yeVR5cGV9IGVxICdEZXBsb3ltZW50U3RhdGVVcGRhdGUnICkgewoKICAgICAgICAgICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICAgICAgICAgIG15ICREZXBsU3RhdGVMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IG5hbWVzCiAgICAgICAgICAgIG15IEBQYXJ0cyA9IHNwbGl0IC8lJS8sICREYXRhe0NvbW1lbnR9OwogICAgICAgICAgICBmb3IgbXkgJFBhcnQgKEBQYXJ0cykgewogICAgICAgICAgICAgICAgJFBhcnQgPSAkRGVwbFN0YXRlTGlzdC0+eyRQYXJ0fSB8fCAnJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhc3NlbWJsZSBwYXJ0cwogICAgICAgICAgICAkRGF0YXtDb21tZW50fSA9IGpvaW4gJyUlJywgQFBhcnRzOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICREYXRhe0hpc3RvcnlUeXBlfSBlcSAnSW5jaWRlbnRTdGF0ZVVwZGF0ZScgKSB7CgogICAgICAgICAgICAjIGdldCBkZXBsb3ltZW50IHN0YXRlIGxpc3QKICAgICAgICAgICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IG5hbWVzCiAgICAgICAgICAgIG15IEBQYXJ0cyA9IHNwbGl0IC8lJS8sICREYXRhe0NvbW1lbnR9OwogICAgICAgICAgICBmb3IgbXkgJFBhcnQgKEBQYXJ0cykgewogICAgICAgICAgICAgICAgJFBhcnQgPSAkRGVwbFN0YXRlTGlzdC0+eyRQYXJ0fSB8fCAnJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhc3NlbWJsZSBwYXJ0cwogICAgICAgICAgICAkRGF0YXtDb21tZW50fSA9IGpvaW4gJyUlJywgQFBhcnRzOwogICAgICAgIH0KCiAgICAgICAgIyByZXBsYWNlIHRleHQKICAgICAgICBpZiAoICREYXRhe0NvbW1lbnR9ICkgewoKICAgICAgICAgICAgbXkgJUluZm87CgogICAgICAgICAgICAkRGF0YXtDb21tZW50fSA9fiBzeyBcQSAlJSB9e314bXNnOwogICAgICAgICAgICBteSBAVmFsdWVzID0gc3BsaXQgLyUlLywgJERhdGF7Q29tbWVudH07CgogICAgICAgICAgICAkRGF0YXtDb21tZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICRIaXN0b3J5U3RyaW5nc3sgJ0NJSGlzdG9yeTo6JyAuICREYXRhe0hpc3RvcnlUeXBlfSB9LAogICAgICAgICAgICAgICAgQFZhbHVlcywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVtb3ZlIG5vdCBuZWVkZWQgcGxhY2UgaG9sZGVyCiAgICAgICAgICAgICREYXRhe0NvbW1lbnR9ID1+IHMvXCVzLy9nOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1JvdycsCiAgICAgICAgICAgIERhdGEgPT4geyVEYXRhfSwKICAgICAgICApOwogICAgfQoKICAgICMgYnVpbGQgcGFnZQogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBWYWx1ZSA9PiAkQ29uZmlnSXRlbU5hbWUsCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJwogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnknLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkQ29uZmlnSXRlbU5hbWUsCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkU2VsZi0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFZlcnNpb25JRCAgICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVmVyc2lvbklEJyApLAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbVByaW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpNaWdyYXRpb25zOjpPVFJTNjo6U3lzQ29uZmlnKQoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkQ29uZmlnSXRlbUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbmZpZ0l0ZW1JRCcgKTsKICAgIG15ICRWZXJzaW9uSUQgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVmVyc2lvbklEJyApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRDb25maWdJdGVtSUQgfHwgISRWZXJzaW9uSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gQ29uZmlnSXRlbUlEIG9yIFZlcnNpb25JRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cwogICAgbXkgJEhhc0FjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFNjb3BlICA9PiAnSXRlbScsCiAgICAgICAgSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCJJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpLT57UGVybWlzc2lvbn0sCiAgICApOwoKICAgIGlmICggISRIYXNBY2Nlc3MgKSB7CgogICAgICAgICMgZXJyb3IgcGFnZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NhblwndCBzaG93IGNvbmZpZyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgaXRlbQogICAgbXkgJENvbmZpZ0l0ZW0gPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CiAgICBpZiAoICEkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb25maWdJdGVtSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsICRDb25maWdJdGVtSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdmVyc2lvbgogICAgbXkgJFZlcnNpb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb25JRCwKICAgICk7CiAgICBpZiAoICEkVmVyc2lvbi0+e1ZlcnNpb25JRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1ZlcnNpb25JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFZlcnNpb25JRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBsYXN0IHZlcnNpb24KICAgIG15ICRMYXN0VmVyc2lvbiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgKTsKICAgICRDb25maWdJdGVtLT57Q3VycmVudE5hbWV9ID0gJExhc3RWZXJzaW9uLT57TmFtZX07CgogICAgIyBnZXQgdmVyc2lvbiBsaXN0CiAgICBteSAkVmVyc2lvbkxpc3QgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwoKICAgIG15ICRWZXJzaW9uTnVtYmVyID0gMTsKICAgIExJU1RWRVJTSU9OSUQ6CiAgICBmb3IgbXkgJExpc3RWZXJzaW9uSUQgKCBAeyRWZXJzaW9uTGlzdH0gKSB7CgogICAgICAgIGxhc3QgTElTVFZFUlNJT05JRCBpZiAkVmVyc2lvbklEIGVxICRMaXN0VmVyc2lvbklEOwogICAgICAgICRWZXJzaW9uTnVtYmVyKys7CiAgICB9CgogICAgIyBnZXQgdXNlciBvYmplY3QKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIGdldCBjcmVhdGUgJiBjaGFuZ2UgdXNlciBkYXRhCiAgICBmb3IgbXkgJEtleSAocXcoQ3JlYXRlIENoYW5nZSkpIHsKICAgICAgICAkQ29uZmlnSXRlbS0+eyAkS2V5IC4gJ0J5TmFtZScgfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICAgICAgVXNlcklEID0+ICRDb25maWdJdGVtLT57ICRLZXkgLiAnQnknIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB1c2VyIGRhdGEgb2YgdmVyc2lvbiAoY3JlYXRlIGJ5KQogICAgJFZlcnNpb24tPntDcmVhdGVCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkVmVyc2lvbi0+e0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgbGlua2VkIG9iamVjdHMKICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKCiAgICBteSAkTGlua0xpc3RXaXRoRGF0YSA9ICRMaW5rT2JqZWN0LT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIEtleSAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxpbmsgdHlwZSBsaXN0CiAgICBteSAlTGlua1R5cGVMaXN0ID0gJExpbmtPYmplY3QtPlR5cGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBsaW5rIGRhdGEKICAgIG15ICVMaW5rRGF0YTsKICAgIGlmICggJExpbmtMaXN0V2l0aERhdGEgJiYgcmVmICRMaW5rTGlzdFdpdGhEYXRhIGVxICdIQVNIJyAmJiAleyRMaW5rTGlzdFdpdGhEYXRhfSApIHsKICAgICAgICAlTGlua0RhdGEgPSAkTGF5b3V0T2JqZWN0LT5MaW5rT2JqZWN0VGFibGVDcmVhdGUoCiAgICAgICAgICAgIExpbmtMaXN0V2l0aERhdGEgPT4gJExpbmtMaXN0V2l0aERhdGEsCiAgICAgICAgICAgIFZpZXdNb2RlICAgICAgICAgPT4gJ1NpbXBsZVJhdycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBhdHRhY2htZW50cwogICAgbXkgQEF0dGFjaG1lbnRzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgIyBnZXQgcGRmIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIGdlbmVyYXRlIHBkZiBvdXRwdXQKICAgIG15ICVQYWdlOwoKICAgICMgZ2V0IG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCiAgICAkUGFnZXtNYXhQYWdlc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgJFBhZ2V7TWF4UGFnZXN9ID0gMTAwOwogICAgfQoKICAgIG15ICRUaXRsZSA9ICRDb25maWdJdGVtLT57Q3VycmVudE5hbWV9OwoKICAgICRQYWdle01hcmdpblRvcH0gICAgPSAzMDsKICAgICRQYWdle01hcmdpblJpZ2h0fSAgPSA0MDsKICAgICRQYWdle01hcmdpbkJvdHRvbX0gPSA0MDsKICAgICRQYWdle01hcmdpbkxlZnR9ICAgPSA0MDsKICAgICRQYWdle0hlYWRlclJpZ2h0fSAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NvbmZpZ0l0ZW0nKSAuICcjJwogICAgICAgIC4gJENvbmZpZ0l0ZW0tPntOdW1iZXJ9OwogICAgJFBhZ2V7SGVhZGxpbmVMZWZ0fSA9ICRWZXJzaW9uLT57TmFtZX07CiAgICAkUGFnZXtQYWdlVGV4dH0gICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdQYWdlJyk7CiAgICAkUGFnZXtQYWdlQ291bnR9ICAgID0gMTsKCiAgICAjIGNyZWF0ZSBuZXcgcGRmIGRvY3VtZW50CiAgICAkUERGT2JqZWN0LT5Eb2N1bWVudE5ldygKICAgICAgICBUaXRsZSAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0JykgLiAnOicgLiAkVmVyc2lvbi0+e05hbWV9LAogICAgICAgIEVuY29kZSA9PiAkTGF5b3V0T2JqZWN0LT57VXNlckNoYXJzZXR9LAogICAgKTsKCiAgICAjIGNyZWF0ZSBmaXJzdCBwZGYgcGFnZQogICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAlUGFnZSwKICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgKTsKICAgICRQYWdle1BhZ2VDb3VudH0rKzsKCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC02LAogICAgKTsKCiAgICAjIG91dHB1dCB0aXRsZQogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ICAgICA9PiAkVGl0bGUsCiAgICAgICAgRm9udFNpemUgPT4gMTMsCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTYsCiAgICApOwoKICAgICMgb3V0cHV0ICJwcmludGVkIGJ5IgogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgJ3ByaW50ZWQgYnkgJXMgYXQgJXMnLAogICAgICAgICAgICAkU2VsZi0+e1VzZXJGdWxsbmFtZX0sCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntUaW1lfSwKICAgICAgICApLAogICAgICAgIEZvbnRTaXplID0+IDksCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE0LAogICAgKTsKCiAgICAjIG91dHB1dCBnZW5lcmFsIGluZm9ybWF0aW9uCiAgICAkU2VsZi0+X1BERk91dHB1dEdlbmVyYWxJbmZvcygKICAgICAgICBQYWdlICAgICAgID0+IFwlUGFnZSwKICAgICAgICBDb25maWdJdGVtID0+ICRDb25maWdJdGVtLAogICAgKTsKCiAgICAjIG91dHB1dCBsaW5rZWQgb2JqZWN0cwogICAgaWYgKCVMaW5rRGF0YSkgewogICAgICAgICRTZWxmLT5fUERGT3V0cHV0TGlua2VkT2JqZWN0cygKICAgICAgICAgICAgUGFnZURhdGEgICAgID0+IFwlUGFnZSwKICAgICAgICAgICAgTGlua0RhdGEgICAgID0+IFwlTGlua0RhdGEsCiAgICAgICAgICAgIExpbmtUeXBlTGlzdCA9PiBcJUxpbmtUeXBlTGlzdCwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGF0dGFjaG1lbnRzCiAgICBpZiAoQEF0dGFjaG1lbnRzKSB7CiAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRBdHRhY2htZW50cygKICAgICAgICAgICAgUGFnZURhdGEgICAgICAgPT4gXCVQYWdlLAogICAgICAgICAgICBDb25maWdJdGVtSUQgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBBdHRhY2htZW50RGF0YSA9PiBcQEF0dGFjaG1lbnRzLAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgdmVyc2lvbiBpbmZvcwogICAgJFNlbGYtPl9QREZPdXRwdXRWZXJzaW9uSW5mb3MoCiAgICAgICAgUGFnZSAgICAgICAgICA9PiBcJVBhZ2UsCiAgICAgICAgVmVyc2lvbiAgICAgICA9PiAkVmVyc2lvbiwKICAgICAgICBWZXJzaW9uTnVtYmVyID0+ICRWZXJzaW9uTnVtYmVyLAogICAgKTsKCiAgICAjIGNyZWF0ZSBmaWxlIG5hbWUKICAgIG15ICRGaWxlbmFtZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICBGaWxlbmFtZSA9PiAkQ29uZmlnSXRlbS0+e051bWJlcn0sCiAgICAgICAgVHlwZSAgICAgPT4gJ0F0dGFjaG1lbnQnLAogICAgKTsKCiAgICAjIEdldCBjdXJyZW50IHN5c3RlbSBkYXRldGltZSBvYmplY3QuCiAgICBteSAkQ3VycmVudFN5c3RlbURUT2JqID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgRmlsZW5hbWUgPT4gc3ByaW50ZigKICAgICAgICAgICAgJ2NvbmZpZ2l0ZW1fJXNfJXMucGRmJywKICAgICAgICAgICAgJEZpbGVuYW1lLAogICAgICAgICAgICAkQ3VycmVudFN5c3RlbURUT2JqLT5Gb3JtYXQoIEZvcm1hdCA9PiAnJUZfJUgtJU0nICksCiAgICAgICAgKSwKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICBDb250ZW50ICAgICA9PiAkUERGT2JqZWN0LT5Eb2N1bWVudE91dHB1dCgpLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgKTsKfQoKc3ViIF9QREZPdXRwdXRHZW5lcmFsSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBDb25maWdJdGVtKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjcmVhdGUgbGVmdCB0YWJsZQogICAgbXkgJFRhYmxlTGVmdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ2xhc3MnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte0NvbmZpZ0l0ZW19LT57Q2xhc3N9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NvbmZpZ0l0ZW0nKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte0NvbmZpZ0l0ZW19LT57Q3VycmVudE5hbWV9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0N1cnJlbnQgRGVwbG95bWVudCBTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAkUGFyYW17Q29uZmlnSXRlbX0tPntDdXJEZXBsU3RhdGV9LAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJFBhcmFte0NvbmZpZ0l0ZW19LT57Q3VySW5jaVN0YXRlfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgXTsKCiAgICAjIGNyZWF0ZSByaWdodCB0YWJsZQogICAgbXkgJFRhYmxlUmlnaHQgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NyZWF0ZWQnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17Q29uZmlnSXRlbX0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDcmVhdGVkIGJ5JykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtDb25maWdJdGVtfS0+e0NyZWF0ZUJ5TmFtZX0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTGFzdCBjaGFuZ2VkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXScsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJXsgJFBhcmFte0NvbmZpZ0l0ZW19IH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTGFzdCBjaGFuZ2VkIGJ5JykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtDb25maWdJdGVtfS0+e0NoYW5nZUJ5TmFtZX0sCiAgICAgICAgfSwKICAgIF07CgogICAgbXkgJFJvd3MgPSBAeyRUYWJsZUxlZnR9OwogICAgaWYgKCBAeyRUYWJsZVJpZ2h0fSA+ICRSb3dzICkgewogICAgICAgICRSb3dzID0gQHskVGFibGVSaWdodH07CiAgICB9CgogICAgbXkgJVRhYmxlUGFyYW07CiAgICBmb3IgbXkgJFJvdyAoIDEgLi4gJFJvd3MgKSB7CiAgICAgICAgJFJvdy0tOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Rm9udH0gICAgICAgICAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gICAgICAgICA9ICRUYWJsZUxlZnQtPlskUm93XS0+e1ZhbHVlfTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMl17Q29udGVudH0gICAgICAgICA9ICcgJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMl17QmFja2dyb3VuZENvbG9yfSA9ICcjRkZGRkZGJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bM117Q29udGVudH0gICAgICAgICA9ICRUYWJsZVJpZ2h0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVs0XXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e1ZhbHVlfTsKICAgIH0KCiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMl17V2lkdGh9ID0gNDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzNde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bNF17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICAgPSAzOwoKICAgICMgZ2V0IHBkZiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9LAogICAgICAgICk7CiAgICAgICAgJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSsrOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dExpbmtlZE9iamVjdHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VEYXRhIExpbmtEYXRhIExpbmtUeXBlTGlzdCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJVBhZ2UgICAgID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwogICAgbXkgJVR5cGVMaXN0ID0gJXsgJFBhcmFte0xpbmtUeXBlTGlzdH0gfTsKICAgIG15ICVUYWJsZVBhcmFtOwogICAgbXkgJFJvdyA9IDA7CgogICAgIyBteSBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGZvciBteSAkTGlua1R5cGVMaW5rRGlyZWN0aW9uICggc29ydCB7IGxjICRhIGNtcCBsYyAkYiB9IGtleXMgJXsgJFBhcmFte0xpbmtEYXRhfSB9ICkgewoKICAgICAgICAjIGludmVzdGlnYXRlIGxpbmsgdHlwZSBuYW1lCiAgICAgICAgbXkgQExpbmtEYXRhICAgICA9IHNwbGl0IHF7Ojp9LCAkTGlua1R5cGVMaW5rRGlyZWN0aW9uOwogICAgICAgIG15ICRMaW5rVHlwZU5hbWUgPSAkVHlwZUxpc3R7ICRMaW5rRGF0YVswXSB9LT57ICRMaW5rRGF0YVsxXSAuICdOYW1lJyB9OwogICAgICAgICRMaW5rVHlwZU5hbWUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJExpbmtUeXBlTmFtZSk7CgogICAgICAgICMgZGVmaW5lIGhlYWRsaW5lCiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ID0gJExpbmtUeXBlTmFtZSAuICc6JzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ID0gJyc7CgogICAgICAgICMgZXh0cmFjdCBvYmplY3QgbGlzdAogICAgICAgIG15ICRPYmplY3RMaXN0ID0gJFBhcmFte0xpbmtEYXRhfS0+eyRMaW5rVHlwZUxpbmtEaXJlY3Rpb259OwoKICAgICAgICBmb3IgbXkgJE9iamVjdCAoIHNvcnQgeyBsYyAkYSBjbXAgbGMgJGIgfSBrZXlzICV7JE9iamVjdExpc3R9ICkgewoKICAgICAgICAgICAgZm9yIG15ICRJdGVtICggQHsgJE9iamVjdExpc3QtPnskT2JqZWN0fSB9ICkgewoKICAgICAgICAgICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSB8fD0gJyc7CiAgICAgICAgICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gPSAkSXRlbS0+e1RpdGxlfSB8fCAnJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb250aW51ZSB7CiAgICAgICAgICAgICAgICAkUm93Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSA0MzE7CgogICAgIyBnZXQgcGRmIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkbGluZQogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0xpbmtlZCBPYmplY3RzJyksCiAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNCwKICAgICk7CgogICAgIyB0YWJsZSBwYXJhbXMKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgPSAzOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yIG15ICRDb3VudCAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCVUYWJsZVBhcmFtKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgIGxhc3QgUEFHRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAlUGFnZSwKICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYWdle1BhZ2VDb3VudH0rKzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0QXR0YWNobWVudHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZURhdGEgQ29uZmlnSXRlbUlEIEF0dGFjaG1lbnREYXRhKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskQXJndW1lbnR9ICkgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVQYWdlID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwogICAgbXkgJVRhYmxlUGFyYW07CiAgICBteSAkUm93ID0gMDsKCiAgICAjIGF0dGFjaG1lbnRzIGFyZSByZW5kZXJlZCBpbnRvIGEgc2VwYXJhdGUgcm93CiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRBdHRhY2htZW50ICggQHsgJFBhcmFte0F0dGFjaG1lbnREYXRhfSB9ICkgewoKICAgICAgICAjIGdldCB0aGUgbWV0YWRhdGEgb2YgdGhlIGN1cnJlbnQgYXR0YWNobWVudAogICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5Db25maWdJdGVtQXR0YWNobWVudEdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEF0dGFjaG1lbnQsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWZpbmUgYXR0YWNobWVudCBsaW5lCiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9CiAgICAgICAgICAgID0gJEF0dGFjaG1lbnREYXRhLT57RmlsZW5hbWV9IC4gJyAgKCcgLiAkQXR0YWNobWVudERhdGEtPntGaWxlc2l6ZX0gLiAnKSc7CgogICAgICAgICRSb3crKzsKICAgIH0KCiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDQzMTsKCiAgICAjIGdldCBwZGYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdBdHRhY2htZW50cycpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgdGFibGUgcGFyYW1zCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciBteSAkQ291bnQgKCAkUGFnZXtQYWdlQ291bnR9IC4uICRQYWdle01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICBsYXN0IFBBR0U7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dFZlcnNpb25JbmZvcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFZlcnNpb24gVmVyc2lvbk51bWJlcikpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHBkZiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIG91dHB1dCBoZWFkbGluZQogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVmVyc2lvbicpIC4gJyAnCiAgICAgICAgICAgIC4gJFBhcmFte1ZlcnNpb25OdW1iZXJ9LAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgY3JlYXRlIHRhYmxlCiAgICBteSAkVGFibGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NyZWF0ZWQnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17VmVyc2lvbn0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDcmVhdGVkIGJ5JykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtWZXJzaW9ufS0+e0NyZWF0ZUJ5TmFtZX0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICcgJywKICAgICAgICAgICAgVmFsdWUgPT4gJyAnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ05hbWUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1ZlcnNpb259LT57TmFtZX0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRGVwbG95bWVudCBTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtWZXJzaW9ufS0+e0RlcGxTdGF0ZX0gKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdJbmNpZGVudCBTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtWZXJzaW9ufS0+e0luY2lTdGF0ZX0gKSwKICAgICAgICB9LAogICAgXTsKCiAgICAjIGFkZCB4bWwgZGF0YSB0byB0YWJsZQogICAgaWYgKAogICAgICAgIHJlZiAkUGFyYW17VmVyc2lvbn0gZXEgJ0hBU0gnCiAgICAgICAgJiYgJFBhcmFte1ZlcnNpb259LT57WE1MRGVmaW5pdGlvbn0KICAgICAgICAmJiAkUGFyYW17VmVyc2lvbn0tPntYTUxEYXRhfQogICAgICAgICYmIHJlZiAkUGFyYW17VmVyc2lvbn0tPntYTUxEZWZpbml0aW9ufSBlcSAnQVJSQVknCiAgICAgICAgJiYgcmVmICRQYXJhbXtWZXJzaW9ufS0+e1hNTERhdGF9IGVxICdBUlJBWScKICAgICAgICAmJiAkUGFyYW17VmVyc2lvbn0tPntYTUxEYXRhfS0+WzFdCiAgICAgICAgJiYgcmVmICRQYXJhbXtWZXJzaW9ufS0+e1hNTERhdGF9LT5bMV0gZXEgJ0hBU0gnCiAgICAgICAgJiYgJFBhcmFte1ZlcnNpb259LT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259CiAgICAgICAgJiYgcmVmICRQYXJhbXtWZXJzaW9ufS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufSBlcSAnQVJSQVknCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT5fUERGT3V0cHV0WE1MT3V0cHV0KAogICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRQYXJhbXtWZXJzaW9ufS0+e1hNTERlZmluaXRpb259LAogICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRQYXJhbXtWZXJzaW9ufS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdLAogICAgICAgICAgICBUYWJsZURhdGEgICAgID0+ICRUYWJsZSwKICAgICAgICApOwogICAgfQoKICAgIG15ICVUYWJsZVBhcmFtOwogICAgbXkgJFJvd3MgPSBAeyRUYWJsZX07CgogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRUYWJsZS0+WyRSb3ddLT57VmFsdWV9OwogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDEwMDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDQxMTsKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ICAgICAgPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgbXkgJENvdW50ICggJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSAuLiAkUGFyYW17UGFnZX0tPntNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAleyAkUGFyYW17UGFnZX0gfSwKICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhcmFte1BhZ2V9LT57UGFnZVRleHR9IC4gJyAnIC4gJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSwKICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRYTUxPdXRwdXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17VGFibGVEYXRhfTsKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERhdGF9OwogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtUYWJsZURhdGF9IG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEYXRhfSBuZSAnSEFTSCc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwoKICAgICRQYXJhbXtMZXZlbH0gfHw9IDA7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewogICAgICAgIENPVU5URVI6CiAgICAgICAgZm9yIG15ICRDb3VudGVyICggMSAuLiAkSXRlbS0+e0NvdW50TWF4fSApIHsKCiAgICAgICAgICAgICMgc3RvcCBsb29wLCBpZiBubyBjb250ZW50IHdhcyBnaXZlbgogICAgICAgICAgICBsYXN0IENPVU5URVIgaWYgIWRlZmluZWQgJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH07CgogICAgICAgICAgICAjIGxvb2t1cCB2YWx1ZQogICAgICAgICAgICBteSAkVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+WE1MVmFsdWVMb29rdXAoCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgICAgICAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICAgICAkVmFsdWUgPSAkTGF5b3V0T2JqZWN0LT5JVFNNQ29uZmlnSXRlbU91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICAgICAgUHJpbnQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVwbGFjZSBuZXdsaW5lcyB3aXRoIDxici8+IChmaXggZm9yIGJ1ZyMgNTkyOCkKICAgICAgICAgICAgJFZhbHVlID1+IHN7IFxuIH17PGJyLz59Z3htczsKCiAgICAgICAgICAgICMgY29udmVydCB2YWx1ZSB0byBhc2NpaQogICAgICAgICAgICAkVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvQXNjaWkoIFN0cmluZyA9PiAkVmFsdWUgKTsKCiAgICAgICAgICAgICMgbmV3IHJvdwogICAgICAgICAgICBteSAkTmV3Um93ID0gewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkSXRlbS0+e05hbWV9ICkgLiAnOicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgICAgIH07CgogICAgICAgICAgICAjIG91dHB1dCBzcGFjZSwgaWYgbGV2ZWwgd2FzIGdpdmVuCiAgICAgICAgICAgIGlmICggJFBhcmFte0xldmVsfSApIHsKICAgICAgICAgICAgICAgIGZvciAoIDEgLi4gJFBhcmFte0xldmVsfSApIHsKICAgICAgICAgICAgICAgICAgICAkTmV3Um93LT57S2V5fSAgID0gJyAgICAnIC4gJE5ld1Jvdy0+e0tleX07CiAgICAgICAgICAgICAgICAgICAgJE5ld1Jvdy0+e1ZhbHVlfSA9ICcgICAgJyAuICROZXdSb3ctPntWYWx1ZX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIHJvdyBkYXRhCiAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1RhYmxlRGF0YX0gfSwgJE5ld1JvdzsKCiAgICAgICAgICAgIG5leHQgQ09VTlRFUiBpZiAhJEl0ZW0tPntTdWJ9OwoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICAgICAkU2VsZi0+X1BERk91dHB1dFhNTE91dHB1dCgKICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICA9PiAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0sCiAgICAgICAgICAgICAgICBUYWJsZURhdGEgICAgID0+ICRQYXJhbXtUYWJsZURhdGF9LAogICAgICAgICAgICAgICAgTGV2ZWwgICAgICAgICA9PiAkUGFyYW17TGV2ZWx9ICsgMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CiAgICBteSAkT3V0cHV0OwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBjb25maWcgZGF0YQogICAgJFNlbGYtPntTdGFydEhpdH0gICAgPSBpbnQoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxICk7CiAgICAkU2VsZi0+e1NlYXJjaExpbWl0fSA9ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaExpbWl0fSB8fCAxMDAwMDsKICAgICRTZWxmLT57U29ydEJ5fSAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdOdW1iZXInOwogICAgJFNlbGYtPntPcmRlckJ5fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlckJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J09yZGVyOjpEZWZhdWx0J30KICAgICAgICB8fCAnRG93bic7CiAgICAkU2VsZi0+e1Byb2ZpbGV9ICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdQcm9maWxlJyApICAgICB8fCAnJzsKICAgICRTZWxmLT57U2F2ZVByb2ZpbGV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVQcm9maWxlJyApIHx8ICcnOwogICAgJFNlbGYtPntUYWtlTGFzdFNlYXJjaH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGFrZUxhc3RTZWFyY2gnICk7CgogICAgIyBnZXQgZ2VuZXJhbCBjYXRhbG9nIG9iamVjdAogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgIyBnZXQgY29uZmlnIGl0ZW0gb2JqZWN0CiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgICMgY2hlY2sgZm9yIGFjY2VzcyByaWdodHMgb24gdGhlIGNsYXNzZXMKICAgIGZvciBteSAkQ2xhc3NJRCAoIHNvcnQga2V5cyAleyRDbGFzc0xpc3R9ICkgewogICAgICAgIG15ICRIYXNBY2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICBVc2VySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBkZWxldGUgJENsYXNzTGlzdC0+eyRDbGFzc0lEfSBpZiAhJEhhc0FjY2VzczsKICAgIH0KCiAgICAjIGdldCBjbGFzcyBpZAogICAgbXkgJENsYXNzSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2xhc3NJRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgaWYgY2xhc3MgaWQgaXMgdmFsaWQKICAgIGlmICggJENsYXNzSUQgJiYgISRDbGFzc0xpc3QtPnskQ2xhc3NJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnSW52YWxpZCBDbGFzc0lEIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzaW5nbGUgcGFyYW1zCiAgICBteSAlR2V0UGFyYW07CgogICAgIyBnZXQgc2VhcmNoIHByb2ZpbGUgb2JqZWN0CiAgICBteSAkU2VhcmNoUHJvZmlsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZWFyY2hQcm9maWxlJyk7CgogICAgIyBsb2FkIHByb2ZpbGVzIHN0cmluZyBwYXJhbXMKICAgIGlmICggKCAkQ2xhc3NJRCAmJiAkU2VsZi0+e1Byb2ZpbGV9ICkgJiYgJFNlbGYtPntUYWtlTGFzdFNlYXJjaH0gKSB7CiAgICAgICAgJUdldFBhcmFtID0gJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVHZXQoCiAgICAgICAgICAgIEJhc2UgICAgICA9PiAnQ29uZmlnSXRlbVNlYXJjaCcgLiAkQ2xhc3NJRCwKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGRlbGV0ZSBzZWFyY2ggcHJvZmlsZXMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBSkFYUHJvZmlsZURlbGV0ZScgKSB7CgogICAgICAgICMgcmVtb3ZlIG9sZCBwcm9maWxlIHN0dWZmCiAgICAgICAgJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVEZWxldGUoCiAgICAgICAgICAgIEJhc2UgICAgICA9PiAnQ29uZmlnSXRlbVNlYXJjaCcgLiAkQ2xhc3NJRCwKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiAxLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgaW5pdCBzZWFyY2ggZGlhbG9nIChzZWxlY3QgY2xhc3MpCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWCcgKSB7CgogICAgICAgICMgZ2VuZXJhdGUgZHJvcGRvd24gZm9yIHNlbGVjdGluZyB0aGUgY2xhc3MKICAgICAgICAjIGF1dG9tYXRpY2FsbHkgc2hvdyBzZWFyY2ggbWFzayBhZnRlciBzZWxlY3RpbmcgYSBjbGFzcyB2aWEgQUpBWAogICAgICAgIG15ICRDbGFzc09wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRDbGFzc0xpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnU2VhcmNoQ2xhc3NJRCcsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJENsYXNzSUQgfHwgJycsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBodG1sIHNlYXJjaCBtYXNrIG91dHB1dAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTZWFyY2hBSkFYJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc09wdGlvblN0cmcgPT4gJENsYXNzT3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIFByb2ZpbGUgICAgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgID0+ICRDbGFzc0lELAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IHRlbXBsYXRlCiAgICAgICAgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01Db25maWdJdGVtU2VhcmNoJywKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXQgc2VhcmNoIGZpZWxkcyBmb3Igc2VsZWN0ZWQgY2xhc3MKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBSkFYVXBkYXRlJyApIHsKCiAgICAgICAgIyBDbGFzc0lEIGlzIHJlcXVpcmVkIGZvciB0aGUgc2VhcmNoIG1hc2sgYW5kIGZvciBhY3R1YWwgc2VhcmNoaW5nCiAgICAgICAgaWYgKCAhJENsYXNzSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBDbGFzc0lEIGlzIGdpdmVuIScpLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiB1c2VyIGlzIGFsbG93ZWQgdG8gc2VhcmNoIGNsYXNzCiAgICAgICAgbXkgJEhhc0FjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgICAgICBTY29wZSAgID0+ICdDbGFzcycsCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBlcnJvciBzY3JlZW4KICAgICAgICBpZiAoICEkSGFzQWNjZXNzICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gYWNjZXNzIHJpZ2h0cyBmb3IgdGhpcyBjbGFzcyBnaXZlbiEnKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGN1cnJlbnQgZGVmaW5pdGlvbgogICAgICAgIG15ICRYTUxEZWZpbml0aW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25HZXQoCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBhYm9ydCwgaWYgbm8gZGVmaW5pdGlvbiBpcyBkZWZpbmVkCiAgICAgICAgaWYgKCAhJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uSUR9ICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTm8gZGVmaW5pdGlvbiB3YXMgZGVmaW5lZCBmb3IgY2xhc3MgJXMhJywgJENsYXNzSUQgKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15IEBYTUxBdHRyaWJ1dGVzID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnTnVtYmVyJyksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnTmFtZScpLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnRGVwbFN0YXRlSURzJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnRGVwbG95bWVudCBTdGF0ZScpLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnSW5jaVN0YXRlSURzJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnSW5jaWRlbnQgU3RhdGUnKSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSAlR2V0UGFyYW0gPSAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZUdldCgKICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDb25maWdJdGVtU2VhcmNoJyAuICRDbGFzc0lELAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBhdHRyaWJ1dGVzIHRvIGluY2x1ZGUgaW4gYXR0cmlidXRlcyBzdHJpbmcKICAgICAgICBpZiAoICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvbn0gKSB7CiAgICAgICAgICAgICRTZWxmLT5fWE1MU2VhcmNoQXR0cmlidXRlc0dldCgKICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfSwKICAgICAgICAgICAgICAgIFhNTEF0dHJpYnV0ZXMgPT4gXEBYTUxBdHRyaWJ1dGVzLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBhdHRyaWJ1dGVzIHN0cmluZyBmb3IgYXR0cmlidXRlcyBsaXN0CiAgICAgICAgJFBhcmFte0F0dHJpYnV0ZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFxAWE1MQXR0cmlidXRlcywKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdBdHRyaWJ1dGUnLAogICAgICAgICAgICBNdWx0aXBsZSAgICAgPT4gMCwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgYXR0cmlidXRlcyBzdHJpbmcgZm9yIHJlY292ZXJ5IG9uIGFkZCBvciBzdWJ0cmFjdCBzZWFyY2ggZmllbGRzCiAgICAgICAgJFBhcmFte0F0dHJpYnV0ZXNPcmlnU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcQFhNTEF0dHJpYnV0ZXMsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnQXR0cmlidXRlT3JpZycsCiAgICAgICAgICAgIE11bHRpcGxlICAgICA9PiAwLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVByb2ZpbGVzID0gJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVMaXN0KAogICAgICAgICAgICBCYXNlICAgICAgPT4gJ0NvbmZpZ0l0ZW1TZWFyY2gnIC4gJENsYXNzSUQsCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKCiAgICAgICAgJFBhcmFte1Byb2ZpbGVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUHJvZmlsZXMsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnUHJvZmlsZScsCiAgICAgICAgICAgIElEICAgICAgICAgICA9PiAnU2VhcmNoUHJvZmlsZScsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgICAgIG15ICREZXBsU3RhdGVMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBkcm9wZG93biBmb3Igc2VsZWN0aW5nIHRoZSB3YW50ZWQgZGVwbG95bWVudCBzdGF0ZXMKICAgICAgICBteSAkQ3VyRGVwbFN0YXRlT3B0aW9uU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgID0+ICREZXBsU3RhdGVMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdEZXBsU3RhdGVJRHMnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtEZXBsU3RhdGVJRHN9IHx8IFtdLAogICAgICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0CiAgICAgICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBkcm9wZG93biBmb3Igc2VsZWN0aW5nIHRoZSB3YW50ZWQgaW5jaWRlbnQgc3RhdGVzCiAgICAgICAgbXkgJEN1ckluY2lTdGF0ZU9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkSW5jaVN0YXRlTGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnSW5jaVN0YXRlSURzJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17SW5jaVN0YXRlSURzfSB8fCBbXSwKICAgICAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBQcmV2aW91c1ZlcnNpb25PcHRpb25TdHJnCiAgICAgICAgbXkgJFByZXZpb3VzVmVyc2lvbk9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgTmFtZSA9PiAnUHJldmlvdXNWZXJzaW9uU2VhcmNoJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAwID0+IFRyYW5zbGF0YWJsZSgnTm8nKSwKICAgICAgICAgICAgICAgIDEgPT4gVHJhbnNsYXRhYmxlKCdZZXMnKSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17UHJldmlvdXNWZXJzaW9uU2VhcmNofSB8fCAnMCcsCiAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCBvdXRwdXQgZm9ybWF0IHN0cmluZwogICAgICAgICRQYXJhbXtSZXN1bHRGb3JtU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOb3JtYWwgPT4gVHJhbnNsYXRhYmxlKCdOb3JtYWwnKSwKICAgICAgICAgICAgICAgIFByaW50ICA9PiBUcmFuc2xhdGFibGUoJ1ByaW50JyksCiAgICAgICAgICAgICAgICBDU1YgICAgPT4gVHJhbnNsYXRhYmxlKCdDU1YnKSwKICAgICAgICAgICAgICAgIEV4Y2VsICA9PiBUcmFuc2xhdGFibGUoJ0V4Y2VsJyksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1Jlc3VsdEZvcm0nLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtSZXN1bHRGb3JtfSB8fCAnTm9ybWFsJywKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQUpBWENvbnRlbnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgICAgICAgICAgPT4gJENsYXNzSUQsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVPcHRpb25TdHJnICAgID0+ICRDdXJEZXBsU3RhdGVPcHRpb25TdHJnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlT3B0aW9uU3RyZyAgICA9PiAkQ3VySW5jaVN0YXRlT3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIFByZXZpb3VzVmVyc2lvbk9wdGlvblN0cmcgPT4gJFByZXZpb3VzVmVyc2lvbk9wdGlvblN0cmcsCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzU3RyZyAgICAgICAgICAgID0+ICRQYXJhbXtBdHRyaWJ1dGVzU3RyZ30sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzT3JpZ1N0cmcgICAgICAgID0+ICRQYXJhbXtBdHRyaWJ1dGVzT3JpZ1N0cmd9LAogICAgICAgICAgICAgICAgUmVzdWx0Rm9ybVN0cmcgICAgICAgICAgICA9PiAkUGFyYW17UmVzdWx0Rm9ybVN0cmd9LAogICAgICAgICAgICAgICAgUHJvZmlsZXNTdHJnICAgICAgICAgICAgICA9PiAkUGFyYW17UHJvZmlsZXNTdHJnfSwKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgICAgICAgICAgPT4gJEdldFBhcmFte051bWJlcn0gfHwgJycsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgID0+ICRHZXRQYXJhbXtOYW1lfSB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCB4bWwgc2VhcmNoIGZvcm0KICAgICAgICBpZiAoICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvbn0gKSB7CiAgICAgICAgICAgICRTZWxmLT5fWE1MU2VhcmNoRm9ybU91dHB1dCgKICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfSwKICAgICAgICAgICAgICAgIFhNTEF0dHJpYnV0ZXMgPT4gXEBYTUxBdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgQFByb2ZpbGVBdHRyaWJ1dGVzOwoKICAgICAgICAjIHNob3cgYXR0cmlidXRlcwogICAgICAgIG15ICRBdHRyaWJ1dGVJc1VzZWQgPSAwOwogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlR2V0UGFyYW0gKSB7CiAgICAgICAgICAgIG5leHQgS0VZIGlmICEkS2V5OwogICAgICAgICAgICBuZXh0IEtFWSBpZiAhZGVmaW5lZCAkR2V0UGFyYW17JEtleX07CiAgICAgICAgICAgIG5leHQgS0VZIGlmICRHZXRQYXJhbXskS2V5fSBlcSAnJzsKCiAgICAgICAgICAgICRBdHRyaWJ1dGVJc1VzZWQgPSAxOwoKICAgICAgICAgICAgcHVzaCBAUHJvZmlsZUF0dHJpYnV0ZXMsICRLZXk7CiAgICAgICAgfQoKICAgICAgICAjIGlmIG5vIGF0dHJpYnV0ZSBpcyBzaG93biwgc2hvdyBjb25maWdpdGVtIG51bWJlcgogICAgICAgIGlmICggISRTZWxmLT57UHJvZmlsZX0gKSB7CiAgICAgICAgICAgIHB1c2ggQFByb2ZpbGVBdHRyaWJ1dGVzLCAnTnVtYmVyJzsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0lUU01TZWFyY2hQcm9maWxlQXR0cmlidXRlcycsCiAgICAgICAgICAgIFZhbHVlID0+IFxAUHJvZmlsZUF0dHJpYnV0ZXMsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgdGVtcGxhdGUKICAgICAgICAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gnLAogICAgICAgICAgICBBSkFYICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwZXJmb3JtIHNlYXJjaAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlYXJjaCcgKSB7CgogICAgICAgIG15ICRTZWFyY2hEaWFsb2cgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VhcmNoRGlhbG9nJyApOwoKICAgICAgICAjIGZpbGwgdXAgcHJvZmlsZSBuYW1lIChlLmcuIHdpdGggbGFzdC1zZWFyY2gpCiAgICAgICAgaWYgKCAhJFNlbGYtPntQcm9maWxlfSB8fCAhJFNlbGYtPntTYXZlUHJvZmlsZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT57UHJvZmlsZX0gPSAnbGFzdC1zZWFyY2gnOwogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBsYXN0IG92ZXJ2aWV3IHNjcmVlbgogICAgICAgIG15ICRVUkwgPSAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2g7UHJvZmlsZT0kU2VsZi0+e1Byb2ZpbGV9OyIKICAgICAgICAgICAgLiAiVGFrZUxhc3RTZWFyY2g9MTtTdGFydEhpdD0kU2VsZi0+e1N0YXJ0SGl0fTtTdWJhY3Rpb249U2VhcmNoOyIKICAgICAgICAgICAgLiAiT3JkZXJCeT0kU2VsZi0+e09yZGVyQnl9O1NvcnRCeT0kU2VsZi0+e1NvcnRCeX0iOwoKICAgICAgICBpZiAoJENsYXNzSUQpIHsKICAgICAgICAgICAgJFVSTCAuPSAiO0NsYXNzSUQ9JENsYXNzSUQiOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2Vzc2lvbiBvYmplY3QKICAgICAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CiAgICAgICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CgogICAgICAgICMgQ2xhc3NJRCBpcyByZXF1aXJlZCBmb3IgdGhlIHNlYXJjaCBtYXNrIGFuZCBmb3IgYWN0dWFsIHNlYXJjaGluZwogICAgICAgIGlmICggISRDbGFzc0lEICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gQ2xhc3NJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdXNlciBpcyBhbGxvd2VkIHRvIHNlYXJjaCBjbGFzcwogICAgICAgIG15ICRIYXNBY2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICBVc2VySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZXJyb3Igc2NyZWVuCiAgICAgICAgaWYgKCAhJEhhc0FjY2VzcyApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIGFjY2VzcyByaWdodHMgZm9yIHRoaXMgY2xhc3MgZ2l2ZW4hJyksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBjdXJyZW50IGRlZmluaXRpb24KICAgICAgICBteSAkWE1MRGVmaW5pdGlvbiA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uR2V0KAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICk7CgogICAgICAgICMgYWJvcnQsIGlmIG5vIGRlZmluaXRpb24gaXMgZGVmaW5lZAogICAgICAgIGlmICggISRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvbklEfSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ05vIGRlZmluaXRpb24gd2FzIGRlZmluZWQgZm9yIGNsYXNzICVzIScsICRDbGFzc0lEICksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzY2FsYXIgc2VhcmNoIGF0dHJpYnV0ZXMgKHNwZWNpYWwgaGFuZGxpbmcgZm9yIE51bWJlciBhbmQgTmFtZSkKICAgICAgICBGT1JNVkFMVUU6CiAgICAgICAgZm9yIG15ICRGb3JtVmFsdWUgKHF3KE51bWJlciBOYW1lKSkgewoKICAgICAgICAgICAgbXkgJFZhbHVlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEZvcm1WYWx1ZSApOwoKICAgICAgICAgICAgIyBtdXN0IGJlIGRlZmluZWQgYW5kIG5vdCBiZSBhbiBlbXB0eSBzdHJpbmcKICAgICAgICAgICAgIyBCVVQgdGhlIG51bWJlciAwIGlzIGFuIGFsbG93ZWQgdmFsdWUKICAgICAgICAgICAgbmV4dCBGT1JNVkFMVUUgaWYgIWRlZmluZWQgJFZhbHVlOwogICAgICAgICAgICBuZXh0IEZPUk1WQUxVRSBpZiAkVmFsdWUgZXEgJyc7CgogICAgICAgICAgICAkR2V0UGFyYW17JEZvcm1WYWx1ZX0gPSAkVmFsdWU7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGVyIHNjYWxhciBzZWFyY2ggYXR0cmlidXRlcwogICAgICAgIEZPUk1WQUxVRToKICAgICAgICBmb3IgbXkgJEZvcm1WYWx1ZSAocXcoUHJldmlvdXNWZXJzaW9uU2VhcmNoIFJlc3VsdEZvcm0pKSB7CgogICAgICAgICAgICBteSAkVmFsdWUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkRm9ybVZhbHVlICk7CgogICAgICAgICAgICBuZXh0IEZPUk1WQUxVRSBpZiAhJFZhbHVlOwoKICAgICAgICAgICAgJEdldFBhcmFteyRGb3JtVmFsdWV9ID0gJFZhbHVlOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYXJyYXkgc2VhcmNoIGF0dHJpYnV0ZXMKICAgICAgICBGT1JNQVJSQVk6CiAgICAgICAgZm9yIG15ICRGb3JtQXJyYXkgKHF3KERlcGxTdGF0ZUlEcyBJbmNpU3RhdGVJRHMpKSB7CgogICAgICAgICAgICBteSBAQXJyYXkgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkRm9ybUFycmF5ICk7CgogICAgICAgICAgICBuZXh0IEZPUk1BUlJBWSBpZiAhQEFycmF5OwoKICAgICAgICAgICAgJEdldFBhcmFteyRGb3JtQXJyYXl9ID0gXEBBcnJheTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHhtbCBzZWFyY2ggZm9ybQogICAgICAgIG15ICRYTUxGb3JtRGF0YSA9IFtdOwogICAgICAgIG15ICRYTUxHZXRQYXJhbSA9IFtdOwogICAgICAgICRTZWxmLT5fWE1MU2VhcmNoRm9ybUdldCgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9LAogICAgICAgICAgICBYTUxGb3JtRGF0YSAgID0+ICRYTUxGb3JtRGF0YSwKICAgICAgICAgICAgWE1MR2V0UGFyYW0gICA9PiAkWE1MR2V0UGFyYW0sCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwoKICAgICAgICBpZiAoIEB7JFhNTEZvcm1EYXRhfSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1doYXR9ID0gJFhNTEZvcm1EYXRhOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHNlYXJjaCBwcm9maWxlICh1bmRlciBsYXN0LXNlYXJjaCBvciByZWFsIHByb2ZpbGUgbmFtZSkKICAgICAgICAkU2VsZi0+e1NhdmVQcm9maWxlfSA9IDE7CgogICAgICAgICMgcmVtZW1iZXIgbGFzdCBzZWFyY2ggdmFsdWVzIG9ubHkgaWYgc2VhcmNoIGlzIGNhbGxlZCBmcm9tIGEgc2VhcmNoIGRpYWxvZwogICAgICAgICMgbm90IGZyb20gcmVzdWx0cyBwYWdlCiAgICAgICAgaWYgKCAkU2VsZi0+e1NhdmVQcm9maWxlfSAmJiAkU2VsZi0+e1Byb2ZpbGV9ICYmICRTZWFyY2hEaWFsb2cgKSB7CgogICAgICAgICAgICAjIHJlbW92ZSBvbGQgcHJvZmlsZSBzdHVmZgogICAgICAgICAgICAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZURlbGV0ZSgKICAgICAgICAgICAgICAgIEJhc2UgICAgICA9PiAnQ29uZmlnSXRlbVNlYXJjaCcgLiAkQ2xhc3NJRCwKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBwcm9maWxlIHBhcmFtcwogICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlR2V0UGFyYW0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskS2V5fSAmJiAkS2V5IG5lICdXaGF0JyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZUFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDb25maWdJdGVtU2VhcmNoJyAuICRDbGFzc0lELAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkR2V0UGFyYW17JEtleX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpbnNlcnQgbmV3IHByb2ZpbGUgcGFyYW1zIGFsc28gZnJvbSBYTUxmb3JtCiAgICAgICAgICAgIGlmICggQHskWE1MR2V0UGFyYW19ICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKCBAeyRYTUxHZXRQYXJhbX0gKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskUGFyYW1ldGVyfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGFyYW1ldGVyLT57JEtleX0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVBZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDb25maWdJdGVtU2VhcmNoJyAuICRDbGFzc0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkUGFyYW1ldGVyLT57JEtleX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkU2VhcmNoUmVzdWx0TGlzdCA9IFtdOwoKICAgICAgICAjIHN0YXJ0IHNlYXJjaCBpZiBjYWxsZWQgZnJvbSBhIHNlYXJjaCBkaWFsb2cgb3IgZnJvbSBhIHJlc3VsdHMgcGFnZQogICAgICAgIGlmICggJFNlYXJjaERpYWxvZyB8fCAkU2VsZi0+e1Rha2VMYXN0U2VhcmNofSApIHsKCiAgICAgICAgICAgICMgc3RhcnQgc2VhcmNoCiAgICAgICAgICAgICRTZWFyY2hSZXN1bHRMaXN0ID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyAkU2VsZi0+e1NvcnRCeX0gXSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyAkU2VsZi0+e09yZGVyQnl9IF0sCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgICAgICAgICAgQ2xhc3NJRHMgICAgICAgICA9PiBbJENsYXNzSURdLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgcGFyYW0gb25seSBpZiBjYWxsZWQgZnJvbSBhIHNlYXJjaCBkaWFsb2csIG90aGVyd2lzZSBpdCBtdXN0IGJlIGFscmVhZHkgaW4gJUdldFBhcmFtCiAgICAgICAgIyBmcm9tIGEgbG9hZGVkIHByb2ZpbGUKICAgICAgICBpZiAoJFNlYXJjaERpYWxvZykgewogICAgICAgICAgICAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUmVzdWx0Rm9ybScgKTsKICAgICAgICB9CgogICAgICAgICMgQ1NWIG91dHB1dAogICAgICAgIGlmICgKICAgICAgICAgICAgJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdDU1YnCiAgICAgICAgICAgIHx8CiAgICAgICAgICAgICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnRXhjZWwnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBDU1ZEYXRhOwogICAgICAgICAgICBteSBAQ1NWSGVhZDsKCiAgICAgICAgICAgICMgbWFwcGluZyBiZXR3ZWVuIGhlYWRlciBuYW1lIGFuZCBkYXRhIGZpZWxkCiAgICAgICAgICAgIG15ICVIZWFkZXIyRGF0YSA9ICgKICAgICAgICAgICAgICAgICdDbGFzcycgICAgICAgICAgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICAgICAgJ0luY2lkZW50IFN0YXRlJyAgID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgJ05hbWUnICAgICAgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICdDb25maWdJdGVtTnVtYmVyJyA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICdEZXBsb3ltZW50IFN0YXRlJyA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgICdWZXJzaW9uJyAgICAgICAgICA9PiAnVmVyc2lvbklEJywKICAgICAgICAgICAgICAgICdDcmVhdGUgVGltZScgICAgICA9PiAnQ3JlYXRlVGltZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggQHskU2VhcmNoUmVzdWx0TGlzdH0gKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cwogICAgICAgICAgICAgICAgbXkgJEhhc0FjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIFNjb3BlICA9PiAnSXRlbScsCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICEkSGFzQWNjZXNzOwoKICAgICAgICAgICAgICAgICMgZ2V0IHZlcnNpb24KICAgICAgICAgICAgICAgIG15ICRMYXN0VmVyc2lvbiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIFhNTERhdGFHZXQgICA9PiAwLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNzdiBxdW90ZQogICAgICAgICAgICAgICAgaWYgKCAhQENTVkhlYWQgKSB7CiAgICAgICAgICAgICAgICAgICAgQENTVkhlYWQgPSBAeyAkU2VsZi0+e0NvbmZpZ30tPntTZWFyY2hDU1ZEYXRhfSB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc3RvcmUgZGF0YQogICAgICAgICAgICAgICAgbXkgQERhdGE7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEhlYWRlciAoQENTVkhlYWQpIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBEYXRhLCAkTGFzdFZlcnNpb24tPnsgJEhlYWRlcjJEYXRheyRIZWFkZXJ9IH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEBDU1ZEYXRhLCBcQERhdGE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3N2IHF1b3RlCiAgICAgICAgICAgICMgdHJhbnNsYXRlIG5vbiBleGlzdGluZyBoZWFkZXIgbWF5IHJlc3VsdCBpbiBhIGdhcmJhZ2UgZmlsZQogICAgICAgICAgICBpZiAoICFAQ1NWSGVhZCApIHsKICAgICAgICAgICAgICAgIEBDU1ZIZWFkID0gQHsgJFNlbGYtPntDb25maWd9LT57U2VhcmNoQ1NWRGF0YX0gfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB0cmFuc2xhdGUgaGVhZGVycwogICAgICAgICAgICBmb3IgbXkgJEhlYWRlciAoQENTVkhlYWQpIHsKCiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgQ29uZmlnSXRlbU51bWJlciBoZWFkZXIgd2l0aCB0aGUgY3VycmVudCBDb25maWdJdGVtTnVtYmVyIGhvb2sgZnJvbSBzeXNjb25maWcKICAgICAgICAgICAgICAgIGlmICggJEhlYWRlciBlcSAnQ29uZmlnSXRlbU51bWJlcicgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhlYWRlciA9ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06Okhvb2snKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRIZWFkZXIgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJEhlYWRlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRDU1ZPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDU1YnKTsKICAgICAgICAgICAgbXkgJEN1clN5c0RUT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICAgICAgICAgIGlmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdDU1YnICkgewoKICAgICAgICAgICAgICAgICMgQXNzZW1ibGUgQ1NWIGRhdGEuCiAgICAgICAgICAgICAgICBteSAkQ1NWID0gJENTVk9iamVjdC0+QXJyYXkyQ1NWKAogICAgICAgICAgICAgICAgICAgIEhlYWQgICAgICA9PiBcQENTVkhlYWQsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgID0+IFxAQ1NWRGF0YSwKICAgICAgICAgICAgICAgICAgICBTZXBhcmF0b3IgPT4gJFNlbGYtPntVc2VyQ1NWU2VwYXJhdG9yfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBSZXR1cm4gQ1NWIHRvIGRvd25sb2FkLgogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgPT4gc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgJ2NoYW5nZV9zZWFyY2hfJXMuY3N2JywKICAgICAgICAgICAgICAgICAgICAgICAgJEN1clN5c0RUT2JqZWN0LT5Gb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXQgPT4gJyVGXyVILSVNJywKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJ0ZXh0L2NzdjsgY2hhcnNldD0iIC4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAkQ1NWLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnRXhjZWwnICkgewoKICAgICAgICAgICAgICAgICMgQXNzZW1ibGUgRXhjZWwgZGF0YS4KICAgICAgICAgICAgICAgIG15ICRFeGNlbCA9ICRDU1ZPYmplY3QtPkFycmF5MkNTVigKICAgICAgICAgICAgICAgICAgICBIZWFkICAgPT4gXEBDU1ZIZWFkLAogICAgICAgICAgICAgICAgICAgIERhdGEgICA9PiBcQENTVkRhdGEsCiAgICAgICAgICAgICAgICAgICAgRm9ybWF0ID0+ICdFeGNlbCcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgUmV0dXJuIEV4Y2VsIHRvIGRvd25sb2FkLgogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgPT4gc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgJ2NoYW5nZV9zZWFyY2hfJXMueGxzeCcsCiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJTeXNEVE9iamVjdC0+Rm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0ID0+ICclRl8lSC0lTScsCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7IGNoYXJzZXQ9IgogICAgICAgICAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkRXhjZWwsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHByaW50IFBERiBvdXRwdXQKICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnUHJpbnQnICkgewoKICAgICAgICAgICAgbXkgQFBERkRhdGE7CgogICAgICAgICAgICAjIGdldCBwZGYgb2JqZWN0CiAgICAgICAgICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggQHskU2VhcmNoUmVzdWx0TGlzdH0gKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cwogICAgICAgICAgICAgICAgbXkgJEhhc0FjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIFNjb3BlICA9PiAnSXRlbScsCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICEkSGFzQWNjZXNzOwoKICAgICAgICAgICAgICAgICMgZ2V0IHZlcnNpb24KICAgICAgICAgICAgICAgIG15ICRMYXN0VmVyc2lvbiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIFhNTERhdGFHZXQgICA9PiAwLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBwZGYgcm93cwogICAgICAgICAgICAgICAgbXkgQFBERlJvdzsKICAgICAgICAgICAgICAgIGZvciBteSAkU3RvcmVEYXRhIChxdyhDbGFzcyBJbmNpU3RhdGUgTmFtZSBOdW1iZXIgRGVwbFN0YXRlIFZlcnNpb25JRCBDcmVhdGVUaW1lKSkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgJExhc3RWZXJzaW9uLT57JFN0b3JlRGF0YX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEBQREZEYXRhLCBcQFBERlJvdzsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgUERGIE91dHB1dAogICAgICAgICAgICBteSAkVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NvbmZpZ3VyYXRpb24gSXRlbScpIC4gJyAnCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU2VhcmNoJyk7CiAgICAgICAgICAgIG15ICRQcmludGVkQnkgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ3ByaW50ZWQgYnknKTsKICAgICAgICAgICAgbXkgJFBhZ2UgICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUGFnZScpOwogICAgICAgICAgICBteSAkVGltZSAgICAgID0gJExheW91dE9iamVjdC0+e1RpbWV9OwoKICAgICAgICAgICAgIyBnZXQgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKICAgICAgICAgICAgbXkgJE1heFBhZ2VzID0gJENvbmZpZ09iamVjdC0+R2V0KCdQREY6Ok1heFBhZ2VzJyk7CiAgICAgICAgICAgIGlmICggISRNYXhQYWdlcyB8fCAkTWF4UGFnZXMgPCAxIHx8ICRNYXhQYWdlcyA+IDEwMDAgKSB7CiAgICAgICAgICAgICAgICAkTWF4UGFnZXMgPSAxMDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3JlYXRlIHRoZSBoZWFkZXIKICAgICAgICAgICAgbXkgJENlbGxEYXRhOwoKICAgICAgICAgICAgIyBvdXRwdXQgJ05vIFJlc3VsdCcsIGlmIG5vIGNvbnRlbnQgd2FzIGdpdmVuCiAgICAgICAgICAgIGlmIChAUERGRGF0YSkgewogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlswXS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDbGFzcycpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlswXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsxXS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdJbmNpZGVudCBTdGF0ZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsxXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsyXS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdOYW1lJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzJdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzNdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ051bWJlcicpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlszXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls0XS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdEZXBsb3ltZW50IFN0YXRlJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzRdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzVdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1ZlcnNpb24nKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bNV0tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bNl0tPntDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3JlYXRlIFRpbWUnKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bNl0tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgY29udGVudCBhcnJheQogICAgICAgICAgICAgICAgbXkgJENvdW50ZXJSb3cgPSAxOwogICAgICAgICAgICAgICAgZm9yIG15ICRSb3cgKEBQREZEYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENvdW50ZXJDb2x1bW4gPSAwOwogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ29udGVudCAoIEB7JFJvd30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WyRDb3VudGVyUm93XS0+WyRDb3VudGVyQ29sdW1uXS0+e0NvbnRlbnR9ID0gJENvbnRlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICRDb3VudGVyQ29sdW1uKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRDb3VudGVyUm93Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzBdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ05vIFJlc3VsdCEnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwYWdlIHBhcmFtcwogICAgICAgICAgICBteSAlUGFnZVBhcmFtOwogICAgICAgICAgICAkUGFnZVBhcmFte1BhZ2VPcmllbnRhdGlvbn0gPSAnbGFuZHNjYXBlJzsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5Ub3B9ICAgICAgID0gMzA7CiAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luUmlnaHR9ICAgICA9IDQwOwogICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpbkJvdHRvbX0gICAgPSA0MDsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5MZWZ0fSAgICAgID0gNDA7CiAgICAgICAgICAgICRQYWdlUGFyYW17SGVhZGVyUmlnaHR9ICAgICA9ICRUaXRsZTsKCiAgICAgICAgICAgICMgdGFibGUgcGFyYW1zCiAgICAgICAgICAgIG15ICVUYWJsZVBhcmFtOwogICAgICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX0gICAgICAgICAgICA9ICRDZWxsRGF0YTsKICAgICAgICAgICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICAgICAgICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgPSA2OwogICAgICAgICAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICA9IDA7CiAgICAgICAgICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvckV2ZW59ID0gJyNEREREREQnOwogICAgICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICA9IDE7CiAgICAgICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgID0gMzsKICAgICAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgPSAzOwoKICAgICAgICAgICAgIyBjcmVhdGUgbmV3IHBkZiBkb2N1bWVudAogICAgICAgICAgICAkUERGT2JqZWN0LT5Eb2N1bWVudE5ldygKICAgICAgICAgICAgICAgIFRpdGxlICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Byb2R1Y3QnKSAuICc6ICcgLiAkVGl0bGUsCiAgICAgICAgICAgICAgICBFbmNvZGUgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc3RhcnQgdGFibGUgb3V0cHV0CiAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAlUGFnZVBhcmFtLAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2UgLiAnIDEnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgICAgIFkgICAgPT4gLTYsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCB0aXRsZQogICAgICAgICAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgICAgICAgICAgVGV4dCAgICAgPT4gJFRpdGxlLAogICAgICAgICAgICAgICAgRm9udFNpemUgPT4gMTMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICAgICAgWSAgICA9PiAtNiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0ICJwcmludGVkIGJ5IgogICAgICAgICAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgICAgICAgICAgVGV4dCA9PiAkUHJpbnRlZEJ5IC4gJyAnCiAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJGdWxsbmFtZX0gLiAnICcKICAgICAgICAgICAgICAgICAgICAuICRUaW1lLAogICAgICAgICAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgICAgICBZICAgID0+IC0xNCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIFBBR0U6CiAgICAgICAgICAgIGZvciBteSAkQ291bnQgKCAyIC4uICRNYXhQYWdlcyApIHsKCiAgICAgICAgICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAgICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAgICAgICAgICMgc3RvcCBvdXRwdXQgb3IgYW5vdGhlciBwYWdlCiAgICAgICAgICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgICAgICAgICBsYXN0IFBBR0U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgICAgICAgICAlUGFnZVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZSAuICcgJyAuICRDb3VudCwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJldHVybiB0aGUgcGRmIGRvY3VtZW50CiAgICAgICAgICAgIG15ICRDdXJyZW50U3lzdGVtRFRPYmogPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICAgICAgbXkgJFBERlN0cmluZyAgICAgICAgICA9ICRQREZPYmplY3QtPkRvY3VtZW50T3V0cHV0KCk7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICAgICAgRmlsZW5hbWUgPT4gc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnY29uZmlnaXRlbV9zZWFyY2hfJXNfJXMucGRmJywKICAgICAgICAgICAgICAgICAgICAkQ3VycmVudFN5c3RlbURUT2JqLT5Gb3JtYXQoIEZvcm1hdCA9PiAnJUZfJUgtJU0nICksCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gImFwcGxpY2F0aW9uL3BkZiIsCiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAkUERGU3RyaW5nLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG5vcm1hbCBIVE1MIG91dHB1dAogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzdGFydCBodG1sIHBhZ2UKICAgICAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+UHJpbnQoIE91dHB1dCA9PiBcJE91dHB1dCApOwogICAgICAgICAgICAkT3V0cHV0ID0gJyc7CgogICAgICAgICAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsdGVyJyApIHx8ICcnOwogICAgICAgICAgICAkU2VsZi0+e1ZpZXd9ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVmlldycgKSAgIHx8ICcnOwoKICAgICAgICAgICAgIyBzaG93IGNvbmZpZyBpdGVtcwogICAgICAgICAgICBteSAkTGlua1BhZ2UgPSAnRmlsdGVyPScKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgICAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgICAgICAgICAuICc7U29ydEJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57U29ydEJ5fSApCiAgICAgICAgICAgICAgICAuICc7T3JkZXJCeT0nCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntPcmRlckJ5fSApCiAgICAgICAgICAgICAgICAuICc7UHJvZmlsZT0nIC4gJFNlbGYtPntQcm9maWxlfSAuICc7VGFrZUxhc3RTZWFyY2g9MTtTdWJhY3Rpb249U2VhcmNoJwogICAgICAgICAgICAgICAgLiAnO0NsYXNzSUQ9JyAuICRDbGFzc0lECiAgICAgICAgICAgICAgICAuICc7JzsKICAgICAgICAgICAgbXkgJExpbmtTb3J0ID0gJ0ZpbHRlcj0nCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAgICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgICAgICAgICAgLiAnO1Byb2ZpbGU9JyAuICRTZWxmLT57UHJvZmlsZX0gLiAnO1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaCcKICAgICAgICAgICAgICAgIC4gJztDbGFzc0lEPScgLiAkQ2xhc3NJRAogICAgICAgICAgICAgICAgLiAnOyc7CiAgICAgICAgICAgIG15ICRMaW5rRmlsdGVyID0gJ1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaDtQcm9maWxlPScKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1Byb2ZpbGV9ICkKICAgICAgICAgICAgICAgIC4gJztDbGFzc0lEPScKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkQ2xhc3NJRCApCiAgICAgICAgICAgICAgICAuICc7JzsKICAgICAgICAgICAgbXkgJExpbmtCYWNrID0gJ1N1YmFjdGlvbj1Mb2FkUHJvZmlsZTtQcm9maWxlPScKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1Byb2ZpbGV9ICkKICAgICAgICAgICAgICAgIC4gJztDbGFzc0lEPScKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkQ2xhc3NJRCApCiAgICAgICAgICAgICAgICAuICc7VGFrZUxhc3RTZWFyY2g9MTsnOwoKICAgICAgICAgICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgICAgICAgICBteSBAU2hvd0NvbHVtbnM7CiAgICAgICAgICAgIGlmICggJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgICAgICAgICAgZm9yIG15ICROYW1lICggc29ydCBrZXlzICVQb3NzaWJsZUNvbHVtbiApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICROYW1lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB0aGUgY29uZmlndXJlZCBjb2x1bW5zIGFuZCByZW9yZ2FuaXplIHRoZW0gYnkgY2xhc3MgbmFtZQogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBJc0FycmF5UmVmV2l0aERhdGEoICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zQnlDbGFzc30gKQogICAgICAgICAgICAgICAgJiYgJENsYXNzSUQKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG15ICVDb2x1bW5CeUNsYXNzOwoKICAgICAgICAgICAgICAgIE5BTUU6CiAgICAgICAgICAgICAgICBmb3IgbXkgJE5hbWUgKCBAeyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc0J5Q2xhc3N9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgKCAkQ2xhc3MsICRDb2x1bW4gKSA9IHNwbGl0IC86Oi8sICROYW1lLCAyOwoKICAgICAgICAgICAgICAgICAgICBuZXh0IE5BTUUgaWYgISRDb2x1bW47CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJENvbHVtbkJ5Q2xhc3N7JENsYXNzfSB9LCAkQ29sdW1uOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgYSBzcGVjaWZpYyBjb2x1bW4gY29uZmlnIGZvciB0aGUgc2VsZWN0ZWQgY2xhc3MKICAgICAgICAgICAgICAgIG15ICRTZWxlY3RlZENsYXNzID0gJENsYXNzTGlzdC0+eyRDbGFzc0lEfTsKICAgICAgICAgICAgICAgIGlmICggJENvbHVtbkJ5Q2xhc3N7JFNlbGVjdGVkQ2xhc3N9ICkgewogICAgICAgICAgICAgICAgICAgIEBTaG93Q29sdW1ucyA9IEB7ICRDb2x1bW5CeUNsYXNzeyRTZWxlY3RlZENsYXNzfSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkQ2xhc3NOYW1lID0gJENsYXNzTGlzdC0+eyRDbGFzc0lEfTsKICAgICAgICAgICAgbXkgJFRpdGxlICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ29uZmlnIEl0ZW0gU2VhcmNoIFJlc3VsdHMnKQogICAgICAgICAgICAgICAgLiAnICcKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDbGFzcycpCiAgICAgICAgICAgICAgICAuICcgJwogICAgICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJENsYXNzTmFtZSk7CgogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPklUU01Db25maWdJdGVtTGlzdFNob3coCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSURzID0+ICRTZWFyY2hSZXN1bHRMaXN0LAogICAgICAgICAgICAgICAgVG90YWwgICAgICAgICA9PiBzY2FsYXIgQHskU2VhcmNoUmVzdWx0TGlzdH0sCiAgICAgICAgICAgICAgICBWaWV3ICAgICAgICAgID0+ICRTZWxmLT57Vmlld30sCiAgICAgICAgICAgICAgICBGaWx0ZXIgICAgICAgID0+ICRDbGFzc0lELAogICAgICAgICAgICAgICAgRW52ICAgICAgICAgICA9PiAkU2VsZiwKICAgICAgICAgICAgICAgIExpbmtQYWdlICAgICAgPT4gJExpbmtQYWdlLAogICAgICAgICAgICAgICAgTGlua1NvcnQgICAgICA9PiAkTGlua1NvcnQsCiAgICAgICAgICAgICAgICBMaW5rRmlsdGVyICAgID0+ICRMaW5rRmlsdGVyLAogICAgICAgICAgICAgICAgTGlua0JhY2sgICAgICA9PiAkTGlua0JhY2ssCiAgICAgICAgICAgICAgICBQcm9maWxlICAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgICAgICBUaXRsZU5hbWUgICAgID0+ICRUaXRsZSwKICAgICAgICAgICAgICAgIFNob3dDb2x1bW5zICAgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICAgICAgICAgIFNvcnRCeSAgICAgICAgPT4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1NvcnRCeX0gKSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgPT4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e09yZGVyQnl9ICksCiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgID0+ICRDbGFzc0lELAogICAgICAgICAgICAgICAgUmVxdWVzdFVSTCAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgICAgICBLZXkgICA9PiAnSVRTTUNvbmZpZ0l0ZW1TZWFyY2gnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgICAgIFByb2ZpbGUgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICAgICAgICAgICAgIEFjdGlvbiAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYnVpbGQgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjYWxsIHNlYXJjaCBkaWFsb2cgZnJvbSBzZWFyY2ggZW1wdHkgc2NyZWVuCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBzaG93IGRlZmF1bHQgc2VhcmNoIHNjcmVlbgogICAgICAgICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnSVRTTUNvbmZpZ0l0ZW1PcGVuU2VhcmNoRGlhbG9nJywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgUHJvZmlsZSA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgICAgIEFjdGlvbiAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IHRlbXBsYXRlCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfWE1MU2VhcmNoRm9ybU91dHB1dCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVHZXRQYXJhbSA9ICV7ICRQYXJhbXtHZXRQYXJhbX0gfTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MQXR0cmlidXRlc30gbmUgJ0FSUkFZJzsKCiAgICAkUGFyYW17TGV2ZWx9IHx8PSAwOwogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICAjIHNldCBwcmVmaXgKICAgICAgICBteSAkSW5wdXRLZXkgPSAkSXRlbS0+e0tleX07CiAgICAgICAgbXkgJE5hbWUgICAgID0gJEl0ZW0tPntOYW1lfTsKICAgICAgICBpZiAoICRQYXJhbXtQcmVmaXh9ICkgewogICAgICAgICAgICAkSW5wdXRLZXkgPSAkUGFyYW17UHJlZml4fSAuICc6OicgLiAkSW5wdXRLZXk7CiAgICAgICAgICAgICROYW1lICAgICA9ICRQYXJhbXtQcmVmaXhOYW1lfSAuICc6OicgLiAkTmFtZTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSwgaWYgbWFya2VkIGFzIHNlYXJjaGFibGUKICAgICAgICBpZiAoICRJdGVtLT57U2VhcmNoYWJsZX0gKSB7CiAgICAgICAgICAgIG15ICRWYWx1ZTsKCiAgICAgICAgICAgICMgZGF0ZSB0eXBlIGZpZWxkcyBtdXN0IHRvIGdldCBhbGwgZGF0ZSBwYXJhbWV0ZXJzCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnRGF0ZScgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgICAgICAgICAgICAgICAgICAgICAgPT4gJEdldFBhcmFteyRJbnB1dEtleX0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpEYXknID0+ICRHZXRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpEYXknIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJzo6VGltZVN0YXJ0OjpNb250aCcgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6Ok1vbnRoJyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6WWVhcicgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OlllYXInIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OkRheScgICA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpEYXknIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6Ok1vbnRoJyA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpNb250aCcgfSwKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6WWVhcicgID0+ICRHZXRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OlllYXInIH0sCiAgICAgICAgICAgICAgICAgICAgfSB8fCAnJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBkYXRlLXRpbWUgdHlwZSBmaWVsZHMgbXVzdCBnZXQgYWxsIGRhdGUgYW5kIHRpbWUgcGFyYW1ldGVycwogICAgICAgICAgICBlbHNpZiAoICRJdGVtLT57SW5wdXR9LT57VHlwZX0gZXEgJ0RhdGVUaW1lJyApIHsKICAgICAgICAgICAgICAgICRWYWx1ZSA9CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSA9PiAkR2V0UGFyYW17JElucHV0S2V5fSwKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkKICAgICAgICAgICAgICAgICAgICAgICAgLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgfSwKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OkhvdXInID0+ICRHZXRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpIb3VyJyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6RGF5JyAgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OkRheScgfSwKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkKICAgICAgICAgICAgICAgICAgICAgICAgLiAnOjpUaW1lU3RhcnQ6Ok1vbnRoJyA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6TW9udGgnIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpZZWFyJyA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6WWVhcicgfSwKICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkKICAgICAgICAgICAgICAgICAgICAgICAgLiAnOjpUaW1lU3RvcDo6TWludXRlJyA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpNaW51dGUnIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OkhvdXInICA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpIb3VyJyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpEYXknICAgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6RGF5JyB9LAogICAgICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpNb250aCcgPT4gJEdldFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6TW9udGgnIH0sCiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OlllYXInICA9PiAkR2V0UGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpZZWFyJyB9LAogICAgICAgICAgICAgICAgICAgIH0gfHwgJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3RoZXIga2luZHMgb2YgZmllbGRzIGNhbiBnZXQgaXRzIHZhbHVlIGRpcmVjdGx5CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFZhbHVlID0gJEdldFBhcmFteyRJbnB1dEtleX0gfHwgJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgICAgICAgICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAgICAgICAgICMgY3JlYXRlIHNlYXJjaCBpbnB1dCBlbGVtZW50CiAgICAgICAgICAgIG15ICRJbnB1dFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPklUU01Db25maWdJdGVtU2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgICAgICAgICBLZXkgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBdHRyaWJ1dGVSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJElucHV0S2V5LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICROYW1lLAogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICRJdGVtLT57RGVzY3JpcHRpb259IHx8ICRJdGVtLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgSW5wdXRTdHJpbmcgPT4gJElucHV0U3RyaW5nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEF0dHJpYnV0ZXN9IH0sIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRJbnB1dEtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICROYW1lLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgbmV4dCBJVEVNIGlmICEkSXRlbS0+e1N1Yn07CgogICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAkU2VsZi0+X1hNTFNlYXJjaEZvcm1PdXRwdXQoCiAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICBYTUxBdHRyaWJ1dGVzID0+ICRQYXJhbXtYTUxBdHRyaWJ1dGVzfSwKICAgICAgICAgICAgTGV2ZWwgICAgICAgICA9PiAkUGFyYW17TGV2ZWx9ICsgMSwKICAgICAgICAgICAgUHJlZml4ICAgICAgICA9PiAkSW5wdXRLZXksCiAgICAgICAgICAgIFByZWZpeE5hbWUgICAgPT4gJE5hbWUsCiAgICAgICAgICAgIEdldFBhcmFtICAgICAgPT4gXCVHZXRQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1hNTFNlYXJjaEZvcm1HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxGb3JtRGF0YX07CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxHZXRQYXJhbX07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRm9ybURhdGF9IG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxHZXRQYXJhbX0gbmUgJ0FSUkFZJzsKCiAgICAkUGFyYW17TGV2ZWx9IHx8PSAwOwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKCiAgICAgICAgIyBjcmVhdGUgaW5wdXRrZXkKICAgICAgICBteSAkSW5wdXRLZXkgPSAkSXRlbS0+e0tleX07CiAgICAgICAgaWYgKCAkUGFyYW17UHJlZml4fSApIHsKICAgICAgICAgICAgJElucHV0S2V5ID0gJFBhcmFte1ByZWZpeH0gLiAnOjonIC4gJElucHV0S2V5OwogICAgICAgIH0KCiAgICAgICAgIyBEYXRlIHR5cGUgZmllbGRzIG11c3QgdG8gZ2V0IGFsbCBkYXRlIHBhcmFtZXRlcnMuCiAgICAgICAgaWYgKCAkSXRlbS0+e0lucHV0fS0+e1R5cGV9IGVxICdEYXRlJyAmJiAkUGFyYW17JElucHV0S2V5fSApIHsKICAgICAgICAgICAgJFBhcmFteyRJbnB1dEtleX0gPQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJElucHV0S2V5ICAgICAgICAgICAgICAgICAgICAgID0+ICRQYXJhbXskSW5wdXRLZXl9LAogICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpEYXknID0+ICRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpEYXknIH0sCiAgICAgICAgICAgICAgICAkSW5wdXRLZXkKICAgICAgICAgICAgICAgICAgICAuICc6OlRpbWVTdGFydDo6TW9udGgnID0+ICRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgfSwKICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6WWVhcicgPT4gJFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OlllYXInIH0sCiAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6RGF5JyAgID0+ICRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OkRheScgfSwKICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpNb250aCcgPT4gJFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6TW9udGgnIH0sCiAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6WWVhcicgID0+ICRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OlllYXInIH0sCiAgICAgICAgICAgICAgICB9IHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBEYXRlLXRpbWUgdHlwZSBmaWVsZHMgbXVzdCBnZXQgYWxsIGRhdGUgYW5kIHRpbWUgcGFyYW1ldGVycy4KICAgICAgICBlbHNpZiAoICRJdGVtLT57SW5wdXR9LT57VHlwZX0gZXEgJ0RhdGVUaW1lJyAmJiAkUGFyYW17JElucHV0S2V5fSApIHsKICAgICAgICAgICAgJFBhcmFteyRJbnB1dEtleX0gPQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJElucHV0S2V5ID0+ICRQYXJhbXskSW5wdXRLZXl9LAogICAgICAgICAgICAgICAgJElucHV0S2V5CiAgICAgICAgICAgICAgICAgICAgLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgPT4gJFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgfSwKICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6SG91cicgPT4gJFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OkhvdXInIH0sCiAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OkRheScgID0+ICRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpEYXknIH0sCiAgICAgICAgICAgICAgICAkSW5wdXRLZXkKICAgICAgICAgICAgICAgICAgICAuICc6OlRpbWVTdGFydDo6TW9udGgnID0+ICRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgfSwKICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdGFydDo6WWVhcicgPT4gJFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OlllYXInIH0sCiAgICAgICAgICAgICAgICAkSW5wdXRLZXkKICAgICAgICAgICAgICAgICAgICAuICc6OlRpbWVTdG9wOjpNaW51dGUnID0+ICRQYXJhbXsgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6Ok1pbnV0ZScgfSwKICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpIb3VyJyAgPT4gJFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6SG91cicgfSwKICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpEYXknICAgPT4gJFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6RGF5JyB9LAogICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6Ok1vbnRoJyA9PiAkUGFyYW17ICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpNb250aCcgfSwKICAgICAgICAgICAgICAgICRJbnB1dEtleSAuICc6OlRpbWVTdG9wOjpZZWFyJyAgPT4gJFBhcmFteyAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6WWVhcicgfSwKICAgICAgICAgICAgICAgIH0gfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzZWFyY2ggZm9ybSBkYXRhCiAgICAgICAgbXkgJFZhbHVlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+SVRTTUNvbmZpZ0l0ZW1TZWFyY2hGb3JtRGF0YUdldCgKICAgICAgICAgICAgS2V5ICAgPT4gJElucHV0S2V5LAogICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFteyRJbnB1dEtleX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgc2VhcmNoIGtleQogICAgICAgIG15ICRTZWFyY2hLZXkgPSAkSW5wdXRLZXk7CiAgICAgICAgJFNlYXJjaEtleSA9fiBzeyA6OiB9e1wnXH1bJV1ce1wnfXhtc2c7CiAgICAgICAgJFNlYXJjaEtleSA9ICJbMV17J1ZlcnNpb24nfVsxXXsnJFNlYXJjaEtleSd9WyVdeydDb250ZW50J30iOwoKICAgICAgICAjIElUU01Db25maWdJdGVtU2VhcmNoRm9ybURhdGFHZXQoKSBjYW4gcmV0dXJuIHN0cmluZywgYXJyYXlyZWYgb3IgaGFzaHJlZgogICAgICAgIGlmICggcmVmICRWYWx1ZXMgZXEgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICMgZmlsdGVyIGVtcHR5IGVsZW1lbnRzCiAgICAgICAgICAgIG15IEBTZWFyY2hWYWx1ZXMgPSBncmVwIHskX30gQHskVmFsdWVzfTsKCiAgICAgICAgICAgIGlmIChAU2VhcmNoVmFsdWVzKSB7CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtYTUxGb3JtRGF0YX0gfSwgewogICAgICAgICAgICAgICAgICAgICRTZWFyY2hLZXkgPT4gXEBTZWFyY2hWYWx1ZXMsCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEdldFBhcmFtfSB9LCB7CiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5ID0+IFxAU2VhcmNoVmFsdWVzLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRWYWx1ZXMpIHsKCiAgICAgICAgICAgICMgZS5nLiBmb3IgRGF0ZSBiZXR3ZWVuIHNlYXJjaGVzCiAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEZvcm1EYXRhfSB9LCB7CiAgICAgICAgICAgICAgICAkU2VhcmNoS2V5ID0+ICRWYWx1ZXMsCiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpZiAoIHJlZiAkVmFsdWVzIGVxICdIQVNIJyApIHsKICAgICAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnRGF0ZScgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVmFsdWVzLT57Jy1iZXR3ZWVuJ30gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aW1lIGVsZW1ldCB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkU3RhcnREYXRlLCAkU3RvcERhdGUgKSA9IEB7ICRWYWx1ZXMtPnsnLWJldHdlZW4nfSB9OwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdGFydFllYXIsICRTdGFydE1vbnRoLCAkU3RhcnREYXkgKSA9IHNwbGl0KCAvLS8sICRTdGFydERhdGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkU3RvcFllYXIsICAkU3RvcE1vbnRoLCAgJFN0b3BEYXkgKSAgPSBzcGxpdCggLy0vLCAkU3RvcERhdGUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgdGltZSBlbG1lbnQgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEdldFBhcmFtfSB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpEYXknICAgPT4gJFN0YXJ0RGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgPT4gJFN0YXJ0TW9udGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OlllYXInICA9PiAkU3RhcnRZZWFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OkRheScgICAgPT4gJFN0b3BEYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6TW9udGgnICA9PiAkU3RvcE1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OlllYXInICAgPT4gJFN0b3BZZWFyLAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnRGF0ZVRpbWUnICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJFZhbHVlcy0+eyctYmV0d2Vlbid9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGltZSBlbGVtZXQgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICggJFN0YXJ0RGF0ZVRpbWUsICRTdG9wRGF0ZVRpbWUgKSA9IEB7ICRWYWx1ZXMtPnsnLWJldHdlZW4nfSB9OwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdGFydERhdGUsICRTdGFydFRpbWUgKSA9IHNwbGl0KCAvXHMvLCAkU3RhcnREYXRlVGltZSApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdGFydFllYXIsICRTdGFydE1vbnRoLCAgJFN0YXJ0RGF5ICkgICAgPSBzcGxpdCggLy0vLCAgJFN0YXJ0RGF0ZSApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdGFydEhvdXIsICRTdGFydE1pbnV0ZSwgJFN0YXJ0U2Vjb25kICkgPSBzcGxpdCggL1w6LywgJFN0YXJ0VGltZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkU3RvcERhdGUsICRTdG9wVGltZSApID0gc3BsaXQoIC9ccy8sICRTdG9wRGF0ZVRpbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkU3RvcFllYXIsICRTdG9wTW9udGgsICAkU3RvcERheSApICAgID0gc3BsaXQoIC8tLywgICRTdG9wRGF0ZSApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRTdG9wSG91ciwgJFN0b3BNaW51dGUsICRTdG9wU2Vjb25kICkgPSBzcGxpdCggL1w6LywgJFN0b3BUaW1lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIHRpbWUgZWxtZW50IHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtYTUxHZXRQYXJhbX0gfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5ICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgPT4gJFN0YXJ0TWludXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpIb3VyJyAgID0+ICRTdGFydEhvdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RhcnQ6OkRheScgICAgPT4gJFN0YXJ0RGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgID0+ICRTdGFydE1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0YXJ0OjpZZWFyJyAgID0+ICRTdGFydFllYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6TWludXRlJyAgPT4gJFN0b3BNaW51dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6SG91cicgICAgPT4gJFN0b3BIb3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6OkRheScgICAgID0+ICRTdG9wRGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5IC4gJzo6VGltZVN0b3A6Ok1vbnRoJyAgID0+ICRTdG9wTW9udGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXRLZXkgLiAnOjpUaW1lU3RvcDo6WWVhcicgICAgPT4gJFN0b3BZZWFyLAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1hNTEdldFBhcmFtfSB9LCB7CiAgICAgICAgICAgICAgICAgICAgJElucHV0S2V5ID0+ICRWYWx1ZXMsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgbmV4dCBJVEVNIGlmICEkSXRlbS0+e1N1Yn07CgogICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAkU2VsZi0+X1hNTFNlYXJjaEZvcm1HZXQoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgIFhNTEZvcm1EYXRhICAgPT4gJFBhcmFte1hNTEZvcm1EYXRhfSwKICAgICAgICAgICAgWE1MR2V0UGFyYW0gICA9PiAkUGFyYW17WE1MR2V0UGFyYW19LAogICAgICAgICAgICBMZXZlbCAgICAgICAgID0+ICRQYXJhbXtMZXZlbH0gKyAxLAogICAgICAgICAgICBQcmVmaXggICAgICAgID0+ICRJbnB1dEtleSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1hNTFNlYXJjaEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MQXR0cmlidXRlc30gbmUgJ0FSUkFZJzsKCiAgICAkUGFyYW17TGV2ZWx9IHx8PSAwOwogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICAjIHNldCBwcmVmaXgKICAgICAgICBteSAkSW5wdXRLZXkgPSAkSXRlbS0+e0tleX07CiAgICAgICAgbXkgJE5hbWUgICAgID0gJEl0ZW0tPntOYW1lfTsKICAgICAgICBpZiAoICRQYXJhbXtQcmVmaXh9ICkgewogICAgICAgICAgICAkSW5wdXRLZXkgPSAkUGFyYW17UHJlZml4fSAuICc6OicgLiAkSW5wdXRLZXk7CiAgICAgICAgICAgICROYW1lICAgICA9ICRQYXJhbXtQcmVmaXhOYW1lfSAuICc6OicgLiAkTmFtZTsKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgYXR0cmlidXRlLCBpZiBtYXJrZWQgYXMgc2VhcmNoYWJsZQogICAgICAgIGlmICggJEl0ZW0tPntTZWFyY2hhYmxlfSApIHsKICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17WE1MQXR0cmlidXRlc30gfSwgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJElucHV0S2V5LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJE5hbWUsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBuZXh0IElURU0gaWYgISRJdGVtLT57U3VifTsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICRTZWxmLT5fWE1MU2VhcmNoQXR0cmlidXRlc0dldCgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgIFhNTEF0dHJpYnV0ZXMgPT4gJFBhcmFte1hNTEF0dHJpYnV0ZXN9LAogICAgICAgICAgICBMZXZlbCAgICAgICAgID0+ICRQYXJhbXtMZXZlbH0gKyAxLAogICAgICAgICAgICBQcmVmaXggICAgICAgID0+ICRJbnB1dEtleSwKICAgICAgICAgICAgUHJlZml4TmFtZSAgICA9PiAkTmFtZSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6Ok1pZ3JhdGlvbnM6Ok9UUlM2OjpTeXNDb25maWcpCgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICRDb25maWdJdGVtSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29uZmlnSXRlbUlEJyApIHx8IDA7CiAgICBteSAkVmVyc2lvbklEICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZlcnNpb25JRCcgKSAgICB8fCAwOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRDb25maWdJdGVtSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0CiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgY2hlY2sgZm9yIGFjY2VzcyByaWdodHMKICAgIG15ICRIYXNBY2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBTY29wZSAgPT4gJ0l0ZW0nLAogICAgICAgIEl0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVHlwZSAgID0+ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKS0+e1Blcm1pc3Npb259LAogICAgKTsKCiAgICBpZiAoICEkSGFzQWNjZXNzICkgewoKICAgICAgICAjIGVycm9yIHBhZ2UKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdDYW5cJ3Qgc2hvdyBpdGVtLCBubyBhY2Nlc3MgcmlnaHRzIGZvciBDb25maWdJdGVtIGFyZSBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgc2hvdyB2ZXJzaW9ucwogICAgJFBhcmFte1Nob3dWZXJzaW9uc30gPSAwOwogICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2hvd1ZlcnNpb25zJyApICkgewogICAgICAgICRQYXJhbXtTaG93VmVyc2lvbnN9ID0gMTsKICAgIH0KCiAgICAjIGdldCBjb250ZW50CiAgICBteSAkQ29uZmlnSXRlbSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgKTsKICAgIGlmICggISRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvbmZpZ0l0ZW1JRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJENvbmZpZ0l0ZW1JRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB2ZXJzaW9uIGxpc3QKICAgIG15ICRWZXJzaW9uTGlzdCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uWm9vbUxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwogICAgaWYgKCAhJFZlcnNpb25MaXN0LT5bMF0tPntWZXJzaW9uSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTm8gdmVyc2lvbiBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICVzIScsICRDb25maWdJdGVtSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgdmVyc2lvbiBpZAogICAgaWYgKCAhJFZlcnNpb25JRCApIHsKICAgICAgICAkVmVyc2lvbklEID0gJFZlcnNpb25MaXN0LT5bLTFdLT57VmVyc2lvbklEfTsKICAgIH0KICAgIGlmICggJFZlcnNpb25JRCBuZSAkVmVyc2lvbkxpc3QtPlstMV0tPntWZXJzaW9uSUR9ICkgewogICAgICAgICRQYXJhbXtTaG93VmVyc2lvbnN9ID0gMTsKICAgIH0KCiAgICAjIHNldCB2ZXJzaW9uIGlkIGluIHBhcmFtIGhhc2ggKG9ubHkgZm9yIG1lbnUgbW9kdWxlKQogICAgaWYgKCRWZXJzaW9uSUQpIHsKICAgICAgICAkUGFyYW17VmVyc2lvbklEfSA9ICRWZXJzaW9uSUQ7CiAgICB9CgogICAgIyBydW4gY29uZmlnIGl0ZW0gbWVudSBtb2R1bGVzCiAgICBpZiAoIHJlZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpGcm9udGVuZDo6TWVudU1vZHVsZScpIGVxICdIQVNIJyApIHsKICAgICAgICBteSAlTWVudXMgICA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpNZW51TW9kdWxlJykgfTsKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgZm9yIG15ICRNZW51ICggc29ydCBrZXlzICVNZW51cyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewoKICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTWVudXN7JE1lbnV9LT57TW9kdWxlfS0+bmV3KAogICAgICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkU2VsZi0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IGNsYXNzZXMKICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gKSB7CgogICAgICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gZXEgJ1BvcFVwJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e01lbnVDbGFzc30gPSAnQXNQb3B1cCc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gZXEgJ0JhY2snICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57TWVudUNsYXNzfSA9ICdIaXN0b3J5QmFjayc7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJ1biBtb2R1bGUKICAgICAgICAgICAgICAgICRDb3VudGVyID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtID0+ICRDb25maWdJdGVtLAogICAgICAgICAgICAgICAgICAgIENvdW50ZXIgICAgPT4gJENvdW50ZXIsCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnICAgICA9PiAkTWVudXN7JE1lbnV9LAogICAgICAgICAgICAgICAgICAgIE1lbnVJRCAgICAgPT4gJE1lbnUsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIHZlcnNpb24gdHJlZQogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1RyZWUnICk7CiAgICBteSAkQ291bnRlciA9IDE7CiAgICBpZiAoICEkUGFyYW17U2hvd1ZlcnNpb25zfSAmJiAkVmVyc2lvbklEIGVxICRWZXJzaW9uTGlzdC0+Wy0xXS0+e1ZlcnNpb25JRH0gKSB7CiAgICAgICAgJENvdW50ZXIgICAgID0gQHskVmVyc2lvbkxpc3R9OwogICAgICAgICRWZXJzaW9uTGlzdCA9IFsgJFZlcnNpb25MaXN0LT5bLTFdIF07CiAgICB9CgogICAgIyBnZXQgbGFzdCB2ZXJzaW9uCiAgICBteSAkTGFzdFZlcnNpb24gPSAkVmVyc2lvbkxpc3QtPlstMV07CgogICAgIyBzZXQgaW5jaWRlbnQgc2lnbmFsCiAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgVHJhbnNsYXRhYmxlKCdvcGVyYXRpb25hbCcpID0+ICdncmVlbmxlZCcsCiAgICAgICAgVHJhbnNsYXRhYmxlKCd3YXJuaW5nJykgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgIFRyYW5zbGF0YWJsZSgnaW5jaWRlbnQnKSAgICA9PiAncmVkbGVkJywKICAgICk7CgogICAgIyB0byBzdG9yZSB0aGUgY29sb3IgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcwogICAgbXkgJURlcGxTaWduYWxzOwoKICAgICMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBvYmplY3QKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICMgZ2V0IGxpc3Qgb2YgZGVwbG95bWVudCBzdGF0ZXMKICAgIG15ICREZXBsb3ltZW50U3RhdGVzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgICMgc2V0IGRlcGxveW1lbnQgc3R5bGUgY29sb3JzCiAgICBteSAkU3R5bGVDbGFzc2VzID0gJyc7CgogICAgSVRFTUlEOgogICAgZm9yIG15ICRJdGVtSUQgKCBzb3J0IGtleXMgJXskRGVwbG95bWVudFN0YXRlc0xpc3R9ICkgewoKICAgICAgICAjIGdldCBkZXBsb3ltZW50IHN0YXRlIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIGEgY29sb3IgaXMgZGVmaW5lZCBpbiBwcmVmZXJlbmNlcwogICAgICAgIG5leHQgSVRFTUlEIGlmICEkUHJlZmVyZW5jZXN7Q29sb3J9OwoKICAgICAgICAjIGdldCBkZXBsb3ltZW50IHN0YXRlCiAgICAgICAgbXkgJERlcGxTdGF0ZSA9ICREZXBsb3ltZW50U3RhdGVzTGlzdC0+eyRJdGVtSUR9OwoKICAgICAgICAjIHJlbW92ZSBhbnkgbm9uIGFzY2lpIHdvcmQgY2hhcmFjdGVycwogICAgICAgICREZXBsU3RhdGUgPX4gc3sgW15hLXpBLVowLTldIH17X31tc3hnOwoKICAgICAgICAjIHN0b3JlIHRoZSBvcmlnaW5hbCBkZXBsb3ltZW50IHN0YXRlIGFzIGtleQogICAgICAgICMgYW5kIHRoZSBzcyBzYWZlIGNvdmVydGVkIGRlcGxveW1lbnQgc3RhdGUgYXMgdmFsdWUKICAgICAgICAkRGVwbFNpZ25hbHN7ICREZXBsb3ltZW50U3RhdGVzTGlzdC0+eyRJdGVtSUR9IH0gPSAkRGVwbFN0YXRlOwoKICAgICAgICAjIGNvdmVydCB0byBsb3dlciBjYXNlCiAgICAgICAgbXkgJERlcGxTdGF0ZUNvbG9yID0gbGMgJFByZWZlcmVuY2Vze0NvbG9yfTsKCiAgICAgICAgIyBhZGQgdG8gc3R5bGUgY2xhc3NlcyBzdHJpbmcKICAgICAgICAkU3R5bGVDbGFzc2VzIC49ICIKICAgICAgICAgICAgLkZsYWcgc3Bhbi4kRGVwbFN0YXRlIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMkRGVwbFN0YXRlQ29sb3I7CiAgICAgICAgICAgIH0KICAgICAgICAiOwogICAgfQoKICAgICMgd3JhcCBpbnRvIHN0eWxlIHRhZ3MKICAgIGlmICgkU3R5bGVDbGFzc2VzKSB7CiAgICAgICAgJFN0eWxlQ2xhc3NlcyA9ICI8c3R5bGU+JFN0eWxlQ2xhc3Nlczwvc3R5bGU+IjsKICAgIH0KCiAgICAjIG91dHB1dCB2ZXJzaW9uIHRyZWUgaGVhZGVyCiAgICBpZiAoICRQYXJhbXtTaG93VmVyc2lvbnN9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDb2xsYXBzZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdFeHBhbmQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdXNlciBvYmplY3QKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIG91dHB1dCB2ZXJzaW9uIHRyZWUKICAgIGZvciBteSAkVmVyc2lvbkhhc2ggKCBAeyRWZXJzaW9uTGlzdH0gKSB7CgogICAgICAgICRQYXJhbXtDcmVhdGVCeVVzZXJGdWxsTmFtZX0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVmVyc2lvbkhhc2gtPntDcmVhdGVCeX0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyRDb25maWdJdGVtfSwKICAgICAgICAgICAgICAgICV7JFZlcnNpb25IYXNofSwKICAgICAgICAgICAgICAgIENvdW50ICAgICAgPT4gJENvdW50ZXIsCiAgICAgICAgICAgICAgICBJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJFZlcnNpb25IYXNoLT57SW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICAgICAgICAgIERlcGxTaWduYWwgPT4gJERlcGxTaWduYWxzeyAkVmVyc2lvbkhhc2gtPntEZXBsU3RhdGV9IH0sCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgID0+ICRWZXJzaW9uSGFzaC0+e1ZlcnNpb25JRH0gZXEgJFZlcnNpb25JRCA/ICdBY3RpdmUnIDogJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJENvdW50ZXIrKzsKICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoIFZhbHVlID0+ICRDb25maWdJdGVtLT57TnVtYmVyfSApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZXQgdmVyc2lvbgogICAgbXkgJFZlcnNpb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb25JRCwKICAgICk7CgogICAgaWYgKAogICAgICAgICRWZXJzaW9uCiAgICAgICAgJiYgcmVmICRWZXJzaW9uIGVxICdIQVNIJwogICAgICAgICYmICRWZXJzaW9uLT57WE1MRGVmaW5pdGlvbn0KICAgICAgICAmJiAkVmVyc2lvbi0+e1hNTERhdGF9CiAgICAgICAgJiYgcmVmICRWZXJzaW9uLT57WE1MRGVmaW5pdGlvbn0gZXEgJ0FSUkFZJwogICAgICAgICYmIHJlZiAkVmVyc2lvbi0+e1hNTERhdGF9IGVxICdBUlJBWScKICAgICAgICAmJiAkVmVyc2lvbi0+e1hNTERhdGF9LT5bMV0KICAgICAgICAmJiByZWYgJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdIGVxICdIQVNIJwogICAgICAgICYmICRWZXJzaW9uLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259CiAgICAgICAgJiYgcmVmICRWZXJzaW9uLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259IGVxICdBUlJBWScKICAgICAgICApCiAgICB7CgogICAgICAgICMgdHJhbnNmb3JtIGFzY2lpIHRvIGh0bWwKICAgICAgICAkVmVyc2lvbi0+e05hbWV9ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFZlcnNpb24tPntOYW1lfSwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICAgICAgTGlua0ZlYXR1cmUgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBuYW1lCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0RhdGEnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTmFtZScpLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gVHJhbnNsYXRhYmxlKCdUaGUgbmFtZSBvZiB0aGlzIGNvbmZpZyBpdGVtJyksCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkVmVyc2lvbi0+e05hbWV9LAogICAgICAgICAgICAgICAgSWRlbnRhdGlvbiAgPT4gMTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgZGVwbG95bWVudCBzdGF0ZQogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEYXRhJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0RlcGxveW1lbnQgU3RhdGUnKSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+IFRyYW5zbGF0YWJsZSgnVGhlIGRlcGxveW1lbnQgc3RhdGUgb2YgdGhpcyBjb25maWcgaXRlbScpLAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICRWZXJzaW9uLT57RGVwbFN0YXRlfSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBJZGVudGF0aW9uID0+IDEwLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGluY2lkZW50IHN0YXRlCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0RhdGEnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnSW5jaWRlbnQgU3RhdGUnKSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+IFRyYW5zbGF0YWJsZSgnVGhlIGluY2lkZW50IHN0YXRlIG9mIHRoaXMgY29uZmlnIGl0ZW0nKSwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAkVmVyc2lvbi0+e0luY2lTdGF0ZX0sCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgSWRlbnRhdGlvbiA9PiAxMCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIHN0YXJ0IHhtbCBvdXRwdXQKICAgICAgICAkU2VsZi0+X1hNTE91dHB1dCgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkVmVyc2lvbi0+e1hNTERlZmluaXRpb259LAogICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRWZXJzaW9uLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjcmVhdGUgJiBjaGFuZ2UgdXNlciBkYXRhCiAgICBmb3IgbXkgJEtleSAocXcoQ3JlYXRlIENoYW5nZSkpIHsKICAgICAgICAkQ29uZmlnSXRlbS0+eyAkS2V5IC4gJ0J5VXNlckZ1bGxOYW1lJyB9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgICAgICBVc2VySUQgPT4gJENvbmZpZ0l0ZW0tPnsgJEtleSAuICdCeScgfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IG1ldGEgYmxvY2sKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01ldGEnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAleyRMYXN0VmVyc2lvbn0sCiAgICAgICAgICAgICV7JENvbmZpZ0l0ZW19LAogICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJExhc3RWZXJzaW9uLT57Q3VySW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICAgICAgQ3VyRGVwbFNpZ25hbCA9PiAkRGVwbFNpZ25hbHN7ICRMYXN0VmVyc2lvbi0+e0RlcGxTdGF0ZX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCBsaW5rZWQgb2JqZWN0cwogICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIEtleSAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxpbmsgdGFibGUgdmlldyBtb2RlCiAgICBteSAkTGlua1RhYmxlVmlld01vZGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0xpbmtPYmplY3Q6OlZpZXdNb2RlJyk7CgogICAgIyBjcmVhdGUgdGhlIGxpbmsgdGFibGUKICAgIG15ICRMaW5rVGFibGVTdHJnID0gJExheW91dE9iamVjdC0+TGlua09iamVjdFRhYmxlQ3JlYXRlKAogICAgICAgIExpbmtMaXN0V2l0aERhdGEgPT4gJExpbmtMaXN0V2l0aERhdGEsCiAgICAgICAgVmlld01vZGUgICAgICAgICA9PiAkTGlua1RhYmxlVmlld01vZGUsCiAgICAgICAgT2JqZWN0ICAgICAgICAgICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIEtleSAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgIyBvdXRwdXQgdGhlIGxpbmsgdGFibGUKICAgIGlmICgkTGlua1RhYmxlU3RyZykgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMaW5rVGFibGUnIC4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExpbmtUYWJsZVN0cmcgPT4gJExpbmtUYWJsZVN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSBAQXR0YWNobWVudHMgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUF0dGFjaG1lbnRMaXN0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgKTsKCiAgICBpZiAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICMgZ2V0IHRoZSBtZXRhZGF0YSBvZiB0aGUgMXN0IGF0dGFjaG1lbnQKICAgICAgICBteSAkRmlyc3RBdHRhY2htZW50ID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50R2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgRmlsZW5hbWUgICAgID0+ICRBdHRhY2htZW50c1swXSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudHMnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgID0+ICRGaXJzdEF0dGFjaG1lbnQtPntGaWxlbmFtZX0sCiAgICAgICAgICAgICAgICBGaWxlc2l6ZSAgICAgPT4gJEZpcnN0QXR0YWNobWVudC0+e0ZpbGVzaXplfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIHRoZSAxc3QgYXR0YWNobWVudCB3YXMgZGlyZWN0bHkgcmVuZGVyZWQgaW50byB0aGUgMXN0IHJvdydzIHJpZ2h0IGNlbGwsIGFsbCBmdXJ0aGVyCiAgICAgICAgIyBhdHRhY2htZW50cyBhcmUgcmVuZGVyZWQgaW50byBhIHNlcGFyYXRlIHJvdwogICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICMgc2tpcCB0aGUgMXN0IGF0dGFjaG1lbnQKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICRBdHRhY2htZW50IGVxICRBdHRhY2htZW50c1swXTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBtZXRhZGF0YSBvZiB0aGUgY3VycmVudCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgID0+ICRBdHRhY2htZW50LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICA9PiAkQXR0YWNobWVudERhdGEtPntGaWxlbmFtZX0sCiAgICAgICAgICAgICAgICAgICAgRmlsZXNpemUgICAgID0+ICRBdHRhY2htZW50RGF0YS0+e0ZpbGVzaXplfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlIERvd25sb2FkQXR0YWNobWVudAogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Rvd25sb2FkQXR0YWNobWVudCcgKSB7CgogICAgICAgICMgZ2V0IGRhdGEgZm9yIGF0dGFjaG1lbnQKICAgICAgICBteSAkRmlsZW5hbWUgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsZW5hbWUnICk7CiAgICAgICAgbXkgJEF0dGFjaG1lbnREYXRhID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50R2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgRmlsZW5hbWUgICAgID0+ICRGaWxlbmFtZSwKICAgICAgICApOwoKICAgICAgICAjIHJldHVybiBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGV4aXN0CiAgICAgICAgaWYgKCAhJEF0dGFjaG1lbnREYXRhICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIGF0dGFjaG1lbnQgKCRGaWxlbmFtZSkhIiwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICV7JEF0dGFjaG1lbnREYXRhfSwKICAgICAgICAgICAgVHlwZSA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdVc2VyQ29uZmlnSXRlbVpvb21UYWJsZUhlaWdodCcsCiAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntVc2VyQ29uZmlnSXRlbVpvb21UYWJsZUhlaWdodH0sCiAgICApOwoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1ab29tJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAleyRMYXN0VmVyc2lvbn0sCiAgICAgICAgICAgICV7JENvbmZpZ0l0ZW19LAogICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJExhc3RWZXJzaW9uLT57Q3VySW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICAgICAgQ3VyRGVwbFNpZ25hbCA9PiAkRGVwbFNpZ25hbHN7ICRMYXN0VmVyc2lvbi0+e0RlcGxTdGF0ZX0gfSwKICAgICAgICAgICAgU3R5bGVDbGFzc2VzICA9PiAkU3R5bGVDbGFzc2VzLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9YTUxPdXRwdXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGF0YX07CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERhdGF9IG5lICdIQVNIJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CgogICAgJFBhcmFte0xldmVsfSB8fD0gMDsKCiAgICBJVEVNOgogICAgZm9yIG15ICRJdGVtICggQHsgJFBhcmFte1hNTERlZmluaXRpb259IH0gKSB7CiAgICAgICAgQ09VTlRFUjoKICAgICAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uICRJdGVtLT57Q291bnRNYXh9ICkgewoKICAgICAgICAgICAgIyBzdG9wIGxvb3AsIGlmIG5vIGNvbnRlbnQgd2FzIGdpdmVuCiAgICAgICAgICAgIGxhc3QgQ09VTlRFUiBpZiAhZGVmaW5lZCAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0tPntDb250ZW50fTsKCiAgICAgICAgICAgICMgbG9va3VwIHZhbHVlCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5YTUxWYWx1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICAgICAgICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgICAgICAgICAjIGNyZWF0ZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgICAgICRWYWx1ZSA9ICRMYXlvdXRPYmplY3QtPklUU01Db25maWdJdGVtT3V0cHV0U3RyaW5nQ3JlYXRlKAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNhbGN1bGF0ZSBpbmRlbnRhdGlvbiBmb3IgbGVmdC1wYWRkaW5nIGNzcyBiYXNlZCBvbiAxNXB4IHBlciBsZXZlbCBhbmQgMTBweCBhcyBkZWZhdWx0CiAgICAgICAgICAgIG15ICRJbmRlbnRhdGlvbiA9IDEwOwoKICAgICAgICAgICAgaWYgKCAkUGFyYW17TGV2ZWx9ICkgewogICAgICAgICAgICAgICAgJEluZGVudGF0aW9uICs9IDE1ICogJFBhcmFte0xldmVsfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBvdXRwdXQgZGF0YSBibG9jawogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0RhdGEnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAkSXRlbS0+e0Rlc2NyaXB0aW9ufSB8fCAkSXRlbS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICBJbmRlbnRhdGlvbiA9PiAkSW5kZW50YXRpb24sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICAgICBpZiAoICRJdGVtLT57U3VifSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5fWE1MT3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLAogICAgICAgICAgICAgICAgICAgIExldmVsICAgICAgICAgPT4gJFBhcmFte0xldmVsfSArIDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6OklUU01Db25maWdJdGVtR2VuZXJpYzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIEFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QuCiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgR2V0IG5lZWRlZCBwYXJhbWV0ZXJzLgogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZyBOYW1lIFVzZXJJRCkpIHsKICAgICAgICBkaWUgIkdvdCBubyAkTmVlZGVkISIgaWYgKCAhJFNlbGYtPnskTmVlZGVkfSApOwogICAgfQoKICAgICMgR2V0IHBhcmFtIG9iamVjdC4KICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIEdldCBjdXJyZW50IGZpbHRlci4KICAgIG15ICROYW1lICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApIHx8ICcnOwogICAgbXkgJFByZWZlcmVuY2VzS2V5ID0gJ0Rhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYycgLiAkU2VsZi0+e05hbWV9OwogICAgaWYgKCAkU2VsZi0+e05hbWV9IGVxICROYW1lICkgewogICAgICAgICRTZWxmLT57RmlsdGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJyc7CiAgICB9CgogICAgIyBHZXQgY29uZmlnIG9iamVjdC4KICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgUmVtZW1iZXIgZmlsdGVyLgogICAgaWYgKCAkU2VsZi0+e0ZpbHRlcn0gKSB7CgogICAgICAgICMgVXBkYXRlIHNlc3Npb24uCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICRQcmVmZXJlbmNlc0tleSwKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICApOwoKICAgICAgICAjIFVwZGF0ZSBwcmVmZXJlbmNlcy4KICAgICAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ0RlbW9TeXN0ZW0nKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+U2V0UHJlZmVyZW5jZXMoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgS2V5ICAgID0+ICRQcmVmZXJlbmNlc0tleSwKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgU2V0IGRlZmF1bHQgZmlsdGVyIGlmIG5vdCBzZXQgeWV0LgogICAgaWYgKCAhJFNlbGYtPntGaWx0ZXJ9ICkgewogICAgICAgICRTZWxmLT57RmlsdGVyfSA9ICRTZWxmLT57JFByZWZlcmVuY2VzS2V5fSB8fCAkU2VsZi0+e0NvbmZpZ30tPntGaWx0ZXJ9IHx8ICdBbGwnOwogICAgfQoKICAgICMgU2V0dXAgdGhlIHByZWZyZW5jZXMga2V5cy4KICAgICRTZWxmLT57UHJlZktleVNob3dufSAgID0gJ0Rhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYycgLiAkU2VsZi0+e05hbWV9IC4gJy1TaG93bic7CiAgICAkU2VsZi0+e1ByZWZLZXlSZWZyZXNofSA9ICdEYXNoYm9hcmRJVFNNQ29uZmlnSXRlbUdlbmVyaWMnIC4gJFNlbGYtPntOYW1lfSAuICctUmVmcmVzaCc7CgogICAgJFNlbGYtPntQYWdlU2hvd259ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT57ICRTZWxmLT57UHJlZktleVNob3dufSB9CiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57TGltaXR9IHx8IDEwOwoKICAgICRTZWxmLT57UGFnZVJlZnJlc2h9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT57ICRTZWxmLT57UHJlZktleVJlZnJlc2h9IH0KICAgICAgICB8fCAxOwoKICAgICRTZWxmLT57U3RhcnRIaXR9ID0gaW50KCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnRIaXQnICkgfHwgMSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFByZWZlcmVuY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQFBhcmFtcyA9ICgKICAgICAgICB7CiAgICAgICAgICAgIERlc2MgID0+IFRyYW5zbGF0YWJsZSgnU2hvd24gY29uZmlnIGl0ZW1zJyksCiAgICAgICAgICAgIE5hbWUgID0+ICRTZWxmLT57UHJlZktleVNob3dufSwKICAgICAgICAgICAgQmxvY2sgPT4gJ09wdGlvbicsCiAgICAgICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgICAgIDUgID0+ICcgNScsCiAgICAgICAgICAgICAgICAxMCA9PiAnMTAnLAogICAgICAgICAgICAgICAgMTUgPT4gJzE1JywKICAgICAgICAgICAgICAgIDIwID0+ICcyMCcsCiAgICAgICAgICAgICAgICAyNSA9PiAnMjUnLAogICAgICAgICAgICAgICAgMzAgPT4gJzMwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNlbGYtPntQYWdlU2hvd259LAogICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBAUGFyYW1zOwp9CgpzdWIgQ29uZmlnIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICgKICAgICAgICAleyAkU2VsZi0+e0NvbmZpZ30gfSwKCiAgICAgICAgIyBSZW1lbWJlciwgZG8gbm90IGFsbG93IHRvIHVzZSBwYWdlIGNhY2hlCiAgICAgICAgIyAoaXQncyBub3Qgd29ya2luZyBiZWNhdXNlIG9mIGludGVybmFsIGZpbHRlcikKICAgICAgICBDYWNoZUtleSA9PiB1bmRlZiwKICAgICAgICBDYWNoZVRUTCA9PiB1bmRlZiwKICAgICk7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIEdldCBwYXJhbSBvYmplY3QuCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBHZXQgbGF5b3V0IG9iamVjdC4KICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBHZXQgc29ydGluZyBwYXJhbWV0ZXJzLgogICAgJFBhcmFte1NvcnRCeX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApIHx8ICdOdW1iZXInOwoKICAgICMgR2V0IG9yZGVyaW5nIHBhcmFtZXRlcnMuCiAgICAkUGFyYW17T3JkZXJCeX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKSB8fCAnVXAnOwoKICAgICMgU2V0IFNvcnQgYW5kIE9yZGVyIGJ5IGFzIEFycmF5cy4KICAgIG15IEBTb3J0QnlBcnJheSAgPSAoICRQYXJhbXtTb3J0Qnl9ICk7CiAgICBteSBAT3JkZXJCeUFycmF5ID0gKCAkUGFyYW17T3JkZXJCeX0gKTsKCiAgICAjIEdldCBnZW5lcmFsIGNhdGFsb2cgb2JqZWN0LgogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CgogICAgIyBHZXQgY2xhc3MgbGlzdC4KICAgIG15ICRDbGFzc0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgVG8gc3RvcmUgdGhlIGNvbG9yIGZvciB0aGUgZGVwbG95bWVudCBzdGF0ZXMuCiAgICBteSAlRGVwbFNpZ25hbHM7CgogICAgIyBHZXQgbGlzdCBvZiBkZXBsb3ltZW50IHN0YXRlcy4KICAgIG15ICREZXBsb3ltZW50U3RhdGVzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgICMgU2V0IGRlcGxveW1lbnQgc3R5bGUgY29sb3JzLgogICAgbXkgJFN0eWxlQ2xhc3NlcyA9ICcnOwoKICAgICMgVG8gc3RvcmUgZGVwbCBzdGF0ZSBpZHMuCiAgICBteSAkRGVwbFN0YXRlSURzOwoKICAgIElURU1JRDoKICAgIGZvciBteSAkSXRlbUlEICggc29ydCBrZXlzICV7JERlcGxveW1lbnRTdGF0ZXNMaXN0fSApIHsKCiAgICAgICAgIyBHZXQgZGVwbG95bWVudCBzdGF0ZSBwcmVmZXJlbmNlcy4KICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgaWYgYSBjb2xvciBpcyBkZWZpbmVkIGluIHByZWZlcmVuY2VzLgogICAgICAgIG5leHQgSVRFTUlEIGlmICEkUHJlZmVyZW5jZXN7Q29sb3J9OwoKICAgICAgICAjIEdldCBkZXBsb3ltZW50IHN0YXRlLgogICAgICAgIG15ICREZXBsU3RhdGUgPSAkRGVwbG95bWVudFN0YXRlc0xpc3QtPnskSXRlbUlEfTsKCiAgICAgICAgIyBSZW1vdmUgYW55IG5vbiBhc2NpaSB3b3JkIGNoYXJhY3RlcnMuCiAgICAgICAgJERlcGxTdGF0ZSA9fiBzeyBbXmEtekEtWjAtOV0gfXtffW1zeGc7CgogICAgICAgICMgU3RvcmUgdGhlIG9yaWdpbmFsIGRlcGxveW1lbnQgc3RhdGUgYXMga2V5CiAgICAgICAgIyBhbmQgdGhlIHNzIHNhZmUgY292ZXJ0ZWQgZGVwbG95bWVudCBzdGF0ZSBhcyB2YWx1ZS4KICAgICAgICAkRGVwbFNpZ25hbHN7ICREZXBsb3ltZW50U3RhdGVzTGlzdC0+eyRJdGVtSUR9IH0gPSAkRGVwbFN0YXRlOwoKICAgICAgICAjIENvbnZlcnQgdG8gbG93ZXIgY2FzZS4KICAgICAgICBteSAkRGVwbFN0YXRlQ29sb3IgPSBsYyAkUHJlZmVyZW5jZXN7Q29sb3J9OwoKICAgICAgICAjIEFkZCB0byBzdHlsZSBjbGFzc2VzIHN0cmluZy4KICAgICAgICAkU3R5bGVDbGFzc2VzIC49ICIKICAgICAgICAgICAgLkZsYWcgc3Bhbi4kRGVwbFN0YXRlIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMkRGVwbFN0YXRlQ29sb3I7CiAgICAgICAgICAgIH0KICAgICAgICAiOwoKICAgICAgICAjIFNldCBkZXBsIHN0YXRlIGlkcy4KICAgICAgICBwdXNoIEB7JERlcGxTdGF0ZUlEc30sICRJdGVtSUQ7CiAgICB9CgogICAgIyBXcmFwIGludG8gc3R5bGUgdGFncy4KICAgIGlmICgkU3R5bGVDbGFzc2VzKSB7CiAgICAgICAgJFN0eWxlQ2xhc3NlcyA9ICI8c3R5bGU+JFN0eWxlQ2xhc3Nlczwvc3R5bGU+IjsKICAgIH0KCiAgICAjIFRvIHN0b3JlIHRoZSBkZWZhdWx0IGNsYXNzLgogICAgbXkgJENsYXNzSURBdXRvID0gJyc7CgogICAgIyBUbyBzdG9yZSB0aGUgTmF2QmFyIGZpbHRlcnMuCiAgICBteSAlRmlsdGVyczsKCiAgICAjIERlZmluZSBwb3NpdGlvbiBvZiB0aGUgZmlsdGVyIGluIHRoZSBmcm9udGVuZC4KICAgIG15ICRQcmlvQ291bnRlciA9IDEwMDA7CgogICAgIyBUbyBzdG9yZSB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbmZpZyBpdGVtcyBpbiBhbGwgY2xhc3NlcyB0aGF0IHRoZSB1c2VyIGhhcyBhY2Nlc3MuCiAgICBteSAkVG90YWxDb3VudDsKCiAgICAjIFRvIHN0b3JlIGFsbCB0aGUgY2xhc2VzIHRoYXQgdGhlIHVzZXIgaGFzIGFjY2VzcywgdXNlZCBpbiBzZWFyY2ggZm9yIGZpbHRlciAnQWxsJy4KICAgIG15ICRBY2Nlc3NDbGFzc0xpc3Q7CgogICAgIyBHZXQgY29uZmlnIGl0ZW0gb2JqZWN0LgogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICAjIERlZmluZSBpbmNpZGVudCBzaWduYWxzLCBuZWVkZWQgZm9yIHNlcnZpY2VzLgogICAgbXkgJUluY2lTaWduYWxzID0gKAogICAgICAgIFRyYW5zbGF0YWJsZSgnb3BlcmF0aW9uYWwnKSA9PiAnZ3JlZW5sZWQnLAogICAgICAgIFRyYW5zbGF0YWJsZSgnd2FybmluZycpICAgICA9PiAneWVsbG93bGVkJywKICAgICAgICBUcmFuc2xhdGFibGUoJ2luY2lkZW50JykgICAgPT4gJ3JlZGxlZCcsCiAgICApOwoKICAgIENMQVNTSUQ6CiAgICBmb3IgbXkgJENsYXNzSUQgKCBzb3J0IHsgJHskQ2xhc3NMaXN0fXskYX0gY21wICR7JENsYXNzTGlzdH17JGJ9IH0ga2V5cyAleyRDbGFzc0xpc3R9ICkgewoKICAgICAgICAjIENoZWNrIHBlcm1pc3Npb24uCiAgICAgICAgbXkgJEhhc0FjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBTY29wZSAgID0+ICdDbGFzcycsCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgICk7CgogICAgICAgIG5leHQgQ0xBU1NJRCBpZiAhJEhhc0FjY2VzczsKCiAgICAgICAgIyBJbnNlcnQgdGhpcyBjbGFzcyB0byBiZSBwYXNzZWQgYXMgc2VhcmNoIHBhcmFtZXRlciBmb3IgZmlsdGVyICdBbGwnLgogICAgICAgIHB1c2ggQHskQWNjZXNzQ2xhc3NMaXN0fSwgJENsYXNzSUQ7CgogICAgICAgICMgSW5jcmVhc2UgdGhlIFByaW9Db3VudGVyLgogICAgICAgICRQcmlvQ291bnRlcisrOwoKICAgICAgICAjIEFkZCBmaWx0ZXIgd2l0aCBwYXJhbXMgZm9yIHRoZSBzZWFyY2ggbWV0aG9kLgogICAgICAgICRGaWx0ZXJzeyRDbGFzc0lEfSA9IHsKICAgICAgICAgICAgTmFtZSAgID0+ICRDbGFzc0xpc3QtPnskQ2xhc3NJRH0sCiAgICAgICAgICAgIFByaW8gICA9PiAkUHJpb0NvdW50ZXIsCiAgICAgICAgICAgIFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEcyAgICAgICAgID0+IFskQ2xhc3NJRF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRHMgICAgID0+ICREZXBsU3RhdGVJRHMsCiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFxAU29ydEJ5QXJyYXksCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeUFycmF5LAogICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAkU2VsZi0+e1NlYXJjaExpbWl0fSwKICAgICAgICAgICAgfSwKICAgICAgICB9OwoKICAgICAgICAjIFJlbWVtYmVyIHRoZSBmaXJzdCBjbGFzcyBpZCB0byBzaG93IHRoaXMgaW4gdGhlIG92ZXJ2aWV3CiAgICAgICAgIyBpZiBubyBjbGFzcyBpZCB3YXMgZ2l2ZW4uCiAgICAgICAgaWYgKCAhJENsYXNzSURBdXRvICkgewogICAgICAgICAgICAkQ2xhc3NJREF1dG8gPSAkQ2xhc3NJRDsKICAgICAgICB9CiAgICB9CgogICAgIyBJZiBvbmx5IG9uZSBmaWx0ZXIgZXhpc3RzLgogICAgaWYgKCBzY2FsYXIga2V5cyAlRmlsdGVycyA9PSAxICkgewoKICAgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgb25seSBmaWx0ZXIuCiAgICAgICAgbXkgKCRGaWx0ZXJLZXkpID0ga2V5cyAlRmlsdGVyczsKCiAgICAgICAgIyBBY3RpdmF0ZSB0aGlzIGZpbHRlci4KICAgICAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkRmlsdGVyc3skRmlsdGVyS2V5fS0+e05hbWV9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgQWRkIGRlZmF1bHQgZmlsdGVyLCB3aGljaCBzaG93cyBhbGwgaXRlbXMuCiAgICAgICAgJEZpbHRlcnN7QWxsfSA9IHsKICAgICAgICAgICAgTmFtZSAgID0+ICdBbGwnLAogICAgICAgICAgICBQcmlvICAgPT4gMTAwMCwKICAgICAgICAgICAgU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSURzICAgICAgICAgPT4gJEFjY2Vzc0NsYXNzTGlzdCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEcyAgICAgPT4gJERlcGxTdGF0ZUlEcywKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gXEBTb3J0QnlBcnJheSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gXEBPcmRlckJ5QXJyYXksCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgICAgICB9LAogICAgICAgIH07CgogICAgICAgICMgSWYgbm8gZmlsdGVyIHdhcyBzZWxlY3RlZCBhY3RpdmF0ZSB0aGUgZmlsdGVyIGZvciB0aGUgZGVmYXVsdCBjbGFzcy4KICAgICAgICBpZiAoICEkU2VsZi0+e0ZpbHRlcn0gKSB7CiAgICAgICAgICAgICRTZWxmLT57RmlsdGVyfSA9ICRDbGFzc0lEQXV0bzsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgZ2l2ZW4gZmlsdGVycy4KICAgIG15IEBOYXZCYXJGaWx0ZXJzOwogICAgZm9yIG15ICRQcmlvICggc29ydCBrZXlzICVGaWx0ZXJzICkgewogICAgICAgIHB1c2ggQE5hdkJhckZpbHRlcnMsICRGaWx0ZXJzeyRQcmlvfTsKICAgIH0KCiAgICAjIFNvcnQgYWNjb3JkaW5nIHRvIHByaW8uCiAgICBATmF2QmFyRmlsdGVycyA9IHNvcnQgeyAkYS0+e1ByaW99IDw9PiAkYi0+e1ByaW99IH0gQE5hdkJhckZpbHRlcnM7CgogICAgIyBGaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bi4KICAgIG15IEBTaG93Q29sdW1uczsKICAgIG15IEBYTUxTaG93Q29sdW1uczsKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57RGVmYXVsdENvbHVtbnN9ICkgewoKICAgICAgICAjIEdldCBhbGwgcG9zc2libGUgY29sdW1ucyBmcm9tIGNvbmZpZy4KICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntEZWZhdWx0Q29sdW1uc30gfTsKCiAgICAgICAgIyBTaG93IGNvbHVtbiAiQ2xhc3MiIGlmIGZpbHRlciAnQWxsJyBpcyBzZWxlY3RlZC4KICAgICAgICBpZiAoICRTZWxmLT57RmlsdGVyfSBlcSAnQWxsJyApIHsKICAgICAgICAgICAgJFBvc3NpYmxlQ29sdW1ue0NsYXNzfSA9ICcxJzsKICAgICAgICB9CgogICAgICAgICMgR2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24uCiAgICAgICAgQ09MVU1OTkFNRToKICAgICAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJVBvc3NpYmxlQ29sdW1uICkgewogICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkTmFtZTsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgZnJvbnRlbmQgY29uZmlnLgogICAgbXkgKCRNb2R1bGUpID0gJFNlbGYtPntBY3Rpb259ID1+IG17XkFnZW50KC4qKX14bXM7CiAgICBteSAkU2hvd0NvbHVtbnNCeUNsYXNzQ29uZmlnCiAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoICdGcm9udGVuZDo6QWdlbnQ6OicgLiAkTW9kdWxlIC4gJzo6SVRTTUNvbmZpZ0l0ZW0nICk7CgogICAgbXkgJFNob3dDb2x1bW5zQnlDbGFzcyA9ICRTaG93Q29sdW1uc0J5Q2xhc3NDb25maWctPntTaG93Q29sdW1uc0J5Q2xhc3N9IC8vICcnOwoKICAgICMgR2V0IHRoZSBjb25maWd1cmVkIGNvbHVtbnMgYW5kIHJlb3JnYW5pemUgdGhlbSBieSBjbGFzcyBuYW1lLgogICAgaWYgKAogICAgICAgIElzQXJyYXlSZWZXaXRoRGF0YSgkU2hvd0NvbHVtbnNCeUNsYXNzKQogICAgICAgICYmICRTZWxmLT57RmlsdGVyfQogICAgICAgICYmICRTZWxmLT57RmlsdGVyfSBuZSAnQWxsJwogICAgICAgICkKICAgIHsKCiAgICAgICAgbXkgJUNvbHVtbkJ5Q2xhc3M7CiAgICAgICAgTkFNRToKICAgICAgICBmb3IgbXkgJE5hbWUgKCBAeyRTaG93Q29sdW1uc0J5Q2xhc3N9ICkgewogICAgICAgICAgICBteSAoICRDbGFzcywgJENvbHVtbiApID0gc3BsaXQgLzo6LywgJE5hbWUsIDI7CgogICAgICAgICAgICBuZXh0IE5BTUUgaWYgISRDb2x1bW47CgogICAgICAgICAgICBwdXNoIEB7ICRDb2x1bW5CeUNsYXNzeyRDbGFzc30gfSwgJENvbHVtbjsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgaWYgdGhlcmUgaXMgYSBzcGVjaWZpYyBjb2x1bW4gY29uZmlnIGZvciB0aGUgc2VsZWN0ZWQgY2xhc3MuCiAgICAgICAgaWYgKCAkQ29sdW1uQnlDbGFzc3sgJFNlbGYtPntGaWx0ZXJ9IH0gKSB7CiAgICAgICAgICAgIEBTaG93Q29sdW1ucyA9IEB7ICRDb2x1bW5CeUNsYXNzeyAkU2VsZi0+e0ZpbHRlcn0gfSB9OwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoQFNob3dDb2x1bW5zKSB7CgogICAgICAgIGZvciBteSAkQ29sdW1uIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICMgQ3JlYXRlIG5lZWRlZCB2ZXJpYWJsZXMuCiAgICAgICAgICAgIG15ICRDU1MgPSAnT3ZlcnZpZXdIZWFkZXInOwogICAgICAgICAgICBteSAkT3JkZXJCeTsKCiAgICAgICAgICAgICMgUmVtb3ZlIElEIGlmIG5lY2VzYXJ5LgogICAgICAgICAgICBpZiAoICRQYXJhbXtTb3J0Qnl9ICkgewogICAgICAgICAgICAgICAgJFBhcmFte1NvcnRCeX0gPSAoICRQYXJhbXtTb3J0Qnl9IGVxICdJbmNpU3RhdGVJRCcgKQogICAgICAgICAgICAgICAgICAgID8gJ0N1ckluY2lTdGF0ZScKICAgICAgICAgICAgICAgICAgICA6ICggJFBhcmFte1NvcnRCeX0gZXEgJ0RlcGxTdGF0ZUlEJyApID8gJ0N1ckRlcGxTdGF0ZScKICAgICAgICAgICAgICAgICAgICA6ICggJFBhcmFte1NvcnRCeX0gZXEgJ0NsYXNzSUQnICkgICAgID8gJ0NsYXNzJwogICAgICAgICAgICAgICAgICAgIDogKCAkUGFyYW17U29ydEJ5fSBlcSAnQ2hhbmdlVGltZScgKSAgPyAnTGFzdENoYW5nZWQnCiAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtTb3J0Qnl9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFNldCB0aGUgY29ycmVjdCBTZXQgQ1NTIGNsYXNzIGFuZCBvcmRlciBieSBsaW5rLgogICAgICAgICAgICBpZiAoICRQYXJhbXtTb3J0Qnl9ICYmICggJFBhcmFte1NvcnRCeX0gZXEgJENvbHVtbiApICkgewogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeX0gJiYgKCAkUGFyYW17T3JkZXJCeX0gZXEgJ1VwJyApICkgewogICAgICAgICAgICAgICAgICAgICRPcmRlckJ5ID0gJ0Rvd24nOwogICAgICAgICAgICAgICAgICAgICRDU1MgLj0gJyBTb3J0RGVzY2VuZGluZ0xhcmdlJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRPcmRlckJ5ID0gJ1VwJzsKICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydEFzY2VuZGluZ0xhcmdlJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRPcmRlckJ5ID0gJ1VwJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTZXQgY29sdW1uLgogICAgICAgICAgICAkUGFyYW17Q29sdW1ufSA9ICRDb2x1bW47CgogICAgICAgICAgICAjIENyZWF0ZSBoZWFkZXIgYmxvY2suCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnSGVhZGVyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBDU1MgICAgID0+ICRDU1MsCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSA9PiAkT3JkZXJCeSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IGFzc2lnbmVkIGNvbmZpZyBpdGVtcyAodG8gY3VzdG9tZXIgb3IgY3VzdG9tZXIgdXNlcikuCiAgICBteSAkQXNzaWduZWRDSXMgPSAkU2VsZi0+X0Fzc2lnbmVkQ0lzR2V0KAogICAgICAgIEZpbHRlciA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICApOwogICAgbXkgQEFzc2lnbmVkQ29uZmlnSXRlbUlEcyA9IEB7ICRBc3NpZ25lZENJcy0+e0NvbmZpZ0l0ZW1JRHN9IH07CgogICAgIyBHZXQgYWxsIGFzc2lnbmVkIGNvbmZpZyBpdGVtcyBmb3IgY291bnQuCiAgICBteSAkQ291bnRDSXMgPSAkU2VsZi0+X0Fzc2lnbmVkQ0lzR2V0KAogICAgICAgIEZpbHRlciA9PiAnQWxsJywKICAgICAgICBDb3VudCAgPT4gMSwKICAgICk7CgogICAgIyBDcmVhdGUgc2VhcmNoIHdpdGggc29ydGluZyBwYXJhbWV0ZXJzLgogICAgbXkgJEFzc2lnbmVkQ29uZmlnSXRlbUlEczsKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCBcQEFzc2lnbmVkQ29uZmlnSXRlbUlEcyApICkgewogICAgICAgICRBc3NpZ25lZENvbmZpZ0l0ZW1JRHMgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbVNlYXJjaCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEcyAgICA9PiBcQEFzc2lnbmVkQ29uZmlnSXRlbUlEcywKICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeUFycmF5LAogICAgICAgICk7CiAgICB9CgogICAgIyBDbGVhciBvbGQgYXJyYXkgYW5kIHB1c2ggbmV3IGRhdGEuCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkQXNzaWduZWRDb25maWdJdGVtSURzKSApIHsKCiAgICAgICAgQEFzc2lnbmVkQ29uZmlnSXRlbUlEcyA9ICgpOwogICAgICAgIHB1c2ggQEFzc2lnbmVkQ29uZmlnSXRlbUlEcywgQHskQXNzaWduZWRDb25maWdJdGVtSURzfTsKICAgIH0KCiAgICBpZiAoQFNob3dDb2x1bW5zKSB7CgogICAgICAgICMgR2V0IHRoZSBYTUwgY29sdW1uIGhlYWRlcnMgb25seSBpZiB0aGUgZmlsdGVyIGlzIG5vdCBzZXQgdG8gJ2FsbCcKICAgICAgICAjIGFuZCBpZiB0aGVyZSBhcmUgQ0lzIHRvIHNob3cuCiAgICAgICAgaWYgKCAkU2VsZi0+e0ZpbHRlcn0gJiYgJFNlbGYtPntGaWx0ZXJ9IG5lICdBbGwnICYmIEBBc3NpZ25lZENvbmZpZ0l0ZW1JRHMgKSB7CgogICAgICAgICAgICAjIEdldCB0aGUgdmVyc2lvbiBkYXRhIG9mIHRoZSBmaXJzdCBjb25maWcgaXRlbSwgaW5jbHVkaW5nIGFsbCB0aGUgWE1MIGRhdGEKICAgICAgICAgICAgIyB0byBnZXQgdGhlIGNvbHVtbiBoZWFkZXIgbmFtZXMuCiAgICAgICAgICAgIG15ICRDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJEFzc2lnbmVkQ29uZmlnSXRlbUlEc1swXSwKICAgICAgICAgICAgICAgIFhNTERhdGFHZXQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBDb252ZXJ0IHRoZSBYTUwgZGF0YSBpbnRvIGEgaGFzaC4KICAgICAgICAgICAgbXkgJEV4dGVuZGVkVmVyc2lvbkRhdGEgPSAkTGF5b3V0T2JqZWN0LT5YTUxEYXRhMkhhc2goCiAgICAgICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRDb25maWdJdGVtLT57WE1MRGVmaW5pdGlvbn0sCiAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRDb25maWdJdGVtLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzICAgID0+IFxAU2hvd0NvbHVtbnMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEdldCB0aGUgeG1sIGNvbHVtbnMgKHRoZXkgY29udGFpbiA6OikuCiAgICAgICAgICAgIEBYTUxTaG93Q29sdW1ucyA9IGdyZXAgey86Oi99IEBTaG93Q29sdW1uczsKCiAgICAgICAgICAgIENPTFVNTjoKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBYTUxTaG93Q29sdW1ucykgewoKICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgY29sdW1uIGV4aXN0cyBpbiBDSS1EYXRhLgogICAgICAgICAgICAgICAgbmV4dCBDT0xVTU4gaWYgISRFeHRlbmRlZFZlcnNpb25EYXRhLT57JENvbHVtbn0tPntOYW1lfTsKCiAgICAgICAgICAgICAgICAjIFNob3cgdGhlIHhtbCBhdHRyaWJ1dGUgaGVhZGVyLgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkWE1MQXR0cmlidXRlSGVhZGVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBYTUxBdHRyaWJ1dGVIZWFkZXIgPT4gJEV4dGVuZGVkVmVyc2lvbkRhdGEtPnskQ29sdW1ufS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgQnVpbGQgZmlsdGVyIGNvbnRlbnQuCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVGaWx0ZXJzLAogICAgICAgIH0sCiAgICApOwoKICAgICMgU2V0IHN1bW1hcnkgZm9yIHBhZ2UgbmF2LgogICAgbXkgJVN1bW1hcnk7CgogICAgIyBMb29wIG92ZXIgZmlsdGVycy4KICAgIG15ICRDb3VudCA9IDA7CiAgICBGSUxURVI6CiAgICBmb3IgbXkgJEZpbHRlciAoQE5hdkJhckZpbHRlcnMpIHsKCiAgICAgICAgIyBHZXQgY291bnQgYnkgYXNzaWduZWQgY29uZmlnIGl0ZW0gaWRzLgogICAgICAgICRGaWx0ZXItPntDb3VudH0gPSAkQ291bnRDSXMtPnsgJEZpbHRlci0+e05hbWV9IH0gLy8gJzAnOwoKICAgICAgICAkQ291bnQrKzsKICAgICAgICBpZiAoICRDb3VudCA9PSBzY2FsYXIgQE5hdkJhckZpbHRlcnMgKSB7CiAgICAgICAgICAgICRGaWx0ZXItPntDU1N9ID0gJ0xhc3QnOwogICAgICAgIH0KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyRGaWx0ZXJ9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgaWYgKCAkRmlsdGVyLT57TmFtZX0gZXEgJFNlbGYtPntGaWx0ZXJ9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyRGaWx0ZXJ9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBBZGQgZmlsdGVyIHRvIG5ldyBoYXNoLgogICAgICAgICRTdW1tYXJ5eyAkRmlsdGVyLT57TmFtZX0gfSA9IFwleyRGaWx0ZXJ9OwogICAgfQoKICAgICMgQWRkIHBhZ2UgbmF2IGJhci4KICAgIG15ICRUb3RhbCA9ICRTdW1tYXJ5eyAkU2VsZi0+e0ZpbHRlcn0gfS0+e0NvdW50fSB8fCAwOwoKICAgIG15ICRMaW5rUGFnZSA9CiAgICAgICAgJ1N1YmFjdGlvbj1FbGVtZW50O05hbWU9JyAuICRTZWxmLT57TmFtZX0KICAgICAgICAuICc7RmlsdGVyPScgLiAkU2VsZi0+e0ZpbHRlcn0KICAgICAgICAuICc7U29ydEJ5PScgLiAgKCAkUGFyYW17U29ydEJ5fSAgfHwgJycgKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAoICRQYXJhbXtPcmRlckJ5fSB8fCAnJyApCiAgICAgICAgLiAnOyc7CgogICAgaWYgKCAkUGFyYW17Q3VzdG9tZXJJRH0gKSB7CiAgICAgICAgJExpbmtQYWdlIC49ICdDdXN0b21lcklEPScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCAkUGFyYW17Q3VzdG9tZXJJRH0gKSAuICc7JzsKICAgIH0KICAgIGlmICggJFBhcmFte0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAkTGlua1BhZ2UgLj0gJ0N1c3RvbWVyVXNlcklEPScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCAkUGFyYW17Q3VzdG9tZXJVc2VySUR9ICkgLiAnOyc7CiAgICB9CgogICAgbXkgJVBhZ2VOYXYgPSAkTGF5b3V0T2JqZWN0LT5QYWdlTmF2QmFyKAogICAgICAgIFN0YXJ0SGl0ICAgID0+ICRTZWxmLT57U3RhcnRIaXR9LAogICAgICAgIFBhZ2VTaG93biAgID0+ICRTZWxmLT57UGFnZVNob3dufSwKICAgICAgICBBbGxIaXRzICAgICA9PiAkVG90YWwgfHwgMSwKICAgICAgICBBY3Rpb24gICAgICA9PiAnQWN0aW9uPScgLiAkTGF5b3V0T2JqZWN0LT57QWN0aW9ufSwKICAgICAgICBMaW5rICAgICAgICA9PiAkTGlua1BhZ2UsCiAgICAgICAgQUpBWFJlcGxhY2UgPT4gJ0Rhc2hib2FyZCcgLiAkU2VsZi0+e05hbWV9LAogICAgICAgIElEUHJlZml4ICAgID0+ICdEYXNoYm9hcmQnIC4gJFNlbGYtPntOYW1lfSwKICAgICAgICBBSkFYICAgICAgICA9PiAkUGFyYW17QUpBWH0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0NvbnRlbnRMYXJnZUlUU01Db25maWdJdGVtR2VuZXJpY0ZpbHRlck5hdkJhcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAogICAgICAgICAgICBOYW1lID0+ICRTZWxmLT57TmFtZX0sCiAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgIH0sCiAgICApOwoKICAgICMgU2hvdyBjb25maWcgaXRlbXMgaWYgdGhlcmUgYXJlIHNvbWUuCiAgICBteSAkQ291bnRlciA9IDA7CiAgICBpZiAoQEFzc2lnbmVkQ29uZmlnSXRlbUlEcykgewoKICAgICAgICAjIFRvIHN0b3JlIGFsbCBkYXRhLgogICAgICAgIG15ICVEYXRhOwoKICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKEBBc3NpZ25lZENvbmZpZ0l0ZW1JRHMpIHsKICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFNlbGYtPntTdGFydEhpdH0KICAgICAgICAgICAgICAgICYmICRDb3VudGVyIDwgKCAkU2VsZi0+e1BhZ2VTaG93bn0gKyAkU2VsZi0+e1N0YXJ0SGl0fSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIEdldCBjb25maWcgaXRlbSBkYXRhLgogICAgICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW0gPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhR2V0ICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRDb25maWdJdGVtOwoKICAgICAgICAgICAgICAgICMgQ29udmVydCB0aGUgWE1MIGRhdGEgaW50byBhIGhhc2guCiAgICAgICAgICAgICAgICBteSAkRXh0ZW5kZWRWZXJzaW9uRGF0YSA9ICRMYXlvdXRPYmplY3QtPlhNTERhdGEySGFzaCgKICAgICAgICAgICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRDb25maWdJdGVtLT57WE1MRGVmaW5pdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICA9PiAkQ29uZmlnSXRlbS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdLAogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMgICAgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBTdG9yZSBjb25maWcgaXRlbSBkYXRhLgogICAgICAgICAgICAgICAgJURhdGEgPSAleyRDb25maWdJdGVtfTsKCiAgICAgICAgICAgICAgICAjIEJ1aWxkIHJlY29yZCBibG9jay4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBCdWlsZCBjb2x1bW4gcmVjb3JkIGJsb2Nrcy4KICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ29sdW1uIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJERhdGF7Q3VySW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU2lnbmFsID0+ICREZXBsU2lnbmFsc3sgJERhdGF7Q3VyRGVwbFN0YXRlfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgU2hvdyBsaW5rcyBpZiBhdmFpbGFibGUuCiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnTGlua1N0YXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnTGlua0VuZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ29sdW1uIChAWE1MU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgY29sdW1uIGV4aXN0cyBpbiBDSS1EYXRhLgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENPTFVNTiBpZiAhJEV4dGVuZGVkVmVyc2lvbkRhdGEtPnskQ29sdW1ufS0+e05hbWV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBDb252ZXJ0IHRvIGFzY2lpIHRleHQgaW4gY2FzZSB0aGUgdmFsdWUgY29udGFpbnMgaHRtbC4KICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPlRvQXNjaWkoIFN0cmluZyA9PiAkRXh0ZW5kZWRWZXJzaW9uRGF0YS0+eyRDb2x1bW59LT57VmFsdWV9IC8vICcnICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcnOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBDb252ZXJ0IGFsbCB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lcyB0byBzaW5nbGUgc3BhY2VzLgogICAgICAgICAgICAgICAgICAgICAgICAkVmFsdWUgPX4gc3sgXHMrIH17IH1neG1zOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBTaG93IHRoZSB4bWwgYXR0cmlidXRlIGRhdGEuCiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkWE1MQXR0cmlidXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxBdHRyaWJ1dGVEYXRhID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZyBpdGVtcyB0byBzaG93LCBhIG5vIGRhdGEgZm91bmQgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLgogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUb3RhbENvbHVtbnMgPT4gc2NhbGFyIEBTaG93Q29sdW1ucywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICROYW1lSFRNTCA9ICRTZWxmLT57TmFtZX07CiAgICAkTmFtZUhUTUwgPX4gc3stfXtffXhtc2c7CgogICAgIyBTZW5kIGRhdGEgdG8gSlMuCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ0lUU01Db25maWdJdGVtR2VuZXJpYycsCiAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VsZi0+e05hbWV9LAogICAgICAgICAgICBOYW1lSFRNTCA9PiAkTmFtZUhUTUwsCiAgICAgICAgfSwKICAgICk7CgogICAgbXkgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudERhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJXsgJFNlbGYtPntDb25maWd9IH0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkU2VsZi0+e05hbWV9LAogICAgICAgICAgICBTdHlsZUNsYXNzZXMgPT4gJFN0eWxlQ2xhc3NlcywKICAgICAgICB9LAogICAgICAgIEFKQVggPT4gJFBhcmFte0FKQVh9LAogICAgKTsKCiAgICByZXR1cm4gJENvbnRlbnQ7Cn0KCnN1YiBfQXNzaWduZWRDSXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIERlZmluZSBjYWNoZSBrZXkuCiAgICBteSAkQ2FjaGVLZXk7CiAgICBpZiAoICRTZWxmLT57Q3VzdG9tZXJJRH0gKSB7CiAgICAgICAgJENhY2hlS2V5ID0gJ0Fzc2lnbmVkQ0lzLScgLiAkUGFyYW17RmlsdGVyfSAuICctJyAuICRTZWxmLT57Q3VzdG9tZXJJRH07CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57Q3VzdG9tZXJVc2VySUR9ICkgewogICAgICAgICRDYWNoZUtleSA9ICdBc3NpZ25lZENJcy0nIC4gJFBhcmFte0ZpbHRlcn0gLiAnLScgLiAkU2VsZi0+e0N1c3RvbWVyVXNlcklEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRDYWNoZUtleSA9ICdBc3NpZ25lZENJcy0nIC4gJFBhcmFte0ZpbHRlcn0gLiAnLScgLiAkU2VsZi0+e1VzZXJJRH07CiAgICB9CgogICAgbXkgJENvbnRlbnQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJ0Rhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYycsCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDb250ZW50IGlmIGRlZmluZWQgJENvbnRlbnQgJiYgJFBhcmFte0NvdW50fTsKCiAgICAjIEdldCB0aGUgZGVmaW5lZCBwYXJhbS4KICAgIG15IEBQYXJhbXMgPSBzcGxpdCAvOy8sICRTZWxmLT57Q29uZmlnfS0+e0F0dHJpYnV0ZXN9OwoKICAgICMgRGVmaW5lIHJlc3VsdC4KICAgIG15IEBDb25maWdJdGVtSURzOwogICAgbXkgJVJlc3VsdDsKCiAgICAjIEdldCBrZXkgZm9yIENJIHNlYXJjaC4KICAgIG15ICRDb25maWdJdGVtS2V5ID0gJFNlbGYtPntDb25maWd9LT57Q29uZmlnSXRlbUtleX0gLy8gJyc7CgogICAgcmV0dXJuIGlmICEkQ29uZmlnSXRlbUtleTsKCiAgICAjIEdldCBjb25maWcgaXRlbSBvYmplY3QuCiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgIFNUUklORzoKICAgIGZvciBteSAkU3RyaW5nIChAUGFyYW1zKSB7CiAgICAgICAgbmV4dCBTVFJJTkcgaWYgISRTdHJpbmc7CiAgICAgICAgbXkgKCAkS2V5LCAkVmFsdWUgKSA9IHNwbGl0IC89LywgJFN0cmluZzsKCiAgICAgICAgaWYgKCAkS2V5IGVxICdDdXN0b21lckNvbXBhbnknICkgewoKICAgICAgICAgICAgQ0xBU1M6CiAgICAgICAgICAgIGZvciBteSAkQ2xhc3MgKCBzb3J0IGtleXMgJXskQ29uZmlnSXRlbUtleX0gKSB7CgogICAgICAgICAgICAgICAgIyBTa2lwIG90aGVyIGNsYXNzZXMgaWYgZmlsdGVyIGlzIHNldC4KICAgICAgICAgICAgICAgIG5leHQgQ0xBU1MgaWYgJFBhcmFte0ZpbHRlcn0gJiYgKCAkUGFyYW17RmlsdGVyfSBuZSAkQ2xhc3MgJiYgJFBhcmFte0ZpbHRlcn0gbmUgJ0FsbCcgKTsKCiAgICAgICAgICAgICAgICBteSAkQ2xhc3NJRCA9ICRTZWxmLT5fQ2xhc3NJREJ5TmFtZUdldCgKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgU2tpcCBpZiB3ZSBoYXZlIG5vIGNsYXNzIGlkLgogICAgICAgICAgICAgICAgbmV4dCBDTEFTUyBpZiAhJENsYXNzSUQ7CgogICAgICAgICAgICAgICAgbXkgQFNlYXJjaEtleSA9ICgKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnJENvbmZpZ0l0ZW1LZXktPnskQ2xhc3N9J31bJV17J0NvbnRlbnQnfSIgPT4gJFNlbGYtPntDdXN0b21lcklEfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgUGVyZm9ybSBjb25maWcgaXRlbSBzZWFyY2ggKGV4dGVuZGVkKS4KICAgICAgICAgICAgICAgIG15ICRDb25maWdJdGVtSURzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgKICAgICAgICAgICAgICAgICAgICBDbGFzc0lEcyA9PiBbJENsYXNzSURdLAogICAgICAgICAgICAgICAgICAgIFdoYXQgICAgID0+IFxAU2VhcmNoS2V5LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IENMQVNTIGlmICFJc0FycmF5UmVmV2l0aERhdGEoJENvbmZpZ0l0ZW1JRHMpOwoKICAgICAgICAgICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1JRHMsIEB7JENvbmZpZ0l0ZW1JRHN9OwoKICAgICAgICAgICAgICAgICMgQ291bnQgY29uZmlnIGl0ZW1zIHBlciBjbGFzcy4KICAgICAgICAgICAgICAgIGlmICggJFBhcmFte0NvdW50fSApIHsKICAgICAgICAgICAgICAgICAgICAkUmVzdWx0eyRDbGFzc30gPSBzY2FsYXIgQHskQ29uZmlnSXRlbUlEc307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkS2V5IGVxICdDdXN0b21lcicgKSB7CgogICAgICAgICAgICBDTEFTUzoKICAgICAgICAgICAgZm9yIG15ICRDbGFzcyAoIHNvcnQga2V5cyAleyRDb25maWdJdGVtS2V5fSApIHsKCiAgICAgICAgICAgICAgICAjIFNraXAgb3RoZXIgY2xhc3NlcyBpZiBmaWx0ZXIgaXMgc2V0LgogICAgICAgICAgICAgICAgbmV4dCBDTEFTUyBpZiAkUGFyYW17RmlsdGVyfSAmJiAoICRQYXJhbXtGaWx0ZXJ9IG5lICRDbGFzcyAmJiAkUGFyYW17RmlsdGVyfSBuZSAnQWxsJyApOwoKICAgICAgICAgICAgICAgIG15ICRDbGFzc0lEID0gJFNlbGYtPl9DbGFzc0lEQnlOYW1lR2V0KAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBTa2lwIGlmIHdlIGhhdmUgbm8gY2xhc3MgaWQuCiAgICAgICAgICAgICAgICBuZXh0IENMQVNTIGlmICEkQ2xhc3NJRDsKCiAgICAgICAgICAgICAgICBteSBAU2VhcmNoS2V5ID0gKAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeyckQ29uZmlnSXRlbUtleS0+eyRDbGFzc30nfVslXXsnQ29udGVudCd9IiA9PiAkU2VsZi0+e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgUGVyZm9ybSBjb25maWcgaXRlbSBzZWFyY2ggKGV4dGVuZGVkKS4KICAgICAgICAgICAgICAgIG15ICRDb25maWdJdGVtSURzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgKICAgICAgICAgICAgICAgICAgICBDbGFzc0lEcyA9PiBbJENsYXNzSURdLAogICAgICAgICAgICAgICAgICAgIFdoYXQgICAgID0+IFxAU2VhcmNoS2V5LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IENMQVNTIGlmICFJc0FycmF5UmVmV2l0aERhdGEoJENvbmZpZ0l0ZW1JRHMpOwoKICAgICAgICAgICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1JRHMsIEB7JENvbmZpZ0l0ZW1JRHN9OwoKICAgICAgICAgICAgICAgICMgQ291bnQgY29uZmlnIGl0ZW1zIHBlciBjbGFzcy4KICAgICAgICAgICAgICAgIGlmICggJFBhcmFte0NvdW50fSApIHsKICAgICAgICAgICAgICAgICAgICAkUmVzdWx0eyRDbGFzc30gPSBzY2FsYXIgQHskQ29uZmlnSXRlbUlEc307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDdXN0b21lckNvbXBhbnkgb3IgQ3VzdG9tZXIgYXMgYXR0cmlidXRlLicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBSZW1vdmUgZHVwbGljYXRlZCBjb25maWcgaXRlbSBpZHMuCiAgICBteSAlVGVtcENvbmZpZ0l0ZW1JRHMgPSBtYXAgeyAkXyA9PiAxIH0gQENvbmZpZ0l0ZW1JRHM7CiAgICBAQ29uZmlnSXRlbUlEcyA9IHNvcnQga2V5cyAlVGVtcENvbmZpZ0l0ZW1JRHM7CgogICAgJFJlc3VsdHtDb25maWdJdGVtSURzfSA9IFxAQ29uZmlnSXRlbUlEczsKCiAgICAjIEFkZCBjb3VudCBmb3IgYWxsIGl0ZW1zLgogICAgaWYgKCAkUGFyYW17Q291bnR9ICkgewogICAgICAgICRSZXN1bHR7QWxsfSA9IHNjYWxhciBAQ29uZmlnSXRlbUlEczsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e0NhY2hlVFRMTG9jYWx9ICYmICRQYXJhbXtDb3VudH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0Rhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpYycsCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCVSZXN1bHQsCiAgICAgICAgICAgIFRUTCAgID0+IDIgKiA2MCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiBcJVJlc3VsdDsKfQoKc3ViIF9DbGFzc0lEQnlOYW1lR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBpZiAoICEkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBjbGFzcyBuYW1lISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBHZXQgZ2VuZXJhbCBjYXRhbG9nIG9iamVjdC4KICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICMgR2V0IGNsYXNzIGxpc3QuCiAgICBteSAkQ2xhc3NMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIFJldmVyc2UgY2xhc3MgbGlzdC4KICAgIG15ICVDbGFzc05hbWUySUQgPSByZXZlcnNlICV7JENsYXNzTGlzdH07CgogICAgIyBHZXQgY2xhc3MgaWQuCiAgICBteSAkQ2xhc3NJRCA9ICRDbGFzc05hbWUySUR7ICRQYXJhbXtWYWx1ZX0gfTsKCiAgICByZXR1cm4gaWYgISRDbGFzc0lEOwoKICAgICNJbml0aWF0ZSBwZXJtaXNzaW9uIGNoZWNrLgogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICBteSAkSGFzQWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgU2NvcGUgICA9PiAnQ2xhc3MnLAogICAgICAgIENsYXNzSUQgPT4gJENsYXNzSUQsCiAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVHlwZSAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICk7CiAgICByZXR1cm4gaWYgISRIYXNBY2Nlc3M7CgogICAgIyBSZXR1cm4gY2xhc3MgaWQuCiAgICByZXR1cm4gJENsYXNzSUQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0Q3VzdG9tZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW06OkxheW91dEN1c3RvbWVyIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIGN1c3RvbWVyIG9iamVjdHMKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXRDdXN0b21lci0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIE91dHB1dFN0cmluZ0NyZWF0ZSgpCgpjcmVhdGUgb3V0cHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5PdXRwdXRTdHJpbmdDcmVhdGUoCiAgICAgICAgVmFsdWUgPT4gMTEsICAgICAgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBPdXRwdXRTdHJpbmdDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHRyYW5zZm9ybSBhc2NpaSB0byBodG1sCiAgICAkUGFyYW17VmFsdWV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT5Bc2NpaTJIdG1sKAogICAgICAgIFRleHQgICAgICAgICAgID0+ICRQYXJhbXtWYWx1ZX0gfHwgJycsCiAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICk7CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1oZWFkMiBGb3JtRGF0YUdldCgpCgpnZXQgZm9ybSBkYXRhIGFzIGhhc2ggcmVmZXJlbmNlCgogICAgbXkgJEZvcm1EYXRhUmVmID0gJEJhY2tlbmRPYmplY3QtPkZvcm1EYXRhR2V0KAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVGb3JtRGF0YTsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBzZWxlY3RlZCBjdXN0b21lciB1c2VyCiAgICAkRm9ybURhdGF7VmFsdWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKCiAgICAjIGNoZWNrIHNlYXJjaCBidXR0b24KICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpCdXR0b25TZWFyY2gnICkgKSB7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e1NlYXJjaH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlNlYXJjaCcgKTsKICAgIH0KCiAgICAjIGNoZWNrIHNlbGVjdCBidXR0b24KICAgIGVsc2lmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpCdXR0b25TZWxlY3QnICkgKSB7CiAgICAgICAgJEZvcm1EYXRhe1ZhbHVlfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6U2VsZWN0JyApOwogICAgfQoKICAgICMgY2hlY2sgY2xlYXIgYnV0dG9uCiAgICBlbHNpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6QnV0dG9uQ2xlYXInICkgKSB7CiAgICAgICAgJEZvcm1EYXRhe1ZhbHVlfSA9ICcnOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgcmVzZXQgdmFsdWUgaWYgc2VhcmNoIGZpZWxkIGlzIGVtcHR5CiAgICAgICAgaWYgKAogICAgICAgICAgICAhJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpTZWFyY2gnICkKICAgICAgICAgICAgJiYgZGVmaW5lZCAkRm9ybURhdGF7VmFsdWV9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRGb3JtRGF0YXtWYWx1ZX0gPSAnJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgcmVxdWlyZWQgb3B0aW9uCiAgICAgICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZXF1aXJlZH0gJiYgISRGb3JtRGF0YXtWYWx1ZX0gKSB7CiAgICAgICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntJbnZhbGlkfSA9IDE7CiAgICAgICAgICAgICRGb3JtRGF0YXtJbnZhbGlkfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJUZvcm1EYXRhOwp9Cgo9aGVhZDIgSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPklucHV0Q3JlYXRlKAogICAgICAgIEtleSAgID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSXRlbSAgPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkVmFsdWUgPSAnJzsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fTsKICAgIH0KICAgIG15ICRDbGFzcyAgICA9ICdXNTBwYyBJVFNNQ3VzdG9tZXJTZWFyY2gnOwogICAgbXkgJFNlYXJjaCAgID0gJyc7CiAgICBteSAkUmVxdWlyZWQgPSAkUGFyYW17UmVxdWlyZWR9IHx8ICcnOwogICAgbXkgJEludmFsaWQgID0gJFBhcmFte0ludmFsaWR9IHx8ICcnOwogICAgbXkgJEl0ZW1JZCAgID0gJFBhcmFte0l0ZW1JZH0gfHwgJyc7CgogICAgaWYgKCRSZXF1aXJlZCkgewogICAgICAgICRDbGFzcyAuPSAnIFZhbGlkYXRlX1JlcXVpcmVkJzsKICAgIH0KCiAgICBpZiAoJEludmFsaWQpIHsKICAgICAgICAkQ2xhc3MgLj0gJyBTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyBjcmVhdGUgY3VzdG9tZXIgc3RyaW5nCiAgICBpZiAoJFZhbHVlKSB7CgogICAgICAgICMgZ2V0IGN1c3RvbWVyIGRhdGEKICAgICAgICBteSAlQ3VzdG9tZXJTZWFyY2hMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lclNlYXJjaCgKICAgICAgICAgICAgU2VhcmNoID0+ICRWYWx1ZSwKICAgICAgICApOwoKICAgICAgICAjIHRyYW5zZm9ybSBhc2NpaSB0byBodG1sCiAgICAgICAgJFNlYXJjaCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJEN1c3RvbWVyU2VhcmNoTGlzdHskVmFsdWV9IHx8ICcnLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBjcmVhdGUgc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicKICAgICAgICAuICRQYXJhbXtLZXl9CiAgICAgICAgLiAnIiB2YWx1ZT0iJwogICAgICAgIC4gJFZhbHVlCiAgICAgICAgLiAnIiBpZD0iJwogICAgICAgIC4gJEl0ZW1JZCAuICdTZWxlY3RlZCcKICAgICAgICAuICciLz4nCiAgICAgICAgLiAnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IicKICAgICAgICAuICRQYXJhbXtLZXl9CiAgICAgICAgLiAnOjpTZWFyY2giIGNsYXNzPSInCiAgICAgICAgLiAkQ2xhc3MKICAgICAgICAuICciIGlkPSInCiAgICAgICAgLiAkSXRlbUlkCiAgICAgICAgLiAnIiB2YWx1ZT0iJwogICAgICAgIC4gJFNlYXJjaCAuICciLz4nOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aGVhZDIgU2VhcmNoRm9ybURhdGFHZXQoKQoKZ2V0IHNlYXJjaCBmb3JtIGRhdGEKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17S2V5fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgS2V5IScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSAkVmFsdWU7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CiAgICB9CiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aGVhZDIgU2VhcmNoSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgc2VhcmNoIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hJbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJEtleSA9ICRQYXJhbXtLZXl9OwoKICAgICMgaGFzaCB3aXRoIHZhbHVlcyBmb3IgdGhlIGlucHV0IGZpZWxkCiAgICBteSAlRm9ybURhdGE7CgogICAgaWYgKCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRGb3JtRGF0YXtWYWx1ZX0gPSAkUGFyYW17VmFsdWV9OwogICAgfQoKICAgICMgY3JlYXRlIGlucHV0IGZpZWxkCiAgICBteSAkSW5wdXRTdHJpbmcgPSAkU2VsZi0+SW5wdXRDcmVhdGUoCiAgICAgICAgJUZvcm1EYXRhLAogICAgICAgIEtleSAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICBJdGVtICAgPT4gJFBhcmFte0l0ZW19LAogICAgICAgIEl0ZW1JZCA9PiAkUGFyYW17S2V5fSwKICAgICk7CgogICAgcmV0dXJuICRJbnB1dFN0cmluZzsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0Q3VzdG9tZXJDb21wYW55OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyQ29tcGFueScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXRDdXN0b21lckNvbXBhbnkgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgY3VzdG9tZXIgY29tcGFueSBvYmplY3RzCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0Q3VzdG9tZXJDb21wYW55LT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgT3V0cHV0U3RyaW5nQ3JlYXRlKCkKCmNyZWF0ZSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPk91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIE91dHB1dFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdHJhbnNmb3JtIGFzY2lpIHRvIGh0bWwKICAgICRQYXJhbXtWYWx1ZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPkFzY2lpMkh0bWwoCiAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFBhcmFte1ZhbHVlfSB8fCAnJywKICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEZvcm1EYXRhR2V0KCkKCmdldCBmb3JtIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGFSZWYgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcm1EYXRhOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgJEZvcm1EYXRhe1ZhbHVlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CgogICAgIyBzZXQgaW52YWxpZCBwYXJhbQogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZXF1aXJlZH0gJiYgISRGb3JtRGF0YXtWYWx1ZX0gKSB7CiAgICAgICAgJEZvcm1EYXRhe0ludmFsaWR9ID0gMTsKICAgICAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+eyAkUGFyYW17S2V5fSB9LT57SW52YWxpZH0gPSAxOwogICAgfQoKICAgIHJldHVybiBcJUZvcm1EYXRhOwp9Cgo9aGVhZDIgSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPklucHV0Q3JlYXRlKAogICAgICAgIEtleSAgID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSXRlbSAgPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkU2VsZWN0ZWRJRCA9ICRQYXJhbXtWYWx1ZX0gfHwgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fSB8fCAnJzsKCiAgICBteSAkQ1NTQ2xhc3MgPSAnTW9kZXJuaXplJzsKICAgIG15ICRSZXF1aXJlZCA9ICRQYXJhbXtSZXF1aXJlZH07CiAgICBteSAkSW52YWxpZCAgPSAkUGFyYW17SW52YWxpZH07CiAgICBteSAkSXRlbUlkICAgPSAkUGFyYW17SXRlbUlkfTsKCiAgICBpZiAoJFJlcXVpcmVkKSB7CiAgICAgICAgJENTU0NsYXNzIC49ICcgVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgfQoKICAgIGlmICgkSW52YWxpZCkgewogICAgICAgICRDU1NDbGFzcyAuPSAnIFNlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAlQ29tcGFueUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJDb21wYW55JyktPkN1c3RvbWVyQ29tcGFueUxpc3QoCiAgICAgICAgTGltaXQgPT4gMCwgICAgIyBEaXNwbGF5IGFsbCBDdXN0b21lciBDb21wYW5pZXMKICAgICk7CgogICAgIyBnZW5lcmF0ZSBzdHJpbmcKICAgIG15ICRTdHJpbmcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJUNvbXBhbnlMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICBJRCAgICAgICAgICAgPT4gJEl0ZW1JZCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFNlbGVjdGVkSUQsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICRDU1NDbGFzcywKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1oZWFkMiBTZWFyY2hGb3JtRGF0YUdldCgpCgpnZXQgc2VhcmNoIGZvcm0gZGF0YQoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtLZXl9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBLZXkhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15IEBWYWx1ZXM7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgQFZhbHVlcyA9IEB7ICRQYXJhbXtWYWx1ZX0gfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEBWYWx1ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW17S2V5fSApOwogICAgfQoKICAgIHJldHVybiBcQFZhbHVlczsKfQoKPWhlYWQyIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRWYWx1ZXMgPSAkU2VsZi0+U2VhcmNoRm9ybURhdGFHZXQoJVBhcmFtKTsKCiAgICAjIGdldCBjb21wYW55IGRhdGEKICAgIG15ICVDb21wYW55TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lckNvbXBhbnknKS0+Q3VzdG9tZXJDb21wYW55TGlzdCgKICAgICAgICBMaW1pdCA9PiAwLAogICAgKTsKCiAgICAjIGdlbmVyYXRlIHN0cmluZwogICAgbXkgJFN0cmluZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgPT4gXCVDb21wYW55TGlzdCwKICAgICAgICBOYW1lICAgICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICBTZWxlY3RlZElEICA9PiAkVmFsdWVzLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0RGF0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXREYXRlIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIGRhdGUgb2JqZWN0cy4KCj1jdXQKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXREYXRlLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgT3V0cHV0U3RyaW5nQ3JlYXRlKCkKCmNyZWF0ZSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPk91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICBWYWx1ZSA9PiAnMjAwNy0wMS0wMScsICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICcnIGlmICEkUGFyYW17VmFsdWV9OwoKICAgICRQYXJhbXtWYWx1ZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5EYXRlIHwgTG9jYWxpemUoIkRhdGUiKSAlXScsCiAgICAgICAgRGF0YSAgICAgPT4gewogICAgICAgICAgICBEYXRlID0+ICRQYXJhbXtWYWx1ZX0gLiAnIDAwOjAwOjAwJywKICAgICAgICB9LAogICAgKTsKICAgICRQYXJhbXtWYWx1ZX0gPX4gcy8wMDowMDowMC8vOwoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9IHx8ICcnOwp9Cgo9aGVhZDIgRm9ybURhdGFHZXQoKQoKZ2V0IGZvcm0gZGF0YSBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRGb3JtRGF0YVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlRm9ybURhdGE7CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSAkRGF5ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OkRheScgKTsKICAgIG15ICRNb250aCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6TW9udGgnICk7CiAgICBteSAkWWVhciAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlllYXInICk7CgogICAgaWYgKCAkRGF5ICYmICRNb250aCAmJiAkWWVhciApIHsKICAgICAgICAkRm9ybURhdGF7VmFsdWV9ID0gc3ByaW50ZiAnJTAyZC0lMDJkLSUwMmQnLCAkWWVhciwgJE1vbnRoLCAkRGF5OwogICAgfQoKICAgICMgc2V0IGludmFsaWQgcGFyYW0KICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVxdWlyZWR9ICYmICEkRm9ybURhdGF7VmFsdWV9ICkgewogICAgICAgICRGb3JtRGF0YXtJbnZhbGlkfSA9IDE7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e0ludmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIFNhbml0eSBjaGVjayBvZiB0aGUgYXNzZW1ibGVkIHRpbWVzdGFtcAogICAgaWYgKCAkRm9ybURhdGF7VmFsdWV9ICkgewoKICAgICAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkRm9ybURhdGF7VmFsdWV9IC4gJyAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJERhdGVUaW1lT2JqZWN0ICkgewogICAgICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgICAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+eyAkUGFyYW17S2V5fSB9LT57SW52YWxpZH0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXCVGb3JtRGF0YTsKfQoKPWhlYWQyIElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIFZhbHVlID0+ICcyMDA3LTAzLTI2JywgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJEludmFsaWQgPSAkUGFyYW17SW52YWxpZH07CgogICAgbXkgJVZhbHVlczsKICAgIG15ICRDbGFzczsKICAgIGlmICggJFBhcmFte1ZhbHVlfSB8fCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9ICkgewogICAgICAgIG15ICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX0gfHwgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fTsKCiAgICAgICAgaWYgKCAkVmFsdWUgPX4gL14oXGRcZFxkXGQpLShcZFxkfFxkKS0oXGRcZHxcZCkkL2kgKSB7CiAgICAgICAgICAgICRWYWx1ZXN7ICRQYXJhbXtLZXl9IC4gJzo6WWVhcicgfSAgPSAkMTsKICAgICAgICAgICAgJFZhbHVlc3sgJFBhcmFte0tleX0gLiAnOjpNb250aCcgfSA9ICQyOwogICAgICAgICAgICAkVmFsdWVzeyAkUGFyYW17S2V5fSAuICc6OkRheScgfSAgID0gJDM7CgogICAgICAgICAgICBpZiAoJEludmFsaWQpIHsKICAgICAgICAgICAgICAgICRDbGFzcyA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbXkgJFN0cmluZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgIFByZWZpeCAgICAgICAgICAgPT4gJFBhcmFte0tleX0gLiAnOjonLAogICAgICAgIEZvcm1hdCAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICAgICAgWWVhclBlcmlvZFBhc3QgICA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntZZWFyUGVyaW9kUGFzdH0gfHwgMTAsCiAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntZZWFyUGVyaW9kRnV0dXJlfSB8fCAxMCwKICAgICAgICAlVmFsdWVzLAogICAgICAgICRQYXJhbXtLZXl9IC4gJzo6JyAuICdDbGFzcycgPT4gJENsYXNzLAogICAgICAgIFZhbGlkYXRlICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBPdmVycmlkZVRpbWVab25lICAgICAgICAgICAgID0+ICRQYXJhbXtPdmVycmlkZVRpbWVab25lfSwKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1oZWFkMiBTZWFyY2hGb3JtRGF0YUdldCgpCgpnZXQgc2VhcmNoIGZvcm0gZGF0YQoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15ICRVc2VkOwogICAgbXkgJFN0YXJ0RGF5OwogICAgbXkgJFN0YXJ0TW9udGg7CiAgICBteSAkU3RhcnRZZWFyOwogICAgbXkgJFN0b3BEYXk7CiAgICBteSAkU3RvcE1vbnRoOwogICAgbXkgJFN0b3BZZWFyOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgIGlmICggJFBhcmFte1ZhbHVlfSAmJiByZWYgJFBhcmFte1ZhbHVlfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgJFVzZWQgICAgICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IH07CiAgICAgICAgJFN0YXJ0RGF5ICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpEYXknIH07CiAgICAgICAgJFN0YXJ0TW9udGggPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgfTsKICAgICAgICAkU3RhcnRZZWFyICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6OlllYXInIH07CiAgICAgICAgJFN0b3BEYXkgICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6OkRheScgfTsKICAgICAgICAkU3RvcE1vbnRoICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6TW9udGgnIH07CiAgICAgICAgJFN0b3BZZWFyICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6OlllYXInIH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkVXNlZCAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CiAgICAgICAgJFN0YXJ0RGF5ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdGFydDo6RGF5JyApOwogICAgICAgICRTdGFydE1vbnRoID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6Ok1vbnRoJyApOwogICAgICAgICRTdGFydFllYXIgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6OlllYXInICk7CiAgICAgICAgJFN0b3BEYXkgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdG9wOjpEYXknICk7CiAgICAgICAgJFN0b3BNb250aCAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdG9wOjpNb250aCcgKTsKICAgICAgICAkU3RvcFllYXIgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6OlllYXInICk7CiAgICB9CiAgICBpZiAoCiAgICAgICAgJFVzZWQKICAgICAgICAmJiAkU3RhcnREYXkgJiYgJFN0YXJ0TW9udGggJiYgJFN0YXJ0WWVhcgogICAgICAgICYmICRTdG9wRGF5ICAmJiAkU3RvcE1vbnRoICAmJiAkU3RvcFllYXIKICAgICAgICApCiAgICB7CiAgICAgICAgbXkgJFN0YXJ0RGF0ZSA9IHNwcmludGYgJyUwMmQtJTAyZC0lMDJkJywgJFN0YXJ0WWVhciwgJFN0YXJ0TW9udGgsICRTdGFydERheTsKICAgICAgICBteSAkU3RvcERhdGUgID0gc3ByaW50ZiAnJTAyZC0lMDJkLSUwMmQnLCAkU3RvcFllYXIsICAkU3RvcE1vbnRoLCAgJFN0b3BEYXk7CgogICAgICAgIHJldHVybiB7ICctYmV0d2VlbicgPT4gWyAkU3RhcnREYXRlLCAkU3RvcERhdGUgXSB9OwogICAgfQoKICAgIHJldHVybiBbXTsgICAgIyBubyBjb25kaXRpb25zIGJ5IGRlZmF1bHQKfQoKPWhlYWQyIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ICAgICAgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gICAgID0+ICRJdGVtUmVmLAogICAgICAgIE9wdGlvbmFsID0+IDEsICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAgKDB8MSkKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMganVzdCBmb3IgY29udmVuaWVuY2UKICAgIG15ICRLZXkgICAgICAgICA9ICRQYXJhbXtLZXl9OwogICAgbXkgJFByZWZpeFN0YXJ0ID0gJEtleSAuICc6OlRpbWVTdGFydDo6JzsKICAgIG15ICRQcmVmaXhTdG9wICA9ICRLZXkgLiAnOjpUaW1lU3RvcDo6JzsKCiAgICAjIGdldCB0aW1lIHJlbGF0ZWQgcGFyYW1zCiAgICBteSAlR2V0UGFyYW07CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgaWYgKCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICVHZXRQYXJhbSA9ICV7ICRQYXJhbXtWYWx1ZX0gfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRHZXRQYXJhbXskS2V5fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRLZXkgKTsKICAgICAgICBmb3IgbXkgJFRpbWVUeXBlICggJFByZWZpeFN0YXJ0LCAkUHJlZml4U3RvcCApIHsKICAgICAgICAgICAgZm9yIG15ICRQYXJ0IChxdyggWWVhciBNb250aCBEYXkgKSkgewogICAgICAgICAgICAgICAgbXkgJFBhcmFtS2V5ID0gJFRpbWVUeXBlIC4gJFBhcnQ7CiAgICAgICAgICAgICAgICBteSAkUGFyYW1WYWwgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1LZXkgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSB3aGl0ZSBzcGFjZSBvbiB0aGUgc3RhcnQgYW5kIGVuZAogICAgICAgICAgICAgICAgaWYgKCRQYXJhbVZhbCkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbVZhbCA9fiBzeyBcQSBccysgfXt9eG1zOwogICAgICAgICAgICAgICAgICAgICRQYXJhbVZhbCA9fiBzeyBccysgXHogfXt9eG1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc3RvcmUgaW4gJUdldFBhcmFtCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtS2V5fSA9ICRQYXJhbVZhbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgQnVpbGQgc2VsZWN0aW9uIGZvciB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZS4KICAgICMgTm90ZSB0aGF0IHNlYXJjaGluZyBpcyBieSBkYXRlLCB3aGlsZSBpbnB1dCBpcyBieSB0aW1lIGFzIHdlbGwKICAgIG15ICRUaW1lU3RhcnRTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgUHJlZml4ICAgICAgICAgICA9PiAkUHJlZml4U3RhcnQsCiAgICAgICAgRm9ybWF0ICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0JywKICAgICAgICBZZWFyUGVyaW9kUGFzdCAgID0+IDEwLAogICAgICAgIFllYXJQZXJpb2RGdXR1cmUgPT4gMTAsCiAgICAgICAgJUdldFBhcmFtLAogICAgKTsKICAgIG15ICRUaW1lU3RvcFNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICBPcHRpb25hbCAgICAgICAgID0+IDAsCiAgICAgICAgUHJlZml4ICAgICAgICAgICA9PiAkUHJlZml4U3RvcCwKICAgICAgICBGb3JtYXQgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgIFllYXJQZXJpb2RQYXN0ICAgPT4gMTAsCiAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiAxMCwKICAgICAgICAlR2V0UGFyYW0sCiAgICApOwoKICAgIG15ICRDaGVja2JveCA9IHFxezxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiRLZXkiIHZhbHVlPSIxIi8+fTsKICAgIGlmICggJFBhcmFte09wdGlvbmFsfSApIHsKICAgICAgICAkQ2hlY2tib3ggPSBxcXs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IiRLZXkiIHZhbHVlPSIxIi8+fTsKICAgIH0KCiAgICBteSAkQmV0d2VlbiA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQmV0d2VlbicpOwogICAgbXkgJEFuZCAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ2FuZCcpOwoKICAgIHJldHVybiAiPGRpdj4gJENoZWNrYm94ICRCZXR3ZWVuICRUaW1lU3RhcnRTZWxlY3Rpb25TdHJpbmcgPC9kaXY+IgogICAgICAgIC4gIjxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDI3cHg7XCI+JEFuZDwvc3Bhbj4gJFRpbWVTdG9wU2VsZWN0aW9uU3RyaW5nIjsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0RGF0ZVRpbWU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0RGF0ZVRpbWUgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgZGF0ZXRpbWUgb2JqZWN0cy4KCj1jdXQKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXREYXRlVGltZS0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIE91dHB1dFN0cmluZ0NyZWF0ZSgpCgpjcmVhdGUgb3V0cHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5PdXRwdXRTdHJpbmdDcmVhdGUoCiAgICAgICAgVmFsdWUgPT4gJzIwMDctMDEtMDEgMTI6MDAnLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIE91dHB1dFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnJyBpZiAhJFBhcmFte1ZhbHVlfTsKCiAgICAkUGFyYW17VmFsdWV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuRGF0ZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICBEYXRhICAgICA9PiB7CiAgICAgICAgICAgIERhdGUgPT4gJFBhcmFte1ZhbHVlfSAuICc6MDAnLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9IHx8ICcnOwp9Cgo9aGVhZDIgRm9ybURhdGFHZXQoKQoKZ2V0IGZvcm0gZGF0YSBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRGb3JtRGF0YVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlRm9ybURhdGE7CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSAkRGF5ICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpEYXknICk7CiAgICBteSAkTW9udGggID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpNb250aCcgKTsKICAgIG15ICRZZWFyICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlllYXInICk7CiAgICBteSAkSG91ciAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpIb3VyJyApIHx8IDA7CiAgICBteSAkTWludXRlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpNaW51dGUnICkgfHwgMDsKCiAgICBpZiAoICREYXkgJiYgJE1vbnRoICYmICRZZWFyICkgewogICAgICAgICRGb3JtRGF0YXtWYWx1ZX0gPSBzcHJpbnRmICclMDJkLSUwMmQtJTAyZCAlMDJkOiUwMmQnLCAkWWVhciwgJE1vbnRoLCAkRGF5LCAkSG91ciwgJE1pbnV0ZTsKICAgIH0KCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhJEZvcm1EYXRhe1ZhbHVlfSApIHsKICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntJbnZhbGlkfSA9IDE7CiAgICB9CgogICAgIyBTYW5pdHkgY2hlY2sgb2YgdGhlIGFzc2VtYmxlZCB0aW1lc3RhbXAKICAgIGlmICggJEZvcm1EYXRhe1ZhbHVlfSApIHsKCiAgICAgICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEZvcm1EYXRhe1ZhbHVlfSAuICc6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIGlmICggISREYXRlVGltZU9iamVjdCApIHsKICAgICAgICAgICAgJEZvcm1EYXRhe0ludmFsaWR9ID0gMTsKICAgICAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e0ludmFsaWR9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFwlRm9ybURhdGE7Cn0KCj1oZWFkMiBJbnB1dENyZWF0ZSgpCgpjcmVhdGUgYSBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBWYWx1ZSA9PiAnMjAwNy0wMy0yNiAxMjowMCcsICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJEludmFsaWQgPSAkUGFyYW17SW52YWxpZH07CgogICAgbXkgJVZhbHVlczsKICAgIG15ICRDbGFzczsKICAgIGlmICggJFBhcmFte1ZhbHVlfSB8fCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9ICkgewogICAgICAgIG15ICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX0gfHwgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVEZWZhdWx0fTsKCiAgICAgICAgaWYgKCAkVmFsdWUgPX4gL14oXGRcZFxkXGQpLShcZFxkfFxkKS0oXGRcZHxcZCkgKFxkXGR8XGQpOihcZFxkfFxkKSQvaSApIHsKICAgICAgICAgICAgJFZhbHVlc3sgJFBhcmFte0tleX0gLiAnOjpZZWFyJyB9ICAgPSAkMTsKICAgICAgICAgICAgJFZhbHVlc3sgJFBhcmFte0tleX0gLiAnOjpNb250aCcgfSAgPSAkMjsKICAgICAgICAgICAgJFZhbHVlc3sgJFBhcmFte0tleX0gLiAnOjpEYXknIH0gICAgPSAkMzsKICAgICAgICAgICAgJFZhbHVlc3sgJFBhcmFte0tleX0gLiAnOjpIb3VyJyB9ICAgPSAkNDsKICAgICAgICAgICAgJFZhbHVlc3sgJFBhcmFte0tleX0gLiAnOjpNaW51dGUnIH0gPSAkNTsKCiAgICAgICAgICAgIGlmICgkSW52YWxpZCkgewogICAgICAgICAgICAgICAgJENsYXNzID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBteSAkU3RyaW5nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgUHJlZml4ICAgICAgICAgICA9PiAkUGFyYW17S2V5fSAuICc6OicsCiAgICAgICAgRm9ybWF0ICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgWWVhclBlcmlvZFBhc3QgICA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntZZWFyUGVyaW9kUGFzdH0gfHwgMTAsCiAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntZZWFyUGVyaW9kRnV0dXJlfSB8fCAxMCwKICAgICAgICAlVmFsdWVzLAogICAgICAgICRQYXJhbXtLZXl9IC4gJzo6JyAuICdDbGFzcycgPT4gJENsYXNzLAogICAgICAgIFZhbGlkYXRlICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1oZWFkMiBTZWFyY2hGb3JtRGF0YUdldCgpCgpnZXQgc2VhcmNoIGZvcm0gZGF0YQoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkVXNlZDsKICAgIG15ICRTdGFydE1pbnV0ZTsKICAgIG15ICRTdGFydEhvdXI7CiAgICBteSAkU3RhcnREYXk7CiAgICBteSAkU3RhcnRNb250aDsKICAgIG15ICRTdGFydFllYXI7CiAgICBteSAkU3RvcE1pbnV0ZTsKICAgIG15ICRTdG9wSG91cjsKICAgIG15ICRTdG9wRGF5OwogICAgbXkgJFN0b3BNb250aDsKICAgIG15ICRTdG9wWWVhcjsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIGlmICggJFBhcmFte1ZhbHVlfSAmJiByZWYgJFBhcmFte1ZhbHVlfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgJFVzZWQgICAgICAgID0gJFBhcmFte1ZhbHVlfS0+eyAkUGFyYW17S2V5fSB9OwogICAgICAgICRTdGFydE1pbnV0ZSA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgfTsKICAgICAgICAkU3RhcnRIb3VyICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpIb3VyJyB9OwogICAgICAgICRTdGFydERheSAgICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6OkRheScgfTsKICAgICAgICAkU3RhcnRNb250aCAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpNb250aCcgfTsKICAgICAgICAkU3RhcnRZZWFyICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpZZWFyJyB9OwogICAgICAgICRTdG9wTWludXRlICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6TWludXRlJyB9OwogICAgICAgICRTdG9wSG91ciAgICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6SG91cicgfTsKICAgICAgICAkU3RvcERheSAgICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6OkRheScgfTsKICAgICAgICAkU3RvcE1vbnRoICAgPSAkUGFyYW17VmFsdWV9LT57ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6Ok1vbnRoJyB9OwogICAgICAgICRTdG9wWWVhciAgICA9ICRQYXJhbXtWYWx1ZX0tPnsgJFBhcmFte0tleX0gLiAnOjpUaW1lU3RvcDo6WWVhcicgfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRVc2VkICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CiAgICAgICAgJFN0YXJ0TWludXRlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gLiAnOjpUaW1lU3RhcnQ6Ok1pbnV0ZScgKSB8fCAwMDsKICAgICAgICAkU3RhcnRIb3VyICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdGFydDo6SG91cicgKQogICAgICAgICAgICB8fCAwMDsKICAgICAgICAkU3RhcnREYXkgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0YXJ0OjpEYXknICk7CiAgICAgICAgJFN0YXJ0TW9udGggPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdGFydDo6TW9udGgnICk7CiAgICAgICAgJFN0YXJ0WWVhciAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdGFydDo6WWVhcicgKTsKICAgICAgICAkU3RvcE1pbnV0ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6Ok1pbnV0ZScgKQogICAgICAgICAgICB8fCA1OTsKICAgICAgICAkU3RvcEhvdXIgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdG9wOjpIb3VyJyApCiAgICAgICAgICAgIHx8IDIzOwogICAgICAgICRTdG9wRGF5ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdG9wOjpEYXknICk7CiAgICAgICAgJFN0b3BNb250aCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9IC4gJzo6VGltZVN0b3A6Ok1vbnRoJyApOwogICAgICAgICRTdG9wWWVhciAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSAuICc6OlRpbWVTdG9wOjpZZWFyJyApOwogICAgfQoKICAgIGlmICgKICAgICAgICAkVXNlZAogICAgICAgICYmICRTdGFydE1pbnV0ZSAmJiAkU3RhcnRIb3VyICYmICRTdGFydERheSAmJiAkU3RhcnRNb250aCAmJiAkU3RhcnRZZWFyCiAgICAgICAgJiYgJFN0b3BNaW51dGUgICYmICRTdG9wSG91ciAgJiYgJFN0b3BEYXkgICYmICRTdG9wTW9udGggICYmICRTdG9wWWVhcgogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBhZGQgaG91ciwgbWludXRlcyBhbmQgc2Vjb25kcywKICAgICAgICAjIHNvIHRoYXQgdGhhdCB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGRheSBpcyBzZWxlY3RlZCBhcyB3ZWxsCiAgICAgICAgbXkgJFN0YXJ0RGF0ZSA9IHNwcmludGYgJyUwMmQtJTAyZC0lMDJkICUwMmQ6JTAyZDowMCcKICAgICAgICAgICAgLCAkU3RhcnRZZWFyLCAkU3RhcnRNb250aCwgJFN0YXJ0RGF5LCAkU3RhcnRIb3VyLCAkU3RhcnRNaW51dGU7CiAgICAgICAgbXkgJFN0b3BEYXRlID0gc3ByaW50ZiAnJTAyZC0lMDJkLSUwMmQgJTAyZDolMDJkOjU5JwogICAgICAgICAgICAsICRTdG9wWWVhciwgJFN0b3BNb250aCwgJFN0b3BEYXksICRTdG9wSG91ciwgJFN0b3BNaW51dGU7CgogICAgICAgIHJldHVybiB7ICctYmV0d2VlbicgPT4gWyAkU3RhcnREYXRlLCAkU3RvcERhdGUgXSB9OwogICAgfQoKICAgIHJldHVybiBbXTsgICAgIyBubyBjb25kaXRpb25zIGJ5IGRlZmF1bHQKfQoKPWhlYWQyIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ICAgICAgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gICAgID0+ICRJdGVtUmVmLAogICAgICAgIE9wdGlvbmFsID0+IDEsICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAgKDB8MSkKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMganVzdCBmb3IgY29udmVuaWVuY2UKICAgIG15ICRLZXkgICAgICAgICA9ICRQYXJhbXtLZXl9OwogICAgbXkgJFByZWZpeFN0YXJ0ID0gJEtleSAuICc6OlRpbWVTdGFydDo6JzsKICAgIG15ICRQcmVmaXhTdG9wICA9ICRLZXkgLiAnOjpUaW1lU3RvcDo6JzsKCiAgICAjIGdldCB0aW1lIHJlbGF0ZWQgcGFyYW1zCiAgICBteSAlR2V0UGFyYW07CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgaWYgKCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICVHZXRQYXJhbSA9ICV7ICRQYXJhbXtWYWx1ZX0gfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRHZXRQYXJhbXskS2V5fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRLZXkgKTsKICAgICAgICBmb3IgbXkgJFRpbWVUeXBlICggJFByZWZpeFN0YXJ0LCAkUHJlZml4U3RvcCApIHsKICAgICAgICAgICAgZm9yIG15ICRQYXJ0IChxdyggWWVhciBNb250aCBEYXkgKSkgewogICAgICAgICAgICAgICAgbXkgJFBhcmFtS2V5ID0gJFRpbWVUeXBlIC4gJFBhcnQ7CiAgICAgICAgICAgICAgICBteSAkUGFyYW1WYWwgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1LZXkgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSB3aGl0ZSBzcGFjZSBvbiB0aGUgc3RhcnQgYW5kIGVuZAogICAgICAgICAgICAgICAgaWYgKCRQYXJhbVZhbCkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbVZhbCA9fiBzeyBcQSBccysgfXt9eG1zOwogICAgICAgICAgICAgICAgICAgICRQYXJhbVZhbCA9fiBzeyBccysgXHogfXt9eG1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc3RvcmUgaW4gJUdldFBhcmFtCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtS2V5fSA9ICRQYXJhbVZhbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgQnVpbGQgc2VsZWN0aW9uIGZvciB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZS4KICAgIG15ICRUaW1lU3RhcnRTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgUHJlZml4ICAgICAgICAgICA9PiAkUHJlZml4U3RhcnQsCiAgICAgICAgRm9ybWF0ICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgWWVhclBlcmlvZFBhc3QgICA9PiAxMCwKICAgICAgICBZZWFyUGVyaW9kRnV0dXJlID0+IDEwLAogICAgICAgICVHZXRQYXJhbSwKICAgICk7CiAgICBteSAkVGltZVN0b3BTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgT3B0aW9uYWwgICAgICAgICA9PiAwLAogICAgICAgIFByZWZpeCAgICAgICAgICAgPT4gJFByZWZpeFN0b3AsCiAgICAgICAgRm9ybWF0ICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgWWVhclBlcmlvZFBhc3QgICA9PiAxMCwKICAgICAgICBZZWFyUGVyaW9kRnV0dXJlID0+IDEwLAogICAgICAgICVHZXRQYXJhbSwKICAgICk7CgogICAgbXkgJENoZWNrYm94ID0gcXF7PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJEtleSIgdmFsdWU9IjEiLz59OwogICAgaWYgKCAkUGFyYW17T3B0aW9uYWx9ICkgewogICAgICAgICRDaGVja2JveCA9IHFxezxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iJEtleSIgdmFsdWU9IjEiLz59OwogICAgfQoKICAgIG15ICRCZXR3ZWVuID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdCZXR3ZWVuJyk7CiAgICBteSAkQW5kICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnYW5kJyk7CgogICAgcmV0dXJuICI8ZGl2PiAkQ2hlY2tib3ggJEJldHdlZW4gJFRpbWVTdGFydFNlbGVjdGlvblN0cmluZyA8L2Rpdj4iCiAgICAgICAgLiAiPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMjdweDtcIj4gJEFuZCA8L3NwYW4+ICRUaW1lU3RvcFNlbGVjdGlvblN0cmluZyI7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0RHVtbXk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKICAgICdLZXJuZWw6OkNvbmZpZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXREdW1teSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBkdW1teSBvYmplY3RzCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0RHVtbXktPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBPdXRwdXRTdHJpbmdDcmVhdGUoKQoKY3JlYXRlIG91dHB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+T3V0cHV0U3RyaW5nQ3JlYXRlKCk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkUGFyYW17VmFsdWV9ID0gJyc7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHRyYW5zbGF0ZQogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUcmFuc2xhdGlvbn0gKSB7CiAgICAgICAgJFBhcmFte1ZhbHVlfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFBhcmFte1ZhbHVlfSApOwogICAgfQoKICAgIG15ICRMaW5rRmVhdHVyZSA9IDE7CgogICAgIyBkbyBub3QgdHJhbnNmb3JtIGxpbmtzIGluIHByaW50IHZpZXcKICAgIGlmICggJFBhcmFte1ByaW50fSApIHsKICAgICAgICAkTGlua0ZlYXR1cmUgPSAwOwogICAgfQoKICAgICMgdHJhbnNmb3JtIGFzY2lpIHRvIGh0bWwKICAgICRQYXJhbXtWYWx1ZX0gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgIFRleHQgICAgICAgICAgID0+ICRQYXJhbXtWYWx1ZX0sCiAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAkTGlua0ZlYXR1cmUsCiAgICApOwoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgRm9ybURhdGFHZXQoKQoKZ2V0IGZvcm0gZGF0YSBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRGb3JtRGF0YVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCgpOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlRm9ybURhdGE7CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICAkRm9ybURhdGF7VmFsdWV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhJEZvcm1EYXRhe1ZhbHVlfSApIHsKICAgICAgICAkRm9ybURhdGF7SW52YWxpZH0gPSAxOwogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57ICRQYXJhbXtLZXl9IH0tPntJbnZhbGlkfSA9IDE7CiAgICB9CgogICAgcmV0dXJuIFwlRm9ybURhdGE7Cn0KCj1oZWFkMiBJbnB1dENyZWF0ZSgpCgpjcmVhdGUgYSBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW5wdXRDcmVhdGUoKTsKCj1jdXQKCnN1YiBJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkVmFsdWUgPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9IHx8ICcnOwogICAgfQoKICAgIG15ICRDbGFzcyAgICA9ICcnOwogICAgbXkgJFNpemUgICAgID0gJ1c1MHBjJzsKICAgIG15ICRSZXF1aXJlZCA9ICRQYXJhbXtSZXF1aXJlZH07CiAgICBteSAkSW52YWxpZCAgPSAkUGFyYW17SW52YWxpZH07CiAgICBteSAkSXRlbUlkICAgPSAkUGFyYW17SXRlbUlkfTsKCiAgICBpZiAoJFJlcXVpcmVkKSB7CiAgICAgICAgJENsYXNzIC49ICcgVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgfQoKICAgIGlmICgkSW52YWxpZCkgewogICAgICAgICRDbGFzcyAuPSAnIFNlcnZlckVycm9yJzsKICAgIH0KICAgICRDbGFzcyAuPSAnICcgLiAkU2l6ZTsKICAgIG15ICRTdHJpbmcgPSAiPHNwYW4gc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogMS4zZW07XCI+IjsKICAgICRTdHJpbmcKICAgICAgICAuPSAiPGlucHV0IHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIiRQYXJhbXtLZXl9XCIgY2xhc3M9XCIkQ2xhc3NcIiAiOwoKICAgIGlmICgkSXRlbUlkKSB7CiAgICAgICAgJFN0cmluZyAuPSAiaWQ9XCIkSXRlbUlkXCIgIjsKICAgIH0KCiAgICBpZiAoJFZhbHVlKSB7CgogICAgICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgICAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICAgICAjIHRyYW5zbGF0ZQogICAgICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICAgICAkVmFsdWUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJFZhbHVlKTsKICAgICAgICB9CgogICAgICAgICMgdHJhbnNmb3JtIGFzY2lpIHRvIGh0bWwKICAgICAgICAkVmFsdWUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAkU3RyaW5nIC49ICJ2YWx1ZT1cIiRWYWx1ZVwiICI7CgogICAgIyBhZGQgbWF4aW11bSBsZW5ndGgKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57TWF4TGVuZ3RofSApIHsKICAgICAgICAkU3RyaW5nIC49ICJtYXhsZW5ndGg9XCIkUGFyYW17SXRlbX0tPntJbnB1dH0tPntNYXhMZW5ndGh9XCIgIjsKICAgIH0KCiAgICAkU3RyaW5nIC49ICcvPiA8L3NwYW4+JzsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWhlYWQyIFNlYXJjaEZvcm1EYXRhR2V0KCkKCmdldCBzZWFyY2ggZm9ybSBkYXRhCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaEZvcm1EYXRhR2V0KCk7Cgo9Y3V0CgpzdWIgU2VhcmNoRm9ybURhdGFHZXQgewogICAgcmV0dXJuIFtdOwp9Cgo9aGVhZDIgU2VhcmNoSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgc2VhcmNoIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hJbnB1dENyZWF0ZSgpOwoKPWN1dAoKc3ViIFNlYXJjaElucHV0Q3JlYXRlIHsKICAgIHJldHVybiAnJm5ic3A7JzsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0R2VuZXJhbENhdGFsb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXRHZW5lcmFsQ2F0YWxvZyAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBnZW5lcmFsIGNhdGFsb2cgb2JqZWN0cwoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW06OkxheW91dEdlbmVyYWxDYXRhbG9nLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgT3V0cHV0U3RyaW5nQ3JlYXRlKCkKCmNyZWF0ZSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPk91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRQYXJhbXtWYWx1ZX0gLy89ICcnOwoKICAgICMgdHJhbnNsYXRlCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1RyYW5zbGF0aW9ufSApIHsKICAgICAgICAkUGFyYW17VmFsdWV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtWYWx1ZX0gKTsKICAgIH0KCiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEZvcm1EYXRhR2V0KCkKCmdldCBmb3JtIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGFSZWYgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcm1EYXRhOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgJEZvcm1EYXRhe1ZhbHVlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CgogICAgIyBzZXQgaW52YWxpZCBwYXJhbQogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZXF1aXJlZH0gJiYgISRGb3JtRGF0YXtWYWx1ZX0gKSB7CiAgICAgICAgJEZvcm1EYXRhe0ludmFsaWR9ID0gMTsKICAgICAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+eyAkUGFyYW17S2V5fSB9LT57SW52YWxpZH0gPSAxOwogICAgfQoKICAgIHJldHVybiBcJUZvcm1EYXRhOwp9Cgo9aGVhZDIgSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPklucHV0Q3JlYXRlKAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgVmFsdWUgPT4gMTEsICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQ1NTQ2xhc3MgPSAnTW9kZXJuaXplJzsKICAgIG15ICRSZXF1aXJlZCA9ICRQYXJhbXtSZXF1aXJlZH07CiAgICBteSAkSW52YWxpZCAgPSAkUGFyYW17SW52YWxpZH07CiAgICBteSAkSXRlbUlkICAgPSAkUGFyYW17SXRlbUlkfTsKCiAgICBpZiAoJFJlcXVpcmVkKSB7CiAgICAgICAgJENTU0NsYXNzIC49ICcgVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgfQoKICAgIGlmICgkSW52YWxpZCkgewogICAgICAgICRDU1NDbGFzcyAuPSAnIFNlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIHRyYW5zbGF0aW9uIG9uIG9yIG9mZgogICAgbXkgJFRyYW5zbGF0aW9uID0gMDsKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICRUcmFuc2xhdGlvbiA9IDE7CiAgICB9CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntDbGFzc30gfHwgJycsCiAgICApOwoKICAgICMgcmV2ZXJzZSB0aGUgY2xhc3MgbGlzdAogICAgbXkgJVJldmVyc2VDbGFzc0xpc3QgPSByZXZlcnNlICV7JENsYXNzTGlzdH07CgogICAgbXkgJFNlbGVjdGVkSUQ7CgogICAgIyBnZXQgdGhlIGN1cnJlbnQgdmFsdWUKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRTZWxlY3RlZElEID0gJFBhcmFte1ZhbHVlfTsKICAgIH0KCiAgICAjIGdldCB0aGUgZGVmYXVsdCBpZCBieSBkZWZhdWx0IHZhbHVlCiAgICBlbHNlIHsKICAgICAgICAkU2VsZWN0ZWRJRCA9ICRSZXZlcnNlQ2xhc3NMaXN0eyAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9IHx8ICcnIH0gfHwgJyc7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBzdHJpbmcKICAgIG15ICRTdHJpbmcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICBJRCAgICAgICAgICAgPT4gJEl0ZW1JZCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gJFRyYW5zbGF0aW9uLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkU2VsZWN0ZWRJRCwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJENTU0NsYXNzLAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWhlYWQyIFNlYXJjaEZvcm1EYXRhR2V0KCkKCmdldCBzZWFyY2ggZm9ybSBkYXRhCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaEZvcm1EYXRhR2V0KAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtLZXl9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBLZXkhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15IEBWYWx1ZXM7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgQFZhbHVlcyA9IEB7ICRQYXJhbXtWYWx1ZX0gfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEBWYWx1ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW17S2V5fSApOwogICAgfQoKICAgIHJldHVybiBcQFZhbHVlczsKfQoKPWhlYWQyIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFZhbHVlcyA9ICRTZWxmLT5TZWFyY2hGb3JtRGF0YUdldCglUGFyYW0pOwoKICAgICMgdHJhbnNsYXRpb24gb24gb3Igb2ZmCiAgICBteSAkVHJhbnNsYXRpb24gPSAwOwogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUcmFuc2xhdGlvbn0gKSB7CiAgICAgICAgJFRyYW5zbGF0aW9uID0gMTsKICAgIH0KCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e0NsYXNzfSB8fCAnJywKICAgICk7CgogICAgIyBnZW5lcmF0ZSBzdHJpbmcKICAgIG15ICRTdHJpbmcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+ICRDbGFzc0xpc3QsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgU2l6ZSAgICAgICAgPT4gNSwKICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgIFRyYW5zbGF0aW9uID0+ICRUcmFuc2xhdGlvbiwKICAgICAgICBTZWxlY3RlZElEICA9PiAkVmFsdWVzLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0SW50ZWdlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXRJbnRlZ2VyIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIGludGVnZXIgb2JqZWN0cwoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW06OkxheW91dEludGVnZXItPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBPdXRwdXRTdHJpbmdDcmVhdGUoKQoKY3JlYXRlIG91dHB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+T3V0cHV0U3RyaW5nQ3JlYXRlKAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRQYXJhbXtWYWx1ZX0gPSAnJzsKICAgIH0KCiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEZvcm1EYXRhR2V0KCkKCmdldCBmb3JtIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGFSZWYgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcm1EYXRhOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgJEZvcm1EYXRhe1ZhbHVlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CgogICAgIyBzZXQgaW52YWxpZCBwYXJhbQogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZXF1aXJlZH0gJiYgISRGb3JtRGF0YXtWYWx1ZX0gKSB7CiAgICAgICAgJEZvcm1EYXRhe0ludmFsaWR9ID0gMTsKICAgICAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+eyAkUGFyYW17S2V5fSB9LT57SW52YWxpZH0gPSAxOwogICAgfQoKICAgIHJldHVybiBcJUZvcm1EYXRhOwp9Cgo9aGVhZDIgSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPklucHV0Q3JlYXRlKAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgVmFsdWUgPT4gMTEsICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBtaW4sIG1heCBhbmQgZGVmYXVsdAogICAgbXkgJFZhbHVlTWluID0gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVNaW59IC8vIDE7CiAgICBteSAkVmFsdWVNYXggPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZU1heH0gLy8gMTsKICAgIGlmICggJFZhbHVlTWluID4gJFZhbHVlTWF4ICkgewogICAgICAgICRWYWx1ZU1pbiA9ICRWYWx1ZU1heDsKICAgIH0KICAgIGlmICgKICAgICAgICAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9CiAgICAgICAgJiYgKAogICAgICAgICAgICAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9IDwgJFZhbHVlTWluCiAgICAgICAgICAgIHx8ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH0gPiAkVmFsdWVNYXgKICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH0gPSAnJzsKICAgIH0KCiAgICAjIGNyZWF0ZSBkYXRhIGFycmF5CiAgICBteSAkSW50ZWdlckxpc3QgPSBbXTsKICAgIGZvciBteSAkQ291bnRlciAoICRWYWx1ZU1pbiAuLiAkVmFsdWVNYXggKSB7CiAgICAgICAgcHVzaCBAeyRJbnRlZ2VyTGlzdH0sICRDb3VudGVyOwogICAgfQoKICAgICMgZ2VuZXJhdGUgc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJEludGVnZXJMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1ZhbHVlfSB8fCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9IHx8ICcnLAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1oZWFkMiBTZWFyY2hGb3JtRGF0YUdldCgpCgpnZXQgc2VhcmNoIGZvcm0gZGF0YQoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17S2V5fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgS2V5IScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15IEBWYWx1ZXM7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgQFZhbHVlcyA9IEB7ICRQYXJhbXtWYWx1ZX0gfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEBWYWx1ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW17S2V5fSApOwogICAgfQoKICAgIHJldHVybiBcQFZhbHVlczsKfQoKPWhlYWQyIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgbWluLCBtYXgKICAgIG15ICRWYWx1ZU1pbiA9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlTWlufSAvLyAxOwogICAgbXkgJFZhbHVlTWF4ID0gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VmFsdWVNYXh9IC8vIDE7CiAgICBpZiAoICRWYWx1ZU1pbiA+ICRWYWx1ZU1heCApIHsKICAgICAgICAkVmFsdWVNaW4gPSAkVmFsdWVNYXg7CiAgICB9CgogICAgIyBzZXQgcHJlc2VsZWN0ZWQgdmFsdWUsIGVpdGhlciBmcm9tIHByZXZpb3VzIHNlbGVjdGlvbiBvciB0aGUgZGVmYXVsdAogICAgbXkgJFZhbHVlcyA9ICRTZWxmLT5TZWFyY2hGb3JtRGF0YUdldCglUGFyYW0pOwoKICAgICMgY2hlY2sgd2hldGhlciB0aGUgcHJlc2VsZWN0ZWQgdmFsdWUgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZQogICAgbXkgQEZpbHRlcmVkVmFsdWVzOwogICAgVkFMVUU6CiAgICBmb3IgbXkgJFZhbHVlICggQHskVmFsdWVzfSApIHsKICAgICAgICBuZXh0IFZBTFVFIGlmICFkZWZpbmVkICRWYWx1ZTsKICAgICAgICBuZXh0IFZBTFVFIGlmICEkVmFsdWU7CiAgICAgICAgbmV4dCBWQUxVRSBpZiAkVmFsdWUgPCAkVmFsdWVNaW47CiAgICAgICAgbmV4dCBWQUxVRSBpZiAkVmFsdWUgPiAkVmFsdWVNYXg7CgogICAgICAgIHB1c2ggQEZpbHRlcmVkVmFsdWVzLCAkVmFsdWU7CiAgICB9CgogICAgIyBjcmVhdGUgZGF0YSBhcnJheQogICAgbXkgQEludGVnZXJMaXN0ID0gKCAkVmFsdWVNaW4gLi4gJFZhbHVlTWF4ICk7CgogICAgIyBnZW5lcmF0ZSBzdHJpbmcKICAgIG15ICRTdHJpbmcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFxASW50ZWdlckxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgU2l6ZSAgICAgICAgPT4gNSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIFNlbGVjdGVkSUQgID0+IFxARmlsdGVyZWRWYWx1ZXMsCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0VGV4dDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JwopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0VGV4dCAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiB0ZXh0IG9iamVjdHMKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXRUZXh0LT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgT3V0cHV0U3RyaW5nQ3JlYXRlKCkKCmNyZWF0ZSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPk91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgT3V0cHV0U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkUGFyYW17VmFsdWV9ID0gJyc7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHRyYW5zbGF0ZQogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUcmFuc2xhdGlvbn0gKSB7CiAgICAgICAgJFBhcmFte1ZhbHVlfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFBhcmFte1ZhbHVlfSApOwogICAgfQoKICAgIG15ICRMaW5rRmVhdHVyZSA9IDE7CgogICAgIyBkbyBub3QgdHJhbnNmb3JtIGxpbmtzIGluIHByaW50IHZpZXcKICAgIGlmICggJFBhcmFte1ByaW50fSApIHsKICAgICAgICAkTGlua0ZlYXR1cmUgPSAwOwogICAgfQoKICAgICMgdHJhbnNmb3JtIGFzY2lpIHRvIGh0bWwKICAgICRQYXJhbXtWYWx1ZX0gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgIFRleHQgICAgICAgICAgID0+ICRQYXJhbXtWYWx1ZX0sCiAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAkTGlua0ZlYXR1cmUsCiAgICApOwoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgRm9ybURhdGFHZXQoKQoKZ2V0IGZvcm0gZGF0YSBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRGb3JtRGF0YVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlRm9ybURhdGE7CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICAkRm9ybURhdGF7VmFsdWV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhZGVmaW5lZCAkRm9ybURhdGF7VmFsdWV9ICkgewogICAgICAgICRGb3JtRGF0YXtJbnZhbGlkfSA9IDE7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e0ludmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIHZhbHVlIHdhcyBlbnRlcmVkIGluIHRoZSBmb3JtLCBhIHJlZ2V4IGlzIGRlZmluZWQgYW5kIHRoZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnZXgKICAgIGlmICgKICAgICAgICAkRm9ybURhdGF7VmFsdWV9CiAgICAgICAgJiYgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVnRXh9CiAgICAgICAgJiYgJEZvcm1EYXRhe1ZhbHVlfSAhfiBteyAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZWdFeH0gfXhtcwogICAgICAgICkKICAgIHsKCiAgICAgICAgJEZvcm1EYXRhe0ludmFsaWR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e0ludmFsaWR9ICAgICAgICAgICA9IDE7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e1JlZ0V4RXJyb3JNZXNzYWdlfSA9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlZ0V4RXJyb3JNZXNzYWdlfTsKICAgIH0KCiAgICByZXR1cm4gXCVGb3JtRGF0YTsKfQoKPWhlYWQyIElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkVmFsdWUgPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9IHx8ICcnOwogICAgfQoKICAgIG15ICRDbGFzcyAgICA9ICcnOwogICAgbXkgJFNpemUgICAgID0gJ1c1MHBjJzsKICAgIG15ICRSZXF1aXJlZCA9ICRQYXJhbXtSZXF1aXJlZH07CiAgICBteSAkSW52YWxpZCAgPSAkUGFyYW17SW52YWxpZH07CiAgICBteSAkSXRlbUlkICAgPSAkUGFyYW17SXRlbUlkfTsKCiAgICBpZiAoJFJlcXVpcmVkKSB7CiAgICAgICAgJENsYXNzIC49ICcgVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgfQoKICAgIGlmICgkSW52YWxpZCkgewogICAgICAgICRDbGFzcyAuPSAnIFNlcnZlckVycm9yJzsKICAgIH0KICAgICRDbGFzcyAuPSAnICcgLiAkU2l6ZTsKICAgIG15ICRTdHJpbmcgPSAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIiRQYXJhbXtLZXl9XCIgY2xhc3M9XCIkQ2xhc3NcIiAiOwoKICAgIGlmICgkSXRlbUlkKSB7CiAgICAgICAgJFN0cmluZyAuPSAiaWQ9XCIkSXRlbUlkXCIgIjsKICAgIH0KCiAgICBpZiAoJFZhbHVlKSB7CgogICAgICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgICAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICAgICAjIHRyYW5zbGF0ZQogICAgICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICAgICAkVmFsdWUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJFZhbHVlKTsKICAgICAgICB9CgogICAgICAgICMgdHJhbnNmb3JtIGFzY2lpIHRvIGh0bWwKICAgICAgICAkVmFsdWUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAkU3RyaW5nIC49ICJ2YWx1ZT1cIiRWYWx1ZVwiICI7CgogICAgIyBhZGQgbWF4aW11bSBsZW5ndGgKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57TWF4TGVuZ3RofSApIHsKICAgICAgICAkU3RyaW5nIC49ICJtYXhsZW5ndGg9XCIkUGFyYW17SXRlbX0tPntJbnB1dH0tPntNYXhMZW5ndGh9XCIgIjsKICAgIH0KCiAgICAkU3RyaW5nIC49ICcvPiAnOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aGVhZDIgU2VhcmNoRm9ybURhdGFHZXQoKQoKZ2V0IHNlYXJjaCBmb3JtIGRhdGEKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17S2V5fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgS2V5IScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSAkVmFsdWU7CiAgICBpZiAoICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtLZXl9ICk7CiAgICB9CiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aGVhZDIgU2VhcmNoSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgc2VhcmNoIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hJbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaElucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkVmFsdWUgPSAkU2VsZi0+U2VhcmNoRm9ybURhdGFHZXQoJVBhcmFtKTsKICAgIGlmICggIWRlZmluZWQgJFZhbHVlICkgewogICAgICAgICRWYWx1ZSA9ICcnOwogICAgfQoKICAgIG15ICRTdHJpbmcgPSBxcXs8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJFBhcmFte0tleX0iIHZhbHVlPSIkVmFsdWUiIGNsYXNzPSJXNTBwYyIgPn07CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TGF5b3V0VGV4dEFyZWE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNvbmZpZ0l0ZW06OkxheW91dFRleHRBcmVhIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIHRleHRhcmVhIG9iamVjdHMKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXRUZXh0QXJlYS0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIE91dHB1dFN0cmluZ0NyZWF0ZSgpCgpjcmVhdGUgb3V0cHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5PdXRwdXRTdHJpbmdDcmVhdGUoCiAgICAgICAgVmFsdWUgPT4gMTEsICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIE91dHB1dFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW0hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgJFBhcmFte1ZhbHVlfSA9ICcnOwogICAgfQoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyB0cmFuc2xhdGUKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICRQYXJhbXtWYWx1ZX0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtWYWx1ZX0gKTsKICAgIH0KCiAgICBteSAkTGlua0ZlYXR1cmUgICAgPSAxOwogICAgbXkgJEhUTUxSZXN1bHRNb2RlID0gMTsKCiAgICAjIGRvIG5vdCB0cmFuc2Zvcm0gbGlua3MgaW4gcHJpbnQgdmlldwogICAgaWYgKCAkUGFyYW17UHJpbnR9ICkgewogICAgICAgICRMaW5rRmVhdHVyZSAgICA9IDA7CiAgICAgICAgJEhUTUxSZXN1bHRNb2RlID0gMDsKICAgIH0KCiAgICAjIHRyYW5zZm9ybSBhc2NpaSB0byBodG1sCiAgICAkUGFyYW17VmFsdWV9ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkUGFyYW17VmFsdWV9LAogICAgICAgIEhUTUxSZXN1bHRNb2RlID0+ICRIVE1MUmVzdWx0TW9kZSwKICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAkTGlua0ZlYXR1cmUsCiAgICApOwoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgRm9ybURhdGFHZXQoKQoKZ2V0IGZvcm0gZGF0YSBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRGb3JtRGF0YVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlRm9ybURhdGE7CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICAkRm9ybURhdGF7VmFsdWV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFte0tleX0gKTsKCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfSAmJiAhZGVmaW5lZCAkRm9ybURhdGF7VmFsdWV9ICkgewogICAgICAgICRGb3JtRGF0YXtJbnZhbGlkfSA9IDE7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e0ludmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIHZhbHVlIHdhcyBlbnRlcmVkIGluIHRoZSBmb3JtLCBhIHJlZ2V4IGlzIGRlZmluZWQgYW5kIHRoZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnZXgKICAgIGlmICgKICAgICAgICAkRm9ybURhdGF7VmFsdWV9CiAgICAgICAgJiYgJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVnRXh9CiAgICAgICAgJiYgJEZvcm1EYXRhe1ZhbHVlfSAhfiBteyAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZWdFeH0gfXhtcwogICAgICAgICkKICAgIHsKCiAgICAgICAgJEZvcm1EYXRhe0ludmFsaWR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e0ludmFsaWR9ICAgICAgICAgICA9IDE7CiAgICAgICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPnsgJFBhcmFte0tleX0gfS0+e1JlZ0V4RXJyb3JNZXNzYWdlfSA9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlZ0V4RXJyb3JNZXNzYWdlfTsKICAgIH0KCiAgICByZXR1cm4gXCVGb3JtRGF0YTsKfQoKPWhlYWQyIElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbnB1dENyZWF0ZSgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENvbHMgPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntDb2xzfSB8fCA1ODsKICAgIG15ICRSb3dzID0gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57Um93c30gfHwgMTA7CgogICAgbXkgJFZhbHVlID0gJFBhcmFte1ZhbHVlfTsKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICAkVmFsdWUgPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9IHx8ICcnOwogICAgfQoKICAgIG15ICRDbGFzcyAgICA9ICdXNTBwYyc7CiAgICBteSAkUmVxdWlyZWQgPSAkUGFyYW17UmVxdWlyZWR9OwogICAgbXkgJEludmFsaWQgID0gJFBhcmFte0ludmFsaWR9OwogICAgbXkgJEl0ZW1JZCAgID0gJFBhcmFte0l0ZW1JZH07CgogICAgaWYgKCRSZXF1aXJlZCkgewogICAgICAgICRDbGFzcyAuPSAnIFZhbGlkYXRlX1JlcXVpcmVkJzsKICAgIH0KCiAgICBpZiAoJEludmFsaWQpIHsKICAgICAgICAkQ2xhc3MgLj0gJyBTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyB0cmFuc2xhdGUKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHJhbnNsYXRpb259ICkgewogICAgICAgICRWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRWYWx1ZSk7CiAgICB9CiAgICBteSAkU3RyaW5nCiAgICAgICAgPSAiPHRleHRhcmVhIG5hbWU9XCIkUGFyYW17S2V5fVwiIGlkPVwiJEl0ZW1JZFwiIGNvbHM9XCIkQ29sc1wiIHJvd3M9XCIkUm93c1wiIGNsYXNzPVwiJENsYXNzXCI+JFZhbHVlPC90ZXh0YXJlYT4iOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aGVhZDIgU2VhcmNoRm9ybURhdGFHZXQoKQoKZ2V0IHNlYXJjaCBmb3JtIGRhdGEKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRm9ybURhdGFHZXQoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoRm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0tleX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEtleSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgbXkgJFZhbHVlOwogICAgaWYgKCAkUGFyYW17VmFsdWV9ICkgewogICAgICAgICRWYWx1ZSA9ICRQYXJhbXtWYWx1ZX07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17S2V5fSApOwogICAgfQogICAgcmV0dXJuICRWYWx1ZTsKfQoKPWhlYWQyIFNlYXJjaElucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIHNlYXJjaCBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFZhbHVlID0gJFNlbGYtPlNlYXJjaEZvcm1EYXRhR2V0KCVQYXJhbSk7CiAgICBpZiAoICFkZWZpbmVkICRWYWx1ZSApIHsKICAgICAgICAkVmFsdWUgPSAnJzsKICAgIH0KCiAgICBteSAkU3RyaW5nID0gcXF7PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IiRQYXJhbXtLZXl9IiB2YWx1ZT0iJFZhbHVlIiBjbGFzcz0iVzUwcGMiPn07CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6TWVudUdlbmVyaWM7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBwYXJlbnQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpCYXNlJyk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpMYW5ndWFnZScsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKKTsKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NvbmZpZ0l0ZW19ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDb25maWdJdGVtIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBncmFudCBhY2Nlc3MgYnkgZGVmYXVsdAogICAgbXkgJEFjY2VzcyA9IDE7CgogICAgIyBnZXQgYWN0aW9uCiAgICBteSAkQWN0aW9uID0gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259OwogICAgaWYgKCAkQWN0aW9uIGVxICdBZ2VudExpbmtPYmplY3QnICkgewoKICAgICAgICAjIFRoZSBMaW5rLWxpbmsgaXMgYSBzcGVjaWFsIGNhc2UsIGFzIGl0IGlzIG5vdCBzcGVjaWZpYyB0byBJVFNNQ29uZmlnSXRlbS4KICAgICAgICAjIEFzIGEgd29ya2Fyb3VuZCB3ZSBoYXJkY29kZSB0aGF0IEFnZW50TGlua09iamVjdCBpcyB0cmVhdGVkIGxpa2UgQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQKICAgICAgICAkQWN0aW9uID0gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0JzsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBncm91cHMKICAgIG15ICRHcm91cHNSbyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn0tPntHcm91cFJvfSB8fCBbXTsKICAgIG15ICRHcm91cHNSdyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn0tPntHcm91cH0gICB8fCBbXTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgaWYgKCAkQWN0aW9uICYmICggQHskR3JvdXBzUm99IHx8IEB7JEdyb3Vwc1J3fSApICkgewoKICAgICAgICAjIGRlbnkgYWNjZXNzIGJ5IGRlZmF1bHQsIHdoZW4gdGhlcmUgYXJlIGdyb3VwcyB0byBjaGVjawogICAgICAgICRBY2Nlc3MgPSAwOwoKICAgICAgICAjIGNoZWNrIHJlYWQgb25seSBncm91cHMKICAgICAgICBST0dST1VQOgogICAgICAgIGZvciBteSAkUm9Hcm91cCAoIEB7JEdyb3Vwc1JvfSApIHsKCiAgICAgICAgICAgIG5leHQgUk9HUk9VUCBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25DaGVjaygKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBHcm91cE5hbWUgPT4gJFJvR3JvdXAsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ3JvJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgbGFzdCBST0dST1VQOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayByZWFkIHdyaXRlIGdyb3VwcwogICAgICAgIFJXR1JPVVA6CiAgICAgICAgZm9yIG15ICRSd0dyb3VwICggQHskR3JvdXBzUnd9ICkgewoKICAgICAgICAgICAgbmV4dCBSV0dST1VQIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEdyb3VwTmFtZSA9PiAkUndHcm91cCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBvdXRwdXQgbWVudSBibG9jawogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ01lbnUnICk7CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ0l0ZW19IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayBpZiBhIGRpYWxvZyBoYXMgdG8gYmUgc2hvd24KICAgIGlmICggJFBhcmFte0NvbmZpZ30tPntEaWFsb2dUaXRsZX0gKSB7CiAgICAgICAgbXkgJENvbmZpZ09iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgICAgICBteSAkTGFuZ3VhZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyk7CgogICAgICAgICMgUmVwbGFjZSB0aGUgdGVtcGxhdGUgdG9vbGtpdCBleHByZXNzaW9ucyB3aXRoIHRoZSBmaW5hbCB2YWx1ZS4KICAgICAgICBteSAlSlNEYXRhID0gKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWdJdGVtfSB9LAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgICk7CgogICAgICAgIGRlbGV0ZSAkSlNEYXRhe0NvbmZpZ307CiAgICAgICAgZGVsZXRlICRKU0RhdGF7Q29uZmlnSXRlbX07CgogICAgICAgICRKU0RhdGF7RWxlbWVudFNlbGVjdG9yfSAgICAgICAgICAgID1+IHMvXFslXHMqRGF0YVwuTWVudUlEXHMqXHxccypodG1sXHMqJVxdLyRKU0RhdGF7TWVudUlEfS9pOwogICAgICAgICRKU0RhdGF7RGlhbG9nQ29udGVudFF1ZXJ5U3RyaW5nfSAgID1+IHMvXFslXHMqRGF0YVwuQ29uZmlnSXRlbUlEXHMqXHxccypodG1sXHMqJVxdLyRKU0RhdGF7Q29uZmlnSXRlbUlEfS9pOwogICAgICAgICRKU0RhdGF7Q29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmd9ID1+IHMvXFslXHMqRGF0YVwuQ29uZmlnSXRlbUlEXHMqXHxccypodG1sXHMqJVxdLyRKU0RhdGF7Q29uZmlnSXRlbUlEfS9pOwoKICAgICAgICAkSlNEYXRhe0RpYWxvZ1RpdGxlfSA9fiBzL1xbJVxzKlRyYW5zbGF0ZVwoIiguKikiXClccypcfFxzKmh0bWxccyolXF0vJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoJDEpL2VpOwogICAgICAgICRKU0RhdGF7RGlhbG9nVGl0bGV9ID1+IHMvXFslXHMqQ29uZmlnXCgiKC4qKSJcKVxzKiVcXS8kQ29uZmlnT2JqZWN0LT5HZXQoJDEpL2VpOwogICAgICAgICRKU0RhdGF7RGlhbG9nVGl0bGV9ID1+IHMvXFslXHMqRGF0YS5OdW1iZXJccypcfFxzKmh0bWxccyolXF0vJEpTRGF0YXtOdW1iZXJ9L2VpOwoKICAgICAgICAkSlNEYXRhe01lbnVJRH0gPSAnTWVudScgLiAkSlNEYXRhe01lbnVJRH07CgogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0lUU01TaG93Q29uZmlybURpYWxvZy4nIC4gJFBhcmFte01lbnVJRH0sCiAgICAgICAgICAgIFZhbHVlID0+IFwlSlNEYXRhLAogICAgICAgICk7CiAgICB9CgogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6T3ZlcnZpZXdTbWFsbDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZVNob3duIFN0YXJ0SGl0KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG5lZWQgQ29uZmlnSXRlbUlEcwogICAgaWYgKCAhJFBhcmFte0NvbmZpZ0l0ZW1JRHN9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgdGhlIENvbmZpZ0l0ZW1JRHMhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlZmluZSBpbmNpZGVudCBzaWduYWxzLCBuZWVkZWQgZm9yIHNlcnZpY2VzCiAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgVHJhbnNsYXRhYmxlKCdvcGVyYXRpb25hbCcpID0+ICdncmVlbmxlZCcsCiAgICAgICAgVHJhbnNsYXRhYmxlKCd3YXJuaW5nJykgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgIFRyYW5zbGF0YWJsZSgnaW5jaWRlbnQnKSAgICA9PiAncmVkbGVkJywKICAgICk7CgogICAgIyB0byBzdG9yZSB0aGUgY29sb3IgZm9yIHRoZSBkZXBsb3ltZW50IHN0YXRlcwogICAgbXkgJURlcGxTaWduYWxzOwoKICAgICMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBvYmplY3QKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICMgZ2V0IGxpc3Qgb2YgZGVwbG95bWVudCBzdGF0ZXMKICAgIG15ICREZXBsb3ltZW50U3RhdGVzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgICMgc2V0IGRlcGxveW1lbnQgc3R5bGUgY29sb3JzCiAgICBteSAkU3R5bGVDbGFzc2VzID0gJyc7CgogICAgSVRFTUlEOgogICAgZm9yIG15ICRJdGVtSUQgKCBzb3J0IGtleXMgJXskRGVwbG95bWVudFN0YXRlc0xpc3R9ICkgewoKICAgICAgICAjIGdldCBkZXBsb3ltZW50IHN0YXRlIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIGEgY29sb3IgaXMgZGVmaW5lZCBpbiBwcmVmZXJlbmNlcwogICAgICAgIG5leHQgSVRFTUlEIGlmICEkUHJlZmVyZW5jZXN7Q29sb3J9OwoKICAgICAgICAjIGdldCBkZXBsb3ltZW50IHN0YXRlCiAgICAgICAgbXkgJERlcGxTdGF0ZSA9ICREZXBsb3ltZW50U3RhdGVzTGlzdC0+eyRJdGVtSUR9OwoKICAgICAgICAjIHJlbW92ZSBhbnkgbm9uIGFzY2lpIHdvcmQgY2hhcmFjdGVycwogICAgICAgICREZXBsU3RhdGUgPX4gc3sgW15hLXpBLVowLTldIH17X31tc3hnOwoKICAgICAgICAjIHN0b3JlIHRoZSBvcmlnaW5hbCBkZXBsb3ltZW50IHN0YXRlIGFzIGtleQogICAgICAgICMgYW5kIHRoZSBzcyBzYWZlIGNvdmVydGVkIGRlcGxveW1lbnQgc3RhdGUgYXMgdmFsdWUKICAgICAgICAkRGVwbFNpZ25hbHN7ICREZXBsb3ltZW50U3RhdGVzTGlzdC0+eyRJdGVtSUR9IH0gPSAkRGVwbFN0YXRlOwoKICAgICAgICAjIGNvdmVydCB0byBsb3dlciBjYXNlCiAgICAgICAgbXkgJERlcGxTdGF0ZUNvbG9yID0gbGMgJFByZWZlcmVuY2Vze0NvbG9yfTsKCiAgICAgICAgIyBhZGQgdG8gc3R5bGUgY2xhc3NlcyBzdHJpbmcKICAgICAgICAkU3R5bGVDbGFzc2VzIC49ICIKICAgICAgICAgICAgLkZsYWcgc3Bhbi4kRGVwbFN0YXRlIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMkRGVwbFN0YXRlQ29sb3I7CiAgICAgICAgICAgIH0KICAgICAgICAiOwogICAgfQoKICAgICMgd3JhcCBpbnRvIHN0eWxlIHRhZ3MKICAgIGlmICgkU3R5bGVDbGFzc2VzKSB7CiAgICAgICAgJFN0eWxlQ2xhc3NlcyA9ICI8c3R5bGU+JFN0eWxlQ2xhc3Nlczwvc3R5bGU+IjsKICAgIH0KCiAgICAjIHN0b3JlIGVpdGhlciBDb25maWdJdGVtIElEcyBMb2NhbGx5CiAgICBteSBAQ29uZmlnSXRlbUlEcyA9IEB7ICRQYXJhbXtDb25maWdJdGVtSURzfSB9OwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBpZiBidWxrIGZlYXR1cmUgaXMgZW5hYmxlZAogICAgbXkgJEJ1bGtGZWF0dXJlID0gMDsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkJ1bGtGZWF0dXJlJykgKSB7CiAgICAgICAgbXkgQEdyb3VwczsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpCdWxrRmVhdHVyZUdyb3VwJykgKSB7CiAgICAgICAgICAgIEBHcm91cHMgPSBAeyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QnVsa0ZlYXR1cmVHcm91cCcpIH07CiAgICAgICAgfQogICAgICAgIGlmICggIUBHcm91cHMgKSB7CiAgICAgICAgICAgICRCdWxrRmVhdHVyZSA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBHUk9VUDoKICAgICAgICAgICAgZm9yIG15ICRHcm91cCAoQEdyb3VwcykgewogICAgICAgICAgICAgICAgbmV4dCBHUk9VUCBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25DaGVjaygKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIEdyb3VwTmFtZSA9PiAkR3JvdXAsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdydycsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRCdWxrRmVhdHVyZSA9IDE7CiAgICAgICAgICAgICAgICBsYXN0IEdST1VQOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBpdGVtIHByZSBtZW51IG1vZHVsZXMKICAgIG15IEBBY3Rpb25JdGVtczsKICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpQcmVNZW51TW9kdWxlJykgZXEgJ0hBU0gnICkgewogICAgICAgIG15ICVNZW51cyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpQcmVNZW51TW9kdWxlJykgfTsKCiAgICAgICAgTUVOVToKICAgICAgICBmb3IgbXkgJE1lbnVLZXkgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoICRNZW51c3skTWVudUtleX0tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1lbnVzeyRNZW51S2V5fS0+e01vZHVsZX0tPm5ldygKICAgICAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgbWVudSBpcyBhdmFpbGFibGUKICAgICAgICAgICAgICAgIG5leHQgTUVOVSBpZiByZWYgJE1lbnVzeyRNZW51S2V5fSBuZSAnSEFTSCc7CgogICAgICAgICAgICAgICAgIyBzZXQgY2xhc3NlcwogICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnVLZXl9LT57VGFyZ2V0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnVLZXl9LT57VGFyZ2V0fSBlcSAnUG9wVXAnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnVLZXl9LT57TWVudUNsYXNzfSA9ICdBc1BvcHVwJzsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51S2V5fS0+e1BvcHVwVHlwZX0gPSAnSVRTTUNvbmZpZ0l0ZW1BY3Rpb24nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51S2V5fS0+e01lbnVDbGFzc30gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51S2V5fS0+e1BvcHVwVHlwZX0gPSAnJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBncmFudCBhY2Nlc3MgYnkgZGVmYXVsdAogICAgICAgICAgICAgICAgbXkgJEFjY2VzcyA9IDE7CgogICAgICAgICAgICAgICAgbXkgJEFjdGlvbiA9ICRNZW51c3skTWVudUtleX0tPntBY3Rpb259OwoKICAgICAgICAgICAgICAgICMgY2FuIG5vdCBleGVjdXRlIHRoZSBtb2R1bGUgZHVlIHRvIGEgQ29uZmlnSXRlbSBpcyByZXF1aXJlZCwgdGhlbiBqdXN0IGNoZWNrIHRoZQogICAgICAgICAgICAgICAgIyBwZXJtaXNzaW9ucyBhcyBpbiB0aGUgTWVudU1vZHVsZUdlbmVyaWMKICAgICAgICAgICAgICAgIG15ICRHcm91cHNSbyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn0tPntHcm91cFJvfSB8fCBbXTsKICAgICAgICAgICAgICAgIG15ICRHcm91cHNSdyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn0tPntHcm91cH0gICB8fCBbXTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgICAgICAgICAgICAgIGlmICggJEFjdGlvbiAmJiAoIEB7JEdyb3Vwc1JvfSB8fCBAeyRHcm91cHNSd30gKSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBkZW55IGFjY2VzcyBieSBkZWZhdWx0LCB3aGVuIHRoZXJlIGFyZSBncm91cHMgdG8gY2hlY2sKICAgICAgICAgICAgICAgICAgICAkQWNjZXNzID0gMDsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayByZWFkIG9ubHkgZ3JvdXBzCiAgICAgICAgICAgICAgICAgICAgUk9HUk9VUDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFJvR3JvdXAgKCBAeyRHcm91cHNSb30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgUk9HUk9VUCBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25DaGVjaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cE5hbWUgPT4gJFJvR3JvdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ3JvJywKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICAgICAgICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBST0dST1VQOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayByZWFkIHdyaXRlIGdyb3VwcwogICAgICAgICAgICAgICAgICAgIFJXR1JPVVA6CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRSd0dyb3VwICggQHskR3JvdXBzUnd9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXBOYW1lID0+ICRSd0dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdydycsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgUldHUk9VUDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByZXR1cm4gaWYgdGhlcmUgaXMgbm8gYWNjZXNzIHRvIHRoZSBtb2R1bGUKICAgICAgICAgICAgICAgIG5leHQgTUVOVSBpZiAhJEFjY2VzczsKCiAgICAgICAgICAgICAgICAjIHRyYW5zbGF0ZSBOYW1lIGFuZCBEZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgbXkgJERlc2NyaXB0aW9uID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkTWVudXN7JE1lbnVLZXl9LT57RGVzY3JpcHRpb259ICk7CiAgICAgICAgICAgICAgICBteSAkTmFtZSAgICAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRNZW51c3skTWVudUtleX0tPntEZXNjcmlwdGlvbn0gKTsKCiAgICAgICAgICAgICAgICAjIGdlbmVyYXJ0ZSBhIHdlYiBzYWZlIGxpbmsKICAgICAgICAgICAgICAgIG15ICRMaW5rID0gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfSAuICRNZW51c3skTWVudUtleX0tPntMaW5rfTsKCiAgICAgICAgICAgICAgICAjIHNhbml0eSBjaGVjawogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkTWVudXN7JE1lbnVLZXl9LT57TWVudUNsYXNzfSApIHsKICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnVLZXl9LT57TWVudUNsYXNzfSA9ICcnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2VuZXJhdGUgSFRNTCBmb3IgdGhlIG1lbnUgaXRlbQogICAgICAgICAgICAgICAgbXkgJE1lbnVIVE1MID0gPDwgIkVORCI7CjxsaT4KICAgIDxhIGhyZWY9IiRMaW5rIiBjbGFzcz0iJE1lbnVzeyRNZW51S2V5fS0+e01lbnVDbGFzc30iIHRpdGxlPSIkRGVzY3JpcHRpb24iPiROYW1lPC9hPgo8L2xpPgpFTkQKCiAgICAgICAgICAgICAgICAkTWVudUhUTUwgPX4gcy9cbisvL2c7CiAgICAgICAgICAgICAgICAkTWVudUhUTUwgPX4gcy9ccysvIC9nOwogICAgICAgICAgICAgICAgJE1lbnVIVE1MID1+IHMvPFwhLS0uKz8tLT4vL2c7CgogICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51S2V5fS0+e0lEfSA9ICRNZW51c3skTWVudUtleX0tPntOYW1lfTsKICAgICAgICAgICAgICAgICRNZW51c3skTWVudUtleX0tPntJRH0gPX4gcy8oXHN8Jnw7KS8vaWc7CgogICAgICAgICAgICAgICAgcHVzaCBAQWN0aW9uSXRlbXMsIHsKICAgICAgICAgICAgICAgICAgICBIVE1MICAgICAgICA9PiAkTWVudUhUTUwsCiAgICAgICAgICAgICAgICAgICAgSUQgICAgICAgICAgPT4gJE1lbnVzeyRNZW51S2V5fS0+e0lEfSwKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICA9PiAkTGluaywKICAgICAgICAgICAgICAgICAgICBUYXJnZXQgICAgICA9PiAkTWVudXN7JE1lbnVLZXl9LT57VGFyZ2V0fSwKICAgICAgICAgICAgICAgICAgICBQb3B1cFR5cGUgICA9PiAkTWVudXN7JE1lbnVLZXl9LT57UG9wdXBUeXBlfSwKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAkRGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgU2hvd0NvbHVtbnMgcGFyYW1ldGVyCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBteSBAWE1MU2hvd0NvbHVtbnM7CiAgICBpZiAoICRQYXJhbXtTaG93Q29sdW1uc30gJiYgcmVmICRQYXJhbXtTaG93Q29sdW1uc30gZXEgJ0FSUkFZJyApIHsKICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkUGFyYW17U2hvd0NvbHVtbnN9IH07CiAgICB9CgogICAgIyBnZXQgY29uZmlnIGl0ZW0gb2JqZWN0CiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgICMgYnVpbGQgY29sdW1uIGhlYWRlciBibG9ja3MKICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgIyBzaG93IHRoZSBidWxrIGFjdGlvbiBidXR0b24gY2hlY2tib3hlcyBpZiBmZWF0dXJlIGlzIGVuYWJsZWQKICAgICAgICBpZiAoJEJ1bGtGZWF0dXJlKSB7CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAnQnVsa0FjdGlvbic7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJENvbHVtbiAoQFNob3dDb2x1bW5zKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBuZWVkZWQgdmVyaWFibGVzCiAgICAgICAgICAgIG15ICRDU1MgPSAnT3ZlcnZpZXdIZWFkZXInOwogICAgICAgICAgICBteSAkT3JkZXJCeTsKCiAgICAgICAgICAgICMgcmVtb3ZlIElEIGlmIG5lY2VzYXJ5CiAgICAgICAgICAgIGlmICggJFBhcmFte1NvcnRCeX0gKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17U29ydEJ5fSA9ICggJFBhcmFte1NvcnRCeX0gZXEgJ0luY2lTdGF0ZUlEJyApCiAgICAgICAgICAgICAgICAgICAgPyAnQ3VySW5jaVN0YXRlJwogICAgICAgICAgICAgICAgICAgIDogKCAkUGFyYW17U29ydEJ5fSBlcSAnRGVwbFN0YXRlSUQnICkgPyAnQ3VyRGVwbFN0YXRlJwogICAgICAgICAgICAgICAgICAgIDogKCAkUGFyYW17U29ydEJ5fSBlcSAnQ2xhc3NJRCcgKSAgICAgPyAnQ2xhc3MnCiAgICAgICAgICAgICAgICAgICAgOiAoICRQYXJhbXtTb3J0Qnl9IGVxICdDaGFuZ2VUaW1lJyApICA/ICdMYXN0Q2hhbmdlZCcKICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFte1NvcnRCeX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2V0IHRoZSBjb3JyZWN0IFNldCBDU1MgY2xhc3MgYW5kIG9yZGVyIGJ5IGxpbmsKICAgICAgICAgICAgaWYgKCAkUGFyYW17U29ydEJ5fSAmJiAoICRQYXJhbXtTb3J0Qnl9IGVxICRDb2x1bW4gKSApIHsKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte09yZGVyQnl9ICYmICggJFBhcmFte09yZGVyQnl9IGVxICdVcCcgKSApIHsKICAgICAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdEb3duJzsKICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydERlc2NlbmRpbmdMYXJnZSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdVcCc7CiAgICAgICAgICAgICAgICAgICAgJENTUyAuPSAnIFNvcnRBc2NlbmRpbmdMYXJnZSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdVcCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnSGVhZGVyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBDU1MgICAgID0+ICRDU1MsCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSA9PiAkT3JkZXJCeSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgWE1MIGNvbHVtbiBoZWFkZXJzIG9ubHkgaWYgdGhlIGZpbHRlciBpcyBub3Qgc2V0IHRvICdhbGwnCiAgICAgICAgIyBhbmQgaWYgdGhlcmUgYXJlIENJcyB0byBzaG93CiAgICAgICAgaWYgKCAkUGFyYW17RmlsdGVyfSAmJiAkUGFyYW17RmlsdGVyfSBuZSAnQWxsJyAmJiBAQ29uZmlnSXRlbUlEcyApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSB2ZXJzaW9uIGRhdGEgb2YgdGhlIGZpcnN0IGNvbmZpZyBpdGVtLCBpbmNsdWRpbmcgYWxsIHRoZSBYTUwgZGF0YQogICAgICAgICAgICAjIHRvIGdldCB0aGUgY29sdW1uIGhlYWRlciBuYW1lcwogICAgICAgICAgICBteSAkQ29uZmlnSXRlbSA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSURzWzBdLAogICAgICAgICAgICAgICAgWE1MRGF0YUdldCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNvbnZlcnQgdGhlIFhNTCBkYXRhIGludG8gYSBoYXNoCiAgICAgICAgICAgIG15ICRFeHRlbmRlZFZlcnNpb25EYXRhID0gJExheW91dE9iamVjdC0+WE1MRGF0YTJIYXNoKAogICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkQ29uZmlnSXRlbS0+e1hNTERlZmluaXRpb259LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICA9PiAkQ29uZmlnSXRlbS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdLAogICAgICAgICAgICAgICAgQXR0cmlidXRlcyAgICA9PiBcQFNob3dDb2x1bW5zLAogICAgICAgICAgICAgICAgUHJpbnQgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIHhtbCBjb2x1bW5zICh0aGV5IGNvbnRhaW4gOjopCiAgICAgICAgICAgIEBYTUxTaG93Q29sdW1ucyA9IGdyZXAgey86Oi99IEBTaG93Q29sdW1uczsKCiAgICAgICAgICAgIENPTFVNTjoKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBYTUxTaG93Q29sdW1ucykgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgY29sdW1uIGV4aXN0cyBpbiBDSS1EYXRhCiAgICAgICAgICAgICAgICBuZXh0IENPTFVNTiBpZiAhJEV4dGVuZGVkVmVyc2lvbkRhdGEtPnskQ29sdW1ufS0+e05hbWV9OwoKICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgeG1sIGF0dHJpYnV0ZSBoZWFkZXIKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZFhNTEF0dHJpYnV0ZUhlYWRlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgWE1MQXR0cmlidXRlSGVhZGVyID0+ICRFeHRlbmRlZFZlcnNpb25EYXRhLT57JENvbHVtbn0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBteSAkT3V0cHV0ICA9ICcnOwogICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICMgc2hvdyBjb25maWcgaXRlbXMgaWYgdGhlcmUgYXJlIHNvbWUKICAgIGlmIChAQ29uZmlnSXRlbUlEcykgewoKICAgICAgICAjIHRvIHN0b3JlIGFsbCBkYXRhCiAgICAgICAgbXkgJURhdGE7CgogICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoQENvbmZpZ0l0ZW1JRHMpIHsKICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFBhcmFte1N0YXJ0SGl0fQogICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRQYXJhbXtQYWdlU2hvd259ICsgJFBhcmFte1N0YXJ0SGl0fSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzCiAgICAgICAgICAgICAgICBteSAkSGFzQWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgU2NvcGUgID0+ICdJdGVtJywKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRIYXNBY2Nlc3M7CgogICAgICAgICAgICAgICAgIyBnZXQgY29uZmlnIGl0ZW0gZGF0YQogICAgICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW0gPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhR2V0ICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRDb25maWdJdGVtOwoKICAgICAgICAgICAgICAgICMgY29udmVydCB0aGUgWE1MIGRhdGEgaW50byBhIGhhc2gKICAgICAgICAgICAgICAgIG15ICRFeHRlbmRlZFZlcnNpb25EYXRhID0gJExheW91dE9iamVjdC0+WE1MRGF0YTJIYXNoKAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJENvbmZpZ0l0ZW0tPntYTUxEZWZpbml0aW9ufSwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRDb25maWdJdGVtLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0sCiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcyAgICA9PiBcQFNob3dDb2x1bW5zLAogICAgICAgICAgICAgICAgICAgIFByaW50ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzdG9yZSBjb25maWcgaXRlbSBkYXRhLAogICAgICAgICAgICAgICAgJURhdGEgPSAleyRDb25maWdJdGVtfTsKCiAgICAgICAgICAgICAgICAjIEdldCBjb25maWcgaXRlbSBkYXRhIGZvciAnQ3JlYXRlVGltZScgYW5kICdDaGFuZ2VUaW1lJy4KICAgICAgICAgICAgICAgIG15ICRDb25maWdJdGVtRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICREYXRhe0NyZWF0ZVRpbWV9ID0gJENvbmZpZ0l0ZW1EYXRhLT57Q3JlYXRlVGltZX07CiAgICAgICAgICAgICAgICAkRGF0YXtDaGFuZ2VUaW1lfSA9ICRDb25maWdJdGVtRGF0YS0+e0NoYW5nZVRpbWV9OwoKICAgICAgICAgICAgICAgICMgYnVpbGQgcmVjb3JkIGJsb2NrCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ29sdW1uIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJERhdGF7Q3VySW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU2lnbmFsID0+ICREZXBsU2lnbmFsc3sgJERhdGF7Q3VyRGVwbFN0YXRlfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIENPTFVNTjoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoQFhNTFNob3dDb2x1bW5zKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGNvbHVtbiBleGlzdHMgaW4gQ0ktRGF0YQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENPTFVNTiBpZiAhJEV4dGVuZGVkVmVyc2lvbkRhdGEtPnskQ29sdW1ufS0+e05hbWV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBDb252ZXJ0IHRvIGFzY2lpIHRleHQgaW4gY2FzZSB0aGUgdmFsdWUgY29udGFpbnMgaHRtbC4KICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPlRvQXNjaWkoIFN0cmluZyA9PiAkRXh0ZW5kZWRWZXJzaW9uRGF0YS0+eyRDb2x1bW59LT57VmFsdWV9IC8vICcnICkgLy8gJyc7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgYWxsIHdoaXRlc3BhY2UgYW5kIG5ld2xpbmVzIHRvIHNpbmdsZSBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgJFZhbHVlID1+IHN7IFxzKyB9eyB9Z3htczsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgeG1sIGF0dHJpYnV0ZSBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkWE1MQXR0cmlidXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxBdHRyaWJ1dGVEYXRhID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgbWFrZSBhIGRlZXAgY29weSBvZiB0aGUgYWN0aW9uIGl0ZW1zIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBkZWZpbml0aW9uCiAgICAgICAgICAgICAgICBteSAkQ2xvbmVkQWN0aW9uSXRlbXMgPSBTdG9yYWJsZTo6ZGNsb25lKCBcQEFjdGlvbkl0ZW1zICk7CgogICAgICAgICAgICAgICAgIyBzdWJzdGl0dXRlIFRUIHZhcmlhYmxlcwogICAgICAgICAgICAgICAgZm9yIG15ICRBY3Rpb25JdGVtICggQHskQ2xvbmVkQWN0aW9uSXRlbXN9ICkgewogICAgICAgICAgICAgICAgICAgICRBY3Rpb25JdGVtLT57SFRNTH0gPX4gc3sgXFFbJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IGh0bWwgJV1cRSB9eyRDb25maWdJdGVtSUR9eG1zZzsKICAgICAgICAgICAgICAgICAgICAkQWN0aW9uSXRlbS0+e0hUTUx9ID1+IHN7IFxRWyUgRGF0YS5WZXJzaW9uSUQgfCBodG1sICVdXEUgfXskQ29uZmlnSXRlbS0+e1ZlcnNpb25JRH19eG1zZzsKICAgICAgICAgICAgICAgICAgICAkQWN0aW9uSXRlbS0+e0xpbmt9ID1+IHN7IFxRWyUgRGF0YS5Db25maWdJdGVtSUQgfCBodG1sICVdXEUgfXskQ29uZmlnSXRlbUlEfXhtc2c7CiAgICAgICAgICAgICAgICAgICAgJEFjdGlvbkl0ZW0tPntMaW5rfSA9fiBzeyBcUVslIERhdGEuVmVyc2lvbklEIHwgaHRtbCAlXVxFIH17JENvbmZpZ0l0ZW0tPntWZXJzaW9uSUR9fXhtc2c7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgI215ICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgICAgICMgICAgRGF0YSA9PiAkQ2xvbmVkQWN0aW9uSXRlbXMsCiAgICAgICAgICAgICAgICAjKTsKCiAgICAgICAgICAgICAgICAjJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAjICAgIE5hbWUgPT4gJ0RvY3VtZW50UmVhZHlBY3Rpb25Sb3dBZGQnLAogICAgICAgICAgICAgICAgIyAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICMgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgIyAgICAgICAgRGF0YSAgICAgICAgID0+ICRKU09OLAogICAgICAgICAgICAgICAgIyAgICB9LAogICAgICAgICAgICAgICAgIyk7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICdJVFNNQ29uZmlnSXRlbUFjdGlvblJvdy4nIC4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkQ2xvbmVkQWN0aW9uSXRlbXMsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgdGhlcmUgYXJlIG5vIGNvbmZpZyBpdGVtcyB0byBzaG93LCBhIG5vIGRhdGEgZm91bmQgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRvdGFsQ29sdW1ucyA9PiBzY2FsYXIgQFNob3dDb2x1bW5zLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyB1c2UgdGVtcGxhdGUKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGwnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICRTZWxmLT57Vmlld1R5cGV9LAogICAgICAgICAgICBDb2x1bW5Db3VudCAgPT4gc2NhbGFyIEBTaG93Q29sdW1ucywKICAgICAgICAgICAgU3R5bGVDbGFzc2VzID0+ICRTdHlsZUNsYXNzZXMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQ6OklUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQ6OklUU01Db25maWdJdGVtIC0gYWxsIENvbmZpZ0l0ZW0tcmVsYXRlZCBIVE1MIGZ1bmN0aW9ucwoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgSVRTTSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQtcmVsYXRlZCBIVE1MIGZ1bmN0aW9ucwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBJVFNNQ29uZmlnSXRlbU91dHB1dFN0cmluZ0NyZWF0ZSgpCgpyZXR1cm5zIGFuIG91dHB1dCBzdHJpbmcKCiAgICBteSAkU3RyaW5nID0gJExheW91dE9iamVjdC0+SVRTTUNvbmZpZ0l0ZW1PdXRwdXRTdHJpbmdDcmVhdGUoCiAgICAgICAgVmFsdWUgPT4gMTEsICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEl0ZW0gID0+ICRJdGVtUmVmLAogICAgICAgIFByaW50ID0+IDEsICAgICAgICAjIChvcHRpb25hbCwgZGVmYXVsdCAwKQogICAgKTsKCj1jdXQKCnN1YiBJVFNNQ29uZmlnSXRlbU91dHB1dFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW0hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkU2VsZi0+X0lUU01Mb2FkTGF5b3V0QmFja2VuZCgKICAgICAgICBUeXBlID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1R5cGV9LAogICAgKTsKCiAgICByZXR1cm4gJycgaWYgISRCYWNrZW5kT2JqZWN0OwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0IHN0cmluZwogICAgbXkgJFN0cmluZyA9ICRCYWNrZW5kT2JqZWN0LT5PdXRwdXRTdHJpbmdDcmVhdGUoJVBhcmFtKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWhlYWQyIElUU01Db25maWdJdGVtRm9ybURhdGFHZXQoKQoKcmV0dXJucyB0aGUgdmFsdWVzIGZyb20gdGhlIGh0bWwgZm9ybSBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRGb3JtRGF0YVJlZiA9ICRMYXlvdXRPYmplY3QtPklUU01Db25maWdJdGVtRm9ybURhdGFHZXQoCiAgICAgICAgS2V5ICAgICAgICAgID0+ICdJdGVtOjoxOjpOb2RlOjozJywKICAgICAgICBJdGVtICAgICAgICAgPT4gJEl0ZW1SZWYsCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgSVRTTUNvbmZpZ0l0ZW1Gb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSBDb25maWdJdGVtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJFNlbGYtPl9JVFNNTG9hZExheW91dEJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIHt9IGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15ICRGb3JtRGF0YSA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCglUGFyYW0pOwoKICAgIHJldHVybiAkRm9ybURhdGE7Cn0KCj1oZWFkMiBJVFNNQ29uZmlnSXRlbUlucHV0Q3JlYXRlKCkKCnJldHVybnMgYSBpbnB1dCBmaWVsZCBodG1sIHN0cmluZwoKICAgIG15ICRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5JVFNNQ29uZmlnSXRlbUlucHV0Q3JlYXRlKAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgVmFsdWUgPT4gMTEsICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIElUU01Db25maWdJdGVtSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJFNlbGYtPl9JVFNNTG9hZExheW91dEJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuICcnIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGxvb2t1cCBpdGVtIHZhbHVlCiAgICBteSAkU3RyaW5nID0gJEJhY2tlbmRPYmplY3QtPklucHV0Q3JlYXRlKCVQYXJhbSk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1oZWFkMiBJVFNNQ29uZmlnSXRlbVNlYXJjaEZvcm1EYXRhR2V0KCkKCnJldHVybnMgdGhlIHZhbHVlcyBmcm9tIHRoZSBzZWFyY2ggaHRtbCBmb3JtCgogICAgbXkgJEFycmF5UmVmID0gJExheW91dE9iamVjdC0+SVRTTUNvbmZpZ0l0ZW1TZWFyY2hGb3JtRGF0YUdldCgKICAgICAgICBLZXkgPT4gJ0l0ZW06OjE6Ok5vZGU6OjMnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIElUU01Db25maWdJdGVtU2VhcmNoRm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJFNlbGYtPl9JVFNNTG9hZExheW91dEJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIFtdIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15ICRWYWx1ZXMgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRm9ybURhdGFHZXQoJVBhcmFtKTsKCiAgICByZXR1cm4gJFZhbHVlczsKfQoKPWhlYWQyIElUU01Db25maWdJdGVtU2VhcmNoSW5wdXRDcmVhdGUoKQoKcmV0dXJucyBhIHNlYXJjaCBpbnB1dCBmaWVsZCBodG1sIHN0cmluZwoKICAgIG15ICRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5JVFNNQ29uZmlnSXRlbVNlYXJjaElucHV0Q3JlYXRlKAogICAgICAgIEtleSA9PiAnSXRlbTo6MTo6Tm9kZTo6MycsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgSVRTTUNvbmZpZ0l0ZW1TZWFyY2hJbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkU2VsZi0+X0lUU01Mb2FkTGF5b3V0QmFja2VuZCgKICAgICAgICBUeXBlID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1R5cGV9LAogICAgKTsKCiAgICByZXR1cm4gJycgaWYgISRCYWNrZW5kT2JqZWN0OwoKICAgICMgbG9va3VwIGl0ZW0gdmFsdWUKICAgIG15ICRTdHJpbmcgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoSW5wdXRDcmVhdGUoJVBhcmFtKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWhlYWQyIF9JVFNNTG9hZExheW91dEJhY2tlbmQoKQoKbG9hZCBhIGlucHV0IHR5cGUgYmFja2VuZCBtb2R1bGUKCiAgICAkQmFja2VuZE9iamVjdCA9ICRMYXlvdXRPYmplY3QtPl9JVFNNTG9hZExheW91dEJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAnR2VuZXJhbENhdGFsb2cnLAogICAgKTsKCj1jdXQKCnN1YiBfSVRTTUxvYWRMYXlvdXRCYWNrZW5kIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICBpZiAoICEkUGFyYW17VHlwZX0gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBUeXBlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJEdlbmVyaWNNb2R1bGUgPSAiS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtOjpMYXlvdXQkUGFyYW17VHlwZX0iOwoKICAgICMgbG9hZCB0aGUgYmFja2VuZCBtb2R1bGUKICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoJEdlbmVyaWNNb2R1bGUpICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGxvYWQgYmFja2VuZCBtb2R1bGUgJFBhcmFte1R5cGV9ISIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBuZXcgaW5zdGFuY2UKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEdlbmVyaWNNb2R1bGUtPm5ldygKICAgICAgICAleyRTZWxmfSwKICAgICAgICAlUGFyYW0sCiAgICAgICAgTGF5b3V0T2JqZWN0ID0+ICRTZWxmLAogICAgKTsKCiAgICBpZiAoICEkQmFja2VuZE9iamVjdCApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYmFja2VuZCBtb2R1bGUgJFBhcmFte1R5cGV9ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRCYWNrZW5kT2JqZWN0Owp9Cgo9aGVhZDIgSVRTTUNvbmZpZ0l0ZW1MaXN0U2hvdygpCgpSZXR1cm5zIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGl0ZW1zIHdpdGggc29ydCBhbmQgcGFnaW5hdGlvbiBjYXBhYmlsaXRpZXMuCgpUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gTDxLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0VGlja2V0OjpUaWNrZXRMaXN0U2hvdygpPgppbiBGPEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXRUaWNrZXQucG0+LgoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5JVFNNQ29uZmlnSXRlbUxpc3RTaG93KAogICAgICAgIENvbmZpZ0l0ZW1JRHMgPT4gJENvbmZpZ0l0ZW1JRHNSZWYsICAgICAgICAgICAgICAgICAgIyB0b3RhbCBsaXN0IG9mIGNvbmZpZyBpdGVtIGlkcywgdGhhdCBjYW4gYmUgbGlzdGVkCiAgICAgICAgVG90YWwgICAgICAgICA9PiBzY2FsYXIgQHsgJENvbmZpZ0l0ZW1JRHNSZWYgfSwgICAgICAjIHRvdGFsIG51bWJlciBvZiBsaXN0IGl0ZW1zLCBjb25maWcgaXRlbXMgaW4gdGhpcyBjYXNlCiAgICAgICAgVmlldyAgICAgICAgICA9PiAkU2VsZi0+e1ZpZXd9LCAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAnU21hbGwnCiAgICAgICAgRmlsdGVyICAgICAgICA9PiAnQWxsJywKICAgICAgICBGaWx0ZXJzICAgICAgID0+IFwlTmF2QmFyRmlsdGVyLAogICAgICAgIEZpbHRlckxpbmsgICAgPT4gJExpbmtGaWx0ZXIsCiAgICAgICAgVGl0bGVOYW1lICAgICA9PiAnT3ZlcnZpZXc6IENvbmZpZyBJdGVtOiBDb21wdXRlcicsCiAgICAgICAgVGl0bGVWYWx1ZSAgICA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgRW52ICAgICAgICAgICA9PiAkU2VsZiwKICAgICAgICBMaW5rUGFnZSAgICAgID0+ICRMaW5rUGFnZSwKICAgICAgICBMaW5rU29ydCAgICAgID0+ICRMaW5rU29ydCwKICAgICAgICBGcm9udGVuZCAgICAgID0+ICdBZ2VudCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAoQWdlbnR8Q3VzdG9tZXIpLCBkZWZhdWx0OiBBZ2VudCwgaW5kaWNhdGVzIGZyb20gd2hpY2ggZnJvbnRlbmQgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkCiAgICApOwoKPWN1dAoKc3ViIElUU01Db25maWdJdGVtTGlzdFNob3cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHRha2Ugb2JqZWN0IHJlZiB0byBsb2NhbCwgcmVtb3ZlIGl0IGZyb20gJVBhcmFtIChwcmV2ZW50IG1lbW9yeSBsZWFrKQogICAgbXkgJEVudiA9IGRlbGV0ZSAkUGFyYW17RW52fTsKCiAgICAjIGxvb2t1cCBsYXRlc3QgdXNlZCB2aWV3IG1vZGUKICAgIGlmICggISRQYXJhbXtWaWV3fSAmJiAkU2VsZi0+eyAnVXNlcklUU01Db25maWdJdGVtT3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAkUGFyYW17Vmlld30gPSAkU2VsZi0+eyAnVXNlcklUU01Db25maWdJdGVtT3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfTsKICAgIH0KCiAgICAjIHNldCBmcm9udGVuZAogICAgbXkgJEZyb250ZW5kID0gJFBhcmFte0Zyb250ZW5kfSB8fCAnQWdlbnQnOwoKICAgICMgc2V0IGRlZmF1dCB2aWV3IG1vZGUgdG8gJ3NtYWxsJwogICAgbXkgJFZpZXcgPSAkUGFyYW17Vmlld30gfHwgJ1NtYWxsJzsKCiAgICAjIHN0b3JlIGxhdGVzdCB2aWV3IG1vZGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpLT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJJVFNNQ29uZmlnSXRlbU92ZXJ2aWV3JyAuICRFbnYtPntBY3Rpb259LAogICAgICAgIFZhbHVlICAgICA9PiAkVmlldywKICAgICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBiYWNrZW5kIGZyb20gY29uZmlnCiAgICBteSAkQmFja2VuZHMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpGcm9udGVuZDo6T3ZlcnZpZXcnKTsKICAgIGlmICggISRCYWNrZW5kcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTmVlZCBjb25maWcgb3B0aW9uIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6T3ZlcnZpZXcnLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBmb3IgaGFzaC1yZWYKICAgIGlmICggcmVmICRCYWNrZW5kcyBuZSAnSEFTSCcgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0NvbmZpZyBvcHRpb24gSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpPdmVydmlldyBuZWVkcyB0byBiZSBhIEhBU0ggcmVmIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBjb25maWcga2V5CiAgICBpZiAoICEkQmFja2VuZHMtPnskVmlld30gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIk5vIGNvbmZpZyBvcHRpb24gZm91bmQgZm9yIHRoZSB2aWV3ICckVmlldychIiwKICAgICAgICApOwogICAgfQoKICAgICMgbmF2IGJhcgogICAgbXkgJFN0YXJ0SGl0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAnU3RhcnRIaXQnLAogICAgKSB8fCAxOwoKICAgICMgZ2V0IHBlcnNvbmFsIHBhZ2Ugc2hvd24gY291bnQKICAgIG15ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSA9ICdVc2VyQ29uZmlnSXRlbU92ZXJ2aWV3JyAuICRWaWV3IC4gJ1BhZ2VTaG93bic7CiAgICBteSAkUGFnZVNob3duICAgICAgICAgICAgICAgPSAkU2VsZi0+eyRQYWdlU2hvd25QcmVmZXJlbmNlc0tleX0gfHwgMTA7CiAgICBteSAkR3JvdXAgICAgICAgICAgICAgICAgICAgPSAnQ29uZmlnSXRlbU92ZXJ2aWV3JyAuICRWaWV3IC4gJ1BhZ2VTaG93bic7CgogICAgIyBjaGVjayBzdGFydCBvcHRpb24sIGlmIGhpZ2hlciB0aGVuIGVsZW1lbnRzIGF2YWlsYWJsZSwgc2V0CiAgICAjIGl0IHRvIHRoZSBsYXN0IG92ZXJ2aWV3IHBhZ2UgKFRoYW5rcyB0byBTdGVmYW4gU2NobWlkdCEpCiAgICBpZiAoICRTdGFydEhpdCA+ICRQYXJhbXtUb3RhbH0gKSB7CiAgICAgICAgbXkgJFBhZ2VzID0gaW50KCAoICRQYXJhbXtUb3RhbH0gLyAkUGFnZVNob3duICkgKyAwLjk5OTk5ICk7CiAgICAgICAgJFN0YXJ0SGl0ID0gKCAoICRQYWdlcyAtIDEgKSAqICRQYWdlU2hvd24gKSArIDE7CiAgICB9CgogICAgIyBnZXQgZGF0YSBzZWxlY3Rpb24KICAgIG15ICVEYXRhOwogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgnUHJlZmVyZW5jZXNHcm91cHMnKTsKICAgIGlmICggJENvbmZpZyAmJiAkQ29uZmlnLT57JEdyb3VwfSAmJiAkQ29uZmlnLT57JEdyb3VwfS0+e0RhdGF9ICkgewogICAgICAgICVEYXRhID0gJXsgJENvbmZpZy0+eyRHcm91cH0tPntEYXRhfSB9OwogICAgfQoKICAgICMgc2V0IHBhZ2UgbGltaXQgYW5kIGJ1aWxkIHBhZ2UgbmF2CiAgICBteSAkTGltaXQgICA9ICRQYXJhbXtMaW1pdH0gfHwgMjBfMDAwOwogICAgbXkgJVBhZ2VOYXYgPSAkTGF5b3V0T2JqZWN0LT5QYWdlTmF2QmFyKAogICAgICAgIExpbWl0ICAgICA9PiAkTGltaXQsCiAgICAgICAgU3RhcnRIaXQgID0+ICRTdGFydEhpdCwKICAgICAgICBQYWdlU2hvd24gPT4gJFBhZ2VTaG93biwKICAgICAgICBBbGxIaXRzICAgPT4gJFBhcmFte1RvdGFsfSB8fCAwLAogICAgICAgIEFjdGlvbiAgICA9PiAnQWN0aW9uPScgLiAkRW52LT57QWN0aW9ufSwKICAgICAgICBMaW5rICAgICAgPT4gJFBhcmFte0xpbmtQYWdlfSwKICAgICk7CgogICAgIyBidWlsZCBzaG93biB0aWNrZXQgYSBwYWdlCiAgICAkUGFyYW17UmVxdWVzdGVkVVJMfSAgICA9ICRQYXJhbXtSZXF1ZXN0ZWRVUkx9IHx8ICJBY3Rpb249JFNlbGYtPntBY3Rpb259OyRQYXJhbXtMaW5rUGFnZX0iOwogICAgJFBhcmFte0dyb3VwfSAgICAgICAgICAgPSAkR3JvdXA7CiAgICAkUGFyYW17UHJlZmVyZW5jZXNLZXl9ICA9ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleTsKICAgICRQYXJhbXtQYWdlU2hvd25TdHJpbmd9ID0gJFNlbGYtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSwKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFnZVNob3duLAogICAgICAgIERhdGEgICAgICAgID0+IFwlRGF0YSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIFNvcnQgICAgICAgID0+ICdOdW1lcmljVmFsdWUnLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGJ1aWxkIG5hdmJhciBjb250ZW50CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIGJhY2sgbGluawogICAgaWYgKCAkUGFyYW17TGlua0JhY2t9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VCYWNrJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0lUU01Db25maWdJdGVtU2VhcmNoJywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgUHJvZmlsZSA9PiAkUGFyYW17UHJvZmlsZX0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRQYXJhbXtDbGFzc0lEfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGZpbHRlcnMKICAgIGlmICggJFBhcmFte0ZpbHRlcnN9ICkgewoKICAgICAgICAjIGdldCBnaXZlbiBmaWx0ZXJzCiAgICAgICAgbXkgQE5hdkJhckZpbHRlcnM7CiAgICAgICAgZm9yIG15ICRQcmlvICggc29ydCBrZXlzICV7ICRQYXJhbXtGaWx0ZXJzfSB9ICkgewogICAgICAgICAgICBwdXNoIEBOYXZCYXJGaWx0ZXJzLCAkUGFyYW17RmlsdGVyc30tPnskUHJpb307CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGZpbHRlciBjb250ZW50CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBsb29wIG92ZXIgZmlsdGVycwogICAgICAgIG15ICRDb3VudCA9IDA7CiAgICAgICAgZm9yIG15ICRGaWx0ZXIgKEBOYXZCYXJGaWx0ZXJzKSB7CgogICAgICAgICAgICAjIGluY3JlbWVudCBmaWx0ZXIgY291bnQgYW5kIGJ1aWxkIGZpbHRlciBpdGVtCiAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJXskRmlsdGVyfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZpbHRlciBpcyBzZWxlY3RlZAogICAgICAgICAgICBpZiAoICRGaWx0ZXItPntGaWx0ZXJ9IGVxICRQYXJhbXtGaWx0ZXJ9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgbG9vcCBvdmVyIGNvbmZpZ3VyZWQgYmFja2VuZHMKICAgIGZvciBteSAkQmFja2VuZCAoIHNvcnQga2V5cyAleyRCYWNrZW5kc30gKSB7CgogICAgICAgICMgYnVpbGQgbmF2YmFyIHZpZXcgbW9kZQogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGN1cnJlbnQgdmlldyBpcyBjb25maWd1cmVkIGluIGJhY2tlbmQKICAgICAgICBpZiAoICRWaWV3IGVxICRCYWNrZW5kICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgcGFnZSBuYXYgaXMgYXZhaWxhYmxlCiAgICBpZiAoJVBhZ2VOYXYpIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhZ2VOYXYsCiAgICAgICAgKTsKCiAgICAgICAgIyBkb24ndCBzaG93IGNvbnRleHQgc2V0dGluZ3MgaW4gQUpBWCBjYXNlIChlLiBnLiBpbiBjdXN0b21lciB0aWNrZXQgaGlzdG9yeSksCiAgICAgICAgIyAgIGJlY2F1c2UgdGhlIHN1Ym1pdCB3aXRoIHBhZ2UgcmVsb2FkIHdpbGwgbm90IHdvcmsgdGhlcmUKICAgICAgICBpZiAoICEkUGFyYW17QUpBWH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ29udGV4dFNldHRpbmdzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgYnVsayBmZWF0dXJlIGlzIGVuYWJsZWQKICAgIG15ICRCdWxrRmVhdHVyZSA9IDA7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpCdWxrRmVhdHVyZScpICkgewogICAgICAgIG15IEBHcm91cHM7CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QnVsa0ZlYXR1cmVHcm91cCcpICkgewogICAgICAgICAgICBAR3JvdXBzID0gQHsgJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkJ1bGtGZWF0dXJlR3JvdXAnKSB9OwogICAgICAgIH0KICAgICAgICBpZiAoICFAR3JvdXBzICkgewogICAgICAgICAgICAkQnVsa0ZlYXR1cmUgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgR1JPVVA6CiAgICAgICAgICAgIGZvciBteSAkR3JvdXAgKEBHcm91cHMpIHsKICAgICAgICAgICAgICAgIG5leHQgR1JPVVAgaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBHcm91cE5hbWUgPT4gJEdyb3VwLAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAncncnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkQnVsa0ZlYXR1cmUgPSAxOwogICAgICAgICAgICAgICAgbGFzdCBHUk9VUDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgdGhlIGJ1bGsgYWN0aW9uIGJ1dHRvbiBpZiBmZWF0dXJlIGlzIGVuYWJsZWQKICAgIGlmICgkQnVsa0ZlYXR1cmUpIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQnVsa0FjdGlvbicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhZ2VOYXYsCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIGh0bWwgY29udGVudAogICAgbXkgJE91dHB1dE5hdkJhciA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNvbmZpZ0l0ZW1PdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGNyZWF0ZSBvdXRwdXQKICAgIG15ICRPdXRwdXRSYXcgPSAnJzsKICAgIGlmICggISRQYXJhbXtPdXRwdXR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPlByaW50KAogICAgICAgICAgICBPdXRwdXQgPT4gXCRPdXRwdXROYXZCYXIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXRSYXcgLj0gJE91dHB1dE5hdkJhcjsKICAgIH0KCiAgICAjIGxvYWQgbW9kdWxlCiAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkQmFja2VuZHMtPnskVmlld30tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBiYWNrZW5kIG9iamVjdAogICAgbXkgJE9iamVjdCA9ICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0tPm5ldyggJXskRW52fSApOwogICAgcmV0dXJuIGlmICEkT2JqZWN0OwoKICAgICMgcnVuIG1vZHVsZQogICAgbXkgJE91dHB1dCA9ICRPYmplY3QtPlJ1bigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgRnJvbnRlbmQgID0+ICRGcm9udGVuZCwKICAgICk7CgogICAgIyBjcmVhdGUgb3V0cHV0CiAgICBpZiAoICEkUGFyYW17T3V0cHV0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5QcmludCgKICAgICAgICAgICAgT3V0cHV0ID0+IFwkT3V0cHV0LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0UmF3IC49ICRPdXRwdXQ7CiAgICB9CgogICAgIyBjcmVhdGUgb3ZlcnZpZXcgbmF2IGJhcgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgcmV0dXJuIGNvbnRlbnQgaWYgYXZhaWxhYmxlCiAgICByZXR1cm4gJE91dHB1dFJhdzsKfQoKPWhlYWQyIFhNTERhdGEySGFzaCgpCgpyZXR1cm5zIGEgaGFzaCByZWZlcmVuY2Ugd2l0aCB0aGUgcmVxdWVzdGVkIGF0dHJpYnV0ZXMgZGF0YSBmb3IgYSBjb25maWcgaXRlbQoKUmV0dXJuCgogICAgJERhdGEgPSB7CiAgICAgICAgJ0hhcmREaXNrOjoyJyA9PiB7CiAgICAgICAgICAgIFZhbHVlID0+ICdIRDInLAogICAgICAgICAgICBOYW1lICA9PiAnSGFyZCBEaXNrJywKICAgICAgICAgfSwKICAgICAgICAnQ1BVOjoxJyA9PiB7CiAgICAgICAgICAgIFZhbHVlID0+ICcnLAogICAgICAgICAgICBOYW1lICA9PiAnQ1BVJywKICAgICAgICB9LAogICAgICAgICdIYXJkRGlzazo6Mjo6Q2FwYWNpdHk6OjEnID0+IHsKICAgICAgICAgICAgVmFsdWUgPT4gJzc4MCBHQicsCiAgICAgICAgICAgIE5hbWUgID0+ICdDYXBhY2l0eScsCiAgICAgICAgfSwKICAgIH07CgogICAgbXkgJERhdGEgPSAkTGF5b3V0T2JqZWN0LT5YTUxEYXRhMkhhc2goCiAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkVmVyc2lvbi0+e1hNTERlZmluaXRpb259LAogICAgICAgIFhNTERhdGEgICAgICAgPT4gJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdLT57VmVyc2lvbn0tPlsxXSwKICAgICAgICBBdHRyaWJ1dGVzICAgID0+IFsnQ1BVOjoxJywgJ0hhcmREcml2ZTo6Mjo6Q2FwYWNpdHk6OjEnLCAuLi5dLAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVEYXRhSGFzaFJlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgUHJlZml4ICAgICAgICA9PiAnSGFyZERpc2s6OjEnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgWE1MRGF0YTJIYXNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERhdGF9OwogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgISRQYXJhbXtBdHRyaWJ1dGVzfTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERhdGF9IG5lICdIQVNIJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtBdHRyaWJ1dGVzfSBuZSAnQVJSQVknOwoKICAgICMgdG8gc3RvcmUgdGhlIHJldHVybiBkYXRhCiAgICBteSAkRGF0YSA9ICRQYXJhbXtEYXRhfSB8fCB7fTsKCiAgICAjIGNyZWF0ZSBhIGxvb2t1cCBzdHJ1Y3R1cmUKICAgIG15ICVSZWxldmFudEF0dHJpYnV0ZXMgPSBtYXAgeyAkXyA9PiAxIH0gQHsgJFBhcmFte0F0dHJpYnV0ZXN9IH07CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICBteSAkQ291bnRNYXggPSAkSXRlbS0+e0NvdW50TWF4fSB8fCAxOwoKICAgICAgICBDT1VOVEVSOgogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJENvdW50TWF4ICkgewoKICAgICAgICAgICAgIyBhZGQgcHJlZml4CiAgICAgICAgICAgIG15ICRQcmVmaXggPSAkSXRlbS0+e0tleX0gLiAnOjonIC4gJENvdW50ZXI7CiAgICAgICAgICAgIGlmICggJFBhcmFte1ByZWZpeH0gKSB7CiAgICAgICAgICAgICAgICAkUHJlZml4ID0gJFBhcmFte1ByZWZpeH0gLiAnOjonIC4gJFByZWZpeDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBza2lwIG5vdCBuZWVkZWQgZWxlbWVudHMgYW5kIHN1YiBlbGVtZW50cwogICAgICAgICAgICBuZXh0IENPVU5URVIgaWYgIWdyZXAgeyAkXyA9fiBte1xBJFByZWZpeH0gfSBAeyAkUGFyYW17QXR0cmlidXRlc30gfTsKCiAgICAgICAgICAgICMgbG9va3VwIHZhbHVlCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5YTUxWYWx1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH0gLy8gJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG9ubHkgaWYgdmFsdWUgaXMgZGVmaW5lZAogICAgICAgICAgICBpZiAoIGRlZmluZWQgJFZhbHVlICkgewoKICAgICAgICAgICAgICAgICMgY3JlYXRlIG91dHB1dCBzdHJpbmcKICAgICAgICAgICAgICAgICRWYWx1ZSA9ICRTZWxmLT5JVFNNQ29uZmlnSXRlbU91dHB1dFN0cmluZ0NyZWF0ZSgKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgICAgICAgICAgUHJpbnQgPT4gJFBhcmFte1ByaW50fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJFJlbGV2YW50QXR0cmlidXRlc3skUHJlZml4fSApIHsKCiAgICAgICAgICAgICAgICAjIHN0b3JlIHRoZSBpdGVtIGluIGhhc2gKICAgICAgICAgICAgICAgICREYXRhLT57JFByZWZpeH0gPSB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWUgLy8gJycsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbiwgaWYgIlN1YiIgd2FzIGZvdW5kCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntTdWJ9ICkgewogICAgICAgICAgICAgICAgJERhdGEgPSAkU2VsZi0+WE1MRGF0YTJIYXNoKAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLAogICAgICAgICAgICAgICAgICAgIFByZWZpeCAgICAgICAgPT4gJFByZWZpeCwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMgICAgPT4gJFBhcmFte0F0dHJpYnV0ZXN9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJERhdGE7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0OjpJVFNNQ29uZmlnSXRlbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0OwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdDo6SVRTTUNvbmZpZ0l0ZW0gLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgbGluayBvYmplY3QgKGNvbmZpZyBpdGVtKQoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdDo6SVRTTUNvbmZpZ0l0ZW0tPm5ldygKICAgICAgICBVc2VyTGFuZ3VhZ2UgPT4gJ2VuJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkTmVlZGVkIChxdyhVc2VyTGFuZ3VhZ2UgVXNlcklEKSkgewogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH0gfHwgZGllICJHb3Qgbm8gJE5lZWRlZCEiOwogICAgfQoKICAgICMgV2UgbmVlZCBvdXIgb3duIExheW91dE9iamVjdCBpbnN0YW5jZSB0byBhdm9pZCBibG9ja2RhdGEgY29sbGlzaW9ucwogICAgIyAgIHdpdGggdGhlIG1haW4gcGFnZS4KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fSA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQtPm5ldyggJXskU2VsZn0gKTsKCiAgICAjIGRlZmluZSBuZWVkZWQgdmFyaWFibGVzCiAgICAkU2VsZi0+e09iamVjdERhdGF9ID0gewogICAgICAgIE9iamVjdCAgICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBSZWFsbmFtZSAgID0+ICdDb25maWdJdGVtJywKICAgICAgICBPYmplY3ROYW1lID0+ICdTb3VyY2VPYmplY3RJRCcsCiAgICB9OwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFRhYmxlQ3JlYXRlQ29tcGxleCgpCgpyZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgYmxvY2sgZGF0YQoKUmV0dXJuCgogICAgQEJsb2NrRGF0YSA9ICgKICAgICAgICB7CgogICAgICAgICAgICBPYmplY3ROYW1lICA9PiAnQ29uZmlnSXRlbUlEJywKICAgICAgICAgICAgT2JqZWN0SUQgICAgPT4gJzEyMycsCgogICAgICAgICAgICBPYmplY3QgICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICAgICAgQmxvY2tuYW1lID0+ICdDb25maWdJdGVtIENvbXB1dGVyJywKICAgICAgICAgICAgSGVhZGxpbmUgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcnLAogICAgICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMjAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NvbmZpZ0l0ZW0jJywKICAgICAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0RlcGxveW1lbnQgU3RhdGUnLAogICAgICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTMwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDcmVhdGVkJywKICAgICAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEzMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEl0ZW1MaXN0ID0+IFsKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0N1ckluY2lTaWduYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgICAgICAgID0+ICcxMjMnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzEyMycsCiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgPT4gJ0FjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9MTIzJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdUaGUgTmFtZSBvZiB0aGUgQ29uZmlnIEl0ZW0nLAogICAgICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnSW4gUmVwYWlyJywKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMS0wMSAxMjoxMjowMCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdDdXJJbmNpU2lnbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAnMjM0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMzQnLAogICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgID0+ICdBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPTIzNCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnVGhlIE5hbWUgb2YgdGhlIENvbmZpZyBJdGVtIDIzNCcsCiAgICAgICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdQcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwNy0xMS0xMSAxMjoxMjowMCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgQEJsb2NrRGF0YSA9ICRMaW5rT2JqZWN0LT5UYWJsZUNyZWF0ZUNvbXBsZXgoCiAgICAgICAgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSA9PiAkT2JqZWN0TGlua0xpc3RSZWYsCiAgICApOwoKPWN1dAoKc3ViIFRhYmxlQ3JlYXRlQ29tcGxleCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgICMgZ2V0IGFuZCByZW1lbWJlciB0aGUgRGVwbG95bWVudCBzdGF0ZSBjb2xvcnMKICAgIG15ICREZXBsb3ltZW50U3RhdGVzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgIElURU1JRDoKICAgIGZvciBteSAkSXRlbUlEICggc29ydCBrZXlzICV7JERlcGxveW1lbnRTdGF0ZXNMaXN0fSApIHsKCiAgICAgICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBwcmVmZXJlbmNlcwogICAgICAgIG15ICVQcmVmZXJlbmNlcyA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBhIGNvbG9yIGlzIGRlZmluZWQgaW4gcHJlZmVyZW5jZXMKICAgICAgICBuZXh0IElURU1JRCBpZiAhJFByZWZlcmVuY2Vze0NvbG9yfTsKCiAgICAgICAgIyBhZGQgY29sb3Igc3R5bGUgZGVmaW5pdGlvbgogICAgICAgIG15ICREZXBsU3RhdGUgPSAkRGVwbG95bWVudFN0YXRlc0xpc3QtPnskSXRlbUlEfTsKCiAgICAgICAgIyByZW1vdmUgYW55IG5vbiBhc2NpaSB3b3JkIGNoYXJhY3RlcnMKICAgICAgICAkRGVwbFN0YXRlID1+IHN7IFteYS16QS1aMC05XSB9e199bXN4ZzsKCiAgICAgICAgIyBjb3ZlcnQgdG8gbG93ZXIgY2FzZQogICAgICAgICRTZWxmLT57RGVwbFN0YXRlQ29sb3JzfS0+eyREZXBsU3RhdGV9ID0gbGMgJFByZWZlcmVuY2Vze0NvbG9yfTsKICAgIH0KCiAgICAjIEdldCB0aGUgY29sdW1ucyBjb25maWcuCiAgICBteSAkQ29sdW1uc0NvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnTGlua09iamVjdDo6SVRTTUNvbmZpZ0l0ZW06OlNob3dDb2x1bW5zJyk7CgogICAgIyBHZXQgdGhlIGNvbHVtbnMgYnkgY2xhc3MgY29uZmlnLgogICAgbXkgJENvbHVtbnNCeUNsYXNzQ29uZmlnCiAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0xpbmtPYmplY3Q6OklUU01Db25maWdJdGVtOjpTaG93Q29sdW1uc0J5Q2xhc3MnKTsKCiAgICAjIEdldCBjb25maWd1cmVkIGNvbHVtbnMgYW5kIHJlb3JnYW5pemUgdGhlbSBieSBjbGFzcyBuYW1lLgogICAgbXkgJUNvbHVtbkJ5Q2xhc3M7CiAgICBteSAlU2lnbmFsQ29sdW1uTGlzdDsKICAgIGlmICggJENvbHVtbnNCeUNsYXNzQ29uZmlnICYmIHJlZiAkQ29sdW1uc0J5Q2xhc3NDb25maWcgZXEgJ0FSUkFZJyAmJiBAeyRDb2x1bW5zQnlDbGFzc0NvbmZpZ30gKSB7CgogICAgICAgIE5BTUU6CiAgICAgICAgZm9yIG15ICROYW1lICggQHskQ29sdW1uc0J5Q2xhc3NDb25maWd9ICkgewogICAgICAgICAgICBteSAoICRDbGFzcywgJENvbHVtbiApID0gc3BsaXQgLzo6LywgJE5hbWUsIDI7CgogICAgICAgICAgICBuZXh0IE5BTUUgaWYgISRDb2x1bW47CgogICAgICAgICAgICAjIElmIHNpZ25hbCBjb2x1bW5zIGFyZSBjb25maWd1cmVkIGp1c3QgZm9yIGNlcnRhaW4gY2xhc3NlcywgYWRkIHRoZW0gdG8gdGhlIGJlZ2lubmluZyBvZiBJdGVtQ29sdW1ucyBhcnJheSwKICAgICAgICAgICAgIyBub3QgdG8gdGhlIGFycmF5IHdpdGggb3RoZXIgY29sdW1ucy4KICAgICAgICAgICAgaWYgKCAkQ29sdW1uIGVxICdDdXJJbmNpU2lnbmFsJyB8fCAkQ29sdW1uIGVxICdDdXJEZXBsU2lnbmFsJyApIHsKICAgICAgICAgICAgICAgICRTaWduYWxDb2x1bW5MaXN0eyRDbGFzc30tPnskQ29sdW1ufSA9IDE7CiAgICAgICAgICAgICAgICBuZXh0IE5BTUU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQHsgJENvbHVtbkJ5Q2xhc3N7JENsYXNzfSB9LCAkQ29sdW1uOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNvbnZlcnQgdGhlIGxpc3QKICAgIG15ICVMaW5rTGlzdDsKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IH0gKSB7CgogICAgICAgICMgZXh0cmFjdCBsaW5rIHR5cGUgTGlzdAogICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9OwoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyRMaW5rVHlwZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGRpcmVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgQ09ORklHSVRFTUlEOgogICAgICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQga2V5cyAleyREaXJlY3Rpb25MaXN0fSApIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3QgY2xhc3MKICAgICAgICAgICAgICAgIG15ICRDbGFzcyA9ICREaXJlY3Rpb25MaXN0LT57JENvbmZpZ0l0ZW1JRH0tPntDbGFzc30gfHwgJyc7CgogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRDbGFzczsKCiAgICAgICAgICAgICAgICAkTGlua0xpc3R7JENsYXNzfS0+eyRDb25maWdJdGVtSUR9LT57RGF0YX0gPSAkRGlyZWN0aW9uTGlzdC0+eyRDb25maWdJdGVtSUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15IEBCbG9ja0RhdGE7CiAgICBmb3IgbXkgJENsYXNzICggc29ydCB7IGxjICRhIGNtcCBsYyAkYiB9IGtleXMgJUxpbmtMaXN0ICkgewoKICAgICAgICAjIGV4dHJhY3QgY29uZmlnIGl0ZW0gZGF0YQogICAgICAgIG15ICRDb25maWdJdGVtTGlzdCA9ICRMaW5rTGlzdHskQ2xhc3N9OwoKICAgICAgICAjIHRvIHN0b3JlIHRoZSBjb2x1bW4gaGVhZGxpbmUKICAgICAgICBteSBAU2hvd0NvbHVtbnNIZWFkbGluZXM7CgogICAgICAgICMgY3JlYXRlIHRoZSBpdGVtIGxpc3QKICAgICAgICBteSBASXRlbUxpc3Q7CiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKAogICAgICAgICAgICBzb3J0IHsgJENvbmZpZ0l0ZW1MaXN0LT57JGF9LT57RGF0YX0tPntOYW1lfSBjbXAgJENvbmZpZ0l0ZW1MaXN0LT57JGJ9LT57RGF0YX0tPntOYW1lfSB9CiAgICAgICAgICAgIGtleXMgJXskQ29uZmlnSXRlbUxpc3R9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRDb25maWdJdGVtRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGV4dHJhY3QgdmVyc2lvbiBkYXRhCiAgICAgICAgICAgIG15ICRWZXJzaW9uID0gJENvbmZpZ0l0ZW1MaXN0LT57JENvbmZpZ0l0ZW1JRH0tPntEYXRhfTsKCiAgICAgICAgICAgICMgbWFrZSBzdXJlIHRoZSBjb2x1bW4gaGVhZGxpbmUgYXJyYXkgaXMgZW1wdHkgZm9yIGVhY2ggbG9vcAogICAgICAgICAgICBAU2hvd0NvbHVtbnNIZWFkbGluZXMgPSAoKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSB2ZXJzaW9uIGRhdGEsIGluY2x1ZGluZyBhbGwgdGhlIFhNTCBkYXRhCiAgICAgICAgICAgIG15ICRWZXJzaW9uWE1MRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBYTUxEYXRhR2V0ICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15IEBJdGVtQ29sdW1ucyA9ICgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRWZXJzaW9uLT57TnVtYmVyfSwKICAgICAgICAgICAgICAgICAgICBMaW5rICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICJDb25maWdJdGVtIyAkVmVyc2lvbi0+e051bWJlcn0gKCRWZXJzaW9uLT57Q2xhc3N9KTogJFZlcnNpb24tPntOYW1lfSIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBBZGQgY29sdW1ucyBmcm9tICdMaW5rT2JqZWN0OjpJVFNNQ29uZmlnSXRlbTo6U2hvd0NvbHVtbnMnIHNldHRpbmcgdG8gdGhlIGN1cnJlbnQgQ0kgY2xhc3MKICAgICAgICAgICAgIyBpZiBpdCBkb2VzIG5vdCBjb250YWluIHRoZW0uIFNpZ25hbCBjb2x1bW5zIGlzIHNhdmVkIGluIGhhc2ggYmVjYXVzZSB0aGV5IHdpbGwgYmUgYWRkZWQgbGF0ZXIuCiAgICAgICAgICAgIENPTFVNTkNPTkZJRzoKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCBAeyRDb2x1bW5zQ29uZmlnfSApIHsKCiAgICAgICAgICAgICAgICBpZiAoICRDb2x1bW4gZXEgJ0N1ckluY2lTaWduYWwnIHx8ICRDb2x1bW4gZXEgJ0N1ckRlcGxTaWduYWwnICkgewogICAgICAgICAgICAgICAgICAgICRTaWduYWxDb2x1bW5MaXN0eyRDbGFzc30tPnskQ29sdW1ufSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICFncmVwIHsgJF8gZXEgJENvbHVtbiB9IEB7ICRDb2x1bW5CeUNsYXNzeyRDbGFzc30gfSApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRDb2x1bW5CeUNsYXNzeyRDbGFzc30gfSwgJENvbHVtbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBBZGQgc2lnbmFsIGNvbHVtbnMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkgaWYgbmVlZGVkLgogICAgICAgICAgICBpZiAoICRTaWduYWxDb2x1bW5MaXN0eyRDbGFzc30tPntDdXJEZXBsU2lnbmFsfSApIHsKICAgICAgICAgICAgICAgIHVuc2hpZnQgQEl0ZW1Db2x1bW5zLCB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnQ3VyRGVwbFNpZ25hbCcsCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJFZlcnNpb24tPntDdXJEZXBsU3RhdGV9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRTaWduYWxDb2x1bW5MaXN0eyRDbGFzc30tPntDdXJJbmNpU2lnbmFsfSApIHsKICAgICAgICAgICAgICAgIHVuc2hpZnQgQEl0ZW1Db2x1bW5zLCB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnQ3VySW5jaVNpZ25hbCcsCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgPT4gJFZlcnNpb24tPntDdXJJbmNpU3RhdGV9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJFZlcnNpb24tPntDdXJJbmNpU3RhdGVUeXBlfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdGhlc2UgY29sdW1ucyB3aWxsIGJlIGFkZGVkIGlmIG5vIGNsYXNzIGJhc2VkIGNvbHVtbiBjb25maWcgaXMgZGVmaW5lZAogICAgICAgICAgICBteSBAQWRkaXRpb25hbERlZmF1bHRJdGVtQ29sdW1ucyA9ICgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkVmVyc2lvbi0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJFZlcnNpb24tPntDdXJEZXBsU3RhdGV9LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkQ29uZmlnSXRlbURhdGEtPntDcmVhdGVUaW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGluZGl2aWR1YWwgY29sdW1uIGNvbmZpZyBmb3IgdGhpcyBjbGFzcyBleGlzdHMKICAgICAgICAgICAgaWYgKCAkQ29sdW1uQnlDbGFzc3skQ2xhc3N9ICkgewoKICAgICAgICAgICAgICAgICMgY29udmVydCB0aGUgWE1MIGRhdGEgaW50byBhIGhhc2gKICAgICAgICAgICAgICAgIG15ICRFeHRlbmRlZFZlcnNpb25EYXRhID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5YTUxEYXRhMkhhc2goCiAgICAgICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkVmVyc2lvblhNTERhdGEtPntYTUxEZWZpbml0aW9ufSwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgID0+ICRWZXJzaW9uWE1MRGF0YS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdLAogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMgICAgPT4gJENvbHVtbkJ5Q2xhc3N7JENsYXNzfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCBAeyAkQ29sdW1uQnlDbGFzc3skQ2xhc3N9IH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgcHJvY2VzcyBzb21lIG5vbi14bWwgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAgIGlmICggJFZlcnNpb24tPnskQ29sdW1ufSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgaGFuZGxlIHRoZSBDSSBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENvbHVtbiBlcSAnTmFtZScgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGNvbHVtbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBASXRlbUNvbHVtbnMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkVmVyc2lvbi0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGhlYWRsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1uc0hlYWRsaW5lcywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWFsIHRyYW5zbGF0aW9uIGhhbmRsaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICggJENvbHVtbiBlcSAnQ3VyRGVwbFN0YXRlJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGUgY29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBJdGVtQ29sdW1ucywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICRWZXJzaW9uLT57JENvbHVtbn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHRoZSBoZWFkbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnNIZWFkbGluZXMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdEZXBsb3ltZW50IFN0YXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgc3BlY2lhbCB0cmFuc2xhdGlvbiBoYW5kbGluZwogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRDb2x1bW4gZXEgJ0N1ckluY2lTdGF0ZScgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGNvbHVtbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBASXRlbUNvbHVtbnMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkVmVyc2lvbi0+eyRDb2x1bW59LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGUgaGVhZGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zSGVhZGxpbmVzLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnSW5jaWRlbnQgU3RhdGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWFsIHRyYW5zbGF0aW9uIGhhbmRsaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICggJENvbHVtbiBlcSAnQ2xhc3MnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHRoZSBjb2x1bW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1Db2x1bW5zLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJFZlcnNpb24tPnskQ29sdW1ufSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGhlYWRsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1uc0hlYWRsaW5lcywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NsYXNzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgc3BlY2lhbCBkYXRlL3RpbWUgaGFuZGxpbmcKICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkQ29sdW1uIGVxICdDcmVhdGVUaW1lJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGUgY29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBJdGVtQ29sdW1ucywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRWZXJzaW9uLT57Q3JlYXRlVGltZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHRoZSBoZWFkbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnNIZWFkbGluZXMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDcmVhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHRvIGFzY2lpIHRleHQgaW4gY2FzZSB0aGUgdmFsdWUgY29udGFpbnMgaHRtbAogICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRFeHRlbmRlZFZlcnNpb25EYXRhLT57JENvbHVtbn0tPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgKSB8fCAnJzsKCiAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IGFsbCB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lcyB0byBzaW5nbGUgc3BhY2VzCiAgICAgICAgICAgICAgICAgICAgJFZhbHVlID1+IHN7IFxzKyB9eyB9Z3htczsKCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGNvbHVtbgogICAgICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1Db2x1bW5zLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGUgaGVhZGxpbmUKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1uc0hlYWRsaW5lcywgewogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRFeHRlbmRlZFZlcnNpb25EYXRhLT57JENvbHVtbn0tPntOYW1lfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGluZGl2aWR1YWwgY29sdW1uIGNvbmZpZyBmb3IgdGhpcyBjbGFzcyBkb2VzIG5vdCBleGlzdCwKICAgICAgICAgICAgIyBzbyB0aGUgZGVmYXVsdCBjb2x1bW5zIHdpbGwgYmUgdXNlZAogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGFkZCB0aGUgZGVmYXVsdCBjb2x1bW5zCiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtQ29sdW1ucywgQEFkZGl0aW9uYWxEZWZhdWx0SXRlbUNvbHVtbnM7CgogICAgICAgICAgICAgICAgIyBhZGQgdGhlIGRlZmF1bHQgY29sdW1uIGhlYWRsaW5lcwogICAgICAgICAgICAgICAgQFNob3dDb2x1bW5zSGVhZGxpbmVzID0gKAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0RlcGxveW1lbnQgU3RhdGUnLAogICAgICAgICAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEzMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ3JlYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTMwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdXNoIEBJdGVtTGlzdCwgXEBJdGVtQ29sdW1uczsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpZiAhQEl0ZW1MaXN0OwoKICAgICAgICAjIGRlZmluZSB0aGUgYmxvY2sgZGF0YQogICAgICAgIG15ICVCbG9jayA9ICgKICAgICAgICAgICAgT2JqZWN0ICAgID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9LAogICAgICAgICAgICBCbG9ja25hbWUgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e1JlYWxuYW1lfSAuICcgKCcgLiAkQ2xhc3MgLiAnKScsCiAgICAgICAgICAgIEhlYWRsaW5lICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ29uZmlnSXRlbSMnLAogICAgICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSXRlbUxpc3QgPT4gXEBJdGVtTGlzdCwKICAgICAgICApOwoKICAgICAgICAjIEFkZCAnQ3VySW5jaVNpZ25hbCcgYW5kICdDdXJEZXBsU2lnbmFsJyBjb2x1bW5zIHRvIHRoZSBiZWdpbm5pbmcgb2YgaGVhZGxpbmUgaWYgbmVlZGVkLgogICAgICAgIGlmICggJFNpZ25hbENvbHVtbkxpc3R7JENsYXNzfS0+e0N1ckRlcGxTaWduYWx9ICkgewogICAgICAgICAgICB1bnNoaWZ0IEB7ICRCbG9ja3tIZWFkbGluZX0gfSwgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnRGVwbG95bWVudCBTdGF0ZScsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDIwLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoICRTaWduYWxDb2x1bW5MaXN0eyRDbGFzc30tPntDdXJJbmNpU2lnbmFsfSApIHsKICAgICAgICAgICAgdW5zaGlmdCBAeyAkQmxvY2t7SGVhZGxpbmV9IH0sIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0luY2lkZW50IFN0YXRlJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMjAsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIGFkZCB0aGUgY29sdW1uIGhlYWRsaW5lcwogICAgICAgIHB1c2ggQHsgJEJsb2Nre0hlYWRsaW5lfSB9LCBAU2hvd0NvbHVtbnNIZWFkbGluZXM7CgogICAgICAgIHB1c2ggQEJsb2NrRGF0YSwgXCVCbG9jazsKICAgIH0KCiAgICByZXR1cm4gQEJsb2NrRGF0YTsKfQoKPWhlYWQyIFRhYmxlQ3JlYXRlU2ltcGxlKCkKCnJldHVybiBhIGhhc2ggd2l0aCB0aGUgbGluayBvdXRwdXQgZGF0YQoKUmV0dXJuCgogICAgJUxpbmtPdXRwdXREYXRhID0gKAogICAgICAgIE5vcm1hbDo6U291cmNlID0+IHsKICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NJOjU1NTU1JywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdDb25maWdJdGVtIyA1NTU1NTU6IFRoZSBjb25maWcgaXRlbSBuYW1lJywKICAgICAgICAgICAgICAgICAgICBDc3MgICAgID0+ICdzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2giJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ0k6MjIyMjInLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gJ0NvbmZpZ0l0ZW0jIDIyMjIyOiBUaXRsZSBvZiBjb25maWcgbmFtZSAyMjIyMicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUGFyZW50Q2hpbGQ6OlRhcmdldCA9PiB7CiAgICAgICAgICAgIElUU01Db25maWdJdGVtID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDSTo3Nzc3NycsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnQ29uZmlnSXRlbSMgNzc3Nzc6IENvbmZpZ0l0ZW0gbmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICApOwoKICAgICVMaW5rT3V0cHV0RGF0YSA9ICRMaW5rT2JqZWN0LT5UYWJsZUNyZWF0ZVNpbXBsZSgKICAgICAgICBPYmplY3RMaW5rTGlzdFdpdGhEYXRhID0+ICRPYmplY3RMaW5rTGlzdFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgVGFibGVDcmVhdGVTaW1wbGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IHx8IHJlZiAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBPYmplY3RMaW5rTGlzdFdpdGhEYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJUxpbmtPdXRwdXREYXRhOwogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfSApIHsKCiAgICAgICAgIyBleHRyYWN0IGxpbmsgdHlwZSBMaXN0CiAgICAgICAgbXkgJExpbmtUeXBlTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX07CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7JExpbmtUeXBlTGlzdH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgZGlyZWN0aW9uIGxpc3QKICAgICAgICAgICAgbXkgJERpcmVjdGlvbkxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn07CgogICAgICAgICAgICBteSBASXRlbUxpc3Q7CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJXskRGlyZWN0aW9uTGlzdH0gKSB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IGNvbmZpZyBpdGVtIGRhdGEKICAgICAgICAgICAgICAgIG15ICRWZXJzaW9uID0gJERpcmVjdGlvbkxpc3QtPnskQ29uZmlnSXRlbUlEfTsKCiAgICAgICAgICAgICAgICAjIGRlZmluZSBpdGVtIGRhdGEKICAgICAgICAgICAgICAgIG15ICVJdGVtID0gKAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NJOicgLiAkVmVyc2lvbi0+e051bWJlcn0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAiQ29uZmlnSXRlbSMgJFZlcnNpb24tPntOdW1iZXJ9ICgkVmVyc2lvbi0+e0NsYXNzfSk6ICRWZXJzaW9uLT57TmFtZX0iLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QmFzZWxpbmt9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JwogICAgICAgICAgICAgICAgICAgICAgICAuICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1MaXN0LCBcJUl0ZW07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGl0ZW0gbGlzdCB0byBsaW5rIG91dHB1dCBkYXRhCiAgICAgICAgICAgICRMaW5rT3V0cHV0RGF0YXsgJExpbmtUeXBlIC4gJzo6JyAuICREaXJlY3Rpb24gfS0+e0lUU01Db25maWdJdGVtfSA9IFxASXRlbUxpc3Q7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlTGlua091dHB1dERhdGE7Cn0KCj1oZWFkMiBDb250ZW50U3RyaW5nQ3JlYXRlKCkKCnJldHVybiBhIG91dHB1dCBzdHJpbmcKCiAgICBteSAkU3RyaW5nID0gJExheW91dE9iamVjdC0+Q29udGVudFN0cmluZ0NyZWF0ZSgKICAgICAgICBDb250ZW50RGF0YSA9PiAkSGFzaFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgQ29udGVudFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q29udGVudERhdGF9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDb250ZW50RGF0YSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZXh0cmFjdCBjb250ZW50CiAgICBteSAkQ29udGVudCA9ICRQYXJhbXtDb250ZW50RGF0YX07CgogICAgaWYgKCAkQ29udGVudC0+e1R5cGV9IG5lICdDdXJJbmNpU2lnbmFsJyAmJiAkQ29udGVudC0+e1R5cGV9IG5lICdDdXJEZXBsU2lnbmFsJyApIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJFN0cmluZzsKICAgIGlmICggJENvbnRlbnQtPntUeXBlfSBlcSAnQ3VySW5jaVNpZ25hbCcgKSB7CgogICAgICAgICMgc2V0IGluY2lkZW50IHNpZ25hbAogICAgICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICAgICAgaW5jaWRlbnQgICAgPT4gJ3JlZGxlZCcsCiAgICAgICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgICAgIHVua25vd24gICAgID0+ICdncmF5bGVkJywKICAgICAgICAgICAgd2FybmluZyAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBpbnZlc3RpZ2F0ZSBjdXJyZW50IGluY2lkZW50IHNpZ25hbAogICAgICAgICRDb250ZW50LT57Q3VySW5jaVN0YXRlVHlwZX0gfHw9ICd1bmtub3duJzsKICAgICAgICBteSAkQ3VySW5jaVNpZ25hbCA9ICRJbmNpU2lnbmFsc3sgJENvbnRlbnQtPntDdXJJbmNpU3RhdGVUeXBlfSB9OwogICAgICAgICRDdXJJbmNpU2lnbmFsIHx8PSAkSW5jaVNpZ25hbHN7dW5rbm93bn07CgogICAgICAgICRTdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGUgPT4gJzxkaXYgY2xhc3M9IkZsYWcgU21hbGwiIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXSI+ICcKICAgICAgICAgICAgICAgIC4gJzxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckluY2lTaWduYWwgfCBodG1sICVdIj48L3NwYW4+IDwvZGl2PicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ3VySW5jaVNpZ25hbCA9PiAkQ3VySW5jaVNpZ25hbCwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgPT4gJENvbnRlbnQtPntDb250ZW50fSB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkQ29udGVudC0+e1R5cGV9IGVxICdDdXJEZXBsU2lnbmFsJyApIHsKCiAgICAgICAgIyBjb252ZXJ0IGRlcGxveW1lbnQgc3RhdGUgdG8gYSB3ZWIgc2FmZSBDU1MgY2xhc3MKICAgICAgICBteSAkRGVwbFN0YXRlID0gJENvbnRlbnQtPntDb250ZW50fSB8fCAnJzsKICAgICAgICAkRGVwbFN0YXRlID1+IHN7IFteYS16QS1aMC05XSB9e199bXN4ZzsKCiAgICAgICAgIyBnZXQgdGhlIGNvbG9yIG9mIHRoZSBkZXBseW1lbnQgc3RhdGUgaWYgZGVmaW5lZAogICAgICAgIG15ICREZXBsU3RhdGVDb2xvciA9ICRTZWxmLT57RGVwbFN0YXRlQ29sb3JzfS0+eyREZXBsU3RhdGV9IHx8ICcnOwoKICAgICAgICBteSAkVGVtcGxhdGUgPSAnPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckRlcGxTdGF0ZSkgfCBodG1sICVdIj4gJzsKCiAgICAgICAgIyBjaGVjayBpZiBjb2xvciBpcyBkZWZpbmVkIGFuZCBzZXQgdGhlIHN0eWxlIGNsYXNzCiAgICAgICAgaWYgKCREZXBsU3RhdGVDb2xvcikgewogICAgICAgICAgICAkVGVtcGxhdGUgLj0gPDwgIkVORCI7CjxzdHlsZT4KICAgIC5GbGFnIHNwYW4uJERlcGxTdGF0ZSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIyREZXBsU3RhdGVDb2xvcjsKICAgIH0KPC9zdHlsZT4KRU5ECiAgICAgICAgfQoKICAgICAgICAkVGVtcGxhdGUgLj0gIjxzcGFuIGNsYXNzPVwiRGVwbFN0YXRlICREZXBsU3RhdGVcIj48L3NwYW4+IDwvZGl2PiI7CgogICAgICAgICRTdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGUgPT4gJFRlbXBsYXRlLAogICAgICAgICAgICBEYXRhICAgICA9PiB7CiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgPT4gJENvbnRlbnQtPntDb250ZW50fSB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aGVhZDIgU2VsZWN0YWJsZU9iamVjdExpc3QoKQoKcmV0dXJuIGFuIGFycmF5IGhhc2ggd2l0aCBDPHNlbGVjdGFibGU+IG9iamVjdHMKClJldHVybgoKICAgIEBTZWxlY3RhYmxlT2JqZWN0TGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgID0+ICctJywKICAgICAgICAgICAgVmFsdWUgICAgPT4gJ0NvbmZpZ0l0ZW0nLAogICAgICAgICAgICBEaXNhYmxlZCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSVRTTUNvbmZpZ0l0ZW06OjI1JywKICAgICAgICAgICAgVmFsdWUgPT4gJ0NvbmZpZ0l0ZW06OkNvbXB1dGVyJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0lUU01Db25maWdJdGVtOjoyNicsCiAgICAgICAgICAgIFZhbHVlID0+ICdDb25maWdJdGVtOjpTb2Z0d2FyZScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdJVFNNQ29uZmlnSXRlbTo6MjcnLAogICAgICAgICAgICBWYWx1ZSA9PiAnQ29uZmlnSXRlbTo6TmV0d29yaycsCiAgICAgICAgfSwKICAgICk7CgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gJExpbmtPYmplY3QtPlNlbGVjdGFibGVPYmplY3RMaXN0KAogICAgICAgIFNlbGVjdGVkID0+ICRJZGVudGlmaWVyLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFNlbGVjdGFibGVPYmplY3RMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWZpbmUgaGVhZGxpbmUKICAgIG15IEBPYmplY3RTZWxlY3RMaXN0OwoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgcmV0dXJuIGlmICEkQ2xhc3NMaXN0OwogICAgcmV0dXJuIGlmIHJlZiAkQ2xhc3NMaXN0IG5lICdIQVNIJzsKCiAgICAjIGdldCB0aGUgY29uZmlnIHdpdGggdGhlIGRlZmF1bHQgc3Vib2JqZWN0cwogICAgbXkgJERlZmF1bHRTdWJvYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0xpbmtPYmplY3Q6OkRlZmF1bHRTdWJPYmplY3QnKSB8fCB7fTsKCiAgICBDTEFTU0lEOgogICAgZm9yIG15ICRDbGFzc0lEICggc29ydCB7IGxjICRDbGFzc0xpc3QtPnskYX0gY21wIGxjICRDbGFzc0xpc3QtPnskYn0gfSBrZXlzICV7JENsYXNzTGlzdH0gKSB7CgogICAgICAgICMgc2hvdyBjbGFzcyBvbmx5IGlmIHVzZXIgaGFzIGFjY2VzcyByaWdodHMKICAgICAgICBteSAkSGFzQWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPlBlcm1pc3Npb24oCiAgICAgICAgICAgIFNjb3BlICAgPT4gJ0NsYXNzJywKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICAgPT4gJ3JvJywKICAgICAgICApOwoKICAgICAgICBuZXh0IENMQVNTSUQgaWYgISRIYXNBY2Nlc3M7CgogICAgICAgIG15ICRDbGFzcyAgICAgID0gJENsYXNzTGlzdC0+eyRDbGFzc0lEfSB8fCAnJzsKICAgICAgICBteSAkSWRlbnRpZmllciA9ICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9IC4gJzo6JyAuICRDbGFzc0lEOwoKICAgICAgICAjIHNldCBzZWxlY3RlZCBmbGFnCiAgICAgICAgbXkgJFNlbGVjdGVkOwogICAgICAgIGlmICggJFBhcmFte1NlbGVjdGVkfSApIHsKCiAgICAgICAgICAgIGlmICggJFBhcmFte1NlbGVjdGVkfSBlcSAkSWRlbnRpZmllciApIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZCA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJFBhcmFte1NlbGVjdGVkfSBlcSAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fQogICAgICAgICAgICAgICAgJiYgJERlZmF1bHRTdWJvYmplY3QtPnsgJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0gfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IGRlZmF1bHQgY2xhc3MgbmFtZQogICAgICAgICAgICAgICAgbXkgJERlZmF1bHRDbGFzcyA9ICREZWZhdWx0U3Vib2JqZWN0LT57ICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9IH0gfHwgJyc7CgogICAgICAgICAgICAgICAgIyBjaGVjayBjbGFzcwogICAgICAgICAgICAgICAgaWYgKCAkRGVmYXVsdENsYXNzIGVxICRDbGFzcyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZWN0ZWQgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSByb3cKICAgICAgICBteSAlUm93ID0gKAogICAgICAgICAgICBLZXkgICAgICA9PiAkSWRlbnRpZmllciwKICAgICAgICAgICAgVmFsdWUgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e1JlYWxuYW1lfSAuICc6OicgLiAkQ2xhc3MsCiAgICAgICAgICAgIFNlbGVjdGVkID0+ICRTZWxlY3RlZCwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBPYmplY3RTZWxlY3RMaXN0LCBcJVJvdzsKICAgIH0KCiAgICAjIG9ubHkgYWRkIGhlYWRsaW5lIGlmIHRoZXJlIGFyZSBjb25maWdpdGVtIGNsYXNzZXMKICAgICMgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVtCiAgICBpZiAoQE9iamVjdFNlbGVjdExpc3QpIHsKCiAgICAgICAgIyBhZGQgaGVhZGxpbmUgYXMgZmlyc3QgYXJyYXkgZWxlbWVudAogICAgICAgIHVuc2hpZnQgQE9iamVjdFNlbGVjdExpc3QsIHsKICAgICAgICAgICAgS2V5ICAgICAgPT4gJy0nLAogICAgICAgICAgICBWYWx1ZSAgICA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57UmVhbG5hbWV9LAogICAgICAgICAgICBEaXNhYmxlZCA9PiAxLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIEBPYmplY3RTZWxlY3RMaXN0Owp9Cgo9aGVhZDIgU2VhcmNoT3B0aW9uTGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgaGFzaCB3aXRoIHNlYXJjaCBvcHRpb25zCgpSZXR1cm4KCiAgICBAU2VhcmNoT3B0aW9uTGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdDb25maWdJdGVtIycsCiAgICAgICAgICAgIElucHV0U3RyZyA9PiAkRm9ybVN0cmluZywKICAgICAgICAgICAgRm9ybURhdGEgID0+ICcxMjM0JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRGb3JtU3RyaW5nLAogICAgICAgICAgICBGb3JtRGF0YSAgPT4gJ0JsYUJsYScsCiAgICAgICAgfSwKICAgICk7CgogICAgQFNlYXJjaE9wdGlvbkxpc3QgPSAkTGlua09iamVjdC0+U2VhcmNoT3B0aW9uTGlzdCgKICAgICAgICBTdWJPYmplY3QgPT4gJzI1JywgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hPcHRpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZWFyY2ggb3B0aW9uIGxpc3QKICAgIG15IEBTZWFyY2hPcHRpb25MaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgTmFtZSA9PiAnQ29uZmlnSXRlbSMnLAogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnTmFtZScsCiAgICAgICAgICAgIE5hbWUgPT4gJ05hbWUnLAogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnRGVwbFN0YXRlSURzJywKICAgICAgICAgICAgTmFtZSA9PiAnRGVwbG95bWVudCBTdGF0ZScsCiAgICAgICAgICAgIFR5cGUgPT4gJ0xpc3QnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdJbmNpU3RhdGVJRHMnLAogICAgICAgICAgICBOYW1lID0+ICdJbmNpZGVudCBTdGF0ZScsCiAgICAgICAgICAgIFR5cGUgPT4gJ0xpc3QnLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIG9iamVjdCBkZXBlbmRlbmNlIGF0dHJpYnV0ZXMKICAgICNpZiAoICRQYXJhbXtTdWJPYmplY3R9ICkgewogICAgIwogICAgIyAgICAjIGdldCBjbGFzcyBsaXN0CiAgICAjICAgIG15ICRDbGFzc0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAjICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgIyAgICApOwogICAgIwogICAgIyAgICBpZiAoICRDbGFzc0xpc3QgJiYgJENsYXNzTGlzdCBlcSAnSEFTSCcgKSB7CiAgICAjCiAgICAjICAgICAgICAjIGFkZCBoZXJlIHRoZSBzZWFyY2ggYXR0cmlidXRlcyBvZiB0aGUgc3Vib2JqZWN0IQogICAgIyAgICB9CiAgICAjfQoKICAgICMgYWRkIGZvcm1rZXkKICAgIGZvciBteSAkUm93IChAU2VhcmNoT3B0aW9uTGlzdCkgewogICAgICAgICRSb3ctPntGb3JtS2V5fSA9ICdTRUFSQ0g6OicgLiAkUm93LT57S2V5fTsKICAgIH0KCiAgICAjIGFkZCBmb3JtIGRhdGEgYW5kIGlucHV0IHN0cmluZwogICAgUk9XOgogICAgZm9yIG15ICRSb3cgKEBTZWFyY2hPcHRpb25MaXN0KSB7CgogICAgICAgICMgcHJlcGFyZSB0ZXh0IGlucHV0IGZpZWxkcwogICAgICAgIGlmICggJFJvdy0+e1R5cGV9IGVxICdUZXh0JyApIHsKCiAgICAgICAgICAgICMgZ2V0IGZvcm0gZGF0YQogICAgICAgICAgICAkUm93LT57Rm9ybURhdGF9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJFJvdy0+e0Zvcm1LZXl9ICk7CgogICAgICAgICAgICAjIHBhcnNlIHRoZSBpbnB1dCB0ZXh0IGJsb2NrCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJbnB1dFRleHQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJFJvdy0+e0Zvcm1LZXl9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRSb3ctPntGb3JtRGF0YX0gfHwgJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgdGhlIGlucHV0IHN0cmluZwogICAgICAgICAgICAkUm93LT57SW5wdXRTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdMaW5rT2JqZWN0JywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgUk9XOwogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIGxpc3QgYm94ZXMKICAgICAgICBpZiAoICRSb3ctPntUeXBlfSBlcSAnTGlzdCcgKSB7CgogICAgICAgICAgICAjIGdldCBmb3JtIGRhdGEKICAgICAgICAgICAgbXkgQEZvcm1EYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRBcnJheSggUGFyYW0gPT4gJFJvdy0+e0Zvcm1LZXl9ICk7CiAgICAgICAgICAgICRSb3ctPntGb3JtRGF0YX0gPSBcQEZvcm1EYXRhOwoKICAgICAgICAgICAgIyBwcmVwYXJlIGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgICAgICAgICBteSAlTGlzdERhdGE7CiAgICAgICAgICAgIGlmICggJFJvdy0+e0tleX0gZXEgJ0RlcGxTdGF0ZUlEcycgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICAgICAgICAgICAgICBteSAkRGVwbFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBhZGQgbGlzdAogICAgICAgICAgICAgICAgaWYgKCAkRGVwbFN0YXRlTGlzdCAmJiByZWYgJERlcGxTdGF0ZUxpc3QgZXEgJ0hBU0gnICkgewogICAgICAgICAgICAgICAgICAgICVMaXN0RGF0YSA9ICV7JERlcGxTdGF0ZUxpc3R9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHByZXBhcmUgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgICAgICAgICBlbHNpZiAoICRSb3ctPntLZXl9IGVxICdJbmNpU3RhdGVJRHMnICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKICAgICAgICAgICAgICAgIG15ICRJbmNpU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBhZGQgbGlzdAogICAgICAgICAgICAgICAgaWYgKCAkSW5jaVN0YXRlTGlzdCAmJiByZWYgJEluY2lTdGF0ZUxpc3QgZXEgJ0hBU0gnICkgewogICAgICAgICAgICAgICAgICAgICVMaXN0RGF0YSA9ICV7JEluY2lTdGF0ZUxpc3R9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgICAgICRSb3ctPntJbnB1dFN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgPT4gXCVMaXN0RGF0YSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFJvdy0+e0Zvcm1LZXl9LAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUm93LT57Rm9ybURhdGF9LAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICA9PiAzLAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgUk9XOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gQFNlYXJjaE9wdGlvbkxpc3Q7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPlslIFRyYW5zbGF0ZSgiQ29uZmlnIEl0ZW0gTWFuYWdlbWVudCIpIHwgaHRtbCAlXTwvaDE+CgogICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gVHJhbnNsYXRlKCdDb25maWcgSXRlbSBNYW5hZ2VtZW50JyksCiAgICAgICAgICAgICAgICBMaW5rID0+ICdBZG1pbklUU01Db25maWdJdGVtJywKICAgICAgICAgICAgfSwKICAgICAgICBdCiAgICAlXQoKICAgIFslIElGIChEYXRhLkNsYXNzU2VsZWN0ZWQpICVdCiAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7CiAgICAgICAgICAgIE5hbWUgPT4gRGF0YS5DbGFzc1NlbGVjdGVkLk5hbWUsCiAgICAgICAgICAgIExpbmsgPT4gJ0FkbWluSVRTTUNvbmZpZ0l0ZW07U3ViYWN0aW9uPURlZmluaXRpb25MaXN0O0NsYXNzSUQ9JyBfIERhdGEuQ2xhc3NTZWxlY3RlZC5JRAogICAgICAgIH0pICVdCiAgICBbJSBFTkQgJV0KCiAgICBbJSBJRiAoRGF0YS5WZXJzaW9uU2VsZWN0ZWQpICVdCiAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7CiAgICAgICAgICAgIE5hbWUgPT4gJ1ZlcnNpb24gJyBfIERhdGEuVmVyc2lvblNlbGVjdGVkLlZlcnNpb24sCiAgICAgICAgICAgIExpbmsgPT4gJ0FkbWluSVRTTUNvbmZpZ0l0ZW07U3ViYWN0aW9uPURlZmluaXRpb25WaWV3O0RlZmluaXRpb25JRD0nIF8gRGF0YS5WZXJzaW9uU2VsZWN0ZWQuSUQKICAgICAgICB9KSAlXQogICAgWyUgRU5EICVdCgogICAgWyUgSUYgKERhdGEuRWRpdCkgJV0KICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsKICAgICAgICAgICAgTmFtZSA9PiAnRWRpdCBkZWZpbml0aW9uJywKICAgICAgICB9KSAlXQogICAgWyUgRU5EICVdCgogICAgWyUgSU5DTFVERSAiQnJlYWRjcnVtYi50dCIgUGF0aCA9IEJyZWFkY3J1bWJQYXRoICVdCgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0nQ29udGVudCc+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9ImdldCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJEZWZpbml0aW9uQ2hhbmdlIi8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBEYXRhLkNsYXNzT3B0aW9uU3RyZyAlXTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBjbGFzcyBkZWZpbml0aW9uIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TGlzdCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJMaXN0IikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29uZmlnIEl0ZW0gQ2xhc3MiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1EZWZpbml0aW9uTGlzdDtDbGFzc0lEPVslIERhdGEuQ2xhc3NJRCB8IHVyaSAlXSI+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TGlzdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkRlZmluaXRpb25MaXN0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ilc1MHBjIj5bJSBUcmFuc2xhdGUoIkNvbmZpZyBJdGVtIENsYXNzIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlZlcnNpb24iKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCBieSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRGVmaW5pdGlvbkxpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1EZWZpbml0aW9uVmlldztEZWZpbml0aW9uSUQ9WyUgRGF0YS5EZWZpbml0aW9uSUQgfCB1cmkgJV0iPlslIERhdGEuQ2xhc3MgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLlZlcnNpb24gfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNyZWF0ZUJ5VXNlciB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIkRlZmluaXRpb25MaXN0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEZWZpbml0aW9uTGlzdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkRlZmluaXRpb25WaWV3IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlZpZXciKSB8IGh0bWwgJV06IDwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ29uZmlnIEl0ZW0gQ2xhc3MiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVmVyc2lvbiIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmVyc2lvbiB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQgYnkiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5VXNlciB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiRGVmaW5pdGlvbiIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmU+WyUgRGF0YS5EZWZpbml0aW9uU3RyaW5nICVdPC9wcmU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRGVmaW5pdGlvblZpZXciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEZWZpbml0aW9uQ2hhbmdlIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkNoYW5nZSIpIHwgaHRtbCAlXTogPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJEZWZpbml0aW9uU2F2ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNsYXNzSUQiIHZhbHVlPSJbJSBEYXRhLkNsYXNzSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDb25maWcgSXRlbSBDbGFzcyIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRlZmluaXRpb24iPlslIFRyYW5zbGF0ZSgiRGVmaW5pdGlvbiIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IkRlZmluaXRpb24iIGlkPSJEZWZpbml0aW9uIiByb3dzPSJbJSBEYXRhLlJvd3MgfCBodG1sICVdIiBjb2xzPSI4MCIgd3JhcD0ib2ZmIj5bJSBEYXRhLkRlZmluaXRpb24gfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJTdWJtaXRBbmRDb250aW51ZSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdEFuZENvbnRpbnVlIiB0eXBlPSJidXR0b24iIHZhbHVlPSJTdWJtaXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJTdWJtaXQiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlN1Ym1pdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEZWZpbml0aW9uQ2hhbmdlIikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMT5bJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKCJDb25maWcgSXRlbSIpIHwgaHRtbCAlXTwvaDE+CgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+PGxhYmVsIGZvcj0iRmlsdGVyQ2xhc3NlcyI+WyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIENsYXNzZXMiKSB8IGh0bWwgJV08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyQ2xhc3NlcyIgY2xhc3M9IkZpbHRlckJveCIgbmFtZT0iRmlsdGVyQ2xhc3NlcyIgdmFsdWU9IiIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRmlsdGVyIGZvciBDbGFzc2VzIikgfCBodG1sICVdIiBwbGFjZWhvbGRlcj0iWyUgVHJhbnNsYXRlKCJKdXN0IHN0YXJ0IHR5cGluZyB0byBmaWx0ZXIuLi4iKSB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiSGludCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlNlbGVjdCBhIENsYXNzIGZyb20gdGhlIGxpc3QgdG8gY3JlYXRlIGEgbmV3IENvbmZpZyBJdGVtLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGlzdCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBpZD0iQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlcxMDBwYyI+WyUgVHJhbnNsYXRlKCJDbGFzcyIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iRmlsdGVyTWVzc2FnZSBIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZSgiTm8gbWF0Y2hlcyBmb3VuZC4iKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0l0ZW1MaXN0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtRWRpdDtDbGFzc0lEPVslIERhdGEuQ2xhc3NJRCB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3SXRlbUxpc3QiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCdWxrQWN0aW9uIikgJV0KPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9ImNvbXBvc2UiIGNsYXNzPSJWYWxpZGF0ZSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJEbyIvPgoKICAgIDxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGgxPlslIFRyYW5zbGF0ZSgiSVRTTSBDb25maWdJdGVtIEJ1bGsgQWN0aW9uIikgfCBodG1sICVdPC9oMT4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlVzZWRDb25maWdJdGVtSUQiKSAlXQogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29uZmlnSXRlbUlEIiB2YWx1ZT0iWyUgRGF0YS5Db25maWdJdGVtSUQgfCBodG1sICVdIiAvPgpbJSBSZW5kZXJCbG9ja0VuZCgiVXNlZENvbmZpZ0l0ZW1JRCIpICVdCgogICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEZXBsU3RhdGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRlcGxTdGF0ZUlEIj5bJSBUcmFuc2xhdGUoIkRlcGxveW1lbnQgc3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRGVwbFN0YXRlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkRlcGxTdGF0ZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkluY2lTdGF0ZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW5jaVN0YXRlSUQiPlslIFRyYW5zbGF0ZSgiSW5jaWRlbnQgc3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuSW5jaVN0YXRlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkluY2lTdGF0ZSIpICVdCgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkxpbmtUb2dldGhlciI+WyUgVHJhbnNsYXRlKCJMaW5rIHRvZ2V0aGVyIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUb2dldGhlclllc05vT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGlua1RvZ2V0aGVyTGlua1R5cGVTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJMaW5rVG9nZXRoZXJBbm90aGVyIj5bJSBUcmFuc2xhdGUoIkxpbmsgdG8gYW5vdGhlciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJbJSBEYXRhLkxpbmtUb2dldGhlckFub3RoZXJJbnZhbGlkIHwgaHRtbCAlXSBXMjVwYyIgaWQ9IkxpbmtUb2dldGhlckFub3RoZXIiIG5hbWU9IkxpbmtUb2dldGhlckFub3RoZXIiIHZhbHVlPSJbJSBEYXRhLkxpbmtUb2dldGhlckFub3RoZXIgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkxpbmtUb2dldGhlckFub3RoZXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBDb25maWd1cmF0aW9uIEl0ZW0gbnVtYmVyISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MaW5rVHlwZVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiVGhlIG51bWJlciBvZiBhbm90aGVyIENvbmZpZ3VyYXRpb24gSXRlbSB0byBsaW5rIHdpdGguIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgaWQ9InN1Ym1pdFJpY2hUZXh0IiBhY2Nlc3NrZXk9ImciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSAoZykiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Zvcm0+ClslIFJlbmRlckJsb2NrRW5kKCJCdWxrQWN0aW9uIikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCjxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFczMDBweCI+CgogICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICBbJSBEYXRhLk5hbWUgfCBodG1sICVdCiAgICA8L3A+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTnVtYmVyIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk51bWJlcikgfCBodG1sICVdCiAgICA8L3A+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgoKPC9maWVsZHNldD4KPHAgY2xhc3M9IlNwYWNpbmdUb3AgQ2VudGVyIj4KICAgIFslIFRyYW5zbGF0ZSgiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbmZpZyBpdGVtPyIpIHwgaHRtbCAlXQo8L3A+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTdGFydE5vcm1hbCIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICA8aDE+WyUgVHJhbnNsYXRlKCJFZGl0IikgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoIkNvbmZpZyBJdGVtIikgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoRGF0YS5OdW1iZXIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZSgiQ2xhc3MiKSB8IGh0bWwgJV06IFslIFRyYW5zbGF0ZShEYXRhLkNsYXNzKSB8IGh0bWwgJV08L2gxPgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+ClslIFJlbmRlckJsb2NrRW5kKCJTdGFydE5vcm1hbCIpICVdCiAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IkNsYXNzSXRlbSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiIGlkPSJDbGFzc0l0ZW0iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTdGFydFNtYWxsIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgxPlslIFRyYW5zbGF0ZSgiRWRpdCIpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKCJDb25maWcgSXRlbSIpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKERhdGEuTnVtYmVyKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoIkNsYXNzIikgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoRGF0YS5DbGFzcykgfCBodG1sICVdPC9oMT4KICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsICYgY2xvc2UiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTY3JlZW5UeXBlIiB2YWx1ZT0iUG9wdXAiLz4KWyUgUmVuZGVyQmxvY2tFbmQoIlN0YXJ0U21hbGwiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlZlcnNpb25TYXZlIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2xhc3NJRCIgdmFsdWU9IlslIERhdGEuQ2xhc3NJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDb25maWdJdGVtSUQiIHZhbHVlPSJbJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJEdXBsaWNhdGVJRCIgdmFsdWU9IlslIERhdGEuRHVwbGljYXRlSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybUlEIiB2YWx1ZT0iWyUgRGF0YS5Gb3JtSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VibWl0U2F2ZSIgdmFsdWU9IlslIERhdGEuU3VibWl0U2F2ZSB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJvd05hbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJOYW1lIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuUm93TmFtZUludmFsaWQgfCBodG1sICVdIiBtYXhsZW5ndGg9IjI1MCIgdmFsdWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRoZSBuYW1lIG9mIHRoaXMgY29uZmlnIGl0ZW0iKSB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSb3dOYW1lRXJyb3JEZWZhdWx0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJSb3dOYW1lRXJyb3JEZWZhdWx0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUm93TmFtZUVycm9yRHVwbGljYXRlcyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIk5hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgdGhlIENvbmZpZ0l0ZW1zIHdpdGggdGhlIGZvbGxvd2luZyBOdW1iZXIocyk6ICVzIiwgRGF0YS5EdXBsaWNhdGVzKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJSb3dOYW1lRXJyb3JEdXBsaWNhdGVzIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUm93TmFtZUVycm9yUmVnRXgiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKERhdGEuUmVnRXhFcnJvck1lc3NhZ2UpIHwgaHRtbCAlXTwvcD48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJvd05hbWVFcnJvclJlZ0V4IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJvd05hbWUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSb3dEZXBsU3RhdGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJEZXBsU3RhdGVJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJEZXBsb3ltZW50IFN0YXRlIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkRlcGxTdGF0ZU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRlcGxTdGF0ZUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRlcGxTdGF0ZUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUm93RGVwbFN0YXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUm93SW5jaVN0YXRlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iSW5jaVN0YXRlSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiSW5jaWRlbnQgU3RhdGUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuSW5jaVN0YXRlT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iSW5jaVN0YXRlSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iSW5jaVN0YXRlSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJSb3dJbmNpU3RhdGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJYTUxSb3ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJYTUxSb3dGaWVsZHNldFN0YXJ0IikgJV0KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+ClslIFJlbmRlckJsb2NrRW5kKCJYTUxSb3dGaWVsZHNldFN0YXJ0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiWE1MUm93VmFsdWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgWyUgRGF0YS5MYWJlbENsYXNzICVdIFslIERhdGEuTGFiZWxGb3IgJV0+ClslIFJlbmRlckJsb2NrU3RhcnQoIlhNTFJvd1ZhbHVlQ29udGVudFJlcXVpcmVkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJYTUxSb3dWYWx1ZUNvbnRlbnRSZXF1aXJlZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlslIERhdGEuQ2xhc3MgJV0gRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5JbnB1dFN0cmluZyAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJYTUxSb3dWYWx1ZUNvbnRlbnREZWxldGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iRGlzYWJsZVZhbGlkYXRpb24gUmVtb3ZlIiB0eXBlPSJzdWJtaXQiIG5hbWU9IlslIERhdGEuSW5wdXRLZXkgfCBodG1sICVdOjpEZWxldGUiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L2J1dHRvbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlhNTFJvd1ZhbHVlQ29udGVudERlbGV0ZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJbJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJYTUxSb3dWYWx1ZVNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuSXRlbUlEIHwgaHRtbCAlXVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlhNTFJvd1ZhbHVlU2VydmVyRXJyb3IiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJYTUxSb3dWYWx1ZVJlZ0V4RXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5JdGVtSUQgfCBodG1sICVdU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5SZWdFeEVycm9yTWVzc2FnZSkgfCBodG1sICVdPC9wPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiWE1MUm93VmFsdWVSZWdFeEVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJYTUxSb3dWYWx1ZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJYTUxSb3dBZGRDb250ZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFslIERhdGEuQ2xhc3MgJV0gZm9yPSJbJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iRGlzYWJsZVZhbGlkYXRpb24gQWRkIiBpZD0iWyUgRGF0YS5JdGVtSUQgfCBodG1sICVdIiB0eXBlPSJzdWJtaXQiIG5hbWU9IlslIERhdGEuSW5wdXRLZXkgfCBodG1sICVdOjpBZGQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iID48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJYTUxSb3dBZGRDb250ZW50IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlhNTFJvd0ZpZWxkc2V0RW5kIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja0VuZCgiWE1MUm93RmllbGRzZXRFbmQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiWE1MUm93IikgJV0KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBdHRhY2htZW50cyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJTkNMVURFICJGb3JtRWxlbWVudHMvQXR0YWNobWVudExpc3QudHQiICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmFtZT0iU3VibWl0IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0QnV0dG9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdWJtaXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IkNhbmNlbEJ1dHRvbiIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbmRTbWFsbCIpICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRW5kU21hbGwiKSAlXQogICAgICAgIDwvZm9ybT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRW5kTm9ybWFsIikgJV0KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkVuZE5vcm1hbCIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8IS0tIHN0YXJ0IGZvcm0gLS0+CjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSGlzdG9yeSBvZiBDb25maWcgSXRlbTogJXMiLCBEYXRhLk5hbWUpIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCAmIGNsb3NlIikgfCBodG1sICVdPC9hPgogICAgICAgIDwvcD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJIaXN0b3J5IENvbnRlbnQiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBzdW1tYXJ5PSJDb25maWd1cmF0aW9uIEl0ZW0gSGlzdG9yeSIgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBY3Rpb24iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiWm9vbSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlVzZXIiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJDcmVhdGV0aW1lIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5IaXN0b3J5VHlwZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICBjbGFzcz0iTGlua1pvb21WaWV3IEFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgJV07VmVyc2lvbklEPVslIERhdGEuVmVyc2lvbklEICVdIj5bJSBUcmFuc2xhdGUoIlpvb20gdmlldyIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Vc2VyRnVsbG5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiUm93IikgJV0KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZW5kIGZvcm0gLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyIikgJV0KPGRpdiBjbGFzcz0iT3ZlcnZpZXdCb3ggQVJJQVJvbGVNYWluIFslIERhdGEuVmlldyB8IGh0bWwgJV0iPgogICAgPGgxPlslIFRyYW5zbGF0ZShEYXRhLlRpdGxlTmFtZSkgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoRGF0YS5UaXRsZVZhbHVlKSB8IGh0bWwgJV08L2gxPgoKICAgIFslIERhdGEuRGF0YUluVGhlTWlkZGxlICVdCgogICAgPGRpdiBjbGFzcz0iT3ZlcnZpZXdDb250cm9sIiBpZD0iT3ZlcnZpZXdDb250cm9sIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXIiKSAlXQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iQWN0aXZlIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuRmlsdGVyTGluayAlXUZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPHNwYW4+WyUgRGF0YS5Db3VudCB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IlslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuRmlsdGVyTGluayAlXUZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPHNwYW4+WyUgRGF0YS5Db3VudCB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZE5vdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNwbGl0IikgJV0KICAgICAgICAgICAgICAgICAgICAtClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhckZpbHRlckl0ZW1TcGxpdCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhckZpbHRlckl0ZW0iKSAlXQogICAgICAgICAgICAgICAgPC91bD4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJQYWdlQmFjayIpICVdCiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IklUU01Db25maWdJdGVtU2VhcmNoIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtCYWNrICVdIj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBzZWFyY2ggb3B0aW9ucyIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyUGFnZUJhY2siKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29udGV4dFNldHRpbmdzIikgJV0KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQ29udGV4dEZ1bmN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJDb250ZXh0U2V0dGluZ3MiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iU2hvd0NvbnRleHRTZXR0aW5nc0RpYWxvZyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQ29udGV4dCBTZXR0aW5ncyIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkNvbnRleHQgU2V0dGluZ3MiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDb250ZXh0U2V0dGluZ3NEaWFsb2dDb250YWluZXIiIGNsYXNzPSJIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBpZD0iQ29udGV4dFNldHRpbmdzRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRQcmVmZXJlbmNlcyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJVcGRhdGUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iR3JvdXAiIHZhbHVlPSJbJSBEYXRhLkdyb3VwIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSZWRpcmVjdFVSTCIgdmFsdWU9IlslIERhdGEuUmVxdWVzdGVkVVJMIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLlByZWZlcmVuY2VzS2V5IHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJDb25maWcgSXRlbXMgcGVyIHBhZ2UiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlBhZ2VTaG93blN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJDb250ZXh0U2V0dGluZ3MiKSAlXQoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJPdmVydmlld0FjdGlvbnMiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQnVsa0FjdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPSJDb25maWdJdGVtQnVsa0FjdGlvbiIgY2xhc3M9IkJ1bGsgSW5hY3RpdmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJCdWxrIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDwvdWw+ClslIFJlbmRlckJsb2NrRW5kKCJCdWxrQWN0aW9uIikgJV0KCiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5BY3Rpb25Sb3cgJV0KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Ik92ZXJ2aWV3Wm9vbSI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhclZpZXdNb2RlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJBY3RpdmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbCIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07RmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdO1ZpZXc9WyUgRGF0YS5WaWV3IHwgdXJpICVdO1slIERhdGEuTGlua0ZpbHRlciAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuTmFtZVNob3J0KSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBuYW1lPSJPdmVydmlld0NvbnRyb2wiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO0ZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXTtWaWV3PVslIERhdGEuVmlldyB8IHVyaSAlXTtbJSBEYXRhLkxpbmtGaWx0ZXIgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk5hbWVTaG9ydCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUGFnaW5hdGlvbiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyUGFnZU5hdkJhciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUmVzdWx0TG9uZyAlXQogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlNpdGVOYXZCYXJMb25nICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhclBhZ2VOYXZCYXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiMgc29ydCBvcmRlciBiYXIgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICBbJSBEYXRhLlNvcnRPcmRlckJhciAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyIikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8ZGl2IGlkPSJPdmVydmlld0JvZHkiIGNsYXNzPSJPdmVydmlldyBUaWNrZXRMaXN0Ij4KICAgIDx0YWJsZSBjbGFzcz0iVGFibGVTbWFsbCIgc3VtbWFyeT0iWyUgVHJhbnNsYXRlKCJBIGdlbmVyaWMgSVRTTSBDb25maWd1cmF0aW9uIEl0ZW0gdGFibGUiKSB8IGh0bWwgJV0iPgogICAgICAgIFslIERhdGEuU3R5bGVDbGFzc2VzICVdCiAgICAgICAgPHRoZWFkPgogICAgICAgICAgICA8dHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEJ1bGtBY3Rpb25IZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDaGVja2JveCBGaXhlZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iQ2hlY2tib3giIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNlbGVjdCBhbGwiKSB8IGh0bWwgJV0iIGlkPSJTZWxlY3RBbGxDb25maWdJdGVtcyIgYXV0b2NvbXBsZXRlPSJvZmYiIC8+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQnVsa0FjdGlvbkhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckluY2lTaWduYWxIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiSW5jaWRlbnQgU3RhdGUiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3VySW5jaVNpZ25hbEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckRlcGxTaWduYWxIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiRGVwbG95bWVudCBTdGF0ZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDdXJEZXBsU2lnbmFsSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTnVtYmVySGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iTnVtYmVyIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9TnVtYmVyO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBDb25maWcoIklUU01Db25maWdJdGVtOjpIb29rIikgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTnVtYmVySGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTmFtZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ik5hbWUgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1OYW1lO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTmFtZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENsYXNzSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2xhc3MgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DbGFzc0lEO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkNsYXNzIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENsYXNzSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3VyRGVwbFN0YXRlSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ3VyRGVwbFN0YXRlIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9RGVwbFN0YXRlSUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiRGVwbG95bWVudCBTdGF0ZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDdXJEZXBsU3RhdGVIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDdXJEZXBsU3RhdGVUeXBlSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkRlcGxveW1lbnQgU3RhdGUgVHlwZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDdXJEZXBsU3RhdGVUeXBlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3VySW5jaVN0YXRlSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ3VySW5jaVN0YXRlIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9SW5jaVN0YXRlSUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiQ3VycmVudCBJbmNpZGVudCBTdGF0ZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDdXJJbmNpU3RhdGVIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDdXJJbmNpU3RhdGVUeXBlSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkN1cnJlbnQgSW5jaWRlbnQgU3RhdGUgVHlwZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDdXJJbmNpU3RhdGVUeXBlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkWE1MQXR0cmlidXRlSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoRGF0YS5YTUxBdHRyaWJ1dGVIZWFkZXIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRYTUxBdHRyaWJ1dGVIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRMYXN0Q2hhbmdlZEhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ikxhc3RDaGFuZ2VkIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9Q2hhbmdlVGltZTtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTGFzdENoYW5nZWRIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDcmVhdGVUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DcmVhdGVUaW1lO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkNyZWF0ZSBUaW1lIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENyZWF0ZVRpbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJIaWRkZW4iPgogICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iWyUgRGF0YS5Ub3RhbENvbHVtbnMgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmQiKSAlXQogICAgICAgICAgICA8dHIgaWQ9IkNvbmZpZ0l0ZW1JRF9bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IGh0bWwgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRCdWxrQWN0aW9uIikgJV0KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2hlY2tib3ggRml4ZWQgTm9uVGV4dENvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iQ2hlY2tib3giIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJDb25maWdJdGVtSUQiIHZhbHVlPSJbJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IGh0bWwgJV0iICBhdXRvY29tcGxldGU9Im9mZiIgLz4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRCdWxrQWN0aW9uIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3VySW5jaVNpZ25hbCIpICVdCiAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPiJbJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXSI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3VySW5jaVNpZ25hbCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckRlcGxTaWduYWwiKSAlXQogICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5DdXJEZXBsU3RhdGUpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckRlcGxTaWduYWwgfCBodG1sICVdIj4iWyUgVHJhbnNsYXRlKERhdGEuQ3VyRGVwbFN0YXRlKSB8IGh0bWwgJV0iPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEN1ckRlcGxTaWduYWwiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmROdW1iZXIiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuTnVtYmVyIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj5bJSBEYXRhLk51bWJlciB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTnVtYmVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTmFtZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZE5hbWUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDbGFzcyIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQ2xhc3MpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuQ2xhc3MpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENsYXNzIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3VyRGVwbFN0YXRlIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5DdXJEZXBsU3RhdGUpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuQ3VyRGVwbFN0YXRlKSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDdXJEZXBsU3RhdGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDdXJEZXBsU3RhdGVUeXBlIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5DdXJEZXBsU3RhdGVUeXBlKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkN1ckRlcGxTdGF0ZVR5cGUpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEN1ckRlcGxTdGF0ZVR5cGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDdXJJbmNpU3RhdGUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEN1ckluY2lTdGF0ZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckluY2lTdGF0ZVR5cGUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZVR5cGUpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuQ3VySW5jaVN0YXRlVHlwZSkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3VySW5jaVN0YXRlVHlwZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFhNTEF0dHJpYnV0ZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5YTUxBdHRyaWJ1dGVEYXRhIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj5bJSBEYXRhLlhNTEF0dHJpYnV0ZURhdGEgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFhNTEF0dHJpYnV0ZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZExhc3RDaGFuZ2VkIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXSI+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRMYXN0Q2hhbmdlZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENyZWF0ZVRpbWUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdIj5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENyZWF0ZVRpbWUiKSAlXQogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmQiKSAlXQogICAgICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPgo8L2Rpdj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZWFyY2hBSkFYIikgJV0KPGRpdiBjbGFzcz0iSW5uZXJDb250ZW50Ij4KICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iQ2xhc3MiPlslIFRyYW5zbGF0ZSgiQ2xhc3MiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIiBpZD0nRGl2Q2xhc3NJRCc+CiAgICAgICAgICAgIFslIERhdGEuQ2xhc3NPcHRpb25TdHJnICVdCiAgICAgICAgPC9kaXY+CiAgICA8L2ZpZWxkc2V0Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9IklubmVyQ29udGVudCIgaWQ9IkFKQVhVcGRhdGUiPgoKICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBpZD0iU2VhcmNoRm9ybSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIgaWQ9IlNlYXJjaEFjdGlvbiIvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNsYXNzSUQiIHZhbHVlPSJbJSBEYXRhLkNsYXNzSUQgfCBodG1sICVdIiBpZD0iU2VhcmNoQ2xhc3NJRCIvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNlYXJjaCIvPgoKICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBIaWRkZW4iIGlkPSdJVFNNU2VhcmNoUHJvZmlsZSc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPGxlZ2VuZD48c3Bhbj5bJSBUcmFuc2xhdGUoIlRlbXBsYXRlcyIpIHwgaHRtbCAlXTwvc3Bhbj48L2xlZ2VuZD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2VhcmNoUHJvZmlsZSI+WyUgVHJhbnNsYXRlKCJTZWFyY2ggdGVtcGxhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9IlNlYXJjaFByb2ZpbGUiIG5hbWU9IlNlYXJjaFByb2ZpbGUiIHZhbHVlPSJbJSBEYXRhLlByb2ZpbGUgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTZWFyY2hQcm9maWxlQWRkQmxvY2siPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJQcm9maWxlTmFtZSIgaWQ9IlNlYXJjaFByb2ZpbGVBZGROYW1lIi8+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiIgdHlwZT0iYnV0dG9uIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGUgVGVtcGxhdGUiKSB8IGh0bWwgJV0iIGlkPSJTZWFyY2hQcm9maWxlQWRkQWN0aW9uIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTYXZlUHJvZmlsZSIgdmFsdWU9IjEiLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iU2VhcmNoUHJvZmlsZU5ldyIgY2xhc3M9IkNhbGxGb3JBY3Rpb24iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkNyZWF0ZSBOZXciKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiQ3JlYXRlIE5ldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IlNlYXJjaFByb2ZpbGVEZWxldGUiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEhpZGRlbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IlNlYXJjaFByb2ZpbGVBc0xpbmsiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEhpZGRlbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiUHJvZmlsZSBsaW5rIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlByb2ZpbGUgbGluayIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9maWVsZHNldD4KCiAgICA8L2Zvcm0+CjwvZGl2PgoKPGRpdiBjbGFzcz0iQ29udGVudEZvb3RlciBDZW50ZXIiPgogICAgPGJ1dHRvbiBpZD0iU2VhcmNoRm9ybVN1Ym1pdCIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSBIaWRkZW4iIHZhbHVlPSJSdW4gU2VhcmNoIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtc2VhcmNoIj48L2k+WyUgVHJhbnNsYXRlKCJSdW4gU2VhcmNoIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlYXJjaEFKQVgiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQUpBWENvbnRlbnQiKSAlXQo8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgaWQ9IlNlYXJjaEZvcm0iPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIgaWQ9IlNlYXJjaEFjdGlvbiIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VhcmNoIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDbGFzc0lEIiB2YWx1ZT0iWyUgRGF0YS5DbGFzc0lEIHwgaHRtbCAlXSIgaWQ9IlNlYXJjaENsYXNzSUQiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU2VhcmNoRGlhbG9nIiB2YWx1ZT0nMSc+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJFbXB0eVNlYXJjaCIgdmFsdWU9IlslIERhdGEuRW1wdHlTZWFyY2ggfCBodG1sICVdIiBpZD0iRW1wdHlTZWFyY2giLz4KICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEhpZGRlbiIgaWQ9J0lUU01TZWFyY2hQcm9maWxlJz4KICAgICAgICA8bGVnZW5kPjxzcGFuPlslIFRyYW5zbGF0ZSgiVGVtcGxhdGVzIikgfCBodG1sICVdPC9zcGFuPjwvbGVnZW5kPgogICAgICAgIDxsYWJlbCBmb3I9IlNlYXJjaFByb2ZpbGUiPlslIFRyYW5zbGF0ZSgiU2VhcmNoIHRlbXBsYXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLlByb2ZpbGVzU3RyZyAlXQogICAgICAgICAgICA8ZGl2IGlkPSJTZWFyY2hQcm9maWxlQWRkQmxvY2siPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlByb2ZpbGVOYW1lIiBpZD0iU2VhcmNoUHJvZmlsZUFkZE5hbWUiLz4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24iIHR5cGU9ImJ1dHRvbiIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQ3JlYXRlIFRlbXBsYXRlIikgfCBodG1sICVdIiBpZD0iU2VhcmNoUHJvZmlsZUFkZEFjdGlvbiI+PHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgPGJ1dHRvbiBpZD0iU2VhcmNoUHJvZmlsZU5ldyIgY2xhc3M9IkNhbGxGb3JBY3Rpb24iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkNyZWF0ZSBOZXciKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiQ3JlYXRlIE5ldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBpZD0iU2VhcmNoUHJvZmlsZURlbGV0ZSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gSGlkZGVuIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGlkPSJTZWFyY2hQcm9maWxlQXNMaW5rIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBIaWRkZW4iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlByb2ZpbGUgbGluayIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJQcm9maWxlIGxpbmsiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlNhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJTYXZlUHJvZmlsZSIgaWQ9IlNhdmVQcm9maWxlIiB2YWx1ZT0iMSIvPgogICAgICAgIDwvZGl2PgogICAgPC9maWVsZHNldD4KCiAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBIaWRkZW4iIGlkPSdJVFNNU2VhcmNoRmllbGRzJz4KICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSIgaWQ9IlNlYXJjaEluc2VydCI+CiAgICAgICAgICAgIDxsZWdlbmQ+PHNwYW4+WyUgVHJhbnNsYXRlKCJGaWx0ZXJzIGluIHVzZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2xlZ2VuZD4KICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgPGxlZ2VuZD48c3Bhbj5bJSBUcmFuc2xhdGUoIkFkZGl0aW9uYWwgZmlsdGVycyIpIHwgaHRtbCAlXTwvc3Bhbj48L2xlZ2VuZD4KICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQWRkIGFub3RoZXIgYXR0cmlidXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIFslIERhdGEuQXR0cmlidXRlc1N0cmcgJV0KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IlByZXZpb3VzVmVyc2lvblNlYXJjaCI+WyUgVHJhbnNsYXRlKCJBbHNvIHNlYXJjaCBpbiBwcmV2aW91cyB2ZXJzaW9ucz8iKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLlByZXZpb3VzVmVyc2lvbk9wdGlvblN0cmcgJV0KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk91dHB1dCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLlJlc3VsdEZvcm1TdHJnICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZmllbGRzZXQ+CiAgICA8L2ZpZWxkc2V0Pgo8L2Zvcm0+CjxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEhpZGRlbiIgaWQ9IlNlYXJjaEF0dHJpYnV0ZXNIaWRkZW4iPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPGxhYmVsIGZvcj0iTnVtYmVyIiBpZD0iTGFiZWxOdW1iZXIiPlslIFRyYW5zbGF0ZSgiTnVtYmVyIikgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgiKGUuIGcuIDEwKjUxNTUgb3IgMTA1NjU4KikiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTnVtYmVyIiB2YWx1ZT0iWyUgRGF0YS5OdW1iZXIgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIC8+CiAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8bGFiZWwgZm9yPSJOYW1lIiBpZD0iTGFiZWxOYW1lIj5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgLz4KICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxsYWJlbCBmb3I9IkRlcGxTdGF0ZUlEcyIgaWQ9IkxhYmVsRGVwbFN0YXRlSURzIj5bJSBUcmFuc2xhdGUoIkRlcGxveW1lbnQgU3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICBbJSBEYXRhLkN1ckRlcGxTdGF0ZU9wdGlvblN0cmcgJV0KICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxsYWJlbCBmb3I9IkluY2lTdGF0ZUlEcyIgaWQ9IkxhYmVsSW5jaVN0YXRlSURzIj5bJSBUcmFuc2xhdGUoIkluY2lkZW50IFN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgWyUgRGF0YS5DdXJJbmNpU3RhdGVPcHRpb25TdHJnICVdCiAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dHJpYnV0ZVJvdyIpICVdCiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8bGFiZWwgZm9yPSJbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXSIgaWQ9IkxhYmVsWyUgRGF0YS5LZXkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5EZXNjcmlwdGlvbikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICBbJSBEYXRhLklucHV0U3RyaW5nICVdCiAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkF0dHJpYnV0ZVJvdyIpICVdCiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICBbJSBEYXRhLkF0dHJpYnV0ZXNPcmlnU3RyZyAlXQo8L2ZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja0VuZCgiQUpBWENvbnRlbnQiKSAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iSGVhZGxpbmUiPgogICAgICAgIDxkaXYgY2xhc3M9IkZsYWciIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckluY2lTaWduYWwgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGgxIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNvbmZpZ3VyYXRpb24gSXRlbSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OdW1iZXIgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5OYW1lIHwgdHJ1bmNhdGUoNDApIHwgaHRtbCAlXSI+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQ29uZmlndXJhdGlvbiBJdGVtIikgfCBodG1sICVdOiBbJSBEYXRhLk51bWJlciB8IGh0bWwgJV0gPHNwYW4+Jm1kYXNoOzwvc3Bhbj4gWyUgRGF0YS5OYW1lIHwgdHJ1bmNhdGUoNjApIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CgogICAgICAgIFslIERhdGEuU3R5bGVDbGFzc2VzICVdCgogICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJNZXRhIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQ29uZmlndXJhdGlvbiBJdGVtIEluZm9ybWF0aW9uIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIFRpZ2h0Ij4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNsYXNzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgVHJhbnNsYXRlKERhdGEuQ2xhc3MpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuTmFtZSB8IHRydW5jYXRlKDI1KSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkN1cnJlbnQgRGVwbG95bWVudCBTdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckRlcGxTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckRlcGxTaWduYWwgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLkN1ckRlcGxTdGF0ZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDdXJyZW50IEluY2lkZW50IFN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQ3VySW5jaVN0YXRlKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ3VySW5jaVN0YXRlKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCBieSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DcmVhdGVCeVVzZXJGdWxsTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUJ5VXNlckZ1bGxOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTWV0YSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkxpbmtUYWJsZVNpbXBsZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBEb250UHJpbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJMaW5rZWQgT2JqZWN0cyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGlua1RhYmxlU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTGlua1RhYmxlU2ltcGxlIikgJV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udHJvbFJvdyI+CiAgICAgICAgICAgICAgICA8aDI+PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJNZW51IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTWVudUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdWyUgRGF0YS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iIGlkPSJNZW51WyUgRGF0YS5NZW51SUQgfCBodG1sICVdIiBjbGFzcz0iWyUgRGF0YS5NZW51Q2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdClslIFJlbmRlckJsb2NrRW5kKCJNZW51IikgJV0KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJJVFNNVHJlZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWUiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBpZD0iSVRTTVRhYmxlIiAgY2xhc3M9IlRpY2tldExpc3QiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJJVFNNSXRlbVZpZXcgSWNvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFeHBhbmQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Ik9uZUlUU01JdGVtIEFjdGl2ZSIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD1bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IHVyaSAlXTtTaG93VmVyc2lvbnM9MCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvbmUgdmVyc2lvbiIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJTaG93IG9uZSB2ZXJzaW9uIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFsbElUU01JdGVtcyIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD1bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IHVyaSAlXTtTaG93VmVyc2lvbnM9MSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBhbGwgdmVyc2lvbnMiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1yZW9yZGVyIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJTaG93IGFsbCB2ZXJzaW9ucyIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIkV4cGFuZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkNvbGxhcHNlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJPbmVJVFNNSXRlbSIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD1bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IHVyaSAlXTtTaG93VmVyc2lvbnM9MCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvbmUgdmVyc2lvbiIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJTaG93IG9uZSB2ZXJzaW9uIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFsbElUU01JdGVtcyBBY3RpdmUiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgfCB1cmkgJV07U2hvd1ZlcnNpb25zPTEiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgYWxsIHZlcnNpb25zIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtcmVvcmRlciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiU2hvdyBhbGwgdmVyc2lvbnMiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJDb2xsYXBzZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IklUU01UYWJsZUJvZHkiIGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTY3JvbGxlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IlRhYmxlU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiVmVyc2lvbiBJbmNpZGVudCBTdGF0ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiVmVyc2lvbiBEZXBsb3ltZW50IFN0YXRlIikgfCBodG1sICVdPC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4+WyUgVHJhbnNsYXRlKCJWZXJzaW9uIE51bWJlciIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCBieSIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iWyUgRGF0YS5BY3RpdmUgfCBodG1sICVdIE1hc3RlckFjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkluY2lTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuSW5jaVNpZ25hbCB8IGh0bWwgJV0iPlslIERhdGEuSW5jaVN0YXRlIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlcGxTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuRGVwbFNpZ25hbCB8IGh0bWwgJV0iPlslIERhdGEuRGVwbFN0YXRlIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Db3VudCB8IGh0bWwgJV0uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBc0Jsb2NrIE1hc3RlckFjdGlvbkxpbmsiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgfCB1cmkgJV07VmVyc2lvbklEPVslIERhdGEuVmVyc2lvbklEIHwgdXJpICVdO1Nob3dWZXJzaW9ucz1bJSBEYXRhLlNob3dWZXJzaW9ucyB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZShEYXRhLkRlcGxTdGF0ZSkgfCBodG1sICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DcmVhdGVCeVVzZXJGdWxsTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIYW5kbGUgdWktcmVzaXphYmxlLWhhbmRsZSB1aS1yZXNpemFibGUtcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlJlc2l6ZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWUiKSAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0iSVRTTUl0ZW1zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCBTcGFjaW5nVG9wIEV4cGFuZGVkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJMaWdodFJvdyBIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj48YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQuIikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQ29uZmlndXJhdGlvbiBJdGVtIFZlcnNpb24gRGV0YWlscyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2l0aFBhZGRpbmcgQ29udGVudCBOb0RvdWJsZUJvcmRlcnMiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJQcm9wZXJ0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlZhbHVlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRGF0YSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlcyNXBjIiBzdHlsZT0icGFkZGluZy1sZWZ0OiBbJSBUcmFuc2xhdGUoRGF0YS5JbmRlbnRhdGlvbikgfCBodG1sICVdcHg7IiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OiBbJSBUcmFuc2xhdGUoRGF0YS5JbmRlbnRhdGlvbikgfCBodG1sICVdcHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiRGF0YSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dGFjaG1lbnRzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iVzI1cGMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkF0dGFjaG1lbnRzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQXR0YWNobWVudHMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtGaWxlbmFtZT1bJSBEYXRhLkZpbGVuYW1lIHwgdXJpICVdO0NvbmZpZ0l0ZW1JRD1bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbJSBEYXRhLkZpbGVzaXplIHwgTG9jYWxpemUoJ0ZpbGVzaXplJykgfCBodG1sICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJBdHRhY2htZW50cyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dGFjaG1lbnRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJXMjVwYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7RmlsZW5hbWU9WyUgRGF0YS5GaWxlbmFtZSB8IHVyaSAlXTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWyUgRGF0YS5GaWxlc2l6ZSB8IExvY2FsaXplKCdGaWxlc2l6ZScpIHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUYWJsZVN0cmcgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJEYXNoYm9hcmRBY3Rpb25zIj4KCiAgICA8dWwgY2xhc3M9IklUU01Db25maWdJdGVtRmlsdGVyIFRhYiBBY3Rpb25zIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhckZpbHRlckl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZCIpICVdCiAgICAgICAgICAgIDxsaSBjbGFzcz0iU2VsZWN0ZWQgWyUgRGF0YS5DU1MgfCBodG1sICVdIFslIERhdGEuTmFtZSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9IkRhc2hib2FyZEFkZGl0aW9uYWxGaWx0ZXJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBkYXRhLWZpbHRlcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2xhc3M9IkRhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpY0ZpbHRlciI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIChbJSBEYXRhLkNvdW50IHwgaHRtbCAlXSkgPC9hPgogICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZE5vdCIpICVdCiAgICAgICAgICAgIDxsaSBjbGFzcz0iWyUgRGF0YS5DU1MgfCBodG1sICVdIFslIERhdGEuTmFtZSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9IkRhc2hib2FyZEFkZGl0aW9uYWxGaWx0ZXJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBkYXRhLWZpbHRlcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2xhc3M9IkRhc2hib2FyZElUU01Db25maWdJdGVtR2VuZXJpY0ZpbHRlciI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIChbJSBEYXRhLkNvdW50IHwgaHRtbCAlXSkgPC9hPgogICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVyIikgJV0KICAgIDwvdWw+Cgo8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkNvbnRlbnRMYXJnZUlUU01Db25maWdJdGVtR2VuZXJpY0ZpbHRlck5hdkJhciIpICVdCjxzcGFuIGNsYXNzPSJQYWdpbmF0aW9uIj4KICAgIFslIERhdGEuU2l0ZU5hdkJhciAlXQo8L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJDb250ZW50TGFyZ2VJVFNNQ29uZmlnSXRlbUdlbmVyaWNGaWx0ZXJOYXZCYXIiKSAlXQoKIzwhLS0gVGhpcyBmb3JtIHdpbGwgbm90IGJlIHN1Ym1pdHRlZCwgd2UgbmVlZCBpdCBmb3IgdGhlIEFKQVggY2FsbHMuIC0tPgo8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDdXN0b21lcklEIiB2YWx1ZT0iWyUgRGF0YS5DdXN0b21lcklEIHwgaHRtbCAlXSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ3VzdG9tZXJVc2VySUQiIHZhbHVlPSJbJSBEYXRhLkN1c3RvbWVyVXNlcklEIHwgaHRtbCAlXSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRmlsdGVyWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IkZpbHRlclslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLkZpbHRlclZhbHVlIHwgaHRtbCAlXSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFkZGl0aW9uYWxGaWx0ZXJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iQWRkaXRpb25hbEZpbHRlclslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLkFkZGl0aW9uYWxGaWx0ZXJWYWx1ZSB8IGh0bWwgJV0iIC8+CiAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgIFslIERhdGEuU3R5bGVDbGFzc2VzICVdCiAgICAgICAgPHRoZWFkPgogICAgICAgICAgICA8dHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckluY2lTaWduYWxIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiSW5jaWRlbnQgU3RhdGUiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3VySW5jaVNpZ25hbEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckRlcGxTaWduYWxIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiRGVwbG95bWVudCBTdGF0ZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDdXJEZXBsU2lnbmFsSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTnVtYmVySGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRGFzaGJvYXJkSGVhZGVyIE51bWJlciBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGlkPSJPdmVydmlld0NvbnRyb2xbJSBEYXRhLkNvbHVtbiB8IGh0bWwgJV0iIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbFslIERhdGEuQ29sdW1uIHwgaHRtbCAlXSIgaHJlZj0iIyIgZGF0YS1jb2x1bW49Ik51bWJlciI+WyUgQ29uZmlnKCJJVFNNQ29uZmlnSXRlbTo6SG9vayIpICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZE51bWJlckhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZE5hbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJEYXNoYm9hcmRIZWFkZXIgTmFtZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGlkPSJPdmVydmlld0NvbnRyb2xbJSBEYXRhLkNvbHVtbiB8IGh0bWwgJV0iIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbFslIERhdGEuQ29sdW1uIHwgaHRtbCAlXSIgaHJlZj0iIyIgZGF0YS1jb2x1bW49Ik5hbWUiPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmROYW1lSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2xhc3NIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJEYXNoYm9hcmRIZWFkZXIgQ2xhc3MgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBpZD0iT3ZlcnZpZXdDb250cm9sWyUgRGF0YS5Db2x1bW4gfCBodG1sICVdIiBuYW1lPSJPdmVydmlld0NvbnRyb2xbJSBEYXRhLkNvbHVtbiB8IGh0bWwgJV0iIGhyZWY9IiMiIGRhdGEtY29sdW1uPSJDbGFzc0lEIj5bJSBUcmFuc2xhdGUoIkNsYXNzIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENsYXNzSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3VyRGVwbFN0YXRlSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRGFzaGJvYXJkSGVhZGVyIEN1ckRlcGxTdGF0ZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGlkPSJPdmVydmlld0NvbnRyb2xbJSBEYXRhLkNvbHVtbiB8IGh0bWwgJV0iIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbFslIERhdGEuQ29sdW1uIHwgaHRtbCAlXSIgaHJlZj0iIyIgZGF0YS1jb2x1bW49IkRlcGxTdGF0ZUlEIj5bJSBUcmFuc2xhdGUoIkRlcGxveW1lbnQgU3RhdGUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3VyRGVwbFN0YXRlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3VyRGVwbFN0YXRlVHlwZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJEZXBsb3ltZW50IFN0YXRlIFR5cGUiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3VyRGVwbFN0YXRlVHlwZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckluY2lTdGF0ZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkRhc2hib2FyZEhlYWRlciBDdXJJbmNpU3RhdGUgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBpZD0iT3ZlcnZpZXdDb250cm9sWyUgRGF0YS5Db2x1bW4gfCBodG1sICVdIiBuYW1lPSJPdmVydmlld0NvbnRyb2xbJSBEYXRhLkNvbHVtbiB8IGh0bWwgJV0iIGhyZWY9IiMiIGRhdGEtY29sdW1uPSJJbmNpU3RhdGVJRCI+WyUgVHJhbnNsYXRlKCJDdXJyZW50IEluY2lkZW50IFN0YXRlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEN1ckluY2lTdGF0ZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckluY2lTdGF0ZVR5cGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiQ3VycmVudCBJbmNpZGVudCBTdGF0ZSBUeXBlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEN1ckluY2lTdGF0ZVR5cGVIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRYTUxBdHRyaWJ1dGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZShEYXRhLlhNTEF0dHJpYnV0ZUhlYWRlcikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFhNTEF0dHJpYnV0ZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZExhc3RDaGFuZ2VkSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRGFzaGJvYXJkSGVhZGVyIExhc3RDaGFuZ2VkIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaWQ9Ik92ZXJ2aWV3Q29udHJvbFslIERhdGEuQ29sdW1uIHwgaHRtbCAlXSIgbmFtZT0iT3ZlcnZpZXdDb250cm9sWyUgRGF0YS5Db2x1bW4gfCBodG1sICVdIiBocmVmPSIjIiBkYXRhLWNvbHVtbj0iTGFzdENoYW5nZWQiPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZExhc3RDaGFuZ2VkSGVhZGVyIikgJV0KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iWyUgRGF0YS5Ub3RhbENvbHVtbnMgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmQiKSAlXQogICAgICAgICAgICA8dHIgaWQ9IkNvbmZpZ0l0ZW1JRF9bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IGh0bWwgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDdXJJbmNpU2lnbmFsIikgJV0KICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQ3VySW5jaVN0YXRlKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSI+IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDdXJJbmNpU2lnbmFsIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3VyRGVwbFNpZ25hbCIpICVdCiAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckRlcGxTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VyRGVwbFNpZ25hbCB8IGh0bWwgJV0iPiJbJSBUcmFuc2xhdGUoRGF0YS5DdXJEZXBsU3RhdGUpIHwgaHRtbCAlXSI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3VyRGVwbFNpZ25hbCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZE51bWJlciIpICVdCiAgICAgICAgICAgICAgICA8dGQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZE51bWJlckxpbmtTdGFydCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD1bJSBEYXRhLkNvbmZpZ0l0ZW1JRCB8IHVyaSAlXSIgdGl0bGU9IlslIERhdGEuTnVtYmVyIHwgdXJpICVdIiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmROdW1iZXJMaW5rU3RhcnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk51bWJlciB8IGh0bWwgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTnVtYmVyTGlua0VuZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTnVtYmVyTGlua0VuZCIpICVdCiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTnVtYmVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTmFtZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZE5hbWVMaW5rU3RhcnQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9WyUgRGF0YS5Db25maWdJdGVtSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBEYXRhLk5hbWUgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZE5hbWVMaW5rU3RhcnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBEYXRhLk5hbWUgfCB0cnVuY2F0ZSg0MCkgfCBodG1sICVdPC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZE5hbWVMaW5rRW5kIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmROYW1lTGlua0VuZCIpICVdCiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTmFtZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENsYXNzIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5DbGFzcykgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5DbGFzcykgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ2xhc3MiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDdXJEZXBsU3RhdGUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckRlcGxTdGF0ZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5DdXJEZXBsU3RhdGUpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEN1ckRlcGxTdGF0ZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckRlcGxTdGF0ZVR5cGUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckRlcGxTdGF0ZVR5cGUpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuQ3VyRGVwbFN0YXRlVHlwZSkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3VyRGVwbFN0YXRlVHlwZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEN1ckluY2lTdGF0ZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQ3VySW5jaVN0YXRlKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3VySW5jaVN0YXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3VySW5jaVN0YXRlVHlwZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQ3VySW5jaVN0YXRlVHlwZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGVUeXBlKSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDdXJJbmNpU3RhdGVUeXBlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkWE1MQXR0cmlidXRlIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkWE1MQXR0cmlidXRlTGlua1N0YXJ0IikgJV0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPVslIERhdGEuQ29uZmlnSXRlbUlEIHwgdXJpICVdIiB0aXRsZT0iWyUgRGF0YS5OdW1iZXIgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFhNTEF0dHJpYnV0ZUxpbmtTdGFydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuWE1MQXR0cmlidXRlRGF0YSB8IGh0bWwgJV0iPlslIERhdGEuWE1MQXR0cmlidXRlRGF0YSB8IGh0bWwgJV08L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkWE1MQXR0cmlidXRlTGlua0VuZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkWE1MQXR0cmlidXRlTGlua0VuZCIpICVdCiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkWE1MQXR0cmlidXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTGFzdENoYW5nZWQiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdIj5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZExhc3RDaGFuZ2VkIikgJV0KICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZCIpICVdCiAgICAgICAgPC90Ym9keT4KICAgIDwvdGFibGU+CjwvZm9ybT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6TWlncmF0aW9uczo6T1RSUzY6OlN5c0NvbmZpZykKCnVzZSBLZXJuZWw6OlN5c3RlbTo6RXZlbnRIYW5kbGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpEZWZpbml0aW9uOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpIaXN0b3J5Owp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpOdW1iZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb247CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlZlcnNpb247CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIFN0b3JhYmxlOwoKdXNlIHZhcnMgcXcoQElTQSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWaXJ0dWFsRlMnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpYTUwnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbSAtIGNvbmZpZyBpdGVtIGxpYgoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgY29uZmlnIGl0ZW0gZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQgKiAyMDsKCiAgICBASVNBID0gcXcoCiAgICAgICAgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpEZWZpbml0aW9uCiAgICAgICAgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpIaXN0b3J5CiAgICAgICAgS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpOdW1iZXIKICAgICAgICBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb24KICAgICAgICBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlZlcnNpb24KICAgICAgICBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTAogICAgICAgIEtlcm5lbDo6U3lzdGVtOjpFdmVudEhhbmRsZXIKICAgICk7CgogICAgIyBpbml0IG9mIGV2ZW50IGhhbmRsZXIKICAgICRTZWxmLT5FdmVudEhhbmRsZXJJbml0KAogICAgICAgIENvbmZpZyA9PiAnSVRTTUNvbmZpZ0l0ZW06OkV2ZW50TW9kdWxlUG9zdCcsCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIENvbmZpZ0l0ZW1Db3VudCgpCgpjb3VudCBhbGwgcmVjb3JkcyBvZiBhIGNvbmZpZyBpdGVtIGNsYXNzCgogICAgbXkgJENvdW50ID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1Db3VudCgKICAgICAgICBDbGFzc0lEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbUNvdW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDbGFzc0lEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3NJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHN0YXRlIGxpc3QKICAgIG15ICRTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+IFsgJ3ByZXByb2R1Y3RpdmUnLCAncHJvZHVjdGl2ZScgXSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gMCBpZiAhJXskU3RhdGVMaXN0fTsKCiAgICAjIGNyZWF0ZSBzdGF0ZSBzdHJpbmcKICAgIG15ICREZXBsU3RhdGVTdHJpbmcgPSBqb2luIHF7LCB9LCBrZXlzICV7JFN0YXRlTGlzdH07CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIENPVU5UKGlkKSBGUk9NIGNvbmZpZ2l0ZW0gV0hFUkUgY2xhc3NfaWQgPSA/IEFORCAiCiAgICAgICAgICAgIC4gImN1cl9kZXBsX3N0YXRlX2lkIElOICggJERlcGxTdGF0ZVN0cmluZyApIiwKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q2xhc3NJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRDb3VudCA9IDA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb3VudCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRDb3VudDsKfQoKPWhlYWQyIENvbmZpZ0l0ZW1SZXN1bHRMaXN0KCkKCnJldHVybiBhIGNvbmZpZyBpdGVtIGxpc3QgYXMgYXJyYXkgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQ29uZmlnSXRlbUxpc3RSZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbVJlc3VsdExpc3QoCiAgICAgICAgQ2xhc3NJRCA9PiAxMjMsCiAgICAgICAgU3RhcnQgICA9PiAxMDAsCiAgICAgICAgTGltaXQgICA9PiA1MCwKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbVJlc3VsdExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NsYXNzSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDbGFzc0lEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgc3RhdGUgbGlzdAogICAgbXkgJFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gWyAncHJlcHJvZHVjdGl2ZScsICdwcm9kdWN0aXZlJyBdLAogICAgICAgIH0sCiAgICApOwoKICAgICMgY3JlYXRlIHN0YXRlIHN0cmluZwogICAgbXkgJERlcGxTdGF0ZVN0cmluZyA9IGpvaW4gcXssIH0sIGtleXMgJXskU3RhdGVMaXN0fTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtICIKICAgICAgICAgICAgLiAiV0hFUkUgY2xhc3NfaWQgPSA/IEFORCBjdXJfZGVwbF9zdGF0ZV9pZCBJTiAoICREZXBsU3RhdGVTdHJpbmcgKSAiCiAgICAgICAgICAgIC4gIk9SREVSIEJZIGNoYW5nZV90aW1lIERFU0MiLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDbGFzc0lEfSBdLAogICAgICAgIFN0YXJ0ID0+ICRQYXJhbXtTdGFydH0sCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAQ29uZmlnSXRlbUlETGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAQ29uZmlnSXRlbUlETGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICAjIGdldCBsYXN0IHZlcnNpb25zIGRhdGEKICAgIG15IEBDb25maWdJdGVtTGlzdDsKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEIChAQ29uZmlnSXRlbUlETGlzdCkgewoKICAgICAgICAjIGdldCB2ZXJzaW9uIGRhdGEKICAgICAgICBteSAkTGFzdFZlcnNpb24gPSAkU2VsZi0+VmVyc2lvbkdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIFhNTERhdGFHZXQgICA9PiAwLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1MaXN0LCAkTGFzdFZlcnNpb247CiAgICB9CgogICAgcmV0dXJuIFxAQ29uZmlnSXRlbUxpc3Q7Cn0KCj1oZWFkMiBDb25maWdJdGVtR2V0KCkKCnJldHVybiBhIGNvbmZpZyBpdGVtIGFzIGhhc2ggcmVmZXJlbmNlCgogICAgbXkgJENvbmZpZ0l0ZW0gPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLAogICAgICAgIENhY2hlICAgICAgICA9PiAwLCAgICAjIChvcHRpb25hbCkgZGVmYXVsdCAxICgwfDEpCiAgICApOwoKQSBoYXNocmVmIHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGlzIHJldHVybmVkOgoKICAgICRDb25maWdJdGVte0NvbmZpZ0l0ZW1JRH0KICAgICRDb25maWdJdGVte051bWJlcn0KICAgICRDb25maWdJdGVte0NsYXNzSUR9CiAgICAkQ29uZmlnSXRlbXtDbGFzc30KICAgICRDb25maWdJdGVte0xhc3RWZXJzaW9uSUR9CiAgICAkQ29uZmlnSXRlbXtDdXJEZXBsU3RhdGVJRH0KICAgICRDb25maWdJdGVte0N1ckRlcGxTdGF0ZX0KICAgICRDb25maWdJdGVte0N1ckRlcGxTdGF0ZVR5cGV9CiAgICAkQ29uZmlnSXRlbXtDdXJJbmNpU3RhdGVJRH0KICAgICRDb25maWdJdGVte0N1ckluY2lTdGF0ZX0KICAgICRDb25maWdJdGVte0N1ckluY2lTdGF0ZVR5cGV9CiAgICAkQ29uZmlnSXRlbXtDcmVhdGVUaW1lfQogICAgJENvbmZpZ0l0ZW17Q3JlYXRlQnl9CiAgICAkQ29uZmlnSXRlbXtDaGFuZ2VUaW1lfQogICAgJENvbmZpZ0l0ZW17Q2hhbmdlQnl9Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ29uZmlnSXRlbUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBlbmFibGUgY2FjaGUgcGVyIGRlZmF1bHQKICAgIGlmICggIWRlZmluZWQgJFBhcmFte0NhY2hlfSApIHsKICAgICAgICAkUGFyYW17Q2FjaGV9ID0gMTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgbXkgJENhY2hlS2V5ICAgID0gJ0NvbmZpZ0l0ZW1HZXQ6OkNvbmZpZ0l0ZW1JRDo6JyAuICRQYXJhbXtDb25maWdJdGVtSUR9OwogICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICBteSAkQ2FjaGUgICAgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gU3RvcmFibGU6OmRjbG9uZSgkQ2FjaGUpIGlmICRDYWNoZTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGNvbmZpZ2l0ZW1fbnVtYmVyLCBjbGFzc19pZCwgbGFzdF92ZXJzaW9uX2lkLCAnCiAgICAgICAgICAgIC4gJ2N1cl9kZXBsX3N0YXRlX2lkLCBjdXJfaW5jaV9zdGF0ZV9pZCwgJwogICAgICAgICAgICAuICdjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcKICAgICAgICAgICAgLiAnRlJPTSBjb25maWdpdGVtIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NvbmZpZ0l0ZW1JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVDb25maWdJdGVtOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ29uZmlnSXRlbXtDb25maWdJdGVtSUR9ICAgPSAkUm93WzBdOwogICAgICAgICRDb25maWdJdGVte051bWJlcn0gICAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJENvbmZpZ0l0ZW17Q2xhc3NJRH0gICAgICAgID0gJFJvd1syXTsKICAgICAgICAkQ29uZmlnSXRlbXtMYXN0VmVyc2lvbklEfSAgPSAkUm93WzNdOwogICAgICAgICRDb25maWdJdGVte0N1ckRlcGxTdGF0ZUlEfSA9ICRSb3dbNF07CiAgICAgICAgJENvbmZpZ0l0ZW17Q3VySW5jaVN0YXRlSUR9ID0gJFJvd1s1XTsKICAgICAgICAkQ29uZmlnSXRlbXtDcmVhdGVUaW1lfSAgICAgPSAkUm93WzZdOwogICAgICAgICRDb25maWdJdGVte0NyZWF0ZUJ5fSAgICAgICA9ICRSb3dbN107CiAgICAgICAgJENvbmZpZ0l0ZW17Q2hhbmdlVGltZX0gICAgID0gJFJvd1s4XTsKICAgICAgICAkQ29uZmlnSXRlbXtDaGFuZ2VCeX0gICAgICAgPSAkUm93WzldOwogICAgfQoKICAgICMgY2hlY2sgY29uZmlnIGl0ZW0KICAgIGlmICggISRDb25maWdJdGVte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIENvbmZpZ0l0ZW1JRCAoJFBhcmFte0NvbmZpZ0l0ZW1JRH0pISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAkQ29uZmlnSXRlbXtDbGFzc30gPSAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVte0NsYXNzSUR9IH07CgogICAgcmV0dXJuIFwlQ29uZmlnSXRlbSBpZiAhJENvbmZpZ0l0ZW17Q3VyRGVwbFN0YXRlSUR9IHx8ICEkQ29uZmlnSXRlbXtDdXJJbmNpU3RhdGVJRH07CgogICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBmdW5jdGlvbmFsaXR5CiAgICBteSAkRGVwbFN0YXRlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+ICRDb25maWdJdGVte0N1ckRlcGxTdGF0ZUlEfSwKICAgICk7CgogICAgJENvbmZpZ0l0ZW17Q3VyRGVwbFN0YXRlfSAgICAgPSAkRGVwbFN0YXRlLT57TmFtZX07CiAgICAkQ29uZmlnSXRlbXtDdXJEZXBsU3RhdGVUeXBlfSA9ICREZXBsU3RhdGUtPntGdW5jdGlvbmFsaXR5fTsKCiAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBmdW5jdGlvbmFsaXR5CiAgICBteSAkSW5jaVN0YXRlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+ICRDb25maWdJdGVte0N1ckluY2lTdGF0ZUlEfSwKICAgICk7CgogICAgJENvbmZpZ0l0ZW17Q3VySW5jaVN0YXRlfSAgICAgPSAkSW5jaVN0YXRlLT57TmFtZX07CiAgICAkQ29uZmlnSXRlbXtDdXJJbmNpU3RhdGVUeXBlfSA9ICRJbmNpU3RhdGUtPntGdW5jdGlvbmFsaXR5fTsKCiAgICAjIGNhY2hlIHRoZSByZXN1bHQKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gU3RvcmFibGU6OmRjbG9uZSggXCVDb25maWdJdGVtICksCiAgICApOwoKICAgIHJldHVybiBcJUNvbmZpZ0l0ZW07Cn0KCj1oZWFkMiBDb25maWdJdGVtQWRkKCkKCmFkZCBhIG5ldyBjb25maWcgaXRlbQoKICAgIG15ICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgICAgICBOdW1iZXIgID0+ICcxMTEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2xhc3NJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDb25maWdJdGVtQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgIHJldHVybiBpZiAhJENsYXNzTGlzdDsKICAgIHJldHVybiBpZiByZWYgJENsYXNzTGlzdCBuZSAnSEFTSCc7CgogICAgIyBjaGVjayB0aGUgY2xhc3MgaWQKICAgIGlmICggISRDbGFzc0xpc3QtPnsgJFBhcmFte0NsYXNzSUR9IH0gKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTm8gdmFsaWQgY2xhc3MgaWQgZ2l2ZW4hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBjb25maWcgaXRlbSBudW1iZXIKICAgIGlmICggJFBhcmFte051bWJlcn0gKSB7CgogICAgICAgICMgZmluZCBleGlzdGluZyBjb25maWcgaXRlbSBudW1iZXIKICAgICAgICBteSAkRXhpc3RzID0gJFNlbGYtPkNvbmZpZ0l0ZW1OdW1iZXJMb29rdXAoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1OdW1iZXIgPT4gJFBhcmFte051bWJlcn0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRFeGlzdHMpIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NvbmZpZyBpdGVtIG51bWJlciBhbHJlYWR5IGV4aXN0cyEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgY3JlYXRlIGNvbmZpZyBpdGVtIG51bWJlcgogICAgICAgICRQYXJhbXtOdW1iZXJ9ID0gJFNlbGYtPkNvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUoCiAgICAgICAgICAgIFR5cGUgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6TnVtYmVyR2VuZXJhdG9yJyksCiAgICAgICAgICAgIENsYXNzSUQgPT4gJFBhcmFte0NsYXNzSUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBpbnNlcnQgbmV3IGNvbmZpZyBpdGVtCiAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNvbmZpZ2l0ZW0gJwogICAgICAgICAgICAuICcoY29uZmlnaXRlbV9udW1iZXIsIGNsYXNzX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17TnVtYmVyfSwgXCRQYXJhbXtDbGFzc0lEfSwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0gXSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkU3VjY2VzczsKCiAgICAjIGZpbmQgaWQgb2YgbmV3IGl0ZW0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gY29uZmlnaXRlbSBXSEVSRSAnCiAgICAgICAgICAgIC4gJ2NvbmZpZ2l0ZW1fbnVtYmVyID0gPyBBTkQgY2xhc3NfaWQgPSA/IE9SREVSIEJZIGlkIERFU0MnLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOdW1iZXJ9LCBcJFBhcmFte0NsYXNzSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ29uZmlnSXRlbUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ29uZmlnSXRlbUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIHRyaWdnZXIgQ29uZmlnSXRlbUNyZWF0ZQogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRDb25maWdJdGVtSUQgLiAnJSUnIC4gJFBhcmFte051bWJlcn0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkQ29uZmlnSXRlbUlEOwp9Cgo9aGVhZDIgQ29uZmlnSXRlbURlbGV0ZSgpCgpkZWxldGUgYW4gZXhpc3RpbmcgY29uZmlnIGl0ZW0KCiAgICBteSAkVHJ1ZSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENvbmZpZ0l0ZW1EZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZmlnSXRlbUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyByZW1lbWJlciBjb25maWcgaXRlbSBkYXRhIGJlZm9yZSBkZWxldGUKICAgIG15ICRDb25maWdJdGVtRGF0YSA9ICRTZWxmLT5Db25maWdJdGVtR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICk7CgogICAgIyBkZWxldGUgYWxsIGxpbmtzIHRvIHRoaXMgY29uZmlnIGl0ZW0gZmlyc3QsIGJlZm9yZSBkZWxldGluZyB0aGUgdmVyc2lvbnMKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0RlbGV0ZUFsbCgKICAgICAgICBPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBLZXkgICAgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGRlbGV0ZSBleGlzdGluZyB2ZXJzaW9ucwogICAgJFNlbGYtPlZlcnNpb25EZWxldGUoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgYSBsaXN0IG9mIGFsbCBhdHRhY2htZW50cwogICAgbXkgQEV4aXN0aW5nQXR0YWNobWVudHMgPSAkU2VsZi0+Q29uZmlnSXRlbUF0dGFjaG1lbnRMaXN0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICk7CgogICAgIyBkZWxldGUgYWxsIGF0dGFjaG1lbnRzIG9mIHRoaXMgY29uZmlnIGl0ZW0KICAgIEZJTEVOQU1FOgogICAgZm9yIG15ICRGaWxlbmFtZSAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKCiAgICAgICAgIyBkZWxldGUgdGhlIGF0dGFjaG1lbnQKICAgICAgICBteSAkRGVsZXRpb25TdWNjZXNzID0gJFNlbGYtPkNvbmZpZ0l0ZW1BdHRhY2htZW50RGVsZXRlKAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIEZpbGVuYW1lICAgICA9PiAkRmlsZW5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkRGVsZXRpb25TdWNjZXNzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5rbm93biBwcm9ibGVtIHdoZW4gZGVsZXRpbmcgYXR0YWNobWVudCAkRmlsZW5hbWUgb2YgQ29uZmlnSXRlbSAiCiAgICAgICAgICAgICAgICAgICAgLiAiJFBhcmFte0NvbmZpZ0l0ZW1JRH0uIFBsZWFzZSBjaGVjayB0aGUgVmlydHVhbEZTIGJhY2tlbmQgZm9yIHN0YWxlICIKICAgICAgICAgICAgICAgICAgICAuICJmaWxlcyEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyaWdnZXIgQ29uZmlnSXRlbURlbGV0ZSBldmVudAogICAgIyB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgZGVsZXRpbmcgdGhlIGNvbmZpZyBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLAogICAgIyBiZWNhdXNlIG9mIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpbiB0aGUgY29uZmlnaXRlbV9oaXN0b3J5IHRhYmxlCiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDb25maWdJdGVtRGVsZXRlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBOdW1iZXIgICAgICAgPT4gJENvbmZpZ0l0ZW1EYXRhLT57TnVtYmVyfSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICRDb25maWdJdGVtRGF0YS0+e0NsYXNzfSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgY29uZmlnIGl0ZW0KICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNvbmZpZ2l0ZW0gV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDb25maWdJdGVtSUR9IF0sCiAgICApOwoKICAgICMgZGVsZXRlIHRoZSBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0NvbmZpZ0l0ZW1HZXQ6OkNvbmZpZ0l0ZW1JRDo6JyAuICRQYXJhbXtDb25maWdJdGVtSUR9OwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgcmV0dXJuICRTdWNjZXNzOwp9Cgo9aGVhZDIgQ29uZmlnSXRlbUF0dGFjaG1lbnRBZGQoKQoKYWRkcyBhbiBhdHRhY2htZW50IHRvIGEgY29uZmlnIGl0ZW0KCiAgICBteSAkU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudEFkZCgKICAgICAgICBDb25maWdJdGVtSUQgICAgPT4gMSwKICAgICAgICBGaWxlbmFtZSAgICAgICAgPT4gJ2ZpbGVuYW1lJywKICAgICAgICBDb250ZW50ICAgICAgICAgPT4gJ2NvbnRlbnQnLAogICAgICAgIENvbnRlbnRUeXBlICAgICA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENvbmZpZ0l0ZW1BdHRhY2htZW50QWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtSUQgRmlsZW5hbWUgQ29udGVudCBDb250ZW50VHlwZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgd3JpdGUgdG8gdmlydHVhbCBmcwogICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmlydHVhbEZTJyktPldyaXRlKAogICAgICAgIEZpbGVuYW1lICAgID0+ICJDb25maWdJdGVtLyRQYXJhbXtDb25maWdJdGVtSUR9LyRQYXJhbXtGaWxlbmFtZX0iLAogICAgICAgIE1vZGUgICAgICAgID0+ICdiaW5hcnknLAogICAgICAgIENvbnRlbnQgICAgID0+IFwkUGFyYW17Q29udGVudH0sCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBDb250ZW50SUQgICAgPT4gJFBhcmFte0NvbnRlbnRJRH0sCiAgICAgICAgICAgIENvbnRlbnRUeXBlICA9PiAkUGFyYW17Q29udGVudFR5cGV9LAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBlcnJvcgogICAgaWYgKCRTdWNjZXNzKSB7CgogICAgICAgICMgdHJpZ2dlciBBdHRhY2htZW50QWRkLUV2ZW50CiAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgRXZlbnQgPT4gJ0F0dGFjaG1lbnRBZGRQb3N0JywKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgPT4gJ0F0dGFjaG1lbnRBZGQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGFkZCBhdHRhY2htZW50IGZvciBjb25maWcgaXRlbSAkUGFyYW17Q29uZmlnSXRlbUlEfSIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29uZmlnSXRlbUF0dGFjaG1lbnREZWxldGUoKQoKRGVsZXRlIHRoZSBnaXZlbiBmaWxlIGZyb20gdGhlIHZpcnR1YWwgZmlsZXN5c3RlbS4KCiAgICBteSAkU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudERlbGV0ZSgKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLCAgICAgICAgICAgICAgICMgdXNlZCBpbiBldmVudCBoYW5kbGluZywgZS5nLiBmb3IgbG9nZ2luZyB0aGUgaGlzdG9yeQogICAgICAgIEZpbGVuYW1lICAgICA9PiAnUHJvamVjdHBsYW4ucGRmJywgIyBpZGVudGlmaWVzIHRoZSBhdHRhY2htZW50ICh0b2dldGhlciB3aXRoIHRoZSBDb25maWdJdGVtSUQpCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENvbmZpZ0l0ZW1BdHRhY2htZW50RGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtSUQgRmlsZW5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBwcmVmaXgKICAgIG15ICRGaWxlbmFtZSA9ICdDb25maWdJdGVtLycgLiAkUGFyYW17Q29uZmlnSXRlbUlEfSAuICcvJyAuICRQYXJhbXtGaWxlbmFtZX07CgogICAgIyBkZWxldGUgZmlsZQogICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmlydHVhbEZTJyktPkRlbGV0ZSgKICAgICAgICBGaWxlbmFtZSA9PiAkRmlsZW5hbWUsCiAgICApOwoKICAgICMgY2hlY2sgZm9yIGVycm9yCiAgICBpZiAoJFN1Y2Nlc3MpIHsKCiAgICAgICAgIyB0cmlnZ2VyIEF0dGFjaG1lbnREZWxldGVQb3N0LUV2ZW50CiAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgRXZlbnQgPT4gJ0F0dGFjaG1lbnREZWxldGVQb3N0JywKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgPT4gJ0F0dGFjaG1lbnREZWxldGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGRlbGV0ZSBhdHRhY2htZW50ICRGaWxlbmFtZSEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gJFN1Y2Nlc3M7Cn0KCj1oZWFkMiBDb25maWdJdGVtQXR0YWNobWVudEdldCgpCgpUaGlzIG1ldGhvZCByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSBzcGVjaWZpYyBhdHRhY2htZW50LgoKICAgIG15ICRBdHRhY2htZW50ID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50R2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiA0LAogICAgICAgIEZpbGVuYW1lICAgICA9PiAndGVzdC50eHQnLAogICAgKTsKCnJldHVybnMKCiAgICB7CiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBBbGxQcmVmZXJlbmNlcyA9PiAndGVzdCcsCiAgICAgICAgfSwKICAgICAgICBGaWxlbmFtZSAgICA9PiAndGVzdC50eHQnLAogICAgICAgIENvbnRlbnQgICAgID0+ICdjb250ZW50JywKICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgRmlsZXNpemUgICAgPT4gMTIzNDg0MDksCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2F0dGFjaG1lbnQnLAogICAgfQoKPWN1dAoKc3ViIENvbmZpZ0l0ZW1BdHRhY2htZW50R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENvbmZpZ0l0ZW1JRCBGaWxlbmFtZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBhZGQgcHJlZml4CiAgICBteSAkRmlsZW5hbWUgPSAnQ29uZmlnSXRlbS8nIC4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0gLiAnLycgLiAkUGFyYW17RmlsZW5hbWV9OwoKICAgICMgZmluZCBhbGwgYXR0YWNobWVudHMgb2YgdGhpcyBjb25maWcgaXRlbQogICAgbXkgQEF0dGFjaG1lbnRzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZpcnR1YWxGUycpLT5GaW5kKAogICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIHJldHVybiBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGV4aXN0CiAgICBpZiAoICFAQXR0YWNobWVudHMgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIGF0dGFjaG1lbnQgKCRGaWxlbmFtZSkhIiwKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhIGZvciBhdHRhY2htZW50CiAgICBteSAlQXR0YWNobWVudERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmlydHVhbEZTJyktPlJlYWQoCiAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgICAgIE1vZGUgICAgID0+ICdiaW5hcnknLAogICAgKTsKCiAgICBteSAkQXR0YWNobWVudEluZm8gPSB7CiAgICAgICAgJUF0dGFjaG1lbnREYXRhLAogICAgICAgIEZpbGVuYW1lICAgID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgQ29udGVudCAgICAgPT4gJHsgJEF0dGFjaG1lbnREYXRhe0NvbnRlbnR9IH0sCiAgICAgICAgQ29udGVudFR5cGUgPT4gJEF0dGFjaG1lbnREYXRhe1ByZWZlcmVuY2VzfS0+e0NvbnRlbnRUeXBlfSwKICAgICAgICBUeXBlICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgRmlsZXNpemUgICAgPT4gJEF0dGFjaG1lbnREYXRhe1ByZWZlcmVuY2VzfS0+e0ZpbGVzaXplUmF3fSwKICAgIH07CgogICAgcmV0dXJuICRBdHRhY2htZW50SW5mbzsKfQoKPWhlYWQyIENvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgpCgpSZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIGF0dGFjaG1lbnRzIG9mIHRoZSBnaXZlbiBjb25maWcgaXRlbS4KCiAgICBteSBAQXR0YWNobWVudHMgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUF0dGFjaG1lbnRMaXN0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICApOwoKcmV0dXJucwoKICAgIEBBdHRhY2htZW50cyA9ICgKICAgICAgICAnZmlsZW5hbWUudHh0JywKICAgICAgICAnb3RoZXJfZmlsZS5wZGYnLAogICAgKTsKCj1jdXQKCnN1YiBDb25maWdJdGVtQXR0YWNobWVudExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbmZpZ0l0ZW1JRCEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGZpbmQgYWxsIGF0dGFjaG1lbnRzIG9mIHRoaXMgY29uZmlnIGl0ZW0KICAgIG15IEBBdHRhY2htZW50cyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWaXJ0dWFsRlMnKS0+RmluZCgKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICB9LAogICAgKTsKCiAgICBmb3IgbXkgJEZpbGVuYW1lIChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgIyByZW1vdmUgZXh0cmEgaW5mb3JtYXRpb24gZnJvbSBmaWxlbmFtZQogICAgICAgICRGaWxlbmFtZSA9fiBzeyBcQSBDb25maWdJdGVtIC8gXGQrIC8gfXt9eG1zOwogICAgfQoKICAgIHJldHVybiBAQXR0YWNobWVudHM7Cn0KCj1oZWFkMiBDb25maWdJdGVtQXR0YWNobWVudEV4aXN0cygpCgpDaGVja3MgaWYgYSBmaWxlIHdpdGggYSBnaXZlbiBmaWxlbmFtZSBleGlzdHMuCgogICAgbXkgJEV4aXN0cyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudEV4aXN0cygKICAgICAgICBGaWxlbmFtZSA9PiAndGVzdC50eHQnLAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbUF0dGFjaG1lbnRFeGlzdHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZpbGVuYW1lIENvbmZpZ0l0ZW1JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZpcnR1YWxGUycpLT5GaW5kKAogICAgICAgIEZpbGVuYW1lID0+ICdDb25maWdJdGVtLycgLiAkUGFyYW17Q29uZmlnSXRlbUlEfSAuICcvJyAuICRQYXJhbXtGaWxlbmFtZX0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkKCnJldHVybiBhIGNvbmZpZyBpdGVtIGxpc3QgYXMgYW4gYXJyYXkgcmVmZXJlbmNlCgogICAgbXkgJENvbmZpZ0l0ZW1JRHMgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKAogICAgICAgIE51bWJlciAgICAgICA9PiAnVGhlIENvbmZpZ0l0ZW0gTnVtYmVyJywgICMgKG9wdGlvbmFsKQogICAgICAgIE5hbWUgICAgICAgICA9PiAnVGhlIE5hbWUnLCAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENsYXNzSURzICAgICA9PiBbOSwgOCwgNywgNl0sICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIERlcGxTdGF0ZUlEcyA9PiBbMSwgMiwgMywgNF0sICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEluY2lTdGF0ZUlEcyA9PiBbMSwgMiwgMywgNF0sICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIGNvbmZpZyBpdGVtcyB3aXRoIGNyZWF0ZWQgdGltZSBhZnRlciAuLi4KICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAjIChvcHRpb25hbCkKICAgICAgICAjIGNvbmZpZyBpdGVtcyB3aXRoIGNyZWF0ZWQgdGltZSBiZWZvcmUgdGhlbiAuLi4uCiAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJzIwMDYtMDEtMTkgMjM6NTk6NTknLCAgIyAob3B0aW9uYWwpCgogICAgICAgICMgY29uZmlnIGl0ZW1zIHdpdGggY2hhbmdlZCB0aW1lIGFmdGVyIC4uLgogICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICcyMDA2LTAxLTA5IDAwOjAwOjAxJywgICMgKG9wdGlvbmFsKQogICAgICAgICMgY29uZmlnIGl0ZW1zIHdpdGggY2hhbmdlZCB0aW1lIGJlZm9yZSB0aGVuIC4uLi4KICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZSA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAjIChvcHRpb25hbCkKCiAgICAgICAgV2hhdCA9PiBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgICMgZWFjaCBhcnJheSBlbGVtZW50IGlzIGEgYW5kIGNvbmRpdGlvbgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIG9yIGNvbmRpdGlvbiBpbiBoYXNoCiAgICAgICAgICAgICAgICAiWyVdeydFbGVtZW50QSd9WyVdeydFbGVtZW50Qid9WyVdeydDb250ZW50J30iID0+ICclY29udGVudEElJywKICAgICAgICAgICAgICAgICJbJV17J0VsZW1lbnRBJ31bJV17J0VsZW1lbnRDJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QSUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiWyVdeydFbGVtZW50QSd9WyVdeydFbGVtZW50Qid9WyVdeydDb250ZW50J30iID0+ICclY29udGVudEIlJywKICAgICAgICAgICAgICAgICJbJV17J0VsZW1lbnRBJ31bJV17J0VsZW1lbnRDJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QiUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIHVzZSBhcnJheSByZWZlcmVuY2UgaWYgZGlmZmVyZW50IGNvbnRlbnQgd2l0aCBzYW1lIGtleSB3YXMgc2VhcmNoZWQKICAgICAgICAgICAgICAgICJbJV17J0VsZW1lbnRBJ31bJV17J0VsZW1lbnRCJ31bJV17J0NvbnRlbnQnfSIgPT4gWyclY29udGVudEMlJywgJyVjb250ZW50RCUnLCAnJWNvbnRlbnRFJSddLAogICAgICAgICAgICAgICAgIlslXXsnRWxlbWVudEEnfVslXXsnRWxlbWVudEMnfVslXXsnQ29udGVudCd9IiA9PiBbJyVjb250ZW50QyUnLCAnJWNvbnRlbnREJScsICclY29udGVudEUlJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKCiAgICAgICAgUHJldmlvdXNWZXJzaW9uU2VhcmNoID0+IDEsICAjIChvcHRpb25hbCkgZGVmYXVsdCAwICgwfDEpCgogICAgICAgIE9yZGVyQnkgPT4gWyAnQ29uZmlnSXRlbUlEJywgJ051bWJlcicgXSwgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGRlZmF1bHQ6IFsgJ0NvbmZpZ0l0ZW1JRCcgXQogICAgICAgICMgKENvbmZpZ0l0ZW1JRCwgTnVtYmVyLCBOYW1lLCBDbGFzc0lELCBEZXBsU3RhdGVJRCwgSW5jaVN0YXRlSUQsCiAgICAgICAgIyBDcmVhdGVUaW1lLCBDcmVhdGVCeSwgQ2hhbmdlVGltZSwgQ2hhbmdlQnkpCgogICAgICAgICMgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgT3JkZXJCeToKICAgICAgICAjIFRoZSBPcmRlckJ5RGlyZWN0aW9uIGNhbiBiZSBzcGVjaWZpZWQgZm9yIGVhY2ggT3JkZXJCeSBhdHRyaWJ1dGUuCiAgICAgICAgIyBUaGUgcGFpcmluZyBpcyBtYWRlIGJ5IHRoZSBhcnJheSBpbmRpY2VzLgoKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsgJ0Rvd24nLCAnVXAnIF0sICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGRlZmF1bHQ6IFsgJ0Rvd24nIF0KICAgICAgICAjIChEb3duIHwgVXApCgogICAgICAgIExpbWl0ICAgICAgICAgID0+IDEyMiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDAsICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgbGltaXQKICAgIG15ICRMaW1pdCA9ICRQYXJhbXtMaW1pdH07CiAgICAkUGFyYW17TGltaXR9ID0gdW5kZWY7CgogICAgIyBjb25maWcgaXRlbSBzZWFyY2ggaXMgcmVxdWlyZWQgaWYgb25lIG9mIHRoZXNlIHBhcmFtcyBpcyBnaXZlbgogICAgbXkgQENvbmZpZ0l0ZW1TZWFyY2hQYXJhbXMgPSAoCiAgICAgICAgJ0NvbmZpZ0l0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlJywKICAgICAgICAnQ29uZmlnSXRlbUNyZWF0ZVRpbWVPbGRlckRhdGUnLAogICAgICAgICdDb25maWdJdGVtQ2hhbmdlVGltZU5ld2VyRGF0ZScsCiAgICAgICAgJ0NvbmZpZ0l0ZW1DaGFuZ2VUaW1lT2xkZXJEYXRlJywKICAgICk7CgogICAgIyBjaGVjaywgaWYgY29uZmlnIGl0ZW0gc2VhcmNoIGlzIHJlcXVpcmVkCiAgICBteSAlUmVxdWlyZWRTZWFyY2g7CiAgICBDT05GSUdJVEVNUEFSQU06CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1QYXJhbSAoQENvbmZpZ0l0ZW1TZWFyY2hQYXJhbXMpIHsKICAgICAgICBuZXh0IENPTkZJR0lURU1QQVJBTSBpZiAhJFBhcmFteyRDb25maWdJdGVtUGFyYW19OwoKICAgICAgICAkUmVxdWlyZWRTZWFyY2h7Q29uZmlnSXRlbX0gPSAxOwogICAgICAgIGxhc3QgQ09ORklHSVRFTVBBUkFNOwogICAgfQoKICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgY29uZmlnIGl0ZW0gbnVtYmVyCiAgICAjIG51bWJlciAwIGlzIGFsbG93ZWQgYnV0IG5vdCB0aGUgZW1wdHkgc3RyaW5nCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte051bWJlcn0gJiYgJFBhcmFte051bWJlcn0gbmUgJycgKSB7CiAgICAgICAgJFJlcXVpcmVkU2VhcmNoe0NvbmZpZ0l0ZW19ID0gMTsKICAgIH0KCiAgICAjIHZlcnNpb24gc2VhcmNoIGlzIHJlcXVpcmVkIGlmIE5hbWUsIFdoYXQgb3IgUHJldmlvdXNWZXJzaW9uU2VhcmNoIGlzIGdpdmVuCiAgICBpZiAoCiAgICAgICAgSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte05hbWV9ICkKICAgICAgICB8fCBJc0FycmF5UmVmV2l0aERhdGEoICRQYXJhbXtXaGF0fSApCiAgICAgICAgfHwgJFBhcmFte1ByZXZpb3VzVmVyc2lvblNlYXJjaH0KICAgICAgICApCiAgICB7CiAgICAgICAgJFJlcXVpcmVkU2VhcmNoe1ZlcnNpb259ID0gMTsKICAgIH0KCiAgICAjIHZlcnNpb24gc2VhcmNoIGlzIGFsc28gcmVxdWlyZWQgaWYgc29ydGluZyBieSBuYW1lIChmaXggZm9yIGJ1ZyAjNzA3MikKICAgIE9SREVSQlk6CiAgICBmb3IgbXkgJE9yZGVyQnkgKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApIHsKICAgICAgICBpZiAoICRPcmRlckJ5IGVxICdOYW1lJyApIHsKICAgICAgICAgICAgJFJlcXVpcmVkU2VhcmNoe1ZlcnNpb259ID0gMTsKICAgICAgICAgICAgbGFzdCBPUkRFUkJZOwogICAgICAgIH0KICAgIH0KCiAgICAjIHhtbCB2ZXJzaW9uIHNlYXJjaCBpcyByZXF1aXJlZCBpZiBXaGF0IGlzIGdpdmVuCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte1doYXR9ICkgKSB7CiAgICAgICAgJFJlcXVpcmVkU2VhcmNoe1hNTFZlcnNpb259ID0gMTsKICAgIH0KCiAgICAjIHVzZSBjb25maWcgaXRlbSBzZWFyY2ggYXMgZmFsbGJhY2sKICAgIGlmICggISVSZXF1aXJlZFNlYXJjaCApIHsKICAgICAgICAkUmVxdWlyZWRTZWFyY2h7Q29uZmlnSXRlbX0gPSAxOwogICAgfQoKICAgICMgc3RhcnQgY29uZmlnIGl0ZW0gc2VhcmNoCiAgICBteSAlQ29uZmlnSXRlbUxpc3RzOwogICAgaWYgKCAkUmVxdWlyZWRTZWFyY2h7Q29uZmlnSXRlbX0gKSB7CgogICAgICAgICMgc2VhcmNoIGNvbmZpZyBpdGVtcwogICAgICAgICRDb25maWdJdGVtTGlzdHN7Q29uZmlnSXRlbX0gPSAkU2VsZi0+Q29uZmlnSXRlbVNlYXJjaCglUGFyYW0pOwoKICAgICAgICByZXR1cm4gICAgaWYgISRDb25maWdJdGVtTGlzdHN7Q29uZmlnSXRlbX07CiAgICAgICAgcmV0dXJuICAgIGlmIHJlZiAkQ29uZmlnSXRlbUxpc3Rze0NvbmZpZ0l0ZW19IG5lICdBUlJBWSc7CiAgICAgICAgcmV0dXJuIFtdIGlmICFAeyAkQ29uZmlnSXRlbUxpc3Rze0NvbmZpZ0l0ZW19IH07CiAgICB9CgogICAgIyBzdGFydCB2ZXJzaW9uIHNlYXJjaAogICAgaWYgKCAkUmVxdWlyZWRTZWFyY2h7VmVyc2lvbn0gKSB7CgogICAgICAgICMgc2VhcmNoIHZlcnNpb25zCiAgICAgICAgJENvbmZpZ0l0ZW1MaXN0c3tWZXJzaW9ufSA9ICRTZWxmLT5WZXJzaW9uU2VhcmNoKCVQYXJhbSk7CgogICAgICAgIHJldHVybiAgICBpZiAhJENvbmZpZ0l0ZW1MaXN0c3tWZXJzaW9ufTsKICAgICAgICByZXR1cm4gICAgaWYgcmVmICRDb25maWdJdGVtTGlzdHN7VmVyc2lvbn0gbmUgJ0FSUkFZJzsKICAgICAgICByZXR1cm4gW10gaWYgIUB7ICRDb25maWdJdGVtTGlzdHN7VmVyc2lvbn0gfTsKICAgIH0KCiAgICAjIHN0YXJ0IHhtbCB2ZXJzaW9uIHNlYXJjaAogICAgaWYgKCAkUmVxdWlyZWRTZWFyY2h7WE1MVmVyc2lvbn0gKSB7CgogICAgICAgICMgc2VhcmNoIHhtbCB2ZXJzaW9ucwogICAgICAgIG15ICRYTUxWZXJzaW9uTGlzdCA9ICRTZWxmLT5fWE1MVmVyc2lvblNlYXJjaCglUGFyYW0pOwoKICAgICAgICByZXR1cm4gICAgaWYgISRYTUxWZXJzaW9uTGlzdDsKICAgICAgICByZXR1cm4gICAgaWYgcmVmICRYTUxWZXJzaW9uTGlzdCBuZSAnSEFTSCc7CiAgICAgICAgcmV0dXJuIFtdIGlmICEleyRYTUxWZXJzaW9uTGlzdH07CgogICAgICAgICMgZ2V0IGNvbmZpZyBpdGVtIGlkcwogICAgICAgIG15ICVDb25maWdJdGVtTGlzdFRtcDsKICAgICAgICBWRVJTSU9OSUQ6CiAgICAgICAgZm9yIG15ICRWZXJzaW9uSUQgKCBzb3J0IGtleXMgJXskWE1MVmVyc2lvbkxpc3R9ICkgewogICAgICAgICAgICBteSAkQ29uZmlnSXRlbUlEID0gJFNlbGYtPlZlcnNpb25Db25maWdJdGVtSURHZXQoCiAgICAgICAgICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb25JRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgVkVSU0lPTklEIGlmICEkQ29uZmlnSXRlbUlEOwoKICAgICAgICAgICAgJENvbmZpZ0l0ZW1MaXN0VG1weyRDb25maWdJdGVtSUR9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgYWRkIGlkcyB0byBjb25maWcgaXRlbSBsaXN0CiAgICAgICAgJENvbmZpZ0l0ZW1MaXN0c3tYTUxWZXJzaW9ufSA9IFwlQ29uZmlnSXRlbUxpc3RUbXA7CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIHJlc3VsdCBsaXN0CiAgICBteSBAUmVzdWx0TGlzdDsKICAgIGlmICggJFJlcXVpcmVkU2VhcmNoe0NvbmZpZ0l0ZW19ICYmICRSZXF1aXJlZFNlYXJjaHtWZXJzaW9ufSApIHsKCiAgICAgICAgIyBidWlsZCBhIGxvb2t1cCBoYXNoIG9mIGFsbCBmb3VuZCBjb25maWdpdGVtIGlkcyBpbiAkQ29uZmlnSXRlbUxpc3Rze0NvbmZpZ0l0ZW19CiAgICAgICAgbXkgJUNvbmZpZ0l0ZW1TZWVuID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRDb25maWdJdGVtTGlzdHN7Q29uZmlnSXRlbX0gfTsKCiAgICAgICAgIyBjaGVjayBhbGwgY29uZmlnIGl0ZW0gaWRzLCB3ZSBuZWVkIHRvIGtlZXAgdGhlIHNvcnRpbmcKICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBAeyAkQ29uZmlnSXRlbUxpc3Rze1ZlcnNpb259IH0gKSB7CiAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICEkQ29uZmlnSXRlbVNlZW57JENvbmZpZ0l0ZW1JRH07CiAgICAgICAgICAgIHB1c2ggQFJlc3VsdExpc3QsICRDb25maWdJdGVtSUQ7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUmVxdWlyZWRTZWFyY2h7Q29uZmlnSXRlbX0gKSB7CiAgICAgICAgQFJlc3VsdExpc3QgPSBAeyAkQ29uZmlnSXRlbUxpc3Rze0NvbmZpZ0l0ZW19IH07CiAgICB9CiAgICBlbHNpZiAoICRSZXF1aXJlZFNlYXJjaHtWZXJzaW9ufSApIHsKICAgICAgICBAUmVzdWx0TGlzdCA9IEB7ICRDb25maWdJdGVtTGlzdHN7VmVyc2lvbn0gfTsKICAgIH0KCiAgICAjIGNvbnNpZGVyIHRoZSBYTUwgcmVzdWx0CiAgICBpZiAoICRSZXF1aXJlZFNlYXJjaHtYTUxWZXJzaW9ufSApIHsKICAgICAgICBAUmVzdWx0TGlzdCA9IGdyZXAgeyAkQ29uZmlnSXRlbUxpc3Rze1hNTFZlcnNpb259LT57JF99IH0gQFJlc3VsdExpc3Q7CiAgICB9CgogICAgIyBjb25zaWRlciBsaW1pdAogICAgaWYgKCAkTGltaXQgJiYgJExpbWl0IDwgc2NhbGFyIEBSZXN1bHRMaXN0ICkgewoKICAgICAgICAjIGV4dHJhY3QgdGhlIGxpbWl0ZWQgaWRzCiAgICAgICAgJExpbWl0LS07CiAgICAgICAgQFJlc3VsdExpc3QgPSBAUmVzdWx0TGlzdFsgMCAuLiAkTGltaXQgXTsKICAgIH0KCiAgICByZXR1cm4gXEBSZXN1bHRMaXN0Owp9Cgo9aGVhZDIgQ29uZmlnSXRlbVNlYXJjaCgpCgpyZXR1cm4gYSBjb25maWcgaXRlbSBsaXN0IGFzIGFuIGFycmF5IHJlZmVyZW5jZQoKICAgIG15ICRDb25maWdJdGVtSURzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1TZWFyY2goCiAgICAgICAgTnVtYmVyICAgICAgID0+ICdUaGUgQ29uZmlnSXRlbSBOdW1iZXInLCAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2xhc3NJRHMgICAgID0+IFs5LCA4LCA3LCA2XSwgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRGVwbFN0YXRlSURzID0+IFsxLCAyLCAzLCA0XSwgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSW5jaVN0YXRlSURzID0+IFsxLCAyLCAzLCA0XSwgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ3JlYXRlQnkgICAgID0+IFsxLCAyLCAzXSwgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2hhbmdlQnkgICAgID0+IFszLCAyLCAxXSwgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICMgY29uZmlnIGl0ZW1zIHdpdGggY3JlYXRlZCB0aW1lIGFmdGVyIC4uLgogICAgICAgIENvbmZpZ0l0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICcyMDA2LTAxLTA5IDAwOjAwOjAxJywgICMgKG9wdGlvbmFsKQogICAgICAgICMgY29uZmlnIGl0ZW1zIHdpdGggY3JlYXRlZCB0aW1lIGJlZm9yZSB0aGVuIC4uLi4KICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBjb25maWcgaXRlbXMgd2l0aCBjaGFuZ2VkIHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgQ29uZmlnSXRlbUNoYW5nZVRpbWVOZXdlckRhdGUgPT4gJzIwMDYtMDEtMDkgMDA6MDA6MDEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBjb25maWcgaXRlbXMgd2l0aCBjaGFuZ2VkIHRpbWUgYmVmb3JlIHRoZW4gLi4uLgogICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICcyMDA2LTAxLTE5IDIzOjU5OjU5JywgICMgKG9wdGlvbmFsKQoKICAgICAgICBPcmRlckJ5ID0+IFsgJ0NvbmZpZ0l0ZW1JRCcsICdOdW1iZXInIF0sICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBbICdDb25maWdJdGVtSUQnIF0KICAgICAgICAjIChDb25maWdJdGVtSUQsIE51bWJlciwgQ2xhc3NJRCwgRGVwbFN0YXRlSUQsIEluY2lTdGF0ZUlELAogICAgICAgICMgQ3JlYXRlVGltZSwgQ3JlYXRlQnksIENoYW5nZVRpbWUsIENoYW5nZUJ5KQoKICAgICAgICAjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIE9yZGVyQnk6CiAgICAgICAgIyBUaGUgT3JkZXJCeURpcmVjdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGZvciBlYWNoIE9yZGVyQnkgYXR0cmlidXRlLgogICAgICAgICMgVGhlIHBhaXJpbmcgaXMgbWFkZSBieSB0aGUgYXJyYXkgaW5kaWNlcy4KCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbICdEb3duJywgJ1VwJyBdLCAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBbICdEb3duJyBdCiAgICAgICAgIyAoRG93biB8IFVwKQoKICAgICAgICBMaW1pdCAgICAgICAgICA9PiAxMjIsICAjIChvcHRpb25hbCkKICAgICAgICBVc2luZ1dpbGRjYXJkcyA9PiAwLCAgICAjIChvcHRpb25hbCkgZGVmYXVsdCAxCiAgICApOwoKPWN1dAoKc3ViIENvbmZpZ0l0ZW1TZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHZlcmlmeSB0aGF0IGFsbCBwYXNzZWQgYXJyYXkgcGFyYW1ldGVycyBjb250YWluIGFuIGFycmF5cmVmCiAgICBBUkdVTUVOVDoKICAgIGZvciBteSAkQXJndW1lbnQgKAogICAgICAgIHF3KAogICAgICAgIE9yZGVyQnkKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uCiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gW107CgogICAgICAgICAgICBuZXh0IEFSR1VNRU5UOwogICAgICAgIH0KCiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVmaW5lIG9yZGVyIHRhYmxlCiAgICBteSAlT3JkZXJCeVRhYmxlID0gKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAnaWQnLAogICAgICAgIE51bWJlciAgICAgICA9PiAnY29uZmlnaXRlbV9udW1iZXInLAogICAgICAgIENsYXNzSUQgICAgICA9PiAnY2xhc3NfaWQnLAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAnY3VyX2RlcGxfc3RhdGVfaWQnLAogICAgICAgIEluY2lTdGF0ZUlEICA9PiAnY3VyX2luY2lfc3RhdGVfaWQnLAogICAgICAgIENyZWF0ZVRpbWUgICA9PiAnY3JlYXRlX3RpbWUnLAogICAgICAgIENyZWF0ZUJ5ICAgICA9PiAnY3JlYXRlX2J5JywKICAgICAgICBDaGFuZ2VUaW1lICAgPT4gJ2NoYW5nZV90aW1lJywKICAgICAgICBDaGFuZ2VCeSAgICAgPT4gJ2NoYW5nZV9ieScsCiAgICApOwoKICAgICMgY2hlY2sgaWYgT3JkZXJCeSBjb250YWlucyBvbmx5IHVuaXF1ZSB2YWxpZCB2YWx1ZXMKICAgIG15ICVPcmRlckJ5U2VlbjsKICAgIE9SREVSQlk6CiAgICBmb3IgbXkgJE9yZGVyQnkgKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApIHsKCiAgICAgICAgbmV4dCBPUkRFUkJZIGlmICRPcmRlckJ5IGVxICdOYW1lJzsKCiAgICAgICAgaWYgKCAhJE9yZGVyQnkgfHwgISRPcmRlckJ5VGFibGV7JE9yZGVyQnl9IHx8ICRPcmRlckJ5U2VlbnskT3JkZXJCeX0gKSB7CgogICAgICAgICAgICAjIGZvdW5kIGFuIGVycm9yCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPcmRlckJ5IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJyRPcmRlckJ5JyAiCiAgICAgICAgICAgICAgICAgICAgLiAnb3IgdGhlIHZhbHVlIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UhJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyByZW1lbWJlciB0aGUgdmFsdWUgdG8gY2hlY2sgaWYgaXQgYXBwZWFycyBtb3JlIHRoYW4gb25jZQogICAgICAgICRPcmRlckJ5U2VlbnskT3JkZXJCeX0gPSAxOwogICAgfQoKICAgICMgY2hlY2sgaWYgT3JkZXJCeURpcmVjdGlvbiBhcnJheSBjb250YWlucyBvbmx5ICdVcCcgb3IgJ0Rvd24nCiAgICBESVJFQ1RJT046CiAgICBmb3IgbXkgJERpcmVjdGlvbiAoIEB7ICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAjIG9ubHkgJ1VwJyBvciAnRG93bicgYWxsb3dlZAogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ1VwJzsKICAgICAgICBuZXh0IERJUkVDVElPTiBpZiAkRGlyZWN0aW9uIGVxICdEb3duJzsKCiAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeURpcmVjdGlvbiBjYW4gb25seSBjb250YWluICdVcCcgb3IgJ0Rvd24nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1VzaW5nV2lsZGNhcmRzfSApIHsKICAgICAgICAkUGFyYW17VXNpbmdXaWxkY2FyZHN9ID0gMTsKICAgIH0KCiAgICAjIGdldCBsaWtlIGVzY2FwZSBzdHJpbmcgbmVlZGVkIGZvciBzb21lIGRhdGFiYXNlcyAoZS5nLiBvcmFjbGUpCiAgICBteSAkTGlrZUVzY2FwZVN0cmluZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5HZXREYXRhYmFzZUZ1bmN0aW9uKCdMaWtlRXNjYXBlU3RyaW5nJyk7CgogICAgIyBhc3NlbWJsZSB0aGUgT1JERVIgQlkgY2xhdXNlCiAgICBteSBAU1FMT3JkZXJCeTsKICAgIG15ICRDb3VudCA9IDA7CiAgICBPUkRFUkJZOgogICAgZm9yIG15ICRPcmRlckJ5ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CgogICAgICAgIG5leHQgT1JERVJCWSBpZiAkT3JkZXJCeSBlcSAnTmFtZSc7CgogICAgICAgICMgc2V0IHRoZSBkZWZhdWx0IG9yZGVyIGRpcmVjdGlvbgogICAgICAgIG15ICREaXJlY3Rpb24gPSAnREVTQyc7CgogICAgICAgICMgYWRkIHRoZSBnaXZlbiBvcmRlciBkaXJlY3Rpb24KICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gKSB7CiAgICAgICAgICAgIGlmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSBlcSAnVXAnICkgewogICAgICAgICAgICAgICAgJERpcmVjdGlvbiA9ICdBU0MnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSBlcSAnRG93bicgKSB7CiAgICAgICAgICAgICAgICAkRGlyZWN0aW9uID0gJ0RFU0MnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBTUUwKICAgICAgICBwdXNoIEBTUUxPcmRlckJ5LCAiJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gJERpcmVjdGlvbiI7CgogICAgfQogICAgY29udGludWUgewogICAgICAgICRDb3VudCsrOwogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBvcmRlcmluZyBpcyBub3QgZGV0ZXJtaW5lZAogICAgIyB3ZSBhZGQgYW4gYXNjZW5kaW5nIG9yZGVyaW5nIGJ5IGlkCiAgICBpZiAoICFncmVwIHsgJF8gZXEgJ0NvbmZpZ0l0ZW1JRCcgfSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgKSB7CiAgICAgICAgcHVzaCBAU1FMT3JkZXJCeSwgIiRPcmRlckJ5VGFibGV7Q29uZmlnSXRlbUlEfSBBU0MiOwogICAgfQoKICAgICMgYWRkIG51bWJlciB0byBzcWwgd2hlcmUgYXJyYXkKICAgIG15IEBTUUxXaGVyZTsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17TnVtYmVyfSAmJiAkUGFyYW17TnVtYmVyfSBuZSAnJyAmJiByZWYgJFBhcmFte051bWJlcn0gbmUgJ0FSUkFZJyApIHsKCiAgICAgICAgIyBxdW90ZQogICAgICAgICRQYXJhbXtOdW1iZXJ9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCAkUGFyYW17TnVtYmVyfSApOwoKICAgICAgICBpZiAoICRQYXJhbXtVc2luZ1dpbGRjYXJkc30gKSB7CgogICAgICAgICAgICAjIHByZXBhcmUgbGlrZSBzdHJpbmcKICAgICAgICAgICAgJFNlbGYtPl9QcmVwYXJlTGlrZVN0cmluZyggXCRQYXJhbXtOdW1iZXJ9ICk7CgogICAgICAgICAgICBwdXNoIEBTUUxXaGVyZSwKICAgICAgICAgICAgICAgICJMT1dFUihjb25maWdpdGVtX251bWJlcikgTElLRSBMT1dFUignJFBhcmFte051bWJlcn0nKSAkTGlrZUVzY2FwZVN0cmluZyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwdXNoIEBTUUxXaGVyZSwgIkxPV0VSKGNvbmZpZ2l0ZW1fbnVtYmVyKSA9IExPV0VSKCckUGFyYW17TnVtYmVyfScpIjsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoIGRlZmluZWQgJFBhcmFte051bWJlcn0gJiYgJFBhcmFte051bWJlcn0gbmUgJycgJiYgcmVmICRQYXJhbXtOdW1iZXJ9IGVxICdBUlJBWScgKSB7CgogICAgICAgICMgQ3JlYXRlIHN0cmluZy4KICAgICAgICBteSAkSW5TdHJpbmcgPSBqb2luIHF7LCB9LCBAeyAkUGFyYW17TnVtYmVyfSB9OwoKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgIkxPV0VSKGNvbmZpZ2l0ZW1fbnVtYmVyKSBJTiAoJEluU3RyaW5nKSI7CiAgICB9CgogICAgIyBzZXQgYXJyYXkgcGFyYW1zCiAgICBteSAlQXJyYXlQYXJhbXMgPSAoCiAgICAgICAgQ29uZmlnSXRlbUlEcyA9PiAnaWQnLAogICAgICAgIENsYXNzSURzICAgICAgPT4gJ2NsYXNzX2lkJywKICAgICAgICBEZXBsU3RhdGVJRHMgID0+ICdjdXJfZGVwbF9zdGF0ZV9pZCcsCiAgICAgICAgSW5jaVN0YXRlSURzICA9PiAnY3VyX2luY2lfc3RhdGVfaWQnLAogICAgICAgIENyZWF0ZUJ5ICAgICAgPT4gJ2NyZWF0ZV9ieScsCiAgICAgICAgQ2hhbmdlQnkgICAgICA9PiAnY2hhbmdlX2J5JywKICAgICk7CgogICAgQVJSQVlQQVJBTToKICAgIGZvciBteSAkQXJyYXlQYXJhbSAoIHNvcnQga2V5cyAlQXJyYXlQYXJhbXMgKSB7CgogICAgICAgIG5leHQgQVJSQVlQQVJBTSBpZiAhJFBhcmFteyRBcnJheVBhcmFtfTsKCiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcnJheVBhcmFtfSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEFycmF5UGFyYW0gbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBBUlJBWVBBUkFNIGlmICFAeyAkUGFyYW17JEFycmF5UGFyYW19IH07CgogICAgICAgICMgcXVvdGUgYXMgaW50ZWdlcgogICAgICAgIGZvciBteSAkT25lUGFyYW0gKCBAeyAkUGFyYW17JEFycmF5UGFyYW19IH0gKSB7CiAgICAgICAgICAgICRPbmVQYXJhbSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5RdW90ZSggJE9uZVBhcmFtLCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gcXssIH0sIEB7ICRQYXJhbXskQXJyYXlQYXJhbX0gfTsKCiAgICAgICAgbmV4dCBBUlJBWVBBUkFNIGlmICEkSW5TdHJpbmc7CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiJEFycmF5UGFyYW1zeyAkQXJyYXlQYXJhbSB9IElOICgkSW5TdHJpbmcpIjsKICAgIH0KCiAgICAjIHNldCB0aW1lIHBhcmFtcwogICAgbXkgJVRpbWVQYXJhbXMgPSAoCiAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJ2NyZWF0ZV90aW1lID49JywKICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAnY3JlYXRlX3RpbWUgPD0nLAogICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICdjaGFuZ2VfdGltZSA+PScsCiAgICAgICAgQ29uZmlnSXRlbUNoYW5nZVRpbWVPbGRlckRhdGUgPT4gJ2NoYW5nZV90aW1lIDw9JywKICAgICk7CgogICAgVElNRVBBUkFNOgogICAgZm9yIG15ICRUaW1lUGFyYW0gKCBzb3J0IGtleXMgJVRpbWVQYXJhbXMgKSB7CgogICAgICAgIG5leHQgVElNRVBBUkFNIGlmICEkUGFyYW17JFRpbWVQYXJhbX07CgogICAgICAgIGlmICggJFBhcmFteyRUaW1lUGFyYW19ICF+IG17IFxBIFxkXGRcZFxkLVxkXGQtXGRcZCBccyBcZFxkOlxkXGQ6XGRcZCBceiB9eG1zICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiSW52YWxpZCBkYXRlIGZvcm1hdCBmb3VuZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJFBhcmFteyRUaW1lUGFyYW19ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCAkUGFyYW17JFRpbWVQYXJhbX0gKTsKCiAgICAgICAgcHVzaCBAU1FMV2hlcmUsICIkVGltZVBhcmFtc3sgJFRpbWVQYXJhbSB9ICckUGFyYW17ICRUaW1lUGFyYW0gfSciOwogICAgfQoKICAgICMgY3JlYXRlIHdoZXJlIHN0cmluZwogICAgbXkgJFdoZXJlU3RyaW5nID0gQFNRTFdoZXJlID8gJyBXSEVSRSAnIC4gam9pbiBxeyBBTkQgfSwgQFNRTFdoZXJlIDogJyc7CgogICAgIyBzZXQgbGltaXQKICAgIGlmICggJFBhcmFte0xpbWl0fSApIHsKICAgICAgICAkUGFyYW17TGltaXR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCAkUGFyYW17TGltaXR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICBteSAkU1FMID0gIlNFTEVDVCBpZCBGUk9NIGNvbmZpZ2l0ZW0gJFdoZXJlU3RyaW5nICI7CgogICAgIyBhZGQgdGhlIE9SREVSIEJZIGNsYXVzZQogICAgaWYgKEBTUUxPcmRlckJ5KSB7CiAgICAgICAgJFNRTCAuPSAnT1JERVIgQlkgJzsKICAgICAgICAkU1FMIC49IGpvaW4gJywgJywgQFNRTE9yZGVyQnk7CiAgICAgICAgJFNRTCAuPSAnICc7CiAgICB9CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAQ29uZmlnSXRlbUxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1MaXN0LCAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBcQENvbmZpZ0l0ZW1MaXN0Owp9Cgo9aGVhZDIgQ29uZmlnSXRlbUxvb2t1cCgpCgpUaGlzIG1ldGhvZCBkb2VzIGEgbG9va3VwIGZvciBhIGNvbmZpZy1pdGVtLiBJZiBhIGNvbmZpZy1pdGVtIGlkIGlzIGdpdmVuLAppdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGNvbmZpZy1pdGVtLiBJZiBhIGNvbmZpZy1pdGVtIG51bWJlciBpcyBnaXZlbiwKdGhlIGFwcHJvcHJpYXRlIGlkIGlzIHJldHVybmVkLgoKICAgIG15ICROdW1iZXIgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUxvb2t1cCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzNCwKICAgICk7CgogICAgbXkgJElEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1Mb29rdXAoCiAgICAgICAgQ29uZmlnSXRlbU51bWJlciA9PiAxMDAwMDAxLAogICAgKTsKCj1jdXQKCnN1YiBDb25maWdJdGVtTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgKCRLZXkpID0gZ3JlcCB7ICRQYXJhbXskX30gfSBxdyhDb25maWdJdGVtSUQgQ29uZmlnSXRlbU51bWJlcik7CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkS2V5ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDb25maWdJdGVtSUQgb3IgQ29uZmlnSXRlbU51bWJlciEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaWYgcmVzdWx0IGlzIGNhY2hlZCByZXR1cm4gdGhhdCByZXN1bHQKICAgIHJldHVybiAkU2VsZi0+e0NhY2hlfS0+e0NvbmZpZ0l0ZW1Mb29rdXB9LT57JEtleX0tPnsgJFBhcmFteyRLZXl9IH0KICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+e0NvbmZpZ0l0ZW1Mb29rdXB9LT57JEtleX0tPnsgJFBhcmFteyRLZXl9IH07CgogICAgIyBzZXQgdGhlIGFwcHJvcHJpYXRlIFNRTCBzdGF0ZW1lbnQKICAgIG15ICRTUUwgPSAnU0VMRUNUIGNvbmZpZ2l0ZW1fbnVtYmVyIEZST00gY29uZmlnaXRlbSBXSEVSRSBpZCA9ID8nOwoKICAgIGlmICggJEtleSBlcSAnQ29uZmlnSXRlbU51bWJlcicgKSB7CiAgICAgICAgJFNRTCA9ICdTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtIFdIRVJFIGNvbmZpZ2l0ZW1fbnVtYmVyID0gPyc7CiAgICB9CgogICAgIyBmZXRjaCB0aGUgcmVxdWVzdGVkIHZhbHVlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFteyRLZXl9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJFZhbHVlOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkVmFsdWUgPSAkUm93WzBdOwogICAgfQoKICAgICRTZWxmLT57Q2FjaGV9LT57Q29uZmlnSXRlbUxvb2t1cH0tPnskS2V5fS0+eyAkUGFyYW17JEtleX0gfSA9ICRWYWx1ZTsKCiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aGVhZDIgVW5pcXVlTmFtZUNoZWNrKCkKClRoaXMgbWV0aG9kIGNoZWNrcyBhbGwgYWxyZWFkeSBleGlzdGluZyBjb25maWcgaXRlbXMsIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWUgZG9lcyBhbHJlYWR5IGV4aXN0CndpdGhpbiB0aGUgc2FtZSBjb25maWcgaXRlbSBjbGFzcyBvciBhbW9uZyBhbGwgY2xhc3NlcywgZGVwZW5kaW5nIG9uIHRoZSBTeXNDb25maWcgdmFsdWUgb2YKVW5pcXVlQ0lOYW1lOjpVbmlxdWVuZXNzQ2hlY2tTY29wZSAoQ2xhc3Mgb3IgR2xvYmFsKS4KClRoaXMgbWV0aG9kIHJlcXVpcmVzIDMgcGFyYW1ldGVyczogQ29uZmlnSXRlbUlELCBOYW1lIGFuZCBDbGFzcwoiQ29uZmlnSXRlbUlEIiAgaXMgdGhlIElEIG9mIHRoZSBDb25maWdJdGVtLCB3aGljaCBpcyB0byBiZSBjaGVja2VkIGZvciB1bmlxdWVuZXNzCiJOYW1lIiAgICAgICAgICBpcyB0aGUgY29uZmlnIGl0ZW0gbmFtZSB0byBiZSBjaGVja2VkIGZvciB1bmlxdWVuZXNzCiJDbGFzc0lEIiAgICAgICBpcyB0aGUgSUQgb2YgdGhlIGNvbmZpZyBpdGVtJ3MgY2xhc3MKCkFsbCBwYXJhbWV0ZXJzIGFyZSBtYW5kYXRvcnkuCgpteSAkRHVwbGljYXRlTmFtZXMgPSAkQ29uZmlnSXRlbU9iamVjdC0+VW5pcXVlTmFtZUNoZWNrKAogICAgQ29uZmlnSXRlbUlEID0+ICc3MycKICAgIE5hbWUgICAgICAgICA9PiAnUEMjMDA1JywKICAgIENsYXNzSUQgICAgICA9PiAnMzInLAopOwoKVGhlIGdpdmVuIG5hbWUgaXMgbm90IHVuaXF1ZQpteSAkTmFtZUR1cGxpY2F0ZXMgPSBbIDUsIDM1LCA0OCwgXTsgICAgIyBJRHMgb2YgQ29uZmlnSXRlbXMgd2l0aCB0aGUgc2FtZSBuYW1lCgpUaGUgZ2l2ZW4gbmFtZSBpcyB1bmlxdWUKbXkgJE5hbWVEdXBsaWNhdGVzID0gW107Cgo9Y3V0CgpzdWIgVW5pcXVlTmFtZUNoZWNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29uZmlnSXRlbUlEIE5hbWUgQ2xhc3NJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJNaXNzaW5nIHBhcmFtZXRlciAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBDb25maWdJdGVtSUQgcGFyYW0gZm9yIHZhbGlkIGZvcm1hdAogICAgaWYgKAogICAgICAgICFJc0ludGVnZXIoICRQYXJhbXtDb25maWdJdGVtSUR9ICkKICAgICAgICAmJiAoIElzU3RyaW5nV2l0aERhdGEoICRQYXJhbXtDb25maWdJdGVtSUR9ICkgJiYgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gbmUgJ05FVycgKQogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBDb25maWdJdGVtSUQgcGFyYW1ldGVyIG5lZWRzIHRvIGJlIGFuIGludGVnZXIgb3IgJ05FVyciLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgTmFtZSBwYXJhbSBmb3IgdmFsaWQgZm9ybWF0CiAgICBpZiAoICFJc1N0cmluZ1dpdGhEYXRhKCAkUGFyYW17TmFtZX0gKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBOYW1lIHBhcmFtZXRlciBuZWVkcyB0byBiZSBhIHN0cmluZyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgQ2xhc3NJRCBwYXJhbSBmb3IgdmFsaWQgZm9ybWF0CiAgICBpZiAoICFJc0ludGVnZXIoICRQYXJhbXtDbGFzc0lEfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIENsYXNzSUQgcGFyYW1ldGVyIG5lZWRzIHRvIGJlIGFuIGludGVnZXIiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgIyBjaGVjayBjbGFzcyBsaXN0IGZvciB2YWxpZGl0eQogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJENsYXNzTGlzdCkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJVbmFibGUgdG8gcmV0cmlldmUgYSB2YWxpZCBjbGFzcyBsaXN0ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgdGhlIGNsYXNzIG5hbWUgZnJvbSB0aGUgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzID0gJENsYXNzTGlzdC0+eyAkUGFyYW17Q2xhc3NJRH0gfTsKCiAgICAjIGNoZWNrIGNsYXNzIGZvciB2YWxpZGl0eQogICAgaWYgKCAhSXNTdHJpbmdXaXRoRGF0YSgkQ2xhc3MpICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5hYmxlIHRvIGRldGVybWluZSBhIGNvbmZpZyBpdGVtIGNsYXNzIHVzaW5nIHRoZSBnaXZlbiBDbGFzc0lEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBlbHNpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPntEZWJ1Z30gPiAwICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiUmVzb2x2ZWQgQ2xhc3NJRCAkUGFyYW17Q2xhc3NJRH0gdG8gY2xhc3MgJENsYXNzIiwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHRoZSB1bmlxdWVuZXNzIHNjb3BlIGZyb20gU3lzQ29uZmlnCiAgICBteSAkU2NvcGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1VuaXF1ZUNJTmFtZTo6VW5pcXVlbmVzc0NoZWNrU2NvcGUnKTsKCiAgICAjIGNoZWNrIHNjb3BlIGZvciB2YWxpZGl0eQogICAgaWYgKCAhSXNTdHJpbmdXaXRoRGF0YSgkU2NvcGUpICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIGNvbmZpZ3VyYXRpb24gb2YgVW5pcXVlQ0lOYW1lOjpVbmlxdWVuZXNzQ2hlY2tTY29wZSBpcyBpbnZhbGlkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAkU2NvcGUgbmUgJ2dsb2JhbCcgJiYgJFNjb3BlIG5lICdjbGFzcycgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJVbmlxdWVDSU5hbWU6OlVuaXF1ZW5lc3NDaGVja1Njb3BlIGlzICRTY29wZSwgYnV0IG11c3QgYmUgZWl0aGVyICIKICAgICAgICAgICAgICAgIC4gIidnbG9iYWwnIG9yICdjbGFzcychIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPntEZWJ1Z30gPiAwICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIHNjb3BlIGZvciBjaGVja2luZyB0aGUgdW5pcXVlbmVzcyBpcyAkU2NvcGUiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJVNlYXJjaENyaXRlcmlhOwoKICAgICMgYWRkIHRoZSBjb25maWcgaXRlbSBjbGFzcyB0byB0aGUgc2VhcmNoIGNyaXRlcmlhIGlmIHRoZSB1bmlxdWVuZXNzIHNjb3BlIGlzIG5vdCBnbG9iYWwKICAgIGlmICggJFNjb3BlIG5lICdnbG9iYWwnICkgewogICAgICAgICRTZWFyY2hDcml0ZXJpYXtDbGFzc0lEc30gPSBbICRQYXJhbXtDbGFzc0lEfSBdOwogICAgfQoKICAgICRTZWFyY2hDcml0ZXJpYXtOYW1lfSA9ICRQYXJhbXtOYW1lfTsKCiAgICAjIHNlYXJjaCBmb3IgYSBjb25maWcgaXRlbSBtYXRjaGluZyB0aGUgZ2l2ZW4gbmFtZQogICAgbXkgJENvbmZpZ0l0ZW0gPSAkU2VsZi0+Q29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCVTZWFyY2hDcml0ZXJpYSk7CgogICAgIyByZW1vdmUgdGhlIHByb3ZpZGVkIENvbmZpZ0l0ZW1JRCBmcm9tIHRoZSByZXN1bHRzLCBvdGhlcndpc2UgdGhlIGR1cGxpY2F0ZSBjaGVjayB3b3VsZCBmYWlsCiAgICAjIGJlY2F1c2UgdGhlIENvbmZpZ0l0ZW0gaXRzZWxmIGlzIGZvdW5kIGFzIGR1cGxpY2F0ZQogICAgbXkgQER1cGxpY2F0ZXMgPSBtYXAgeyRffSBncmVwIHsgJF8gbmUgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfSBAeyRDb25maWdJdGVtfTsKCiAgICAjIGlmIGEgY29uZmlnIGl0ZW0gd2FzIGZvdW5kLCB0aGUgZ2l2ZW4gbmFtZSBpcyBub3QgdW5pcXVlCiAgICAjIGlmIG5vIGNvbmZpZyBpdGVtIHdhcyBmb3VuZCwgdGhlIGdpdmVuIG5hbWUgaXMgdW5pcXVlCgogICAgIyByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY29uZmlnIGl0ZW0gc2VhcmNoIGZvciBkdXBsaWNhdGVzCiAgICByZXR1cm4gXEBEdXBsaWNhdGVzOwp9Cgo9aGVhZDIgQ3VySW5jaVN0YXRlUmVjYWxjKCkKCnJlY2FsY3VsYXRlcyB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIGNvbmZpZyBpdGVtIGFuZCBhbGwgbGlua2VkIGNvbmZpZyBpdGVtcwoKICAgIG15ICRTdWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkN1ckluY2lTdGF0ZVJlY2FsYygKICAgICAgICBDb25maWdJdGVtSUQgICAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgTmV3Q29uZmlnSXRlbUluY2lkZW50U3RhdGUgPT4gJE5ld0NvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlLCAgIyBvcHRpb25hbCwgaW5jaWRlbnQgc3RhdGVzIG9mIGFscmVhZHkgY2hlY2tlZCBDSXMKICAgICAgICBTY2FubmVkQ29uZmlnSXRlbUlEcyAgICAgICA9PiAkU2Nhbm5lZENvbmZpZ0l0ZW1JRHMsICAgICAgICAjIG9wdGlvbmFsLCBJRHMgb2YgYWxyZWFkeSBjaGVja2VkIENJcwogICAgKTsKCj1jdXQKCnN1YiBDdXJJbmNpU3RhdGVSZWNhbGMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbmZpZ0l0ZW1JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGluY2lkZW50IGxpbmsgdHlwZXMgYW5kIGRpcmVjdGlvbnMgZnJvbSBjb25maWcKICAgIG15ICRJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNOjpDb3JlOjpJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uJyk7CgogICAgIyB0byBzdG9yZSB0aGUgbmV3IGluY2lkZW50IHN0YXRlIGZvciBDSXMKICAgICMgY2FsY3VsYXRlZCBmcm9tIGFsbCBpbmNpZGVudCBsaW5rIHR5cGVzCiAgICAjIEluY29ycG9yYXRlIGRhdGEgZnJvbSBwcmV2aW91cyBydW4ocykgYW5kIHJlbWVtYmVyIGtub3duIGRhdGEuCiAgICAkUGFyYW17TmV3Q29uZmlnSXRlbUluY2lkZW50U3RhdGV9IC8vPSB7fTsKICAgIG15ICRLbm93bk5ld0NvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlID0gU3RvcmFibGU6OmRjbG9uZSggJFBhcmFte05ld0NvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlfSApOwoKICAgICMgdG8gc3RvcmUgdGhlIHJlbGF0aW9uIGJldHdlZW4gc2VydmljZXMgYW5kIGxpbmtlZCBDSXMKICAgIG15ICVTZXJ2aWNlQ0lSZWxhdGlvbjsKCiAgICAjIHJlbWVtYmVyIHRoZSBzY2FubmVkIGNvbmZpZyBpdGVtcwogICAgIyBJbmNvcnBvcmF0ZSBkYXRhIGZyb20gcHJldmlvdXMgcnVuKHMpIGFuZCByZW1lbWJlciBrbm93biBkYXRhLgogICAgJFBhcmFte1NjYW5uZWRDb25maWdJdGVtSURzfSAvLz0ge307CiAgICBteSAkS25vd25TY2FubmVkQ29uZmlnSXRlbUlEcyA9IFN0b3JhYmxlOjpkY2xvbmUoICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30gKTsKCiAgICAjIGZpbmQgYWxsIGNvbmZpZyBpdGVtcyB3aXRoIGFuIGluY2lkZW50IHN0YXRlCiAgICAkU2VsZi0+X0ZpbmRJbmNpQ29uZmlnSXRlbXMoCiAgICAgICAgQ29uZmlnSXRlbUlEICAgICAgICAgICAgICA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICBJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uID0+ICRJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uLAogICAgICAgIFNjYW5uZWRDb25maWdJdGVtSURzICAgICAgPT4gJFBhcmFte1NjYW5uZWRDb25maWdJdGVtSURzfSwKICAgICk7CgogICAgIyBjYWxjdWxhdGUgdGhlIG5ldyBDSSBpbmNpZGVudCBzdGF0ZSBmb3IgZWFjaCBjb25maWd1cmVkIGxpbmt0eXBlCiAgICBMSU5LVFlQRToKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXskSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbn0gKSB7CgogICAgICAgICMgZ2V0IHRoZSBkaXJlY3Rpb24KICAgICAgICBteSAkTGlua0RpcmVjdGlvbiA9ICRJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uLT57JExpbmtUeXBlfTsKCiAgICAgICAgIyBpbnZlc3RpZ2F0ZSBhbGwgY29uZmlnIGl0ZW1zIHdpdGggYSB3YXJuaW5nIHN0YXRlCiAgICAgICAgQ09ORklHSVRFTUlEOgogICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggc29ydCBrZXlzICV7ICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30gfSApIHsKCiAgICAgICAgICAgICMgU2tpcCBjb25maWcgaXRlbXMga25vd24gZnJvbSBwcmV2aW91cyBleGVjdXRpb24ocykuCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIElzU3RyaW5nV2l0aERhdGEoICRLbm93blNjYW5uZWRDb25maWdJdGVtSURzLT57JENvbmZpZ0l0ZW1JRH0tPntUeXBlfSApCiAgICAgICAgICAgICAgICAmJiAkS25vd25TY2FubmVkQ29uZmlnSXRlbUlEcy0+eyRDb25maWdJdGVtSUR9LT57VHlwZX0gZXEKICAgICAgICAgICAgICAgICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnskQ29uZmlnSXRlbUlEfS0+e1R5cGV9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGludmVzdGlnYXRlIG9ubHkgY29uZmlnIGl0ZW1zIHdpdGggYW4gaW5jaWRlbnQgc3RhdGUKICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgJFBhcmFte1NjYW5uZWRDb25maWdJdGVtSURzfS0+eyRDb25maWdJdGVtSUR9LT57VHlwZX0gbmUgJ2luY2lkZW50JzsKCiAgICAgICAgICAgICRTZWxmLT5fRmluZFdhcm5Db25maWdJdGVtcygKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBMaW5rVHlwZSAgICAgICAgICAgICA9PiAkTGlua1R5cGUsCiAgICAgICAgICAgICAgICBEaXJlY3Rpb24gICAgICAgICAgICA9PiAkTGlua0RpcmVjdGlvbiwKICAgICAgICAgICAgICAgIE51bWJlck9mTGlua1R5cGVzICAgID0+IHNjYWxhciBrZXlzICV7JEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb259LAogICAgICAgICAgICAgICAgU2Nhbm5lZENvbmZpZ0l0ZW1JRHMgPT4gJFBhcmFte1NjYW5uZWRDb25maWdJdGVtSURzfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQga2V5cyAleyAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9IH0gKSB7CgogICAgICAgICAgICAjIFNraXAgY29uZmlnIGl0ZW1zIGtub3duIGZyb20gcHJldmlvdXMgZXhlY3V0aW9uKHMpLgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBJc1N0cmluZ1dpdGhEYXRhKCAkS25vd25TY2FubmVkQ29uZmlnSXRlbUlEcy0+eyRDb25maWdJdGVtSUR9LT57VHlwZX0gKQogICAgICAgICAgICAgICAgJiYgJEtub3duU2Nhbm5lZENvbmZpZ0l0ZW1JRHMtPnskQ29uZmlnSXRlbUlEfS0+e1R5cGV9IGVxCiAgICAgICAgICAgICAgICAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LT57JENvbmZpZ0l0ZW1JRH0tPntUeXBlfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBleHRyYWN0IGluY2lkZW50IHN0YXRlIHR5cGUKICAgICAgICAgICAgbXkgJEluY2lTdGF0ZVR5cGUgPSAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LT57JENvbmZpZ0l0ZW1JRH0tPntUeXBlfTsKCiAgICAgICAgICAgICMgZmluZCBhbGwgbGlua2VkIHNlcnZpY2VzIG9mIHRoaXMgQ0kKICAgICAgICAgICAgbXkgJUxpbmtlZFNlcnZpY2VJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rS2V5TGlzdCgKICAgICAgICAgICAgICAgIE9iamVjdDEgICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICAgICAgS2V5MSAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBPYmplY3QyICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICAgICAgU3RhdGUgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJExpbmtUeXBlLAogICAgICAgICAgICAgICAgRGlyZWN0aW9uID0+ICRMaW5rRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBTRVJWSUNFSUQ6CiAgICAgICAgICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVMaW5rZWRTZXJ2aWNlSURzICkgewoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgdGhlIENJcyB0aGF0IGFyZSBsaW5rZWQgd2l0aCB0aGlzIHNlcnZpY2UKICAgICAgICAgICAgICAgIHB1c2ggQHsgJFNlcnZpY2VDSVJlbGF0aW9ueyRTZXJ2aWNlSUR9IH0sICRDb25maWdJdGVtSUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICRJbmNpU3RhdGVUeXBlIGVxICdpbmNpZGVudCc7CgogICAgICAgICAgICAkUGFyYW17TmV3Q29uZmlnSXRlbUluY2lkZW50U3RhdGV9LT57JENvbmZpZ0l0ZW1JRH0gPSAkSW5jaVN0YXRlVHlwZTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGhlIGluY2lkZW50IHN0YXRlIGxpc3Qgb2Ygd2FybmluZ3MKICAgIG15ICRXYXJuU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJ3dhcm5pbmcnLAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggIWRlZmluZWQgJFdhcm5TdGF0ZUxpc3QgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlIFdhcm5pbmcgY2Fubm90IGJlIGludmFsaWQuIiwKICAgICAgICApOwogICAgfQoKICAgIG15ICVSZXZlcnNlV2FyblN0YXRlTGlzdCA9IHJldmVyc2UgJXskV2FyblN0YXRlTGlzdH07CiAgICBteSBAU29ydGVkV2Fybkxpc3QgICAgICAgPSBzb3J0IGtleXMgJVJldmVyc2VXYXJuU3RhdGVMaXN0OwogICAgbXkgJFdhcm5pbmdTdGF0ZUlEICAgICAgID0gJFJldmVyc2VXYXJuU3RhdGVMaXN0e1dhcm5pbmd9IHx8ICRSZXZlcnNlV2FyblN0YXRlTGlzdHsgJFNvcnRlZFdhcm5MaXN0WzBdIH07CiAgICBteSAkQ2FjaGVPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICAjIHNldCB0aGUgbmV3IGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgZm9yIENJcwogICAgQ09ORklHSVRFTUlEOgogICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBzb3J0IGtleXMgJXsgJFBhcmFte05ld0NvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlfSB9ICkgewoKICAgICAgICAjIFNraXAgY29uZmlnIGl0ZW1zIGtub3duIGZyb20gcHJldmlvdXMgZXhlY3V0aW9uKHMpLgogICAgICAgIGlmICgKICAgICAgICAgICAgSXNTdHJpbmdXaXRoRGF0YSggJEtub3duTmV3Q29uZmlnSXRlbUluY2lkZW50U3RhdGUtPnskQ29uZmlnSXRlbUlEfSApCiAgICAgICAgICAgICYmICRLbm93bk5ld0NvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlLT57JENvbmZpZ0l0ZW1JRH0gZXEgJFBhcmFte05ld0NvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlfS0+eyRDb25maWdJdGVtSUR9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbmV3IGluY2lkZW50IHN0YXRlIHR5cGUgKGNhbiBvbmx5IGJlICdvcGVyYXRpb25hbCcgb3IgJ3dhcm5pbmcnKQogICAgICAgIG15ICRJbmNpU3RhdGVUeXBlID0gJFBhcmFte05ld0NvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlfS0+eyRDb25maWdJdGVtSUR9OwoKICAgICAgICAjIGdldCBsYXN0IHZlcnNpb24KICAgICAgICBteSAkTGFzdFZlcnNpb24gPSAkU2VsZi0+VmVyc2lvbkdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIFhNTERhdGFHZXQgICA9PiAwLAogICAgICAgICk7CgogICAgICAgIG15ICRDdXJJbmNpU3RhdGVJRDsKICAgICAgICBpZiAoICRJbmNpU3RhdGVUeXBlIGVxICd3YXJuaW5nJyApIHsKCiAgICAgICAgICAgICMgY2hlY2sgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgdHlwZSBpcyBpbiAnaW5jaWRlbnQnCiAgICAgICAgICAgICMgdGhlbiB3ZSBkbyBub3Qgd2FudCB0byBjaGFuZ2UgaXQgdG8gd2FybmluZwogICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkTGFzdFZlcnNpb24tPntJbmNpU3RhdGVUeXBlfSBlcSAnaW5jaWRlbnQnOwoKICAgICAgICAgICAgJEN1ckluY2lTdGF0ZUlEID0gJFdhcm5pbmdTdGF0ZUlEOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRJbmNpU3RhdGVUeXBlIGVxICdvcGVyYXRpb25hbCcgKSB7CiAgICAgICAgICAgICRDdXJJbmNpU3RhdGVJRCA9ICRMYXN0VmVyc2lvbi0+e0luY2lTdGF0ZUlEfTsKICAgICAgICB9CgogICAgICAgICMgTm8gdXBkYXRlIG5lY2Vzc2FyeSBpZiBpbmNpZGVudCBzdGF0ZSBpZCBvZiB2ZXJzaW9uIGFuZCBjb25maWcgaXRlbSBtYXRjaC4KICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkTGFzdFZlcnNpb24tPntDdXJJbmNpU3RhdGVJRH0gZXEgJEN1ckluY2lTdGF0ZUlEOwoKICAgICAgICAjIHVwZGF0ZSBjdXJyZW50IGluY2lkZW50IHN0YXRlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgID0+ICdVUERBVEUgY29uZmlnaXRlbSBTRVQgY3VyX2luY2lfc3RhdGVfaWQgPSA/IFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJEN1ckluY2lTdGF0ZUlELCBcJENvbmZpZ0l0ZW1JRCBdLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRoZSBjYWNoZQogICAgICAgIG15ICRDYWNoZUtleSA9ICdDb25maWdJdGVtR2V0OjpDb25maWdJdGVtSUQ6OicgLiAkQ29uZmlnSXRlbUlEOwogICAgICAgICRDYWNoZU9iamVjdC0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgYWZmZWN0ZWQgY2FjaGVzIGZvciBDb25maWdJdGVtSUQKICAgICAgICAkQ2FjaGVLZXkgPSAnVmVyc2lvbkdldDo6Q29uZmlnSXRlbUlEOjonIC4gJENvbmZpZ0l0ZW1JRCAuICc6OlhNTERhdGE6Oic7CiAgICAgICAgZm9yIG15ICRYTUxEYXRhIChxdygwIDEpKSB7CiAgICAgICAgICAgICRDYWNoZU9iamVjdC0+RGVsZXRlKAogICAgICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSAuICRYTUxEYXRhLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkQ2FjaGVPYmplY3QtPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJ1ZlcnNpb25OYW1lR2V0OjpDb25maWdJdGVtSUQ6OicgLiAkQ29uZmlnSXRlbUlELAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGFmZmVjdGVkIGNhY2hlcyBmb3IgbGFzdCB2ZXJzaW9uCiAgICAgICAgbXkgJFZlcnNpb25MaXN0ID0gJFNlbGYtPlZlcnNpb25MaXN0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwogICAgICAgIG15ICRWZXJzaW9uSUQgPSAkVmVyc2lvbkxpc3QtPlstMV07CiAgICAgICAgJENhY2hlS2V5ID0gJ1ZlcnNpb25HZXQ6OlZlcnNpb25JRDo6JyAuICRWZXJzaW9uSUQgLiAnOjpYTUxEYXRhOjonOwogICAgICAgIGZvciBteSAkWE1MRGF0YSAocXcoMCAxKSkgewogICAgICAgICAgICAkQ2FjaGVPYmplY3QtPkRlbGV0ZSgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXkgLiAkWE1MRGF0YSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICdWZXJzaW9uTmFtZUdldDo6VmVyc2lvbklEOjonIC4gJFZlcnNpb25JRCwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZm9yIGVhY2ggc2VydmljZSAoaW5mbHVlbmNlZCBieSBsaW5rZWQgQ0lzKQogICAgU0VSVklDRUlEOgogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJVNlcnZpY2VDSVJlbGF0aW9uICkgewoKICAgICAgICAjIHNldCBkZWZhdWx0IGluY2lkZW50IHN0YXRlIHR5cGUKICAgICAgICBteSAkQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMgPSAnb3BlcmF0aW9uYWwnOwoKICAgICAgICAjIGdldCB0aGUgdW5pcXVlIGNvbmZpZyBpdGVtIGlkcyB3aGljaCBhcmUgZGlyZWNseSBsaW5rZWQgdG8gdGhpcyBzZXJ2aWNlCiAgICAgICAgbXkgJVVuaXF1ZUNvbmZpZ0l0ZW1JRHMgPSBtYXAgeyAkXyA9PiAxIH0gQHsgJFNlcnZpY2VDSVJlbGF0aW9ueyRTZXJ2aWNlSUR9IH07CgogICAgICAgICMgaW52ZXN0aWdhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgb2YgZWFjaCBjb25maWcgaXRlbQogICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQga2V5cyAlVW5pcXVlQ29uZmlnSXRlbUlEcyApIHsKCiAgICAgICAgICAgICMgZ2V0IGNvbmZpZyBpdGVtIGRhdGEKICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW1EYXRhID0gJFNlbGYtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgIENhY2hlICAgICAgICA9PiAwLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgJENvbmZpZ0l0ZW1EYXRhLT57Q3VyRGVwbFN0YXRlVHlwZX0gbmUgJ3Byb2R1Y3RpdmUnOwogICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnb3BlcmF0aW9uYWwnOwoKICAgICAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIG11c3QgYmUgc2V0IHRvICd3YXJuaW5nJwogICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICd3YXJuaW5nJyApIHsKICAgICAgICAgICAgICAgICRDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcyA9ICd3YXJuaW5nJzsKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgbXVzdCBiZSBzZXQgdG8gJ2luY2lkZW50JwogICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICdpbmNpZGVudCcgKSB7CiAgICAgICAgICAgICAgICAkQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMgPSAnaW5jaWRlbnQnOwogICAgICAgICAgICAgICAgbGFzdCBDT05GSUdJVEVNSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBDSXMgb2YgdGhlIHNlcnZpY2UKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzJywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcywKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQxIElOVEVSTkFMIElOVEVSRkFDRQoKPWhlYWQyIF9GaW5kSW5jaUNvbmZpZ0l0ZW1zKCkKCmZpbmQgYWxsIGNvbmZpZyBpdGVtcyB3aXRoIGFuIGluY2lkZW50IHN0YXRlCgogICAgJENvbmZpZ0l0ZW1PYmplY3QtPl9GaW5kSW5jaUNvbmZpZ0l0ZW1zKAogICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICBJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uID0+ICRJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uLAogICAgICAgIFNjYW5uZWRDb25maWdJdGVtSURzICAgICA9PiBcJVNjYW5uZWRDb25maWdJdGVtSURzLAogICAgKTsKCj1jdXQKCnN1YiBfRmluZEluY2lDb25maWdJdGVtcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtDb25maWdJdGVtSUR9OwoKICAgICMgaWdub3JlIGFscmVhZHkgc2Nhbm5lZCBpZHMgKGluZmluaXRlIGxvb3AgcHJvdGVjdGlvbikKICAgIHJldHVybiBpZiAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LT57ICRQYXJhbXtDb25maWdJdGVtSUR9IH07CgogICAgJFBhcmFte1NjYW5uZWRDb25maWdJdGVtSURzfS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9LT57VHlwZX0gPSAnb3BlcmF0aW9uYWwnOwoKICAgICMgYWRkIG93biBjb25maWcgaXRlbSBpZCB0byBsaXN0IG9mIGxpbmtlZCBjb25maWcgaXRlbXMKICAgIG15ICVDb25maWdJdGVtSURzID0gKAogICAgICAgICRQYXJhbXtDb25maWdJdGVtSUR9ID0+IDEsCiAgICApOwoKICAgIExJTktUWVBFOgogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17SW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbn0gfSApIHsKCiAgICAgICAgIyBmaW5kIGFsbCBsaW5rZWQgY29uZmlnIGl0ZW1zIChjaGlsZHMpCiAgICAgICAgbXkgJUxpbmtlZENvbmZpZ0l0ZW1JRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rS2V5TGlzdCgKICAgICAgICAgICAgT2JqZWN0MSA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBLZXkxICAgID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBPYmplY3QyID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIFN0YXRlICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgVHlwZSAgICA9PiAkTGlua1R5cGUsCgogICAgICAgICAgICAjIERpcmVjdGlvbiBtdXN0IEFMV0FZUyBiZSAnQm90aCcgaGVyZSBhcyB3ZSBuZWVkIHRvIGluY2x1ZGUKICAgICAgICAgICAgIyBhbGwgbGlua2VkIENJcyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGlzIG9uZSEKICAgICAgICAgICAgRGlyZWN0aW9uID0+ICdCb3RoJywKCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgcmVtZW1iZXIgdGhlIGNvbmZpZyBpdGVtIGlkcwogICAgICAgICVDb25maWdJdGVtSURzID0gKCAlQ29uZmlnSXRlbUlEcywgJUxpbmtlZENvbmZpZ0l0ZW1JRHMgKTsKICAgIH0KCiAgICBDT05GSUdJVEVNSUQ6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQga2V5cyAlQ29uZmlnSXRlbUlEcyApIHsKCiAgICAgICAgIyBnZXQgY29uZmlnIGl0ZW0gZGF0YQogICAgICAgIG15ICRDb25maWdJdGVtID0gJFNlbGYtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDYWNoZSAgICAgICAgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIHNldCBpbmNpZGVudCBzdGF0ZQogICAgICAgIGlmICggJENvbmZpZ0l0ZW0tPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnaW5jaWRlbnQnICkgewogICAgICAgICAgICAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LT57JENvbmZpZ0l0ZW1JRH0tPntUeXBlfSA9ICdpbmNpZGVudCc7CiAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgIH0KCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAkU2VsZi0+X0ZpbmRJbmNpQ29uZmlnSXRlbXMoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbiA9PiAkUGFyYW17SW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbn0sCiAgICAgICAgICAgIFNjYW5uZWRDb25maWdJdGVtSURzICAgICAgPT4gJFBhcmFte1NjYW5uZWRDb25maWdJdGVtSURzfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0ZpbmRXYXJuQ29uZmlnSXRlbXMoKQoKZmluZCBhbGwgY29uZmlnIGl0ZW1zIHdpdGggYSB3YXJuaW5nCgogICAgJENvbmZpZ0l0ZW1PYmplY3QtPl9GaW5kV2FybkNvbmZpZ0l0ZW1zKAogICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgTGlua1R5cGUgICAgICAgICAgICAgPT4gJExpbmtUeXBlLAogICAgICAgIERpcmVjdGlvbiAgICAgICAgICAgID0+ICRMaW5rRGlyZWN0aW9uLAogICAgICAgIE51bWJlck9mTGlua1R5cGVzICAgID0+IDIsCiAgICAgICAgU2Nhbm5lZENvbmZpZ0l0ZW1JRHMgPT4gJFNjYW5uZWRDb25maWdJdGVtSURzLAogICAgKTsKCj1jdXQKCnN1YiBfRmluZFdhcm5Db25maWdJdGVtcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtDb25maWdJdGVtSUR9OwoKICAgIG15ICRJbmNpZGVudENvdW50ID0gMDsKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggc29ydCBrZXlzICV7ICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30gfSApIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnskQ29uZmlnSXRlbUlEfS0+e1R5cGV9CiAgICAgICAgICAgICYmICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnskQ29uZmlnSXRlbUlEfS0+e1R5cGV9IGVxICdpbmNpZGVudCcKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEluY2lkZW50Q291bnQrKzsKICAgICAgICB9CiAgICB9CgojIGlnbm9yZSBhbHJlYWR5IHNjYW5uZWQgaWRzIChpbmZpbml0ZSBsb29wIHByb3RlY3Rpb24pCiMgaXQgaXMgb2sgdGhhdCBhIGNvbmZpZyBpdGVtIGlzIGludmVzdGlnYXRlZCBhcyBtYW55IHRpbWVzIGFzIHRoZXJlIGFyZSBjb25maWd1cmVkIGxpbmsgdHlwZXMgKiBudW1iZXIgb2YgaW5jaWRlbnQgY29uZmlnIGl0ZWVtcwogICAgaWYgKAogICAgICAgICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnsgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfS0+e0ZpbmRXYXJufQogICAgICAgICYmICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnsgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfS0+e0ZpbmRXYXJufQogICAgICAgID49ICggJFBhcmFte051bWJlck9mTGlua1R5cGVzfSAqICRJbmNpZGVudENvdW50ICkKICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaW5jcmVhc2UgdGhlIHZpc2l0IGNvdW50ZXIKICAgICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnsgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfS0+e0ZpbmRXYXJufSsrOwoKICAgICMgZmluZCBhbGwgbGlua2VkIGNvbmZpZyBpdGVtcwogICAgbXkgJUxpbmtlZENvbmZpZ0l0ZW1JRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rS2V5TGlzdCgKICAgICAgICBPYmplY3QxICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBLZXkxICAgICAgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgT2JqZWN0MiAgID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgU3RhdGUgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVHlwZSAgICAgID0+ICRQYXJhbXtMaW5rVHlwZX0sCiAgICAgICAgRGlyZWN0aW9uID0+ICRQYXJhbXtEaXJlY3Rpb259LAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBDT05GSUdJVEVNSUQ6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQga2V5cyAlTGlua2VkQ29uZmlnSXRlbUlEcyApIHsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAkU2VsZi0+X0ZpbmRXYXJuQ29uZmlnSXRlbXMoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgICAgICAgID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIExpbmtUeXBlICAgICAgICAgICAgID0+ICRQYXJhbXtMaW5rVHlwZX0sCiAgICAgICAgICAgIERpcmVjdGlvbiAgICAgICAgICAgID0+ICRQYXJhbXtEaXJlY3Rpb259LAogICAgICAgICAgICBOdW1iZXJPZkxpbmtUeXBlcyAgICA9PiAkUGFyYW17TnVtYmVyT2ZMaW5rVHlwZXN9LAogICAgICAgICAgICBTY2FubmVkQ29uZmlnSXRlbUlEcyA9PiAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LAogICAgICAgICk7CgogICAgICAgIG5leHQgQ09ORklHSVRFTUlECiAgICAgICAgICAgIGlmICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnskQ29uZmlnSXRlbUlEfS0+e1R5cGV9CiAgICAgICAgICAgICYmICRQYXJhbXtTY2FubmVkQ29uZmlnSXRlbUlEc30tPnskQ29uZmlnSXRlbUlEfS0+e1R5cGV9IGVxICdpbmNpZGVudCc7CgogICAgICAgICMgc2V0IHdhcm5pbmcgc3RhdGUKICAgICAgICAkUGFyYW17U2Nhbm5lZENvbmZpZ0l0ZW1JRHN9LT57JENvbmZpZ0l0ZW1JRH0tPntUeXBlfSA9ICd3YXJuaW5nJzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9QcmVwYXJlTGlrZVN0cmluZygpCgppbnRlcm5hbCBmdW5jdGlvbiB0byBwcmVwYXJlIGxpa2Ugc3RyaW5ncwoKICAgICRDb25maWdJdGVtT2JqZWN0LT5fUHJlcGFyZUxpa2VTdHJpbmcoICRTdHJpbmdSZWYgKTsKCj1jdXQKCnN1YiBfUHJlcGFyZUxpa2VTdHJpbmcgewogICAgbXkgKCAkU2VsZiwgJFZhbHVlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgISRWYWx1ZTsKICAgIHJldHVybiBpZiByZWYgJFZhbHVlIG5lICdTQ0FMQVInOwoKICAgICMgUXVvdGUKICAgICR7JFZhbHVlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5RdW90ZSggJHskVmFsdWV9LCAnTGlrZScgKTsKCiAgICAjIHJlcGxhY2UgKiB3aXRoICUKICAgICR7JFZhbHVlfSA9fiBzeyBcKisgfXslfXhtc2c7CgogICAgcmV0dXJuOwp9CgoxOwoKPWhlYWQxIElUU00gQ29uZmlnIEl0ZW0gZXZlbnRzOgoKQ29uZmlnSXRlbUNyZWF0ZSwgVmVyc2lvbkNyZWF0ZSwgRGVwbG95bWVudFN0YXRlVXBkYXRlLCBJbmNpZGVudFN0YXRlVXBkYXRlLApDb25maWdJdGVtRGVsZXRlLCBMaW5rQWRkLCBMaW5rRGVsZXRlLCBEZWZpbml0aW9uVXBkYXRlLCBOYW1lVXBkYXRlLCBWYWx1ZVVwZGF0ZQpEZWZpbml0aW9uQ3JlYXRlLCBWZXJzaW9uRGVsZXRlCgo9Y3V0Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6SVRTTTo6Q29uZmlnaXRlbTo6TGlzdER1cGxpY2F0ZXM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6Ok1pZ3JhdGlvbnM6Ok9UUlM2OjpTeXNDb25maWcpCgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNBcnJheVJlZldpdGhEYXRhKTsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdMaXN0IENvbmZpZ0l0ZW1zIHdoaWNoIGhhdmUgYSBub24tdW5pcXVlIG5hbWUuJyk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdjbGFzcycsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkNoZWNrIG9ubHkgY29uZmlnIGl0ZW1zIG9mIHRoaXMgY2xhc3MuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3Njb3BlJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiRGVmaW5lIHRoZSBzY29wZSBmb3IgdGhlIHVuaXF1ZW5lc3MgY2hlY2sgKGdsb2JhbHxjbGFzcykiLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8oZ2xvYmFsfGNsYXNzKS9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnYWxsLXN0YXRlcycsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkFsc28gY2hlY2sgY29uZmlnIGl0ZW1zIGluIG5vbi1wcm9kdWN0aXZlIHN0YXRlcy4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMCwKICAgICk7CgogICAgcmV0dXJuOwp9CgpzdWIgUHJlUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2xhc3MgYXJndW1lbnQKICAgIG15ICRDbGFzcyA9ICRTZWxmLT5HZXRPcHRpb24oJ2NsYXNzJykgLy8gJyc7CgogICAgaWYgKCRDbGFzcykgewoKICAgICAgICAjIGdldCBjbGFzcyBsaXN0CiAgICAgICAgbXkgJENsYXNzTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICApOwoKICAgICAgICAjIGludmVydCB0aGUgaGFzaCB0byBoYXZlIHRoZSBjbGFzc2VzJyBuYW1lcyBhcyBrZXlzCiAgICAgICAgbXkgJUNsYXNzTmFtZTJJRCA9IHJldmVyc2UgJXskQ2xhc3NMaXN0fTsKCiAgICAgICAgIyBjaGVjaywgd2hldGhlciB0aGlzIGNsYXNzIGV4aXN0cwogICAgICAgIGlmICggJENsYXNzTmFtZTJJRHskQ2xhc3N9ICkgewogICAgICAgICAgICBteSAkSUQgPSAkQ2xhc3NOYW1lMklEeyRDbGFzc307CgogICAgICAgICAgICAjIGdldCBpZHMgb2YgdGhpcyBjbGFzcycgY29uZmlnIGl0ZW1zCiAgICAgICAgICAgICRTZWxmLT57U2VhcmNoQ3JpdGVyaWF9LT57Q2xhc3NJRHN9ID0gWyRJRF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkaWUgIkNsYXNzICRDbGFzcyBkb2VzIG5vdCBleGlzdC4uLlxuIjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93Pkxpc3RpbmcgZHVwbGljYXRlcyBvZiBjb25maWcgaXRlbXMuLi48L3llbGxvdz5cblxuIik7CgogICAgaWYgKCAhJFNlbGYtPkdldE9wdGlvbignYWxsLXN0YXRlcycpICkgewoKICAgICAgICBteSAkU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiBbICdwcmVwcm9kdWN0aXZlJywgJ3Byb2R1Y3RpdmUnIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJERlcGxveW1lbnRTdGF0ZUlEcyA9IFsga2V5cyAleyRTdGF0ZUxpc3R9IF07CgogICAgICAgICRTZWxmLT57U2VhcmNoQ3JpdGVyaWF9LT57RGVwbFN0YXRlSURzfSA9IFsga2V5cyAleyRTdGF0ZUxpc3R9IF07CgogICAgfQoKICAgICMgZ2V0IElUU01Db25maWdpdGVtIG9iamVjdAogICAgbXkgJElUU01Db25maWdpdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgIyBnZXQgYWxsIGNvbmZpZyBpdGVtcyBpZHMKICAgIG15IEBDb25maWdJdGVtSURzID0gQHsgJElUU01Db25maWdpdGVtT2JqZWN0LT5Db25maWdJdGVtU2VhcmNoKCAleyAkU2VsZi0+e1NlYXJjaENyaXRlcmlhfSB9ICkgfTsKCiAgICAjIGdldCBudW1iZXIgb2YgY29uZmlnIGl0ZW1zCiAgICBteSAkQ0lDb3VudCA9IHNjYWxhciBAQ29uZmlnSXRlbUlEczsKCiAgICAjIGdldCBjbGFzcyBhcmd1bWVudAogICAgbXkgJENsYXNzID0gJFNlbGYtPkdldE9wdGlvbignY2xhc3MnKSAvLyAnJzsKCiAgICAjIGlmIHRoZXJlIGFyZSBhbnkgQ0kgdG8gY2hlY2sKICAgIGlmICgkQ0lDb3VudCkgewoKICAgICAgICAjIGlmIHRoZSBzY29wZSB3YXMgZXhwbGljaXRlbHkgZGVmaW5lZCwgc2V0IGl0LCBvdGhlcndpc2UgdGhpcyBzY3JpcHQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlCiAgICAgICAgIyB2YWx1ZSBzZXQgaW4gU3lzQ29uZmlnCiAgICAgICAgbXkgJFNjb3BlID0gJFNlbGYtPkdldE9wdGlvbignc2NvcGUnKTsKICAgICAgICBpZiAoJFNjb3BlKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPlNldCgKICAgICAgICAgICAgICAgIEtleSAgID0+ICdVbmlxdWVDSU5hbWU6OlVuaXF1ZW5lc3NDaGVja1Njb3BlJywKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRTY29wZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkQ2xhc3MpIHsKICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkNoZWNraW5nIGNvbmZpZyBpdGVtcyBvZiBjbGFzcyAkQ2xhc3MuLi48L3llbGxvdz5cbiIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkNoZWNraW5nIGFsbCBjb25maWcgaXRlbXMuLi5cbjwveWVsbG93PlxuIik7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+UHJpbnQoICI8Z3JlZW4+IiAuICggJz0nIHggNjkgKSAuICI8L2dyZWVuPlxuIiApOwoKICAgICAgICBteSAkRHVwbGljYXRlc0ZvdW5kID0gMDsKCiAgICAgICAgIyBjaGVjayBjb25maWcgaXRlbXMKICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKEBDb25maWdJdGVtSURzKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgYXR0cmlidXRlcyBvZiB0aGlzIGNvbmZpZyBpdGVtCiAgICAgICAgICAgIG15ICRDb25maWdJdGVtID0gJElUU01Db25maWdpdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAhJENvbmZpZ0l0ZW0tPntMYXN0VmVyc2lvbklEfTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGNvbmZpZyBpdGVtCiAgICAgICAgICAgIG15ICRWZXJzaW9uID0gJElUU01Db25maWdpdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgVmVyc2lvbklEICA9PiAkQ29uZmlnSXRlbS0+e0xhc3RWZXJzaW9uSUR9LAogICAgICAgICAgICAgICAgWE1MRGF0YUdldCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRWZXJzaW9uOwoKICAgICAgICAgICAgaWYgKCAhJFZlcnNpb24tPntOYW1lfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHJlZD5Ta2lwcGluZyBDb25maWdJdGVtICRDb25maWdJdGVtSUQgYXMgaXQgZG9lc24ndCBoYXZlIGEgbmFtZS5cbjwvcmVkPlxuIik7CiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJER1cGxpY2F0ZXMgPSAkSVRTTUNvbmZpZ2l0ZW1PYmplY3QtPlVuaXF1ZU5hbWVDaGVjaygKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgID0+ICRDb25maWdJdGVtLT57Q2xhc3NJRH0sCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFZlcnNpb24tPntOYW1lfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoJER1cGxpY2F0ZXMpICkgewoKICAgICAgICAgICAgICAgICREdXBsaWNhdGVzRm91bmQgPSAxOwoKICAgICAgICAgICAgICAgIG15IEBEdXBsaWNhdGVEYXRhOwoKICAgICAgICAgICAgICAgIGZvciBteSAkRHVwbGljYXRlSUQgKCBAeyREdXBsaWNhdGVzfSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGhlICMgb2YgdGhlIGR1cGxpY2F0ZQogICAgICAgICAgICAgICAgICAgIG15ICREdXBsaWNhdGVDb25maWdJdGVtID0gJElUU01Db25maWdpdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJER1cGxpY2F0ZUlELAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIG15ICREdXBsaWNhdGVWZXJzaW9uID0gJElUU01Db25maWdpdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uSUQgPT4gJER1cGxpY2F0ZUNvbmZpZ0l0ZW0tPntMYXN0VmVyc2lvbklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBEdXBsaWNhdGVEYXRhLCAkRHVwbGljYXRlVmVyc2lvbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkU2VsZi0+UHJpbnQoCiAgICAgICAgICAgICAgICAgICAgIjx5ZWxsb3c+Q29uZmlnSXRlbSAkVmVyc2lvbi0+e051bWJlcn0gKE5hbWU6ICRWZXJzaW9uLT57TmFtZX0sIENvbmZpZ0l0ZW1JRDogIgogICAgICAgICAgICAgICAgICAgICAgICAuICIkVmVyc2lvbi0+e0NvbmZpZ0l0ZW1JRH0pIGhhcyB0aGUgZm9sbG93aW5nIGR1cGxpY2F0ZXM6PC95ZWxsb3c+XG4iCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgbGlzdCBhbGwgdGhlIGRldGFpbHMgb2YgdGhlIGR1cGxpY2F0ZXMKICAgICAgICAgICAgICAgIGZvciBteSAkRHVwbGljYXRlVmVyc2lvbiAoQER1cGxpY2F0ZURhdGEpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4iOwogICAgICAgICAgICAgICAgICAgICRTZWxmLT5QcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgIjxncmVlbj5cdCAqICREdXBsaWNhdGVWZXJzaW9uLT57TnVtYmVyfSAoQ29uZmlnSXRlbUlEOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICIkRHVwbGljYXRlVmVyc2lvbi0+e0NvbmZpZ0l0ZW1JRH0pPC9ncmVlbj5cbiIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTZWxmLT5QcmludCggIjxncmVlbj4iIC4gKCAnLScgeCA2OSApIC4gIjwvZ3JlZW4+XG4iICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkRHVwbGljYXRlc0ZvdW5kKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkZpbmlzaGVkIGNoZWNraW5nIGZvciBkdXBsaWNhdGUgbmFtZXMuXG48L2dyZWVuPlxuIik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+UHJpbnQoIjx5ZWxsb3c+Tm8gZHVwbGljYXRlIG5hbWVzIGZvdW5kLlxuPC95ZWxsb3c+XG4iKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIjx5ZWxsb3c+VGhlcmUgYXJlIE5PIGNvbmZpZyBpdGVtcyB0byBjaGVjay5cbjwveWVsbG93PlxuIik7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+RG9uZS48L2dyZWVuPlxuIik7CiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKCn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6SVRTTTo6Q29uZmlnaXRlbTo6RGVsZXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpNaWdyYXRpb25zOjpPVFJTNjo6U3lzQ29uZmlnKQoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHBhcmVudCBxdyhLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6QmFzZUNvbW1hbmQpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdEZWxldGUgY29uZmlnIGl0ZW1zIChhbGwsIGJ5IGNsYXNzIChhbmQgZGVwbG95bWVudCBzdGF0ZSkgb3IgYnkgbnVtYmVyKS4nKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2FsbCcsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkRlbGV0ZSBhbGwgY29uZmlnIGl0ZW1zLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAwLAogICAgKTsKICAgICRTZWxmLT5BZGRBcmd1bWVudCgKICAgICAgICBOYW1lICAgICAgICA9PiAnYWNjZXB0JywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiQWNjZXB0IGRlbGV0ZSBhbGwgb3IgY2FuY2VsLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8oeXxuKS9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnY2xhc3MnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJEZWxldGUgYWxsIGNvbmZpZyBpdGVtcyBvZiB0aGlzIGNsYXNzLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdkZXBsb3ltZW50LXN0YXRlJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiRGVsZXRlIGFsbCBjb25maWcgaXRlbXMgd2l0aCB0aGlzIGRlcGxveW1lbnQgc3RhdGUgKE9OTFkgVE9HRVRIRVIgd2l0aCB0aGUgLS1jbGFzcyBwYXJhbWV0ZXIpLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdjb25maWdpdGVtLW51bWJlcicsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkRlbGV0ZSBsaXN0ZWQgY29uZmlnIGl0ZW1zLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyL1xkKy9zbXgsCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdhbGwtb2xkLXZlcnNpb25zJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiRGVsZXRlIGFsbCBjb25maWcgaXRlbSB2ZXJzaW9ucyBleGNlcHQgdGhlIG5ld2VzdCB2ZXJzaW9uLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAwLAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2FsbC1idXQta2VlcC1sYXN0LXZlcnNpb25zJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiRGVsZXRlIGFsbCBjb25maWcgaXRlbSB2ZXJzaW9ucyBidXQga2VlcCB0aGUgbGFzdCBYWCB2ZXJzaW9ucy4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9cZCsvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2FsbC1vbGRlci10aGFuLWRheXMtdmVyc2lvbnMnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJEZWxldGUgYWxsIGNvbmZpZyBpdGVtIHZlcnNpb25zIG9sZGVyIHRoYW4gWFggZGF5cy4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9cZCsvc214LAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQWxsICAgICAgICAgICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdhbGwnKTsKICAgIG15ICRDbGFzcyAgICAgICAgICAgICA9ICRTZWxmLT5HZXRPcHRpb24oJ2NsYXNzJykgLy8gJyc7CiAgICBteSBAQ29uZmlnSXRlbU51bWJlcnMgPSBAeyAkU2VsZi0+R2V0T3B0aW9uKCdjb25maWdpdGVtLW51bWJlcicpIC8vIFtdIH07CiAgICBteSAkRGVwbG95bWVudFN0YXRlICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdkZXBsb3ltZW50LXN0YXRlJykgLy8gJyc7CiAgICBteSAkQWxsT2xkVmVyc2lvbnMgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdhbGwtb2xkLXZlcnNpb25zJykgLy8gJyc7CiAgICBteSAkQWxsQnV0S2VlcExhc3QgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdhbGwtYnV0LWtlZXAtbGFzdC12ZXJzaW9ucycpIC8vICcnOwogICAgbXkgJEFsbE9sZGVyVGhhbkRheXMgID0gJFNlbGYtPkdldE9wdGlvbignYWxsLW9sZGVyLXRoYW4tZGF5cy12ZXJzaW9ucycpIC8vICcnOwoKICAgIGlmICgKICAgICAgICAhJEFsbAogICAgICAgICYmICEkQ2xhc3MKICAgICAgICAmJiAhQENvbmZpZ0l0ZW1OdW1iZXJzCiAgICAgICAgJiYgISREZXBsb3ltZW50U3RhdGUKICAgICAgICAmJiAhJEFsbE9sZFZlcnNpb25zCiAgICAgICAgJiYgISRBbGxCdXRLZWVwTGFzdAogICAgICAgICYmICEkQWxsT2xkZXJUaGFuRGF5cwogICAgICAgICkKICAgIHsKICAgICAgICBkaWUKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIG9wdGlvbiAtLWFsbCwgLS1jbGFzcywgLS1jb25maWdpdGVtLW51bWJlciwgLS1hbGwtb2xkLXZlcnNpb25zLCAtLWFsbC1idXQta2VlcC1sYXN0LXZlcnNpb25zIG9yIC0tYWxsLW9sZGVyLXRoYW4tZGF5cy12ZXJzaW9ucy4iCiAgICAgICAgICAgIC4gIiBGb3IgbW9yZSBkZXRhaWxzIHVzZSAtLWhlbHBcbiI7CiAgICB9CgogICAgbXkgJEFsbE9wdGlvblR5cGVDb3VudDsKICAgIGZvciBteSAkVmFsdWUgKCAkQWxsLCAkQWxsT2xkVmVyc2lvbnMsICRBbGxCdXRLZWVwTGFzdCwgJEFsbE9sZGVyVGhhbkRheXMgKSB7CiAgICAgICAgaWYgKCRWYWx1ZSkgewogICAgICAgICAgICAkQWxsT3B0aW9uVHlwZUNvdW50Kys7CiAgICAgICAgfQogICAgfQogICAgaWYgKCAkQWxsT3B0aW9uVHlwZUNvdW50ID4gMSApIHsKICAgICAgICBkaWUKICAgICAgICAgICAgIlRoZSBvcHRpb25zIC0tYWxsLCAtLWFsbC1vbGQtdmVyc2lvbnMsIC0tYWxsLWJ1dC1rZWVwLWxhc3QtdmVyc2lvbnMgYW5kIC0tYWxsLW9sZGVyLXRoYW4tZGF5cy12ZXJzaW9ucyBjYW4gbm90IGJlIG1peGVkLiBcbkZvciBtb3JlIGRldGFpbHMgdXNlIC0taGVscFxuIjsKICAgIH0KICAgIGlmICggJEFsbE9wdGlvblR5cGVDb3VudCAmJiAoICRDbGFzcyB8fCBAQ29uZmlnSXRlbU51bWJlcnMgfHwgJERlcGxveW1lbnRTdGF0ZSApICkgewogICAgICAgIGRpZQogICAgICAgICAgICAiVGhlIG9wdGlvbnMgLS1hbGwsIC0tYWxsLW9sZC12ZXJzaW9ucywgLS1hbGwtYnV0LWtlZXAtbGFzdC12ZXJzaW9ucyBhbmQgLS1hbGwtb2xkZXItdGhhbi1kYXlzLXZlcnNpb25zIGNhbiBub3QgdXNlZCB0b2dldGhlciB3aXRoIGFueSBvdGhlciBvcHRpb24uIFxuRm9yIG1vcmUgZGV0YWlscyB1c2UgLS1oZWxwXG4iOwogICAgfQoKICAgIGlmICggJERlcGxveW1lbnRTdGF0ZSAmJiAhJENsYXNzICkgewogICAgICAgIGRpZQogICAgICAgICAgICAiRGVsZXRpbmcgYWxsIGNvbmZpZyBpdGVtcyB3aXRoIHRoaXMgZGVwbG95bWVudCBzdGF0ZSBpcyBwb3NpYmxlIE9OTFkgVE9HRVRIRVIgd2l0aCB0aGUgLS1jbGFzcyBwYXJhbWV0ZXIuIFxuRm9yIG1vcmUgZGV0YWlscyB1c2UgLS1oZWxwXG4iOwogICAgfQoKICAgIGlmICggQENvbmZpZ0l0ZW1OdW1iZXJzICYmICggJENsYXNzIHx8ICREZXBsb3ltZW50U3RhdGUgKSApIHsKICAgICAgICBkaWUKICAgICAgICAgICAgIlRoZSBvcHRpb24gLS1jb25maWdpdGVtLW51bWJlciBjYW4gbm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgLS1jbGFzcyBvciB0aGUgLS1kZXBsb3ltZW50LXN0YXRlIHBhcmFtZXRlci4gXG5Gb3IgbW9yZSBkZXRhaWxzIHVzZSAtLWhlbHBcbiI7CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkRlbGV0aW5nIGNvbmZpZyBpdGVtcy4uLjwveWVsbG93PlxuXG4iKTsKCiAgICBteSAkQWxsICAgICAgICAgICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdhbGwnKTsKICAgIG15ICRDbGFzcyAgICAgICAgICAgICA9ICRTZWxmLT5HZXRPcHRpb24oJ2NsYXNzJykgLy8gJyc7CiAgICBteSBAQ29uZmlnSXRlbU51bWJlcnMgPSBAeyAkU2VsZi0+R2V0T3B0aW9uKCdjb25maWdpdGVtLW51bWJlcicpIC8vIFtdIH07CiAgICBteSAkRGVwbG95bWVudFN0YXRlICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdkZXBsb3ltZW50LXN0YXRlJykgLy8gJyc7CiAgICBteSAkQWxsT2xkVmVyc2lvbnMgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdhbGwtb2xkLXZlcnNpb25zJykgLy8gJyc7CiAgICBteSAkQWxsQnV0S2VlcExhc3QgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdhbGwtYnV0LWtlZXAtbGFzdC12ZXJzaW9ucycpIC8vICcnOwogICAgbXkgJEFsbE9sZGVyVGhhbkRheXMgID0gJFNlbGYtPkdldE9wdGlvbignYWxsLW9sZGVyLXRoYW4tZGF5cy12ZXJzaW9ucycpIC8vICcnOwoKICAgICMgZGVsZXRlIGFsbCBjb25maWcgaXRlbXMKICAgIGlmICgkQWxsKSB7CgogICAgICAgICMgZ2V0IGFsbCBjb25maWcgaXRlbXMgaWRzCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1JRHMgPSBAeyAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbVNlYXJjaCgpIH07CgogICAgICAgICMgZ2V0IG51bWJlciBvZiBjb25maWcgaXRlbXMKICAgICAgICBteSAkQ0lDb3VudCA9IHNjYWxhciBAQ29uZmlnSXRlbUlEczsKCiAgICAgICAgIyBpZiB0aGVyZSBhcmUgYW55IENJIHRvIGRlbGV0ZQogICAgICAgIGlmICgkQ0lDb3VudCkgewoKICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSBBTEwgJENJQ291bnQgY29uZmlnIGl0ZW1zPzwveWVsbG93PlxuIik7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5UaGlzIGlzIGlycmV2b2NhYmxlLiBbeS9uXSA8L3llbGxvdz5cbiIpOwogICAgICAgICAgICBteSAkQ29uZmlybWF0aW9uID0gJFNlbGYtPkdldEFyZ3VtZW50KCdhY2NlcHQnKTsKICAgICAgICAgICAgY2hvbXAoICRDb25maXJtYXRpb24gPSBsYyA8U1RESU4+ICkgaWYgIWRlZmluZWQgJENvbmZpcm1hdGlvbjsKCiAgICAgICAgICAgICMgaWYgdGhlIHVzZXIgY29uZmlybXMgdGhlIGRlbGV0aW9uCiAgICAgICAgICAgIGlmICggJENvbmZpcm1hdGlvbiBlcSAneScgKSB7CgogICAgICAgICAgICAgICAgIyBkZWxldGUgY29uZmlnIGl0ZW1zCiAgICAgICAgICAgICAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5EZWxldGluZyBhbGwgY29uZmlnIGl0ZW1zLi4uPC9ncmVlbj5cbiIpOwogICAgICAgICAgICAgICAgJFNlbGYtPkRlbGV0ZUNvbmZpZ0l0ZW1zKCBDb25maWdJdGVtSURzID0+IFxAQ29uZmlnSXRlbUlEcyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkNvbW1hbmQgZGVsZXRlIHdhcyBjYW5jZWxlZDwveWVsbG93PlxuIik7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PlRoZXJlIGFyZSBOTyBjb25maWcgaXRlbXMgdG8gZGVsZXRlLjwveWVsbG93PlxuIik7CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIGxpc3RlZCBjb25maWcgaXRlbXMKICAgIGVsc2lmICggSXNBcnJheVJlZldpdGhEYXRhKCBcQENvbmZpZ0l0ZW1OdW1iZXJzICkgKSB7CgogICAgICAgIG15IEBDb25maWdJdGVtSURzOwoKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1OdW1iZXIgKEBDb25maWdJdGVtTnVtYmVycykgewoKICAgICAgICAgICAgIyBjaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb25maWcgaXRlbSBpZAogICAgICAgICAgICBteSAkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbUxvb2t1cCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1OdW1iZXIgPT4gJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJElEKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkSUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+UHJpbnQoIjx5ZWxsb3c+VW5hYmxlIHRvIGZpbmQgY29uZmlnIGl0ZW0gJENvbmZpZ0l0ZW1OdW1iZXIuPC95ZWxsb3c+XG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgY29uZmlnIGl0ZW1zIChpZiBhbnkgdmFsaWQgbnVtYmVyIHdhcyBnaXZlbikKICAgICAgICBpZiAoQENvbmZpZ0l0ZW1JRHMpIHsKICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkRlbGV0aW5nIHNwZWNpZmllZCBjb25maWcgaXRlbXMuLi48L3llbGxvdz5cbiIpOwogICAgICAgICAgICAkU2VsZi0+RGVsZXRlQ29uZmlnSXRlbXMoIENvbmZpZ0l0ZW1JRHMgPT4gXEBDb25maWdJdGVtSURzICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIGNvbmZpZyBpdGVtcyB0aGF0IGJlbG9uZyB0byB0aGUgY2xhc3MKICAgIGVsc2lmICgkQ2xhc3MpIHsKCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1JRHM7CgogICAgICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgICAgICBteSAkQ2xhc3NMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICBWYWxpZCA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgaW52ZXJ0IHRoZSBoYXNoIHRvIGhhdmUgdGhlIGNsYXNzZXMgbmFtZXMgYXMga2V5cwogICAgICAgIG15ICVDbGFzc05hbWUySUQgPSByZXZlcnNlICV7JENsYXNzTGlzdH07CgogICAgICAgIGlmICggJENsYXNzTmFtZTJJRHskQ2xhc3N9ICkgewogICAgICAgICAgICBteSAkSUQgPSAkQ2xhc3NOYW1lMklEeyRDbGFzc307CgogICAgICAgICAgICAjIGRlZmluZSB0aGUgc2VhcmNoIHBhcmFtIGZvciB0aGUgY2xhc3Mgc2VhcmNoCiAgICAgICAgICAgIG15ICVTZWFyY2hQYXJhbSA9ICgKICAgICAgICAgICAgICAgIENsYXNzSURzID0+IFskSURdLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhbHNvIGEgZGVwbG95bWVudCBzdGF0ZSBpcyBnaXZlbgogICAgICAgICAgICBpZiAoJERlcGxveW1lbnRTdGF0ZSkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgICAgICAgICAgICAgbXkgJERlcGxveW1lbnRTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgaW52ZXJ0IHRoZSBoYXNoIHRvIGhhdmUgdGhlIGRlcGxveW1lbnQgc3RhdGUgbmFtZXMgYXMga2V5cwogICAgICAgICAgICAgICAgbXkgJURlcGxveW1lbnRTdGF0ZTJJRCA9IHJldmVyc2UgJXskRGVwbG95bWVudFN0YXRlTGlzdH07CgogICAgICAgICAgICAgICAgIyBpZiB0aGUgZGVwbG95bWVudCBzdGF0ZSBpcyB2YWxpZAogICAgICAgICAgICAgICAgaWYgKCAkRGVwbG95bWVudFN0YXRlMklEeyREZXBsb3ltZW50U3RhdGV9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgZGVwbG95bWVudCBzdGF0ZSBpZAogICAgICAgICAgICAgICAgICAgIG15ICRJRCA9ICREZXBsb3ltZW50U3RhdGUySUR7JERlcGxveW1lbnRTdGF0ZX07CgogICAgICAgICAgICAgICAgICAgICMgYWRkIHNlYXJjaCBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgICAgICAkU2VhcmNoUGFyYW17RGVwbFN0YXRlSURzfSA9IFskSURdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlVuYWJsZSB0byBmaW5kIGRlcGxveW1lbnQgc3RhdGUgJERlcGxveW1lbnRTdGF0ZS4iKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlRXJyb3IoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgaWRzIG9mIHRoaXMgY2xhc3MgKGFuZCBtYXliZSBkZXBsb3ltZW50IHN0YXRlKSBjb25maWcgaXRlbXMKICAgICAgICAgICAgQENvbmZpZ0l0ZW1JRHMgPSBAewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPkNvbmZpZ0l0ZW1TZWFyY2goJVNlYXJjaFBhcmFtKQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlVuYWJsZSB0byBmaW5kIGNsYXNzIG5hbWUgJENsYXNzLiIpOwogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlRXJyb3IoKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIGNvbmZpZyBpdGVtcyAoaWYgYW55IHZhbGlkIG51bWJlciB3YXMgZ2l2ZW4pCiAgICAgICAgaWYgKEBDb25maWdJdGVtSURzKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5EZWxldGluZyBjb25maWcgaXRlbXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNsYXNzICRDbGFzcy4uLjwveWVsbG93PlxuIik7CiAgICAgICAgICAgICRTZWxmLT5EZWxldGVDb25maWdJdGVtcyggQ29uZmlnSXRlbUlEcyA9PiBcQENvbmZpZ0l0ZW1JRHMgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5UaGVyZSBhcmUgbm8gY29uZmlnIGl0ZW1zIHRoYXQgYmVsb25nIHRvIHRoZSBjbGFzcyAkQ2xhc3MuLi48L3llbGxvdz5cbiIpOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSB2ZXJzaW9ucyBvbGRlciB0aGFuIHh4IGRheXMgZnJvbSBhbGwgY29uZmlnIGl0ZW1zCiAgICBlbHNpZiAoJEFsbE9sZGVyVGhhbkRheXMpIHsKCiAgICAgICAgbXkgJE9sZGVyRGF0ZURUT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICAgICAgJE9sZGVyRGF0ZURUT2JqZWN0LT5TdWJ0cmFjdCgKICAgICAgICAgICAgRGF5cyA9PiAkQWxsT2xkZXJUaGFuRGF5cywKICAgICAgICApOwoKICAgICAgICBteSAkVmVyc2lvbnNPbGRlckRhdGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+VmVyc2lvbkxpc3RBbGwoCiAgICAgICAgICAgIE9sZGVyRGF0ZSA9PiAkT2xkZXJEYXRlRFRPYmplY3QtPlRvU3RyaW5nKCksCiAgICAgICAgKTsKCiAgICAgICAgIyBXZSBuZWVkIHRvIGdldCBhbGwgdmVyc2lvbnMgdG8gbWFrZSBzdXJlIHRoYXQgYXQgbGVhc3Qgb25lIHZlcnNpb24gcmVtYWlucwogICAgICAgICMgLT4gaWYgb25lIHZlcnNpb24gb2YgYSBjb25maWdpdGVtIGlzIHlvdW5nZXIgdGhhbiB0aGUgYW1vdW50IG9mIGRheXMsCiAgICAgICAgIyAgICB3ZSBjYW4gZGVsZXRlIGFsbCBWZXJzaW9ucyByZWNlaXZlZCBieSB0aGUgIk9sZGVyRGF0ZSIgcXVlcnkKICAgICAgICAjIC0+IGlmIG5vIHZlcnNpb24gaXMgeW91bmdlciB0aGFuIHRoZSBhbW91bnQgb2YgZGF5cwogICAgICAgICMgICAgd2UgaGF2ZSB0byBrZWVwIG9uZSB2ZXJzaW9uIG9mIHRoZSAiT2xkZXJEYXRlIiBxdWVyeSByZXN1bHQKICAgICAgICBteSAkVmVyc2lvbnNBbGwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+VmVyc2lvbkxpc3RBbGwoKTsKCiAgICAgICAgbXkgQFZlcnNpb25zVG9EZWxldGU7CgogICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQga2V5cyAleyRWZXJzaW9uc09sZGVyRGF0ZX0gKSB7CgogICAgICAgICAgICAjIG51bWJlciBvZiBmb3VuZCBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIENJCiAgICAgICAgICAgIG15ICROdW1iZXJPZk9sZGVyVmVyc2lvbnMgPSBzY2FsYXIga2V5cyAleyAkVmVyc2lvbnNPbGRlckRhdGUtPnskQ29uZmlnSXRlbUlEfSB9OwoKICAgICAgICAgICAgIyBudW1iZXIgb2YgYWxsIHZlcnNpb25zIG9mIHRoaXMgQ0kKICAgICAgICAgICAgbXkgJE51bWJlck9mQWxsVmVyc2lvbnMgPSBzY2FsYXIga2V5cyAleyAkVmVyc2lvbnNBbGwtPnskQ29uZmlnSXRlbUlEfSB9OwoKICAgICAgICAgICAgIyBuZXh0IGlmIHRoZXJlIGFyZSBubyBvbGRlciB2ZXJzaW9ucwogICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAhJE51bWJlck9mT2xkZXJWZXJzaW9uczsKCiAgICAgICAgICAgICMgbmV4dCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBvciB6ZXJvIG9mIGFsbCB2ZXJzaW9ucwogICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkTnVtYmVyT2ZBbGxWZXJzaW9ucyA8PSAxOwoKICAgICAgICAgICAgIyBpZiB0aGUgYW1vdW50IG9mIFZlcnNpb25zIHdlIGhhdmUgdG8gZGVsZXRlCiAgICAgICAgICAgICMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgYW1vdW50IG9mIEFsbFZlcnNpb25zCiAgICAgICAgICAgICMgd2UgaGF2ZSB0byBrZWVwIHRoZSBsYXN0IG9uZQogICAgICAgICAgICAjIGluIG9yZGVyIHRvIGtlZXAgdGhlIHN5c3RlbSB3b3JraW5nCiAgICAgICAgICAgICMKICAgICAgICAgICAgIyAtPiBzbyBsZXQncyBzdGFydCBjb3VudGluZyBhdCAiMSIgaW5zdGVhZCBvZiAiMCIKICAgICAgICAgICAgIyBpbiBvcmRlciB0byBzdG9wIGRlbGV0aW5nIGJlZm9yZSB3ZSByZWFjaCB0aGUgbmV3ZXN0IHZlcnNpb24KICAgICAgICAgICAgbXkgJENvdW50ID0gMDsKICAgICAgICAgICAgaWYgKCAkTnVtYmVyT2ZPbGRlclZlcnNpb25zID09ICROdW1iZXJPZkFsbFZlcnNpb25zICkgewogICAgICAgICAgICAgICAgJENvdW50ID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgdmVyc2lvbnMgYXJlIG51bWVyaWNhbGx5IHNvcnRlZAogICAgICAgICAgICBmb3IgbXkgJFZlcnNpb24gKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAleyAkVmVyc2lvbnNPbGRlckRhdGUtPnskQ29uZmlnSXRlbUlEfSB9ICkgewoKICAgICAgICAgICAgICAgIGlmICggJENvdW50IDwgJE51bWJlck9mT2xkZXJWZXJzaW9ucyApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBWZXJzaW9uc1RvRGVsZXRlLCAkVmVyc2lvbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+RGVsZXRlQ29uZmlnSXRlbVZlcnNpb25zKAogICAgICAgICAgICBWZXJzaW9uSURzID0+IFxAVmVyc2lvbnNUb0RlbGV0ZSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBkZWxldGUgYWxsIGNvbmZpZyBpdGVtIHZlcnNpb25zIGV4Y2VwdCB0aGUgbmV3ZXN0IHZlcnNpb24KICAgIGVsc2lmICgkQWxsT2xkVmVyc2lvbnMpIHsKCiAgICAgICAgbXkgJFZlcnNpb25zQWxsID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPlZlcnNpb25MaXN0QWxsKCk7CgogICAgICAgIG15IEBWZXJzaW9uc1RvRGVsZXRlOwogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJFZlcnNpb25zQWxsKSApIHsKCiAgICAgICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBzb3J0IGtleXMgJXskVmVyc2lvbnNBbGx9ICkgewoKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggJFZlcnNpb25zQWxsLT57JENvbmZpZ0l0ZW1JRH0gKTsKCiAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IHRoZSB2ZXJzaW9ucyBhcmUgbnVtZXJpY2FsbHkgc29ydGVkCiAgICAgICAgICAgICAgICBteSBAUmVkdWNlZFZlcnNpb25zID0gc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJXsgJFZlcnNpb25zQWxsLT57JENvbmZpZ0l0ZW1JRH0gfTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSB0aGUgbGFzdCAobmV3ZXN0KSB2ZXJzaW9uCiAgICAgICAgICAgICAgICBwb3AgQFJlZHVjZWRWZXJzaW9uczsKCiAgICAgICAgICAgICAgICBwdXNoIEBWZXJzaW9uc1RvRGVsZXRlLCBAUmVkdWNlZFZlcnNpb25zOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+RGVsZXRlQ29uZmlnSXRlbVZlcnNpb25zKAogICAgICAgICAgICBWZXJzaW9uSURzID0+IFxAVmVyc2lvbnNUb0RlbGV0ZSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBkZWxldGUgYWxsIGNvbmZpZyBpdGVtIHZlcnNpb25zIGJ1dCBrZWVwIHRoZSBsYXN0IFhYIHZlcnNpb25zCiAgICBlbHNpZiAoJEFsbEJ1dEtlZXBMYXN0KSB7CgogICAgICAgIG15ICRWZXJzaW9uc0FsbCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5WZXJzaW9uTGlzdEFsbCgpOwoKICAgICAgICBteSBAVmVyc2lvbnNUb0RlbGV0ZTsKCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkVmVyc2lvbnNBbGwpICkgewoKICAgICAgICAgICAgQ09ORklHSVRFTUlEOgogICAgICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQga2V5cyAleyRWZXJzaW9uc0FsbH0gKSB7CgogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCAkVmVyc2lvbnNBbGwtPnskQ29uZmlnSXRlbUlEfSApOwoKICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIHZlcnNpb25zIGFyZSBudW1lcmljYWxseSByZXZlcnNlIHNvcnRlZAogICAgICAgICAgICAgICAgbXkgQFJlZHVjZWRWZXJzaW9ucyA9IHJldmVyc2Ugc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJXsgJFZlcnNpb25zQWxsLT57JENvbmZpZ0l0ZW1JRH0gfTsKCiAgICAgICAgICAgICAgICBteSAkQ291bnQgPSAwOwogICAgICAgICAgICAgICAgQFJlZHVjZWRWZXJzaW9ucyA9IGdyZXAgeyAkQ291bnQrKzsgJENvdW50ID4gJEFsbEJ1dEtlZXBMYXN0IH0gQFJlZHVjZWRWZXJzaW9uczsKICAgICAgICAgICAgICAgIHB1c2ggQFZlcnNpb25zVG9EZWxldGUsIEBSZWR1Y2VkVmVyc2lvbnM7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRTZWxmLT5EZWxldGVDb25maWdJdGVtVmVyc2lvbnMoCiAgICAgICAgICAgIFZlcnNpb25JRHMgPT4gXEBWZXJzaW9uc1RvRGVsZXRlLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5QcmludEVycm9yKCJObyBjb25maWcgaXRlbSBmb3IgZGVsZXRlLiIpOwogICAgfQoKICAgICMgc2hvdyBzdWNjZXNzZnVsbCBvdXRwdXQKICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkRvbmUuPC9ncmVlbj5cbiIpOwogICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZU9rKCk7Cn0KCnN1YiBEZWxldGVDb25maWdJdGVtcyB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkRGVsZXRlZENJOwoKICAgICMgZGVsZXRlIHNwZWNpZmllZCBjb25maWcgaXRlbXMKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggQHsgJFBhcmFte0NvbmZpZ0l0ZW1JRHN9IH0gKSB7CiAgICAgICAgbXkgJFRydWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbURlbGV0ZSgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJFRydWUgKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludEVycm9yKCJVbmFibGUgdG8gZGVsZXRlIGNvbmZpZyBpdGVtIHdpdGggaWQgJENvbmZpZ0l0ZW1JRC4iKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICREZWxldGVkQ0krKzsKICAgICAgICB9CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+RGVsZXRlZCAkRGVsZXRlZENJIGNvbmZpZyBpdGVtKHMpLjwvZ3JlZW4+XG5cbiIpOwoKICAgIHJldHVybiAxOwp9CgpzdWIgRGVsZXRlQ29uZmlnSXRlbVZlcnNpb25zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17VmVyc2lvbklEc30gKTsKCiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5EZWxldGluZyBjb25maWcgaXRlbSB2ZXJzaW9ucy48L2dyZWVuPlxuXG4iKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+VmVyc2lvbkRlbGV0ZSgKICAgICAgICBWZXJzaW9uSURzID0+ICRQYXJhbXtWZXJzaW9uSURzfSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6Ok1pZ3JhdGlvbnM6Ok9UUlM2OjpTeXNDb25maWcpCgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpCYXNlQ29tbWFuZCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnLAopOwoKc3ViIENvbmZpZ3VyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5EZXNjcmlwdGlvbignUmVjYWxjdWxhdGVzIHRoZSBpbmNpZGVudCBzdGF0ZSBvZiBjb25maWcgaXRlbXMuJyk7CgogICAgcmV0dXJuOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PlJlY2FsY3VsYXRpbmcgdGhlIGluY2lkZW50IHN0YXRlIG9mIGNvbmZpZyBpdGVtcy4uLjwveWVsbG93PlxuXG4iKTsKCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgZ2V0IHRoZSB2YWxpZCBjbGFzcyBpZHMKICAgIG15IEBWYWxpZENsYXNzSURzID0gc29ydCBrZXlzICV7JENsYXNzTGlzdH07CgogICAgIyBnZXQgYWxsIGNvbmZpZyBpdGVtcyBpZHMgZm9ybSBhbGwgdmFsaWQgY2xhc3NlcwogICAgbXkgJENvbmZpZ0l0ZW1zSURzUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPkNvbmZpZ0l0ZW1TZWFyY2goCiAgICAgICAgQ2xhc3NJRHMgPT4gXEBWYWxpZENsYXNzSURzLAogICAgKTsKCiAgICAjIGdldCBudW1iZXIgb2YgY29uZmlnIGl0ZW1zCiAgICBteSAkQ0lDb3VudCA9IHNjYWxhciBAeyRDb25maWdJdGVtc0lEc1JlZn07CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PlJlY2FsY3VsYXRpbmcgaW5jaWRlbnQgc3RhdGUgZm9yICRDSUNvdW50IGNvbmZpZyBpdGVtcy48L3llbGxvdz5cbiIpOwoKICAgICMgUmVtZW1iZXIgY29uZmlnIGl0ZW0gcmVzdWx0cyB0aHJvdWdoIG11bHRpcGxlIHJ1bnMgb2YgQ3VySW5jaVN0YXRlUmVjYWxjKCkuCiAgICBteSAlTmV3Q29uZmlnSXRlbUluY2lkZW50U3RhdGU7CiAgICBteSAlU2Nhbm5lZENvbmZpZ0l0ZW1JRHM7CgogICAgbXkgJENvdW50ID0gMDsKICAgIENPTkZJR0lURU06CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIEB7JENvbmZpZ0l0ZW1zSURzUmVmfSApIHsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q3VySW5jaVN0YXRlUmVjYWxjKAogICAgICAgICAgICBDb25maWdJdGVtSUQgICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBOZXdDb25maWdJdGVtSW5jaWRlbnRTdGF0ZSA9PiBcJU5ld0NvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlLAogICAgICAgICAgICBTY2FubmVkQ29uZmlnSXRlbUlEcyAgICAgICA9PiBcJVNjYW5uZWRDb25maWdJdGVtSURzLAogICAgICAgICk7CgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAkU2VsZi0+UHJpbnQoIjxyZWQ+Li4uIGNvdWxkIG5vdCByZWNhbGN1bGF0ZSBpbmNpZGVudCBzdGF0ZSBmb3IgY29uZmlnIGl0ZW0gaWQgJyRDb25maWdJdGVtSUQnITwvcmVkPlxuIik7CiAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTTsKICAgICAgICB9CgogICAgICAgICRDb3VudCsrOwoKICAgICAgICBpZiAoICRDb3VudCAlIDEwMCA9PSAwICkgewogICAgICAgICAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj4uLi4gJENvdW50IGNvbmZpZyBpdGVtcyByZWNhbGN1bGF0ZWQuPC9ncmVlbj5cbiIpOwogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+UHJpbnQoIlxuPGdyZWVuPlJlYWR5LiBSZWNhbGN1bGF0ZWQgJENvdW50IGNvbmZpZyBpdGVtcy48L2dyZWVuPlxuXG4iKTsKCiAgICAjIGdldCBzZXJ2aWNlIG9iamVjdAogICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKICAgICMgZ2V0IGxpc3Qgb2YgYWxsIHNlcnZpY2VzICh2YWxpZCBhbmQgaW52YWxpZCkKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgbXkgJE51bWJlck9mU2VydmljZXMgPSBzY2FsYXIga2V5cyAlU2VydmljZUxpc3Q7CgogICAgJFNlbGYtPlByaW50KAogICAgICAgICI8Z3JlZW4+UmVzZXR0aW5nIFNlcnZpY2VQcmVmZXJlbmNlcyAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnIGZvciAkTnVtYmVyT2ZTZXJ2aWNlcyBzZXJ2aWNlcy4uLjwvZ3JlZW4+XG4iCiAgICApOwoKICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdCApIHsKCiAgICAgICAgIyB1cGRhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgdHlwZSBmcm9tIENJcyBvZiB0aGUgc2VydmljZSB3aXRoIGFuIGVtcHR5IHZhbHVlCiAgICAgICAgIyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBmb3JjZSBhIHJlY2FsY3VsYXRpb24gb24gYSBTZXJ2aWNlR2V0KCkKICAgICAgICAkU2VydmljZU9iamVjdC0+U2VydmljZVByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAnJywKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5SZWFkeS48L2dyZWVuPlxuIik7CiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKCn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6SVRTTTo6Q29uZmlnaXRlbTo6RGVmaW5pdGlvblBlcmwyWUFNTDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpZQU1MJywKKTsKCnN1YiBDb25maWd1cmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+RGVzY3JpcHRpb24oJ0NvbnZlcnQgY29uZmlnIGl0ZW1zIGRlZmluaXRpb25zIGZyb20gbGVnYWN5IFBlcmwgY29kZSB0byBhIFlBTUwgc3RydWN0dXJlLicpOwoKICAgIHJldHVybjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5Db252ZXJ0aW5nIGNvbmZpZyBpdGVtIGRlZmluaXRpb25zLi4uPC95ZWxsb3c+XG5cbiIpOwoKICAgIG15ICRDbGFzc0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICBWYWxpZCA9PiAwLAoKICAgICAgICAjUHJlZmVyZW5jZXMgICA9PiB7IH0sCiAgICApOwoKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICIKICAgICAgICAgICAgU0VMRUNUIGlkLCBjbGFzc19pZCwgY29uZmlnaXRlbV9kZWZpbml0aW9uLCB2ZXJzaW9uCiAgICAgICAgICAgIEZST00gY29uZmlnaXRlbV9kZWZpbml0aW9uCiAgICAgICAgICAgIFdIRVJFIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbiBOT1QgTElLRSAnLS0tJScKICAgICAgICAgICAgT1JERVIgQlkgY2xhc3NfaWQgQVNDLCB2ZXJzaW9uIEFTQyIsCiAgICApOwoKICAgIG15IEBEZWZpbml0aW9uTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJURlZmluaXRpb247CiAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvbklEfSA9ICRSb3dbMF07CiAgICAgICAgJERlZmluaXRpb257Q2xhc3NJRH0gICAgICA9ICRSb3dbMV07CiAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvbn0gICA9ICRSb3dbMl07CiAgICAgICAgJERlZmluaXRpb257VmVyc2lvbn0gICAgICA9ICRSb3dbM107CgogICAgICAgIHB1c2ggQERlZmluaXRpb25MaXN0LCBcJURlZmluaXRpb247CiAgICB9CgogICAgaWYgKCAhc2NhbGFyIEBEZWZpbml0aW9uTGlzdCApIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIiAgTm8gY29uZmlnIGl0ZW1zIHVzaW5nIGxlZ2FjeSBQZXJsIGNvZGUgZm91bmRcblxuIik7CgogICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkRvbmUuPC9ncmVlbj5cbiIpOwogICAgICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVPaygpOwogICAgfQoKICAgIG15ICRTdWNjZXNzICAgID0gMTsKICAgIG15ICRZQU1MT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OllBTUwnKTsKCiAgICBERUZJTklUSU9OOgogICAgZm9yIG15ICREZWZpbml0aW9uIChARGVmaW5pdGlvbkxpc3QpIHsKCiAgICAgICAgbXkgJEN1cnJlbnRSZWNvcmQKICAgICAgICAgICAgPSAiICAgUHJvY2Vzc2luZyBkZWZpbml0aW9uIGZvciBjbGFzczogPHllbGxvdz4kQ2xhc3NMaXN0LT57ICREZWZpbml0aW9uLT57Q2xhc3NJRH0gfTwveWVsbG93PiB2ZXJzaW9uOiA8eWVsbG93PiREZWZpbml0aW9uLT57VmVyc2lvbn08L3llbGxvdz4uLi4iOwoKICAgICAgICAjIFRyeSB0byBldmFsdWF0ZSBwZXJsIHN0cnVjdHVyZS4KICAgICAgICBteSAkUGVybFN0cnVjdHVyZSA9IGV2YWwgJERlZmluaXRpb24tPntEZWZpbml0aW9ufTsgICAgIyMgbm8gY3JpdGljCiAgICAgICAgaWYgKCRAKSB7CiAgICAgICAgICAgIG15ICRFcnJvciA9ICRAOwogICAgICAgICAgICAkU2VsZi0+UHJpbnQoIiRDdXJyZW50UmVjb3JkIDxyZWQ+RmFpbGVkIGV2YWx1YXRlIHBlcmwgc3RydWN0dXJlOiAkRXJyb3I8L3JlZD5cbiIpOwogICAgICAgICAgICAkU3VjY2VzcyA9IDA7CiAgICAgICAgICAgIG5leHQgREVGSU5JVElPTjsKICAgICAgICB9CgogICAgICAgICMgVHJ5IHRvIGNvbnZlcnQgZnJvbSBQZXJsIHRvIFlBTUwuCiAgICAgICAgbXkgJFlBTUxTdHIgPSAkWUFNTE9iamVjdC0+RHVtcCgKICAgICAgICAgICAgRGF0YSA9PiAkUGVybFN0cnVjdHVyZSwKICAgICAgICApOwogICAgICAgIGlmICggISRZQU1MU3RyICkgewogICAgICAgICAgICAkU2VsZi0+UHJpbnQoIiRDdXJyZW50UmVjb3JkIDxyZWQ+RmFpbGVkIHRvIGNvbnZlcnQgdG8gWUFNTDwvcmVkPlxuIik7CiAgICAgICAgICAgICRTdWNjZXNzID0gMDsKICAgICAgICAgICAgbmV4dCBERUZJTklUSU9OOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgVVBEQVRFIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgU0VUIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbiA9ID8KICAgICAgICAgICAgICAgIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFlBTUxTdHIsIFwkRGVmaW5pdGlvbi0+e0RlZmluaXRpb25JRH0gXSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+UHJpbnQoIiRDdXJyZW50UmVjb3JkIDxncmVlbj5PSzwvZ3JlZW4+XG4iKTsKCiAgICB9CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlxuVW5hYmxlIHRvIGNvbnZlcnQgYWxsIGNvbmZpZyBpdGVtIGRlZmluaXRpb25zLiIpOwogICAgICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVFcnJvcigpOwogICAgfQoKICAgICRTZWxmLT5QcmludCgiXG48Z3JlZW4+RG9uZS48L2dyZWVuPlxuIik7CiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OklUU01Db25maWdJdGVtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIExpc3Q6OlV0aWwgcXcobWluKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpJVFNNQ29uZmlnSXRlbSAtIGltcG9ydC9leHBvcnQgYmFja2VuZCBmb3IgSVRTTUNvbmZpZ0l0ZW0KCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGZ1bmN0aW9ucyB0byBpbXBvcnQgYW5kIGV4cG9ydCBJVFNNIGNvbmZpZyBpdGVtcy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6SVRTTUNvbmZpZ0l0ZW0nKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgT2JqZWN0QXR0cmlidXRlc0dldCgpCgpnZXQgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIG9mIGFuIG9iamVjdCBhcyBhIHJlZiB0byBhbiBhcnJheSBvZiBoYXNoIHJlZmVyZW5jZXMKCiAgICBteSAkQXR0cmlidXRlcyA9ICRPYmplY3RCYWNrZW5kLT5PYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0CiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKSB8fCB7fTsKCiAgICBteSAkQXR0cmlidXRlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDbGFzc0lEJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdDbGFzcycpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJENsYXNzTGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0NvdW50TWF4JywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCcpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+ICcxMCcsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlZ2V4ICAgICAgICA9PiBxcnsgXEEgXGQrIFx6IH14bXMsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoICAgID0+IDUsCiAgICAgICAgICAgICAgICBEYXRhVHlwZSAgICAgPT4gJ0ludGVnZXJCaWdnZXJUaGFuWmVybycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICBdOwoKICAgIHJldHVybiAkQXR0cmlidXRlczsKfQoKPWhlYWQyIE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KCkKCmdldCB0aGUgbWFwcGluZyBhdHRyaWJ1dGVzIG9mIGFuIG9iamVjdCBhcyBhcnJheS9oYXNoIHJlZmVyZW5jZQoKICAgIG15ICRBdHRyaWJ1dGVzID0gJE9iamVjdEJhY2tlbmQtPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG9iamVjdCBkYXRhCiAgICBteSAkT2JqZWN0RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKS0+T2JqZWN0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gW10gaWYgISRPYmplY3REYXRhOwogICAgcmV0dXJuIFtdIGlmIHJlZiAkT2JqZWN0RGF0YSBuZSAnSEFTSCc7CiAgICByZXR1cm4gW10gaWYgISRPYmplY3REYXRhLT57Q2xhc3NJRH07CgogICAgIyBnZXQgZGVmaW5pdGlvbgogICAgbXkgJFhNTERlZmluaXRpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+RGVmaW5pdGlvbkdldCgKICAgICAgICBDbGFzc0lEID0+ICRPYmplY3REYXRhLT57Q2xhc3NJRH0sCiAgICApOwoKICAgIHJldHVybiBbXSBpZiAhJFhNTERlZmluaXRpb247CiAgICByZXR1cm4gW10gaWYgcmVmICRYTUxEZWZpbml0aW9uIG5lICdIQVNIJzsKICAgIHJldHVybiBbXSBpZiAhJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfTsKICAgIHJldHVybiBbXSBpZiByZWYgJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfSBuZSAnQVJSQVknOwoKICAgIG15ICRFbGVtZW50TGlzdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdOdW1iZXInLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ051bWJlcicpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnTmFtZScsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnTmFtZScpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdEZXBsb3ltZW50IFN0YXRlJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ0luY2lkZW50IFN0YXRlJyksCiAgICAgICAgfSwKICAgIF07CgogICAgIyBhZGQgeG1sIGVsZW1lbnRzCiAgICAkU2VsZi0+X01hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFhNTERlZmluaXRpb24gPT4gJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfSwKICAgICAgICBFbGVtZW50TGlzdCAgID0+ICRFbGVtZW50TGlzdCwKICAgICAgICBDb3VudE1heExpbWl0ID0+ICRPYmplY3REYXRhLT57Q291bnRNYXh9IHx8IDEwLAogICAgKTsKCiAgICBteSAkQXR0cmlidXRlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdLZXknLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0tleScpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJEVsZW1lbnRMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSWRlbnRpZmllcicsCiAgICAgICAgICAgIE5hbWUgID0+IFRyYW5zbGF0YWJsZSgnSWRlbnRpZmllcicpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDaGVja2JveCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIF07CgogICAgcmV0dXJuICRBdHRyaWJ1dGVzOwp9Cgo9aGVhZDIgU2VhcmNoQXR0cmlidXRlc0dldCgpCgpnZXQgdGhlIHNlYXJjaCBvYmplY3QgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlTGlzdCA9ICRPYmplY3RCYWNrZW5kLT5TZWFyY2hBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoQXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgIG15ICRPYmplY3REYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpLT5PYmplY3REYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiBbXSBpZiAhJE9iamVjdERhdGE7CiAgICByZXR1cm4gW10gaWYgcmVmICRPYmplY3REYXRhIG5lICdIQVNIJzsKICAgIHJldHVybiBbXSBpZiAhJE9iamVjdERhdGEtPntDbGFzc0lEfTsKCiAgICAjIGdldCBkZWZpbml0aW9uCiAgICBteSAkWE1MRGVmaW5pdGlvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5EZWZpbml0aW9uR2V0KAogICAgICAgIENsYXNzSUQgPT4gJE9iamVjdERhdGEtPntDbGFzc0lEfSwKICAgICk7CgogICAgcmV0dXJuIFtdIGlmICEkWE1MRGVmaW5pdGlvbjsKICAgIHJldHVybiBbXSBpZiByZWYgJFhNTERlZmluaXRpb24gbmUgJ0hBU0gnOwogICAgcmV0dXJuIFtdIGlmICEkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9OwogICAgcmV0dXJuIFtdIGlmIHJlZiAkWE1MRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9IG5lICdBUlJBWSc7CgogICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICBteSAkRGVwbFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICkgfHwge307CgogICAgIyBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgKSB8fCB7fTsKCiAgICBteSAkQXR0cmlidXRlTGlzdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdOdW1iZXInLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ051bWJlcicpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDgwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDI1NSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ05hbWUnLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ05hbWUnKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA4MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAyNTUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdEZXBsU3RhdGVJRHMnLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0RlcGxveW1lbnQgU3RhdGUnKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkRGVwbFN0YXRlTGlzdCwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0luY2lTdGF0ZUlEcycsCiAgICAgICAgICAgIE5hbWUgID0+IFRyYW5zbGF0YWJsZSgnSW5jaWRlbnQgU3RhdGUnKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkSW5jaVN0YXRlTGlzdCwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgXTsKCiAgICAjIGFkZCB4bWwgYXR0cmlidXRlcwogICAgJFNlbGYtPl9TZWFyY2hBdHRyaWJ1dGVzR2V0KAogICAgICAgIFhNTERlZmluaXRpb24gPT4gJFhNTERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfSwKICAgICAgICBBdHRyaWJ1dGVMaXN0ID0+ICRBdHRyaWJ1dGVMaXN0LAogICAgKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZUxpc3Q7Cn0KCj1oZWFkMiBFeHBvcnREYXRhR2V0KCkKCmdldCBleHBvcnQgZGF0YSBhcyBDPDJELWFycmF5LWhhc2g+IHJlZmVyZW5jZQoKICAgIG15ICRFeHBvcnREYXRhID0gJE9iamVjdEJhY2tlbmQtPkV4cG9ydERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnREYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJE9iamVjdERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPk9iamVjdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBvYmplY3QgZGF0YQogICAgaWYgKCAhJE9iamVjdERhdGEgfHwgcmVmICRPYmplY3REYXRhIG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIG9iamVjdCBkYXRhIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgIHJldHVybiBpZiAhJENsYXNzTGlzdCB8fCByZWYgJENsYXNzTGlzdCBuZSAnSEFTSCc7CgogICAgIyBjaGVjayB0aGUgY2xhc3MgaWQKICAgIGlmICggISRPYmplY3REYXRhLT57Q2xhc3NJRH0gfHwgISRDbGFzc0xpc3QtPnsgJE9iamVjdERhdGEtPntDbGFzc0lEfSB9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbGlkIGNsYXNzIGlkIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgbWFwcGluZyBsaXN0CiAgICBteSAkTWFwcGluZ0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPk1hcHBpbmdMaXN0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGhlIG1hcHBpbmcgbGlzdAogICAgaWYgKCAhJE1hcHBpbmdMaXN0IHx8IHJlZiAkTWFwcGluZ0xpc3QgbmUgJ0FSUkFZJyB8fCAhQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbGlkIG1hcHBpbmcgbGlzdCBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICRQYXJhbXtUZW1wbGF0ZUlEfSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIG1hcHBpbmcgb2JqZWN0IGxpc3QKICAgIG15IEBNYXBwaW5nT2JqZWN0TGlzdDsKICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAjIGdldCBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgbXkgJE1hcHBpbmdPYmplY3REYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpLT5NYXBwaW5nT2JqZWN0RGF0YUdldCgKICAgICAgICAgICAgTWFwcGluZ0lEID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICBpZiAoICEkTWFwcGluZ09iamVjdERhdGEgfHwgcmVmICRNYXBwaW5nT2JqZWN0RGF0YSBuZSAnSEFTSCcgKSB7CgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gdmFsaWQgbWFwcGluZyBsaXN0IGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBATWFwcGluZ09iamVjdExpc3QsICRNYXBwaW5nT2JqZWN0RGF0YTsKICAgIH0KCiAgICAjIGdldCBzZWFyY2ggZGF0YQogICAgbXkgJFNlYXJjaERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPlNlYXJjaERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkU2VhcmNoRGF0YSB8fCByZWYgJFNlYXJjaERhdGEgbmUgJ0hBU0gnOwoKICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgICMgY2hlY2sgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICBpZiAoICEkRGVwbFN0YXRlTGlzdCB8fCByZWYgJERlcGxTdGF0ZUxpc3QgbmUgJ0hBU0gnICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGdldCB0aGUgZ2VuZXJhbCBjYXRhbG9nIGxpc3QgSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgKTsKCiAgICAjIGNoZWNrIGluY2lkZW50IHN0YXRlIGxpc3QKICAgIGlmICggISRJbmNpU3RhdGVMaXN0IHx8IHJlZiAkSW5jaVN0YXRlTGlzdCBuZSAnSEFTSCcgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgZ2V0IHRoZSBnZW5lcmFsIGNhdGFsb2cgbGlzdCBJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY3VycmVudCBkZWZpbml0aW9uIG9mIHRoaXMgY2xhc3MKICAgIG15ICREZWZpbml0aW9uRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5EZWZpbml0aW9uR2V0KAogICAgICAgIENsYXNzSUQgPT4gJE9iamVjdERhdGEtPntDbGFzc0lEfSwKICAgICAgICBVc2VySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlU2VhcmNoUGFyYW1zOwoKICAgICMgYWRkIG51bWJlciB0byB0aGUgc2VhcmNoIHBhcmFtcwogICAgaWYgKCAkU2VhcmNoRGF0YS0+e051bWJlcn0gKSB7CiAgICAgICAgJFNlYXJjaFBhcmFtc3tOdW1iZXJ9ID0gZGVsZXRlICRTZWFyY2hEYXRhLT57TnVtYmVyfTsKICAgIH0KCiAgICAjIGFkZCBuYW1lIHRvIHRoZSBzZWFyY2ggcGFyYW1zCiAgICBpZiAoICRTZWFyY2hEYXRhLT57TmFtZX0gKSB7CiAgICAgICAgJFNlYXJjaFBhcmFtc3tOYW1lfSA9IGRlbGV0ZSAkU2VhcmNoRGF0YS0+e05hbWV9OwogICAgfQoKICAgICMgYWRkIGRlcGxveW1lbnQgc3RhdGUgdG8gdGhlIHNlYXJjaCBwYXJhbXMKICAgIGlmICggJFNlYXJjaERhdGEtPntEZXBsU3RhdGVJRHN9ICkgewogICAgICAgIG15IEBEZXBsU3RhdGVJRHMgPSBzcGxpdCAnIyMjIyMnLCAkU2VhcmNoRGF0YS0+e0RlcGxTdGF0ZUlEc307CiAgICAgICAgJFNlYXJjaFBhcmFtc3tEZXBsU3RhdGVJRHN9ID0gXEBEZXBsU3RhdGVJRHM7CiAgICAgICAgZGVsZXRlICRTZWFyY2hEYXRhLT57RGVwbFN0YXRlSURzfTsKICAgIH0KCiAgICAjIGFkZCBpbmNpZGVudCBzdGF0ZSB0byB0aGUgc2VhcmNoIHBhcmFtcwogICAgaWYgKCAkU2VhcmNoRGF0YS0+e0luY2lTdGF0ZUlEc30gKSB7CiAgICAgICAgbXkgQEluY2lTdGF0ZUlEcyA9IHNwbGl0ICcjIyMjIycsICRTZWFyY2hEYXRhLT57SW5jaVN0YXRlSURzfTsKICAgICAgICAkU2VhcmNoUGFyYW1ze0luY2lTdGF0ZUlEc30gPSBcQEluY2lTdGF0ZUlEczsKICAgICAgICBkZWxldGUgJFNlYXJjaERhdGEtPntJbmNpU3RhdGVJRHN9OwogICAgfQoKICAgICMgYWRkIGFsbCBYTUwgZGF0YSB0byB0aGUgc2VhcmNoIHBhcmFtcwogICAgbXkgQFNlYXJjaFBhcmFtc1doYXQ7CiAgICAkU2VsZi0+X0V4cG9ydFhNTFNlYXJjaERhdGFQcmVwYXJlKAogICAgICAgIFhNTERlZmluaXRpb24gPT4gJERlZmluaXRpb25EYXRhLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgV2hhdCAgICAgICAgICA9PiBcQFNlYXJjaFBhcmFtc1doYXQsCiAgICAgICAgU2VhcmNoRGF0YSAgICA9PiAkU2VhcmNoRGF0YSwKICAgICk7CgogICAgIyBhZGQgWE1MIHNlYXJjaCBwYXJhbXMgdG8gdGhlIHNlYXJjaCBoYXNoCiAgICBpZiAoQFNlYXJjaFBhcmFtc1doYXQpIHsKICAgICAgICAkU2VhcmNoUGFyYW1ze1doYXR9ID0gXEBTZWFyY2hQYXJhbXNXaGF0OwogICAgfQoKICAgICMgc2VhcmNoIHRoZSBjb25maWcgaXRlbXMKICAgIG15ICRDb25maWdJdGVtTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5Db25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoCiAgICAgICAgJVNlYXJjaFBhcmFtcywKICAgICAgICBDbGFzc0lEcyAgICAgICAgICAgICAgPT4gWyAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9IF0sCiAgICAgICAgUHJldmlvdXNWZXJzaW9uU2VhcmNoID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSBARXhwb3J0RGF0YTsKICAgIENPTkZJR0lURU1JRDoKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggQHskQ29uZmlnSXRlbUxpc3R9ICkgewoKICAgICAgICAjIGdldCBsYXN0IHZlcnNpb24KICAgICAgICBteSAkVmVyc2lvbkRhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRWZXJzaW9uRGF0YTsKICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiByZWYgJFZlcnNpb25EYXRhIG5lICdIQVNIJzsKCiAgICAgICAgIyB0cmFuc2xhdGUgeG1sZGF0YSB0byBhIDJkIGhhc2gKICAgICAgICBteSAlWE1MRGF0YTJEOwogICAgICAgICRTZWxmLT5fRXhwb3J0WE1MRGF0YVByZXBhcmUoCiAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJERlZmluaXRpb25EYXRhLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgIFhNTERhdGEgICAgICAgPT4gJFZlcnNpb25EYXRhLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0sCiAgICAgICAgICAgIFhNTERhdGEyRCAgICAgPT4gXCVYTUxEYXRhMkQsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgZGF0YSB0byB0aGUgZXhwb3J0IGRhdGEgYXJyYXkKICAgICAgICBteSBASXRlbTsKICAgICAgICBNQVBQSU5HT0JKRUNUOgogICAgICAgIGZvciBteSAkTWFwcGluZ09iamVjdCAoQE1hcHBpbmdPYmplY3RMaXN0KSB7CgogICAgICAgICAgICAjIGV4dHJhY3Qga2V5CiAgICAgICAgICAgIG15ICRLZXkgPSAkTWFwcGluZ09iamVjdC0+e0tleX07CgogICAgICAgICAgICAjIGhhbmRsZSBlbXB0eSBrZXkKICAgICAgICAgICAgaWYgKCAhJEtleSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW0sICcnOwogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HT0JKRUNUOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGhhbmRsZSBjb25maWcgaXRlbSBudW1iZXIKICAgICAgICAgICAgaWYgKCAkS2V5IGVxICdOdW1iZXInICkgewogICAgICAgICAgICAgICAgcHVzaCBASXRlbSwgJFZlcnNpb25EYXRhLT57TnVtYmVyfTsKICAgICAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgY3VycmVudCBjb25maWcgaXRlbSBuYW1lCiAgICAgICAgICAgIGlmICggJEtleSBlcSAnTmFtZScgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtLCAkVmVyc2lvbkRhdGEtPntOYW1lfTsKICAgICAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgZGVwbG95bWVudCBzdGF0ZQogICAgICAgICAgICBpZiAoICRLZXkgZXEgJ0RlcGxTdGF0ZScgKSB7CiAgICAgICAgICAgICAgICAkVmVyc2lvbkRhdGEtPntEZXBsU3RhdGVJRH0gfHw9ICdEVU1NWSc7CiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtLCAkRGVwbFN0YXRlTGlzdC0+eyAkVmVyc2lvbkRhdGEtPntEZXBsU3RhdGVJRH0gfTsKICAgICAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgaW5jaWRlbnQgc3RhdGUKICAgICAgICAgICAgaWYgKCAkS2V5IGVxICdJbmNpU3RhdGUnICkgewogICAgICAgICAgICAgICAgJFZlcnNpb25EYXRhLT57SW5jaVN0YXRlSUR9IHx8PSAnRFVNTVknOwogICAgICAgICAgICAgICAgcHVzaCBASXRlbSwgJEluY2lTdGF0ZUxpc3QtPnsgJFZlcnNpb25EYXRhLT57SW5jaVN0YXRlSUR9IH07CiAgICAgICAgICAgICAgICBuZXh0IE1BUFBJTkdPQkpFQ1Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaGFuZGxlIGFsbCBYTUwgZGF0YSBlbGVtZW50cwogICAgICAgICAgICBwdXNoIEBJdGVtLCAkWE1MRGF0YTJEeyRLZXl9OwogICAgICAgIH0KCiAgICAgICAgcHVzaCBARXhwb3J0RGF0YSwgXEBJdGVtOwogICAgfQoKICAgIHJldHVybiBcQEV4cG9ydERhdGE7Cn0KCj1oZWFkMiBJbXBvcnREYXRhU2F2ZSgpCgppbXBvcnRzIGEgc2luZ2xlIGVudGl0eSBvZiB0aGUgaW1wb3J0IGRhdGEuIFRoZSBDPFRlbXBsYXRlSUQ+IHBvaW50cyB0byB0aGUgZGVmaW5pdGlvbgpvZiB0aGUgY3VycmVudCBpbXBvcnQuIEM8SW1wb3J0RGF0YVJvdz4gaG9sZHMgdGhlIGRhdGEuIEM8Q291bnRlcj4gaXMgb25seSB1c2VkIGluCmVycm9yIG1lc3NhZ2VzLCBmb3IgaW5kaWNhdGluZyB3aGljaCBpdGVtIHdhcyBub3QgaW1wb3J0ZWQgc3VjY2Vzc2Z1bGx5LgoKVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgY29uZmlnIGl0ZW0gd2lsbCBuZXZlciBiZSBkZWxldGVkLiBXaGVuIHRoZXJlIGFyZSBubwpjaGFuZ2VzIGluIHRoZSBkYXRhLCB0aGUgaW1wb3J0IHdpbGwgYmUgc2tpcHBlZC4gV2hlbiB0aGVyZSBpcyBuZXcgb3IgY2hhbmdlZCBkYXRhLAp0aGVuIGEgbmV3IGNvbmZpZyBpdGVtIG9yIGEgbmV3IHZlcnNpb24gaXMgY3JlYXRlZC4KCkluIHRoZSBjYXNlIG9mIGNoYW5nZWQgZGF0YSwgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBjb25maWcgaXRlbSB3aWxsIGNvbnRhaW4gdGhlCmF0dHJpYnV0ZXMgb2YgdGhlIEM8SW1wb3J0RGF0YVJvdz4gcGx1cyB0aGUgb2xkIGF0dHJpYnV0ZXMgdGhhdCBhcmUKbm90IHBhcnQgb2YgdGhlIGltcG9ydCBkZWZpbml0aW9uLgpUaHVzIEltcG9ydERhdGFTYXZlKCkgZ3VhcmFudGVlcyB0byBub3Qgb3ZlcndyaXRlIHVuZGVjbGFyZWQgYXR0cmlidXRlcy4KClRoZSBiZWhhdmlvciB3aGVuIGltcG9ydGVkIGF0dHJpYnV0ZXMgYXJlIGVtcHR5IGRlcGVuZHMgb24gdGhlIHNldHRpbmcgaW4gdGhlIG9iamVjdCBkYXRhLgpXaGVuIEM8RW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcz4gaXMgbm90IHNldCwgdGhlbiBlbXB0eSB2YWx1ZXMgd2lsbCB3aXBlIG91dAp0aGUgb2xkIGRhdGEuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIFdoZW4gQzxFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzPiBpcyBzZXQsCnRoZW4gZW1wdHkgdmFsdWVzIHdpbGwgbGVhdmUgdGhlIG9sZCB2YWx1ZXMuCgpUaGUgZGVjaXNpb24gd2hhdCBjb25zdGl0dXRlIGFuIGVtcHR5IHZhbHVlIGlzIGEgYml0IGhhaXJ5LgpIZXJlIGFyZSB0aGUgcnVsZXMuCkZpZWxkcyB0aGF0IGFyZSBub3QgZXZlbiBtZW50aW9uZWQgaW4gdGhlIEltcG9ydCBkZWZpbml0aW9uIGFyZSBlbXB0eS4gVGhlc2UgYXJlIHRoZSAnbm90IGRlZmluZWQnIGZpZWxkcy4KRW1wdHkgc3RyaW5ncyBhbmQgdW5kZWZpbmVkIHZhbHVlcyBjb25zdGl0dXRlIGVtcHR5IGZpZWxkcy4KRmllbGRzIHdpdGggd2l0aCBvbmx5IG9uZSBvciBtb3JlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgbm90IGVtcHR5LgpGaWVsZHMgd2l0aCB0aGUgZGlnaXQgJzAnIGFyZSBub3QgZW1wdHkuCgogICAgbXkgKCAkQ29uZmlnSXRlbUlELCAkUmV0Q29kZSApID0gJE9iamVjdEJhY2tlbmQtPkltcG9ydERhdGFTYXZlKAogICAgICAgIFRlbXBsYXRlSUQgICAgPT4gMTIzLAogICAgICAgIEltcG9ydERhdGFSb3cgPT4gJEFycmF5UmVmLAogICAgICAgIENvdW50ZXIgICAgICAgPT4gMzY3LAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CgpBbiBlbXB0eSBDPENvbmZpZ0l0ZW1JRD4gaW5kaWNhdGVzIGZhaWx1cmUuIE90aGVyd2lzZSBpdCBpbmRpY2F0ZXMgdGhlCmxvY2F0aW9uIG9mIHRoZSBpbXBvcnRlZCBkYXRhLgpDPFJldENvZGU+IGlzIGVpdGhlciAnQ3JlYXRlZCcsICdVcGRhdGVkJyBvciAnU2tpcHBlZCcuICdDcmVhdGVkJyBtZWFucyB0aGF0IGEgbmV3CmNvbmZpZyBpdGVtIGhhcyBiZWVuIGNyZWF0ZWQuICdVcGRhdGVkJyBtZWFucyB0aGF0IGEgbmV3IHZlcnNpb24gaGFzIGJlZW4gYWRkZWQgdG8KYW4gZXhpc3RpbmcgY29uZmlnIGl0ZW0uICdTa2lwcGVkJyBtZWFucyB0aGF0IG5vIG5ldyB2ZXJzaW9uIGhhcyBiZWVuIGNyZWF0ZWQsCmFzIHRoZSBuZXcgZGF0YSBpcyBpZGVudGljYWwgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGFuIGV4aXN0aW5nIGNvbmZpZyBpdGVtLgoKTm8gY29kZXMgaGF2ZSB5ZXQgYmVlbiBkZWZpbmVkIGZvciB0aGUgZmFpbHVyZSBjYXNlLgoKPWN1dAoKc3ViIEltcG9ydERhdGFTYXZlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgSW1wb3J0RGF0YVJvdyBDb3VudGVyIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpbXBvcnQgZGF0YSByb3cKICAgIGlmICggcmVmICRQYXJhbXtJbXBvcnREYXRhUm93fSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIkltcG9ydERhdGFSb3cgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IG9iamVjdCBkYXRhCiAgICBteSAkT2JqZWN0RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKS0+T2JqZWN0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIG9iamVjdCBkYXRhCiAgICBpZiAoICEkT2JqZWN0RGF0YSB8fCByZWYgJE9iamVjdERhdGEgbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIk5vIG9iamVjdCBkYXRhIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJyRQYXJhbXtUZW1wbGF0ZUlEfSciLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMganVzdCBmb3IgY29udmVuaWVuY2UKICAgIG15ICRFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0gJE9iamVjdERhdGEtPntFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzfTsKCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgY2hlY2sgY2xhc3MgbGlzdAogICAgaWYgKCAhJENsYXNzTGlzdCB8fCByZWYgJENsYXNzTGlzdCBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgLiAiQ2FuJ3QgZ2V0IHRoZSBnZW5lcmFsIGNhdGFsb2cgbGlzdCBJVFNNOjpDb25maWdJdGVtOjpDbGFzcyIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB0aGUgY2xhc3MgaWQKICAgIGlmICggISRPYmplY3REYXRhLT57Q2xhc3NJRH0gfHwgISRDbGFzc0xpc3QtPnsgJE9iamVjdERhdGEtPntDbGFzc0lEfSB9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAuICJObyBjbGFzcyBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICckUGFyYW17VGVtcGxhdGVJRH0nIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgbWFwcGluZyBsaXN0CiAgICBteSAkTWFwcGluZ0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPk1hcHBpbmdMaXN0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGhlIG1hcHBpbmcgbGlzdAogICAgaWYgKCAhJE1hcHBpbmdMaXN0IHx8IHJlZiAkTWFwcGluZ0xpc3QgbmUgJ0FSUkFZJyB8fCAhQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAuICJObyB2YWxpZCBtYXBwaW5nIGxpc3QgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAnJFBhcmFte1RlbXBsYXRlSUR9JyIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIG1hcHBpbmcgb2JqZWN0IGxpc3QKICAgIG15IEBNYXBwaW5nT2JqZWN0TGlzdDsKICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAjIGdldCBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgbXkgJE1hcHBpbmdPYmplY3REYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpLT5NYXBwaW5nT2JqZWN0RGF0YUdldCgKICAgICAgICAgICAgTWFwcGluZ0lEID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICBpZiAoICEkTWFwcGluZ09iamVjdERhdGEgfHwgcmVmICRNYXBwaW5nT2JqZWN0RGF0YSBuZSAnSEFTSCcgKSB7CgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiTm8gbWFwcGluZyBvYmplY3QgZGF0YSBmb3VuZCBmb3IgdGhlIG1hcHBpbmcgaWQgJyRNYXBwaW5nSUQnIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBATWFwcGluZ09iamVjdExpc3QsICRNYXBwaW5nT2JqZWN0RGF0YTsKICAgIH0KCiAgICAjIGNoZWNrIGFuZCByZW1lbWJlciB0aGUgSWRlbnRpZmllcnMKICAgICMgdGhlIElkZW50aWZpZXJzIGlkZW50aWZ5IHRoZSBjb25maWcgaXRlbSB0aGF0IHNob3VsZCBiZSB1cGRhdGVkCiAgICBteSAlSWRlbnRpZmllcjsKICAgIG15ICRSb3dJbmRleCA9IDA7CiAgICBNQVBQSU5HT0JKRUNUREFUQToKICAgIGZvciBteSAkTWFwcGluZ09iamVjdERhdGEgKEBNYXBwaW5nT2JqZWN0TGlzdCkgewoKICAgICAgICBuZXh0IE1BUFBJTkdPQkpFQ1REQVRBIGlmICEkTWFwcGluZ09iamVjdERhdGEtPntJZGVudGlmaWVyfTsKCiAgICAgICAgIyBjaGVjayBpZiBpZGVudGlmaWVyIGFscmVhZHkgZXhpc3RzCiAgICAgICAgaWYgKCAkSWRlbnRpZmllcnsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9ICkgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgIC4gIickTWFwcGluZ09iamVjdERhdGEtPntLZXl9JyBoYXMgYmVlbiB1c2VkIG11bHRpcGxlIHRpbWVzIGFzIGFuIGlkZW50aWZpZXIiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHNldCBpZGVudGlmaWVyIHZhbHVlCiAgICAgICAgJElkZW50aWZpZXJ7ICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gfSA9ICRQYXJhbXtJbXBvcnREYXRhUm93fS0+WyRSb3dJbmRleF07CgogICAgICAgIG5leHQgTUFQUElOR09CSkVDVERBVEEgaWYgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSAmJiAkUGFyYW17SW1wb3J0RGF0YVJvd30tPlskUm93SW5kZXhdOwoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAuICJJZGVudGlmaWVyIGZpZWxkIGlzIGVtcHR5IiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CiAgICBjb250aW51ZSB7CiAgICAgICAgJFJvd0luZGV4Kys7CiAgICB9CgogICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICBteSAkRGVwbFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICk7CgogICAgIyBjaGVjayBkZXBsb3ltZW50IHN0YXRlIGxpc3QKICAgIGlmICggISREZXBsU3RhdGVMaXN0IHx8IHJlZiAkRGVwbFN0YXRlTGlzdCBuZSAnSEFTSCcgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIkNhbid0IGdldCB0aGUgZ2VuZXJhbCBjYXRhbG9nIGxpc3QgSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyByZXZlcnNlIHRoZSBkZXBsb3ltZW50IHN0YXRlIGxpc3QKICAgIG15ICVEZXBsU3RhdGVMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskRGVwbFN0YXRlTGlzdH07CgogICAgIyBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgKTsKCiAgICAjIGNoZWNrIGluY2lkZW50IHN0YXRlIGxpc3QKICAgIGlmICggISRJbmNpU3RhdGVMaXN0IHx8IHJlZiAkSW5jaVN0YXRlTGlzdCBuZSAnSEFTSCcgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIkNhbid0IGdldCB0aGUgZ2VuZXJhbCBjYXRhbG9nIGxpc3QgSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyByZXZlcnNlIHRoZSBpbmNpZGVudCBzdGF0ZSBsaXN0CiAgICBteSAlSW5jaVN0YXRlTGlzdFJldmVyc2UgPSByZXZlcnNlICV7JEluY2lTdGF0ZUxpc3R9OwoKICAgICMgZ2V0IGN1cnJlbnQgZGVmaW5pdGlvbiBvZiB0aGlzIGNsYXNzCiAgICBteSAkRGVmaW5pdGlvbkRhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+RGVmaW5pdGlvbkdldCgKICAgICAgICBDbGFzc0lEID0+ICRPYmplY3REYXRhLT57Q2xhc3NJRH0sCiAgICAgICAgVXNlcklEICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBkZWZpbml0aW9uIGRhdGEKICAgIGlmICggISREZWZpbml0aW9uRGF0YSB8fCByZWYgJERlZmluaXRpb25EYXRhIG5lICdIQVNIJyApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgLiAiQ2FuJ3QgZ2V0IHRoZSBkZWZpbml0aW9uIG9mIGNsYXNzIGlkICRPYmplY3REYXRhLT57Q2xhc3NJRH0iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgdHJ5IHRvIGdldCBjb25maWcgaXRlbSBpZHMsIHdoZW4gdGhlcmUgYXJlIGlkZW50aWZpZXJzCiAgICBteSAkQ29uZmlnSXRlbUlEOwogICAgaWYgKCVJZGVudGlmaWVyKSB7CgogICAgICAgIG15ICVTZWFyY2hQYXJhbXM7CgogICAgICAgICMgYWRkIG51bWJlciB0byB0aGUgc2VhcmNoIHBhcmFtcwogICAgICAgIGlmICggJElkZW50aWZpZXJ7TnVtYmVyfSApIHsKICAgICAgICAgICAgJFNlYXJjaFBhcmFtc3tOdW1iZXJ9ID0gZGVsZXRlICRJZGVudGlmaWVye051bWJlcn07CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBuYW1lIHRvIHRoZSBzZWFyY2ggcGFyYW1zCiAgICAgICAgaWYgKCAkSWRlbnRpZmllcntOYW1lfSApIHsKICAgICAgICAgICAgJFNlYXJjaFBhcmFtc3tOYW1lfSA9IGRlbGV0ZSAkSWRlbnRpZmllcntOYW1lfTsKICAgICAgICB9CgogICAgICAgICMgYWRkIGRlcGxveW1lbnQgc3RhdGUgdG8gdGhlIHNlYXJjaCBwYXJhbXMKICAgICAgICBpZiAoICRJZGVudGlmaWVye0RlcGxTdGF0ZX0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgZGVwbG95bWVudCBzdGF0ZSBpZAogICAgICAgICAgICBteSAkRGVwbFN0YXRlSUQgPSAkRGVwbFN0YXRlTGlzdFJldmVyc2V7ICRJZGVudGlmaWVye0RlcGxTdGF0ZX0gfSB8fCAnJzsKCiAgICAgICAgICAgIGlmICggISREZXBsU3RhdGVJRCApIHsKCiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIlRoZSBkZXBsb3ltZW50IHN0YXRlICckSWRlbnRpZmllcntEZXBsU3RhdGV9JyBpcyBpbnZhbGlkIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWFyY2hQYXJhbXN7RGVwbFN0YXRlSURzfSA9IFskRGVwbFN0YXRlSURdOwogICAgICAgICAgICBkZWxldGUgJElkZW50aWZpZXJ7RGVwbFN0YXRlfTsKICAgICAgICB9CgogICAgICAgICMgYWRkIGluY2lkZW50IHN0YXRlIHRvIHRoZSBzZWFyY2ggcGFyYW1zCiAgICAgICAgaWYgKCAkSWRlbnRpZmllcntJbmNpU3RhdGV9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGluY2lkZW50IHN0YXRlIGlkCiAgICAgICAgICAgIG15ICRJbmNpU3RhdGVJRCA9ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXsgJElkZW50aWZpZXJ7SW5jaVN0YXRlfSB9IHx8ICcnOwoKICAgICAgICAgICAgaWYgKCAhJEluY2lTdGF0ZUlEICkgewoKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiVGhlIGluY2lkZW50IHN0YXRlICckSWRlbnRpZmllcntJbmNpU3RhdGV9JyBpcyBpbnZhbGlkIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWFyY2hQYXJhbXN7SW5jaVN0YXRlSURzfSA9IFskSW5jaVN0YXRlSURdOwogICAgICAgICAgICBkZWxldGUgJElkZW50aWZpZXJ7SW5jaVN0YXRlfTsKICAgICAgICB9CgogICAgICAgICMgYWRkIGFsbCBYTUwgZGF0YSB0byB0aGUgc2VhcmNoIHBhcmFtcwogICAgICAgIG15IEBTZWFyY2hQYXJhbXNXaGF0OwogICAgICAgICRTZWxmLT5fSW1wb3J0WE1MU2VhcmNoRGF0YVByZXBhcmUoCiAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJERlZmluaXRpb25EYXRhLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgIFdoYXQgICAgICAgICAgPT4gXEBTZWFyY2hQYXJhbXNXaGF0LAogICAgICAgICAgICBJZGVudGlmaWVyICAgID0+IFwlSWRlbnRpZmllciwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBYTUwgc2VhcmNoIHBhcmFtcyB0byB0aGUgc2VhcmNoIGhhc2gKICAgICAgICBpZiAoQFNlYXJjaFBhcmFtc1doYXQpIHsKICAgICAgICAgICAgJFNlYXJjaFBhcmFtc3tXaGF0fSA9IFxAU2VhcmNoUGFyYW1zV2hhdDsKICAgICAgICB9CgogICAgICAgICMgc2VhcmNoIGV4aXN0aW5nIGNvbmZpZyBpdGVtIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllcnMKICAgICAgICBteSAkQ29uZmlnSXRlbUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKAogICAgICAgICAgICAlU2VhcmNoUGFyYW1zLAogICAgICAgICAgICBDbGFzc0lEcyAgICAgICAgICAgICAgPT4gWyAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9IF0sCiAgICAgICAgICAgIFByZXZpb3VzVmVyc2lvblNlYXJjaCA9PiAwLAogICAgICAgICAgICBVc2luZ1dpbGRjYXJkcyAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggc2NhbGFyIEB7JENvbmZpZ0l0ZW1MaXN0fSA+IDEgKSB7CgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiSWRlbnRpZmllciBmaWVsZHMgTk9UIHVuaXF1ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1MaXN0LT5bMF07CiAgICB9CgogICAgIyBnZXQgdmVyc2lvbiBkYXRhIG9mIHRoZSBjb25maWcgaXRlbQogICAgbXkgJFZlcnNpb25EYXRhID0ge307CiAgICBpZiAoJENvbmZpZ0l0ZW1JRCkgewoKICAgICAgICAjIGdldCBsYXRlc3QgdmVyc2lvbgogICAgICAgICRWZXJzaW9uRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5WZXJzaW9uR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAjIHJlbW92ZSBlbXB0eSB4bWwgZGF0YQogICAgICAgIGlmICgKICAgICAgICAgICAgISRWZXJzaW9uRGF0YS0+e1hNTERhdGF9CiAgICAgICAgICAgIHx8IHJlZiAkVmVyc2lvbkRhdGEtPntYTUxEYXRhfSBuZSAnQVJSQVknCiAgICAgICAgICAgIHx8ICFAeyAkVmVyc2lvbkRhdGEtPntYTUxEYXRhfSB9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGRlbGV0ZSAkVmVyc2lvbkRhdGEtPntYTUxEYXRhfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJU1hcHBpbmdPYmplY3RLZXlEYXRhID0gbWFwIHsgJF8tPntLZXl9ID0+IDEgfSBATWFwcGluZ09iamVjdExpc3Q7CgogICAgIyBDaGVjayBpZiBjdXJyZW50IGRlZmluaXRpb24gb2YgdGhpcyBjbGFzcyBoYXMgcmVxdWlyZWQgYXR0cmlidXRlIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIG1hcHBpbmcgbGlzdC4KICAgIGZvciBteSAkRGVmaW5pdGlvblJlZiAoIEB7ICREZWZpbml0aW9uRGF0YS0+e0RlZmluaXRpb25SZWZ9IH0gKSB7CiAgICAgICAgbXkgJEtleSA9ICREZWZpbml0aW9uUmVmLT57S2V5fTsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAkRGVmaW5pdGlvblJlZi0+e0lucHV0fS0+e1JlcXVpcmVkfQogICAgICAgICAgICAmJiAhJE1hcHBpbmdPYmplY3RLZXlEYXRheyRLZXl9CiAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICFkZWZpbmVkICREZWZpbml0aW9uUmVmLT57Q291bnRNaW59CiAgICAgICAgICAgICAgICB8fCAoIGRlZmluZWQgJERlZmluaXRpb25SZWYtPntDb3VudE1pbn0gJiYgJERlZmluaXRpb25SZWYtPntDb3VudE1pbn0gPiAwICkKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiQXR0cmlidXRlICckS2V5JyBpcyByZXF1aXJlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIG1hcHBpbmcgbGlzdCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IHVwIGZpZWxkcyBpbiBWZXJzaW9uRGF0YSBhbmQgaW4gdGhlIFhNTCBhdHRyaWJ1dGVzCiAgICBteSAlWE1MRGF0YTJEOwogICAgJFJvd0luZGV4ID0gMDsKICAgIGZvciBteSAkTWFwcGluZ09iamVjdERhdGEgKEBNYXBwaW5nT2JqZWN0TGlzdCkgewoKICAgICAgICAjIGp1c3QgZm9yIGNvbnZlbmllbmNlCiAgICAgICAgbXkgJEtleSAgID0gJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fTsKICAgICAgICBteSAkVmFsdWUgPSAkUGFyYW17SW1wb3J0RGF0YVJvd30tPlsgJFJvd0luZGV4KysgXTsKCiAgICAgICAgaWYgKCAkS2V5IGVxICdOdW1iZXInICkgewoKICAgICAgICAgICAgIyBkbyBub3RoaW5nCiAgICAgICAgICAgICMgSW1wb3J0IGRvZXMgbm90IG92ZXJyaWRlIHRoZSBjb25maWcgaXRlbSBudW1iZXIKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkS2V5IGVxICdOYW1lJyApIHsKCiAgICAgICAgICAgIGlmICggJEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgJiYgKCAhZGVmaW5lZCAkVmFsdWUgfHwgJFZhbHVlIGVxICcnICkgKSB7CgogICAgICAgICAgICAgICAgIyBkbyBub3RoaW5nLCBrZWVwIHRoZSBvbGQgdmFsdWUKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICggISRWYWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJUaGUgbmFtZSAnJFZhbHVlJyBpcyBpbnZhbGlkISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFZlcnNpb25EYXRhLT57JEtleX0gPSAkVmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkS2V5IGVxICdEZXBsU3RhdGUnICkgewoKICAgICAgICAgICAgaWYgKCAkRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyAmJiAoICFkZWZpbmVkICRWYWx1ZSB8fCAkVmFsdWUgZXEgJycgKSApIHsKCiAgICAgICAgICAgICAgICAjIGRvIG5vdGhpbmcsIGtlZXAgdGhlIG9sZCB2YWx1ZQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBkZXBsb3ltZW50IHN0YXRlIGlkCiAgICAgICAgICAgICAgICBteSAkRGVwbFN0YXRlSUQgPSAkRGVwbFN0YXRlTGlzdFJldmVyc2V7JFZhbHVlfSB8fCAnJzsKICAgICAgICAgICAgICAgIGlmICggISREZXBsU3RhdGVJRCApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJUaGUgZGVwbG95bWVudCBzdGF0ZSAnJFZhbHVlJyBpcyBpbnZhbGlkISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFZlcnNpb25EYXRhLT57RGVwbFN0YXRlSUR9ID0gJERlcGxTdGF0ZUlEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEtleSBlcSAnSW5jaVN0YXRlJyApIHsKCiAgICAgICAgICAgIGlmICggJEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgJiYgKCAhZGVmaW5lZCAkVmFsdWUgfHwgJFZhbHVlIGVxICcnICkgKSB7CgogICAgICAgICAgICAgICAgIyBkbyBub3RoaW5nLCBrZWVwIHRoZSBvbGQgdmFsdWUKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3QgdGhlIGRlcGxveW1lbnQgc3RhdGUgaWQKICAgICAgICAgICAgICAgIG15ICRJbmNpU3RhdGVJRCA9ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXskVmFsdWV9IHx8ICcnOwogICAgICAgICAgICAgICAgaWYgKCAhJEluY2lTdGF0ZUlEICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlRoZSBpbmNpZGVudCBzdGF0ZSAnJFZhbHVlJyBpcyBpbnZhbGlkISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFZlcnNpb25EYXRhLT57SW5jaVN0YXRlSUR9ID0gJEluY2lTdGF0ZUlEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBoYW5kbGUgeG1sIGRhdGEKICAgICAgICAgICAgJFhNTERhdGEyRHskS2V5fSA9ICRWYWx1ZTsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgdXAgZW1wdHkgY29udGFpbmVyLCBpbiBjYXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIGRhdGEKICAgICRWZXJzaW9uRGF0YS0+e1hNTERhdGF9LT5bMV0tPntWZXJzaW9ufS0+WzFdIHx8PSB7fTsKCiAgICAjIEVkaXQgWE1MRGF0YVByZXYsIHNvIHRoYXQgdGhlIHZhbHVlcyBpbiBYTUxEYXRhMkQgdGFrZSBwcmVjZWRlbmNlLgogICAgbXkgJE1lcmdlT2sgPSAkU2VsZi0+X0ltcG9ydFhNTERhdGFNZXJnZSgKICAgICAgICBYTUxEZWZpbml0aW9uICAgICAgICAgICAgICAgID0+ICREZWZpbml0aW9uRGF0YS0+e0RlZmluaXRpb25SZWZ9LAogICAgICAgIFhNTERhdGFQcmV2ICAgICAgICAgICAgICAgICAgPT4gJFZlcnNpb25EYXRhLT57WE1MRGF0YX0tPlsxXS0+e1ZlcnNpb259LT5bMV0sCiAgICAgICAgWE1MRGF0YTJEICAgICAgICAgICAgICAgICAgICA9PiBcJVhNTERhdGEyRCwKICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICRFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzLAogICAgKTsKCiAgICAjIGJhaWwgb3V0LCB3aGVuIHRoZSB3YXMgYSBwcm9ibGVtIGluIF9JbXBvcnRYTUxEYXRhTWVyZ2UoKQogICAgaWYgKCAhJE1lcmdlT2sgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgLiAiQ291bGQgbm90IHByZXBhcmUgdGhlIGlucHV0ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJFJldENvZGUgPSAkQ29uZmlnSXRlbUlEID8gVHJhbnNsYXRhYmxlKCdDaGFuZ2VkJykgOiBUcmFuc2xhdGFibGUoJ0NyZWF0ZWQnKTsKCiAgICAjIGNoZWNrIGlmIHRoZSBmZWF0dXJlIHRvIGNoZWNrIGZvciBhIHVuaXF1ZSBuYW1lIGlzIGVuYWJsZWQKICAgIGlmICgKICAgICAgICBJc1N0cmluZ1dpdGhEYXRhKCAkVmVyc2lvbkRhdGEtPntOYW1lfSApCiAgICAgICAgJiYgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdVbmlxdWVDSU5hbWU6OkVuYWJsZVVuaXF1ZW5lc3NDaGVjaycpCiAgICAgICAgKQogICAgewoKICAgICAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPntEZWJ1Z30gPiAwICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2hlY2tpbmcgZm9yIGR1cGxpY2F0ZSBuYW1lcyAoQ2xhc3NJRDogJE9iamVjdERhdGEtPntDbGFzc0lEfSwgIgogICAgICAgICAgICAgICAgICAgIC4gIk5hbWU6ICRWZXJzaW9uRGF0YS0+e05hbWV9LCBDb25maWdJdGVtSUQ6ICIgLiAkQ29uZmlnSXRlbUlEIHx8ICdORVcnIC4gJyknLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJE5hbWVEdXBsaWNhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPlVuaXF1ZU5hbWVDaGVjaygKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQgfHwgJ05FVycsCiAgICAgICAgICAgIENsYXNzSUQgICAgICA9PiAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFZlcnNpb25EYXRhLT57TmFtZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzdG9wIHByb2Nlc3NpbmcgaWYgdGhlIG5hbWUgaXMgbm90IHVuaXF1ZQogICAgICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCROYW1lRHVwbGljYXRlcykgKSB7CgogICAgICAgICAgICAjIGJ1aWxkIGEgc3RyaW5nIG9mIGFsbCBkdXBsaWNhdGUgSURzCiAgICAgICAgICAgIG15ICROYW1lRHVwbGljYXRlc1N0cmluZyA9IGpvaW4gJywgJywgQHskTmFtZUR1cGxpY2F0ZXN9OwoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICJUaGUgbmFtZSAkVmVyc2lvbkRhdGEtPntOYW1lfSBpcyBhbHJlYWR5IGluIHVzZSBieSB0aGUgQ29uZmlnSXRlbUlEKHMpOiAiCiAgICAgICAgICAgICAgICAgICAgLiAkTmFtZUR1cGxpY2F0ZXNTdHJpbmcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCB0aGUgcmV0dXJuIGNvZGUgdG8gYWxzbyBpbmNsdWRlIHRoZSBkdXBsaWNhdGUgbmFtZQogICAgICAgICAgICAkUmV0Q29kZSA9ICJEdXBsaWNhdGVOYW1lICckVmVyc2lvbkRhdGEtPntOYW1lfSciOwoKICAgICAgICAgICAgIyByZXR1cm4gdW5kZWYgZm9yIHRoZSBjb25maWcgaXRlbSBpZCBzbyBpdCB3aWxsIGJlIGNvdW50ZWQgYXMgJ0ZhaWxlZCcKICAgICAgICAgICAgcmV0dXJuIHVuZGVmLCAkUmV0Q29kZTsgICAgIyMgbm8gY3JpdGljCiAgICAgICAgfQogICAgfQoKICAgIG15ICRMYXRlc3RWZXJzaW9uSUQgPSAwOwogICAgaWYgKCRDb25maWdJdGVtSUQpIHsKCiAgICAgICAgIyB0aGUgc3BlY2lmaWVkIGNvbmZpZyBpdGVtIGFscmVhZHkgZXhpc3RzCiAgICAgICAgIyBnZXQgaWQgb2YgdGhlIGxhdGVzdCB2ZXJzaW9uLCBmb3IgY2hlY2tpbmcgbGF0ZXIgd2hldGhlciBhIHZlcnNpb24gd2FzIGNyZWF0ZWQKICAgICAgICBteSAkVmVyc2lvbkxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+VmVyc2lvbkxpc3QoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICkgfHwgW107CiAgICAgICAgaWYgKCBzY2FsYXIgQHskVmVyc2lvbkxpc3R9ICkgewogICAgICAgICAgICAkTGF0ZXN0VmVyc2lvbklEID0gJFZlcnNpb25MaXN0LT5bLTFdOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIG5vIGNvbmZpZyBpdGVtIHdhcyBmb3VuZCwgc28gYWRkIG5ldyBjb25maWcgaXRlbQogICAgICAgICRDb25maWdJdGVtSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbUFkZCgKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkT2JqZWN0RGF0YS0+e0NsYXNzSUR9LAogICAgICAgICAgICBVc2VySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgdGhlIG5ldyBjb25maWcgaXRlbSBpZAogICAgICAgIGlmICggISRDb25maWdJdGVtSUQgKSB7CgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiRXJyb3Igd2hlbiBhZGRpbmcgdGhlIG5ldyBjb25maWcgaXRlbS4iLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgYWRkIG5ldyB2ZXJzaW9uCiAgICBteSAkVmVyc2lvbklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICRWZXJzaW9uRGF0YS0+e05hbWV9LAogICAgICAgIERlZmluaXRpb25JRCA9PiAkRGVmaW5pdGlvbkRhdGEtPntEZWZpbml0aW9uSUR9LAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkVmVyc2lvbkRhdGEtPntEZXBsU3RhdGVJRH0sCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRWZXJzaW9uRGF0YS0+e0luY2lTdGF0ZUlEfSwKICAgICAgICBYTUxEYXRhICAgICAgPT4gJFZlcnNpb25EYXRhLT57WE1MRGF0YX0sCiAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIHRoZSBpbXBvcnQgd2FzIHN1Y2Nlc3NmdWwsIHdoZW4gd2UgZ2V0IGEgdmVyc2lvbiBpZAogICAgaWYgKCRWZXJzaW9uSUQpIHsKCiAgICAgICAgIyBXaGVuIFZlcnNpb25BZGQoKSByZXR1cm5zIHRoZSBwcmV2aW91cyBsYXRlc3QgdmVyc2lvbiBJRCwgd2Uga25vdyB0aGF0CiAgICAgICAgIyBubyBuZXcgdmVyc2lvbiBoYXMgYmVlbiBhZGRlZC4KICAgICAgICAjIFRoZSBpbXBvcnQgb2YgdGhpcyBjb25maWcgaXRlbSBoYXMgYmVlbiBza2lwcGVkLgogICAgICAgIGlmICggJExhdGVzdFZlcnNpb25JRCAmJiAkVmVyc2lvbklEID09ICRMYXRlc3RWZXJzaW9uSUQgKSB7CiAgICAgICAgICAgICRSZXRDb2RlID0gVHJhbnNsYXRhYmxlKCdTa2lwcGVkJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJENvbmZpZ0l0ZW1JRCwgJFJldENvZGU7CiAgICB9CgogICAgaWYgKCAkUmV0Q29kZSBlcSAnQ3JlYXRlZCcgKSB7CgogICAgICAgICMgZGVsZXRlIHRoZSBuZXcgY29uZmlnIGl0ZW0KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbURlbGV0ZSgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgLiAiRXJyb3Igd2hlbiBhZGRpbmcgdGhlIG5ldyBjb25maWcgaXRlbSB2ZXJzaW9uLiIsCiAgICApOwoKICAgIHJldHVybjsKfQoKPWhlYWQxIElOVEVSTkFMIElOVEVSRkFDRQoKPWhlYWQyIF9NYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgpCgpyZWN1cnNpb24gZnVuY3Rpb24gZm9yIE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KCkuCkRlZmluaXRpb25zIGZvciBvYmplY3QgYXR0cmlidXRlcyBhcmUgcGFzc2VkIGluIEM8WE1MRGVmaW5pdGlvbj4uClRoZSBuZXcgb2JqZWN0IGF0dHJpYnV0ZXMgYXJlIGFwcGVuZGVkIHRvIEM8RWxlbWVudExpc3Q+LgpDPENvdW50TWF4TGltaXQ+IGxpbWl0cyB0aGUgbWF4IGxlbmd0aCBvZiBpbXBvcnRhYmxlIGFycmF5cy4KCiAgICAkT2JqZWN0QmFja2VuZC0+X01hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFhNTERlZmluaXRpb24gPT4gJEFycmF5UmVmLAogICAgICAgIEVsZW1lbnRMaXN0ICAgPT4gJEFycmF5UmVmLAogICAgICAgIENvdW50TWF4TGltaXQgPT4gMTAsCiAgICApOwoKPWN1dAoKc3ViIF9NYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhJFBhcmFte0NvdW50TWF4TGltaXR9OwogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgISRQYXJhbXtFbGVtZW50TGlzdH07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17RWxlbWVudExpc3R9IG5lICdBUlJBWSc7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICAjIGxpbWl0IHRoZSBsZW5ndGggb2YgaW1wb3J0YWJsZSBhcnJheXMsIGV2ZW4gaWYgbW9yZSBlbGVtZW50cyBjYW4gYmUgc2V0IHZpYSB0aGUgR1VJCiAgICAgICAgbXkgJENvdW50TWF4ID0gbWluKCAkSXRlbS0+e0NvdW50TWF4fSwgJFBhcmFte0NvdW50TWF4TGltaXR9ICk7CgogICAgICAgIENPVU5UOgogICAgICAgIGZvciBteSAkQ291bnQgKCAxIC4uICRDb3VudE1heCApIHsKCiAgICAgICAgICAgICMgY3JlYXRlIGtleSBzdHJpbmcKICAgICAgICAgICAgbXkgJEtleSA9ICRJdGVtLT57S2V5fSAuICc6OicgLiAkQ291bnQ7CgogICAgICAgICAgICAjIGFkZCBwcmVmaXggdG8ga2V5CiAgICAgICAgICAgIGlmICggJFBhcmFte0tleVByZWZpeH0gKSB7CiAgICAgICAgICAgICAgICAkS2V5ID0gJFBhcmFte0tleVByZWZpeH0gLiAnOjonIC4gJEtleTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjcmVhdGUgdmFsdWUgc3RyaW5nCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRJdGVtLT57S2V5fTsKCiAgICAgICAgICAgICMgYWRkIGNvdW50IGlmIHJlcXVpcmVkCiAgICAgICAgICAgIGlmICggJENvdW50TWF4ID4gMSB8fCAkSXRlbS0+e1N1Yn0gKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgLj0gJzo6JyAuICRDb3VudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgcHJlZml4IHRvIGtleQogICAgICAgICAgICBpZiAoICRQYXJhbXtWYWx1ZVByZWZpeH0gKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPSAkUGFyYW17VmFsdWVQcmVmaXh9IC4gJzo6JyAuICRWYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgcm93CiAgICAgICAgICAgIG15ICVSb3cgPSAoCiAgICAgICAgICAgICAgICBLZXkgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtFbGVtZW50TGlzdH0gfSwgXCVSb3c7CgogICAgICAgICAgICBuZXh0IENPVU5UIGlmICEkSXRlbS0+e1N1Yn07CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAkU2VsZi0+X01hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgICAgICBFbGVtZW50TGlzdCAgID0+ICRQYXJhbXtFbGVtZW50TGlzdH0sCiAgICAgICAgICAgICAgICBLZXlQcmVmaXggICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICBWYWx1ZVByZWZpeCAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgIENvdW50TWF4TGltaXQgPT4gJFBhcmFte0NvdW50TWF4TGltaXR9IHx8ICcxMCcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX1NlYXJjaEF0dHJpYnV0ZXNHZXQoKQoKcmVjdXJzaW9uIGZ1bmN0aW9uIGZvciBNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgpCgogICAgJE9iamVjdEJhY2tlbmQtPl9TZWFyY2hBdHRyaWJ1dGVzR2V0KAogICAgICAgIFhNTERlZmluaXRpb24gPT4gJEFycmF5UmVmLAogICAgICAgIEF0dHJpYnV0ZUxpc3QgPT4gJEFycmF5UmVmLAogICAgKTsKCj1jdXQKCnN1YiBfU2VhcmNoQXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiAhJFBhcmFte0F0dHJpYnV0ZUxpc3R9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte0F0dHJpYnV0ZUxpc3R9IG5lICdBUlJBWSc7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICAjIHNldCBwcmVmaXgKICAgICAgICBteSAkS2V5ICA9ICRJdGVtLT57S2V5fTsKICAgICAgICBteSAkTmFtZSA9ICRJdGVtLT57TmFtZX07CgogICAgICAgIGlmICggJFBhcmFte0tleVByZWZpeH0gKSB7CiAgICAgICAgICAgICRLZXkgPSAkUGFyYW17S2V5UHJlZml4fSAuICc6OicgLiAkS2V5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkUGFyYW17TmFtZVByZWZpeH0gKSB7CiAgICAgICAgICAgICROYW1lID0gJFBhcmFte05hbWVQcmVmaXh9IC4gJzo6JyAuICROYW1lOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgYXR0cmlidXRlLCBpZiBtYXJrZWQgYXMgc2VhcmNoYWJsZQogICAgICAgIGlmICggJEl0ZW0tPntTZWFyY2hhYmxlfSApIHsKCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnVGV4dCcgfHwgJEl0ZW0tPntJbnB1dH0tPntUeXBlfSBlcSAnVGV4dEFyZWEnICkgewoKICAgICAgICAgICAgICAgIG15ICVSb3cgPSAoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkTmFtZSwKICAgICAgICAgICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gJEl0ZW0tPntJbnB1dH0tPntJbnB1dH0tPntUcmFuc2xhdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgIFNpemUgICAgICAgID0+ICRJdGVtLT57SW5wdXR9LT57SW5wdXR9LT57U2l6ZX0gfHwgNjAsCiAgICAgICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCAgID0+ICRJdGVtLT57SW5wdXR9LT57SW5wdXR9LT57TWF4TGVuZ3RofSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtBdHRyaWJ1dGVMaXN0fSB9LCBcJVJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRJdGVtLT57SW5wdXR9LT57VHlwZX0gZXEgJ0dlbmVyYWxDYXRhbG9nJyApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBnZW5lcmFsIGNhdGFsb2cgbGlzdAogICAgICAgICAgICAgICAgbXkgJEdlbmVyYWxDYXRhbG9nTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkSXRlbS0+e0lucHV0fS0+e0NsYXNzfSwKICAgICAgICAgICAgICAgICkgfHwge307CgogICAgICAgICAgICAgICAgbXkgJVJvdyA9ICgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICROYW1lLAogICAgICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+ICRJdGVtLT57SW5wdXR9LT57SW5wdXR9LT57VHJhbnNsYXRpb259LAogICAgICAgICAgICAgICAgICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte0F0dHJpYnV0ZUxpc3R9IH0sIFwlUm93OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBuZXh0IElURU0gaWYgISRJdGVtLT57U3VifTsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICRTZWxmLT5fU2VhcmNoQXR0cmlidXRlc0dldCgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgIEF0dHJpYnV0ZUxpc3QgPT4gJFBhcmFte0F0dHJpYnV0ZUxpc3R9LAogICAgICAgICAgICBLZXlQcmVmaXggICAgID0+ICRLZXksCiAgICAgICAgICAgIE5hbWVQcmVmaXggICAgPT4gJE5hbWUsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9FeHBvcnRYTUxTZWFyY2hEYXRhUHJlcGFyZSgpCgpyZWN1cnNpb24gZnVuY3Rpb24gdG8gcHJlcGFyZSB0aGUgZXhwb3J0IFhNTCBzZWFyY2ggcGFyYW1zCgogICAgJE9iamVjdEJhY2tlbmQtPl9FeHBvcnRYTUxTZWFyY2hEYXRhUHJlcGFyZSgKICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRBcnJheVJlZiwKICAgICAgICBXaGF0ICAgICAgICAgID0+ICRBcnJheVJlZiwKICAgICAgICBTZWFyY2hEYXRhICAgID0+ICRIYXNoUmVmLAogICAgKTsKCj1jdXQKCnN1YiBfRXhwb3J0WE1MU2VhcmNoRGF0YVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgISRQYXJhbXtXaGF0fTsKICAgIHJldHVybiBpZiAhJFBhcmFte1NlYXJjaERhdGF9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1doYXR9IG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtTZWFyY2hEYXRhfSBuZSAnSEFTSCc7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICAjIGNyZWF0ZSBrZXkKICAgICAgICBteSAkS2V5ID0gJFBhcmFte1ByZWZpeH0gPyAkUGFyYW17UHJlZml4fSAuICc6OicgLiAkSXRlbS0+e0tleX0gOiAkSXRlbS0+e0tleX07CgogICAgICAgICMgcHJlcGFyZSB2YWx1ZQogICAgICAgIG15ICRWYWx1ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+WE1MRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlYXJjaERhdGF9LT57JEtleX0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRWYWx1ZXMpIHsKCiAgICAgICAgICAgICMgY3JlYXRlIHNlYXJjaCBrZXkKICAgICAgICAgICAgbXkgJFNlYXJjaEtleSA9ICRLZXk7CiAgICAgICAgICAgICRTZWFyY2hLZXkgPX4gc3sgOjogfXtcJ1x9WyVdXHtcJ314bXNnOwoKICAgICAgICAgICAgIyBjcmVhdGUgc2VhcmNoIGhhc2gKICAgICAgICAgICAgbXkgJFNlYXJjaEhhc2ggPSB7CiAgICAgICAgICAgICAgICAnWzFde1wnVmVyc2lvblwnfVsxXXtcJycgLiAkU2VhcmNoS2V5IC4gJ1wnfVslXXtcJ0NvbnRlbnRcJ30nID0+ICRWYWx1ZXMsCiAgICAgICAgICAgIH07CgogICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtXaGF0fSB9LCAkU2VhcmNoSGFzaDsKICAgICAgICB9CgogICAgICAgIG5leHQgSVRFTSBpZiAhJEl0ZW0tPntTdWJ9OwoKICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbiwgaWYgIlN1YiIgd2FzIGZvdW5kCiAgICAgICAgJFNlbGYtPl9FeHBvcnRYTUxTZWFyY2hEYXRhUHJlcGFyZSgKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgIFdoYXQgICAgICAgICAgPT4gJFBhcmFte1doYXR9LAogICAgICAgICAgICBTZWFyY2hEYXRhICAgID0+ICRQYXJhbXtTZWFyY2hEYXRhfSwKICAgICAgICAgICAgUHJlZml4ICAgICAgICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfRXhwb3J0WE1MRGF0YVByZXBhcmUoKQoKcmVjdXJzaW9uIGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIGV4cG9ydCBYTUwgZGF0YQoKICAgICRPYmplY3RCYWNrZW5kLT5fRXhwb3J0WE1MRGF0YVByZXBhcmUoCiAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkQXJyYXlSZWYsCiAgICAgICAgWE1MRGF0YSAgICAgICA9PiAkSGFzaFJlZiwKICAgICAgICBYTUxEYXRhMkQgICAgID0+ICRIYXNoUmVmLAogICAgKTsKCj1jdXQKCnN1YiBfRXhwb3J0WE1MRGF0YVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEYXRhfTsKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERhdGEyRH07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEZWZpbml0aW9ufSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGF0YX0gbmUgJ0hBU0gnOwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGF0YTJEfSBuZSAnSEFTSCc7CgogICAgaWYgKCAkUGFyYW17UHJlZml4fSApIHsKICAgICAgICAkUGFyYW17UHJlZml4fSAuPSAnOjonOwogICAgfQogICAgJFBhcmFte1ByZWZpeH0gfHw9ICcnOwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKICAgICAgICBDT1VOVEVSOgogICAgICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gJEl0ZW0tPntDb3VudE1heH0gKSB7CgogICAgICAgICAgICAjIHN0b3AgbG9vcCwgaWYgbm8gY29udGVudCB3YXMgZ2l2ZW4KICAgICAgICAgICAgbGFzdCBDT1VOVEVSIGlmICFkZWZpbmVkICRQYXJhbXtYTUxEYXRhfS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXS0+e0NvbnRlbnR9OwoKICAgICAgICAgICAgIyBjcmVhdGUga2V5CiAgICAgICAgICAgIG15ICRLZXkgPSAkUGFyYW17UHJlZml4fSAuICRJdGVtLT57S2V5fSAuICc6OicgLiAkQ291bnRlcjsKCiAgICAgICAgICAgICMgcHJlcGFyZSB2YWx1ZQogICAgICAgICAgICAkUGFyYW17WE1MRGF0YTJEfS0+eyRLZXl9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPlhNTEV4cG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1hNTERhdGF9LT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IENPVU5URVIgaWYgISRJdGVtLT57U3VifTsKCiAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAgICAgJFNlbGYtPl9FeHBvcnRYTUxEYXRhUHJlcGFyZSgKICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICA9PiAkUGFyYW17WE1MRGF0YX0tPnsgJEl0ZW0tPntLZXl9IH0tPlskQ291bnRlcl0sCiAgICAgICAgICAgICAgICBYTUxEYXRhMkQgICAgID0+ICRQYXJhbXtYTUxEYXRhMkR9LAogICAgICAgICAgICAgICAgUHJlZml4ICAgICAgICA9PiAkS2V5LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9JbXBvcnRYTUxTZWFyY2hEYXRhUHJlcGFyZSgpCgpyZWN1cnNpb24gZnVuY3Rpb24gdG8gcHJlcGFyZSB0aGUgaW1wb3J0IFhNTCBzZWFyY2ggcGFyYW1zCgogICAgJE9iamVjdEJhY2tlbmQtPl9JbXBvcnRYTUxTZWFyY2hEYXRhUHJlcGFyZSgKICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRBcnJheVJlZiwKICAgICAgICBXaGF0ICAgICAgICAgID0+ICRBcnJheVJlZiwKICAgICAgICBJZGVudGlmaWVyICAgID0+ICRIYXNoUmVmLAogICAgKTsKCj1jdXQKCnN1YiBfSW1wb3J0WE1MU2VhcmNoRGF0YVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGVmaW5pdGlvbn07CiAgICByZXR1cm4gaWYgISRQYXJhbXtXaGF0fTsKICAgIHJldHVybiBpZiAhJFBhcmFte0lkZW50aWZpZXJ9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17WE1MRGVmaW5pdGlvbn0gbmUgJ0FSUkFZJzsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1doYXR9IG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtJZGVudGlmaWVyfSBuZSAnSEFTSCc7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICAjIGNyZWF0ZSBrZXkKICAgICAgICBteSAkS2V5ID0gJFBhcmFte1ByZWZpeH0gPyAkUGFyYW17UHJlZml4fSAuICc6OlxkKzo6JyAuICRJdGVtLT57S2V5fSA6ICRJdGVtLT57S2V5fTsKICAgICAgICAkS2V5IC49ICc6OlxkKyc7CgogICAgICAgIG15ICRJZGVudGlmaWVyS2V5OwogICAgICAgIElERU5USUZJRVJLRVk6CiAgICAgICAgZm9yIG15ICRJZGVudEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17SWRlbnRpZmllcn0gfSApIHsKCiAgICAgICAgICAgIG5leHQgSURFTlRJRklFUktFWSBpZiAkSWRlbnRLZXkgIX4gbXsgXEEgJEtleSBceiB9eG1zOwoKICAgICAgICAgICAgJElkZW50aWZpZXJLZXkgPSAkSWRlbnRLZXk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJElkZW50aWZpZXJLZXkpIHsKCiAgICAgICAgICAgICMgcHJlcGFyZSB2YWx1ZQogICAgICAgICAgICBteSAkVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+WE1MSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17SWRlbnRpZmllcn0tPnskSWRlbnRpZmllcktleX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJFZhbHVlKSB7CgogICAgICAgICAgICAgICAgIyBwcmVwYXJlIGtleQogICAgICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgICAgICAgICAgd2hpbGUgKCAkSWRlbnRpZmllcktleSA9fiBteyA6OiB9eG1zICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb3VudGVyICUgMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJElkZW50aWZpZXJLZXkgPX4gc3sgOjogfXtdXHsnfXhtczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRJZGVudGlmaWVyS2V5ID1+IHN7IDo6IH17J1x9W314bXM7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY3JlYXRlIHNlYXJjaCBoYXNoCiAgICAgICAgICAgICAgICBteSAkU2VhcmNoSGFzaCA9IHsKICAgICAgICAgICAgICAgICAgICAnWzFde1wnVmVyc2lvblwnfVsxXXtcJycgLiAkSWRlbnRpZmllcktleSAuICdde1wnQ29udGVudFwnfScgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtXaGF0fSB9LCAkU2VhcmNoSGFzaDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbmV4dCBJVEVNIGlmICEkSXRlbS0+e1N1Yn07CgogICAgICAgICMgc3RhcnQgcmVjdXJzaW9uLCBpZiAiU3ViIiB3YXMgZm91bmQKICAgICAgICAkU2VsZi0+X0ltcG9ydFhNTFNlYXJjaERhdGFQcmVwYXJlKAogICAgICAgICAgICBYTUxEZWZpbml0aW9uID0+ICRJdGVtLT57U3VifSwKICAgICAgICAgICAgV2hhdCAgICAgICAgICA9PiAkUGFyYW17V2hhdH0sCiAgICAgICAgICAgIElkZW50aWZpZXIgICAgPT4gJFBhcmFte0lkZW50aWZpZXJ9LAogICAgICAgICAgICBQcmVmaXggICAgICAgID0+ICRLZXksCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9JbXBvcnRYTUxEYXRhTWVyZ2UoKQoKcmVjdXJzaXZlIGZ1bmN0aW9uIHRvIGlucGxhY2UgZWRpdCB0aGUgaW1wb3J0IFhNTCBkYXRhLgoKICAgIG15ICRNZXJnZU9rID0gJE9iamVjdEJhY2tlbmQtPl9JbXBvcnRYTUxEYXRhTWVyZ2UoCiAgICAgICAgWE1MRGVmaW5pdGlvbiA9PiAkQXJyYXlSZWYsCiAgICAgICAgWE1MRGF0YVByZXYgICA9PiAkSGFzaFJlZiwKICAgICAgICBYTUxEYXRhMkQgICAgID0+ICRIYXNoUmVmLAogICAgKTsKClRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lcmdlIHdhcyBzdWNjZXNzZnVsLgpBIG1lcmdlIGZhaWxzIHdoZW4gZm9yIGV4YW1wbGUgYSBnZW5lcmFsIGNhdGFsb2cgaXRlbSBuYW1lIGNhbid0IGJlIG1hcHBlZCB0byBhbiBpZC4KCj1jdXQKCnN1YiBfSW1wb3J0WE1MRGF0YU1lcmdlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERlZmluaXRpb259OwogICAgcmV0dXJuIGlmICEkUGFyYW17WE1MRGF0YTJEfTsKICAgIHJldHVybiBpZiAhJFBhcmFte1hNTERhdGFQcmV2fTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7ICAgICMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGNvbmZpZyBpdGVtIGNsYXNzCiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtYTUxEYXRhMkR9IG5lICdIQVNIJzsgICAgICAgICAjIGhhc2ggd2l0aCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERhdGFQcmV2fSBuZSAnSEFTSCc7ICAgICAgICMgaGFzaCB3aXRoIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBjb25maWcgaXRlbQoKICAgIG15ICRYTUxEYXRhID0gJFBhcmFte1hNTERhdGFQcmV2fTsKCiAgICAjIGRlZmF1bHQgdmFsdWUgZm9yIHByZWZpeAogICAgJFBhcmFte1ByZWZpeH0gfHw9ICcnOwoKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17WE1MRGVmaW5pdGlvbn0gfSApIHsKCiAgICAgICAgQ09VTlRFUjoKICAgICAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uICRJdGVtLT57Q291bnRNYXh9ICkgewoKICAgICAgICAgICAgIyBjcmVhdGUgaW5wdXRrZXkKICAgICAgICAgICAgbXkgJEtleSA9ICRQYXJhbXtQcmVmaXh9IC4gJEl0ZW0tPntLZXl9IC4gJzo6JyAuICRDb3VudGVyOwoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICAgICBpZiAoICRJdGVtLT57U3VifSApIHsKICAgICAgICAgICAgICAgICRYTUxEYXRhLT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdCiAgICAgICAgICAgICAgICAgICAgfHw9IHt9OyAgICAjIGVtcHR5IGNvbnRhaW5lciwgaW4gY2FzZSB0aGVyZSBpcyBubyBwcmV2aW91cyBkYXRhCiAgICAgICAgICAgICAgICBteSAkTWVyZ2VPayA9ICRTZWxmLT5fSW1wb3J0WE1MRGF0YU1lcmdlKAogICAgICAgICAgICAgICAgICAgIFhNTERlZmluaXRpb24gICAgICAgICAgICAgICAgPT4gJEl0ZW0tPntTdWJ9LAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEyRCAgICAgICAgICAgICAgICAgICAgPT4gJFBhcmFte1hNTERhdGEyRH0sCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YVByZXYgICAgICAgICAgICAgICAgICA9PiAkWE1MRGF0YS0+eyAkSXRlbS0+e0tleX0gfS0+WyRDb3VudGVyXSwKICAgICAgICAgICAgICAgICAgICBQcmVmaXggICAgICAgICAgICAgICAgICAgICAgID0+ICRLZXkgLiAnOjonLAogICAgICAgICAgICAgICAgICAgIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPT4gJFBhcmFte0VtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXN9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gaWYgISRNZXJnZU9rOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFdoZW4gdGhlIGRhdGEgcG9pbnQgaXMgbm90IHBhcnQgb2YgdGhlIGlucHV0IGRlZmluaXRpb24sCiAgICAgICAgICAgICMgdGhlbiBkbyBub3Qgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBzZXR0aW5nLgogICAgICAgICAgICAjIEZhbHNlIHZhbHVlcyBhcmUgT0suCiAgICAgICAgICAgIG5leHQgQ09VTlRFUiBpZiAhZXhpc3RzICRQYXJhbXtYTUxEYXRhMkR9LT57JEtleX07CgogICAgICAgICAgICBpZiAoICRQYXJhbXtFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvIG5vdCBvdmVycmlkZSBvbGQgdmFsdWUgd2l0aCBhbiBlbXB0eSBmaWVsZCBpcyBpbXBvcnRlZAogICAgICAgICAgICAgICAgbmV4dCBDT1VOVEVSIGlmICFkZWZpbmVkICRQYXJhbXtYTUxEYXRhMkR9LT57JEtleX07CiAgICAgICAgICAgICAgICBuZXh0IENPVU5URVIgaWYgJFBhcmFte1hNTERhdGEyRH0tPnskS2V5fSBlcSAnJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwcmVwYXJlIHZhbHVlCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5YTUxJbXBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtYTUxEYXRhMkR9LT57JEtleX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGxldCBtZXJnZSBmYWlsLCB3aGVuIGEgdmFsdWUgY2Fubm90IGJlIHByZXBhcmVkCiAgICAgICAgICAgIHJldHVybiBpZiAhZGVmaW5lZCAkVmFsdWU7CgogICAgICAgICAgICAjIHNhdmUgdGhlIHByZXBhcmVkIHZhbHVlCiAgICAgICAgICAgICRYTUxEYXRhLT57ICRJdGVtLT57S2V5fSB9LT5bJENvdW50ZXJdLT57Q29udGVudH0gPSAkVmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6RGVmaW5pdGlvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpEZWZpbml0aW9uIC0gc3ViIG1vZHVsZSBvZiBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBkZWZpbml0aW9uIGZ1bmN0aW9ucy4KCj1oZWFkMiBEZWZpbml0aW9uTGlzdCgpCgpyZXR1cm4gYSBjb25maWcgaXRlbSBkZWZpbml0aW9uIGxpc3QgYXMgYXJyYXktaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRGVmaW5pdGlvbkxpc3RSZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkxpc3QoCiAgICAgICAgQ2xhc3NJRCA9PiAxMjMsCiAgICApOwoKcmV0dXJucwoKICAgIG15ICREZWZpbml0aW9uTGlzdFJlZiA9IFsKICAgICAgICAgIHsKICAgICAgICAgICAgJ1ZlcnNpb24nICAgICAgPT4gJzEnLAogICAgICAgICAgICAnQ3JlYXRlVGltZScgICA9PiAnMjAxMi0wNi0xMiAxNDowOTo0MycsCiAgICAgICAgICAgICdEZWZpbml0aW9uSUQnID0+ICcxJywKICAgICAgICAgICAgJ0NyZWF0ZUJ5JyAgICAgPT4gJzEyMycsCiAgICAgICAgICAgICdEZWZpbml0aW9uJyAgID0+ICctLS0KLSBLZXk6IFZlbmRvcgogIE5hbWU6IFZlbmRvcgogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAtIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDUwCgotIEtleTogRGVzY3JpcHRpb24KICBOYW1lOiBEZXNjcmlwdGlvbgogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAtIFR5cGU6IFRleHRBcmVhCgotIEtleTogVHlwZQogIE5hbWU6IFR5cGUKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgLSBUeXBlOiBUZXh0QXJlYQogIC0gVHlwZTogR2VuZXJhbENhdGFsb2dcCiAgICBDbGFzczogSVRTTTo6Q29uZmlnSXRlbTo6Q29tcHV0ZXI6OlR5cGUKICAgIFRyYW5zbGF0aW9uOiAxCiMgLi4uIGV0YyAuLi4KJywKICAgICAgICAgIH0sCiAgICBdOwoKPWN1dAoKc3ViIERlZmluaXRpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDbGFzc0lEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3NJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgY29uZmlnaXRlbV9kZWZpbml0aW9uLCB2ZXJzaW9uLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5ICcKICAgICAgICAgICAgLiAnRlJPTSBjb25maWdpdGVtX2RlZmluaXRpb24gV0hFUkUgY2xhc3NfaWQgPSA/IE9SREVSIEJZIHZlcnNpb24nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzSUR9IF0sCiAgICApOwoKICAgIG15IEBEZWZpbml0aW9uTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJURlZmluaXRpb247CiAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvbklEfSA9ICRSb3dbMF07CiAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvbn0gICA9ICRSb3dbMV0gfHwgIi0tLSBbXSI7CiAgICAgICAgJERlZmluaXRpb257VmVyc2lvbn0gICAgICA9ICRSb3dbMl07CiAgICAgICAgJERlZmluaXRpb257Q3JlYXRlVGltZX0gICA9ICRSb3dbM107CiAgICAgICAgJERlZmluaXRpb257Q3JlYXRlQnl9ICAgICA9ICRSb3dbNF07CgogICAgICAgICMgQ2hlY2sgaWYgZGVmaW5pdGlvbiBjb2RlIGlzIG5vdCBhIFlBTUwgc3RyaW5nLgogICAgICAgIGlmICggc3Vic3RyKCAkRGVmaW5pdGlvbntEZWZpbml0aW9ufSwgMCwgMyApIG5lICctLS0nICkgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJEZWZpbml0aW9uSUQ6ICREZWZpbml0aW9ue0RlZmluaXRpb25JRH0iCiAgICAgICAgICAgICAgICAgICAgLiAiIENsYXNzSUQ6ICRQYXJhbXtDbGFzc0lEfSIKICAgICAgICAgICAgICAgICAgICAuICIgZm91bmQgaW4gbGVnYWN5IFBlcmwgY29kZSBmb3JtYXQsIGNhbiBub3QgY29udGludWUiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvbn0gPSAiLS0tIFtdIjsKICAgICAgICB9CgogICAgICAgIHB1c2ggQERlZmluaXRpb25MaXN0LCBcJURlZmluaXRpb247CiAgICB9CgogICAgcmV0dXJuIFxARGVmaW5pdGlvbkxpc3Q7Cn0KCj1oZWFkMiBEZWZpbml0aW9uR2V0KCkKCnJldHVybiBhIGNvbmZpZyBpdGVtIGRlZmluaXRpb24gYXMgaGFzaCByZWZlcmVuY2UKClJldHVybgogICAgJERlZmluaXRpb24tPntEZWZpbml0aW9uSUR9CiAgICAkRGVmaW5pdGlvbi0+e0NsYXNzSUR9CiAgICAkRGVmaW5pdGlvbi0+e0NsYXNzfQogICAgJERlZmluaXRpb24tPntEZWZpbml0aW9ufQogICAgJERlZmluaXRpb24tPntEZWZpbml0aW9uUmVmfQogICAgJERlZmluaXRpb24tPntWZXJzaW9ufQogICAgJERlZmluaXRpb24tPntDcmVhdGVUaW1lfQogICAgJERlZmluaXRpb24tPntDcmVhdGVCeX0KCiAgICBteSAkRGVmaW5pdGlvblJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uR2V0KAogICAgICAgIERlZmluaXRpb25JRCA9PiAxMjMsCiAgICApOwoKICAgIG9yCgogICAgbXkgJERlZmluaXRpb25SZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkdldCgKICAgICAgICBDbGFzc0lEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgRGVmaW5pdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17RGVmaW5pdGlvbklEfSAmJiAhJFBhcmFte0NsYXNzSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBEZWZpbml0aW9uSUQgb3IgQ2xhc3NJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggJFBhcmFte0RlZmluaXRpb25JRH0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICAgICAgcmV0dXJuICRTZWxmLT57Q2FjaGV9LT57RGVmaW5pdGlvbkdldH0tPnsgJFBhcmFte0RlZmluaXRpb25JRH0gfQogICAgICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+e0RlZmluaXRpb25HZXR9LT57ICRQYXJhbXtEZWZpbml0aW9uSUR9IH07CgogICAgICAgICMgYXNrIGRhdGFiYXNlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBjbGFzc19pZCwgY29uZmlnaXRlbV9kZWZpbml0aW9uLCB2ZXJzaW9uLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5ICcKICAgICAgICAgICAgICAgIC4gJ0ZST00gY29uZmlnaXRlbV9kZWZpbml0aW9uIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtEZWZpbml0aW9uSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGFzayBkYXRhYmFzZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgY2xhc3NfaWQsIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbiwgdmVyc2lvbiwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSAnCiAgICAgICAgICAgICAgICAuICdGUk9NIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbiAnCiAgICAgICAgICAgICAgICAuICdXSEVSRSBjbGFzc19pZCA9ID8gT1JERVIgQlkgdmVyc2lvbiBERVNDJywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NsYXNzSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVEZWZpbml0aW9uOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvbklEfSA9ICRSb3dbMF07CiAgICAgICAgJERlZmluaXRpb257Q2xhc3NJRH0gICAgICA9ICRSb3dbMV07CiAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvbn0gICA9ICRSb3dbMl0gfHwgIi0tLSBbXSI7CiAgICAgICAgJERlZmluaXRpb257VmVyc2lvbn0gICAgICA9ICRSb3dbM107CiAgICAgICAgJERlZmluaXRpb257Q3JlYXRlVGltZX0gICA9ICRSb3dbNF07CiAgICAgICAgJERlZmluaXRpb257Q3JlYXRlQnl9ICAgICA9ICRSb3dbNV07CgogICAgICAgICMgQ2hlY2sgaWYgZGVmaW5pdGlvbiBjb2RlIGlzIG5vdCBhIFlBTUwgc3RyaW5nLgogICAgICAgIGlmICggc3Vic3RyKCAkRGVmaW5pdGlvbntEZWZpbml0aW9ufSwgMCwgMyApIG5lICctLS0nICkgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJEZWZpbml0aW9uSUQ6ICREZWZpbml0aW9ue0RlZmluaXRpb25JRH0iCiAgICAgICAgICAgICAgICAgICAgLiAiIENsYXNzSUQ6ICREZWZpbml0aW9ue0NsYXNzSUR9IgogICAgICAgICAgICAgICAgICAgIC4gIiBmb3VuZCBpbiBsZWdhY3kgUGVybCBjb2RlIGZvcm1hdCwgY2FuIG5vdCBjb250aW51ZSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkRGVmaW5pdGlvbntEZWZpbml0aW9ufSA9ICItLS0gW10iOwogICAgICAgIH0KCiAgICAgICAgJERlZmluaXRpb257RGVmaW5pdGlvblJlZn0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6WUFNTCcpLT5Mb2FkKAogICAgICAgICAgICBEYXRhID0+ICREZWZpbml0aW9ue0RlZmluaXRpb259LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIHt9IGlmICEkRGVmaW5pdGlvbntEZWZpbml0aW9uSUR9OwoKICAgICMgcHJlcGFyZSBkZWZpbml0aW9uCiAgICBpZiAoICREZWZpbml0aW9ue0RlZmluaXRpb25SZWZ9ICYmIHJlZiAkRGVmaW5pdGlvbntEZWZpbml0aW9uUmVmfSBlcSAnQVJSQVknICkgewogICAgICAgICRTZWxmLT5fRGVmaW5pdGlvblByZXBhcmUoCiAgICAgICAgICAgIERlZmluaXRpb25SZWYgPT4gJERlZmluaXRpb257RGVmaW5pdGlvblJlZn0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICREZWZpbml0aW9ue0RlZmluaXRpb25SZWZ9ID0gJyc7CiAgICB9CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIGFkZCBjbGFzcwogICAgJERlZmluaXRpb257Q2xhc3N9ID0gJENsYXNzTGlzdC0+eyAkRGVmaW5pdGlvbntDbGFzc0lEfSB9OwoKICAgICMgY2FjaGUgdGhlIHJlc3VsdAogICAgJFNlbGYtPntDYWNoZX0tPntEZWZpbml0aW9uR2V0fS0+eyAkRGVmaW5pdGlvbntEZWZpbml0aW9uSUR9IH0gPSBcJURlZmluaXRpb247CgogICAgcmV0dXJuIFwlRGVmaW5pdGlvbjsKfQoKPWhlYWQyIERlZmluaXRpb25BZGQoKQoKYWRkIGEgbmV3IGRlZmluaXRpb24KCiAgICBteSAkRGVmaW5pdGlvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25BZGQoCiAgICAgICAgQ2xhc3NJRCAgICA9PiAxMjMsCiAgICAgICAgRGVmaW5pdGlvbiA9PiAndGhlIGRlZmluaXRpb24gY29kZScsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBEZWZpbml0aW9uQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzSUQgRGVmaW5pdGlvbiBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgZGVmaW5pdGlvbgogICAgbXkgJENoZWNrID0gJFNlbGYtPkRlZmluaXRpb25DaGVjaygKICAgICAgICBEZWZpbml0aW9uID0+ICRQYXJhbXtEZWZpbml0aW9ufSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkQ2hlY2s7CgogICAgIyBnZXQgbGFzdCBkZWZpbml0aW9uCiAgICBteSAkTGFzdERlZmluaXRpb24gPSAkU2VsZi0+RGVmaW5pdGlvbkdldCgKICAgICAgICBDbGFzc0lEID0+ICRQYXJhbXtDbGFzc0lEfSwKICAgICk7CgogICAgIyBzdG9wIGFkZCwgaWYgZGVmaW5pdGlvbiB3YXMgbm90IGNoYW5nZWQKICAgIGlmICggJExhc3REZWZpbml0aW9uLT57RGVmaW5pdGlvbklEfSAmJiAkTGFzdERlZmluaXRpb24tPntEZWZpbml0aW9ufSBlcSAkUGFyYW17RGVmaW5pdGlvbn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBhZGQgbmV3IGRlZmluaXRpb24hIFRoZSBkZWZpbml0aW9uIHdhcyBub3QgY2hhbmdlZC4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IHZlcnNpb24KICAgIG15ICRWZXJzaW9uID0gMTsKICAgIGlmICggJExhc3REZWZpbml0aW9uLT57VmVyc2lvbn0gKSB7CiAgICAgICAgJFZlcnNpb24gPSAkTGFzdERlZmluaXRpb24tPntWZXJzaW9ufTsKICAgICAgICAkVmVyc2lvbisrOwogICAgfQoKICAgICMgaW5zZXJ0IG5ldyBkZWZpbml0aW9uCiAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbiAnCiAgICAgICAgICAgIC4gJyhjbGFzc19pZCwgY29uZmlnaXRlbV9kZWZpbml0aW9uLCB2ZXJzaW9uLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5KSBWQUxVRVMgJwogICAgICAgICAgICAuICcoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDbGFzc0lEfSwgXCRQYXJhbXtEZWZpbml0aW9ufSwgXCRWZXJzaW9uLCBcJFBhcmFte1VzZXJJRH0gXSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkU3VjY2VzczsKCiAgICAjIGdldCBpZCBvZiBuZXcgZGVmaW5pdGlvbgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtX2RlZmluaXRpb24gV0hFUkUgJwogICAgICAgICAgICAuICdjbGFzc19pZCA9ID8gQU5EIHZlcnNpb24gPSA/ICcKICAgICAgICAgICAgLiAnT1JERVIgQlkgdmVyc2lvbiBERVNDJywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q2xhc3NJRH0sIFwkVmVyc2lvbiBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJERlZmluaXRpb25JRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJERlZmluaXRpb25JRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyB0cmlnZ2VyIERlZmluaXRpb25DcmVhdGUgZXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0RlZmluaXRpb25DcmVhdGUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgQ29tbWVudCA9PiAkRGVmaW5pdGlvbklELAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJERlZmluaXRpb25JRDsKfQoKPWhlYWQyIERlZmluaXRpb25DaGVjaygpCgpjaGVjayB0aGUgc3ludGF4IG9mIGEgbmV3IGRlZmluaXRpb24KCiAgICBteSAkVHJ1ZSA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uQ2hlY2soCiAgICAgICAgRGVmaW5pdGlvbiAgICAgID0+ICd0aGUgZGVmaW5pdGlvbiBjb2RlJywKICAgICAgICBDaGVja1N1YkVsZW1lbnQgPT4gMSwgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsLCBkZWZhdWx0IDAsIHRvIGNoZWNrIHN1YiBlbGVtZW50cyByZWN1cnNpdmVseSkKICAgICk7Cgo9Y3V0CgpzdWIgRGVmaW5pdGlvbkNoZWNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtEZWZpbml0aW9ufSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgRGVmaW5pdGlvbiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaWYgY2hlY2sgc3ViIGVsZW1lbnRzIGlzIGVuYWJsZWQsIHdlIG11c3Qgbm90IFlBTUwgbG9hZCBpdAogICAgIyBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gZG9uZSBpbiBhbiBlYXJsaWVyIHJlY3Vyc2lvbiBzdGVwIGFscmVhZHkKICAgIG15ICREZWZpbml0aW9uOwogICAgaWYgKCAkUGFyYW17Q2hlY2tTdWJFbGVtZW50fSApIHsKICAgICAgICAkRGVmaW5pdGlvbiA9ICRQYXJhbXtEZWZpbml0aW9ufTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICggc3Vic3RyKCAkUGFyYW17RGVmaW5pdGlvbn0sIDAsIDMgKSBuZSAnLS0tJyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkRlZmluaXRpb24gbXVzdCBiZSBhIFlBTUwgc3RyaW5nIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJERlZmluaXRpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6WUFNTCcpLT5Mb2FkKAogICAgICAgICAgICBEYXRhID0+ICRQYXJhbXtEZWZpbml0aW9ufSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgaWYgZGVmaW5pdGlvbiBleGlzdHMgYXQgYWxsCiAgICBpZiAoICEkRGVmaW5pdGlvbiApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0ludmFsaWQgRGVmaW5pdGlvbiEgWW91IGhhdmUgYW4gc3ludGF4IGVycm9yIGluIHRoZSBkZWZpbml0aW9uLicsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWZpbml0aW9uIG11c3QgYmUgYW4gYXJyYXkKICAgIGlmICggcmVmICREZWZpbml0aW9uIG5lICdBUlJBWScgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdJbnZhbGlkIERlZmluaXRpb24hIERlZmluaXRpb24gaXMgbm90IGFuIGFycmF5IHJlZmVyZW5jZS4nLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgZWFjaCBkZWZpbml0aW9uIGF0dHJpYnV0ZQogICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBAeyREZWZpbml0aW9ufSApIHsKCiAgICAgICAgIyBlYWNoIGRlZmluaXRpb24gYXR0cmlidXRlIG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSB3aXRoIGRhdGEKICAgICAgICBpZiAoICEkQXR0cmlidXRlIHx8IHJlZiAkQXR0cmlidXRlIG5lICdIQVNIJyB8fCAhJXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0ludmFsaWQgRGVmaW5pdGlvbiEgQXQgbGVhc3Qgb25lIGRlZmluaXRpb24gYXR0cmlidXRlIGlzIG5vdCBhIGhhc2ggcmVmZXJlbmNlLicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdGhlIGtleSBjb250YWlucyBubyBzcGFjZXMKICAgICAgICBpZiAoICRBdHRyaWJ1dGUtPntLZXl9ICYmICRBdHRyaWJ1dGUtPntLZXl9ID1+IG17IFxzIH14bXMgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIERlZmluaXRpb24hIEtleSAnJEF0dHJpYnV0ZS0+e0tleX0nIG11c3Qgbm90IGNvbnRhaW4gd2hpdGVzcGFjZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZSBrZXkgY29udGFpbnMgbm9uLWFzY2lpIGNoYXJhY3RlcnMKICAgICAgICBpZiAoICRBdHRyaWJ1dGUtPntLZXl9ICYmICRBdHRyaWJ1dGUtPntLZXl9ID1+IG17IChbXlx4ezAwfS1ceHs3Zn1dKSB9eG1zICkgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkludmFsaWQgRGVmaW5pdGlvbiEgS2V5ICckQXR0cmlidXRlLT57S2V5fScgbXVzdCBub3QgY29udGFpbiBub24gQVNDSUkgY2hhcmFjdGVycyAnJDEnISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgcmVjdXJzaW9uIGNoZWNrIGZvciBTdWItRWxlbWVudHMKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRBdHRyaWJ1dGV9ICkgewoKICAgICAgICAgICAgbXkgJFZhbHVlID0gJEF0dHJpYnV0ZS0+eyRLZXl9OwoKICAgICAgICAgICAgaWYgKCAkS2V5IGVxICdTdWInICYmIHJlZiAkVmFsdWUgZXEgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIHRoZSBzdWIgYXJyYXkKICAgICAgICAgICAgICAgIG15ICRDaGVjayA9ICRTZWxmLT5EZWZpbml0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiAgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICBDaGVja1N1YkVsZW1lbnQgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJENoZWNrICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBTdWItRGVmaW5pdGlvbiBvZiBlbGVtZW50IHdpdGggdGhlIGtleSAnJEF0dHJpYnV0ZS0+e0tleX0nLiIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBEZWZpbml0aW9uQXR0cmlidXRlSW5mbygpCgpSZXR1cm4gYXR0cmlidXRlIGluZm9ybWF0aW9uIGZyb20gdGhlIGRlZmluaXRpb24gZm9yIGEgZ2l2ZW4gYXR0cmlidXRlIHBhdGggbmFtZQoKICAgIG15ICRBdHRyaWJ1dGVJbmZvID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25BdHRyaWJ1dGVJbmZvKAogICAgICAgIEF0dHJpYnV0ZVBhdGggPT4gJ0hhcmREaXNrOjpDYXBhY2l0eScsCiAgICAgICAgRGVmaW5pdGlvbiAgICA9PiAnCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICMgLi4uCgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSGFyZERpc2snLAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hhcmQgRGlzaycsCiAgICAgICAgICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSA9PiA1MCwKICAgICAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICAgICAgICAgIFN1YiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleSA9PiAnQ2FwYWNpdHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2FwYWNpdHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpemUgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIC4uLgogICAgICAgICAgICBdOwogICAgICAgICcsCiAgICApOwoKICAgIFJldHVybnM6CgogICAgICAgIG15ICRBdHRyaWJ1dGVJbmZvID0gIHsKICAgICAgICAgICAgQ291bnREZWZhdWx0ID0+IDEsCiAgICAgICAgICAgIENvdW50TWF4ICAgICA9PiAxLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gMjAsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdDYXBhY2l0eScsCiAgICAgICAgICAgIENvdW50TWluID0+IDEsCiAgICAgICAgICAgIEtleSAgICAgID0+ICdDYXBhY2l0eScKICAgICAgICB9OwoKPWN1dAoKc3ViIERlZmluaXRpb25BdHRyaWJ1dGVJbmZvIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KERlZmluaXRpb24gQXR0cmlidXRlUGF0aCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFN1YnRyZWUgPSAkUGFyYW17RGVmaW5pdGlvbn07CiAgICBteSAkSW5mbzsKCiAgICBQQVJUOgogICAgZm9yIG15ICRQYXJ0ICggc3BsaXQgLzo6LywgJFBhcmFte0F0dHJpYnV0ZVBhdGh9ICkgewogICAgICAgIG15ICgkRm91bmQpID0gZ3JlcCB7ICRfLT57S2V5fSBlcSAkUGFydCB9IEB7JFN1YnRyZWV9OwoKICAgICAgICBsYXN0IFBBUlQgaWYgISRGb3VuZDsKCiAgICAgICAgJFN1YnRyZWUgPSAkRm91bmQtPntTdWJ9OwogICAgICAgICRJbmZvICAgID0gJEZvdW5kOwogICAgfQoKICAgIHJldHVybiAkSW5mbzsKfQoKPWJlZ2luIEludGVybmFsOgoKPWhlYWQyIF9EZWZpbml0aW9uUHJlcGFyZSgpCgpQcmVwYXJlIHRoZSBzeW50YXggb2YgYSBuZXcgZGVmaW5pdGlvbgoKICAgIG15ICRUcnVlID0gJENvbmZpZ0l0ZW1PYmplY3QtPl9EZWZpbml0aW9uUHJlcGFyZSgKICAgICAgICBEZWZpbml0aW9uUmVmID0+ICRBcnJheVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgX0RlZmluaXRpb25QcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBkZWZpbml0aW9uCiAgICBpZiAoICEkUGFyYW17RGVmaW5pdGlvblJlZn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIERlZmluaXRpb25SZWYhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17RGVmaW5pdGlvblJlZn0gfSApIHsKCiAgICAgICAgIyBzZXQgQ291bnRNaW4KICAgICAgICBpZiAoICFkZWZpbmVkICRJdGVtLT57Q291bnRNaW59ICkgewogICAgICAgICAgICAkSXRlbS0+e0NvdW50TWlufSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBDb3VudE1heAogICAgICAgICRJdGVtLT57Q291bnRNYXh9IHx8PSAxOwoKICAgICAgICAjIHNldCBDb3VudE1pbgogICAgICAgIGlmICggJEl0ZW0tPntDb3VudE1pbn0gPiAkSXRlbS0+e0NvdW50TWF4fSApIHsKICAgICAgICAgICAgJEl0ZW0tPntDb3VudE1pbn0gPSAkSXRlbS0+e0NvdW50TWF4fTsKICAgICAgICB9CgogICAgICAgICMgc2V0IENvdW50RGVmYXVsdAogICAgICAgIGlmICggIWRlZmluZWQgJEl0ZW0tPntDb3VudERlZmF1bHR9ICkgewogICAgICAgICAgICAkSXRlbS0+e0NvdW50RGVmYXVsdH0gPSAxOwogICAgICAgIH0KICAgICAgICBpZiAoICRJdGVtLT57Q291bnREZWZhdWx0fSA8ICRJdGVtLT57Q291bnRNaW59ICkgewogICAgICAgICAgICAkSXRlbS0+e0NvdW50RGVmYXVsdH0gPSAkSXRlbS0+e0NvdW50TWlufTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkSXRlbS0+e0NvdW50RGVmYXVsdH0gPiAkSXRlbS0+e0NvdW50TWF4fSApIHsKICAgICAgICAgICAgJEl0ZW0tPntDb3VudERlZmF1bHR9ID0gJEl0ZW0tPntDb3VudE1heH07CiAgICAgICAgfQoKICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbiwgaWYgIlN1YiIgaXMgZGVmaW5lZC4KICAgICAgICBpZiAoICRJdGVtLT57U3VifSAmJiByZWYgJEl0ZW0tPntTdWJ9IGVxICdBUlJBWScgKSB7CiAgICAgICAgICAgICRTZWxmLT5fRGVmaW5pdGlvblByZXBhcmUoCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uUmVmID0+ICRJdGVtLT57U3VifSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlbGV0ZSAkSXRlbS0+e1N1Yn07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwoKPWVuZCBJbnRlcm5hbDoKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6SGlzdG9yeTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06Okhpc3RvcnkgLSBtb2R1bGUgZm9yIElUU01Db25maWdJdGVtLnBtIHdpdGggaGlzdG9yeSBmdW5jdGlvbnMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBoaXN0b3J5IGZ1bmN0aW9ucy4KCj1oZWFkMiBIaXN0b3J5R2V0KCkKClJldHVybnMgYW4gYXJyYXkgcmVmZXJlbmNlIHdpdGggYWxsIGhpc3RvcnkgZW50cmllcyBmb3IgdGhlIGdpdmVuIGNvbmZpZyBpdGVtLgpFYWNoIGFycmF5IGVsZW1lbnQgaXMgYSBoYXNoIHJlZmVyZW5jZSByZXByZXNlbnRpbmcgb25lIGhpc3RvcnkgZW50cnkuCgpUaGVzZSBoYXNoIHJlZmVyZW5jZXMgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dDoKCiAgICAkSW5mb3tIaXN0b3J5RW50cnlJRH0KICAgICRJbmZve0NvbmZpZ0l0ZW1JRH0KICAgICRJbmZve0hpc3RvcnlUeXBlfQogICAgJEluZm97SGlzdG9yeVR5cGVJRH0KICAgICRJbmZve0NvbW1lbnR9CiAgICAkSW5mb3tDcmVhdGVkQnl9CiAgICAkSW5mb3tDcmVhdGVUaW1lfQogICAgJEluZm97VXNlcklEfQogICAgJEluZm97VXNlckxvZ2lufQogICAgJEluZm97VXNlckxhc3RuYW1lfQogICAgJEluZm97VXNlckZpcnN0bmFtZX0KICAgICRJbmZve1VzZXJGdWxsbmFtZX0KCiAgICBteSAkSW5mbyA9ICRDb25maWdJdGVtT2JqZWN0LT5IaXN0b3J5R2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjM0LAogICAgKTsKCj1jdXQKCnN1YiBIaXN0b3J5R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBpZiBjYWNoZWQgcmVzdWx0IGV4aXN0cywgcmV0dXJuIHRoYXQgcmVzdWx0CiAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntDSVZlcnNpb25zfS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9CiAgICAgICAgaWYgJFNlbGYtPntDYWNoZX0tPntDSVZlcnNpb25zfS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9OwoKICAgICMgZmV0Y2ggc29tZSBkYXRhIGZyb20gaGlzdG9yeSBmb3IgZ2l2ZW4gY29uZmlnIGl0ZW0KICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgY2guaWQsIGNoLmNvbmZpZ2l0ZW1faWQsIGNoLmNvbnRlbnQsIGNoLnR5cGVfaWQsICcKICAgICAgICAgICAgLiAnY2guY3JlYXRlX2J5LCBjaC5jcmVhdGVfdGltZSwgY2h0Lm5hbWUgJwogICAgICAgICAgICAuICdGUk9NIGNvbmZpZ2l0ZW1faGlzdG9yeSBjaCwgY29uZmlnaXRlbV9oaXN0b3J5X3R5cGUgY2h0ICcKICAgICAgICAgICAgLiAnV0hFUkUgY2gudHlwZV9pZCA9IGNodC5pZCBBTkQgY2guY29uZmlnaXRlbV9pZCA9ID8gJwogICAgICAgICAgICAuICdPUkRFUiBCWSBjaC5pZCcsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q29uZmlnSXRlbUlEfSBdLAogICAgKTsKCiAgICAjIHNhdmUgZGF0YSBmcm9tIGhpc3RvcnkgaW4gYXJyYXkKICAgIG15IEBFbnRyaWVzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlVG1wID0gKAogICAgICAgICAgICBIaXN0b3J5RW50cnlJRCA9PiAkUm93WzBdLAogICAgICAgICAgICBDb25maWdJdGVtSUQgICA9PiAkUm93WzFdLAogICAgICAgICAgICBDb21tZW50ICAgICAgICA9PiAkUm93WzJdLAogICAgICAgICAgICBIaXN0b3J5VHlwZUlEICA9PiAkUm93WzNdLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAkUm93WzRdLAogICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAkUm93WzVdLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAkUm93WzZdLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQEVudHJpZXMsIFwlVG1wOwogICAgfQoKICAgICMgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNlciB3aG8gY3JlYXRlZCBoaXN0b3J5IGVudHJpZXMKICAgIGZvciBteSAkRW50cnkgKEBFbnRyaWVzKSB7CgogICAgICAgICMgZ2V0IHVzZXIgaW5mb3JtYXRpb24KICAgICAgICBteSAlVXNlckluZm8gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRFbnRyeS0+e0NyZWF0ZUJ5fSwKICAgICAgICAgICAgQ2FjaGVkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBzYXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGhpc3RvcnkgZW50cnkKICAgICAgICAkRW50cnktPntVc2VySUR9ICAgICAgICA9ICRVc2VySW5mb3tVc2VySUR9OwogICAgICAgICRFbnRyeS0+e1VzZXJMb2dpbn0gICAgID0gJFVzZXJJbmZve1VzZXJMb2dpbn07CiAgICAgICAgJEVudHJ5LT57VXNlckZpcnN0bmFtZX0gPSAkVXNlckluZm97VXNlckZpcnN0bmFtZX07CiAgICAgICAgJEVudHJ5LT57VXNlckxhc3RuYW1lfSAgPSAkVXNlckluZm97VXNlckxhc3RuYW1lfTsKICAgICAgICAkRW50cnktPntVc2VyRnVsbG5hbWV9ICA9ICRVc2VySW5mb3tVc2VyRnVsbG5hbWV9OwogICAgfQoKICAgICMgc2F2ZSByZXN1bHQgaW4gY2FjaGUKICAgICRTZWxmLT57Q2FjaGV9LT57Q0lWZXJzaW9uc30tPnsgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfSA9IFxARW50cmllczsKCiAgICByZXR1cm4gXEBFbnRyaWVzOwp9Cgo9aGVhZDIgSGlzdG9yeUVudHJ5R2V0KCkKClJldHVybnMgYSBoYXNoIHJlZmVyZW5jZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIGhpc3RvcnkgZW50cnkuClRoZSBoYXNoIHJlZmVyZW5jZSBjb250YWluIGluZm9ybWF0aW9uIGFib3V0OgoKICAgICRJbmZve0hpc3RvcnlFbnRyeUlEfQogICAgJEluZm97Q29uZmlnSXRlbUlEfQogICAgJEluZm97SGlzdG9yeVR5cGV9CiAgICAkSW5mb3tIaXN0b3J5VHlwZUlEfQogICAgJEluZm97Q29tbWVudH0KICAgICRJbmZve0NyZWF0ZUJ5fQogICAgJEluZm97Q3JlYXRlVGltZX0KICAgICRJbmZve1VzZXJJRH0KICAgICRJbmZve1VzZXJMb2dpbn0KICAgICRJbmZve1VzZXJMYXN0bmFtZX0KICAgICRJbmZve1VzZXJGaXJzdG5hbWV9CiAgICAkSW5mb3tVc2VyRnVsbG5hbWV9CgogICAgbXkgJEluZm8gPSAkQ29uZmlnSXRlbU9iamVjdC0+SGlzdG9yeUVudHJ5R2V0KAogICAgICAgIEhpc3RvcnlFbnRyeUlEID0+IDEyMzQsCiAgICApOwoKPWN1dAoKc3ViIEhpc3RvcnlFbnRyeUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSGlzdG9yeUVudHJ5SUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBpZiBjYWNoZWQgcmVzdWx0IGV4aXN0cywgcmV0dXJuIHRoYXQgcmVzdWx0CiAgICBpZiAoICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbnN9LT57ICRQYXJhbXtIaXN0b3J5RW50cnlJRH0gfSApIHsKICAgICAgICBteSAoJENvbmZpZ0l0ZW1JRCkgPSBrZXlzICV7ICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbnN9LT57ICRQYXJhbXtIaXN0b3J5RW50cnlJRH0gfSB9OwogICAgICAgIHJldHVybiAkU2VsZi0+e0NhY2hlfS0+e1ZlcnNpb25zfS0+eyAkUGFyYW17SGlzdG9yeUVudHJ5SUR9IH0tPnskQ29uZmlnSXRlbUlEfTsKICAgIH0KCiAgICAjIGZldGNoIGEgc2luZ2xlIGVudHJ5IGZyb20gaGlzdG9yeQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBjaC5pZCwgY2guY29uZmlnaXRlbV9pZCwgY2guY29udGVudCwgY2gudHlwZV9pZCwgJwogICAgICAgICAgICAuICdjaC5jcmVhdGVfYnksIGNoLmNyZWF0ZV90aW1lLCBjaHQubmFtZSAnCiAgICAgICAgICAgIC4gJ0ZST00gY29uZmlnaXRlbV9oaXN0b3J5IGNoLCBjb25maWdpdGVtX2hpc3RvcnlfdHlwZSBjaHQgJwogICAgICAgICAgICAuICdXSEVSRSBjaC50eXBlX2lkID0gY2h0LmlkIEFORCBjaC5pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtIaXN0b3J5RW50cnlJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAlRW50cnk7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICAlRW50cnkgPSAoCiAgICAgICAgICAgIEhpc3RvcnlFbnRyeUlEID0+ICRSb3dbMF0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgID0+ICRSb3dbMl0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlSUQgID0+ICRSb3dbM10sCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICRSb3dbNF0sCiAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICRSb3dbNV0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgID0+ICRSb3dbNl0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB1c2VyIGRhdGEgZm9yIHRoaXMgZW50cnkKICAgIG15ICVVc2VySW5mbyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkRW50cnl7Q3JlYXRlQnl9LAogICAgICAgIENhY2hlZCA9PiAxLAogICAgKTsKCiAgICAkRW50cnl7VXNlcklEfSAgICAgICAgPSAkVXNlckluZm97VXNlcklEfTsKICAgICRFbnRyeXtVc2VyTG9naW59ICAgICA9ICRVc2VySW5mb3tVc2VyTG9naW59OwogICAgJEVudHJ5e1VzZXJGaXJzdG5hbWV9ID0gJFVzZXJJbmZve1VzZXJGaXJzdG5hbWV9OwogICAgJEVudHJ5e1VzZXJMYXN0bmFtZX0gID0gJFVzZXJJbmZve1VzZXJMYXN0bmFtZX07CiAgICAkRW50cnl7VXNlckZ1bGxuYW1lfSAgPSAkVXNlckluZm97VXNlckZ1bGxuYW1lfTsKCiAgICAkU2VsZi0+e0NhY2hlfS0+e1ZlcnNpb25zfS0+eyAkUGFyYW17SGlzdG9yeUVudHJ5SUR9IH0tPnsgJEVudHJ5e0NvbmZpZ0l0ZW1JRH0gfSA9IFwlRW50cnk7CgogICAgcmV0dXJuIFwlRW50cnk7Cn0KCj1oZWFkMiBIaXN0b3J5QWRkKCkKCkFkZHMgYSBzaW5nbGUgaGlzdG9yeSBlbnRyeSB0byB0aGUgaGlzdG9yeS4KCiAgICAkQ29uZmlnSXRlbU9iamVjdC0+SGlzdG9yeUFkZCgKICAgICAgICBDb25maWdJdGVtSUQgID0+IDEyMzQsCiAgICAgICAgSGlzdG9yeVR5cGUgICA9PiAnTmV3Q29uZmlnSXRlbScsICMgZWl0aGVyIEhpc3RvcnlUeXBlIG9yIEhpc3RvcnlUeXBlSUQgaXMgbmVlZGVkCiAgICAgICAgSGlzdG9yeVR5cGVJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgID0+ICdBbnkgdXNlZnVsIGluZm9ybWF0aW9uJywKICAgICk7Cgo9Y3V0CgpzdWIgSGlzdG9yeUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29uZmlnSXRlbUlEIFVzZXJJRCBDb21tZW50KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISggJFBhcmFte0hpc3RvcnlUeXBlfSB8fCAkUGFyYW17SGlzdG9yeVR5cGVJRH0gKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSGlzdG9yeVR5cGUgb3IgSGlzdG9yeVR5cGVJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGhpc3RvcnkgdHlwZSBpZCBmcm9tIGhpc3RvcnkgdHlwZSBpZiBoaXN0b3J5IHR5cGUgaXMgZ2l2ZW4uCiAgICBpZiAoICRQYXJhbXtIaXN0b3J5VHlwZX0gKSB7CiAgICAgICAgbXkgJElkID0gJFNlbGYtPkhpc3RvcnlUeXBlTG9va3VwKCBIaXN0b3J5VHlwZSA9PiAkUGFyYW17SGlzdG9yeVR5cGV9ICk7CgogICAgICAgIGlmICggISRJZCApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0ludmFsaWQgaGlzdG9yeSB0eXBlIGdpdmVuIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRQYXJhbXtIaXN0b3J5VHlwZUlEfSA9ICRJZDsKICAgIH0KCiAgICAjIGlmIGhpc3RvcnkgdHlwZSBpcyBnaXZlbgogICAgZWxzaWYgKCAkUGFyYW17SGlzdG9yeVR5cGVJRH0gKSB7CiAgICAgICAgbXkgJE5hbWUgPSAkU2VsZi0+SGlzdG9yeVR5cGVMb29rdXAoIEhpc3RvcnlUeXBlSUQgPT4gJFBhcmFte0hpc3RvcnlUeXBlSUR9ICk7CgogICAgICAgIGlmICggISROYW1lICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnSW52YWxpZCBoaXN0b3J5IHR5cGUgaWQgZ2l2ZW4hJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIGdpdmVuIGNvbmZpZyBpdGVtIGlkIHBvaW50cyB0byBhbiBleGlzdGluZyBjb25maWcgaXRlbSBudW1iZXIKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CgogICAgICAgIG15ICROdW1iZXIgPSAkU2VsZi0+Q29uZmlnSXRlbUxvb2t1cCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISROdW1iZXIgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdJbnZhbGlkIGNvbmZpZyBpdGVtIGlkIGdpdmVuIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgY2FjaGVkIHJlc3VsdHMKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+e0NJVmVyc2lvbnN9LT57ICRQYXJhbXtDb25maWdJdGVtSUR9IH07CgogICAgIyBzaG9ydGVuIHRoZSBjb21tZW50IGlmIGl0IGlzIGJpZ2dlciB0aGFuIG1heCBsZW5ndGgKICAgIGlmICggbGVuZ3RoKCAkUGFyYW17Q29tbWVudH0gKSA+IDI1NSApIHsKCiAgICAgICAgbXkgKCAkRmllbGQsICRPbGQsICROZXcgKSA9IHNwbGl0ICclJScsICRQYXJhbXtDb21tZW50fSwgMzsKCiAgICAgICAgbXkgJExlbmd0aCA9IGludCggKCAyNTUgLSBsZW5ndGgoJEZpZWxkKSAtIDQgKSAvIDIgKTsKCiAgICAgICAgaWYgKCBsZW5ndGgoJE9sZCkgPiAkTGVuZ3RoICkgewogICAgICAgICAgICBteSAkSW5kZXggPSBpbnQoICRMZW5ndGggLyAyICk7CiAgICAgICAgICAgICRPbGQgPSBzdWJzdHIoICRPbGQsIDAsICRJbmRleCAtIDIgKSAuICcuLi4nIC4gc3Vic3RyKCAkT2xkLCBsZW5ndGgoJE9sZCkgLSAkSW5kZXggKyAyICk7CiAgICAgICAgfQogICAgICAgIGlmICggbGVuZ3RoKCROZXcpID4gJExlbmd0aCApIHsKICAgICAgICAgICAgbXkgJEluZGV4ID0gaW50KCAkTGVuZ3RoIC8gMiApOwogICAgICAgICAgICAkTmV3ID0gc3Vic3RyKCAkTmV3LCAwLCAkSW5kZXggLSAyICkgLiAnLi4uJyAuIHN1YnN0ciggJE5ldywgbGVuZ3RoKCROZXcpIC0gJEluZGV4ICsgMiApOwogICAgICAgIH0KICAgICAgICBteSAkTmV3Q29tbWVudCA9ICRGaWVsZCAuICclJScgLiAkT2xkIC4gJyUlJyAuICROZXc7CgogICAgICAgICRQYXJhbXtDb21tZW50fSA9ICROZXdDb21tZW50OwogICAgfQoKICAgICMgaW5zZXJ0IGhpc3RvcnkgZW50cnkKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBjb25maWdpdGVtX2hpc3RvcnkgKCBjb25maWdpdGVtX2lkLCBjb250ZW50LCBjcmVhdGVfYnksICcKICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIHR5cGVfaWQgKSBWQUxVRVMgKCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyApJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkUGFyYW17SGlzdG9yeVR5cGVJRH0sCiAgICAgICAgXSwKICAgICk7Cn0KCj1oZWFkMiBIaXN0b3J5RGVsZXRlKCkKCkRlbGV0ZXMgY29tcGxldGUgaGlzdG9yeSBmb3IgYSBnaXZlbiBjb25maWcgaXRlbQoKICAgICRDb25maWdJdGVtT2JqZWN0LT5IaXN0b3J5RGVsZXRlKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEhpc3RvcnlEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZ0l0ZW1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSBjYWNoZWQgcmVzdWx0cwogICAgZGVsZXRlICRTZWxmLT57Q2FjaGV9LT57Q0lWZXJzaW9ufS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9OwogICAgZm9yIG15ICRWZXJzaW9uTnIgKCBzb3J0IGtleXMgJXsgJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uc30gfSApIHsKICAgICAgICBteSAoJENhY2hlQ29uZmlnSXRlbSkgPSBrZXlzICV7ICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbnN9LT57JFZlcnNpb25Ocn0gfTsKICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uc30tPnskVmVyc2lvbk5yfSBpZiAkQ2FjaGVDb25maWdJdGVtIGVxICRQYXJhbXtDb25maWdJdGVtSUR9OwogICAgfQoKICAgICMgZGVsZXRlIGhpc3RvcnkgZm9yIGdpdmVuIGNvbmZpZyBpdGVtCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNvbmZpZ2l0ZW1faGlzdG9yeSBXSEVSRSBjb25maWdpdGVtX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q29uZmlnSXRlbUlEfSBdLAogICAgKTsKfQoKPWhlYWQyIEhpc3RvcnlFbnRyeURlbGV0ZSgpCgpEZWxldGVzIGEgc2luZ2xlIGhpc3RvcnkgZW50cnkuCgogICAgJENvbmZpZ0l0ZW1PYmplY3QtPkhpc3RvcnlFbnRyeURlbGV0ZSgKICAgICAgICBIaXN0b3J5RW50cnlJRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEhpc3RvcnlFbnRyeURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSGlzdG9yeUVudHJ5SUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgc2luZ2xlIGVudHJ5CiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNvbmZpZ2l0ZW1faGlzdG9yeSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0hpc3RvcnlFbnRyeUlEfSBdLAogICAgKTsKfQoKPWhlYWQyIEhpc3RvcnlUeXBlTG9va3VwKCkKClRoaXMgbWV0aG9kIGRvZXMgYSBsb29rdXAgZm9yIGEgaGlzdG9yeSB0eXBlLiBJZiBhIGhpc3RvcnkgdHlwZSBpZCBpcyBnaXZlbiwKaXQgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgaGlzdG9yeSB0eXBlLiBJZiBhIGhpc3RvcnkgdHlwZSBpcyBnaXZlbiwgdGhlIGFwcHJvcHJpYXRlCmlkIGlzIHJldHVybmVkLgoKICAgIG15ICROYW1lID0gJENvbmZpZ0l0ZW1PYmplY3QtPkhpc3RvcnlUeXBlTG9va3VwKAogICAgICAgIEhpc3RvcnlUeXBlSUQgPT4gMTIzNCwKICAgICk7CgogICAgbXkgJElkID0gJENvbmZpZ0l0ZW1PYmplY3QtPkhpc3RvcnlUeXBlTG9va3VwKAogICAgICAgIEhpc3RvcnlUeXBlID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgICk7Cgo9Y3V0CgpzdWIgSGlzdG9yeVR5cGVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAoJEtleSkgPSBncmVwIHsgJFBhcmFteyRffSB9IHF3KEhpc3RvcnlUeXBlSUQgSGlzdG9yeVR5cGUpOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJEtleSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSGlzdG9yeVR5cGVJRCBvciBIaXN0b3J5VHlwZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaWYgcmVzdWx0IGlzIGNhY2hlZCByZXR1cm4gdGhhdCByZXN1bHQKICAgIHJldHVybiAkU2VsZi0+e0NhY2hlfS0+e0hpc3RvcnlUeXBlTG9va3VwfS0+eyAkUGFyYW17JEtleX0gfQogICAgICAgIGlmICRTZWxmLT57Q2FjaGV9LT57SGlzdG9yeVR5cGVMb29rdXB9LT57ICRQYXJhbXskS2V5fSB9OwoKICAgICMgc2V0IHRoZSBhcHByb3ByaWF0ZSBTUUwgc3RhdGVtZW50CiAgICBteSAkU1FMID0gJ1NFTEVDVCBuYW1lIEZST00gY29uZmlnaXRlbV9oaXN0b3J5X3R5cGUgV0hFUkUgaWQgPSA/JzsKCiAgICBpZiAoICRLZXkgZXEgJ0hpc3RvcnlUeXBlJyApIHsKICAgICAgICAkU1FMID0gJ1NFTEVDVCBpZCBGUk9NIGNvbmZpZ2l0ZW1faGlzdG9yeV90eXBlIFdIRVJFIG5hbWUgPSA/JzsKICAgIH0KCiAgICAjIGZldGNoIHRoZSByZXF1ZXN0ZWQgdmFsdWUKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17JEtleX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkVmFsdWU7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRWYWx1ZSA9ICRSb3dbMF07CiAgICB9CgogICAgIyBzYXZlIHZhbHVlIGluIGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlfS0+e0hpc3RvcnlUeXBlTG9va3VwfS0+eyAkUGFyYW17JEtleX0gfSA9ICRWYWx1ZTsKCiAgICByZXR1cm4gJFZhbHVlOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6TnVtYmVyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6TnVtYmVyIC0gc3ViIG1vZHVsZSBvZiBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0KCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGNvbmZpZyBpdGVtIG51bWJlciBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIENvbmZpZ0l0ZW1OdW1iZXJMb29rdXAoKQoKcmV0dXJuIGNvbmZpZyBpdGVtIGlkIG9yIGNvbmZpZyBpdGVtIG51bWJlcgoKICAgIG15ICRDb25maWdJdGVtTnVtYmVyID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1OdW1iZXJMb29rdXAoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICk7CgogICAgb3IKCiAgICBteSAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1OdW1iZXJMb29rdXAoCiAgICAgICAgQ29uZmlnSXRlbU51bWJlciA9PiAnMTIzNDU0MzIxJywKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbU51bWJlckxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q29uZmlnSXRlbUlEfSAmJiAhJFBhcmFte0NvbmZpZ0l0ZW1OdW1iZXJ9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDb25maWdJdGVtSUQgb3IgQ29uZmlnSXRlbU51bWJlciEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICAgICAgcmV0dXJuICRTZWxmLT57Q2FjaGV9LT57Q29uZmlnSXRlbU51bWJlckxvb2t1cH0tPntJRH0tPnsgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gfQogICAgICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+e0NvbmZpZ0l0ZW1OdW1iZXJMb29rdXB9LT57SUR9LT57ICRQYXJhbXtDb25maWdJdGVtSUR9IH07CgogICAgICAgICMgYXNrIGRhdGFiYXNlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgY29uZmlnaXRlbV9udW1iZXIgRlJPTSBjb25maWdpdGVtIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDb25maWdJdGVtSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgJENvbmZpZ0l0ZW1OdW1iZXI7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXIgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAgICAgJFNlbGYtPntDYWNoZX0tPntDb25maWdJdGVtTnVtYmVyTG9va3VwfS0+e0lEfS0+eyAkUGFyYW17Q29uZmlnSXRlbUlEfSB9ID0gJENvbmZpZ0l0ZW1OdW1iZXI7CgogICAgICAgIHJldHVybiAkQ29uZmlnSXRlbU51bWJlcjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgcmV0dXJuICRTZWxmLT57Q2FjaGV9LT57Q29uZmlnSXRlbU51bWJlckxvb2t1cH0tPntOdW1iZXJ9LT57ICRQYXJhbXtDb25maWdJdGVtTnVtYmVyfSB9CiAgICAgICAgaWYgJFNlbGYtPntDYWNoZX0tPntDb25maWdJdGVtTnVtYmVyTG9va3VwfS0+e051bWJlcn0tPnsgJFBhcmFte0NvbmZpZ0l0ZW1OdW1iZXJ9IH07CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtIFdIRVJFIGNvbmZpZ2l0ZW1fbnVtYmVyID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NvbmZpZ0l0ZW1OdW1iZXJ9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ29uZmlnSXRlbUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ29uZmlnSXRlbUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIGNhY2hlIHRoZSByZXN1bHQKICAgICRTZWxmLT57Q2FjaGV9LT57Q29uZmlnSXRlbU51bWJlckxvb2t1cH0tPntOdW1iZXJ9LT57ICRQYXJhbXtDb25maWdJdGVtTnVtYmVyfSB9ID0gJENvbmZpZ0l0ZW1JRDsKCiAgICByZXR1cm4gJENvbmZpZ0l0ZW1JRDsKfQoKPWhlYWQyIENvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUoKQoKY3JlYXRlIGEgbmV3IGNvbmZpZyBpdGVtIG51bWJlcgoKICAgIG15ICROdW1iZXIgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbU51bWJlckNyZWF0ZSgKICAgICAgICBUeXBlICAgID0+ICdBdXRvSW5jcmVtZW50JywKICAgICAgICBDbGFzc0lEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZmlnSXRlbU51bWJlckNyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUeXBlIENsYXNzSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkUGFyYW17VHlwZX0gKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGxvYWQgY29uZmlnIGl0ZW0gbnVtYmVyIGdlbmVyYXRvciBiYWNrZW5kIG1vZHVsZSAkUGFyYW17VHlwZX0hICRAIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlQmFzZUNsYXNzKCAkUGFyYW17VHlwZX0gKTsKCiAgICAjIGNyZWF0ZSBudW1iZXIKICAgIG15ICROdW1iZXIgPSAkU2VsZi0+X0NvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUoJVBhcmFtKTsKCiAgICByZXR1cm4gJE51bWJlcjsKfQoKPWhlYWQyIEN1cnJlbnRDb3VudGVyR2V0KCkKCnJldHVybiB0aGUgY3VycmVudCBjb3VudGVyIG9mIGEgY2xhc3MKCiAgICBteSAkQ291bnRlciA9ICRDb25maWdJdGVtT2JqZWN0LT5DdXJyZW50Q291bnRlckdldCgKICAgICAgICBDbGFzc0lEID0+IDEyMywKICAgICAgICBUeXBlICAgID0+ICdBdXRvSW5jcmVtZW50JywKICAgICk7Cgo9Y3V0CgpzdWIgQ3VycmVudENvdW50ZXJHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3NJRCBUeXBlKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFzayB0aGUgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGNvdW50ZXIgRlJPTSBjb25maWdpdGVtX2NvdW50ZXIgV0hFUkUgJwogICAgICAgICAgICAuICdjbGFzc19pZCA9ID8gQU5EIGNvdW50ZXJfdHlwZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDbGFzc0lEfSwgXCRQYXJhbXtUeXBlfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJE51bWJlcjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE51bWJlciA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICROdW1iZXI7Cn0KCj1oZWFkMiBDdXJyZW50Q291bnRlclNldCgpCgpzZXQgdGhlIGN1cnJlbnQgY291bnRlciBvZiBhIGNsYXNzCgogICAgbXkgJFRydWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q3VycmVudENvdW50ZXJTZXQoCiAgICAgICAgQ2xhc3NJRCA9PiAxMjMsCiAgICAgICAgVHlwZSAgICA9PiAnQXV0b0luY3JlbWVudCcsCiAgICAgICAgQ291bnRlciA9PiAnMTInLAogICAgKTsKCj1jdXQKCnN1YiBDdXJyZW50Q291bnRlclNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzc0lEIFR5cGUgQ291bnRlcikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgb2xkIGNvdW50ZXIKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBjb25maWdpdGVtX2NvdW50ZXIgV0hFUkUgY2xhc3NfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDbGFzc0lEfSBdLAogICAgKTsKCiAgICAjIHNldCBuZXcgY291bnRlcgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY29uZmlnaXRlbV9jb3VudGVyICcKICAgICAgICAgICAgLiAnKGNsYXNzX2lkLCBjb3VudGVyX3R5cGUsIGNvdW50ZXIpIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzSUR9LCBcJFBhcmFte1R5cGV9LCBcJFBhcmFte0NvdW50ZXJ9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlBlcm1pc3Npb24gLSBtb2R1bGUgZm9yIElUU01Db25maWdJdGVtLnBtIHdpdGggUGVybWlzc2lvbiBmdW5jdGlvbnMKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIFBlcm1pc3Npb24gZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBQZXJtaXNzaW9uKCkKCnJldHVybnMgd2hldGhlciB0aGUgdXNlciBoYXMgcGVybWlzc2lvbnMgb3Igbm90CgogICAgbXkgJEFjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICdybycsCiAgICAgICAgU2NvcGUgICAgPT4gJ0NsYXNzJywgIyBDbGFzcyB8fCBJdGVtCiAgICAgICAgQ2xhc3NJRCAgPT4gMTIzLCAgICAgIyBpZiBTY29wZSBpcyAnQ2xhc3MnCiAgICAgICAgSXRlbUlEICAgPT4gMTIzLCAgICAgIyBpZiBTY29wZSBpcyAnSXRlbScKICAgICAgICBVc2VySUQgICA9PiAxMjMsCiAgICApOwoKb3Igd2l0aG91dCBsb2dnaW5nLCBmb3IgZXhhbXBsZSBmb3IgdG8gY2hlY2sgaWYgYSBsaW5rL2FjdGlvbiBzaG91bGQgYmUgc2hvd24KCiAgICBteSAkQWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgICAgPT4gJ3JvJywKICAgICAgICBTY29wZSAgICA9PiAnQ2xhc3MnLCAjIENsYXNzIHx8IEl0ZW0KICAgICAgICBDbGFzc0lEICA9PiAxMjMsICAgICAjIGlmIFNjb3BlIGlzICdDbGFzcycKICAgICAgICBJdGVtSUQgICA9PiAxMjMsICAgICAjIGlmIFNjb3BlIGlzICdJdGVtJwogICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhUeXBlIFNjb3BlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgSXRlbUlEIG9yIENsYXNzSUQgZGVwZW5kZW50CiAgICAjIG9uIHRoZSBTY29wZQogICAgaWYgKAogICAgICAgICggJFBhcmFte1Njb3BlfSBlcSAnQ2xhc3MnICAgJiYgISRQYXJhbXtDbGFzc0lEfSApCiAgICAgICAgfHwgKCAkUGFyYW17U2NvcGV9IGVxICdJdGVtJyAmJiAhJFBhcmFte0l0ZW1JRH0gKQogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgQ2xhc3NJRCBpZiBTY29wZSBpcyAnQ2xhc3MnIG9yIEl0ZW1JRCBpZiBTY29wZSBpcyAnSXRlbSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJ1biBhbGwgSVRTTUNvbmZpZ0l0ZW0gUGVybWlzc2lvbiBtb2R1bGVzCiAgICBpZiAoCiAgICAgICAgcmVmICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCggJ0lUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uOjonIC4gJFBhcmFte1Njb3BlfSApIGVxICdIQVNIJwogICAgICAgICkKICAgIHsKICAgICAgICBteSAlTW9kdWxlcyA9ICV7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCggJ0lUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uOjonIC4gJFBhcmFte1Njb3BlfSApCiAgICAgICAgfTsKICAgICAgICBNT0RVTEU6CiAgICAgICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJU1vZHVsZXMgKSB7CgogICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgIG5leHQgTU9EVUxFCiAgICAgICAgICAgICAgICBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJE1vZHVsZXN7JE1vZHVsZX0tPntNb2R1bGV9ICk7CgogICAgICAgICAgICAjIGNyZWF0ZSBvYmplY3QKICAgICAgICAgICAgbXkgJE1vZHVsZU9iamVjdCA9ICRNb2R1bGVzeyRNb2R1bGV9LT57TW9kdWxlfS0+bmV3KCk7CgogICAgICAgICAgICAjIGV4ZWN1dGUgUnVuKCkKICAgICAgICAgICAgbXkgJEFjY2Vzc09rID0gJE1vZHVsZU9iamVjdC0+UnVuKCVQYXJhbSk7CgogICAgICAgICAgICAjIGNoZWNrIGdyYW50ZWQgb3B0aW9uIChzaG91bGQgSSBzYXkgb2spCiAgICAgICAgICAgIGlmICggJEFjY2Vzc09rICYmICRNb2R1bGVzeyRNb2R1bGV9LT57R3JhbnRlZH0gKSB7CgogICAgICAgICAgICAgICAgIyBhY2Nlc3Mgb2sKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJldHVybiBiZWNhdXNlIGFjY2VzcyBpcyBmYWxzZSBidXQgaXQncyByZXF1aXJlZAogICAgICAgICAgICBpZiAoICEkQWNjZXNzT2sgJiYgJE1vZHVsZXN7JE1vZHVsZX0tPntSZXF1aXJlZH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkUGFyYW17TG9nTm99ICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlBlcm1pc3Npb24gZGVuaWVkIGJlY2F1c2UgbW9kdWxlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIigkTW9kdWxlc3skTW9kdWxlfS0+e01vZHVsZX0pIGlzIHJlcXVpcmVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIihVc2VySUQ6ICRQYXJhbXtVc2VySUR9ICckUGFyYW17VHlwZX0nICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIm9uICRQYXJhbXtTY29wZX06ICIgLiAkUGFyYW17ICRQYXJhbXtTY29wZX0gLiAnSUQnIH0gLiAiKSEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhY2Nlc3Mgbm90IG9rCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBkb24ndCBncmFudCBhY2Nlc3MKICAgIGlmICggISRQYXJhbXtMb2dOb30gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiUGVybWlzc2lvbiBkZW5pZWQgKFVzZXJJRDogJFBhcmFte1VzZXJJRH0gJyRQYXJhbXtUeXBlfScgIgogICAgICAgICAgICAgICAgLiAib24gJFBhcmFte1Njb3BlfTogIiAuICRQYXJhbXsgJFBhcmFte1Njb3BlfSAuICdJRCcgfSAuICIpISIsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm47Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6VmVyc2lvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6TWlncmF0aW9uczo6T1RSUzY6OlN5c0NvbmZpZykKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBTdG9yYWJsZTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlZlcnNpb24gLSBzdWIgbW9kdWxlIG9mIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbQoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgdmVyc2lvbiBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIFZlcnNpb25ab29tTGlzdCgpCgpyZXR1cm4gYSBjb25maWcgaXRlbSB2ZXJzaW9uIGxpc3QgYXMgYXJyYXktaGFzaCByZWZlcmVuY2UKCiAgICBteSAkVmVyc2lvbkxpc3RSZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvblpvb21MaXN0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFZlcnNpb25ab29tTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ29uZmlnSXRlbUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY29uZmlnIGl0ZW0KICAgIG15ICRDb25maWdJdGVtID0gJFNlbGYtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgKTsKCiAgICAjIGdldCB2ZXJzaW9uIHpvb20gbGlzdAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIG5hbWUsIGRlcGxfc3RhdGVfaWQsIGluY2lfc3RhdGVfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkgJwogICAgICAgICAgICAuICdGUk9NIGNvbmZpZ2l0ZW1fdmVyc2lvbiBXSEVSRSBjb25maWdpdGVtX2lkID0gPyBPUkRFUiBCWSBpZCcsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q29uZmlnSXRlbUlEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBWZXJzaW9uTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJVZlcnNpb247CiAgICAgICAgJFZlcnNpb257VmVyc2lvbklEfSAgID0gJFJvd1swXTsKICAgICAgICAkVmVyc2lvbntOYW1lfSAgICAgICAgPSAkUm93WzFdOwogICAgICAgICRWZXJzaW9ue0RlcGxTdGF0ZUlEfSA9ICRSb3dbMl07CiAgICAgICAgJFZlcnNpb257SW5jaVN0YXRlSUR9ID0gJFJvd1szXTsKICAgICAgICAkVmVyc2lvbntDcmVhdGVUaW1lfSAgPSAkUm93WzRdOwogICAgICAgICRWZXJzaW9ue0NyZWF0ZUJ5fSAgICA9ICRSb3dbNV07CgogICAgICAgIHB1c2ggQFZlcnNpb25MaXN0LCBcJVZlcnNpb247CiAgICB9CgogICAgZm9yIG15ICRWZXJzaW9uIChAVmVyc2lvbkxpc3QpIHsKCiAgICAgICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBmdW5jdGlvbmFsaXR5CiAgICAgICAgbXkgJERlcGxTdGF0ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJFZlcnNpb24tPntEZXBsU3RhdGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgJFZlcnNpb24tPntEZXBsU3RhdGV9ICAgICA9ICREZXBsU3RhdGUtPntOYW1lfTsKICAgICAgICAkVmVyc2lvbi0+e0RlcGxTdGF0ZVR5cGV9ID0gJERlcGxTdGF0ZS0+e0Z1bmN0aW9uYWxpdHl9OwoKICAgICAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBmdW5jdGlvbmFsaXR5CiAgICAgICAgbXkgJEluY2lTdGF0ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJFZlcnNpb24tPntJbmNpU3RhdGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgJFZlcnNpb24tPntJbmNpU3RhdGV9ICAgICA9ICRJbmNpU3RhdGUtPntOYW1lfTsKICAgICAgICAkVmVyc2lvbi0+e0luY2lTdGF0ZVR5cGV9ID0gJEluY2lTdGF0ZS0+e0Z1bmN0aW9uYWxpdHl9OwoKICAgICAgICAjIGFkZCBjb25maWcgaXRlbSBkYXRhCiAgICAgICAgJFZlcnNpb24tPntDbGFzc0lEfSAgICAgICAgICA9ICRDb25maWdJdGVtLT57Q2xhc3NJRH07CiAgICAgICAgJFZlcnNpb24tPntDbGFzc30gICAgICAgICAgICA9ICRDb25maWdJdGVtLT57Q2xhc3N9OwogICAgICAgICRWZXJzaW9uLT57TnVtYmVyfSAgICAgICAgICAgPSAkQ29uZmlnSXRlbS0+e051bWJlcn07CiAgICAgICAgJFZlcnNpb24tPntDdXJEZXBsU3RhdGVJRH0gICA9ICRDb25maWdJdGVtLT57Q3VyRGVwbFN0YXRlSUR9OwogICAgICAgICRWZXJzaW9uLT57Q3VyRGVwbFN0YXRlfSAgICAgPSAkQ29uZmlnSXRlbS0+e0N1ckRlcGxTdGF0ZX07CiAgICAgICAgJFZlcnNpb24tPntDdXJEZXBsU3RhdGVUeXBlfSA9ICRDb25maWdJdGVtLT57Q3VyRGVwbFN0YXRlVHlwZX07CiAgICAgICAgJFZlcnNpb24tPntDdXJJbmNpU3RhdGVJRH0gICA9ICRDb25maWdJdGVtLT57Q3VySW5jaVN0YXRlSUR9OwogICAgICAgICRWZXJzaW9uLT57Q3VySW5jaVN0YXRlfSAgICAgPSAkQ29uZmlnSXRlbS0+e0N1ckluY2lTdGF0ZX07CiAgICAgICAgJFZlcnNpb24tPntDdXJJbmNpU3RhdGVUeXBlfSA9ICRDb25maWdJdGVtLT57Q3VySW5jaVN0YXRlVHlwZX07CiAgICB9CgogICAgcmV0dXJuIFxAVmVyc2lvbkxpc3Q7Cn0KCj1oZWFkMiBWZXJzaW9uTGlzdEFsbCgpCgpSZXR1cm5zIGEgdHdvLWRpbWVuc2lvbmFsIGhhc2ggcmVmZXJlbmNlIHdpdGggdGhlIGNvbmZpZyBpdGVtIGlkcyBhcyBrZXlzIG9mIHRoZSBmaXJzdCBsZXZlbAphbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmVyc2lvbiBpZHMgYXMga2V5cyBvZiB0aGUgc2Vjb25kIGxldmVsLAp0aGVuIGZvbGxvd2VkIGJ5IHRoZSB2ZXJzaW9uIGRhdGEgYXMgaGFzaCByZWZlcmVuY2UuCgogICAgbXkgJFZlcnNpb25MaXN0UmVmID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25MaXN0QWxsKAogICAgICAgIENvbmZpZ0l0ZW1JRHMgPT4gWyAxLCAyLCAzLCA0LCAuLi5dLCAgICAjIG9wdGlvbmFsCgogICAgICAgIE9sZGVyRGF0ZSAgICAgPT4gJzIwMTQtMTItMjIgMjM6NTk6NTknLCAjIG9wdGlvbmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmluZHMgdmVyc2lvbnMgb2xkZXIgdGhhbiB0aGUgZ2l2ZW4gZGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZvcm1hdCBNVVNUIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWVlZWS1NTS1ERCBISDpNTTpTUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpbGwgbWlzc2luZyB2YWx1ZXMgd2l0aCAwIGZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRXhhbXBsZTogMjAxNC0wNC0wMSAwNzowMzowNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBpdCB3b24ndCBiZSB0YWtlbiBhcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZhbGlkIHNlYXJjaCBwYXJhbWV0ZXIKCiAgICAgICAgTGltaXQgICAgICAgICA9PiAxMDAwMDAwLCAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICk7CgpSZXR1cm5zOgoKJFZlcnNpb25MaXN0UmVmID0gewoKICAgICMgQ29uZmlnSXRlbUlECiAgICAxID0+IHsKCiAgICAgICAgIyBWZXJzaW9uSUQKICAgICAgICAxMDAgPT4gewogICAgICAgICAgICBWZXJzaW9uSUQgICAgPT4gMTAwLAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gMSwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdDb25maWdJdGVtMScsCiAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiA1LAogICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gMywKICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+IDIsCiAgICAgICAgICAgIENyZWF0ZVRpbWUgICA9PiAnMjAxNi0wMy0yMiAxNzo1ODowMCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICA9PiAxLAogICAgICAgIH0sCgogICAgICAgICMgVmVyc2lvbklECiAgICAgICAgMTAxID0+IHsKICAgICAgICAgICAgVmVyc2lvbklEICAgID0+IDEwMSwKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnQ29uZmlnSXRlbTInLAogICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gNSwKICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+IDMsCiAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAyLAogICAgICAgICAgICBDcmVhdGVUaW1lICAgPT4gJzIwMTYtMDMtMjIgMTc6NTg6MDAnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIENvbmZpZ0l0ZW1JRAogICAgMiA9PiB7CgogICAgICAgICMgVmVyc2lvbklECiAgICAgICAgMTUwID0+IHsKICAgICAgICAgICAgVmVyc2lvbklEICAgID0+IDE1MCwKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+IDIsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnQ29uZmlnSXRlbTEnLAogICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gNSwKICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+IDMsCiAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAyLAogICAgICAgICAgICBDcmVhdGVUaW1lICAgPT4gJzIwMTYtMDMtMjIgMTc6NTg6MDAnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgPT4gMSwKICAgICAgICB9LAoKICAgICAgICAjIFZlcnNpb25JRAogICAgICAgIDE1MSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25JRCAgICA9PiAxNTEsCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAyLAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0NvbmZpZ0l0ZW0xJywKICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+IDUsCiAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAzLAogICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gMiwKICAgICAgICAgICAgQ3JlYXRlVGltZSAgID0+ICcyMDE2LTAzLTIyIDE3OjU4OjAwJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCn07Cgo9Y3V0CgpzdWIgVmVyc2lvbkxpc3RBbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGJ1aWxkIHNxbAogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaWQsIGNvbmZpZ2l0ZW1faWQsIG5hbWUsIGRlZmluaXRpb25faWQsCiAgICAgICAgZGVwbF9zdGF0ZV9pZCwgaW5jaV9zdGF0ZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieQogICAgICAgIEZST00gY29uZmlnaXRlbV92ZXJzaW9uIFdIRVJFIDE9MSc7CgogICAgIyBpZiB3ZSBnb3QgQ29uZmlnSXRlbUlEcyBtYWtlIHN1cmUgd2UganVzdCBoYXZlIG51bWVyaWMgaWRzLAogICAgIyBleHRyYWN0IHRob3NlIGFuZCB1c2UgaXQgZm9yIHRoZSBxdWVyeQogICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRQYXJhbXtDb25maWdJdGVtSURzfSApICkgewogICAgICAgIG15IEBDb25maWdJdGVtSURzID0gZ3JlcCB7ICRfID1+IC9eXGQrJC8gfSBAeyAkUGFyYW17Q29uZmlnSXRlbUlEc30gfTsKICAgICAgICAkU1FMIC49ICcgQU5EIGNvbmZpZ2l0ZW1faWQgSU4gKCcgLiBqb2luICcsICcsIEBDb25maWdJdGVtSURzIC4gJyknOwogICAgfQoKICAgIG15IEBCaW5kUGFyYW1ldGVyOwogICAgaWYgKCAkUGFyYW17T2xkZXJEYXRlfSAmJiAkUGFyYW17T2xkZXJEYXRlfSA9fiAvXlxkezR9XC1cZHsyfVwtXGR7Mn1cIFxkezJ9XDpcZHsyfTpcZHsyfSQvICkgewogICAgICAgICRTUUwgLj0gJyBBTkQgY3JlYXRlX3RpbWUgPCA/JzsKICAgICAgICBwdXNoIEBCaW5kUGFyYW1ldGVyLCBcJFBhcmFte09sZGVyRGF0ZX07CiAgICB9CgogICAgIyBzZXQgbGltaXQKICAgIGlmICggJFBhcmFte0xpbWl0fSApIHsKICAgICAgICAkUGFyYW17TGltaXR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCAkUGFyYW17TGltaXR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICBpZiAoQEJpbmRQYXJhbWV0ZXIpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICAgICAgQmluZCAgPT4gXEBCaW5kUGFyYW1ldGVyLAogICAgICAgICAgICBMaW1pdCA9PiAkUGFyYW17TGltaXR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSwKICAgICAgICApOwogICAgfQoKICAgIG15ICVSZXN1bHRzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUmVzdWx0c3sgJFJvd1sxXSB9LT57ICRSb3dbMF0gfSA9IHsKICAgICAgICAgICAgVmVyc2lvbklEICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUm93WzFdLAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFJvd1syXSB8fCAnJywKICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRSb3dbM10gfHwgJycsCiAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkUm93WzRdIHx8ICcnLAogICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJFJvd1s1XSB8fCAnJywKICAgICAgICAgICAgQ3JlYXRlVGltZSAgID0+ICRSb3dbNl0gfHwgJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICA9PiAkUm93WzddIHx8ICcnLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIFwlUmVzdWx0czsKfQoKPWhlYWQyIFZlcnNpb25MaXN0KCkKCnJldHVybiBhIGNvbmZpZyBpdGVtIHZlcnNpb24gbGlzdCBhcyBhcnJheSByZWZlcmVuY2UKCiAgICBteSAkVmVyc2lvbkxpc3RSZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgVmVyc2lvbkxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbmZpZ0l0ZW1JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHZlcnNpb24gbGlzdAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIGlkIEZST00gY29uZmlnaXRlbV92ZXJzaW9uIFdIRVJFIGNvbmZpZ2l0ZW1faWQgPSA/IE9SREVSIEJZIGlkJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDb25maWdJdGVtSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQFZlcnNpb25MaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBWZXJzaW9uTGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBWZXJzaW9uTGlzdDsKfQoKPWhlYWQyIFZlcnNpb25HZXQoKQoKcmV0dXJucyBhIHZlcnNpb24gb2YgYSBjb25maWcgaXRlbSBhcyBoYXNoIHJlZmVyZW5jZS4KVGhlIHJldHVybmVkIGhhc2ggY29udGFpbnMgZm9sbG93aW5nIGF0dHJpYnV0ZXMuCgogICAgJFZlcnNpb257VmVyc2lvbklEfQogICAgJFZlcnNpb257Q29uZmlnSXRlbUlEfQogICAgJFZlcnNpb257TnVtYmVyfQogICAgJFZlcnNpb257Q2xhc3NJRH0KICAgICRWZXJzaW9ue0NsYXNzfQogICAgJFZlcnNpb257TGFzdFZlcnNpb25JRH0KICAgICRWZXJzaW9ue05hbWV9CiAgICAkVmVyc2lvbntEZWZpbml0aW9uSUR9CiAgICAkVmVyc2lvbntEZXBsU3RhdGVJRH0KICAgICRWZXJzaW9ue0RlcGxTdGF0ZX0KICAgICRWZXJzaW9ue0RlcGxTdGF0ZVR5cGV9CiAgICAkVmVyc2lvbntDdXJEZXBsU3RhdGVJRH0KICAgICRWZXJzaW9ue0N1ckRlcGxTdGF0ZX0KICAgICRWZXJzaW9ue0N1ckRlcGxTdGF0ZVR5cGV9CiAgICAkVmVyc2lvbntJbmNpU3RhdGVJRH0KICAgICRWZXJzaW9ue0luY2lTdGF0ZX0KICAgICRWZXJzaW9ue0luY2lTdGF0ZVR5cGV9CiAgICAkVmVyc2lvbntDdXJJbmNpU3RhdGVJRH0KICAgICRWZXJzaW9ue0N1ckluY2lTdGF0ZX0KICAgICRWZXJzaW9ue0N1ckluY2lTdGF0ZVR5cGV9CiAgICAkVmVyc2lvbntYTUxEZWZpbml0aW9ufQogICAgJFZlcnNpb257WE1MRGF0YX0KICAgICRWZXJzaW9ue0NyZWF0ZVRpbWV9CiAgICAkVmVyc2lvbntDcmVhdGVCeX0KCiAgICBteSAkVmVyc2lvblJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgIFZlcnNpb25JRCAgPT4gMTIzLAogICAgICAgIFhNTERhdGFHZXQgPT4gMSwgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMSAoMHwxKQogICAgKTsKCiAgICBvcgoKICAgIG15ICRWZXJzaW9uUmVmID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICk7CgpXaGVuIHRoZSBkYXRhIGZyb20gdGhlIFhNTCBzdG9yYWdlIGlzIG5vdCBuZWVkZWQgdGhlbiBmZXRjaGluZyB0aGUgWE1MIGRhdGEgY2FuIGJlCmV4cGxpY2l0bHkgdHVybmVkIG9mZiBieSBwYXNzaW5nIFhNTERhdGFHZXQgPT4gMC4KCiAgICBteSAkVmVyc2lvblJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICAgICAgWE1MRGF0YUdldCAgID0+IDAsCiAgICApOwoKPWN1dAoKc3ViIFZlcnNpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1ZlcnNpb25JRH0gJiYgISRQYXJhbXtDb25maWdJdGVtSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBWZXJzaW9uSUQgb3IgQ29uZmlnSXRlbUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17WE1MRGF0YUdldH0gKSB7CiAgICAgICAgJFBhcmFte1hNTERhdGFHZXR9ID0gMTsKICAgIH0KCiAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICBpZiAoICRQYXJhbXtWZXJzaW9uSUR9ICkgewoKICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgICAgIG15ICRDYWNoZUtleSA9ICdWZXJzaW9uR2V0OjpWZXJzaW9uSUQ6OicgLiAkUGFyYW17VmVyc2lvbklEfSAuICc6OlhNTERhdGE6OicgLiAkUGFyYW17WE1MRGF0YUdldH07CiAgICAgICAgbXkgJENhY2hlICAgID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiBTdG9yYWJsZTo6ZGNsb25lKCRDYWNoZSkgaWYgJENhY2hlOwoKICAgICAgICAjIGdldCB2ZXJzaW9uCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBjb25maWdpdGVtX2lkLCBuYW1lLCBkZWZpbml0aW9uX2lkLCAnCiAgICAgICAgICAgICAgICAuICdkZXBsX3N0YXRlX2lkLCBpbmNpX3N0YXRlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5ICcKICAgICAgICAgICAgICAgIC4gJ0ZST00gY29uZmlnaXRlbV92ZXJzaW9uIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtWZXJzaW9uSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgICAgIG15ICRDYWNoZUtleSA9ICdWZXJzaW9uR2V0OjpDb25maWdJdGVtSUQ6OicgLiAkUGFyYW17Q29uZmlnSXRlbUlEfSAuICc6OlhNTERhdGE6OicgLiAkUGFyYW17WE1MRGF0YUdldH07CiAgICAgICAgbXkgJENhY2hlICAgID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiBTdG9yYWJsZTo6ZGNsb25lKCRDYWNoZSkgaWYgJENhY2hlOwoKICAgICAgICAjIGdldCB2ZXJzaW9uCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBjb25maWdpdGVtX2lkLCBuYW1lLCBkZWZpbml0aW9uX2lkLCAnCiAgICAgICAgICAgICAgICAuICdkZXBsX3N0YXRlX2lkLCBpbmNpX3N0YXRlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5ICcKICAgICAgICAgICAgICAgIC4gJ0ZST00gY29uZmlnaXRlbV92ZXJzaW9uICcKICAgICAgICAgICAgICAgIC4gJ1dIRVJFIGNvbmZpZ2l0ZW1faWQgPSA/IE9SREVSIEJZIGlkIERFU0MnLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q29uZmlnSXRlbUlEfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlVmVyc2lvbjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFZlcnNpb257VmVyc2lvbklEfSAgICA9ICRSb3dbMF07CiAgICAgICAgJFZlcnNpb257Q29uZmlnSXRlbUlEfSA9ICRSb3dbMV07CiAgICAgICAgJFZlcnNpb257TmFtZX0gICAgICAgICA9ICRSb3dbMl07CiAgICAgICAgJFZlcnNpb257RGVmaW5pdGlvbklEfSA9ICRSb3dbM107CiAgICAgICAgJFZlcnNpb257RGVwbFN0YXRlSUR9ICA9ICRSb3dbNF07CiAgICAgICAgJFZlcnNpb257SW5jaVN0YXRlSUR9ICA9ICRSb3dbNV07CiAgICAgICAgJFZlcnNpb257Q3JlYXRlVGltZX0gICA9ICRSb3dbNl07CiAgICAgICAgJFZlcnNpb257Q3JlYXRlQnl9ICAgICA9ICRSb3dbN107CiAgICB9CgogICAgIyBjaGVjayB2ZXJzaW9uCiAgICBpZiAoICEkVmVyc2lvbntWZXJzaW9uSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTm8gc3VjaCBjb25maWcgaXRlbSB2ZXJzaW9uIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBmdW5jdGlvbmFsaXR5CiAgICBteSAkRGVwbFN0YXRlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+ICRWZXJzaW9ue0RlcGxTdGF0ZUlEfSwKICAgICk7CgogICAgJFZlcnNpb257RGVwbFN0YXRlfSAgICAgPSAkRGVwbFN0YXRlLT57TmFtZX07CiAgICAkVmVyc2lvbntEZXBsU3RhdGVUeXBlfSA9ICREZXBsU3RhdGUtPntGdW5jdGlvbmFsaXR5fTsKCiAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBmdW5jdGlvbmFsaXR5CiAgICBteSAkSW5jaVN0YXRlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+ICRWZXJzaW9ue0luY2lTdGF0ZUlEfSwKICAgICk7CgogICAgJFZlcnNpb257SW5jaVN0YXRlfSAgICAgPSAkSW5jaVN0YXRlLT57TmFtZX07CiAgICAkVmVyc2lvbntJbmNpU3RhdGVUeXBlfSA9ICRJbmNpU3RhdGUtPntGdW5jdGlvbmFsaXR5fTsKCiAgICAjIGdldCBjb25maWcgaXRlbQogICAgbXkgJENvbmZpZ0l0ZW0gPSAkU2VsZi0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFZlcnNpb257Q29uZmlnSXRlbUlEfSwKICAgICAgICBDYWNoZSAgICAgICAgPT4gMCwKICAgICk7CgogICAgIyBjaGVjayBjb25maWcgaXRlbSBkYXRhCiAgICBpZiAoICEkQ29uZmlnSXRlbSB8fCByZWYgJENvbmZpZ0l0ZW0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgZ2V0IGNvbmZpZyBpdGVtICRWZXJzaW9ue0NvbmZpZ0l0ZW1JRH0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkVmVyc2lvbntDbGFzc0lEfSAgICAgICAgICA9ICRDb25maWdJdGVtLT57Q2xhc3NJRH07CiAgICAkVmVyc2lvbntDbGFzc30gICAgICAgICAgICA9ICRDb25maWdJdGVtLT57Q2xhc3N9OwogICAgJFZlcnNpb257TGFzdFZlcnNpb25JRH0gICAgPSAkQ29uZmlnSXRlbS0+e0xhc3RWZXJzaW9uSUR9OwogICAgJFZlcnNpb257TnVtYmVyfSAgICAgICAgICAgPSAkQ29uZmlnSXRlbS0+e051bWJlcn07CiAgICAkVmVyc2lvbntDdXJEZXBsU3RhdGVJRH0gICA9ICRDb25maWdJdGVtLT57Q3VyRGVwbFN0YXRlSUR9OwogICAgJFZlcnNpb257Q3VyRGVwbFN0YXRlfSAgICAgPSAkQ29uZmlnSXRlbS0+e0N1ckRlcGxTdGF0ZX07CiAgICAkVmVyc2lvbntDdXJEZXBsU3RhdGVUeXBlfSA9ICRDb25maWdJdGVtLT57Q3VyRGVwbFN0YXRlVHlwZX07CiAgICAkVmVyc2lvbntDdXJJbmNpU3RhdGVJRH0gICA9ICRDb25maWdJdGVtLT57Q3VySW5jaVN0YXRlSUR9OwogICAgJFZlcnNpb257Q3VySW5jaVN0YXRlfSAgICAgPSAkQ29uZmlnSXRlbS0+e0N1ckluY2lTdGF0ZX07CiAgICAkVmVyc2lvbntDdXJJbmNpU3RhdGVUeXBlfSA9ICRDb25maWdJdGVtLT57Q3VySW5jaVN0YXRlVHlwZX07CgogICAgIyBzZXQgY2FjaGUgZm9yIFZlcnNpb25JRCB3aXRob3V0IHhtbCBkYXRhIChhbHdheXMpCiAgICBteSAkQ2FjaGVLZXkgPSAnVmVyc2lvbkdldDo6VmVyc2lvbklEOjonIC4gJFZlcnNpb257VmVyc2lvbklEfSAuICc6OlhNTERhdGE6OjAnOwogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBTdG9yYWJsZTo6ZGNsb25lKCBcJVZlcnNpb24gKSwKICAgICk7CgogICAgIyBzZXQgY2FjaGUgZm9yIENvbmZpZ0l0ZW1JRCB3aXRob3V0IHhtbCBkYXRhIChvbmx5IGlmIGNhbGxlZCB3aXRoIENvbmZpZ0l0ZW1JRCkKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgJENhY2hlS2V5ID0gJ1ZlcnNpb25HZXQ6OkNvbmZpZ0l0ZW1JRDo6JyAuICRWZXJzaW9ue0NvbmZpZ0l0ZW1JRH0gLiAnOjpYTUxEYXRhOjowJzsKICAgICAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBTdG9yYWJsZTo6ZGNsb25lKCBcJVZlcnNpb24gKSwKICAgICAgICApOwogICAgfQoKICAgICMgZG9uZSBpZiB3ZSBkb24ndCBuZWVkIHhtbCBkYXRhCiAgICByZXR1cm4gXCVWZXJzaW9uIGlmICEkUGFyYW17WE1MRGF0YUdldH07CgogICAgIyBnZXQgeG1sIGRlZmluaXRpb24KICAgIG15ICREZWZpbml0aW9uID0gJFNlbGYtPkRlZmluaXRpb25HZXQoCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICRWZXJzaW9ue0RlZmluaXRpb25JRH0sCiAgICApOwogICAgJFZlcnNpb257WE1MRGVmaW5pdGlvbn0gPSAkRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9OwoKICAgICMgZ2V0IHhtbCBkYXRhCiAgICAkVmVyc2lvbntYTUxEYXRhfSA9ICRTZWxmLT5fWE1MVmVyc2lvbkdldCgKICAgICAgICBDbGFzc0lEICAgPT4gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSwKICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb257VmVyc2lvbklEfSwKICAgICk7CgogICAgIyBzZXQgY2FjaGUgZm9yIFZlcnNpb25JRCAoYWx3YXlzKQogICAgJENhY2hlS2V5ID0gJ1ZlcnNpb25HZXQ6OlZlcnNpb25JRDo6JyAuICRWZXJzaW9ue1ZlcnNpb25JRH0gLiAnOjpYTUxEYXRhOjoxJzsKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gU3RvcmFibGU6OmRjbG9uZSggXCVWZXJzaW9uICksCiAgICApOwoKICAgICMgc2V0IGNhY2hlIGZvciBDb25maWdJdGVtSUQgKG9ubHkgaWYgY2FsbGVkIHdpdGggQ29uZmlnSXRlbUlEKQogICAgaWYgKCAkUGFyYW17Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICAkQ2FjaGVLZXkgPSAnVmVyc2lvbkdldDo6Q29uZmlnSXRlbUlEOjonIC4gJFZlcnNpb257Q29uZmlnSXRlbUlEfSAuICc6OlhNTERhdGE6OjEnOwogICAgICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFN0b3JhYmxlOjpkY2xvbmUoIFwlVmVyc2lvbiApLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIFwlVmVyc2lvbjsKfQoKPWhlYWQyIFZlcnNpb25OYW1lR2V0KCkKCnJldHVybnMgdGhlIG5hbWUgb2YgYSB2ZXJzaW9uIG9mIGEgY29uZmlnIGl0ZW0uCgogICAgbXkgJFZlcnNpb25OYW1lID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25OYW1lR2V0KAogICAgICAgIFZlcnNpb25JRCA9PiAxMjMsCiAgICApOwoKICAgIG9yCgogICAgbXkgJFZlcnNpb25OYW1lID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25OYW1lR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFZlcnNpb25OYW1lR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtWZXJzaW9uSUR9ICYmICEkUGFyYW17Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVmVyc2lvbklEIG9yIENvbmZpZ0l0ZW1JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIGlmICggJFBhcmFte1ZlcnNpb25JRH0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ1ZlcnNpb25OYW1lR2V0OjpWZXJzaW9uSUQ6OicgLiAkUGFyYW17VmVyc2lvbklEfTsKICAgICAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICR7JENhY2hlfSBpZiAkQ2FjaGU7CgogICAgICAgICMgZ2V0IHZlcnNpb24KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIG5hbWUgJwogICAgICAgICAgICAgICAgLiAnRlJPTSBjb25maWdpdGVtX3ZlcnNpb24gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1ZlcnNpb25JRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ1ZlcnNpb25OYW1lR2V0OjpDb25maWdJdGVtSUQ6OicgLiAkUGFyYW17Q29uZmlnSXRlbUlEfTsKICAgICAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICR7JENhY2hlfSBpZiAkQ2FjaGU7CgogICAgICAgICMgZ2V0IHZlcnNpb24KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIG5hbWUgJwogICAgICAgICAgICAgICAgLiAnRlJPTSBjb25maWdpdGVtX3ZlcnNpb24gJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgY29uZmlnaXRlbV9pZCA9ID8gT1JERVIgQlkgaWQgREVTQycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDb25maWdJdGVtSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVWZXJzaW9uOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkVmVyc2lvbntWZXJzaW9uSUR9ID0gJFJvd1swXTsKICAgICAgICAkVmVyc2lvbntOYW1lfSAgICAgID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIGNoZWNrIHZlcnNpb24KICAgIGlmICggISRWZXJzaW9ue1ZlcnNpb25JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdObyBzdWNoIGNvbmZpZyBpdGVtIHZlcnNpb24hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBjYWNoZSBmb3IgVmVyc2lvbklEIChhbHdheXMpCiAgICBteSAkQ2FjaGVLZXkgPSAnVmVyc2lvbk5hbWVHZXQ6OlZlcnNpb25JRDo6JyAuICRWZXJzaW9ue1ZlcnNpb25JRH07CiAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwkVmVyc2lvbntOYW1lfSwKICAgICk7CgogICAgIyBzZXQgY2FjaGUgZm9yIENvbmZpZ0l0ZW1JRCAob25seSBpZiBjYWxsZWQgd2l0aCBDb25maWdJdGVtSUQpCiAgICBpZiAoICRQYXJhbXtDb25maWdJdGVtSUR9ICkgewogICAgICAgICRDYWNoZUtleSA9ICdWZXJzaW9uTmFtZUdldDo6Q29uZmlnSXRlbUlEOjonIC4gJFBhcmFte0NvbmZpZ0l0ZW1JRH07CiAgICAgICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCRWZXJzaW9ue05hbWV9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRWZXJzaW9ue05hbWV9Owp9Cgo9aGVhZDIgVmVyc2lvbkNvbmZpZ0l0ZW1JREdldCgpCgpyZXR1cm4gdGhlIGNvbmZpZyBpdGVtIGlkIG9mIGEgdmVyc2lvbgoKICAgIG15ICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkNvbmZpZ0l0ZW1JREdldCgKICAgICAgICBWZXJzaW9uSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBWZXJzaW9uQ29uZmlnSXRlbUlER2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtWZXJzaW9uSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBWZXJzaW9uSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgcmV0dXJuICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbkNvbmZpZ0l0ZW1JREdldH0tPnsgJFBhcmFte1ZlcnNpb25JRH0gfQogICAgICAgIGlmICRTZWxmLT57Q2FjaGV9LT57VmVyc2lvbkNvbmZpZ0l0ZW1JREdldH0tPnsgJFBhcmFte1ZlcnNpb25JRH0gfTsKCiAgICAjIGdldCBjb25maWcgaXRlbSBpZAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBjb25maWdpdGVtX2lkIEZST00gY29uZmlnaXRlbV92ZXJzaW9uIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1ZlcnNpb25JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRDb25maWdJdGVtSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb25maWdJdGVtSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgY2FjaGUgdGhlIHJlc3VsdAogICAgJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uQ29uZmlnSXRlbUlER2V0fS0+eyAkUGFyYW17VmVyc2lvbklEfSB9ID0gJENvbmZpZ0l0ZW1JRDsKCiAgICByZXR1cm4gJENvbmZpZ0l0ZW1JRDsKfQoKPWhlYWQyIFZlcnNpb25BZGQoKQoKYWRkIGEgbmV3IHZlcnNpb24KCiAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1RoZSBOYW1lJywKICAgICAgICBEZWZpbml0aW9uSUQgPT4gMTIxMiwKICAgICAgICBEZXBsU3RhdGVJRCAgPT4gOCwKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gNCwKICAgICAgICBYTUxEYXRhICAgICAgPT4gJEFycmF5SGFzaFJlZiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBWZXJzaW9uQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhDb25maWdJdGVtSUQgTmFtZSBEZWZpbml0aW9uSUQgRGVwbFN0YXRlSUQgSW5jaVN0YXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICREQk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwogICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0CiAgICBteSAkRGVwbFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICk7CgogICAgcmV0dXJuIGlmICEkRGVwbFN0YXRlTGlzdDsKICAgIHJldHVybiBpZiByZWYgJERlcGxTdGF0ZUxpc3QgbmUgJ0hBU0gnOwoKICAgICMgY2hlY2sgdGhlIGRlcGxveW1lbnQgc3RhdGUgaWQKICAgIGlmICggISREZXBsU3RhdGVMaXN0LT57ICRQYXJhbXtEZXBsU3RhdGVJRH0gfSApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdObyB2YWxpZCBkZXBsb3ltZW50IHN0YXRlIGlkIGdpdmVuIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRJbmNpU3RhdGVMaXN0OwogICAgcmV0dXJuIGlmIHJlZiAkSW5jaVN0YXRlTGlzdCBuZSAnSEFTSCc7CgogICAgIyBjaGVjayB0aGUgaW5jaWRlbnQgc3RhdGUgaWQKICAgIGlmICggISRJbmNpU3RhdGVMaXN0LT57ICRQYXJhbXtJbmNpU3RhdGVJRH0gfSApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdObyB2YWxpZCBpbmNpZGVudCBzdGF0ZSBpZCBnaXZlbiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IFZlcnNpb25MaXN0CiAgICBteSAkVmVyc2lvbkxpc3QgPSAkU2VsZi0+VmVyc2lvbkxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgKTsKCiAgICBteSAkQ29uZmlnSXRlbUluZm8gPSB7fTsKCiAgICBpZiAoIEB7JFZlcnNpb25MaXN0fSApIHsKCiAgICAgICAgIyBnZXQgb2xkIHZlcnNpb24gaW5mbyBmb3IgY29tcGFyaXNvbnMgd2l0aCBjdXJyZW50IHZlcnNpb24KICAgICAgICAjIHRoaXMgaXMgbmVlZGVkIHRvIHRyaWdnZXIgc29tZSBldmVudHMKICAgICAgICAkQ29uZmlnSXRlbUluZm8gPSAkU2VsZi0+VmVyc2lvbkdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBYTUxEYXRhR2V0ICAgPT4gMCwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IGNvbmZpZyBpdGVtCiAgICAgICAgJENvbmZpZ0l0ZW1JbmZvID0gJFNlbGYtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiBpZiAhJENvbmZpZ0l0ZW1JbmZvOwogICAgcmV0dXJuIGlmIHJlZiAkQ29uZmlnSXRlbUluZm8gbmUgJ0hBU0gnOwoKICAgICMgY2hlY2ssIHdoZXRoZXIgdGhlIGZlYXR1cmUgdG8gY2hlY2sgZm9yIGEgdW5pcXVlIG5hbWUgaXMgZW5hYmxlZAogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1VuaXF1ZUNJTmFtZTo6RW5hYmxlVW5pcXVlbmVzc0NoZWNrJykgKSB7CgogICAgICAgIG15ICROYW1lRHVwbGljYXRlcyA9ICRTZWxmLT5VbmlxdWVOYW1lQ2hlY2soCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgQ2xhc3NJRCAgICAgID0+ICRDb25maWdJdGVtSW5mby0+e0NsYXNzSUR9LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFBhcmFte05hbWV9LAogICAgICAgICk7CgogICAgICAgICMgc3RvcCBwcm9jZXNzaW5nIGlmIHRoZSBuYW1lIGlzIG5vdCB1bmlxdWUKICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkTmFtZUR1cGxpY2F0ZXMpICkgewoKICAgICAgICAgICAgIyBidWlsZCBhIHN0cmluZyBvZiBhbGwgZHVwbGljYXRlIElEcwogICAgICAgICAgICBteSAkRHVwbGljYXRlcyA9IGpvaW4gJywgJywgQHskTmFtZUR1cGxpY2F0ZXN9OwoKICAgICAgICAgICAgIyB3cml0ZSBhbiBlcnJvciBsb2cgbWVzc2FnZSBjb250YWluaW5nIGFsbCB0aGUgZHVwbGljYXRlIElEcwogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIG5hbWUgJFBhcmFte05hbWV9IGlzIGFscmVhZHkgaW4gdXNlIChDb25maWdJdGVtSURzOiAkRHVwbGljYXRlcykhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRXZlbnRzID0gJFNlbGYtPl9HZXRFdmVudHMoCiAgICAgICAgUGFyYW0gICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICBDb25maWdJdGVtSW5mbyA9PiAkQ29uZmlnSXRlbUluZm8sCiAgICApOwoKICAgIG15ICRSZXR1cm5WZXJzaW9uSUQgPSBzY2FsYXIgQHskVmVyc2lvbkxpc3R9ID8gJFZlcnNpb25MaXN0LT5bLTFdIDogMDsKICAgIHJldHVybiAkUmV0dXJuVmVyc2lvbklEIGlmICEoICRFdmVudHMgJiYga2V5cyAleyRFdmVudHN9ICk7CgogICAgIyBTcGVjaWFsIGNhc2UgdGhhdCBvbmx5IFhNTCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBjaGFuZ2VkIHRoYXQgc2hvdWxkIG5vdCBjcmVhdGUgYSBuZXcgdmVyc2lvbgogICAgaWYgKCAkRXZlbnRzLT57VXBkYXRlTGFzdFZlcnNpb259ICYmICRFdmVudHMtPntVcGRhdGVYTUxEYXRhfSAmJiByZWYgJEV2ZW50cy0+e1VwZGF0ZVhNTERhdGF9IGVxICdBUlJBWScgKSB7CgogICAgICAgIG15ICVWYWx1ZUhhc2gyRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpYTUwnKS0+WE1MSGFzaDJEKAogICAgICAgICAgICBYTUxIYXNoID0+ICRFdmVudHMtPntVcGRhdGVYTUxEYXRhfSwKICAgICAgICApOwoKICAgICAgICBVUERBVEVWQUxVRToKICAgICAgICBmb3IgbXkgJFVwZGF0ZVZhbHVlICggc29ydCBrZXlzICV7ICRFdmVudHMtPntWYWx1ZVVwZGF0ZX0gfSApIHsKCiAgICAgICAgICAgIG15ICRDb250ZW50U3RyaW5nID0gJFVwZGF0ZVZhbHVlIC4gJ3tcJ0NvbnRlbnRcJ30nOwoKICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUga2V5IGV4aXN0cy4KICAgICAgICAgICAgbmV4dCBVUERBVEVWQUxVRSBpZiAhZXhpc3RzICRWYWx1ZUhhc2gyRHskQ29udGVudFN0cmluZ307CgogICAgICAgICAgICBteSAkVHlwZSA9ICdJVFNNOjpDb25maWdJdGVtOjonIC4gJENvbmZpZ0l0ZW1JbmZvLT57Q2xhc3NJRH07CgogICAgICAgICAgICAjIERlbGV0ZSBvbGQgZW50cmllcyBmcm9tIHRoZSBkYXRhYmFzZS4KICAgICAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSB4bWxfc3RvcmFnZQogICAgICAgICAgICAgICAgICAgIFdIRVJFIHhtbF90eXBlID0gPwogICAgICAgICAgICAgICAgICAgIEFORCB4bWxfa2V5ID0gPwogICAgICAgICAgICAgICAgICAgIEFORCB4bWxfY29udGVudF9rZXkgPSA/CiAgICAgICAgICAgICAgICAnLAogICAgICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICAgICAgXCRUeXBlLAogICAgICAgICAgICAgICAgICAgIFwkUmV0dXJuVmVyc2lvbklELAogICAgICAgICAgICAgICAgICAgIFwkQ29udGVudFN0cmluZywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEFkZCB1cGRhdGVkIGVudHJ5IHRvIHRoZSBkYXRhYmFzZS4KICAgICAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB4bWxfc3RvcmFnZQogICAgICAgICAgICAgICAgICAgICh4bWxfdHlwZSwgeG1sX2tleSwgeG1sX2NvbnRlbnRfa2V5LCB4bWxfY29udGVudF92YWx1ZSkKICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8sID8sID8pCiAgICAgICAgICAgICAgICAnLAogICAgICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICAgICAgXCRUeXBlLAogICAgICAgICAgICAgICAgICAgIFwkUmV0dXJuVmVyc2lvbklELAogICAgICAgICAgICAgICAgICAgIFwkQ29udGVudFN0cmluZywKICAgICAgICAgICAgICAgICAgICBcJFZhbHVlSGFzaDJEeyRDb250ZW50U3RyaW5nfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIERlbGV0ZSBjYWNoZS4KICAgICAgICAgICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdYTUwnLAogICAgICAgICAgICAgICAgS2V5ICA9PiAiJFR5cGUtJFJldHVyblZlcnNpb25JRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSBhZmZlY3RlZCBjYWNoZXMKICAgICAgICBteSAkQ2FjaGVLZXkgPSAnVmVyc2lvbkdldDo6Q29uZmlnSXRlbUlEOjonIC4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0gLiAnOjpYTUxEYXRhOjonOwogICAgICAgIGZvciBteSAkWE1MRGF0YSAocXcoMCAxKSkgewogICAgICAgICAgICAkQ2FjaGVPYmplY3QtPkRlbGV0ZSgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXkgLiAkWE1MRGF0YSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIGFmZmVjdGVkIGNhY2hlcwogICAgICAgICRDYWNoZUtleSA9ICdWZXJzaW9uR2V0OjpWZXJzaW9uSUQ6OicgLiAkUmV0dXJuVmVyc2lvbklEIC4gJzo6WE1MRGF0YTo6JzsKICAgICAgICBmb3IgbXkgJFhNTERhdGEgKHF3KDAgMSkpIHsKICAgICAgICAgICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5IC4gJFhNTERhdGEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBjaGFuZ2VfdGltZSBhbmQgY2hhbmdlX2J5IG9mIHRoZSBjb25maWcgaXRlbQogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgICAgIFVQREFURSBjb25maWdpdGVtCiAgICAgICAgICAgICAgICBTRVQgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwKICAgICAgICAgICAgICAgIGNoYW5nZV9ieSA9ID8KICAgICAgICAgICAgICAgIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgXCRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBdLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGNvbmZpZyBpdGVtIGNhY2hlCiAgICAgICAgJENhY2hlS2V5ID0gJ0NvbmZpZ0l0ZW1HZXQ6OkNvbmZpZ0l0ZW1JRDo6JyAuICRQYXJhbXtDb25maWdJdGVtSUR9OwogICAgICAgICRDYWNoZU9iamVjdC0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKCiAgICAgICAgIyBUcmlnZ2VyIFZhbHVlVXBkYXRlIGV2ZW50LgogICAgICAgICRTZWxmLT5fRXZlbnRIYW5kbGVyRm9yQ2hhbmdlZFhNTFZhbHVlcygKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBVcGRhdGVWYWx1ZXMgPT4gJEV2ZW50cy0+e1ZhbHVlVXBkYXRlfSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkUmV0dXJuVmVyc2lvbklEOwogICAgfQoKICAgICMgaW5zZXJ0IG5ldyB2ZXJzaW9uCiAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBjb25maWdpdGVtX3ZlcnNpb24gJwogICAgICAgICAgICAuICcoY29uZmlnaXRlbV9pZCwgbmFtZSwgZGVmaW5pdGlvbl9pZCwgJwogICAgICAgICAgICAuICdkZXBsX3N0YXRlX2lkLCBpbmNpX3N0YXRlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5KSBWQUxVRVMgJwogICAgICAgICAgICAuICcoPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte0RlZmluaXRpb25JRH0sCiAgICAgICAgICAgIFwkUGFyYW17RGVwbFN0YXRlSUR9LAogICAgICAgICAgICBcJFBhcmFte0luY2lTdGF0ZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgIF0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJFN1Y2Nlc3M7CgogICAgIyBkZWxldGUgYWZmZWN0ZWQgY2FjaGVzCiAgICBteSAkQ2FjaGVLZXkgPSAnVmVyc2lvbkdldDo6Q29uZmlnSXRlbUlEOjonIC4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0gLiAnOjpYTUxEYXRhOjonOwogICAgZm9yIG15ICRYTUxEYXRhIChxdygwIDEpKSB7CiAgICAgICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSAuICRYTUxEYXRhLAogICAgICAgICk7CiAgICB9CiAgICAkQ2FjaGVPYmplY3QtPkRlbGV0ZSgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICdWZXJzaW9uTmFtZUdldDo6Q29uZmlnSXRlbUlEOjonIC4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICApOwoKICAgICMgZ2V0IGlkIG9mIG5ldyB2ZXJzaW9uCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGNyZWF0ZV90aW1lIEZST00gY29uZmlnaXRlbV92ZXJzaW9uIFdIRVJFICcKICAgICAgICAgICAgLiAnY29uZmlnaXRlbV9pZCA9ID8gT1JERVIgQlkgaWQgREVTQycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NvbmZpZ0l0ZW1JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRWZXJzaW9uSUQ7CiAgICBteSAkQ3JlYXRlVGltZTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRWZXJzaW9uSUQgID0gJFJvd1swXTsKICAgICAgICAkQ3JlYXRlVGltZSA9ICRSb3dbMV07CiAgICB9CgogICAgIyBjaGVjayB2ZXJzaW9uIGlkCiAgICBpZiAoICEkVmVyc2lvbklEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgZ2V0IHRoZSBuZXcgdmVyc2lvbiBpZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYWRkIHhtbCBkYXRhCiAgICBpZiAoICRQYXJhbXtYTUxEYXRhfSAmJiByZWYgJFBhcmFte1hNTERhdGF9IGVxICdBUlJBWScgKSB7CiAgICAgICAgJFNlbGYtPl9YTUxWZXJzaW9uQWRkKAogICAgICAgICAgICBDbGFzc0lEICAgICAgPT4gJENvbmZpZ0l0ZW1JbmZvLT57Q2xhc3NJRH0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgVmVyc2lvbklEICAgID0+ICRWZXJzaW9uSUQsCiAgICAgICAgICAgIFhNTERhdGEgICAgICA9PiAkUGFyYW17WE1MRGF0YX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHVwZGF0ZSBsYXN0X3ZlcnNpb25faWQsIGN1cl9kZXBsX3N0YXRlX2lkLCBjdXJfaW5jaV9zdGF0ZV9pZCwgY2hhbmdlX3RpbWUgYW5kIGNoYW5nZV9ieQogICAgJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBjb25maWdpdGVtIFNFVCBsYXN0X3ZlcnNpb25faWQgPSA/LCAnCiAgICAgICAgICAgIC4gJ2N1cl9kZXBsX3N0YXRlX2lkID0gPywgY3VyX2luY2lfc3RhdGVfaWQgPSA/LCAnCiAgICAgICAgICAgIC4gJ2NoYW5nZV90aW1lID0gPywgY2hhbmdlX2J5ID0gPyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkVmVyc2lvbklELAogICAgICAgICAgICBcJFBhcmFte0RlcGxTdGF0ZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtJbmNpU3RhdGVJRH0sCiAgICAgICAgICAgIFwkQ3JlYXRlVGltZSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBcJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBkZWxldGUgY29uZmlnIGl0ZW0gY2FjaGUKICAgICRDYWNoZUtleSA9ICdDb25maWdJdGVtR2V0OjpDb25maWdJdGVtSUQ6OicgLiAkUGFyYW17Q29uZmlnSXRlbUlEfTsKICAgICRDYWNoZU9iamVjdC0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKCiAgICAjIHRyaWdnZXIgVmVyc2lvbkNyZWF0ZSBldmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnVmVyc2lvbkNyZWF0ZScsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAkVmVyc2lvbklELAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNvbXBhcmUgY3VycmVudCBhbmQgb2xkIHZhbHVlcwogICAgaWYgKCAkRXZlbnRzLT57VmFsdWVVcGRhdGV9ICkgewogICAgICAgICRTZWxmLT5fRXZlbnRIYW5kbGVyRm9yQ2hhbmdlZFhNTFZhbHVlcygKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICBVcGRhdGVWYWx1ZXMgPT4gJEV2ZW50cy0+e1ZhbHVlVXBkYXRlfSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyB0cmlnZ2VyIGRlZmluaXRpb24gdXBkYXRlIGV2ZW50CiAgICBpZiAoICRFdmVudHMtPntEZWZpbml0aW9uVXBkYXRlfSApIHsKICAgICAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgICAgICBFdmVudCA9PiAnRGVmaW5pdGlvblVwZGF0ZScsCiAgICAgICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAkRXZlbnRzLT57RGVmaW5pdGlvblVwZGF0ZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgb2xkIGFuZCBuZXcgbmFtZQogICAgaWYgKCAkRXZlbnRzLT57TmFtZVVwZGF0ZX0gKSB7CiAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgRXZlbnQgPT4gJ05hbWVVcGRhdGUnLAogICAgICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJEV2ZW50cy0+e05hbWVVcGRhdGV9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRyaWdnZXIgaW5jaWRlbnQgc3RhdGUgdXBkYXRlIGV2ZW50CiAgICBpZiAoICRFdmVudHMtPntJbmNpZGVudFN0YXRlVXBkYXRlfSApIHsKICAgICAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgICAgICBFdmVudCA9PiAnSW5jaWRlbnRTdGF0ZVVwZGF0ZScsCiAgICAgICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAkRXZlbnRzLT57SW5jaWRlbnRTdGF0ZVVwZGF0ZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgdHJpZ2dlciBkZXBsb3ltZW50IHN0YXRlIHVwZGF0ZSBldmVudAogICAgaWYgKCAkRXZlbnRzLT57RGVwbG95bWVudFN0YXRlVXBkYXRlfSApIHsKICAgICAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgICAgICBFdmVudCA9PiAnRGVwbG95bWVudFN0YXRlVXBkYXRlJywKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRFdmVudHMtPntEZXBsb3ltZW50U3RhdGVVcGRhdGV9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJlY2FsY3VsYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIG9mIGFsbCBsaW5rZWQgY29uZmlnIGl0ZW1zCiAgICAkU2VsZi0+Q3VySW5jaVN0YXRlUmVjYWxjKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICk7CgogICAgcmV0dXJuICRWZXJzaW9uSUQ7Cn0KCj1oZWFkMiBWZXJzaW9uRGVsZXRlKCkKCmRlbGV0ZSBhbiBleGlzdGluZyB2ZXJzaW9uIG9yIHZlcnNpb25zCgogICAgbXkgJFRydWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkRlbGV0ZSgKICAgICAgICBWZXJzaW9uSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRUcnVlID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25EZWxldGUoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDMyMSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgbXkgJFRydWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkRlbGV0ZSgKICAgICAgICBWZXJzaW9uSURzID0+IFsgMSwgMiwgMywgNCBdLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVmVyc2lvbkRlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAhJFBhcmFte1ZlcnNpb25JRH0gJiYgISRQYXJhbXtDb25maWdJdGVtSUR9ICYmICFJc0FycmF5UmVmV2l0aERhdGEoICRQYXJhbXtWZXJzaW9uSURzfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBWZXJzaW9uSUQsIENvbmZpZ0l0ZW1JRCBvciBWZXJzaW9uSURzIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJFZlcnNpb25MaXN0ID0gW107CiAgICBpZiAoICRQYXJhbXtWZXJzaW9uSUR9ICkgewogICAgICAgIHB1c2ggQHskVmVyc2lvbkxpc3R9LCAkUGFyYW17VmVyc2lvbklEfTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte1ZlcnNpb25JRHN9ICkgewogICAgICAgIHB1c2ggQHskVmVyc2lvbkxpc3R9LCBAeyAkUGFyYW17VmVyc2lvbklEc30gfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICMgZ2V0IHZlcnNpb24gbGlzdAogICAgICAgICRWZXJzaW9uTGlzdCA9ICRTZWxmLT5WZXJzaW9uTGlzdCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDEgaWYgIXNjYWxhciBAeyRWZXJzaW9uTGlzdH07CgogICAgIyBnZXQgY29uZmlnIGl0ZW0gaWQgZm9yIHZlcnNpb24gKG5lZWRlZCBmb3IgZXZlbnQgaGFuZGxpbmcpCiAgICBteSAkQ29uZmlnSXRlbUlEID0gJFBhcmFte0NvbmZpZ0l0ZW1JRH07CgogICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgIyB0byBzdG9yZSB1bmlxdWUgY29uZmlnIGl0ZW0gaWRzIGlmIHRoZXJlIGFyZSB2ZXJzaW9ucyBmcm9tIGRpZmZlcmVudCBjb25maWcgaXRlbXMKICAgIG15ICVDb25maWdJdGVtSURzOwoKICAgIG15ICRTdWNjZXNzOwogICAgZm9yIG15ICRWZXJzaW9uSUQgKCBAeyRWZXJzaW9uTGlzdH0gKSB7CgogICAgICAgICMgZ2V0IGNvbmZpZ2l0ZW0gaWQgaWYgbmVjY2Vzc2FyeQogICAgICAgIGlmICggJFBhcmFte1ZlcnNpb25JRH0gfHwgJFBhcmFte1ZlcnNpb25JRHN9ICkgewogICAgICAgICAgICAkQ29uZmlnSXRlbUlEID0gJFNlbGYtPlZlcnNpb25Db25maWdJdGVtSURHZXQoCiAgICAgICAgICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb25JRCwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgdGhlIHVuaXF1ZSBjb25maWcgaXRlbSBpZHMKICAgICAgICAkQ29uZmlnSXRlbUlEc3skQ29uZmlnSXRlbUlEfSA9IDE7CgogICAgICAgICMgZGVsZXRlIHRoZSB4bWwgdmVyc2lvbiBkYXRhCiAgICAgICAgJFNlbGYtPl9YTUxWZXJzaW9uRGVsZXRlKAogICAgICAgICAgICBWZXJzaW9uSUQgPT4gJFZlcnNpb25JRCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHZlcnNpb24KICAgICAgICAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gY29uZmlnaXRlbV92ZXJzaW9uIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFZlcnNpb25JRCBdLAogICAgICAgICk7CgogICAgICAgICMgdHJpZ2dlciBWZXJzaW9uRGVsZXRlIGV2ZW50IHdoZW4gZGVsZXRpb24gd2FzIHN1Y2Nlc3NmdWwKICAgICAgICBpZiAoJFN1Y2Nlc3MpIHsKCiAgICAgICAgICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgICAgICAgICBFdmVudCA9PiAnVmVyc2lvbkRlbGV0ZScsCiAgICAgICAgICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRWZXJzaW9uSUQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkZWxldGUgYWZmZWN0ZWQgY2FjaGVzCiAgICAgICAgICAgIG15ICRDYWNoZUtleSA9ICdWZXJzaW9uR2V0OjpWZXJzaW9uSUQ6OicgLiAkVmVyc2lvbklEIC4gJzo6WE1MRGF0YTo6JzsKICAgICAgICAgICAgZm9yIG15ICRYTUxEYXRhIChxdygwIDEpKSB7CiAgICAgICAgICAgICAgICAkQ2FjaGVPYmplY3QtPkRlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSAuICRYTUxEYXRhLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ2FjaGVPYmplY3QtPkRlbGV0ZSgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICAgICAgS2V5ICA9PiAnVmVyc2lvbk5hbWVHZXQ6OlZlcnNpb25JRDo6JyAuICRWZXJzaW9uSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntWZXJzaW9uQ29uZmlnSXRlbUlER2V0fS0+eyRWZXJzaW9uSUR9OwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQga2V5cyAlQ29uZmlnSXRlbUlEcyApIHsKCiAgICAgICAgIyBkZWxldGUgYWZmZWN0ZWQgY2FjaGVzIGZvciBDb25maWdJdGVtSUQgKG1vc3QgcmVjZW50IHZlcnNpb24gbWlnaHQgaGF2ZSBiZWVuIHJlbW92ZWQpCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ1ZlcnNpb25HZXQ6OkNvbmZpZ0l0ZW1JRDo6JyAuICRDb25maWdJdGVtSUQgLiAnOjpYTUxEYXRhOjonOwogICAgICAgIGZvciBteSAkWE1MRGF0YSAocXcoMCAxKSkgewogICAgICAgICAgICAkQ2FjaGVPYmplY3QtPkRlbGV0ZSgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXkgLiAkWE1MRGF0YSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICdWZXJzaW9uTmFtZUdldDo6Q29uZmlnSXRlbUlEOjonIC4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkU3VjY2VzczsKfQoKPWhlYWQyIFZlcnNpb25TZWFyY2goKQoKcmV0dXJuIGEgY29uZmlnIGl0ZW0gbGlzdCBhcyBhbiBhcnJheSByZWZlcmVuY2UKCiAgICBteSAkQ29uZmlnSXRlbUlEcyA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uU2VhcmNoKAogICAgICAgIE5hbWUgICAgICAgICA9PiAnVGhlIE5hbWUnLCAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENsYXNzSURzICAgICA9PiBbIDksIDgsIDcsIDYgXSwgICMgKG9wdGlvbmFsKQogICAgICAgIERlcGxTdGF0ZUlEcyA9PiBbIDMyMSwgMTIzIF0sICAgICMgKG9wdGlvbmFsKQogICAgICAgIEluY2lTdGF0ZUlEcyA9PiBbIDMyMSwgMTIzIF0sICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAgKDB8MSkKCiAgICAgICAgT3JkZXJCeSA9PiBbICdDb25maWdJdGVtSUQnLCAnTnVtYmVyJyBdLCAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgZGVmYXVsdDogWyAnQ29uZmlnSXRlbUlEJyBdCiAgICAgICAgIyAoQ29uZmlnSXRlbUlELCBOYW1lLCBOdW1iZXIsIENsYXNzSUQsIERlcGxTdGF0ZUlELCBJbmNpU3RhdGVJRAogICAgICAgICMgQ3JlYXRlVGltZSwgQ3JlYXRlQnksIENoYW5nZVRpbWUsIENoYW5nZUJ5KQoKICAgICAgICAjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIE9yZGVyQnk6CiAgICAgICAgIyBUaGUgT3JkZXJCeURpcmVjdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGZvciBlYWNoIE9yZGVyQnkgYXR0cmlidXRlLgogICAgICAgICMgVGhlIHBhaXJpbmcgaXMgbWFkZSBieSB0aGUgYXJyYXkgaW5kaWNlcy4KCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbICdVcCcsICdEb3duJyBdLCAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBbICdVcCcgXQogICAgICAgICMgKERvd24gfCBVcCkKCiAgICAgICAgTGltaXQgICAgICAgICAgPT4gMTIyLCAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMQogICAgKTsKCj1jdXQKCnN1YiBWZXJzaW9uU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1VzaW5nV2lsZGNhcmRzfSApIHsKICAgICAgICAkUGFyYW17VXNpbmdXaWxkY2FyZHN9ID0gMTsKICAgIH0KCiAgICAjIHZlcmlmeSB0aGF0IGFsbCBwYXNzZWQgYXJyYXkgcGFyYW1ldGVycyBjb250YWluIGFuIGFycmF5cmVmCiAgICBBUkdVTUVOVDoKICAgIGZvciBteSAkQXJndW1lbnQgKAogICAgICAgIHF3KAogICAgICAgIE9yZGVyQnkKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uCiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gW107CgogICAgICAgICAgICBuZXh0IEFSR1VNRU5UOwogICAgICAgIH0KCiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgb3JkZXIgYW5kIG9yZGVyIGRpcmVjdGlvbgogICAgaWYgKCAhQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CiAgICAgICAgJFBhcmFte09yZGVyQnl9ID0gWydDb25maWdJdGVtSUQnXTsKICAgIH0KICAgIGlmICggIUB7ICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSB9ICkgewogICAgICAgICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSA9IFsnVXAnXTsKICAgIH0KCiAgICAjIGRlZmluZSBvcmRlciB0YWJsZQogICAgbXkgJU9yZGVyQnlUYWJsZSA9ICgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJ3ZyLmNvbmZpZ2l0ZW1faWQnLAogICAgICAgIE5hbWUgICAgICAgICA9PiAndnIubmFtZScsCiAgICAgICAgTnVtYmVyICAgICAgID0+ICdjaS5jb25maWdpdGVtX251bWJlcicsCiAgICAgICAgQ2xhc3NJRCAgICAgID0+ICdjaS5jbGFzc19pZCcsCiAgICAgICAgRGVwbFN0YXRlSUQgID0+ICd2ci5kZXBsX3N0YXRlX2lkJywKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJ3ZyLmluY2lfc3RhdGVfaWQnLAogICAgICAgIENyZWF0ZVRpbWUgICA9PiAnY2kuY3JlYXRlX3RpbWUnLAogICAgICAgIENyZWF0ZUJ5ICAgICA9PiAnY2kuY3JlYXRlX2J5JywKCiAgICAgICAgIyB0aGUgY2hhbmdlIHRpbWUgb2YgdGhlIENJIGlzIHRoZSBzYW1lIGFzIHRoZSBjcmVhdGUgdGltZSBvZiB0aGUgdmVyc2lvbiEKICAgICAgICBDaGFuZ2VUaW1lID0+ICd2ci5jcmVhdGVfdGltZScsCgogICAgICAgIENoYW5nZUJ5ID0+ICdjaS5jaGFuZ2VfYnknLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIE9yZGVyQnkgY29udGFpbnMgb25seSB1bmlxdWUgdmFsaWQgdmFsdWVzCiAgICBteSAlT3JkZXJCeVNlZW47CiAgICBmb3IgbXkgJE9yZGVyQnkgKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApIHsKCiAgICAgICAgaWYgKCAhJE9yZGVyQnkgfHwgISRPcmRlckJ5VGFibGV7JE9yZGVyQnl9IHx8ICRPcmRlckJ5U2VlbnskT3JkZXJCeX0gKSB7CgogICAgICAgICAgICAjIGZvdW5kIGFuIGVycm9yCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPcmRlckJ5IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJyRPcmRlckJ5JyAiCiAgICAgICAgICAgICAgICAgICAgLiAnb3IgdGhlIHZhbHVlIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UhJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyByZW1lbWJlciB0aGUgdmFsdWUgdG8gY2hlY2sgaWYgaXQgYXBwZWFycyBtb3JlIHRoYW4gb25jZQogICAgICAgICRPcmRlckJ5U2VlbnskT3JkZXJCeX0gPSAxOwogICAgfQoKICAgICMgY2hlY2sgaWYgT3JkZXJCeURpcmVjdGlvbiBhcnJheSBjb250YWlucyBvbmx5ICdVcCcgb3IgJ0Rvd24nCiAgICBESVJFQ1RJT046CiAgICBmb3IgbXkgJERpcmVjdGlvbiAoIEB7ICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAjIG9ubHkgJ1VwJyBvciAnRG93bicgYWxsb3dlZAogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ1VwJzsKICAgICAgICBuZXh0IERJUkVDVElPTiBpZiAkRGlyZWN0aW9uIGVxICdEb3duJzsKCiAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeURpcmVjdGlvbiBjYW4gb25seSBjb250YWluICdVcCcgb3IgJ0Rvd24nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBhc3NlbWJsZSB0aGUgT1JERVIgQlkgY2xhdXNlCiAgICBteSBAU1FMT3JkZXJCeTsKICAgIG15ICRDb3VudCA9IDA7CiAgICBteSBAT3JkZXJCeVNlbGVjdENvbHVtbnM7CiAgICBmb3IgbXkgJE9yZGVyQnkgKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApIHsKCiAgICAgICAgIyBzZXQgdGhlIGRlZmF1bHQgb3JkZXIgZGlyZWN0aW9uCiAgICAgICAgbXkgJERpcmVjdGlvbiA9ICdERVNDJzsKCiAgICAgICAgIyBhZGQgdGhlIGdpdmVuIG9yZGVyIGRpcmVjdGlvbgogICAgICAgIGlmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdVcCcgKSB7CiAgICAgICAgICAgICAgICAkRGlyZWN0aW9uID0gJ0FTQyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdEb3duJyApIHsKICAgICAgICAgICAgICAgICREaXJlY3Rpb24gPSAnREVTQyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIFNRTAogICAgICAgIHB1c2ggQFNRTE9yZGVyQnksICAgICAgICAgICAiJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gJERpcmVjdGlvbiI7CiAgICAgICAgcHVzaCBAT3JkZXJCeVNlbGVjdENvbHVtbnMsICRPcmRlckJ5VGFibGV7JE9yZGVyQnl9OwoKICAgIH0KICAgIGNvbnRpbnVlIHsKICAgICAgICAkQ291bnQrKzsKICAgIH0KCiAgICAjIGdldCBsaWtlIGVzY2FwZSBzdHJpbmcgbmVlZGVkIGZvciBzb21lIGRhdGFiYXNlcyAoZS5nLiBvcmFjbGUpCiAgICBteSAkTGlrZUVzY2FwZVN0cmluZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5HZXREYXRhYmFzZUZ1bmN0aW9uKCdMaWtlRXNjYXBlU3RyaW5nJyk7CgogICAgIyBhZGQgbmFtZSB0byBzcWwgd2hlcmUgYXJyYXkKICAgIG15IEBTUUxXaGVyZTsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17TmFtZX0gJiYgJFBhcmFte05hbWV9IG5lICcnICkgewoKICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgbmFtZQogICAgICAgIG15ICROYW1lID0gJFBhcmFte05hbWV9OwoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJE5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UXVvdGUoJE5hbWUpOwoKICAgICAgICBpZiAoICRQYXJhbXtVc2luZ1dpbGRjYXJkc30gKSB7CgogICAgICAgICAgICAjIHByZXBhcmUgbGlrZSBzdHJpbmcKICAgICAgICAgICAgJFNlbGYtPl9QcmVwYXJlTGlrZVN0cmluZyggXCROYW1lICk7CgogICAgICAgICAgICBwdXNoIEBTUUxXaGVyZSwgIkxPV0VSKHZyLm5hbWUpIExJS0UgTE9XRVIoJyROYW1lJykgJExpa2VFc2NhcGVTdHJpbmciOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHVzaCBAU1FMV2hlcmUsICJMT1dFUih2ci5uYW1lKSA9IExPV0VSKCckTmFtZScpIjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgYXJyYXkgcGFyYW1zCiAgICBteSAlQXJyYXlQYXJhbXMgPSAoCiAgICAgICAgQ2xhc3NJRHMgICAgID0+ICdjaS5pZCA9IHZyLmNvbmZpZ2l0ZW1faWQgQU5EIGNpLmNsYXNzX2lkJywKICAgICAgICBEZXBsU3RhdGVJRHMgPT4gJ3ZyLmRlcGxfc3RhdGVfaWQnLAogICAgICAgIEluY2lTdGF0ZUlEcyA9PiAndnIuaW5jaV9zdGF0ZV9pZCcsCiAgICApOwoKICAgIEFSUkFZUEFSQU06CiAgICBmb3IgbXkgJEFycmF5UGFyYW0gKCBzb3J0IGtleXMgJUFycmF5UGFyYW1zICkgewoKICAgICAgICBuZXh0IEFSUkFZUEFSQU0gaWYgISRQYXJhbXskQXJyYXlQYXJhbX07CgogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJyYXlQYXJhbX0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcnJheVBhcmFtIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG5leHQgQVJSQVlQQVJBTSBpZiAhQHsgJFBhcmFteyRBcnJheVBhcmFtfSB9OwoKICAgICAgICAjIHF1b3RlIGFzIGludGVnZXIKICAgICAgICBmb3IgbXkgJE9uZVBhcmFtICggQHsgJFBhcmFteyRBcnJheVBhcmFtfSB9ICkgewogICAgICAgICAgICAkT25lUGFyYW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UXVvdGUoICRPbmVQYXJhbSwgJ0ludGVnZXInICk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBzdHJpbmcKICAgICAgICBteSAkSW5TdHJpbmcgPSBqb2luIHF7LCB9LCBAeyAkUGFyYW17JEFycmF5UGFyYW19IH07CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiJEFycmF5UGFyYW1zeyAkQXJyYXlQYXJhbSB9IElOICgkSW5TdHJpbmcpIjsKICAgIH0KCiAgICAjIGFkZCBwcmV2aW91cyB2ZXJzaW9uIHBhcmFtCiAgICBpZiAoICEkUGFyYW17UHJldmlvdXNWZXJzaW9uU2VhcmNofSApIHsKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgJ2NpLmxhc3RfdmVyc2lvbl9pZCA9IHZyLmlkJzsKICAgIH0KCiAgICAjIGNyZWF0ZSB3aGVyZSBzdHJpbmcKICAgIG15ICRXaGVyZVN0cmluZyA9IEBTUUxXaGVyZSA/ICcgV0hFUkUgJyAuIGpvaW4gcXsgQU5EIH0sIEBTUUxXaGVyZSA6ICcnOwoKICAgICMgc2V0IGxpbWl0LCBxdW90ZSBhcyBpbnRlZ2VyCiAgICBpZiAoICRQYXJhbXtMaW1pdH0gKSB7CiAgICAgICAgJFBhcmFte0xpbWl0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5RdW90ZSggJFBhcmFte0xpbWl0fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBhZGQgdGhlIG9yZGVyIGJ5IGNvbHVtbnMgYWxzbyB0byB0aGUgc2VsZWN0ZWQgY29sdW1ucwogICAgbXkgJE9yZGVyQnlTZWxlY3RTdHJpbmcgPSAnJzsKICAgIGlmIChAT3JkZXJCeVNlbGVjdENvbHVtbnMpIHsKICAgICAgICAkT3JkZXJCeVNlbGVjdFN0cmluZyA9IGpvaW4gJywgJywgQE9yZGVyQnlTZWxlY3RDb2x1bW5zOwogICAgICAgICRPcmRlckJ5U2VsZWN0U3RyaW5nID0gJywgJyAuICRPcmRlckJ5U2VsZWN0U3RyaW5nOwogICAgfQoKICAgICMgYnVpbGQgU1FMCiAgICBteSAkU1FMID0gIlNFTEVDVCBESVNUSU5DVCB2ci5jb25maWdpdGVtX2lkICRPcmRlckJ5U2VsZWN0U3RyaW5nICIKICAgICAgICAuICdGUk9NIGNvbmZpZ2l0ZW0gY2ksIGNvbmZpZ2l0ZW1fdmVyc2lvbiB2ciAnCiAgICAgICAgLiAkV2hlcmVTdHJpbmc7CgogICAgIyBhZGQgdGhlIE9SREVSIEJZIGNsYXVzZQogICAgaWYgKEBTUUxPcmRlckJ5KSB7CiAgICAgICAgJFNRTCAuPSAnIE9SREVSIEJZICc7CiAgICAgICAgJFNRTCAuPSBqb2luICcsICcsIEBTUUxPcmRlckJ5OwogICAgICAgICRTUUwgLj0gJyAnOwogICAgfQoKICAgICMgYXNrIHRoZSBkYXRhYmFzZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBMaW1pdCA9PiAkUGFyYW17TGltaXR9LAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBDb25maWdJdGVtTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAQ29uZmlnSXRlbUxpc3QsICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIFxAQ29uZmlnSXRlbUxpc3Q7Cn0KCj1oZWFkMSBJTlRFUk5BTCBJTlRFUkZBQ0UKCj1oZWFkMiBfR2V0RXZlbnRzKCkKClRoaXMgbWV0aG9kIGNoZWNrcyB3aGF0IHZhbHVlcyB3ZXJlIGNoYW5nZWQgYW5kIHdoYXQgZXZlbnRzIGhhdmUgdG8gYmUgdHJpZ2dlcmVkLgpJdCByZXR1cm5zIGEgaGFzaCByZWZlcmVuY2Ugd2l0aCBhbGwgZXZlbnQgbmFtZXMgYXMga2V5cyB0aGF0IHNob3VsZCBiZSB0cmlnZ2VyZWQuCgogICAgbXkgJEV2ZW50cyA9ICRDSU9iamVjdC0+X0dldEV2ZW50cygKICAgICAgICBQYXJhbSA9PiB7CiAgICAgICAgICAgIERlcGxTdGF0ZUlEID0+IDEyMywKICAgICAgICB9LAogICAgICAgIENvbmZpZ0l0ZW1JbmZvID0+IHsKICAgICAgICAgICAgRGVwbFN0YXRlSUQgPT4gMjM0LAogICAgICAgIH0sCiAgICApOwoKICAgIHByaW50IGtleXMgJXskRXZlbnRzfTsgIyBwcmludHMgIkRlcGxveW1lbnRTdGF0ZVVwZGF0ZSIKCj1jdXQKCnN1YiBfR2V0RXZlbnRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDb25maWdJdGVtSW5mbyBQYXJhbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRXZlbnRzID0ge307CgogICAgIyBjaGVjayBvbGQgYW5kIG5ldyBuYW1lCiAgICBteSAkT2xkTmFtZSA9ICRQYXJhbXtDb25maWdJdGVtSW5mb30tPntOYW1lfSB8fCAnJzsKICAgIG15ICROZXdOYW1lID0gJFBhcmFte1BhcmFtfS0+e05hbWV9ICAgICAgICAgIHx8ICcnOwoKICAgIGlmICggJE9sZE5hbWUgbmUgJE5ld05hbWUgKSB7CiAgICAgICAgJEV2ZW50cy0+e05hbWVVcGRhdGV9ID0gJE5ld05hbWUgLiAnJSUnIC4gJE9sZE5hbWU7CiAgICB9CgogICAgIyBpZiBkZXBsX3N0YXRlIGlzIHVwZGF0ZWQKICAgIG15ICRMYXN0RGVwbFN0YXRlSUQgPSAkUGFyYW17Q29uZmlnSXRlbUluZm99LT57RGVwbFN0YXRlSUR9IHx8ICcnOwogICAgbXkgJEN1ckRlcGxTdGF0ZUlEICA9ICRQYXJhbXtQYXJhbX0tPntEZXBsU3RhdGVJRH0gICAgICAgICAgfHwgJyc7CgogICAgaWYgKCAkTGFzdERlcGxTdGF0ZUlEIG5lICRDdXJEZXBsU3RhdGVJRCApIHsKICAgICAgICAkRXZlbnRzLT57RGVwbG95bWVudFN0YXRlVXBkYXRlfSA9ICRDdXJEZXBsU3RhdGVJRCAuICclJScgLiAkTGFzdERlcGxTdGF0ZUlEOwogICAgfQoKICAgICMgaWYgaW5jaXN0YXRlIGlzIHVwZGF0ZWQKICAgIG15ICRMYXN0SW5jaVN0YXRlSUQgPSAkUGFyYW17Q29uZmlnSXRlbUluZm99LT57SW5jaVN0YXRlSUR9IHx8ICcnOwogICAgbXkgJEN1ckluY2lTdGF0ZUlEICA9ICRQYXJhbXtQYXJhbX0tPntJbmNpU3RhdGVJRH0gICAgICAgICAgfHwgJyc7CgogICAgaWYgKCAkTGFzdEluY2lTdGF0ZUlEIG5lICRDdXJJbmNpU3RhdGVJRCApIHsKICAgICAgICAkRXZlbnRzLT57SW5jaWRlbnRTdGF0ZVVwZGF0ZX0gPSAkQ3VySW5jaVN0YXRlSUQgLiAnJSUnIC4gJExhc3RJbmNpU3RhdGVJRDsKICAgIH0KCiAgICAjIGNoZWNrIG9sZCBhbmQgbmV3IGRlZmluaXRpb25faWQKICAgIG15ICRPbGREZWZpbml0aW9uSUQgPSAkUGFyYW17Q29uZmlnSXRlbUluZm99LT57RGVmaW5pdGlvbklEfSB8fCAnJzsKICAgIG15ICROZXdEZWZpbml0aW9uSUQgPSAkUGFyYW17UGFyYW19LT57RGVmaW5pdGlvbklEfSAgICAgICAgICB8fCAnJzsKCiAgICBpZiAoICRPbGREZWZpbml0aW9uSUQgbmUgJE5ld0RlZmluaXRpb25JRCApIHsKICAgICAgICAkRXZlbnRzLT57RGVmaW5pdGlvblVwZGF0ZX0gPSAkTmV3RGVmaW5pdGlvbklEOwogICAgfQoKICAgICMgc3RvcmUgaWYgYW55dGhpbmcgbGlrZSBOYW1lLCBEZXBsb3ltZW50U3RhdGUsIEluY2lkZW50U3RhdGUsIERlZmluaXRpb24gaGFzIGJlZW4gY2hhbmdlZC4KICAgIG15ICROb3RoaW5nRWxzZUNoYW5nZWQ7CiAgICBpZiAoICEleyRFdmVudHN9ICkgewogICAgICAgICROb3RoaW5nRWxzZUNoYW5nZWQgPSAxOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGNoYW5nZXMgaW4gWE1MIGRhdGEKICAgIGlmICggJFBhcmFte1BhcmFtfS0+e1hNTERhdGF9ICYmIHJlZiAkUGFyYW17UGFyYW19LT57WE1MRGF0YX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICBteSAlVXBkYXRlVmFsdWVzID0gJFNlbGYtPl9GaW5kQ2hhbmdlZFhNTFZhbHVlcygKICAgICAgICAgICAgQ29uZmlnSXRlbUlEICAgICAgID0+ICRQYXJhbXtQYXJhbX0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICBOZXdYTUxEYXRhICAgICAgICAgPT4gJFBhcmFte1BhcmFtfS0+e1hNTERhdGF9LAogICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgICAgPT4gJE5ld0RlZmluaXRpb25JRCwKICAgICAgICAgICAgTm90aGluZ0Vsc2VDaGFuZ2VkID0+ICROb3RoaW5nRWxzZUNoYW5nZWQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCVVcGRhdGVWYWx1ZXMpIHsKCiAgICAgICAgICAgICMgaWYgb25seSBhdHRyaWJ1dGVzIGhhdmUgY2hhbmdlZCB0aGF0IHNob3VsZCBub3QgY3JlYXRlIGEgbmV3IHZlcnNpb24KICAgICAgICAgICAgaWYgKCAkVXBkYXRlVmFsdWVze1VwZGF0ZUxhc3RWZXJzaW9ufSAmJiAkTm90aGluZ0Vsc2VDaGFuZ2VkICkgewoKICAgICAgICAgICAgICAgICRFdmVudHMtPntVcGRhdGVMYXN0VmVyc2lvbn0gPSAxOwoKICAgICAgICAgICAgICAgICMgQ2xvbmUgdGhlIGRhdGEgc3RydWN0dXJlLCBzbyB3ZSBjYW4gZGVsZXRlIHRoZSBvcmlnaWFsLgogICAgICAgICAgICAgICAgJEV2ZW50cy0+e1VwZGF0ZVhNTERhdGF9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyktPkNsb25lKAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFVwZGF0ZVZhbHVlc3tVcGRhdGVYTUxEYXRhfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGRlbGV0ZSB0aGUgZmxhZyBhbmQgZGF0YSBhZ2FpbiwgdG8gbm90IGNhdXNlIGFueSBwcm9ibGVtcyBsYXRlcgogICAgICAgICAgICAgICAgIyAgIHdoZW4gcHJvY2Vzc2luZyB0aGUgdmFsdWVzLgogICAgICAgICAgICAgICAgZGVsZXRlICRVcGRhdGVWYWx1ZXN7VXBkYXRlTGFzdFZlcnNpb259OwogICAgICAgICAgICAgICAgZGVsZXRlICRVcGRhdGVWYWx1ZXN7VXBkYXRlWE1MRGF0YX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRFdmVudHMtPntWYWx1ZVVwZGF0ZX0gPSBcJVVwZGF0ZVZhbHVlczsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRFdmVudHM7Cn0KCj1oZWFkMiBfRXZlbnRIYW5kbGVyRm9yQ2hhbmdlZFhNTFZhbHVlcygpCgpUaGlzIG1ldGhvZCBjYWxscyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgZWFjaCBjaGFuZ2VkIHZhbHVlIG9mIHRoZSBjb25maWcgaXRlbS4KVGhlIGNoYW5nZWQgdmFsdWVzIGFyZSBwYXNzZWQgaW4gQzxVcGRhdGVWYWx1ZXM+IGFzIGFuIGhhc2hyZWYgd2l0aCB0YWcta2V5cyBhcyBrZXlzLgpQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgb25seSBoYW5kbGVzIHZhbHVlcyBpbnNpZGUgdGhlIFhNTCBzdHJ1Y3R1cmUsIG5vdCBnZW5lcmFsCmF0dHJpYnV0ZXMgbGlrZSBDPEN1ckluY2lTdGF0ZT4uCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+X0V2ZW50SGFuZGxlckZvckNoYW5nZWRYTUxWYWx1ZXMoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDEyMywKICAgICAgICBVcGRhdGVWYWx1ZXMgPT4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J1ZlbmRvcid9WzFdIiA9PiAnT2xkVmVuZG9yJSVOZXdWZW5kb3InLAogICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J1R5cGUnfVsxXSIgICA9PiAnMTI3JSUxMjgnLAogICAgICAgICAgICB9CiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9FdmVudEhhbmRsZXJGb3JDaGFuZ2VkWE1MVmFsdWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhVcGRhdGVWYWx1ZXMgQ29uZmlnSXRlbUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyaWdnZXIgVmFsdWVVcGRhdGUgZXZlbnQgZm9yIGVhY2ggY2hhbmdlZCB2YWx1ZQogICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJFBhcmFte1VwZGF0ZVZhbHVlc30gfSApIHsKICAgICAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgICAgICBFdmVudCA9PiAnVmFsdWVVcGRhdGUnLAogICAgICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJEtleSAuICclJScgLiAkUGFyYW17VXBkYXRlVmFsdWVzfS0+eyRLZXl9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9GaW5kQ2hhbmdlZFhNTFZhbHVlcygpCgpjb21wYXJlcyB0aGUgbmV3IHhtbCBkYXRhIEM8TmV3WE1MRGF0YT4gd2l0aCB0aGUgeG1sIGRhdGEgb2YgdGhlIGxhdGVzdCB2ZXJzaW9uCm9mIHRoZSBjb25maWcgaXRlbSBDPENvbmZpZ0l0ZW1JRD4uIE5vdGUgdGhhdCB0aGUgbmV3IFhNTCBkYXRhIGRvZXMgbm90IGNvbnRhaW4gdGFnIGtleXMuCkFsbCB2YWx1ZXMgb2YgdGhlIHR3byBkYXRhIHNldHMgYXJlIGNvbXBhcmVkLgpXaGVuIGEgY2hhbmdlZCB2YWx1ZSBpcyBlbmNvdW50ZXJlZCwgdGhlIHRhZyBrZXkgYW5kIHRoZSBvbGQgYW5kIHRoZSBuZXcgdmFsdWUgYXJlIHN0b3JlZCBpbiBhIGhhc2guClRoZSBoYXNoIHdpdGggdGhlIHVwZGF0ZWQgdmFsdWVzIGlzIHJldHVybmVkLgoKICAgIG15ICVVcGRhdGVWYWx1ZXMgPSAkQ29uZmlnSXRlbU9iamVjdC0+X0ZpbmRDaGFuZ2VkWE1MVmFsdWVzKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICAgICAgTmV3WE1MRGF0YSAgID0+CiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICdWZXJzaW9uJyA9PgogICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT3duZXInID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50JyA9PiAnJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICApOwoKVGhlIHJldHVybmVkIGhhc2ggbG9va3MgbGlrZToKCiAgICAlVXBkYXRlVmFsdWVzID0gKAogICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydWZW5kb3InfVsxXSIgPT4gJ09sZFZlbmRvciUlTmV3VmVuZG9yJywKICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnVHlwZSd9WzFdIiAgID0+ICcxMjclJTEyOCcsCiAgICApOwoKVGhlIGtleSBpcyBhIHRhZyBrZXkuIFRoZSB2YWx1ZXMgY29udGFpbnMgdGhlIG9sZCBhbmQgdGhlIG5ldyBYTUwgdmFsdWUuCgo9Y3V0CgpzdWIgX0ZpbmRDaGFuZ2VkWE1MVmFsdWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29uZmlnSXRlbUlEIE5ld1hNTERhdGEgRGVmaW5pdGlvbklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGEgbGlzdCB3aXRoIGFsbCB2ZXJzaW9ubnVtYmVycyB0aGF0IGV4aXN0IGZvciB0aGUKICAgICMgZ2l2ZW4gY29uZmlnIGl0ZW0KICAgIG15ICRWZXJzaW9uTGlzdCA9ICRTZWxmLT5WZXJzaW9uTGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICApOwoKICAgICMgc2tpcCB0aGUgY2hlY2sgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGUgaXRlbQogICAgcmV0dXJuIGlmICFAeyRWZXJzaW9uTGlzdH07CgogICAgIyBnZXQgb2xkIHZlcnNpb24KICAgIG15ICRPbGRWZXJzaW9uID0gJFNlbGYtPlZlcnNpb25HZXQoCiAgICAgICAgVmVyc2lvbklEID0+ICRWZXJzaW9uTGlzdC0+Wy0xXSwKICAgICk7CgogICAgIyBUaGUgc2hvcnQgbmFtZXMgZm9yIG5ldyBhbmQgb2xkIHhtbCBkYXRhIGFyZSB1c2VkIGluIHRoZSAnZXZhbCcgYmVsb3csCiAgICAjICAgIGFuZCB3ZSBkbyBub3Qgd2FudCB0byBtb2RpZnkgdGhlIG9yaWdpbmFsIHBhcmFtZXRlciBkYXRhIE5ld1hNTERhdGEKICAgICMgICAgZHVlIHRvIHNpZGUgZWZmZWN0cyBvZiBQZXJscyBhdXRvdml2aWZpY2F0aW9uIGZlYXR1cmUgdXNlZCBsYXRlciBoZXJlCiAgICAjICAgIGluIGFub3RoZXIgZXZhbCBzdGF0ZW1lbnQuCiAgICBteSAkTmV3WE1MRGF0YSA9IFN0b3JhYmxlOjpkY2xvbmUoICRQYXJhbXtOZXdYTUxEYXRhfSApOwogICAgbXkgJE9sZFhNTERhdGEgPSAkT2xkVmVyc2lvbi0+e1hNTERhdGF9OwoKICAgICMgZ2V0IHhtbCBkZWZpbml0aW9uCiAgICBteSAkRGVmaW5pdGlvbiA9ICRTZWxmLT5EZWZpbml0aW9uR2V0KAogICAgICAgIERlZmluaXRpb25JRCA9PiAkUGFyYW17RGVmaW5pdGlvbklEfSwKICAgICk7CgogICAgIyBnZXQgYWxsIHRhZ2tleXMgaW4gbmV3IGFuZCBvbGQgWE1MIGRhdGEKICAgICMgdXNlIGEgc2lkZSBlZmZlY3Qgb2YgWE1MSGFzaDJEKCksIHdoaWNoIGFkZHMgdGhlIHRhZyBrZXlzIHRvIHRoZSBwYXNzZWQgaW4gZGF0YSBzdHJ1Y3R1cmUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpYTUwnKS0+WE1MSGFzaDJEKCBYTUxIYXNoID0+ICROZXdYTUxEYXRhICk7CiAgICBteSBAVGFnS2V5cyA9ICRTZWxmLT5fR3JhYlRhZ0tleXMoIERhdGEgPT4gWyAkT2xkWE1MRGF0YSwgJE5ld1hNTERhdGEgXSApOwoKICAgICMgZ2V0IGFuIHVuaXF1ZSBsaXN0IG9mIGFsbCB0YWcga2V5cwogICAgbXkgJVVuaXF1ZVRhZ0tleXMgPSBtYXAgeyAkXyA9PiAxIH0gQFRhZ0tleXM7CgogICAgbXkgJVVwZGF0ZVZhbHVlczsKICAgIG15ICVTdXBwcmVzc1ZlcnNpb25BZGQ7CgogICAgZm9yIG15ICRUYWdLZXkgKCBzb3J0IGtleXMgJVVuaXF1ZVRhZ0tleXMgKSB7CiAgICAgICAgbXkgJE5ld0NvbnRlbnQgPSBldmFsICckTmV3WE1MRGF0YS0+JyAuICRUYWdLZXkgLiAnLT57Q29udGVudH0nIHx8ICcnOyAgICAjIyBubyBjcml0aWMKICAgICAgICBteSAkT2xkQ29udGVudCA9IGV2YWwgJyRPbGRYTUxEYXRhLT4nIC4gJFRhZ0tleSAuICctPntDb250ZW50fScgfHwgJyc7ICAgICMjIG5vIGNyaXRpYwoKICAgICAgICBpZiAoICROZXdDb250ZW50IG5lICRPbGRDb250ZW50ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGF0dHJpYnV0ZSBwYXRoIG5hbWUKICAgICAgICAgICAgbXkgJEF0dHJpYnV0ZVBhdGggPSAkVGFnS2V5OwogICAgICAgICAgICAkQXR0cmlidXRlUGF0aCA9fiBzeyBcQSBcWy4qP1xdIFx7J1ZlcnNpb24nXH0gXFsuKj9cXSBceycgfXt9eG1zOwogICAgICAgICAgICAkQXR0cmlidXRlUGF0aCA9fiBzeyAnXH0gXFsuKj9cXSBceycgfXs6On14bXNnOwogICAgICAgICAgICAkQXR0cmlidXRlUGF0aCA9fiBzeyAnXH0gXFsuKj9cXSBceiB9e314bXM7CgogICAgICAgICAgICAjIGdldCBkZWZpbml0aW9uIGluZm8gYWJvdXQgYXR0cmlidXRlCiAgICAgICAgICAgIG15ICRBdHRyaWJ1dGVJbmZvID0gJFNlbGYtPkRlZmluaXRpb25BdHRyaWJ1dGVJbmZvKAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbiAgICA9PiAkRGVmaW5pdGlvbi0+e0RlZmluaXRpb25SZWZ9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlUGF0aCA9PiAkQXR0cmlidXRlUGF0aCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHN1cHByZXNzZWQgYW5kIG5vdGhpbmcgZWxzZSBvZgogICAgICAgICAgICAjICAgIE5hbWUsIERlcGxveW1lbnRTdGF0ZSwgSW5jaWRlbnRTdGF0ZSwgRGVmaW5pdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLgogICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGVJbmZvLT57U3VwcHJlc3NWZXJzaW9uQWRkfSAmJiAkUGFyYW17Tm90aGluZ0Vsc2VDaGFuZ2VkfSApIHsKCiAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGVJbmZvLT57U3VwcHJlc3NWZXJzaW9uQWRkfSBlcSAnVXBkYXRlTGFzdFZlcnNpb24nICkgewogICAgICAgICAgICAgICAgICAgICRTdXBwcmVzc1ZlcnNpb25BZGR7VXBkYXRlTGFzdFZlcnNpb259LT57JFRhZ0tleX0gPSBqb2luICclJScsICRPbGRDb250ZW50LCAkTmV3Q29udGVudDsKCiAgICAgICAgICAgICAgICAgICAgIyBCdWlsZCBhIG5ldyBkYXRhIHN0cnVjdGlyZSBvbmx5IHdpdGggdGhlIHVwZGF0ZSB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgZXZhbCAnJFN1cHByZXNzVmVyc2lvbkFkZHtVcGRhdGVYTUxEYXRhfS0+JyAuICRUYWdLZXkgLiAnLT57Q29udGVudH0gPSAkTmV3Q29udGVudCc7ICAgICMjIG5vIGNyaXRpYwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlSW5mby0+e1N1cHByZXNzVmVyc2lvbkFkZH0gZXEgJ0lnbm9yZScgKSB7CiAgICAgICAgICAgICAgICAgICAgJFN1cHByZXNzVmVyc2lvbkFkZHtJZ25vcmV9LT57JFRhZ0tleX0gPSBqb2luICclJScsICRPbGRDb250ZW50LCAkTmV3Q29udGVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGFuZ2Ugd2FzIGZvdW5kCiAgICAgICAgICAgICRVcGRhdGVWYWx1ZXN7JFRhZ0tleX0gPSBqb2luICclJScsICRPbGRDb250ZW50LCAkTmV3Q29udGVudDsKICAgICAgICB9CiAgICB9CgogICAgIyBjb3VudCBob3cgbWFueSBvZiBlYWNoIFN1cHByZXNzVmVyc2lvbkFkZCB0eXBlcyB3ZSBoYXZlLgogICAgbXkgJFVwZGF0ZVZhbHVlc0NvdW50ICAgICAgPSBzY2FsYXIga2V5cyAlVXBkYXRlVmFsdWVzOwogICAgbXkgJElnbm9yZUNvdW50ICAgICAgICAgICAgPSBzY2FsYXIga2V5cyAleyAkU3VwcHJlc3NWZXJzaW9uQWRke0lnbm9yZX0gfTsKICAgIG15ICRVcGRhdGVMYXN0VmVyc2lvbkNvdW50ID0gc2NhbGFyIGtleXMgJXsgJFN1cHByZXNzVmVyc2lvbkFkZHtVcGRhdGVMYXN0VmVyc2lvbn0gfTsKCiAgICBpZiAoJVVwZGF0ZVZhbHVlcykgewoKICAgICAgICAjIFVwZGF0ZSB2YWx1ZXMgY29udGFpbnMgb25seSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgaWdub3JlZC4KICAgICAgICBpZiAoICRVcGRhdGVWYWx1ZXNDb3VudCA9PSAkSWdub3JlQ291bnQgKSB7CiAgICAgICAgICAgICVVcGRhdGVWYWx1ZXMgPSAoKTsKICAgICAgICB9CgogICAgICAgICMgVXBkYXRlIHZhbHVlcyBjb250YWlucyBvbmx5IHZhbHVlcyB0aGF0IHNob3VsZCB1cGRhdGUgdGhlIGxhc3QgdmVyc2lvbiBvciBzaG91bGQgYmUgaWdub3JlZCwKICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICggJFVwZGF0ZVZhbHVlc0NvdW50ID09ICRVcGRhdGVMYXN0VmVyc2lvbkNvdW50ICkKICAgICAgICAgICAgfHwgKCAkVXBkYXRlVmFsdWVzQ291bnQgPT0gKCAkVXBkYXRlTGFzdFZlcnNpb25Db3VudCArICRJZ25vcmVDb3VudCApICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJVVwZGF0ZVZhbHVlcyAgICAgICAgICAgICAgICAgICAgPSAleyAkU3VwcHJlc3NWZXJzaW9uQWRke1VwZGF0ZUxhc3RWZXJzaW9ufSB9OwogICAgICAgICAgICAkVXBkYXRlVmFsdWVze1VwZGF0ZVhNTERhdGF9ICAgICA9ICRTdXBwcmVzc1ZlcnNpb25BZGR7VXBkYXRlWE1MRGF0YX07CiAgICAgICAgICAgICRVcGRhdGVWYWx1ZXN7VXBkYXRlTGFzdFZlcnNpb259ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVVcGRhdGVWYWx1ZXM7Cn0KCj1oZWFkMiBfR3JhYlRhZ0tleXMoKQoKcmVjdXJzaXZlbHkgc2NhbnMgYSBwZXJsIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgaGFzaCBrZXkgJ1RhZ0tleScgYW5kIHJldHVybnMgYQpsaXN0IG9mIGFsbCB0aGUgdmFsdWVzIGZvciB0aGF0IGtleS4KCiAgICBteSBAVGFnS2V5cyA9ICRDb25maWdJdGVtT2JqZWN0LT5fR3JhYlRhZ0tleXMoCiAgICAgICAgRGF0YSA9PiAkWE1MSGFzaFJlZmVyZW56LAogICAgKTsKCj1jdXQKCnN1YiBfR3JhYlRhZ0tleXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gKCkgaWYgISRQYXJhbXtEYXRhfTsKCiAgICBteSBAVGFnS2V5czsKICAgIGlmICggcmVmICRQYXJhbXtEYXRhfSBlcSAnQVJSQVknICkgewoKICAgICAgICBFTEVNOgogICAgICAgIGZvciBteSAkRWxlbSAoIEB7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgbmV4dCBFTEVNIGlmICEkRWxlbTsKICAgICAgICAgICAgbmV4dCBFTEVNIGlmICFyZWYgJEVsZW07CgogICAgICAgICAgICBwdXNoIEBUYWdLZXlzLCAkU2VsZi0+X0dyYWJUYWdLZXlzKCBEYXRhID0+ICRFbGVtICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCByZWYgJFBhcmFte0RhdGF9IGVxICdIQVNIJyApIHsKCiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJFBhcmFte0RhdGF9IH0gKSB7CgogICAgICAgICAgICBpZiAoICRLZXkgZXEgJ1RhZ0tleScgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBUYWdLZXlzLCAkUGFyYW17RGF0YX0tPnskS2V5fTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIHJlZiAkUGFyYW17RGF0YX0tPnskS2V5fSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQFRhZ0tleXMsICRTZWxmLT5fR3JhYlRhZ0tleXMoIERhdGEgPT4gJFBhcmFte0RhdGF9LT57JEtleX0gKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gQFRhZ0tleXM7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MIC0gc3ViIG1vZHVsZSBvZiBLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0KCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIHhtbCBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIFhNTFZhbHVlTG9va3VwKCkKCmxvb2t1cCBhIHhtbCB2YWx1ZQoKICAgIG15ICRWYWx1ZSA9ICRDb25maWdJdGVtT2JqZWN0LT5YTUxWYWx1ZUxvb2t1cCgKICAgICAgICBJdGVtICA9PiAkSXRlbVJlZiwKICAgICAgICBWYWx1ZSA9PiA1LAogICAgKTsKCj1jdXQKCnN1YiBYTUxWYWx1ZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gfHwgKCAkUGFyYW17SXRlbX0gJiYgcmVmICRQYXJhbXtJdGVtfSBuZSAnSEFTSCcgKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjonIC4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0KICAgICk7CgogICAgcmV0dXJuICcnIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGxvb2t1cCBpdGVtIHZhbHVlCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoJVBhcmFtKTsKCiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aGVhZDIgWE1MU3RhdHNBdHRyaWJ1dGVDcmVhdGUoKQoKY3JlYXRlIGEgYXR0cmlidXRlIGFycmF5IGZvciB0aGUgc3RhdHMgZnJhbWV3b3JrCgogICAgbXkgJFZhbHVlID0gJENvbmZpZ0l0ZW1PYmplY3QtPlhNTFN0YXRzQXR0cmlidXRlQ3JlYXRlKAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIFhNTFN0YXRzQXR0cmlidXRlQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjonIC4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0KICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGNyZWF0ZSBzdGF0cyBhdHRyaWJ1dGUgYXJyYXkKICAgIG15ICRBdHRyaWJ1dGUgPSAkQmFja2VuZE9iamVjdC0+U3RhdHNBdHRyaWJ1dGVDcmVhdGUoJVBhcmFtKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZTsKfQoKPWhlYWQyIFhNTEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHhtbCBzZWFyY2ggZGF0YSBmb3IgZXhwb3J0CgogICAgbXkgJEFycmF5UmVmID0gJENvbmZpZ0l0ZW1PYmplY3QtPlhNTEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBJdGVtICA9PiAkSXRlbVJlZiwKICAgICAgICBWYWx1ZSA9PiA1LAogICAgKTsKCj1jdXQKCnN1YiBYTUxFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19IHx8ICggJFBhcmFte0l0ZW19ICYmIHJlZiAkUGFyYW17SXRlbX0gbmUgJ0hBU0gnICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW0hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6JyAuICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1R5cGV9CiAgICApOwoKICAgIHJldHVybiBpZiAhJEJhY2tlbmRPYmplY3Q7CgogICAgIyBwcmVwYXJlIHZhbHVlCiAgICBteSAkQXJyYXkgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCVQYXJhbSk7CgogICAgcmV0dXJuICRBcnJheTsKfQoKPWhlYWQyIFhNTEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHhtbCBkYXRhIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQ29uZmlnSXRlbU9iamVjdC0+WE1MRXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIEl0ZW0gID0+ICRJdGVtUmVmLAogICAgICAgIFZhbHVlID0+IDUsCiAgICApOwoKPWN1dAoKc3ViIFhNTEV4cG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gfHwgKCAkUGFyYW17SXRlbX0gJiYgcmVmICRQYXJhbXtJdGVtfSBuZSAnSEFTSCcgKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjonIC4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0KICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIHByZXBhcmUgdmFsdWUKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRWYWx1ZVByZXBhcmUoJVBhcmFtKTsKCiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aGVhZDIgWE1MSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgeG1sIHNlYXJjaCBkYXRhIGZvciBpbXBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+WE1MSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIEl0ZW0gID0+ICRJdGVtUmVmLAogICAgICAgIFZhbHVlID0+IDUsCiAgICApOwoKPWN1dAoKc3ViIFhNTEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gfHwgKCAkUGFyYW17SXRlbX0gJiYgcmVmICRQYXJhbXtJdGVtfSBuZSAnSEFTSCcgKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjonIC4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0KICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIHByZXBhcmUgdmFsdWUKICAgIG15ICRBcnJheSA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoJVBhcmFtKTsKCiAgICByZXR1cm4gJEFycmF5Owp9Cgo9aGVhZDIgWE1MSW1wb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgeG1sIGRhdGEgZm9yIGltcG9ydAoKICAgIG15ICRWYWx1ZSA9ICRDb25maWdJdGVtT2JqZWN0LT5YTUxJbXBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgSXRlbSAgPT4gJEl0ZW1SZWYsCiAgICAgICAgVmFsdWUgPT4gNSwKICAgICk7Cgo9Y3V0CgpzdWIgWE1MSW1wb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSB8fCByZWYgJFBhcmFte0l0ZW19IG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjonIC4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0KICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIHByZXBhcmUgdmFsdWUKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRWYWx1ZVByZXBhcmUoJVBhcmFtKTsKCiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aGVhZDIgX1hNTFZlcnNpb25TZWFyY2goKQoKU2VhcmNoIHhtbCBkYXRhIG9mIGEgdmVyc2lvbiBhbmQgcmV0dXJuIGEgaGFzaCByZWZlcmVuY2UuClRoZSBDPFdoYXQ+IHBhcmFtZXRlciBpcyBhIGJpdCBsaWtlIHRoZSBwYXJhbWV0ZXIgdXNlZCBpbiBMPFNRTDo6QWJzdHJhY3Q+LgpUaGUgcmV0dXJuZWQgaGFzaCByZWZlcmVuY2UgaGFzIEM8VmVyc2lvbklEPnMgYXMga2V5cyBhbmQgQzwxPiBhcyB2YWx1ZS4KCiAgICBteSAkVmVyc2lvbklEcyA9ICRDb25maWdJdGVtT2JqZWN0LT5fWE1MVmVyc2lvblNlYXJjaCgKICAgICAgICBDbGFzc0lEcyA9PiBbMSwgMiwgM10sICAjIChvcHRpb25hbCkKCiAgICAgICAgV2hhdCA9PiBbCiAgICAgICAgICAgICMgZWFjaCBhcnJheSBlbGVtZW50IGlzIGEgYW5kIGNvbmRpdGlvbgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIG9yIGNvbmRpdGlvbiBpbiBoYXNoCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+ICclY29udGVudEElJywKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJDJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QSUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+ICclY29udGVudEIlJywKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJDJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QiUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIHVzZSBhcnJheSByZWZlcmVuY2UgaWYgZGlmZmVyZW50IGNvbnRlbnQgd2l0aCBzYW1lIGtleSB3YXMgc2VhcmNoZWQKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4gWwogICAgICAgICAgICAgICAgICAgICclY29udGVudEMlJywKICAgICAgICAgICAgICAgICAgICAnJWNvbnRlbnREJScsCiAgICAgICAgICAgICAgICAgICAgJyVjb250ZW50RSUnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJDJ31bJV17J0NvbnRlbnQnfSIgPT4gWwogICAgICAgICAgICAgICAgICAgICclY29udGVudEMlJywKICAgICAgICAgICAgICAgICAgICAnJWNvbnRlbnREJScsCiAgICAgICAgICAgICAgICAgICAgJyVjb250ZW50RSUnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIyB1c2UgaGFzaCByZWZlcmVuY2UgZm9yIHNwZWNpZnlpbmcgY29tcGFyaXNvbiBvcHMsIGFwYXJ0IGZyb20gdGhlIGRlZmF1bHQgJ0xJS0UnCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+IHsgJzwnICAgICAgICA9PiAnYWxwaGFiZXRpY2FsbHlfbG93ZXJfb3JfZXF1YWwnIH0sCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+IHsgJzw9JyAgICAgICA9PiAnYWxwaGFiZXRpY2FsbHlfbGVzc19vcl9lcXVhbCcgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnPScgICAgICAgID0+ICdleGFjdF9tYXRjaCcgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnPj0nICAgICAgID0+ICdhbHBoYWJldGljYWxseV9sYXJnZXJfb3JfZXF1YWwnIH0sCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+IHsgJz4nICAgICAgICA9PiAnYWxwaGFiZXRpY2FsbHlfbGFyZ2VyJyB9LAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckInfVslXXsnQ29udGVudCd9IiA9PiB7ICctYmV0d2VlbicgPT4gWyAnbG93ZXJfYm91bmQnLCAndXBwZXJfYm91bmQnIF0gfSwKICAgICAgICAgICAgfSwKICAgICAgICBdLAoKICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAgKDB8MSkKICAgICk7Cgo9Y3V0CgpzdWIgX1hNTFZlcnNpb25TZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1doYXR9IHx8IHJlZiAkUGFyYW17V2hhdH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgV2hhdCBhcyBhcnJheSByZWZlcmVuY2UhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17Q2xhc3NJRHN9IHx8IHJlZiAkUGFyYW17Q2xhc3NJRHN9IG5lICdBUlJBWScgfHwgIUB7ICRQYXJhbXtDbGFzc0lEc30gfSApIHsKCiAgICAgICAgIyBnZXQgY2xhc3MgbGlzdAogICAgICAgIG15ICRDbGFzc0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgKTsKCiAgICAgICAgQHsgJFBhcmFte0NsYXNzSURzfSB9ID0ga2V5cyAleyRDbGFzc0xpc3R9OwogICAgfQoKICAgICMgc2VhcmNoIGluIGFjdGl2ZSB2ZXJzaW9ucwogICAgbXkgJVZlcnNpb25JRHM7CiAgICBmb3IgbXkgJENsYXNzSUQgKCBAeyAkUGFyYW17Q2xhc3NJRHN9IH0gKSB7CgogICAgICAgICMgc3RhcnQgeG1sIHNlYXJjaAogICAgICAgIG15IEBLZXlzID0gJFNlbGYtPl9YTUxIYXNoU2VhcmNoKAogICAgICAgICAgICBUeXBlID0+ICJJVFNNOjpDb25maWdJdGVtOjokQ2xhc3NJRCIsCiAgICAgICAgICAgIFdoYXQgPT4gJFBhcmFte1doYXR9LAogICAgICAgICk7CgogICAgICAgICMgYWRkIGFsbCBpZHMgdG8gdmVyc2lvbiBpZCBoYXNoCiAgICAgICAgZm9yIG15ICRWZXJzaW9uSUQgKEBLZXlzKSB7CiAgICAgICAgICAgICRWZXJzaW9uSURzeyRWZXJzaW9uSUR9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFwlVmVyc2lvbklEcyBpZiAhJFBhcmFte1ByZXZpb3VzVmVyc2lvblNlYXJjaH07CgogICAgIyBzZWFyY2ggYWxzbyBpbiBvbGQgdmVyc2lvbnMgKGFyY2hpdikKICAgIGZvciBteSAkQ2xhc3NJRCAoIEB7ICRQYXJhbXtDbGFzc0lEc30gfSApIHsKCiAgICAgICAgIyBzdGFydCB4bWwgc2VhcmNoCiAgICAgICAgbXkgQEtleXMgPSAkU2VsZi0+X1hNTEhhc2hTZWFyY2goCiAgICAgICAgICAgIFR5cGUgPT4gIklUU006OkNvbmZpZ0l0ZW06OkFyY2hpdjo6JENsYXNzSUQiLAogICAgICAgICAgICBXaGF0ID0+ICRQYXJhbXtXaGF0fSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBhbGwgaWRzIHRvIHZlcnNpb24gaWQgaGFzaAogICAgICAgIGZvciBteSAkVmVyc2lvbklEIChAS2V5cykgewogICAgICAgICAgICAkVmVyc2lvbklEc3skVmVyc2lvbklEfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJVZlcnNpb25JRHM7Cn0KCj1oZWFkMiBfWE1MVmVyc2lvbkdldCgpCgpnZXQgdGhlIHhtbCBkYXRhIG9mIGEgdmVyc2lvbgoKICAgIG15ICRBcnJheVJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5fWE1MVmVyc2lvbkdldCgKICAgICAgICBDbGFzc0lEICAgPT4gMSwKICAgICAgICBWZXJzaW9uSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBfWE1MVmVyc2lvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzc0lEIFZlcnNpb25JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdmVyc2lvbgogICAgbXkgQFhNTCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpYTUwnKS0+WE1MSGFzaEdldCgKICAgICAgICBUeXBlID0+ICJJVFNNOjpDb25maWdJdGVtOjokUGFyYW17Q2xhc3NJRH0iLAogICAgICAgIEtleSAgPT4gJFBhcmFte1ZlcnNpb25JRH0sCiAgICApOwoKICAgIHJldHVybiBcQFhNTCBpZiBAWE1MOwoKICAgICMgZ2V0IHZlcnNpb24gZnJvbSBhcmNoaXYKICAgIEBYTUwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6WE1MJyktPlhNTEhhc2hHZXQoCiAgICAgICAgVHlwZSA9PiAiSVRTTTo6Q29uZmlnSXRlbTo6QXJjaGl2OjokUGFyYW17Q2xhc3NJRH0iLAogICAgICAgIEtleSAgPT4gJFBhcmFte1ZlcnNpb25JRH0sCiAgICApOwoKICAgIHJldHVybiBcQFhNTDsKfQoKPWhlYWQyIF9YTUxWZXJzaW9uQWRkKCkKCmFkZCB0aGUgeG1sIGRhdGEgb2YgYSBuZXcgdmVyc2lvbiBhbmQgbW92ZSBvbGQgeG1sIHZlcnNpb25zIGluIGFyY2hpdmUgY2xhc3MKCiAgICBteSAkWE1MSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+X1hNTFZlcnNpb25BZGQoCiAgICAgICAgQ2xhc3NJRCAgICAgID0+IDEsCiAgICAgICAgQ29uZmlnSXRlbUlEID0+IDIyMiwKICAgICAgICBWZXJzaW9uSUQgICAgPT4gMTIzLAogICAgICAgIFhNTERhdGEgICAgICA9PiAkQXJyYXlSZWYsCiAgICApOwoKPWN1dAoKc3ViIF9YTUxWZXJzaW9uQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzSUQgQ29uZmlnSXRlbUlEIFZlcnNpb25JRCBYTUxEYXRhKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCB4bWwgdmVyc2lvbgogICAgbXkgJFhNTElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlhNTCcpLT5YTUxIYXNoQWRkKAogICAgICAgIFR5cGUgICAgPT4gIklUU006OkNvbmZpZ0l0ZW06OiRQYXJhbXtDbGFzc0lEfSIsCiAgICAgICAgS2V5ICAgICA9PiAkUGFyYW17VmVyc2lvbklEfSwKICAgICAgICBYTUxIYXNoID0+ICRQYXJhbXtYTUxEYXRhfSwKICAgICk7CgogICAgIyBnZXQgbGFzdCB2ZXJzaW9ucwogICAgbXkgJE9sZFZlcnNpb25JRHMgPSAkU2VsZi0+VmVyc2lvbkxpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgKTsKCiAgICAjIEZpbmQgVmVyc2lvbiB0byBtb3ZlCiAgICBteSAkTW92ZVZlcnNpb247CiAgICBPTERWRVJTSU9OSUQ6CiAgICBmb3IgbXkgJE9sZFZlcnNpb25JRCAoIEB7JE9sZFZlcnNpb25JRHN9ICkgewogICAgICAgIGxhc3QgT0xEVkVSU0lPTklEIGlmICRPbGRWZXJzaW9uSUQgZXEgJFBhcmFte1ZlcnNpb25JRH07CgogICAgICAgICRNb3ZlVmVyc2lvbiA9ICRPbGRWZXJzaW9uSUQ7CiAgICB9CgogICAgcmV0dXJuICRYTUxJRCBpZiAhJE1vdmVWZXJzaW9uOwoKICAgICMgbW92ZSBvbGQgdmVyc2lvbiBpbiBhcmNoaXYKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpYTUwnKS0+WE1MSGFzaE1vdmUoCiAgICAgICAgT2xkVHlwZSA9PiAiSVRTTTo6Q29uZmlnSXRlbTo6JFBhcmFte0NsYXNzSUR9IiwKICAgICAgICBPbGRLZXkgID0+ICRNb3ZlVmVyc2lvbiwKICAgICAgICBOZXdUeXBlID0+ICJJVFNNOjpDb25maWdJdGVtOjpBcmNoaXY6OiRQYXJhbXtDbGFzc0lEfSIsCiAgICAgICAgTmV3S2V5ICA9PiAkTW92ZVZlcnNpb24sCiAgICApOwoKICAgIHJldHVybiAkWE1MSUQ7Cn0KCj1oZWFkMiBfWE1MVmVyc2lvbkRlbGV0ZSgpCgpkZWxldGUgdGhlIHhtbCBkYXRhIG9mIGEgdmVyc2lvbgoKICAgIG15ICRUcnVlID0gJENvbmZpZ0l0ZW1PYmplY3QtPl9YTUxWZXJzaW9uRGVsZXRlKAogICAgICAgIFZlcnNpb25JRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9YTUxWZXJzaW9uRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFZlcnNpb25JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdmVyc2lvbiBkYXRhCiAgICBteSAkVmVyc2lvbiA9ICRTZWxmLT5WZXJzaW9uR2V0KAogICAgICAgIFZlcnNpb25JRCA9PiAkUGFyYW17VmVyc2lvbklEfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkVmVyc2lvbjsKCiAgICAjIGRlbGV0ZSB4bWwgZGF0YSBmcm9tIGEgdmVyc2lvbgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlhNTCcpLT5YTUxIYXNoRGVsZXRlKAogICAgICAgIFR5cGUgPT4gIklUU006OkNvbmZpZ0l0ZW06OiRWZXJzaW9uLT57Q2xhc3NJRH0iLAogICAgICAgIEtleSAgPT4gJFBhcmFte1ZlcnNpb25JRH0sCiAgICApOwoKICAgICMgZGVsZXRlIHhtbCBkYXRhIGZyb20gYXJjaGl2CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6WE1MJyktPlhNTEhhc2hEZWxldGUoCiAgICAgICAgVHlwZSA9PiAiSVRTTTo6Q29uZmlnSXRlbTo6QXJjaGl2OjokVmVyc2lvbi0+e0NsYXNzSUR9IiwKICAgICAgICBLZXkgID0+ICRQYXJhbXtWZXJzaW9uSUR9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9YTUxIYXNoU2VhcmNoKCkKClNlYXJjaCBhIHhtbCBoYXNoIGZyb20gZGF0YWJhc2UuClRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIEtlcm5lbDo6U3lzdGVtOjpYTUxIYXNoU2VhcmNoLCBidXQgaGFzIHN1cHBvcnQgZm9yIHNvbWUgZXh0cmEgZmVhdHVyZXMuCkEgc3BlY2lmaWMgb3BlcmF0b3IgY2FuIGJlIHNwZWNpZmllZCBpbiBhIGhhc2guClRoZSBzeW50YXggaXMgYmFzZWQgb24gTDxTUUw6OkFic3RyYWN0Pi4KCiAgICBteSBAS2V5cyA9ICRDb25maWdJdGVtT2JqZWN0LT5fWE1MSGFzaFNlYXJjaCgKICAgICAgICBUeXBlID0+ICdTb21lVHlwZScsCiAgICAgICAgV2hhdCA9PiBbCiAgICAgICAgICAgICMgZWFjaCBhcnJheSBlbGVtZW50IGlzIGEgYW5kIGNvbmRpdGlvbgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIG9yIGNvbmRpdGlvbiBpbiBoYXNoCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+ICclY29udGVudEElJywKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJDJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QSUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+ICclY29udGVudEIlJywKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJDJ31bJV17J0NvbnRlbnQnfSIgPT4gJyVjb250ZW50QiUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIHVzZSBhcnJheSByZWZlcmVuY2UgaWYgZGlmZmVyZW50IGNvbnRlbnQgd2l0aCBzYW1lIGtleSB3YXMgc2VhcmNoZWQKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4gWyclY29udGVudEMlJywgJyVjb250ZW50RCUnLCAnJWNvbnRlbnRFJSddLAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckMnfVslXXsnQ29udGVudCd9IiA9PiBbJyVjb250ZW50QyUnLCAnJWNvbnRlbnREJScsICclY29udGVudEUlJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgdXNlIGhhc2ggcmVmZXJlbmNlIGZvciBzcGVjaWZ5aW5nIGNvbXBhcmlzb24gb3BzLCBhcGFydCBmcm9tIHRoZSBkZWZhdWx0ICdMSUtFJwogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckInfVslXXsnQ29udGVudCd9IiA9PiB7ICc8JyAgICAgICAgID0+ICdhbHBoYWJldGljYWxseV9sb3dlcl9vcl9lcXVhbCcgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnPD0nICAgICAgICA9PiAnYWxwaGFiZXRpY2FsbHlfbGVzc19vcl9lcXVhbCcgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnPScgICAgICAgICA9PiAnZXhhY3RfbWF0Y2gnIH0sCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+IHsgJyE9JyAgICAgICAgPT4gJ2V4YWN0X21hdGNoJyB9LAogICAgICAgICAgICAgICAgIlslXXsnVmVyc2lvbid9WyVdeydDb25maWdJdGVtQXR0ckInfVslXXsnQ29udGVudCd9IiA9PiB7ICc+PScgICAgICAgID0+ICdhbHBoYWJldGljYWxseV9sYXJnZXJfb3JfZXF1YWwnIH0sCiAgICAgICAgICAgICAgICAiWyVdeydWZXJzaW9uJ31bJV17J0NvbmZpZ0l0ZW1BdHRyQid9WyVdeydDb250ZW50J30iID0+IHsgJz4nICAgICAgICAgPT4gJ2FscGhhYmV0aWNhbGx5X2xhcmdlcicgfSwKICAgICAgICAgICAgICAgICJbJV17J1ZlcnNpb24nfVslXXsnQ29uZmlnSXRlbUF0dHJCJ31bJV17J0NvbnRlbnQnfSIgPT4geyAnLWJldHdlZW4nICA9PiBbICdsb3dlcl9ib3VuZCcsICd1cHBlcl9ib3VuZCcgXSB9LAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICApOwoKPWN1dAoKc3ViIF9YTUxIYXNoU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtUeXBlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVHlwZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGxpa2UgZXNjYXBlIHN0cmluZyBuZWVkZWQgZm9yIHNvbWUgZGF0YWJhc2VzIChlLmcuIG9yYWNsZSkKICAgIG15ICRMaWtlRXNjYXBlU3RyaW5nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkdldERhdGFiYXNlRnVuY3Rpb24oJ0xpa2VFc2NhcGVTdHJpbmcnKTsKCiAgICAjIGdldCBhbGwgZW50cmllcyBpZiB3ZSBoYXZlIG5vIHJlc3RyaWN0aW9uCiAgICBpZiAoICEkUGFyYW17V2hhdH0gfHwgcmVmICRQYXJhbXtXaGF0fSBuZSAnQVJSQVknICkgewogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBESVNUSU5DVCh4bWxfa2V5KSBGUk9NIHhtbF9zdG9yYWdlIFdIRVJFIHhtbF90eXBlID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1R5cGV9IF0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgQEtleXM7CiAgICAgICAgd2hpbGUgKCBteSBARGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgIHB1c2ggQEtleXMsICREYXRhWzBdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEBLZXlzOwogICAgfQoKICAgICMgb3RoZXJ3aXNlIG9ubHkgZ2V0IGVudHJpZXMgcmVzdHJpY3RlZCBieSAnV2hhdCcgcGFyYW1ldGVyCgogICAgbXkgJU9wSXNTdXBwb3J0ZWQgPSBtYXAgeyAkXyA9PiAxIH0gKCAnPCcsICc8PScsICc9JywgJyE9JywgJz49JywgJz4nLCAnLWJldHdlZW4nICk7CgogICAgIyB0aGUgYXJyYXkgZWxlbWVudHMgYXJlICdhbmQnIGNvbWJpbmVkCiAgICBteSAkSW50ZXJzZWN0ID0gMDsKICAgIG15ICVIYXNoOwogICAgZm9yIG15ICRBbmQgKCBAeyAkUGFyYW17V2hhdH0gfSApIHsKCiAgICAgICAgIyB0aGUga2V5L3ZhbHVlIHBhaXJzIGFyZSAnb3InIGNvbWJpbmVkCiAgICAgICAgbXkgQE9yQ29uZGl0aW9uczsKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRBbmR9ICkgewogICAgICAgICAgICBteSAkVmFsdWUgPSAkQW5kLT57JEtleX07CgogICAgICAgICAgICAkU2VsZi0+X1ByZXBhcmVMaWtlU3RyaW5nKCBcJEtleSApOwoKICAgICAgICAgICAgaWYgKCAkVmFsdWUgJiYgcmVmICRWYWx1ZSBlcSAnQVJSQVknICkgewoKICAgICAgICAgICAgICAgICMgd2hlbiBhbiBhcnJheSBvZiBwb3NzaWJsZSB2YWx1ZXMgaXMgZ2l2ZW4sCiAgICAgICAgICAgICAgICAjIHdlIHVzZSAnTElLRSctY29uZGl0aW9ucyBhbmQgY29tYmluZSB0aGVtIHdpdGggJ09SJwogICAgICAgICAgICAgICAgZm9yIG15ICRFbGVtZW50ICggQHskVmFsdWV9ICkgewoKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+X1ByZXBhcmVMaWtlU3RyaW5nKCBcJEVsZW1lbnQgKTsKCiAgICAgICAgICAgICAgICAgICAgcHVzaCBAT3JDb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAiICh4bWxfY29udGVudF9rZXkgTElLRSAnJEtleScgJExpa2VFc2NhcGVTdHJpbmcgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJBTkQgeG1sX2NvbnRlbnRfdmFsdWUgTElLRSAnJEVsZW1lbnQnICRMaWtlRXNjYXBlU3RyaW5nKSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkVmFsdWUgJiYgcmVmICRWYWx1ZSBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICAgICAgIyBhIGhhc2hyZWYgaW5kaWNhdGVzIGEgc3BlY2lmaWMgY29tcGFyaXNvbiBvcAogICAgICAgICAgICAgICAgIyBjdXJyZW50bHkgb25seSBhIHNpbmdsZSBvcCwgd2l0aCBhIHNpbmdsZSB2YWx1ZSwgaXMgc3VwcG9ydGVkCgogICAgICAgICAgICAgICAgIyBVbmRlciBPcmFjbGUgdGhlIGF0dHJpYnV0ZSAneG1sX2NvbnRlbnRfdmFsdWUnIGlzIGEgQ0xPQiwKICAgICAgICAgICAgICAgICMgYSBDaGFyYWN0ZXIgTG9jYXRvciBPYmplY3QuIFdoaWxlIHNlbGVjdGlvbiB3aXRoIExJS0UgaXMgcG9zc2libGUsCiAgICAgICAgICAgICAgICAjIHRoZSBhbHBoYWJldGljYWwgY29tcGFyaXNvbiBvcHMgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgICAgICAgICAgICAgICAjIFNlZSBodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9kb2NzL2NkL0IxMjAzN18wMS9hcHBkZXYuMTAxL2IxMDc5Ni9cCiAgICAgICAgICAgICAgICAjIGFkbG9iX3NxLmh0bSMxMDA2MjE1CiAgICAgICAgICAgICAgICAjIEFzIGEgd29ya2Fyb3VuZCB3ZSBjYXN0IHRoZSBDTE9CIHRvIGEgVkFSQ0hBUjIgd2l0aCBUT19DSEFSKCkuCiAgICAgICAgICAgICAgICBteSAkWE1MQ29udGVudFZhbHVlQ29sdW1uID0gJ3htbF9jb250ZW50X3ZhbHVlJzsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+R2V0RGF0YWJhc2VGdW5jdGlvbignVHlwZScpIGVxCiAgICAgICAgICAgICAgICAgICAgJ29yYWNsZScKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJFhNTENvbnRlbnRWYWx1ZUNvbHVtbiA9ICdUT19DSEFSKHhtbF9jb250ZW50X3ZhbHVlKSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgKCRPcCkgPSBrZXlzICV7JFZhbHVlfTsKICAgICAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFZhbHVlLT57JE9wfTsKICAgICAgICAgICAgICAgIGlmICggJE9wICYmICRPcCBlcSAnLWJldHdlZW4nICYmIHJlZiAkRWxlbWVudCBlcSAnQVJSQVknICkgewogICAgICAgICAgICAgICAgICAgIG15ICRMb3dlckJvdW5kID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCAkRWxlbWVudC0+WzBdICk7CiAgICAgICAgICAgICAgICAgICAgbXkgJFVwcGVyQm91bmQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UXVvdGUoICRFbGVtZW50LT5bMV0gKTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBPckNvbmRpdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICIgKCB4bWxfY29udGVudF9rZXkgTElLRSAnJEtleScgJExpa2VFc2NhcGVTdHJpbmcgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJBTkQgJFhNTENvbnRlbnRWYWx1ZUNvbHVtbiA+PSAnJExvd2VyQm91bmQnICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiQU5EICRYTUxDb250ZW50VmFsdWVDb2x1bW4gPD0gJyRVcHBlckJvdW5kJyApIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJE9wICYmICRPcElzU3VwcG9ydGVkeyRPcH0gJiYgIXJlZiAkRWxlbWVudCApIHsKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5RdW90ZSgkRWxlbWVudCkgLy8gJyc7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAT3JDb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAiICggeG1sX2NvbnRlbnRfa2V5IExJS0UgJyRLZXknICRMaWtlRXNjYXBlU3RyaW5nICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiQU5EICRYTUxDb250ZW50VmFsdWVDb2x1bW4gJE9wICckRWxlbWVudCcgKSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0dvdCB1bmV4cGVjdGVkIGRhdGEgaW4gc2VhcmNoIScsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBPckNvbmRpdGlvbnMsICcoIDEgPSAxICknOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgd2hlbiBhIHNpbmdsZSAgcG9zc2libGUgdmFsdWUgaXMgZ2l2ZW4sCiAgICAgICAgICAgICAgICAjIHdlIHVzZSBhICdMSUtFJy1jb25kaXRpb24KICAgICAgICAgICAgICAgICRTZWxmLT5fUHJlcGFyZUxpa2VTdHJpbmcoIFwkVmFsdWUgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBPckNvbmRpdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgIiAoeG1sX2NvbnRlbnRfa2V5IExJS0UgJyRLZXknICRMaWtlRXNjYXBlU3RyaW5nICIKICAgICAgICAgICAgICAgICAgICAuICJBTkQgeG1sX2NvbnRlbnRfdmFsdWUgTElLRSAnJFZhbHVlJyAkTGlrZUVzY2FwZVN0cmluZykiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGFzc2VtYmxlIHRoZSBTUUwKICAgICAgICBteSAkU1FMID0gJ1NFTEVDVCBESVNUSU5DVCh4bWxfa2V5KSBGUk9NIHhtbF9zdG9yYWdlIFdIRVJFIHhtbF90eXBlID0gPyAnOwogICAgICAgIGlmIChAT3JDb25kaXRpb25zKSB7CiAgICAgICAgICAgICRTUUwgLj0gJ0FORCAoICcgLiBqb2luKCAnIE9SICcsIEBPckNvbmRpdGlvbnMgKSAuICcgKSc7CiAgICAgICAgfQoKICAgICAgICAjIGV4ZWN1dGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUeXBlfSBdLAogICAgICAgICk7CgogICAgICAgICMgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGN1cnJlbnQga2V5IHNldCwgYW5kIHRoZSBrZXlzIGZyb20gdGhlIGxhc3QgJ1NFTEVDVCcKICAgICAgICAjIG9ubHkgdGhlIGtleXMgd2hpY2ggYXJlIGluIGFsbCByZXN1bHRzIHN1cnZpdmUKICAgICAgICBteSAlSGFzaE5ldzsKICAgICAgICB3aGlsZSAoIG15IEBEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgaWYgKCAhJEludGVyc2VjdCB8fCAkSGFzaHsgJERhdGFbMF0gfSApIHsKICAgICAgICAgICAgICAgICRIYXNoTmV3eyAkRGF0YVswXSB9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAlSGFzaCA9ICVIYXNoTmV3OwoKICAgICAgICAjIHJlbWVtYmVyIHRvIGxhdGVyIGludGVyc2VjdCByZXN1bHRzCiAgICAgICAgKyskSW50ZXJzZWN0OwogICAgfQoKICAgIG15IEBLZXlzID0ga2V5cyAlSGFzaDsKCiAgICByZXR1cm4gQEtleXM7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6RXZlbnQ6OkRvSGlzdG9yeTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpFdmVudDo6RG9IaXN0b3J5IC0gRXZlbnQgaGFuZGxlciB0aGF0IGRvZXMgdGhlIGhpc3RvcnkKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICREb0hpc3RvcnlPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OkV2ZW50OjpEb0hpc3RvcnknKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKClRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIGV2ZW50LgoKICAgICREb0hpc3RvcnlPYmplY3QtPlJ1bigKICAgICAgICBFdmVudCA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJ25ldyB2YWx1ZTogMScsCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBhcyBEZWZpbml0aW9uQ3JlYXRlIGRvZXMgbm90IGJlbG9uZyB0byBhbiBpdGVtLCB3ZSBkb24ndCBjcmVhdGUKICAgICMgYSBoaXN0b3J5IGVudHJ5CiAgICBpZiAoICRQYXJhbXtFdmVudH0gJiYgJFBhcmFte0V2ZW50fSBlcSAnRGVmaW5pdGlvbkNyZWF0ZScgKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRGF0YSBFdmVudCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkdWUgdG8gY29uc2lzdGVuY3kgd2l0aCB0aWNrZXQgaGlzdG9yeSwgd2UgbmVlZCBIaXN0b3J5VHlwZQogICAgJFBhcmFte0hpc3RvcnlUeXBlfSA9ICRQYXJhbXtFdmVudH07CgogICAgIyBkaXNwYXRjaCB0YWJsZSBmb3IgYWxsIGV2ZW50cwogICAgbXkgJURpc3BhdGNoZXIgPSAoCiAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZSAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgQ29uZmlnSXRlbURlbGV0ZSAgICAgID0+IFwmX0NvbmZpZ0l0ZW1EZWxldGUsCiAgICAgICAgTGlua0FkZCAgICAgICAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgTGlua0RlbGV0ZSAgICAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgTmFtZVVwZGF0ZSAgICAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgSW5jaWRlbnRTdGF0ZVVwZGF0ZSAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgRGVwbG95bWVudFN0YXRlVXBkYXRlID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgRGVmaW5pdGlvblVwZGF0ZSAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgVmVyc2lvbkNyZWF0ZSAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgVmFsdWVVcGRhdGUgICAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgRGVmaW5pdGlvbkNyZWF0ZSAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgVmVyc2lvbkRlbGV0ZSAgICAgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgQXR0YWNobWVudEFkZFBvc3QgICAgID0+IFwmX0hpc3RvcnlBZGQsCiAgICAgICAgQXR0YWNobWVudERlbGV0ZVBvc3QgID0+IFwmX0hpc3RvcnlBZGQsCiAgICApOwoKICAgICMgZXJyb3IgaGFuZGxpbmcKICAgIGlmICggIWV4aXN0cyAkRGlzcGF0Y2hlcnsgJFBhcmFte0V2ZW50fSB9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnbm9uIGV4aXN0YW50IGhpc3RvcnkgdHlwZTogJyAuICRQYXJhbXtFdmVudH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2FsbCBjYWxsYmFjawogICAgbXkgJFN1YiA9ICREaXNwYXRjaGVyeyAkUGFyYW17RXZlbnR9IH07CiAgICAkU2VsZi0+JFN1YigKICAgICAgICAlUGFyYW0sCiAgICAgICAgJXsgJFBhcmFte0RhdGF9IH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDEgSU5URVJOQUwgSU5URVJGQUNFCgo9aGVhZDIgX0NvbmZpZ0l0ZW1EZWxldGUoKQoKaGlzdG9yeSdzIGV2ZW50IGhhbmRsZXIgZm9yIENvbmZpZ0l0ZW1EZWxldGUKCj1jdXQKCnN1YiBfQ29uZmlnSXRlbURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVsZXRlIGhpc3RvcnkKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5IaXN0b3J5RGVsZXRlKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfSGlzdG9yeUFkZCgpCgpoaXN0b3J5J3MgZGVmYXVsdCBldmVudCBoYW5kbGVyLgoKPWN1dAoKc3ViIF9IaXN0b3J5QWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBhZGQgaGlzdG9yeSBlbnRyeQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPkhpc3RvcnlBZGQoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6TnVtYmVyOjpBdXRvSW5jcmVtZW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6TnVtYmVyOjpBdXRvSW5jcmVtZW50IC0gY29uZmlnIGl0ZW0gbnVtYmVyIGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBhdXRvIGluY3JlbWVudCBjb25maWcgaXRlbSBudW1iZXIgZnVuY3Rpb25zCgo9aGVhZDIgX0NvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUoKQoKY3JlYXRlIGEgbmV3IGNvbmZpZyBpdGVtIG51bWJlcgoKICAgIG15ICROdW1iZXIgPSAkQmFja2VuZE9iamVjdC0+X0NvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUoCiAgICAgICAgQ2xhc3NJRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIF9Db25maWdJdGVtTnVtYmVyQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDbGFzc0lEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3NJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHN5c3RlbSBpZAogICAgbXkgJFN5c3RlbUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTeXN0ZW1JRCcpOwoKICAgICMgZ2V0IGN1cnJlbnQgY291bnRlcgogICAgbXkgJEN1cnJlbnRDb3VudGVyID0gJFNlbGYtPkN1cnJlbnRDb3VudGVyR2V0KAogICAgICAgIENsYXNzSUQgPT4gJFBhcmFte0NsYXNzSUR9LAogICAgICAgIFR5cGUgICAgPT4gJ0F1dG9JbmNyZW1lbnQnLAogICAgKSB8fCAwOwoKICAgIENJUEhFUjoKICAgIGZvciBteSAkQ2lwaGVyICggMSAuLiAxXzAwMF8wMDBfMDAwICkgewoKICAgICAgICAjIGNyZWF0ZSBuZXcgbnVtYmVyCiAgICAgICAgbXkgJE51bWJlciA9ICRTeXN0ZW1JRCAuICRQYXJhbXtDbGFzc0lEfSAuIHNwcmludGYoICIlMDZkIiwgKCAkQ3VycmVudENvdW50ZXIgKyAkQ2lwaGVyICkgKTsKCiAgICAgICAgIyBmaW5kIGV4aXN0aW5nIG51bWJlcgogICAgICAgIG15ICREdXBsaWNhdGUgPSAkU2VsZi0+Q29uZmlnSXRlbU51bWJlckxvb2t1cCgKICAgICAgICAgICAgQ29uZmlnSXRlbU51bWJlciA9PiAkTnVtYmVyLAogICAgICAgICk7CgogICAgICAgIG5leHQgQ0lQSEVSIGlmICREdXBsaWNhdGU7CgogICAgICAgICMgc2V0IGNvdW50ZXIKICAgICAgICAkU2VsZi0+Q3VycmVudENvdW50ZXJTZXQoCiAgICAgICAgICAgIENsYXNzSUQgPT4gJFBhcmFte0NsYXNzSUR9LAogICAgICAgICAgICBUeXBlICAgID0+ICdBdXRvSW5jcmVtZW50JywKICAgICAgICAgICAgQ291bnRlciA9PiAoICRDdXJyZW50Q291bnRlciArICRDaXBoZXIgKSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJE51bWJlcjsKICAgIH0KCiAgICByZXR1cm47Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjo6Q2xhc3NHcm91cENoZWNrOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjo6Q2xhc3NHcm91cENoZWNrIC0gY2hlY2sgaWYgYSB1c2VyIGJlbG9uZ3MgdG8gYSBncm91cAoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENoZWNrT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpQZXJtaXNzaW9uOjpDbGFzc0dyb3VwQ2hlY2snKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKCnRoaXMgbWV0aG9kIGRvZXMgdGhlIGNoZWNrIGlmIHRoZSB1c2UgYmVsb25ncyB0byBhIGdpdmVuIGdyb3VwCgogICAgbXkgJEhhc0FjY2VzcyA9ICRDaGVja09iamVjdC0+UnVuKAogICAgICAgIFVzZXJJRCAgPT4gMTIzLAogICAgICAgIFR5cGUgICAgPT4gJ3JvJywKICAgICAgICBDbGFzc0lEID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzczo6Q29tcHV0ZXInLAogICAgKTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFVzZXJJRCBUeXBlIENsYXNzSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgQ2xhc3MgZGF0YQogICAgbXkgJENsYXNzSXRlbSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17Q2xhc3NJRH0sCiAgICApOwoKICAgICMgZ2V0IHVzZXIgZ3JvdXBzCiAgICBteSBAR3JvdXBJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIFJlc3VsdCA9PiAnSUQnLAogICAgICAgIENhY2hlZCA9PiAxLAogICAgKTsKCiAgICAjIGxvb2tpbmcgZm9yIGdyb3VwIGlkLCByZXR1cm4gYWNjZXNzIGlmIHVzZXIgaXMgaW4gZ3JvdXAKICAgIGZvciBteSAkR3JvdXBJRCAoQEdyb3VwSURzKSB7CiAgICAgICAgcmV0dXJuIDEgaWYgJENsYXNzSXRlbS0+e1Blcm1pc3Npb259ICYmICRHcm91cElEIGVxICRDbGFzc0l0ZW0tPntQZXJtaXNzaW9ufTsKICAgIH0KCiAgICAjIHJldHVybiBubyBhY2Nlc3MKICAgIHJldHVybjsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBTb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjo6SXRlbUNsYXNzR3JvdXBDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6TWlncmF0aW9uczo6T1RSUzY6OlN5c0NvbmZpZykKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjo6SXRlbUNsYXNzR3JvdXBDaGVjayAtIGNoZWNrIGlmIGEgdXNlciBjYW4gYWNjZXNzIGFuIGl0ZW0KCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGNvbmZpZyBpdGVtIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDaGVja09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6UGVybWlzc2lvbjo6SXRlbUNsYXNzR3JvdXBDaGVjaycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBSdW4oKQoKdGhpcyBtZXRob2QgZG9lcyB0aGUgY2hlY2sgaWYgdGhlIHVzZXIgY2FuIGFjY2VzcyBhbiBpdGVtCgogICAgbXkgJEhhc0FjY2VzcyA9ICRDaGVja09iamVjdC0+UnVuKAogICAgICAgIFVzZXJJRCA9PiAxMjMsCiAgICAgICAgVHlwZSAgID0+ICdybycsCiAgICAgICAgSXRlbUlEID0+IDM0NSwKICAgICk7Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhVc2VySUQgVHlwZSBJdGVtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY29uZmlnIGl0ZW0gZGF0YQogICAgbXkgJENvbmZpZ0l0ZW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICApOwoKICAgICMgZ2V0IENsYXNzIGRhdGEKICAgIG15ICRDbGFzc0l0ZW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICBJdGVtSUQgPT4gJENvbmZpZ0l0ZW0tPntDbGFzc0lEfSwKICAgICk7CgogICAgIyBnZXQgdXNlciBncm91cHMKICAgIG15IEBHcm91cElEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgUmVzdWx0ID0+ICdJRCcsCiAgICAgICAgQ2FjaGVkID0+IDEsCiAgICApOwoKICAgICMgbG9va2luZyBmb3IgZ3JvdXAgaWQsIHJldHVybiBhY2Nlc3MgaWYgdXNlciBpcyBpbiBncm91cAogICAgZm9yIG15ICRHcm91cElEIChAR3JvdXBJRHMpIHsKICAgICAgICByZXR1cm4gMSBpZiAkQ2xhc3NJdGVtLT57UGVybWlzc2lvbn0gJiYgJEdyb3VwSUQgZXEgJENsYXNzSXRlbS0+e1Blcm1pc3Npb259OwogICAgfQoKICAgICMgcmV0dXJuIG5vIGFjY2VzcwogICAgcmV0dXJuOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIFNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpDdXN0b21lcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpDdXN0b21lciAtIHhtbCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgeG1sIGZ1bmN0aW9ucyBvZiBjdXN0b21lciBvYmplY3RzCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRYTUxUeXBlQ3VzdG9tZXJCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkN1c3RvbWVyJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFZhbHVlTG9va3VwKCkKCmdldCB0aGUgeG1sIGRhdGEgb2YgYSB2ZXJzaW9uCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlZhbHVlTG9va3VwKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgVmFsdWVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJycgaWYgISRQYXJhbXtWYWx1ZX07CgogICAgbXkgJUN1c3RvbWVyU2VhcmNoTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJTZWFyY2goCiAgICAgICAgU2VhcmNoID0+ICRQYXJhbXtWYWx1ZX0sCiAgICApOwoKICAgIHJldHVybiAkQ3VzdG9tZXJTZWFyY2hMaXN0eyAkUGFyYW17VmFsdWV9IH0gfHwgJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIFN0YXRzQXR0cmlidXRlQ3JlYXRlKCkKCmNyZWF0ZSBhIGF0dHJpYnV0ZSBhcnJheSBmb3IgdGhlIHN0YXRzIGZyYW1ld29yawoKICAgIG15ICRBdHRyaWJ1dGUgPSAkQmFja2VuZE9iamVjdC0+U3RhdHNBdHRyaWJ1dGVDcmVhdGUoCiAgICAgICAgS2V5ID0+ICdLZXk6OlN1YmtleScsCiAgICAgICAgTmFtZSA9PiAnTmFtZScsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgU3RhdHNBdHRyaWJ1dGVDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IE5hbWUgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYXR0cmlidXRlCiAgICBteSAkQXR0cmlidXRlID0gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ0lucHV0RmllbGQnLAogICAgICAgIH0sCiAgICBdOwoKICAgIHJldHVybiAkQXR0cmlidXRlOwp9Cgo9aGVhZDIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1oZWFkMiBJbXBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpDdXN0b21lckNvbXBhbnk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJDb21wYW55JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6Q3VzdG9tZXJDb21wYW55IC0geG1sIGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCB4bWwgZnVuY3Rpb25zIG9mIGN1c3RvbWVyIGNvbXBhbnkgb2JqZWN0cwoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkWE1MVHlwZUN1c3RvbWVyQ29tcGFueUJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6Q3VzdG9tZXJDb21wYW55Jyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFZhbHVlTG9va3VwKCkKCmdldCB0aGUgeG1sIGRhdGEgb2YgYSB2ZXJzaW9uCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlZhbHVlTG9va3VwKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgVmFsdWVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJycgaWYgISRQYXJhbXtWYWx1ZX07CgogICAgbXkgJUN1c3RvbWVyQ29tcGFueSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lckNvbXBhbnknKS0+Q3VzdG9tZXJDb21wYW55R2V0KAogICAgICAgIEN1c3RvbWVySUQgPT4gJFBhcmFte1ZhbHVlfSwKICAgICk7CgogICAgcmV0dXJuICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55TmFtZX0gfHwgJyc7Cn0KCj1oZWFkMiBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSgpCgpjcmVhdGUgYSBhdHRyaWJ1dGUgYXJyYXkgZm9yIHRoZSBzdGF0cyBmcmFtZXdvcmsKCiAgICBteSAkQXR0cmlidXRlID0gJEJhY2tlbmRPYmplY3QtPlN0YXRzQXR0cmlidXRlQ3JlYXRlKAogICAgICAgIEtleSA9PiAnS2V5OjpTdWJrZXknLAogICAgICAgIE5hbWUgPT4gJ05hbWUnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIFN0YXRzQXR0cmlidXRlQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBOYW1lIEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGF0dHJpYnV0ZQogICAgbXkgJEF0dHJpYnV0ZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJFBhcmFte05hbWV9LAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICRQYXJhbXtLZXl9LAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdJbnB1dEZpZWxkJywKICAgICAgICB9LAogICAgXTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZTsKfQoKPWhlYWQyIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1oZWFkMiBFeHBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1oZWFkMiBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgSW1wb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpEYXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkRhdGUgLSB4bWwgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIHhtbCBmdW5jdGlvbnMgb2YgZGF0ZSBvYmplY3RzCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRYTUxUeXBlRGF0ZUJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6RGF0ZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBWYWx1ZUxvb2t1cCgpCgpnZXQgdGhlIGRhdGUgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gJzIwMDctMDMtMjYnLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFZhbHVlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX0gfHwgJyc7Cn0KCj1oZWFkMiBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSgpCgpjcmVhdGUgYSBhdHRyaWJ1dGUgYXJyYXkgZm9yIHRoZSBzdGF0cyBmcmFtZXdvcmsKCiAgICBteSAkQXR0cmlidXRlID0gJEJhY2tlbmRPYmplY3QtPlN0YXRzQXR0cmlidXRlQ3JlYXRlKCk7Cgo9Y3V0CgpzdWIgU3RhdHNBdHRyaWJ1dGVDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IE5hbWUgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYXR0cmlidXRlCiAgICBteSAkQXR0cmlidXRlID0gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgICAgIFRpbWVQZXJpb2RGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ1RpbWUnLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgIFRpbWVTdGFydCA9PiAkUGFyYW17S2V5fSAuICdOZXdlckRhdGUnLAogICAgICAgICAgICAgICAgVGltZVN0b3AgID0+ICRQYXJhbXtLZXl9IC4gJ09sZGVyRGF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIF07CgogICAgcmV0dXJuICRBdHRyaWJ1dGU7Cn0KCj1oZWFkMiBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgRXhwb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEltcG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpEYXRlVGltZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpEYXRlVGltZSAtIHhtbCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgeG1sIGZ1bmN0aW9ucyBvZiBkYXRlIG9iamVjdHMKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFhNTFR5cGVEYXRlVGltZUJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6RGF0ZVRpbWUnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgVmFsdWVMb29rdXAoKQoKZ2V0IHRoZSBkYXRlIHRpbWUgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gJzIwMDctMDMtMjYgMjI6MDEnLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFZhbHVlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX0gfHwgJyc7Cn0KCj1oZWFkMiBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSgpCgpjcmVhdGUgYSBhdHRyaWJ1dGUgYXJyYXkgZm9yIHRoZSBzdGF0cyBmcmFtZXdvcmsKCiAgICBteSAkQXR0cmlidXRlID0gJEJhY2tlbmRPYmplY3QtPlN0YXRzQXR0cmlidXRlQ3JlYXRlKCk7Cgo9Y3V0CgpzdWIgU3RhdHNBdHRyaWJ1dGVDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IE5hbWUgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYXR0cmlidXRlCiAgICBteSAkQXR0cmlidXRlID0gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgICAgIFRpbWVQZXJpb2RGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdUaW1lJywKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUaW1lU3RhcnQgPT4gJFBhcmFte0tleX0gLiAnTmV3ZXJEYXRlJywKICAgICAgICAgICAgICAgIFRpbWVTdG9wICA9PiAkUGFyYW17S2V5fSAuICdPbGRlckRhdGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICBdOwoKICAgIHJldHVybiAkQXR0cmlidXRlOwp9Cgo9aGVhZDIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1oZWFkMiBJbXBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpEdW1teTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKCk7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkR1bW15IC0geG1sIGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCB4bWwgZnVuY3Rpb25zIG9mIGR1bW15IG9iamVjdHMKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFhNTFR5cGVEdW1teUJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6RHVtbXknKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgVmFsdWVMb29rdXAoKQoKZ2V0IHRoZSBkdW1teSBkYXRhIG9mIGEgdmVyc2lvbgoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5WYWx1ZUxvb2t1cCgpOwoKPWN1dAoKc3ViIFZhbHVlTG9va3VwIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICcnOwp9Cgo9aGVhZDIgU3RhdHNBdHRyaWJ1dGVDcmVhdGUoKQoKY3JlYXRlIGEgYXR0cmlidXRlIGFycmF5IGZvciB0aGUgc3RhdHMgZnJhbWV3b3JrCgogICAgbXkgJEF0dHJpYnV0ZSA9ICRCYWNrZW5kT2JqZWN0LT5TdGF0c0F0dHJpYnV0ZUNyZWF0ZSgpOwoKPWN1dAoKc3ViIFN0YXRzQXR0cmlidXRlQ3JlYXRlIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuOwp9Cgo9aGVhZDIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1oZWFkMiBJbXBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpHZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkdlbmVyYWxDYXRhbG9nIC0geG1sIGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCB4bWwgZnVuY3Rpb25zIG9mIGdlbmVyYWwgY2F0YWxvZyBvYmplY3RzCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRYTUxUeXBlR2VuZXJhbENhdGFsb2dCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkdlbmVyYWxDYXRhbG9nJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFZhbHVlTG9va3VwKCkKCmdldCB0aGUgeG1sIGRhdGEgb2YgYSB2ZXJzaW9uCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlZhbHVlTG9va3VwKAogICAgICAgIEl0ZW0gID0+ICRJdGVtUmVmLAogICAgICAgIFZhbHVlID0+IDExLCAgICAgICAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFZhbHVlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiBpZiAhJFBhcmFte1ZhbHVlfTsKCiAgICAjIGdldCBpdGVtIGxpc3QKICAgIG15ICRJdGVtTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntDbGFzc30gfHwgJycsCiAgICApOwoKICAgIHJldHVybiBpZiAhJEl0ZW1MaXN0OwogICAgcmV0dXJuIGlmIHJlZiAkSXRlbUxpc3QgbmUgJ0hBU0gnOwoKICAgIG15ICRWYWx1ZSA9ICRJdGVtTGlzdC0+eyAkUGFyYW17VmFsdWV9IH07CgogICAgcmV0dXJuICRWYWx1ZTsKfQoKPWhlYWQyIFN0YXRzQXR0cmlidXRlQ3JlYXRlKCkKCmNyZWF0ZSBhIGF0dHJpYnV0ZSBhcnJheSBmb3IgdGhlIHN0YXRzIGZyYW1ld29yawoKICAgIG15ICRBdHRyaWJ1dGUgPSAkQmFja2VuZE9iamVjdC0+U3RhdHNBdHRyaWJ1dGVDcmVhdGUoCiAgICAgICAgS2V5ICA9PiAnS2V5OjpTdWJrZXknLAogICAgICAgIE5hbWUgPT4gJ05hbWUnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIFN0YXRzQXR0cmlidXRlQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBOYW1lIEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGl0ZW0gbGlzdAogICAgbXkgJEl0ZW1MaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e0NsYXNzfSB8fCAnJywKICAgICk7CgogICAgIyBjcmVhdGUgYXR0cmlidXRlCiAgICBteSAkQXR0cmlidXRlID0gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+ICRJdGVtTGlzdCB8fCB7fSwKICAgICAgICB9LAogICAgXTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZTsKfQoKPWhlYWQyIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwoKICAgIG15IEBWYWx1ZXMgPSBzcGxpdCAnIyMjIyMnLCAkUGFyYW17VmFsdWV9OwogICAgQFZhbHVlcyA9IGdyZXAgeyRffSBAVmFsdWVzOwoKICAgIHJldHVybiBcQFZhbHVlczsKfQoKPWhlYWQyIEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CgogICAgIyBnZXQgaXRlbSBsaXN0CiAgICBteSAkSXRlbUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57Q2xhc3N9IHx8ICcnLAogICAgKTsKCiAgICByZXR1cm4gJEl0ZW1MaXN0LT57ICRQYXJhbXtWYWx1ZX0gfSB8fCAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLAogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKCiAgICAjIGdldCBpdGVtIGxpc3QKICAgIG15ICRJdGVtTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntDbGFzc30gfHwgJycsCiAgICApOwoKICAgICMgcmV2ZXJzZSB0aGUgbGlzdAogICAgbXkgJU5hbWUySUQgPSByZXZlcnNlICV7JEl0ZW1MaXN0fTsKCiAgICBteSAkR2VuZXJhbENhdGFsb2dJRCA9ICROYW1lMklEeyAkUGFyYW17VmFsdWV9IH07CgogICAgaWYgKCAhJEdlbmVyYWxDYXRhbG9nSUQgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJHZW5lcmFsIGNhdGFsb2cgbG9va3VwIG9mJyRQYXJhbXtWYWx1ZX0nIGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAkR2VuZXJhbENhdGFsb2dJRDsKCn0KCj1oZWFkMiBJbXBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CgogICAgIyBnZXQgaXRlbSBsaXN0CiAgICBteSAkSXRlbUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57Q2xhc3N9IHx8ICcnLAogICAgKTsKCiAgICAjIHJldmVyc2UgdGhlIGxpc3QKICAgIG15ICVOYW1lMklEID0gcmV2ZXJzZSAleyRJdGVtTGlzdH07CgogICAgbXkgJEdlbmVyYWxDYXRhbG9nSUQgPSAkTmFtZTJJRHsgJFBhcmFte1ZhbHVlfSB9OwoKICAgIGlmICggISRHZW5lcmFsQ2F0YWxvZ0lEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiR2VuZXJhbCBjYXRhbG9nIGxvb2t1cCBvZickUGFyYW17VmFsdWV9JyBmYWlsZWQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gJEdlbmVyYWxDYXRhbG9nSUQ7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpJbnRlZ2VyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OkludGVnZXIgLSB4bWwgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIHhtbCBmdW5jdGlvbnMgb2YgaW50ZWdlciBvYmplY3RzCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRYTUxUeXBlSW50ZWdlckJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6SW50ZWdlcicpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBWYWx1ZUxvb2t1cCgpCgpnZXQgdGhlIGludGVnZXIgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gMTEsICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgVmFsdWVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIFN0YXRzQXR0cmlidXRlQ3JlYXRlKCkKCmNyZWF0ZSBhIGF0dHJpYnV0ZSBhcnJheSBmb3IgdGhlIHN0YXRzIGZyYW1ld29yawoKICAgIG15ICRBdHRyaWJ1dGUgPSAkQmFja2VuZE9iamVjdC0+U3RhdHNBdHRyaWJ1dGVDcmVhdGUoKTsKCj1jdXQKCnN1YiBTdGF0c0F0dHJpYnV0ZUNyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgTmFtZSBJdGVtKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkVmFsdWVNaW4gPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZU1pbn0gfHwgMTsKICAgIG15ICRWYWx1ZU1heCA9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlTWF4fSB8fCAxOwoKICAgIG15ICVWYWx1ZXMgPSBtYXAgeyAkXyA9PiAkXyB9ICggJFZhbHVlTWluIC4uICRWYWx1ZU1heCApOwoKICAgICMgY3JlYXRlIGF0dHJpYnV0ZQogICAgbXkgJEF0dHJpYnV0ZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJFBhcmFte05hbWV9LAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICRQYXJhbXtLZXl9LAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdNdWx0aVNlbGVjdEZpZWxkJywKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiBcJVZhbHVlcywKICAgICAgICAgICAgU29ydCAgICAgICAgICAgICA9PiAnTnVtZXJpY0tleScsCiAgICAgICAgfSwKICAgIF07CgogICAgcmV0dXJuICRBdHRyaWJ1dGU7Cn0KCj1oZWFkMiBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgRXhwb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgdmFsdWUgZm9yIGV4cG9ydAoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5FeHBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEltcG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBpbXBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+SW1wb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpUZXh0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OlRleHQgLSB4bWwgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIHhtbCBmdW5jdGlvbnMgb2YgdGV4dCBvYmplY3RzCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRYTUxUeXBlVGV4dEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW06OlhNTDo6VHlwZTo6VGV4dCcpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBWYWx1ZUxvb2t1cCgpCgpnZXQgdGhlIHRleHQgZGF0YSBvZiBhIHZlcnNpb24KCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVMb29rdXAoCiAgICAgICAgVmFsdWUgPT4gMTEsICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgVmFsdWVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIFN0YXRzQXR0cmlidXRlQ3JlYXRlKCkKCmNyZWF0ZSBhIGF0dHJpYnV0ZSBhcnJheSBmb3IgdGhlIHN0YXRzIGZyYW1ld29yawoKICAgIG15ICRBdHRyaWJ1dGUgPSAkQmFja2VuZE9iamVjdC0+U3RhdHNBdHRyaWJ1dGVDcmVhdGUoCiAgICAgICAgS2V5ICA9PiAnS2V5OjpTdWJrZXknLAogICAgICAgIE5hbWUgPT4gJ05hbWUnLAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIFN0YXRzQXR0cmlidXRlQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBOYW1lIEl0ZW0pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGF0dHJpYnV0ZQogICAgbXkgJEF0dHJpYnV0ZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJFBhcmFte05hbWV9LAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICRQYXJhbXtLZXl9LAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdJbnB1dEZpZWxkJywKICAgICAgICB9LAogICAgXTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZTsKfQoKPWhlYWQyIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1oZWFkMiBFeHBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgZXhwb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkV4cG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1oZWFkMiBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSBzZWFyY2ggdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRBcnJheVJlZiA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRTZWFyY2hWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgSW1wb3J0VmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgdmFsdWUgZm9yIGltcG9ydAoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5JbXBvcnRWYWx1ZVByZXBhcmUoCiAgICAgICAgVmFsdWUgPT4gMTEsICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRWYWx1ZVByZXBhcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpUZXh0QXJlYTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbTo6WE1MOjpUeXBlOjpUZXh0QXJlYSAtIHhtbCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgeG1sIGZ1bmN0aW9ucyBvZiB0ZXh0YXJlYSBvYmplY3RzCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRYTUxUeXBlVGV4dEFyZWFCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtOjpYTUw6OlR5cGU6OlRleHRBcmVhJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFZhbHVlTG9va3VwKCkKCmdldCB0aGUgdGV4dCBkYXRhIG9mIGEgdmVyc2lvbgoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5WYWx1ZUxvb2t1cCgKICAgICAgICBWYWx1ZSA9PiAxMSwgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBWYWx1ZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9Owp9Cgo9aGVhZDIgU3RhdHNBdHRyaWJ1dGVDcmVhdGUoKQoKY3JlYXRlIGEgYXR0cmlidXRlIGFycmF5IGZvciB0aGUgc3RhdHMgZnJhbWV3b3JrCgogICAgbXkgJEF0dHJpYnV0ZSA9ICRCYWNrZW5kT2JqZWN0LT5TdGF0c0F0dHJpYnV0ZUNyZWF0ZSgKICAgICAgICBLZXkgID0+ICdLZXk6OlN1YmtleScsCiAgICAgICAgTmFtZSA9PiAnTmFtZScsCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgU3RhdHNBdHRyaWJ1dGVDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IE5hbWUgSXRlbSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYXR0cmlidXRlCiAgICBteSAkQXR0cmlidXRlID0gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMCwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAwLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ0lucHV0RmllbGQnLAogICAgICAgIH0sCiAgICBdOwoKICAgIHJldHVybiAkQXR0cmlidXRlOwp9Cgo9aGVhZDIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKCkKCnByZXBhcmUgc2VhcmNoIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkQXJyYXlSZWYgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0U2VhcmNoVmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEV4cG9ydFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHZhbHVlIGZvciBleHBvcnQKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+RXhwb3J0VmFsdWVQcmVwYXJlKAogICAgICAgIFZhbHVlID0+IDExLCAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRXhwb3J0VmFsdWVQcmVwYXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZX07CiAgICByZXR1cm4gJFBhcmFte1ZhbHVlfTsKfQoKPWhlYWQyIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgpCgpwcmVwYXJlIHNlYXJjaCB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJEFycmF5UmVmID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFNlYXJjaFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCj1oZWFkMiBJbXBvcnRWYWx1ZVByZXBhcmUoKQoKcHJlcGFyZSB2YWx1ZSBmb3IgaW1wb3J0CgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkltcG9ydFZhbHVlUHJlcGFyZSgKICAgICAgICBWYWx1ZSA9PiAxMSwgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydFZhbHVlUHJlcGFyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpJVFNNQ29uZmlnSXRlbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OklUU01Db25maWdJdGVtIC0gTGlua09iamVjdCBtb2R1bGUgZm9yIElUU01Db25maWdJdGVtCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJExpbmtPYmplY3RJVFNNQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpJVFNNQ29uZmlnSXRlbScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBMaW5rTGlzdFdpdGhEYXRhKCkKCmZpbGwgdXAgdGhlIGxpbmsgbGlzdCB3aXRoIGRhdGEKCiAgICAkU3VjY2VzcyA9ICRMaW5rT2JqZWN0QmFja2VuZC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICBMaW5rTGlzdCA9PiAkSGFzaFJlZiwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rTGlzdFdpdGhEYXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KExpbmtMaXN0IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBsaW5rIGxpc3QKICAgIGlmICggcmVmICRQYXJhbXtMaW5rTGlzdH0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTGlua0xpc3QgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9IH0gKSB7CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9IH0gKSB7CgogICAgICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBsYXN0IHZlcnNpb24gZGF0YQogICAgICAgICAgICAgICAgbXkgJFZlcnNpb25EYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPlZlcnNpb25HZXQoCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YUdldCAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBpZCBmcm9tIGhhc2ggaWYgY29uZmlnIGl0ZW0gY2FuIG5vdCBnZXQKICAgICAgICAgICAgICAgIGlmICggISRWZXJzaW9uRGF0YSB8fCByZWYgJFZlcnNpb25EYXRhIG5lICdIQVNIJyB8fCAhJXskVmVyc2lvbkRhdGF9ICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259LT57JENvbmZpZ0l0ZW1JRH07CiAgICAgICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhZGQgdmVyc2lvbiBkYXRhCiAgICAgICAgICAgICAgICAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259LT57JENvbmZpZ0l0ZW1JRH0gPSAkVmVyc2lvbkRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBPYmplY3RQZXJtaXNzaW9uKCkKCmNoZWNrcyByZWFkIHBlcm1pc3Npb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IGFuZCBVc2VySUQuCgogICAgJFBlcm1pc3Npb24gPSAkTGlua09iamVjdC0+T2JqZWN0UGVybWlzc2lvbigKICAgICAgICBPYmplY3QgID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjb25maWcgb2YgY29uZmlnaXRlbSB6b29tIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tJyk7CgogICAgIyBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cwogICAgbXkgJEFjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5QZXJtaXNzaW9uKAogICAgICAgIFNjb3BlICA9PiAnSXRlbScsCiAgICAgICAgSXRlbUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICApOwoKICAgIHJldHVybiAkQWNjZXNzOwp9Cgo9aGVhZDIgT2JqZWN0RGVzY3JpcHRpb25HZXQoKQoKcmV0dXJuIGEgaGFzaCBvZiBvYmplY3QgZGVzY3JpcHRpb25zCgpSZXR1cm4KICAgICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gIkNvbmZpZ0l0ZW0jIDEyMzQ0NTUiLAogICAgICAgIExvbmcgICA9PiAiQ29uZmlnSXRlbSMgMTIzNDQ1NTogVGhlIENvbmZpZyBJdGVtIFRpdGxlIiwKICAgICk7CgogICAgJURlc2NyaXB0aW9uID0gJExpbmtPYmplY3QtPk9iamVjdERlc2NyaXB0aW9uR2V0KAogICAgICAgIEtleSAgICAgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0RGVzY3JpcHRpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0IEtleSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICBteSAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICdDb25maWdJdGVtJywKICAgICAgICBMb25nICAgPT4gJ0NvbmZpZ0l0ZW0nLAogICAgKTsKCiAgICByZXR1cm4gJURlc2NyaXB0aW9uIGlmICRQYXJhbXtNb2RlfSAmJiAkUGFyYW17TW9kZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgIyBnZXQgbGFzdCB2ZXJzaW9uIGRhdGEKICAgIG15ICRWZXJzaW9uRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17S2V5fSwKICAgICAgICBYTUxEYXRhR2V0ICAgPT4gMCwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJFZlcnNpb25EYXRhOwogICAgcmV0dXJuIGlmIHJlZiAkVmVyc2lvbkRhdGEgbmUgJ0hBU0gnOwogICAgcmV0dXJuIGlmICEleyRWZXJzaW9uRGF0YX07CgogICAgIyBjcmVhdGUgZGVzY3JpcHRpb24KICAgICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gIkNvbmZpZ0l0ZW0jICRWZXJzaW9uRGF0YS0+e051bWJlcn0iLAogICAgICAgIExvbmcgICA9PiAiQ29uZmlnSXRlbSMgJFZlcnNpb25EYXRhLT57TnVtYmVyfTogJFZlcnNpb25EYXRhLT57TmFtZX0iLAogICAgKTsKCiAgICByZXR1cm4gJURlc2NyaXB0aW9uOwp9Cgo9aGVhZDIgT2JqZWN0U2VhcmNoKCkKCnJldHVybiBhIGhhc2ggbGlzdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHMKClJldHVybgogICAgJFNlYXJjaExpc3QgPSB7CiAgICAgICAgQzxOT1RMSU5LRUQ+ID0+IHsKICAgICAgICAgICAgU291cmNlID0+IHsKICAgICAgICAgICAgICAgIDEyICA9PiAkRGF0YU9mSXRlbTEyLAogICAgICAgICAgICAgICAgMjEyID0+ICREYXRhT2ZJdGVtMjEyLAogICAgICAgICAgICAgICAgMzMyID0+ICREYXRhT2ZJdGVtMzMyLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9OwoKICAgICRTZWFyY2hMaXN0ID0gJExpbmtPYmplY3RCYWNrZW5kLT5PYmplY3RTZWFyY2goCiAgICAgICAgU3ViT2JqZWN0ICAgID0+ICcyNScsICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBTZWFyY2hQYXJhbXMgPT4gJEhhc2hSZWYsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgcGFyYW1zCiAgICAkUGFyYW17U2VhcmNoUGFyYW1zfSB8fD0ge307CgogICAgIyBzZXQgZm9jdXMKICAgIG15ICVTZWFyY2g7CiAgICBmb3IgbXkgJEVsZW1lbnQgKHF3KE51bWJlciBOYW1lKSkgewogICAgICAgIGlmICggJFBhcmFte1NlYXJjaFBhcmFtc30tPnskRWxlbWVudH0gKSB7CiAgICAgICAgICAgICRTZWFyY2h7JEVsZW1lbnR9ID0gJyonIC4gJFBhcmFte1NlYXJjaFBhcmFtc30tPnskRWxlbWVudH0gLiAnKic7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRQYXJhbXtTdWJPYmplY3R9ICkgewoKICAgICAgICAjIGdldCB0aGUgY29uZmlnIHdpdGggdGhlIGRlZmF1bHQgc3Vib2JqZWN0cwogICAgICAgIG15ICREZWZhdWx0U3Vib2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdMaW5rT2JqZWN0OjpEZWZhdWx0U3ViT2JqZWN0JykgfHwge307CgogICAgICAgICMgZXh0cmFjdCBkZWZhdWx0IGNsYXNzIG5hbWUKICAgICAgICBteSAkRGVmYXVsdENsYXNzID0gJERlZmF1bHRTdWJvYmplY3QtPntJVFNNQ29uZmlnSXRlbX0gfHwgJyc7CgogICAgICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgICAgICBteSAkQ2xhc3NMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICk7CgogICAgICAgIHJldHVybiBpZiAhJENsYXNzTGlzdDsKICAgICAgICByZXR1cm4gaWYgcmVmICRDbGFzc0xpc3QgbmUgJ0hBU0gnOwoKICAgICAgICAjIGxvb2t1cCB0aGUgY2xhc3MgaWQKICAgICAgICBteSAlQ2xhc3NMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskQ2xhc3NMaXN0fTsKICAgICAgICAkUGFyYW17U3ViT2JqZWN0fSA9ICRDbGFzc0xpc3RSZXZlcnNleyREZWZhdWx0Q2xhc3N9IHx8ICcnOwogICAgfQoKICAgIHJldHVybiBpZiAhJFBhcmFte1N1Yk9iamVjdH07CgogICAgIyBzZWFyY2ggdGhlIGNvbmZpZyBpdGVtcwogICAgbXkgJENvbmZpZ0l0ZW1JRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKAogICAgICAgICV7ICRQYXJhbXtTZWFyY2hQYXJhbXN9IH0sCiAgICAgICAgJVNlYXJjaCwKICAgICAgICBDbGFzc0lEcyAgICAgICAgICAgICAgPT4gWyAkUGFyYW17U3ViT2JqZWN0fSBdLAogICAgICAgIFByZXZpb3VzVmVyc2lvblNlYXJjaCA9PiAwLAogICAgICAgIFVzaW5nV2lsZGNhcmRzICAgICAgICA9PiAxLAogICAgICAgIE9yZGVyQnkgICAgICAgICAgICAgICA9PiBbJ051bWJlciddLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gICAgICA9PiBbJ1VwJ10sCiAgICAgICAgTGltaXQgICAgICAgICAgICAgICAgID0+IDUwLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJVNlYXJjaExpc3Q7CiAgICBDT05GSUdJVEVNSUQ6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIEB7JENvbmZpZ0l0ZW1JRHN9ICkgewoKICAgICAgICAjIGdldCBsYXN0IHZlcnNpb24gZGF0YQogICAgICAgIG15ICRWZXJzaW9uRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5WZXJzaW9uR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgWE1MRGF0YUdldCAgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAhJFZlcnNpb25EYXRhOwogICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmIHJlZiAkVmVyc2lvbkRhdGEgbmUgJ0hBU0gnOwogICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICEleyRWZXJzaW9uRGF0YX07CgogICAgICAgICMgYWRkIHZlcnNpb24gZGF0YQogICAgICAgICRTZWFyY2hMaXN0e05PVExJTktFRH0tPntTb3VyY2V9LT57JENvbmZpZ0l0ZW1JRH0gPSAkVmVyc2lvbkRhdGE7CiAgICB9CgogICAgcmV0dXJuIFwlU2VhcmNoTGlzdDsKfQoKPWhlYWQyIExpbmtBZGRQcmUoKQoKbGluayBhZGQgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtBZGRQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRvIG5vdCB0cmlnZ2VyIGV2ZW50IGZvciB0ZW1wb3JhcnkgbGlua3MKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBMaW5rQWRkUG9zdCgpCgpsaW5rIGFkZCBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rQWRkUG9zdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHRyaWdnZXIgZXZlbnQgZm9yIHRlbXBvcmFyeSBsaW5rcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIGdldCBpbmZvcm1hdGlvbiBhYm91dCBsaW5rZWQgb2JqZWN0CiAgICBteSAkSUQgICAgID0gJFBhcmFte1RhcmdldEtleX0gICAgfHwgJFBhcmFte1NvdXJjZUtleX07CiAgICBteSAkT2JqZWN0ID0gJFBhcmFte1RhcmdldE9iamVjdH0gfHwgJFBhcmFte1NvdXJjZU9iamVjdH07CgogICAgIyByZWNhbGN1bGF0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIENJCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q3VySW5jaVN0YXRlUmVjYWxjKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17S2V5fSwKICAgICk7CgogICAgIyB0cmlnZ2VyIExpbmtBZGQgZXZlbnQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0xpbmtBZGQnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJElEIC4gJyUlJyAuICRPYmplY3QsCiAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgTGlua0RlbGV0ZVByZSgpCgpsaW5rIGRlbGV0ZSBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0RlbGV0ZVByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0RlbGV0ZVByZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHRyaWdnZXIgZXZlbnQgZm9yIHRlbXBvcmFyeSBsaW5rcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIExpbmtEZWxldGVQb3N0KCkKCmxpbmsgZGVsZXRlIHBvc3QgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0RlbGV0ZVBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rRGVsZXRlUG9zdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHRyaWdnZXIgZXZlbnQgZm9yIHRlbXBvcmFyeSBsaW5rcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIGdldCBpbmZvcm1hdGlvbiBhYm91dCBsaW5rZWQgb2JqZWN0CiAgICBteSAkSUQgICAgID0gJFBhcmFte1RhcmdldEtleX0gICAgfHwgJFBhcmFte1NvdXJjZUtleX07CiAgICBteSAkT2JqZWN0ID0gJFBhcmFte1RhcmdldE9iamVjdH0gfHwgJFBhcmFte1NvdXJjZU9iamVjdH07CgogICAgIyByZWNhbGN1bGF0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiB0aGlzIENJCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q3VySW5jaVN0YXRlUmVjYWxjKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkUGFyYW17S2V5fSwKICAgICk7CgogICAgIyB0cmlnZ2VyIExpbmtEZWxldGUgZXZlbnQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0xpbmtEZWxldGUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJElEIC4gJyUlJyAuICRPYmplY3QsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBvdHJzIC0gYjljZjI5ZWRlNDg4YmJjM2JmNWJkMGQ0OWY0MjJlY2M2NTY2OGEwYyAtIEtlcm5lbC9TeXN0ZW0vU2VydmljZS9QcmVmZXJlbmNlc0RCLnBtCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOjpQcmVmZXJlbmNlc0RCOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ1NlcnZpY2VQcmVmZXJlbmNlc0RCJzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAyNCAqIDIwOwoKICAgICMgcHJlZmVyZW5jZXMgdGFibGUgZGF0YQogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSAgICAgICAgICA9ICdzZXJ2aWNlX3ByZWZlcmVuY2VzJzsKICAgICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUtleX0gICAgICAgPSAncHJlZmVyZW5jZXNfa2V5JzsKICAgICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZVZhbHVlfSAgICAgPSAncHJlZmVyZW5jZXNfdmFsdWUnOwogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlU2VydmljZUlEfSA9ICdzZXJ2aWNlX2lkJzsKCiAgICAjIGNyZWF0ZSBjYWNoZSBwcmVmaXgKICAgICRTZWxmLT57Q2FjaGVQcmVmaXh9ID0gJ1NlcnZpY2VQcmVmZXJlbmNlc0RCJwogICAgICAgIC4gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfQogICAgICAgIC4gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fQogICAgICAgIC4gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9CiAgICAgICAgLiAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVTZXJ2aWNlSUR9OwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFNlcnZpY2VQcmVmZXJlbmNlc1NldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgKHF3KFNlcnZpY2VJRCBLZXkgVmFsdWUpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JF99ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkXyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBkZWxldGUgb2xkIGRhdGEKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZX0gV0hFUkUgIgogICAgICAgICAgICAuICIkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVTZXJ2aWNlSUR9ID0gPyBBTkQgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSA9ID8iLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1NlcnZpY2VJRH0sIFwkUGFyYW17S2V5fSBdLAogICAgKTsKCiAgICAjIGluc2VydCBuZXcgZGF0YQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSAoJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlU2VydmljZUlEfSwgIgogICAgICAgICAgICAuICIgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSwgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9KSAiCiAgICAgICAgICAgIC4gIiBWQUxVRVMgKD8sID8sID8pIiwKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0tleX0sIFwkUGFyYW17VmFsdWV9IF0sCiAgICApOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJFNlbGYtPntDYWNoZVByZWZpeH0gLiAkUGFyYW17U2VydmljZUlEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBTZXJ2aWNlUHJlZmVyZW5jZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIChxdyhTZXJ2aWNlSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRffSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJF8hIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQojIC0tLQojIElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudAojIC0tLQojCiMgICAgIyBjaGVjayBpZiBzZXJ2aWNlIHByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUKIyAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2VydmljZVByZWZlcmVuY2VzJyk7CiMgLS0tCgogICAgIyByZWFkIGNhY2hlCiAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJFNlbGYtPntDYWNoZVByZWZpeH0gLiAkUGFyYW17U2VydmljZUlEfSwKICAgICk7CiAgICByZXR1cm4gJXskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBwcmVmZXJlbmNlcwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSwgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9ICIKICAgICAgICAgICAgLiAiIEZST00gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSBXSEVSRSAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVTZXJ2aWNlSUR9ID0gPyIsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREYXRheyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0NhY2hlUHJlZml4fSAuICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICk7CgogICAgcmV0dXJuICVEYXRhOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6SVRTTUNvbmZpZ0l0ZW07Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgR2V0T2JqZWN0TmFtZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIHJldHVybiAnSVRTTUNvbmZpZ0l0ZW0nOwp9CgpzdWIgR2V0T2JqZWN0QmVoYXZpb3VycyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVCZWhhdmlvdXJzID0gKAogICAgICAgIFByb3ZpZGVzRGFzaGJvYXJkV2lkZ2V0ID0+IDEsCiAgICApOwoKICAgIHJldHVybiAlQmVoYXZpb3VyczsKfQoKc3ViIEdldE9iamVjdEF0dHJpYnV0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKICAgIG15ICRJbmNpU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICk7CgogICAgIyBnZXQgY3VycmVudCB0aW1lIHRvIGZpeCBidWcjMzgzMAogICAgbXkgJFRpbWVTdGFtcCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub1N0cmluZygpOwoKICAgICMgY3JlYXRlIG9iamVjdCBhdHRyaWJ1dGUgYXJyYXkKICAgIG15IEBPYmplY3RBdHRyaWJ1dGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiAgICA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgICAgID0+ICdDbGFzc0lEcycsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgICAgPT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgICAgICAgICBMYW5ndWFnZVRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgICAgPT4gJENsYXNzTGlzdCwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnRGVwbG95bWVudCBTdGF0ZScsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ0RlcGxTdGF0ZUlEcycsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+ICREZXBsU3RhdGVMaXN0LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdJbmNpZGVudCBTdGF0ZScsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ0luY2lTdGF0ZUlEcycsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+ICRJbmNpU3RhdGVMaXN0LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDAsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMCwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdJbnB1dEZpZWxkJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMCwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAwLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdJbnB1dEZpZWxkJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnQ3JlYXRlIFRpbWUnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdDcmVhdGVUaW1lJywKICAgICAgICAgICAgVGltZVBlcmlvZEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0JywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnVGltZScsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgVGltZVN0YXJ0ID0+ICdDb25maWdJdGVtQ3JlYXRlVGltZU5ld2VyRGF0ZScsCiAgICAgICAgICAgICAgICBUaW1lU3RvcCAgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGVUaW1lT2xkZXJEYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnQ2hhbmdlIFRpbWUnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdDaGFuZ2VUaW1lJywKICAgICAgICAgICAgVGltZVBlcmlvZEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0JywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnVGltZScsCiAgICAgICAgICAgIFRpbWVTdG9wICAgICAgICAgPT4gJFRpbWVTdGFtcCwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUaW1lU3RhcnQgPT4gJ0NvbmZpZ0l0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlJywKICAgICAgICAgICAgICAgIFRpbWVTdG9wICA9PiAnQ29uZmlnSXRlbUNoYW5nZVRpbWVPbGRlckRhdGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIHRoZSB4bWwgZGF0YQogICAgQ0xBU1NJRDoKICAgIGZvciBteSAkQ2xhc3NJRCAoIHNvcnQga2V5cyAleyRDbGFzc0xpc3R9ICkgewoKICAgICAgICAjIGdldCB4bWwgZGVmaW5pdGlvbiBoYXNoCiAgICAgICAgbXkgJFhNTERlZmluaXRpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+RGVmaW5pdGlvbkdldCgKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICApOwoKICAgICAgICBuZXh0IENMQVNTSUQgaWYgISRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvbklEfTsKCiAgICAgICAgJFNlbGYtPl9YTUxBdHRyaWJ1dGVBZGQoCiAgICAgICAgICAgIE9iamVjdEF0dHJpYnV0ZXMgPT4gXEBPYmplY3RBdHRyaWJ1dGVzLAogICAgICAgICAgICBYTUxEZWZpbml0aW9uICAgID0+ICRYTUxEZWZpbml0aW9uLT57RGVmaW5pdGlvblJlZn0sCiAgICAgICAgICAgIFByZWZpeCAgICAgICAgICAgPT4gJ1hNTDo6JyAuICRDbGFzc0lELAogICAgICAgICAgICBQcmVmaXhOYW1lICAgICAgID0+ICRDbGFzc0xpc3QtPnskQ2xhc3NJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gQE9iamVjdEF0dHJpYnV0ZXM7Cn0KCnN1YiBfWE1MQXR0cmlidXRlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICEkUGFyYW17T2JqZWN0QXR0cmlidXRlc307CiAgICByZXR1cm4gaWYgISRQYXJhbXtYTUxEZWZpbml0aW9ufTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1hNTERlZmluaXRpb259IG5lICdBUlJBWSc7CgogICAgaWYgKCAkUGFyYW17UHJlZml4fSApIHsKICAgICAgICAkUGFyYW17UHJlZml4fSAuPSAnOjonOwogICAgfQogICAgaWYgKCAkUGFyYW17UHJlZml4TmFtZX0gKSB7CiAgICAgICAgJFBhcmFte1ByZWZpeE5hbWV9IC49ICc6Oic7CiAgICB9CgogICAgJFBhcmFte0xldmVsfSAgICAgIHx8PSAwOwogICAgJFBhcmFte1ByZWZpeH0gICAgIHx8PSAnJzsKICAgICRQYXJhbXtQcmVmaXhOYW1lfSB8fD0gJyc7CgogICAgSVRFTToKICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtYTUxEZWZpbml0aW9ufSB9ICkgewoKICAgICAgICBuZXh0IElURU0gaWYgISRJdGVtLT57U2VhcmNoYWJsZX0gJiYgISRJdGVtLT57U3VifTsKCiAgICAgICAgIyBjcmVhdGUga2V5IGFuZCBuYW1lCiAgICAgICAgbXkgJEtleSAgPSAkUGFyYW17UHJlZml4fSAuICRJdGVtLT57S2V5fTsKICAgICAgICBteSAkTmFtZSA9ICRQYXJhbXtQcmVmaXhOYW1lfSAuICRJdGVtLT57TmFtZX07CgogICAgICAgICMgYWRkIGF0dHJpYnV0ZQogICAgICAgIG15ICRBdHRyaWJ1dGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+WE1MU3RhdHNBdHRyaWJ1dGVDcmVhdGUoCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICAgICAgSXRlbSA9PiAkSXRlbSwKICAgICAgICAgICAgTmFtZSA9PiAkTmFtZSwKICAgICAgICApOwoKICAgICAgICBuZXh0IElURU0gaWYgISRBdHRyaWJ1dGU7CiAgICAgICAgbmV4dCBJVEVNIGlmIHJlZiAkQXR0cmlidXRlIG5lICdBUlJBWSc7CiAgICAgICAgbmV4dCBJVEVNIGlmICFzY2FsYXIgQHskQXR0cmlidXRlfTsKCiAgICAgICAgIyBhZGQgYXR0cmlidXRlcyB0byBvYmplY3QgYXJyYXkKICAgICAgICBwdXNoIEB7ICRQYXJhbXtPYmplY3RBdHRyaWJ1dGVzfSB9LCBAeyRBdHRyaWJ1dGV9OwoKICAgICAgICBuZXh0IElURU0gaWYgISRJdGVtLT57U3VifTsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24sIGlmICJTdWIiIHdhcyBmb3VuZAogICAgICAgICRTZWxmLT5fWE1MQXR0cmlidXRlQWRkKAogICAgICAgICAgICBPYmplY3RBdHRyaWJ1dGVzID0+ICRQYXJhbXtPYmplY3RBdHRyaWJ1dGVzfSwKICAgICAgICAgICAgWE1MRGVmaW5pdGlvbiAgICA9PiAkSXRlbS0+e1N1Yn0sCiAgICAgICAgICAgIExldmVsICAgICAgICAgICAgPT4gJFBhcmFte0xldmVsfSArIDEsCiAgICAgICAgICAgIFByZWZpeCAgICAgICAgICAgPT4gJEtleSwKICAgICAgICAgICAgUHJlZml4TmFtZSAgICAgICA9PiAkTmFtZSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgR2V0U3RhdEVsZW1lbnRQcmV2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICggaW50IHJhbmQgNTAwICkgKyAxOwp9CgpzdWIgR2V0U3RhdEVsZW1lbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCBsaW1pdAogICAgJFBhcmFte0xpbWl0fSA9IDFfMDAwXzAwMDsKCiAgICAjIGV4dHJhY3QgYWxsIHhtbCBwYXJhbSBrZXlzIGZyb20gdGhlIHBhcmFtIGhhc2gKICAgIG15IEBYTUxQYXJhbXMgPSBncmVwIHsgJF8gPX4gbXtcQSBYTUw6On14bXMgfSBzb3J0IGtleXMgJVBhcmFtOwoKICAgIGlmIChAWE1MUGFyYW1zKSB7CiAgICAgICAgcmV0dXJuICdZb3UgbXVzdCBkZWZpbmUgYSBjbGFzcyBpbiBvbmUgYXhpcy4nIGlmICEkUGFyYW17Q2xhc3NJRHN9OwogICAgICAgIHJldHVybiAnWW91IG11c3QgZGVmaW5lIGEgY2xhc3MgaW4gb25lIGF4aXMuJyBpZiByZWYgJFBhcmFte0NsYXNzSURzfSBuZSAnQVJSQVknOwogICAgfQoKICAgICMgdG8gY29sbGVjdCBkYXRlIGZpZWxkcyBzZXBhcmF0ZWx5CiAgICBteSAlWE1MUGFyYW1zRGF0ZUZpZWxkczsKCiAgICBteSAlWE1MQ2xhc3NJRHM7CiAgICBQQVJBTUtFWToKICAgIGZvciBteSAkUGFyYW1LZXkgKEBYTUxQYXJhbXMpIHsKCiAgICAgICAgIyBleHRyYWN0IHNlYXJjaCB2YWx1ZXMKICAgICAgICBteSAkU2VhcmNoVmFsdWVzID0gJFBhcmFteyRQYXJhbUtleX07CgogICAgICAgICMgcHJlcGFyZSBwYXJhbSB2YWx1ZQogICAgICAgIGlmICggIXJlZiAkU2VhcmNoVmFsdWVzICkgewogICAgICAgICAgICAkU2VhcmNoVmFsdWVzID0gWyRTZWFyY2hWYWx1ZXNdOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBQQVJBTUtFWSBpZiAhQHskU2VhcmNoVmFsdWVzfTsKCiAgICAgICAgIyBzcGxpdCBwYXJhbSBrZXkKICAgICAgICBteSAoICRDbGFzc0lELCAkU2VhcmNoS2V5ICkgPSAkUGFyYW1LZXkgPX4gbXsgXEEgWE1MOjogKCBcZCsgKSA6OiAoLispIFx6IH14bXM7CgogICAgICAgICMgcHJlcGFyZSBzZWFyY2gga2V5CiAgICAgICAgJFNlYXJjaEtleSA9fiBzWyA6OiBdWyd9WyVdeyddeG1zZzsKCiAgICAgICAgIyBBZGQgY2xhc3MgaWQgdG8geG1sIGNsYXNzIGlkIGhhc2gKICAgICAgICAkWE1MQ2xhc3NJRHN7JENsYXNzSUR9ID0gMTsKCiAgICAgICAgIyBjb2xsZWN0IGRhdGUgZmllbGRzIHNlcGFyYXRlbHkgKGUuZyBXYXJyYW50eUV4cGlyYXRpb25EYXRlTmV3ZXJEYXRlKQogICAgICAgIGlmICggJFNlYXJjaEtleSA9fiBteyAoLispICggTmV3ZXJEYXRlIHwgT2xkZXJEYXRlICkgXHogfXhtcyApIHsKICAgICAgICAgICAgJFhNTFBhcmFtc0RhdGVGaWVsZHN7JDF9LT57JDJ9ID0gJFNlYXJjaFZhbHVlcy0+WzBdOwoKICAgICAgICAgICAgbmV4dCBQQVJBTUtFWTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHNlYXJjaCBoYXNoCiAgICAgICAgbXkgJFNlYXJjaEhhc2ggPSB7CiAgICAgICAgICAgICdbMV17XCdWZXJzaW9uXCd9WzFde1wnJyAuICRTZWFyY2hLZXkgLiAnXCd9WyVde1wnQ29udGVudFwnfScgPT4gJFNlYXJjaFZhbHVlcywKICAgICAgICB9OwoKICAgICAgICBwdXNoIEB7ICRQYXJhbXtXaGF0fSB9LCAkU2VhcmNoSGFzaDsKICAgIH0KCiAgICAjIGJ1aWxkIHNlYXJjaCBoYXNoIGZvciBkYXRlIGZpZWxkcwogICAgZm9yIG15ICREYXRlRmllbGROYW1lICggc29ydCBrZXlzICVYTUxQYXJhbXNEYXRlRmllbGRzICkgewoKICAgICAgICBteSAkU2VhcmNoSGFzaCA9IHsKICAgICAgICAgICAgJ1sxXXtcJ1ZlcnNpb25cJ31bMV17XCcnIC4gJERhdGVGaWVsZE5hbWUgLiAnXCd9WyVde1wnQ29udGVudFwnfScgPT4gewogICAgICAgICAgICAgICAgJy1iZXR3ZWVuJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJFhNTFBhcmFtc0RhdGVGaWVsZHN7JERhdGVGaWVsZE5hbWV9LT57TmV3ZXJEYXRlfSwKICAgICAgICAgICAgICAgICAgICAkWE1MUGFyYW1zRGF0ZUZpZWxkc3skRGF0ZUZpZWxkTmFtZX0tPntPbGRlckRhdGV9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9OwoKICAgICAgICBwdXNoIEB7ICRQYXJhbXtXaGF0fSB9LCAkU2VhcmNoSGFzaDsKICAgIH0KCiAgICBpZiAoJVhNTENsYXNzSURzKSB7CiAgICAgICAgbXkgQEV4aXN0cyA9IGdyZXAgeyAkWE1MQ2xhc3NJRHN7JF99IH0gQHsgJFBhcmFte0NsYXNzSURzfSB9OwoKICAgICAgICByZXR1cm4gMCBpZiAhQEV4aXN0czsKICAgIH0KCiAgICAjIHN0YXJ0IGNvbmZpZyBpdGVtIGV4dGVuZGVkIHNlYXJjaAogICAgbXkgJENvbmZpZ0l0ZW1JRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCVQYXJhbSk7CgogICAgcmV0dXJuIHNjYWxhciBAeyRDb25maWdJdGVtSURzfTsKfQoKc3ViIEV4cG9ydFdyYXBwZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gXCVQYXJhbTsKfQoKc3ViIEltcG9ydFdyYXBwZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gXCVQYXJhbTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpUaWNrZXRTdGF0dXNMaW5rOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KERhdGEgRXZlbnQgQ29uZmlnKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIHJldHVybiAxIGlmICEkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpTZXRJbmNpZGVudFN0YXRlT25MaW5rJyk7CgogICAgIyBnZXQgdGlja2V0IGlkIGRlcGVuZGluZyBvbiBldmVudAogICAgbXkgJFRpY2tldElEOwogICAgaWYgKCAkUGFyYW17RXZlbnR9IGVxICdMaW5rQWRkJyB8fCAkUGFyYW17RXZlbnR9IGVxICdMaW5rRGVsZXRlJyApIHsKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29uZmlnSXRlbUlEIENvbW1lbnQpKSB7CiAgICAgICAgICAgIGlmICggISRQYXJhbXtEYXRhfS0+eyROZWVkZWR9ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkIGluIERhdGEhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnTGlua0FkZCcgKSB7CiAgICAgICAgICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1R5cGV9ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBUeXBlIGluIERhdGEhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgbGluayBldmVudCBjb25jZXJucyBhIHRpY2tldAogICAgICAgIHJldHVybiAxIGlmICRQYXJhbXtEYXRhfS0+e0NvbW1lbnR9ICF+IG17IFxBICggXGQrICkgJSVUaWNrZXQgXHogfXhtczsKICAgICAgICAkVGlja2V0SUQgPSAkMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVGlja2V0SUQgaW4gRGF0YSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICRUaWNrZXRJRCA9ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfTsKICAgIH0KCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJVRpY2tldCAgICAgICA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CiAgICByZXR1cm4gMSBpZiAhJVRpY2tldDsKCiAgICAjIGNoZWNrIGlmIHRpY2tldCB0eXBlIGlzIHJlbGV2YW50IChvcHRpb25hbCBmdW5jdGlvbmFsaXR5KQogICAgbXkgJE9sZFRpY2tldFR5cGVSZWxldmFudDsKICAgIG15ICROZXdUaWNrZXRUeXBlUmVsZXZhbnQ7CiAgICBteSAkVGlja2V0VHlwZXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpMaW5rU3RhdHVzOjpUaWNrZXRUeXBlcycpOwogICAgaWYgKCAkUGFyYW17RXZlbnR9IGVxICdUaWNrZXRUeXBlVXBkYXRlJyApIHsKCiAgICAgICAgIyB0aWNrZXQgdHlwZXMgYXJlIG5vdCB1c2VkLCBjaGFuZ2VzIGRvbid0IGFmZmVjdCBDSSBpbmNpZGVudCBzdGF0ZXMKICAgICAgICByZXR1cm4gMSBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRUaWNrZXRUeXBlcyk7CgogICAgICAgICMgZGV0ZXJtaW5lIHR5cGUgb2YgdGlja2V0IGJlZm9yZSBsYXN0IHVwZGF0ZQogICAgICAgIG15ICRPbGRUaWNrZXRUeXBlOwogICAgICAgIG15IEBIaXN0b3J5TGluZXMgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBMSU5FOgogICAgICAgIGZvciBteSAkTGluZSAoIHJldmVyc2UgQEhpc3RvcnlMaW5lcyApIHsKICAgICAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lLT57SGlzdG9yeVR5cGV9IG5lICdUeXBlVXBkYXRlJzsKICAgICAgICAgICAgbXkgQENvbW1lbnRQYXJ0cyA9IHNwbGl0ICclJScsICRMaW5lLT57TmFtZX07CiAgICAgICAgICAgICRPbGRUaWNrZXRUeXBlID0gJENvbW1lbnRQYXJ0c1szXTsKICAgICAgICAgICAgbGFzdCBMSU5FOwogICAgICAgIH0KICAgICAgICBpZiAoICEkT2xkVGlja2V0VHlwZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZvdW5kIG5vIHByZXZpb3VzIHRpY2tldCB0eXBlIGZvciB0aWNrZXQgaWQgJFRpY2tldElEISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgb25seSBjaGFuZ2VzIHJlbGV2YW50LT5pcnJlbGV2YW50IGFuZCBpcnJlbGV2YW50LT5yZWxldmFudCBhcmUgb2YgaW50ZXJlc3QKICAgICAgICAkT2xkVGlja2V0VHlwZVJlbGV2YW50ID0gMSBpZiBncmVwIHsgJF8gZXEgJE9sZFRpY2tldFR5cGUgfSBAeyRUaWNrZXRUeXBlc307CiAgICAgICAgJE5ld1RpY2tldFR5cGVSZWxldmFudCA9IDEgaWYgZ3JlcCB7ICRfIGVxICRUaWNrZXR7VHlwZX0gfSBAeyRUaWNrZXRUeXBlc307CiAgICAgICAgcmV0dXJuIDEgaWYgKCAkT2xkVGlja2V0VHlwZVJlbGV2YW50IHx8ICcnICkgZXEgKCAkTmV3VGlja2V0VHlwZVJlbGV2YW50IHx8ICcnICk7CiAgICB9CgogICAgIyBzaG9ydGN1dCBmb3Igb3RoZXIgZXZlbnRzIChjaGVjayBpZiB0aWNrZXQgdHlwZSBpcyBpbiBzY29wZSkKICAgIGVsc2lmICggSXNBcnJheVJlZldpdGhEYXRhKCRUaWNrZXRUeXBlcykgKSB7CiAgICAgICAgcmV0dXJuIDEgaWYgISRUaWNrZXR7VHlwZX07CiAgICAgICAgcmV0dXJuIDEgaWYgIWdyZXAgeyAkXyBlcSAkVGlja2V0e1R5cGV9IH0gQHskVGlja2V0VHlwZXN9OwogICAgfQoKICAgICMgY2hlY2sgaWYgdGlja2V0IHN0YXRlIGlzIHJlbGV2YW50CiAgICBteSAkT2xkVGlja2V0U3RhdGVSZWxldmFudDsKICAgIG15ICROZXdUaWNrZXRTdGF0ZVJlbGV2YW50OwogICAgbXkgQE9wZW5TdGF0ZVR5cGVzID0gKCAnbmV3JywgJ29wZW4nLCAncGVuZGluZyByZW1pbmRlcicsICdwZW5kaW5nIGF1dG8nICk7CiAgICBpZiAoICRQYXJhbXtFdmVudH0gZXEgJ1RpY2tldFN0YXRlVXBkYXRlJyApIHsKICAgICAgICBpZiAoICEkUGFyYW17RGF0YX0tPntPbGRUaWNrZXREYXRhfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVGlja2V0SUQgaW4gT2xkVGlja2V0RGF0YSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIG9ubHkgY2hhbmdlcyBvcGVuLT5jbG9zZSBhbmQgY2xvc2UtPm9wZW4gYXJlIG9mIGludGVyZXN0CiAgICAgICAgJE5ld1RpY2tldFN0YXRlUmVsZXZhbnQgPSAxIGlmIGdyZXAgeyAkXyBlcSAkVGlja2V0e1N0YXRlVHlwZX0gfSBAT3BlblN0YXRlVHlwZXM7CiAgICAgICAgJE9sZFRpY2tldFN0YXRlUmVsZXZhbnQgPSAxIGlmIGdyZXAgeyAkXyBlcSAkUGFyYW17RGF0YX0tPntPbGRUaWNrZXREYXRhfS0+e1N0YXRlVHlwZX0gfSBAT3BlblN0YXRlVHlwZXM7CiAgICAgICAgcmV0dXJuIDEgaWYgKCAkTmV3VGlja2V0U3RhdGVSZWxldmFudCB8fCAnJyApIGVxICggJE9sZFRpY2tldFN0YXRlUmVsZXZhbnQgfHwgJycgKTsKICAgIH0KCiAgICAjIHNob3J0Y3V0IGZvciBvdGhlciBldmVudHMgKGNoZWNrIGlmIHRpY2tldCBzdGF0ZSBpcyBpbiBzY29wZSkKICAgIGVsc2UgewogICAgICAgIHJldHVybiAxIGlmICFncmVwIHsgJF8gZXEgJFRpY2tldHtTdGF0ZVR5cGV9IH0gQE9wZW5TdGF0ZVR5cGVzOwogICAgfQoKICAgICMgc2hvcnRjdXQgZm9yIHRpY2tldCBldmVudHMgKGNoZWNrIGlmIHRpY2tldCBoYXMgYW55IHBvdGVudGlhbGx5IHJlbGV2YW50IGxpbmtzKQogICAgaWYgKCAkUGFyYW17RXZlbnR9IGVxICdUaWNrZXRTdGF0ZVVwZGF0ZScgfHwgJFBhcmFte0V2ZW50fSBlcSAnVGlja2V0VHlwZVVwZGF0ZScgKSB7CiAgICAgICAgbXkgJUxpbmtLZXlMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0tleUxpc3QoCiAgICAgICAgICAgIE9iamVjdDEgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIEtleTEgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBPYmplY3QyID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIFN0YXRlICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuIDEgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCBcJUxpbmtLZXlMaXN0ICk7CiAgICB9CgogICAgIyBwcmVwYXJlIGluY2lkZW50IHN0YXRlcyBhbmQgcmVsZXZhbnQgbGluayB0eXBlcyBwZXIgaW5jaWRlbnQgc3RhdGUKICAgIG15ICRJbmNpZGVudFN0YXRlcyA9ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06OkxpbmtTdGF0dXM6OkluY2lkZW50U3RhdGVzJyk7CiAgICBteSAkTGlua1R5cGVzICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpMaW5rU3RhdHVzOjpMaW5rVHlwZXMnKTsKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRMaW5rVHlwZXMpICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBjb25maWd1cmF0aW9uIGZvciAnSVRTTUNvbmZpZ0l0ZW06OkxpbmtTdGF0dXM6OkxpbmtUeXBlcychIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG15ICVMaW5rVHlwZXNCeUluY2lkZW50U3RhdGU7CgogICAgaWYgKCAkUGFyYW17RXZlbnR9IGVxICdMaW5rQWRkJyApIHsKICAgICAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7JExpbmtUeXBlc30gKSB7CiAgICAgICAgICAgIGlmICggJExpbmtUeXBlIGVxICRQYXJhbXtEYXRhfS0+e1R5cGV9ICkgewogICAgICAgICAgICAgICAgcHVzaCBAeyAkTGlua1R5cGVzQnlJbmNpZGVudFN0YXRleyAkTGlua1R5cGVzLT57JExpbmtUeXBlfSB9IH0sICRMaW5rVHlwZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gMSBpZiAhSXNIYXNoUmVmV2l0aERhdGEoIFwlTGlua1R5cGVzQnlJbmNpZGVudFN0YXRlICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7JExpbmtUeXBlc30gKSB7CiAgICAgICAgICAgIHB1c2ggQHsgJExpbmtUeXBlc0J5SW5jaWRlbnRTdGF0ZXsgJExpbmtUeXBlcy0+eyRMaW5rVHlwZX0gfSB9LCAkTGlua1R5cGU7CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlIGFkZGVkIG9yIHJlbW92ZWQgbGlua3MKICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnTGlua0FkZCcgfHwgJFBhcmFte0V2ZW50fSBlcSAnTGlua0RlbGV0ZScgKSB7CiAgICAgICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRQYXJhbXtEYXRhfS0+e0NvbmZpZ0l0ZW1JRH07CiAgICAgICAgbXkgJFZlcnNpb24gICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5WZXJzaW9uR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAjIG9wdGlvbmFsOiBjaGVjayBpZiBDSSBkZXBsb3ltZW50IHN0YXRlIGlzIHJlbGV2YW50CiAgICAgICAgbXkgJERlcGxveW1lbnRTdGF0ZXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpMaW5rU3RhdHVzOjpEZXBsb3ltZW50U3RhdGVzJyk7CiAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoJERlcGxveW1lbnRTdGF0ZXMpICkgewogICAgICAgICAgICByZXR1cm4gMSBpZiAhZ3JlcCB7ICRfIGVxICRWZXJzaW9uLT57RGVwbFN0YXRlfSB9IEB7JERlcGxveW1lbnRTdGF0ZXN9OwogICAgICAgIH0KCiAgICAgICAgIyByYWlzZSBpbmNpZGVudCBzdGF0ZSBpZiBuZWNlc3NhcnkKICAgICAgICBpZiAoICRQYXJhbXtFdmVudH0gZXEgJ0xpbmtBZGQnICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9DaGVja1JhaXNlSW5jaWRlbnRTdGF0ZSgKICAgICAgICAgICAgICAgIFZlcnNpb24gICAgICAgICAgICAgICAgICA9PiAkVmVyc2lvbiwKICAgICAgICAgICAgICAgIEluY2lkZW50U3RhdGVzICAgICAgICAgICA9PiAkSW5jaWRlbnRTdGF0ZXMsCiAgICAgICAgICAgICAgICBMaW5rVHlwZXNCeUluY2lkZW50U3RhdGUgPT4gXCVMaW5rVHlwZXNCeUluY2lkZW50U3RhdGUsCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBsb3dlciBpbmNpZGVudCBzdGF0ZSBpZiBuZWNlc3NhcnkKICAgICAgICByZXR1cm4gJFNlbGYtPl9DaGVja0xvd2VySW5jaWRlbnRTdGF0ZSgKICAgICAgICAgICAgVmVyc2lvbiAgICAgICAgICAgICAgICAgID0+ICRWZXJzaW9uLAogICAgICAgICAgICBJbmNpZGVudFN0YXRlcyAgICAgICAgICAgPT4gJEluY2lkZW50U3RhdGVzLAogICAgICAgICAgICBMaW5rVHlwZXNCeUluY2lkZW50U3RhdGUgPT4gXCVMaW5rVHlwZXNCeUluY2lkZW50U3RhdGUsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGhhbmRsZSB0aWNrZXQgY2xvc3VyZS9yZS1vcGVuIGFuZCByZWxldmFudC9pcnJlbGV2YW50IHR5cGUgY2hhbmdlCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ1RpY2tldFN0YXRlVXBkYXRlJyB8fCAkUGFyYW17RXZlbnR9IGVxICdUaWNrZXRUeXBlVXBkYXRlJyApIHsKCiAgICAgICAgIyByZWxldmFudCB0aWNrZXQgc3RhdGUgYW5kIHR5cGUgdXBkYXRlcyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkKICAgICAgICAjIGJvdGggbWVhbiBhIHRpY2tldCBpcyByZWxldmFudCBmb3IgQ0kgaW5jaWRlbnQgc3RhdGUgY2hhbmdlcyBvciBub3QKICAgICAgICAjIHRpY2tldCByZS1vcGVuIG9yIGNoYW5nZSB0byByZWxldmFudCB0eXBlID0gbWlnaHQgaGF2ZSB0byByYWlzZSBpbmNpZGVudCBzdGF0ZSBvZiBDSXMKICAgICAgICAjIHRpY2tldCBjbG9zdXJlIG9yIGNoYW5nZSB0byBpcnJlbGV2YW50IHR5cGUgPSBtaWdodCBoYXZlIHRvIGxvd2VyIGluY2lkZW50IHN0YXRlIG9mIENJcwogICAgICAgIG15ICRSZWxldmFudE5vdzsKICAgICAgICBpZiAoCiAgICAgICAgICAgICggJFBhcmFte0V2ZW50fSBlcSAnVGlja2V0U3RhdGVVcGRhdGUnICAgJiYgJE5ld1RpY2tldFN0YXRlUmVsZXZhbnQgKQogICAgICAgICAgICB8fCAoICRQYXJhbXtFdmVudH0gZXEgJ1RpY2tldFR5cGVVcGRhdGUnICYmICROZXdUaWNrZXRUeXBlUmVsZXZhbnQgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkUmVsZXZhbnROb3cgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBsb29wIHRocm91Z2ggYWxsIGxpbmsgdHlwZXMgYW5kIGNoZWNrIGxpbmtzIHRvIHNlZSBpZiB0aGVyZSBhcmUgcG9zc2libHkgYWZmZWN0ZWQgQ0lzCiAgICAgICAgbXkgJERlcGxveW1lbnRTdGF0ZXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpMaW5rU3RhdHVzOjpEZXBsb3ltZW50U3RhdGVzJyk7CiAgICAgICAgSU5DSURFTlRTVEFURToKICAgICAgICBmb3IgbXkgJEluY2lkZW50U3RhdGUgKCBAeyRJbmNpZGVudFN0YXRlc30gKSB7CiAgICAgICAgICAgIExJTktUWVBFOgogICAgICAgICAgICBmb3IgbXkgJExpbmtUeXBlICggQHsgJExpbmtUeXBlc0J5SW5jaWRlbnRTdGF0ZXskSW5jaWRlbnRTdGF0ZX0gfSApIHsKICAgICAgICAgICAgICAgIG15IEBMaW5rZWRDSXMgPSAkU2VsZi0+X0NoZWNrVGlja2V0TGlua3MoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgID0+ICRMaW5rVHlwZSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IExJTktUWVBFIGlmICFATGlua2VkQ0lzOwoKICAgICAgICAgICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEIChATGlua2VkQ0lzKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJFZlcnNpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbDogY2hlY2sgaWYgQ0kgZGVwbG95bWVudCBzdGF0ZSBpcyByZWxldmFudAogICAgICAgICAgICAgICAgICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCREZXBsb3ltZW50U3RhdGVzKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgIWdyZXAgeyAkXyBlcSAkVmVyc2lvbi0+e0RlcGxTdGF0ZX0gfSBAeyREZXBsb3ltZW50U3RhdGVzfTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgY3VycmVudCBpbmNpZGVudCBzdGF0ZSB2cyBzdGF0ZSBjYXVzZWQgYnkgbGluawoKICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgaXMgbG93ZXIgdGhhbiBjYXVzZWQgYnkgbGluayAtPiBzZXQKICAgICAgICAgICAgICAgICAgICBpZiAoJFJlbGV2YW50Tm93KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNob3J0Y3V0OiBub3RoaW5nIHRvIGRvIGlmIENJIGlzIGFscmVhZHkgaW4gaGlnaGVzdCBpbmNpZGVudCBzdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkVmVyc2lvbi0+e0luY2lTdGF0ZX0gZXEgJEluY2lkZW50U3RhdGVzLT5bMF07CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNob3J0Y3V0OiBub3RoaW5nIHRvIGRvIGlmIENJIGlzIGFscmVhZHkgaW4gc2FtZSBpbmNpZGVudCBzdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkVmVyc2lvbi0+e0luY2lTdGF0ZX0gZXEgJEluY2lkZW50U3RhdGU7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIENJIGlzIGluIGhpZ2hlciBpbmNpZGVudCBzdGF0ZSBhbHJlYWR5CiAgICAgICAgICAgICAgICAgICAgICAgIFRNUElOQ0lERU5UU1RBVEU6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkVG1wSW5jaWRlbnRTdGF0ZSAoIEB7JEluY2lkZW50U3RhdGVzfSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsbCBmdXJ0aGVyIGluY2lkZW50IHN0YXRlcyBhcmUgbG93ZXIgdGhhbiBjdXJyZW50IG9uZSAtPiBzZXQgbmV3IHN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IFRNUElOQ0lERU5UU1RBVEUgaWYgJFRtcEluY2lkZW50U3RhdGUgZXEgJEluY2lkZW50U3RhdGU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgJFZlcnNpb24tPntJbmNpU3RhdGV9IGVxICRUbXBJbmNpZGVudFN0YXRlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNldCBuZXcgaW5jaWRlbnQgc3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPl9TZXRDSVN0YXR1cygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gICAgICAgPT4gJFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+ICRJbmNpZGVudFN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgaXMgc2FtZSBhcyBjYXVzZWQgYnkgbGluayAtPiByZS1jYWxjdWxhdGUKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvcnRjdXQ6IG5vdGhpbmcgdG8gZG8gaWYgQ0kgaXMgYWxyZWFkeSBpbiBsb3dlc3QgaW5jaWRlbnQgc3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgJFZlcnNpb24tPntJbmNpU3RhdGV9IGVxICRJbmNpZGVudFN0YXRlcy0+Wy0xXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvcnRjdXQ6IG5vdGhpbmcgdG8gZG8gaWYgQ0kgaXMgbm90IGluIHNhbWUgaW5jaWRlbnQgc3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgJFZlcnNpb24tPntJbmNpU3RhdGV9IG5lICRJbmNpZGVudFN0YXRlOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyByZWNhbGN1bGF0ZSBpbmNpZGVudCBzdGF0ZSBleGFjdGx5CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT5fQ2hlY2tMb3dlckluY2lkZW50U3RhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uICAgICAgICAgICAgICAgICAgPT4gJFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlcyAgICAgICAgICAgPT4gJEluY2lkZW50U3RhdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1R5cGVzQnlJbmNpZGVudFN0YXRlID0+IFwlTGlua1R5cGVzQnlJbmNpZGVudFN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyB1bmtub3duL2lycmVsZXZhbnQgZXZlbnQKICAgIGVsc2UgewogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHJldHVybiAxOwp9CgojIFJhdGlvbmFsZToKIyBTdGFydCBhdCBoaWdoZXN0ICh3b3JzdCkgaW5jaWRlbnQgc3RhdGUgYW5kIGxvb3AgZG93biB0byBjdXJyZW50IGluY2lkZW50IHN0YXRlLAojICAgY2hlY2tpbmcgZm9yIGxpbmtzIG9uIGFsbCB0eXBlcyBjb25maWd1cmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBpbmNpZGVudCBzdGF0ZS4KIyBJZiBhbnkgbGluayBmb3IgYSBoaWdoZXIgaW5jaWRlbnQgc3RhdGUgdGhhbiB0aGUgY3VycmVudCBvbmUgaXMgZm91bmQsCiMgICBzZXQgdGhpcyBzdGF0ZSBhbmQgZXhpdC4KIyBEdWUgdG8gdG9wLXRvLWJvdHRvbSBtZXRob2QsIG5vIGhpZ2hlciBpbmNpZGVudCBzdGF0ZSBjYW4gb2NjdXIgbGF0ZXIuCnN1YiBfQ2hlY2tSYWlzZUluY2lkZW50U3RhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFZlcnNpb24gSW5jaWRlbnRTdGF0ZXMgTGlua1R5cGVzQnlJbmNpZGVudFN0YXRlIFRpY2tldElEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbG9vcCB0aHJvdWdoIHRhcmdldCBzdGF0ZXMgYW5kIGNoZWNrIGlmIGl0IG5lZWRzIHRvIGJlIGNoYW5nZWQKICAgIElOQ0lERU5UU1RBVEU6CiAgICBmb3IgbXkgJEluY2lkZW50U3RhdGUgKCBAeyAkUGFyYW17SW5jaWRlbnRTdGF0ZXN9IH0gKSB7CgogICAgICAgICMgQ0kgYWxyZWFkeSBpbiB0YXJnZXQgc3RhdGUgLSBub3RoaW5nIHRvIGRvCiAgICAgICAgcmV0dXJuIDEgaWYgJFBhcmFte1ZlcnNpb259LT57SW5jaVN0YXRlfSBlcSAkSW5jaWRlbnRTdGF0ZTsKCiAgICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIGxpbmtlZCB0aWNrZXRzIHRoYXQgbGVhZCB0byBpbmNpZGVudCBzdGF0ZQogICAgICAgIExJTktUWVBFOgogICAgICAgIGZvciBteSAkTGlua1R5cGUgKCBAeyAkUGFyYW17TGlua1R5cGVzQnlJbmNpZGVudFN0YXRlfS0+eyRJbmNpZGVudFN0YXRlfSB9ICkgewogICAgICAgICAgICBuZXh0IExJTktUWVBFIGlmICEkU2VsZi0+X0NoZWNrQ29uZmlnSXRlbUxpbmtzKAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtWZXJzaW9ufS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJExpbmtUeXBlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBsaW5rZWQgdGlja2V0IC0gc2V0IGluY2lkZW50IHN0YXRlIGFuZCBleGl0CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X1NldENJU3RhdHVzKAogICAgICAgICAgICAgICAgVmVyc2lvbiAgICAgICA9PiAkUGFyYW17VmVyc2lvbn0sCiAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+ICRJbmNpZGVudFN0YXRlLAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKIyBSYXRpb25hbGU6CiMgU2hvcnRjdXQgaWYgQ0kgaXMgYWxyZWR5IGluIGxvd2VzdCAoYmVzdCkgaW5jaWRlbnQgc3RhdGUgPSBjYW4ndCBoYXZlIGNoYW5nZWQgYWZ0ZXIgbGluayBkZWxldGUuCiMgU3RhcnQgYXQgaGlnaGVzdCAod29yc3QpIGluY2lkZW50IHN0YXRlIGFuZCBsb29wIGRvd24gdG8gY3VycmVudCBpbmNpZGVudCBzdGF0ZSwKIyAgIGNoZWNraW5nIGZvciBsaW5rcyBvbiBhbGwgdHlwZXMgY29uZmlndXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgaW5jaWRlbnQgc3RhdGVzLgojIElmIGEgbGluayBmb3IgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgaXMgZm91bmQsIGV4aXQgaW1tZWRpYXRlbHkgKG5vIGNoYW5nZSkuCiMgT3RoZXJ3aXNlIHNldCBpbmNpZGVudCBzdGF0ZSBmb3IgZmlyc3Qgb2NjdXJhbmNlIG9mIGEgbGluaywgdGhlbiBleGl0LgojIElmIG5vIGxpbmsgaXMgZm91bmQsIHNldCB0aGUgbG93ZXN0IHN0YXRlLgojIER1ZSB0byB0b3AtdG8tYm90dG9tIG1ldGhvZCwgZmlyc3QgcmVtZW1iZXJlZCBpbmNpZGVudCBzdGF0ZSBpcyB0aGUgaGlnaGVzdCBwb3NzaWJsZS4Kc3ViIF9DaGVja0xvd2VySW5jaWRlbnRTdGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVmVyc2lvbiBJbmNpZGVudFN0YXRlcyBMaW5rVHlwZXNCeUluY2lkZW50U3RhdGUgVGlja2V0SUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG9ydGN1dCBmb3IgbG93ZXN0IGxldmVsCiAgICByZXR1cm4gMSBpZiAkUGFyYW17VmVyc2lvbn0tPntJbmNpU3RhdGV9IGVxICRQYXJhbXtJbmNpZGVudFN0YXRlc30tPlstMV07CgogICAgIyBsb29wIHRocm91Z2ggdGFyZ2V0IHN0YXRlcyBhbmQgY2hlY2sgaWYgaXQgbmVlZHMgdG8gYmUgY2hhbmdlZAogICAgbXkgJExvd2VySW5jaWRlbnRTdGF0ZTsKICAgIElOQ0lERU5UU1RBVEU6CiAgICBmb3IgbXkgJEluY2lkZW50U3RhdGUgKCBAeyAkUGFyYW17SW5jaWRlbnRTdGF0ZXN9IH0gKSB7CgogICAgICAgICMgc2tpcCBsZXZlbCBpZiBjdXJyZW50IENJIGluY2lkZW50IHN0YXRlIGlzIG5vdCBvbiB0aGlzIG9yIGFueSBoaWdoZXIgbGV2ZWwKICAgICAgICBuZXh0IElOQ0lERU5UU1RBVEUgaWYgJFBhcmFte1ZlcnNpb259LT57SW5jaVN0YXRlfSBuZSAkSW5jaWRlbnRTdGF0ZSAmJiAhJExvd2VySW5jaWRlbnRTdGF0ZTsKCiAgICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIGxpbmtlZCB0aWNrZXRzIHRoYXQga2VlcCBpbmNpZGVudCBzdGF0ZQogICAgICAgIExJTktUWVBFOgogICAgICAgIGZvciBteSAkTGlua1R5cGUgKCBAeyAkUGFyYW17TGlua1R5cGVzQnlJbmNpZGVudFN0YXRlfS0+eyRJbmNpZGVudFN0YXRlfSB9ICkgewogICAgICAgICAgICBuZXh0IExJTktUWVBFIGlmICEkU2VsZi0+X0NoZWNrQ29uZmlnSXRlbUxpbmtzKAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtWZXJzaW9ufS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJExpbmtUeXBlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBsaW5rZWQgdGlja2V0CgogICAgICAgICAgICAjIGtlZXAgaW5jaWRlbnQgc3RhdGUKICAgICAgICAgICAgcmV0dXJuIDEgaWYgJFBhcmFte1ZlcnNpb259LT57SW5jaVN0YXRlfSBlcSAkSW5jaWRlbnRTdGF0ZTsKCiAgICAgICAgICAgICMgb3RoZXJ3aXNlIHNldCBuZXcgKGxvd2VyKSBpbmNpZGVudCBzdGF0ZSBhbmQgZXhpdAogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9TZXRDSVN0YXR1cygKICAgICAgICAgICAgICAgIFZlcnNpb24gICAgICAgPT4gJFBhcmFte1ZlcnNpb259LAogICAgICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAkSW5jaWRlbnRTdGF0ZSwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgdGhhdCBzdGF0ZSBuZWVkcyB0byBiZSBjaGFuZ2VkICg9IGN1cnJlbnQgbGV2ZWwgaXNuJ1QganVzdGlmaWVkIGJ5IGxpbmtzIGFueW1vcmUpCiAgICAgICAgJExvd2VySW5jaWRlbnRTdGF0ZSA9IDE7CiAgICB9CgogICAgIyBubyByZWxldmFudCBsaW5rcyBoYXZlIGJlZW4gZm91bmQsIGJ1dCBDSSB3YXNuJ3QgaW4gbG93ZXN0IGluY2lkZW50IHN0YXRlIGJlZm9yZSAtIHNldCBpdCBub3cgYW5kIGV4aXQKICAgIHJldHVybiAkU2VsZi0+X1NldENJU3RhdHVzKAogICAgICAgIFZlcnNpb24gICAgICAgPT4gJFBhcmFte1ZlcnNpb259LAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gJFBhcmFte0luY2lkZW50U3RhdGVzfS0+Wy0xXSwKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICApOwp9CgojIHNldCBDSSB0byBhIHNwZWNpZmllZCBpbmNpZGVudCBzdGF0ZSBhbmQgbG9nIGNoYW5nZSBpbiBjb3JyZXNwb25kaW5nIHRpY2tldApzdWIgX1NldENJU3RhdHVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhWZXJzaW9uIEluY2lkZW50U3RhdGUgVGlja2V0SUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKICAgIG15ICRJbmNpZGVudFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICApOwogICAgcmV0dXJuIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkSW5jaWRlbnRTdGF0ZUxpc3QpOwoKICAgICMgY2hlY2sgaWYgaW5jaWRlbnQgc3RhdGUgaXMgdmFsaWQKICAgIG15ICVSZXZlcnNlSW5jaWRlbnRTdGF0ZUxpc3QgPSByZXZlcnNlICV7JEluY2lkZW50U3RhdGVMaXN0fTsKICAgIGlmICggISRSZXZlcnNlSW5jaWRlbnRTdGF0ZUxpc3R7ICRQYXJhbXtJbmNpZGVudFN0YXRlfSB9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiSGF2ZSBpbnZhbGlkIGluY2lkZW50IHN0YXRlICckUGFyYW17SW5jaWRlbnRTdGF0ZX0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBhZGQgYSBuZXcgdmVyc2lvbiB3aXRoIHRoZSBuZXcgaW5jaWRlbnQgc3RhdGUKICAgIG15ICRWZXJzaW9uSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+VmVyc2lvbkFkZCgKICAgICAgICAleyAkUGFyYW17VmVyc2lvbn0gfSwKICAgICAgICBJbmNpU3RhdGVJRCA9PiAkUmV2ZXJzZUluY2lkZW50U3RhdGVMaXN0eyAkUGFyYW17SW5jaWRlbnRTdGF0ZX0gfSwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKICAgIHJldHVybiBpZiAhJFZlcnNpb25JRDsKCiAgICAjIGxvZyBjaGFuZ2UgaW4gdGlja2V0CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPkhpc3RvcnlBZGQoCiAgICAgICAgVGlja2V0SUQgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgSGlzdG9yeVR5cGUgID0+ICdNaXNjJywKICAgICAgICBOYW1lICAgICAgICAgPT4gIlVwZGF0ZWQgaW5jaWRlbnQgc3RhdGUgb2YgY29uZmlnIGl0ZW0gJyRQYXJhbXtWZXJzaW9ufS0+e051bWJlcn0nIHRvICckUGFyYW17SW5jaWRlbnRTdGF0ZX0nLiIsCiAgICAgICAgQ3JlYXRlVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9CgojIGNoZWNrIGlmIHJlbGV2YW50IENJcyBhcmUgbGlua2VkIHRvIGEgdGlja2V0CnN1YiBfQ2hlY2tUaWNrZXRMaW5rcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgVHlwZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsaW5rIHR5cGUgbG9va3VwCiAgICBteSAkTGlua1R5cGVMb29rdXAgPSAkU2VsZi0+X0xpbmtUeXBlTG9va3VwR2V0KCk7CgogICAgbXkgJUxpbmtLZXlMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0tleUxpc3QoCiAgICAgICAgT2JqZWN0MSAgID0+ICdUaWNrZXQnLAogICAgICAgIEtleTEgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIE9iamVjdDIgICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgICAgIFR5cGUgICAgICA9PiAkTGlua1R5cGVMb29rdXAtPnsgJFBhcmFte1R5cGV9IH0tPntOYW1lfSwKICAgICAgICBEaXJlY3Rpb24gPT4gJExpbmtUeXBlTG9va3VwLT57ICRQYXJhbXtUeXBlfSB9LT57RGlyZWN0aW9ufS0+e1RpY2tldH0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwogICAgcmV0dXJuIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVMaW5rS2V5TGlzdCApOwogICAgcmV0dXJuICggc29ydCBrZXlzICVMaW5rS2V5TGlzdCApOwp9CgojIGNoZWNrIGlmIHJlbGV2YW50IG9wZW4gdGlja2V0cyBhcmUgbGlua2VkIHRvIGEgQ0kKc3ViIF9DaGVja0NvbmZpZ0l0ZW1MaW5rcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29uZmlnSXRlbUlEIFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbGluayB0eXBlIGxvb2t1cAogICAgbXkgJExpbmtUeXBlTG9va3VwID0gJFNlbGYtPl9MaW5rVHlwZUxvb2t1cEdldCgpOwoKICAgIG15ICVMaW5rS2V5TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtLZXlMaXN0KAogICAgICAgIE9iamVjdDEgICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIEtleTEgICAgICA9PiAkUGFyYW17Q29uZmlnSXRlbUlEfSwKICAgICAgICBPYmplY3QyICAgPT4gJ1RpY2tldCcsCiAgICAgICAgU3RhdGUgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVHlwZSAgICAgID0+ICRMaW5rVHlwZUxvb2t1cC0+eyAkUGFyYW17VHlwZX0gfS0+e05hbWV9LAogICAgICAgIERpcmVjdGlvbiA9PiAkTGlua1R5cGVMb29rdXAtPnsgJFBhcmFte1R5cGV9IH0tPntEaXJlY3Rpb259LT57SVRTTUNvbmZpZ0l0ZW19LAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKICAgIHJldHVybiBpZiAhSXNIYXNoUmVmV2l0aERhdGEoIFwlTGlua0tleUxpc3QgKTsKCiAgICAjIGxpc3Qgb2YgcmVsZXZhbnQgc3RhdGUgdHlwZXMKICAgIG15IEBPcGVuU3RhdGVUeXBlcyA9ICggJ25ldycsICdvcGVuJywgJ3BlbmRpbmcgcmVtaW5kZXInLCAncGVuZGluZyBhdXRvJyApOwoKICAgICMgdXNlIHRpY2tldCB0eXBlIGNoZWNrPwogICAgbXkgJFRpY2tldFR5cGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6TGlua1N0YXR1czo6VGlja2V0VHlwZXMnKTsKICAgIG15ICRDaGVja1RpY2tldFR5cGVzOwogICAgJENoZWNrVGlja2V0VHlwZXMgPSAxIGlmIElzQXJyYXlSZWZXaXRoRGF0YSgkVGlja2V0VHlwZXMpOwoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBUSUNLRVRJRDoKICAgIGZvciBteSAkVGlja2V0SUQgKCBzb3J0IGtleXMgJUxpbmtLZXlMaXN0ICkgewogICAgICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgIG5leHQgVElDS0VUSUQgaWYgIWdyZXAgeyAkXyBlcSAkVGlja2V0e1N0YXRlVHlwZX0gfSBAT3BlblN0YXRlVHlwZXM7CiAgICAgICAgaWYgKCRDaGVja1RpY2tldFR5cGVzKSB7CiAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgISRUaWNrZXR7VHlwZX07CiAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgIWdyZXAgeyAkXyBlcSAkVGlja2V0e1R5cGV9IH0gQHskVGlja2V0VHlwZXN9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICByZXR1cm47Cn0KCiMgY29tcGlsZSBsaXN0IG9mIGludGVybmFsIGxpbmsgdHlwZSBuYW1lcyBhbmQgZGlyZWN0aW9ucyB0byB1c2UgZm9yIExpbmtLZXlMaXN0CnN1YiBfTGlua1R5cGVMb29rdXBHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGlmIHdlIGhhdmUgZ2VuZXJhdGVkIGxvb2t1cCBiZWZvcmUKICAgIHJldHVybiAkU2VsZi0+e0xpbmtUeXBlTG9va3VwfSBpZiAkU2VsZi0+e0xpbmtUeXBlTG9va3VwfTsKCiAgICBteSAlTGlua1R5cGVMb29rdXA7CiAgICBteSAlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5UeXBlTGlzdCgpOwogICAgZm9yIG15ICRUeXBlTmFtZUludGVybmFsICggc29ydCBrZXlzICVUeXBlTGlzdCApIHsKICAgICAgICBteSAkU291cmNlTmFtZSA9ICRUeXBlTGlzdHskVHlwZU5hbWVJbnRlcm5hbH0tPntTb3VyY2VOYW1lfTsKICAgICAgICBteSAkVGFyZ2V0TmFtZSA9ICRUeXBlTGlzdHskVHlwZU5hbWVJbnRlcm5hbH0tPntUYXJnZXROYW1lfTsKICAgICAgICAkTGlua1R5cGVMb29rdXB7JFNvdXJjZU5hbWV9ID0gewogICAgICAgICAgICBOYW1lICAgICAgPT4gJFR5cGVOYW1lSW50ZXJuYWwsCiAgICAgICAgICAgIERpcmVjdGlvbiA9PiB7CiAgICAgICAgICAgICAgICBJVFNNQ29uZmlnSXRlbSA9PiAkU291cmNlTmFtZSBlcSAkVGFyZ2V0TmFtZSA/ICdCb3RoJyA6ICdUYXJnZXQnLAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgPT4gJFNvdXJjZU5hbWUgZXEgJFRhcmdldE5hbWUgPyAnQm90aCcgOiAnU291cmNlJywKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgICAgICRMaW5rVHlwZUxvb2t1cHskVGFyZ2V0TmFtZX0gPSB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkVHlwZU5hbWVJbnRlcm5hbCwKICAgICAgICAgICAgRGlyZWN0aW9uID0+IHsKICAgICAgICAgICAgICAgIElUU01Db25maWdJdGVtID0+ICRTb3VyY2VOYW1lIGVxICRUYXJnZXROYW1lID8gJ0JvdGgnIDogJ1NvdXJjZScsCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICA9PiAkU291cmNlTmFtZSBlcSAkVGFyZ2V0TmFtZSA/ICdCb3RoJyA6ICdUYXJnZXQnLAogICAgICAgICAgICB9LAogICAgICAgIH07CiAgICB9CgogICAgIyByZW1lbWJlciByZXN1bHQKICAgICRTZWxmLT57TGlua1R5cGVMb29rdXB9ID0gXCVMaW5rVHlwZUxvb2t1cDsKCiAgICByZXR1cm4gXCVMaW5rVHlwZUxvb2t1cDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgTUlNRTo6QmFzZTY0OwoKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXI7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29uZmlnSXRlbUNyZWF0ZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBTZXQgVXNlcklEIHRvIHJvb3QuCiRTZWxmLT57VXNlcklEfSA9IDE7CgojIFNraXAgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi4KJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgU2tpcFNTTFZlcmlmeSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlck9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwpteSAkQ29uZmlnT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgpteSAkUmFuZG9tSUQgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKIyBDaGVjayBpZiBTU0wgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGlzIGRpc2FibGVkLgokU2VsZi0+SXMoCiAgICAkRU5We1BFUkxfTFdQX1NTTF9WRVJJRllfSE9TVE5BTUV9LAogICAgMCwKICAgICdEaXNhYmxlZCBTU0wgY2VydGl0aWNhdGVzIHZlcmlmaWNhdGlvbiBpbiBlbnZpcm9ubWVudCcsCik7CgpteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlck9iamVjdC0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKIyBDcmVhdGUgd2Vic2VydmljZSBvYmplY3QuCm15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJywKICAgIHJlZiAkV2Vic2VydmljZU9iamVjdCwKICAgICJDcmVhdGUgd2Vic2VydmljZSBvYmplY3QiLAopOwoKIyBTZXQgd2Vic2VydmljZSBuYW1lLgpteSAkV2Vic2VydmljZU5hbWUgPSAnLVRlc3QtJyAuICRSYW5kb21JRDsKCm15ICRXZWJzZXJ2aWNlSUQgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUFkZCgKICAgIE5hbWUgICA9PiAkV2Vic2VydmljZU5hbWUsCiAgICBDb25maWcgPT4gewogICAgICAgIERlYnVnZ2VyID0+IHsKICAgICAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICB9LAogICAgICAgIFByb3ZpZGVyID0+IHsKICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VJRCwKICAgICJBZGRlZCBXZWJzZXJ2aWNlIiwKKTsKCiMgR2V0IHJlbW90ZSBob3N0IHdpdGggc29tZSBwcmVjYXV0aW9ucyBmb3IgY2VydGFpbiB1bml0IHRlc3Qgc3lzdGVtcy4KbXkgJEhvc3Q7Cm15ICRGUUROID0gJENvbmZpZ09iamVjdC0+R2V0KCdGUUROJyk7CgojIFRyeSB0byByZXNvbHZlIGZxZG4gaG9zdC4KaWYgKCAkRlFETiBuZSAneW91cmhvc3QuZXhhbXBsZS5jb20nICYmIGdldGhvc3RieW5hbWUoJEZRRE4pICkgewogICAgJEhvc3QgPSAkRlFETjsKfQoKIyBUcnkgdG8gcmVzb2x2ZSBsb2NhbGhvc3QgaW5zdGVhZC4KaWYgKCAhJEhvc3QgJiYgZ2V0aG9zdGJ5bmFtZSgnbG9jYWxob3N0JykgKSB7CiAgICAkSG9zdCA9ICdsb2NhbGhvc3QnOwp9CgojIFVzZSBoYXJkY29kZWQgbG9jYWxob3N0IGlwIGFkZHJlc3MuCmlmICggISRIb3N0ICkgewogICAgJEhvc3QgPSAnMTI3LjAuMC4xJzsKfQoKIyBQcmVwYXJlIHdlYnNlcnZpY2UgY29uZmlnLgpteSAkUmVtb3RlU3lzdGVtID0KICAgICRDb25maWdPYmplY3QtPkdldCgnSHR0cFR5cGUnKQogICAgLiAnOi8vJwogICAgLiAkSG9zdAogICAgLiAnLycKICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpCiAgICAuICcvbnBoLWdlbmVyaWNpbnRlcmZhY2UucGwvV2Vic2VydmljZUlELycKICAgIC4gJFdlYnNlcnZpY2VJRDsKCm15ICRXZWJzZXJ2aWNlQ29uZmlnID0gewogICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAnVGVzdCBmb3IgQ29uZmlnSXRlbSBDb25uZWN0b3IgdXNpbmcgU09BUCB0cmFuc3BvcnQgYmFja2VuZC4nLAogICAgRGVidWdnZXIgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBQcm92aWRlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMF8wMDBfMDAwLAogICAgICAgICAgICAgICAgTmFtZVNwYWNlID0+ICdodHRwOi8vb3Rycy5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDb25maWdJdGVtOjpDb25maWdJdGVtQ3JlYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdTZXNzaW9uOjpTZXNzaW9uQ3JlYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFJlcXVlc3RlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmNvZGluZyAgPT4gJ1VURi04JywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgSW52b2tlciA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCn07CgojIFVwZGF0ZSB3ZWJzZXJ2aWNlIHdpdGggcmVhbCBjb25maWcuCm15ICRXZWJzZXJ2aWNlVXBkYXRlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VVcGRhdGUoCiAgICBJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBOYW1lICAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyAgPT4gJFdlYnNlcnZpY2VDb25maWcsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VVcGRhdGUsCiAgICAiVXBkYXRlZCBXZWJzZXJ2aWNlICRXZWJzZXJ2aWNlSUQgLSAkV2Vic2VydmljZU5hbWUiLAopOwoKIyBEZWJ1Z2dlciBvYmplY3QuCm15ICREZWJ1Z2dlck9iamVjdCA9IEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXItPm5ldygKICAgIERlYnVnZ2VyQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgV2Vic2VydmljZUlEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIENvbW11bmljYXRpb25UeXBlID0+ICdQcm92aWRlcicsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkRGVidWdnZXJPYmplY3QsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcicsCiAgICAnRGVidWdnZXJPYmplY3QgaW5zdGFuY2lhdGVkIGNvcnJlY3RseScsCik7CgojIEdldCBTZXNzaW9uSUQuCiMgQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QuCm15ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgIHJlZiAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCwKICAgICJTZXNzaW9uSUQgLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCik7CgojIENyZWF0ZSBhIG5ldyB1c2VyIGZvciBjdXJyZW50IHRlc3QuCm15ICRVc2VyTG9naW4gPSAkSGVscGVyT2JqZWN0LT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdpdHNtLWNvbmZpZ2l0ZW0nIF0sCik7Cm15ICRQYXNzd29yZCA9ICRVc2VyTG9naW47CgojIFN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlLgpteSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdCA9ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LT5SdW4oCiAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgIEludm9rZXIgICAgICA9PiAnU2Vzc2lvbkNyZWF0ZScsCiAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICB9LAopOwoKbXkgJE5ld1Nlc3Npb25JRCA9ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0LT57RGF0YX0tPntTZXNzaW9uSUR9OwoKIyBBY3R1YWwgdGVzdHMuCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnRW1wdHkgUmVxdWVzdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHt9LAogICAgICAgIEV4cGVjdGVkRGF0YSAgID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDb25maWdJdGVtQ3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZTogQ29uZmlnSXRlbSBwYXJhbWV0ZXIgaXMgbWlzc2luZyBvciBub3QgdmFsaWQhJywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbmZpZ0l0ZW0nLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0gcGFyYW1ldGVyIGlzIG1pc3Npbmcgb3Igbm90IHZhbGlkIScsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBDSVhNTERhdGEnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3QnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDb25maWdJdGVtQ3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT5OSUMtPklQb3ZlckRIQ1AgcGFyYW1ldGVyIGlzIG1pc3NpbmchJywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENJWE1MRGF0YScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YSBpcyBtaXNzaW5nIG9yIGludmFsaWQhJywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIENsYXNzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0tPkNsYXNzIHBhcmFtZXRlciBpcyBtaXNzaW5nIScsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBOYW1lJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDb25maWdJdGVtQ3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZTogQ29uZmlnSXRlbS0+TmFtZSBwYXJhbWV0ZXIgaXMgbWlzc2luZyEnLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgRGVwbFN0YXRlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0knIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDb25maWdJdGVtQ3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZTogQ29uZmlnSXRlbS0+RGVwbFN0YXRlIHBhcmFtZXRlciBpcyBtaXNzaW5nIScsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBJbmNpU3RhdGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDb25maWdJdGVtQ3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZTogQ29uZmlnSXRlbS0+SW5jaVN0YXRlIHBhcmFtZXRlciBpcyBtaXNzaW5nIScsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgQ2xhc3MnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdOb3RFeGlzaXRuZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdDb25maWdJdGVtQ3JlYXRlOiBDb25maWdJdGVtLT5DbGFzcyBwYXJhbWV0ZXIgaXMgaW52YWxpZCEnLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1dyb25nIERlcGxTdGF0ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0tPkRlcGxTdGF0ZSBwYXJhbWV0ZXIgaXMgaW52YWxpZCEnLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1dyb25nIEluY2lTdGF0ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0tPkluY2lTdGF0ZSBwYXJhbWV0ZXIgaXMgaW52YWxpZCEnLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgTklDLT5OSUMnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5JQyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtQ3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAnQ29uZmlnSXRlbUNyZWF0ZTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT5OSUMgcGFyYW1ldGVyIHZhbHVlIGlzIHJlcXVpcmVkIGFuZCBpcyBtaXNzaW5nIScsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBOSUMtPklwT3ZlckRIQ1AnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5JQyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5JQyA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+TklDLT5JUG92ZXJESENQIHBhcmFtZXRlciBpcyBtaXNzaW5nIScsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBOSUMtPk5JQyBpbiBhcnJheScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTklDID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+TklDIHBhcmFtZXRlciB2YWx1ZSBpcyByZXF1aXJlZCBhbmQgaXMgbWlzc2luZyEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIE5JQy0+SXBPdmVyREhDUCBpbiBhcnJheScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTklDID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdDb25maWdJdGVtQ3JlYXRlOiBDb25maWdJdGVtLT5DSVhNTERhdGEtPk5JQ1sxXS0+SVBvdmVyREhDUCBwYXJhbWV0ZXIgaXMgbWlzc2luZyEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdXcm9uZyBOSUMtPklwT3ZlckRIQ1AgR2VuZXJhbCBDYXRhbG9nIGluIEhhc2gnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5JQyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICdDb25maWdJdGVtQ3JlYXRlOiBDb25maWdJdGVtLT5DSVhNTERhdGEtPk5JQy0+SVBvdmVyREhDUCBwYXJhbWV0ZXIgdmFsdWUgaXMgbm90IGEgdmFsaWQgZm9yIEdlbmVyYWwgQ2F0YWxvZyBcJ0lUU006OkNvbmZpZ0l0ZW06Olllc05vXCchJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgTklDLT5JcE92ZXJESENQIEdlbmVyYWwgQ2F0YWxvZyBpbiBBcnJheSBIYXNoJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0knIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBOSUMgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICdDb25maWdJdGVtQ3JlYXRlOiBDb25maWdJdGVtLT5DSVhNTERhdGEtPk5JQ1sxXS0+SVBvdmVyREhDUCBwYXJhbWV0ZXIgdmFsdWUgaXMgbm90IGEgdmFsaWQgZm9yIEdlbmVyYWwgQ2F0YWxvZyBcJ0lUU006OkNvbmZpZ0l0ZW06Olllc05vXCchJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgVmVuZG9yIExvbmcgVGV4dCAnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZlbmRvciA9PiAnYScgeCA1MSwKICAgICAgICAgICAgICAgICAgICBOSUMgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdZZXMnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtQ3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAnQ29uZmlnSXRlbUNyZWF0ZTogQ29uZmlnSXRlbS0+Q0lYTUxEYXRhLT5WZW5kb3IgcGFyYW1ldGVyIHZhbHVlIGV4Y2VkZXMgdGhlIG1heGl1bSBsZW5ndGghJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgV2FycmFudHlFeHBpcmF0aW9uRGF0ZSBEYXRlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0knIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWZW5kb3IgPT4gJ1RvcmVybyBDaGlwcycsCiAgICAgICAgICAgICAgICAgICAgTklDICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnWWVzJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIFdhcnJhbnR5RXhwaXJhdGlvbkRhdGUgPT4gJzE5MzAtMzAtMzAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+V2FycmFudHlFeHBpcmF0aW9uRGF0ZSBwYXJhbWV0ZXIgdmFsdWUgaXMgbm90IGEgdmFsaWQgRGF0ZSBmb3JtYXQhJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgT3duZXIgQ3VzdG9tZXInLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZlbmRvciA9PiAnVG9yZXJvIENoaXBzJywKICAgICAgICAgICAgICAgICAgICBOSUMgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdZZXMnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgV2FycmFudHlFeHBpcmF0aW9uRGF0ZSA9PiAnMTk3Ny0xMi0xMicsCiAgICAgICAgICAgICAgICAgICAgT3duZXIgICAgICAgICAgICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+T3duZXIgcGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGN1c3RvbWVyIScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1dyb25nIFJhbSBUb28gTWFueScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmVuZG9yID0+ICdUb3Jlcm8gQ2hpcHMnLAogICAgICAgICAgICAgICAgICAgIE5JQyAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBXYXJyYW50eUV4cGlyYXRpb25EYXRlID0+ICcxOTc3LTEyLTEyJywKICAgICAgICAgICAgICAgICAgICBPd25lciAgICAgICAgICAgICAgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICAgICAgUmFtICAgICAgICAgICAgICAgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAgICAgICAgIDIsCiAgICAgICAgICAgICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAgICAgICAgICAgIDQsCiAgICAgICAgICAgICAgICAgICAgICAgIDUsCiAgICAgICAgICAgICAgICAgICAgICAgIDYsCiAgICAgICAgICAgICAgICAgICAgICAgIDcsCiAgICAgICAgICAgICAgICAgICAgICAgIDgsCiAgICAgICAgICAgICAgICAgICAgICAgIDksCiAgICAgICAgICAgICAgICAgICAgICAgIDEwLAogICAgICAgICAgICAgICAgICAgICAgICAxMSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbmZpZ0l0ZW1DcmVhdGU6IENvbmZpZ0l0ZW0tPkNJWE1MRGF0YS0+UmFtIHBhcmFtZXRlciByZXBldGl0aW9ucyBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4aXVtIHZhbHVlIScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1dyb25nIEF0dGFjaG1lbnQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZlbmRvciA9PiAnVG9yZXJvIENoaXBzJywKICAgICAgICAgICAgICAgICAgICBOSUMgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdZZXMnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgV2FycmFudHlFeHBpcmF0aW9uRGF0ZSA9PiAnMTk3Ny0xMi0xMicsCiAgICAgICAgICAgICAgICAgICAgT3duZXIgICAgICAgICAgICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgICAgIFJhbSAgICAgICAgICAgICAgICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICA0MDAwLAogICAgICAgICAgICAgICAgICAgICAgICA0MDAwLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0YWNobWVudCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDb25maWdJdGVtQ3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZTogQ29uZmlnSXRlbS0+QXR0YWNobWVudCBwYXJhbWV0ZXIgaXMgaW52YWxpZCEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEF0dGFjaG1lbnQtPkNvbnRlbnQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZlbmRvciA9PiAnVG9yZXJvIENoaXBzJywKICAgICAgICAgICAgICAgICAgICBOSUMgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdZZXMnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgV2FycmFudHlFeHBpcmF0aW9uRGF0ZSA9PiAnMTk3Ny0xMi0xMicsCiAgICAgICAgICAgICAgICAgICAgT3duZXIgICAgICAgICAgICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgICAgIFJhbSAgICAgICAgICAgICAgICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICA0MDAwLAogICAgICAgICAgICAgICAgICAgICAgICA0MDAwLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0YWNobWVudCA9PiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdDb25maWdJdGVtQ3JlYXRlOiBBdHRhY2htZW50LT5Db250ZW50IHBhcmFtZXRlciBpcyBtaXNzaW5nIScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQXR0YWNobWVudC0+Q29udGVudFR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZlbmRvciA9PiAnVG9yZXJvIENoaXBzJywKICAgICAgICAgICAgICAgICAgICBOSUMgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdZZXMnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgV2FycmFudHlFeHBpcmF0aW9uRGF0ZSA9PiAnMTk3Ny0xMi0xMicsCiAgICAgICAgICAgICAgICAgICAgT3duZXIgICAgICAgICAgICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgICAgIFJhbSAgICAgICAgICAgICAgICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICA0MDAwLAogICAgICAgICAgICAgICAgICAgICAgICA0MDAwLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0YWNobWVudCA9PiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdWR2hwY3lCcGN5QmhiaUJsYm1OdlpHVmtJSFJsZUhRPScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdDb25maWdJdGVtQ3JlYXRlOiBBdHRhY2htZW50LT5Db250ZW50VHlwZSBwYXJhbWV0ZXIgaXMgbWlzc2luZyEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEF0dGFjaG1lbnQtPkZpbGVuYW1lJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0knIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWZW5kb3IgPT4gJ1RvcmVybyBDaGlwcycsCiAgICAgICAgICAgICAgICAgICAgTklDICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnWWVzJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIFdhcnJhbnR5RXhwaXJhdGlvbkRhdGUgPT4gJzE5NzctMTItMTInLAogICAgICAgICAgICAgICAgICAgIE93bmVyICAgICAgICAgICAgICAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgICAgICBSYW0gICAgICAgICAgICAgICAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgNDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgNDAwMCwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaGJpQmxibU52WkdWa0lIUmxlSFE9JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDb25maWdJdGVtQ3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ29uZmlnSXRlbUNyZWF0ZTogQXR0YWNobWVudC0+RmlsZW5hbWUgcGFyYW1ldGVyIGlzIG1pc3NpbmchJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBDb25maWdJdGVtJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0JyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmVuZG9yICAgICAgICAgID0+ICdMZW5vdm8nLAogICAgICAgICAgICAgICAgICAgIE1vZGVsICAgICAgICAgICA9PiAnVGhpbmtwYWQnLAogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICA9PiAnVGhpbmtwYWQgWDMwMCcsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdEZXNrdG9wJywKICAgICAgICAgICAgICAgICAgICBPd25lciAgICAgICAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgICAgICBTZXJpYWxOdW1iZXIgICAgPT4gJ2FiYzEyMzQ1YWJjJywKICAgICAgICAgICAgICAgICAgICBPcGVyYXRpbmdTeXN0ZW0gPT4gJ0NlbnRPUyA2LjAnLAogICAgICAgICAgICAgICAgICAgIENQVSAgICAgICAgICAgICA9PiAnSW50ZWwgQ29yZSBpMycsCiAgICAgICAgICAgICAgICAgICAgUmFtICAgICAgICAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJzQwMDAnLAogICAgICAgICAgICAgICAgICAgICAgICAnMjAwMCcsCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBIYXJkRGlzayA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEhhcmREaXNrID0+ICcvZGV2JywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FwYWNpdHkgPT4gJzUwMDAwJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIEZRRE4gPT4gJ2hvdHMuZXhhbXBsZS5jb20nLAogICAgICAgICAgICAgICAgICAgIE5JQyAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQQWRkcmVzcyAgPT4gJzE5Mi4xNjguMzAuMScsCgogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUEFkZHJlc3MgID0+ICcyMDAuMzQuNTYuNzgnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgR3JhcGhpY0FkYXB0ZXIgICAgICAgICA9PiAnQVRJIFJhZGVvbiAzMDAnLAogICAgICAgICAgICAgICAgICAgIFdhcnJhbnR5RXhwaXJhdGlvbkRhdGUgPT4gJzE5NzctMTItMTInLAogICAgICAgICAgICAgICAgICAgIEluc3RhbGxEYXRlICAgICAgICAgICAgPT4gJzE5NzctMTItMTInLAogICAgICAgICAgICAgICAgICAgIE5vdGUgICAgICAgICAgICAgICAgICAgPT4gJ1RoaXMgaXMgYSBEZW1vIENJJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRhY2htZW50ID0+IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhiaUJsYm1OdlpHVmtJSFJsZUhRPScsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ015IFRleHQudHh0JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaGJpQmxibU52WkdWa0lIUmxlSFE9JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdNeSBUZXh0Mi50eHQnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0NvcnJlY3QgQ29uZmlnSXRlbSB3aXRob3V0IFhTTERhdGEnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdMb2NhdGlvbicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3QnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgIH0sCik7CgojIFN0YXJ0IHRlc3RpbmcuCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBDcmVhdGUgbG9jYWwgb2JqZWN0LgogICAgbXkgJExvY2FsT2JqZWN0ID0gIktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjokVGVzdC0+e09wZXJhdGlvbn0iLT5uZXcoCiAgICAgICAgRGVidWdnZXJPYmplY3QgPT4gJERlYnVnZ2VyT2JqZWN0LAogICAgICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OiRUZXN0LT57T3BlcmF0aW9ufSIsCiAgICAgICAgcmVmICRMb2NhbE9iamVjdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSBsb2NhbCBvYmplY3QiLAogICAgKTsKCiAgICAjIE1ha2UgYSBkZWVwIGNvcHkgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIGRlZmluaXRpb24uCiAgICBteSAkQ2xvbmVkUmVxdWVzdERhdGEgPSBTdG9yYWJsZTo6ZGNsb25lKCAkVGVzdC0+e1JlcXVlc3REYXRhfSApOwoKICAgICMgU3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UuCiAgICBteSAkTG9jYWxSZXN1bHQgPSAkTG9jYWxPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgICAgICAgICAleyAkVGVzdC0+e1JlcXVlc3REYXRhfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgUmVzdG9yZSBjbG9uZWQgZGF0YS4KICAgICRUZXN0LT57UmVxdWVzdERhdGF9ID0gJENsb25lZFJlcXVlc3REYXRhOwoKICAgICMgQ2hlY2sgcmVzdWx0LgogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJExvY2FsUmVzdWx0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICMgQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QuCiAgICBteSAkUmVxdWVzdGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKICAgICRTZWxmLT5JcygKICAgICAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgICAgIHJlZiAkUmVxdWVzdGVyT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QiLAogICAgKTsKCiAgICAjIFN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlLgogICAgbXkgJFJlcXVlc3RlclJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkTmV3U2Vzc2lvbklELAogICAgICAgICAgICAleyAkVGVzdC0+e1JlcXVlc3REYXRhfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgQ2hlY2sgcmVzdWx0LgogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIiwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntTdWNjZXNzfSwKICAgICAgICAkVGVzdC0+e1N1Y2Nlc3NSZXF1ZXN0fSwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciBzdWNjZXNzZnVsIHJlc3VsdCIsCiAgICApOwoKICAgICMgVGVzdHMgc3VwcG9zZWQgdG8gc3VjY2VlZC4KICAgIGlmICggJFRlc3QtPntTdWNjZXNzQ3JlYXRlfSApIHsKCiAgICAgICAgIyBMb2NhbCByZXN1bHRzLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IENvbmZpZ0l0ZW1JRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e051bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IE51bWJlciB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvciBpcyB1bmRlZmluZWQuIiwKICAgICAgICApOwoKICAgICAgICAjIFJlcXVlc3RlciByZXN1bHRzLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgQ29uZmlnSXRlbUlEIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e051bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBOdW1iZXIgd2l0aCBUcnVlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0Vycm9yfSwKICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBFcnJvciBpcyB1bmRlZmluZWQuIiwKICAgICAgICApOwoKICAgICAgICAjIEdldCB0aGUgQ29uZmlnSXRlbSBlbnRyeSAoZnJvbSBsb2NhbCByZXN1bHQpLgogICAgICAgIG15ICRMb2NhbFZlcnNpb25EYXRhID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSgkTG9jYWxWZXJzaW9uRGF0YSksCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gY3JlYXRlZCBsb2NhbCB2ZXJzaW9uIHN0cmN0dXJlIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CgogICAgICAgICMgR2V0IHRoZSBjb25maWcgaXRlbSBlbnRyeSAoZnJvbSByZXF1ZXN0ZXIgcmVzdWx0KS4KICAgICAgICBteSAkUmVxdWVzdGVyVmVyc2lvbkRhdGEgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSgkUmVxdWVzdGVyVmVyc2lvbkRhdGEpLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGNyZWF0ZWQgcmVxdWVzdGVyIGNvbmZpZyBpdGVtIHN0cmN0dXJlIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgY29uZmlnIGl0ZW0gYXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSB0ZXN0LgogICAgICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhOdW1iZXIgQ2xhc3MgTmFtZSBJbmNpU3RhdGUgRGVwbFN0YXRlIERlcGxTdGF0ZVR5cGUpKSB7CiAgICAgICAgICAgIGlmICggJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntDb25maWdJdGVtfS0+eyRBdHRyaWJ1dGV9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRMb2NhbFZlcnNpb25EYXRhLT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntDb25maWdJdGVtfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgQ29uZmlnSXRlbS0+JEF0dHJpYnV0ZSIgLiAiIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0NvbmZpZ0l0ZW19LT57Q0lYTUxEYXRhfSApIHsKCiAgICAgICAgICAgICMgVHJhbnNmb3JtIFhNTCBkYXRhIHRvIGEgY29tcGFyYWJsZSBmb3JtYXQuCiAgICAgICAgICAgIG15ICREZWZpbml0aW9uID0gJExvY2FsVmVyc2lvbkRhdGEtPntYTUxEZWZpbml0aW9ufTsKCiAgICAgICAgICAgICMgTWFrZSBhIGRlZXAgY29weSB0byBhdm9pZCBjaGFuZ2luZyB0aGUgcmVzdWx0LgogICAgICAgICAgICBteSAkQ2xvbmVkWE1MRGF0YSA9IFN0b3JhYmxlOjpkY2xvbmUoICRMb2NhbFZlcnNpb25EYXRhLT57WE1MRGF0YX0gKTsKCiAgICAgICAgICAgIG15ICRGb3JtYXRlZFhNTERhdGEgPSAkTG9jYWxPYmplY3QtPkludmVydEZvcm1hdFhNTERhdGEoCiAgICAgICAgICAgICAgICBYTUxEYXRhID0+ICRDbG9uZWRYTUxEYXRhLT5bMV0tPntWZXJzaW9ufSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRSZXBsYWNlZFhNTERhdGEgPSAkTG9jYWxPYmplY3QtPkludmVydFJlcGxhY2VYTUxEYXRhKAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICA9PiAkRm9ybWF0ZWRYTUxEYXRhLAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmaW5pdGlvbiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgQ29tcGFyZSBYTUwgZGF0YS4KICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFJlcGxhY2VkWE1MRGF0YSwKICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57Q29uZmlnSXRlbX0tPntDSVhNTERhdGF9LAogICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBDb25maWdJdGVtLT5DSVhNTERhdGEgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRUZXN0LT57UmVxdWVzdERhdGF9LT57Q29uZmlnSXRlbX0tPntBdHRhY2htZW50fSApIHsKCiAgICAgICAgICAgICMgQ2hlY2sgYXR0YWNobWVudHMuCiAgICAgICAgICAgIG15IEBBdHRhY2htZW50TGlzdCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudExpc3QoCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15IEBBdHRhY2htZW50czsKICAgICAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICAgICAgZm9yIG15ICRGaWxlTmFtZSAoQEF0dGFjaG1lbnRMaXN0KSB7CiAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRGaWxlTmFtZTsKCiAgICAgICAgICAgICAgICBteSAkQXR0YWNobWVudCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgPT4gJEZpbGVOYW1lLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIE5leHQgaWYgbm90IGF0dGFjaG1lbnQuCiAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCRBdHRhY2htZW50KTsKCiAgICAgICAgICAgICAgICAjIENvbnZlcnQgY29udGVudCB0byBiYXNlNjQuCiAgICAgICAgICAgICAgICAkQXR0YWNobWVudC0+e0NvbnRlbnR9ID0gZW5jb2RlX2Jhc2U2NCggJEF0dGFjaG1lbnQtPntDb250ZW50fSwgJycgKTsKCiAgICAgICAgICAgICAgICAjIERlbGV0ZSBub3QgbmVlZGVkIGF0dGlidXRlcy4KICAgICAgICAgICAgICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhQcmVmZXJlbmNlcyBGaWxlc2l6ZSBUeXBlKSkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkQXR0YWNobWVudC0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHVzaCBAQXR0YWNobWVudHMsICRBdHRhY2htZW50OwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSBAUmVxdWVzdGVkQXR0YWNobWVudHM7CiAgICAgICAgICAgIGlmICggcmVmICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXR0YWNobWVudH0gZXEgJ0hBU0gnICkgewogICAgICAgICAgICAgICAgcHVzaCBAUmVxdWVzdGVkQXR0YWNobWVudHMsICRUZXN0LT57UmVxdWVzdERhdGF9LT57Q29uZmlnSXRlbX0tPntBdHRhY2htZW50fTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIEBSZXF1ZXN0ZWRBdHRhY2htZW50cyA9IEB7ICRUZXN0LT57UmVxdWVzdERhdGF9LT57Q29uZmlnSXRlbX0tPntBdHRhY2htZW50fSB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICAgICAgXEBSZXF1ZXN0ZWRBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgQ29uZmlnSXRlbS0+QXR0YWNobWVudCBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgUmVtb3ZlIGF0dHJpYnV0ZXMgdGhhdCBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBsb2NhbCBhbmQgcmVxdWVzdGVyIHJlc3BvbnNlcy4KICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoCiAgICAgICAgICAgIHF3KENvbmZpZ0l0ZW1JRCBOdW1iZXIgQ3JlYXRlVGltZSBWZXJzaW9uSUQgTGFzdFZlcnNpb25JRCkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgZGVsZXRlICRMb2NhbFZlcnNpb25EYXRhLT57JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIGRlbGV0ZSAkUmVxdWVzdGVyVmVyc2lvbkRhdGEtPnskQXR0cmlidXRlfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgJExvY2FsVmVyc2lvbkRhdGEsCiAgICAgICAgICAgICRSZXF1ZXN0ZXJWZXJzaW9uRGF0YSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCBjb25maWcgaXRlbSByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSB0aGUgY29uZmlnIGl0ZW1zLgogICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntDb25maWdJdGVtSUR9CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICBteSAkQ29uZmlnSXRlbURlbGV0ZSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgU2FuaXR5IGNoZWNrLgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDb25maWdJdGVtRGVsZXRlLAogICAgICAgICAgICAgICAgIkNvbmZpZ0l0ZW1EZWxldGUoKSBzdWNjZXNzZnVsIGZvciBDb25maWdJdGVtIElEICRDb25maWdJdGVtSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIFRlc3RzIHN1cHBvc2VkIHRvIGZhaWwuCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IENvbmZpZ0l0ZW1JRCB3aXRoIGZhbHNlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e051bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IE51bWJlciB3aXRoIGZhbHNlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfSwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZERhdGF9LT57RGF0YX0tPntFcnJvcn0tPntFcnJvckNvZGV9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvckNvZGUgbWF0Y2hlZCB3aXRoIGV4cGVjdGVkIGxvY2FsIGNhbGwgcmVzdWx0LiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZERhdGF9LT57RGF0YX0tPntFcnJvcn0tPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvck1lc3NhZ2UgbWF0Y2hlZCB3aXRoIGV4cGVjdGVkIGxvY2FsIGNhbGwgcmVzdWx0LiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfQogICAgICAgICAgICAgICAgLiAnOiAnCiAgICAgICAgICAgICAgICAuICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIChvdXRzaWRlIERhdGEgaGFzaCkgbWF0Y2hlZCB3aXRoIGNvbmNhdGVuYXRpb24iCiAgICAgICAgICAgICAgICAuICIgb2YgRXJyb3JDb2RlIGFuZCBFcnJvck1lc3NhZ2Ugd2l0aGluIERhdGEgaGFzaC4iLAogICAgICAgICk7CgogICAgICAgICMgUmVtb3ZlIEVycm9yTWVzc2FnZSBwYXJhbWV0ZXIgZnJvbSBkaXJlY3QgY2FsbC4KICAgICAgICAjIFJlc3VsdCB0byBiZSBjb25zaXN0ZW50IHdpdGggU09BUCBjYWxsIHJlc3VsdC4KICAgICAgICBpZiAoICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gKSB7CiAgICAgICAgICAgIGRlbGV0ZSAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9OwogICAgICAgIH0KCiAgICAgICAgIyBTYW5pdHkgY2hlY2suCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvTWVzc2FnZSAob3V0c2lzZSBEYXRhIGhhc2gpIGdvdCByZW1vdmVkIHRvIGNvbXBhcmUiCiAgICAgICAgICAgICAgICAuICIgbG9jYWwgYW5kIHJlbW90ZSB0ZXN0cy4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaGVkIHdpdGggcmVtb3RlIHJlc3VsdC4iLAogICAgICAgICk7CiAgICB9Cn0KCiMgQ2xlYW4gdXAgd2Vic2VydmljZS4KbXkgJFdlYnNlcnZpY2VEZWxldGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZURlbGV0ZSgKICAgIElEICAgICA9PiAkV2Vic2VydmljZUlELAogICAgVXNlcklEID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VEZWxldGUsCiAgICAiRGVsZXRlZCBXZWJzZXJ2aWNlICRXZWJzZXJ2aWNlSUQiLAopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcjsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtQ3JlYXRlOwp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1HZXQ7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29uZmlnSXRlbURlbGV0ZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBzZXQgVXNlcklEIHRvIHJvb3QKJFNlbGYtPntVc2VySUR9ID0gMTsKCiMgaGVscGVyIG9iamVjdAojIHNraXAgU1NMIGNlcnRpY2lhdGUgdmVyaWZpY2F0aW9uCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFNraXBTU0xWZXJpZnkgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCm15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKIyBjaGVjayBpZiBTU0wgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGlzIGRpc2FibGVkCiRTZWxmLT5JcygKICAgICRFTlZ7UEVSTF9MV1BfU1NMX1ZFUklGWV9IT1NUTkFNRX0sCiAgICAwLAogICAgJ0Rpc2FibGVkIFNTTCBjZXJ0aXRpY2F0ZXMgdmVyaWZpY2F0aW9uIGluIGVudmlyb25tZW50JywKKTsKCiMgY3JlYXRlIENvbmZpZ0l0ZW0gb2JqZWN0Cm15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgpteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlck9iamVjdC0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKIyBjcmVhdGUgd2Vic2VydmljZSBvYmplY3QKbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwokU2VsZi0+SXMoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAogICAgcmVmICRXZWJzZXJ2aWNlT2JqZWN0LAogICAgIkNyZWF0ZSB3ZWJzZXJ2aWNlIG9iamVjdCIsCik7CgojIHNldCB3ZWJzZXJ2aWNlIG5hbWUKbXkgJFdlYnNlcnZpY2VOYW1lID0gJy1UZXN0LScgLiAkUmFuZG9tSUQ7CgpteSAkV2Vic2VydmljZUlEID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VBZGQoCiAgICBOYW1lICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgfSwKICAgICAgICBQcm92aWRlciA9PiB7CiAgICAgICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlSUQsCiAgICAiQWRkZWQgV2Vic2VydmljZSIsCik7CgojIGdldCByZW1vdGUgaG9zdCB3aXRoIHNvbWUgcHJlY2F1dGlvbnMgZm9yIGNlcnRhaW4gdW5pdCB0ZXN0IHN5c3RlbXMKbXkgJEhvc3Q7Cm15ICRGUUROID0gJENvbmZpZ09iamVjdC0+R2V0KCdGUUROJyk7CgojIHRyeSB0byByZXNvbHZlIGZxZG4gaG9zdAppZiAoICRGUUROIG5lICd5b3VyaG9zdC5leGFtcGxlLmNvbScgJiYgZ2V0aG9zdGJ5bmFtZSgkRlFETikgKSB7CiAgICAkSG9zdCA9ICRGUUROOwp9CgojIHRyeSB0byByZXNvbHZlIGxvY2FsaG9zdCBpbnN0ZWFkCmlmICggISRIb3N0ICYmIGdldGhvc3RieW5hbWUoJ2xvY2FsaG9zdCcpICkgewogICAgJEhvc3QgPSAnbG9jYWxob3N0JzsKfQoKIyB1c2UgaGFyZGNvZGVkIGxvY2FsaG9zdCBpcCBhZGRyZXNzCmlmICggISRIb3N0ICkgewogICAgJEhvc3QgPSAnMTI3LjAuMC4xJzsKfQoKIyBwcmVwYXJlIHdlYnNlcnZpY2UgY29uZmlnCm15ICRSZW1vdGVTeXN0ZW0gPQogICAgJENvbmZpZ09iamVjdC0+R2V0KCdIdHRwVHlwZScpCiAgICAuICc6Ly8nCiAgICAuICRIb3N0CiAgICAuICcvJwogICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJykKICAgIC4gJy9ucGgtZ2VuZXJpY2ludGVyZmFjZS5wbC9XZWJzZXJ2aWNlSUQvJwogICAgLiAkV2Vic2VydmljZUlEOwoKbXkgJFdlYnNlcnZpY2VDb25maWcgPSB7CgogICAgIyAgICBOYW1lID0+ICcnLAogICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAnVGVzdCBmb3IgQ29uZmlnSXRlbSBDb25uZWN0b3IgdXNpbmcgU09BUCB0cmFuc3BvcnQgYmFja2VuZC4nLAogICAgRGVidWdnZXIgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBQcm92aWRlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMF8wMDBfMDAwLAogICAgICAgICAgICAgICAgTmFtZVNwYWNlID0+ICdodHRwOi8vb3Rycy5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbURlbGV0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDb25maWdJdGVtOjpDb25maWdJdGVtRGVsZXRlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDb25maWdJdGVtOjpDb25maWdJdGVtR2V0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDb25maWdJdGVtOjpDb25maWdJdGVtQ3JlYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdTZXNzaW9uOjpTZXNzaW9uQ3JlYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFJlcXVlc3RlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmNvZGluZyAgPT4gJ1VURi04JywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgSW52b2tlciA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1EZWxldGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCn07CgojIHVwZGF0ZSB3ZWJzZXJ2aWNlIHdpdGggcmVhbCBjb25maWcKbXkgJFdlYnNlcnZpY2VVcGRhdGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZVVwZGF0ZSgKICAgIElEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIE5hbWUgICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnICA9PiAkV2Vic2VydmljZUNvbmZpZywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZVVwZGF0ZSwKICAgICJVcGRhdGVkIFdlYnNlcnZpY2UgJFdlYnNlcnZpY2VJRCAtICRXZWJzZXJ2aWNlTmFtZSIsCik7CgojIGRlYnVnZ2VyIG9iamVjdApteSAkRGVidWdnZXJPYmplY3QgPSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyLT5uZXcoCiAgICBEZWJ1Z2dlckNvbmZpZyA9PiB7CiAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgfSwKICAgIFdlYnNlcnZpY2VJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBDb21tdW5pY2F0aW9uVHlwZSA9PiAnUHJvdmlkZXInLAopOwokU2VsZi0+SXMoCiAgICByZWYgJERlYnVnZ2VyT2JqZWN0LAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXInLAogICAgJ0RlYnVnZ2VyT2JqZWN0IGluc3RhbmNpYXRlIGNvcnJlY3RseScsCik7CgojIEdldCBTZXNzaW9uSUQKIyBjcmVhdGUgcmVxdWVzdGVyIG9iamVjdApteSAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CiRTZWxmLT5JcygKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICByZWYgJFJlcXVlc3RlclNlc3Npb25PYmplY3QsCiAgICAiU2Vzc2lvbklEIC0gQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QiLAopOwoKIyBjcmVhdGUgYSBuZXcgdXNlciBmb3IgY3VycmVudCB0ZXN0Cm15ICRVc2VyTG9naW4gPSAkSGVscGVyT2JqZWN0LT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdpdHNtLWNvbmZpZ2l0ZW0nIF0sCik7CgpteSAkUGFzc3dvcmQgPSAkVXNlckxvZ2luOwoKIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2Vic2VydmljZQpteSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdCA9ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LT5SdW4oCiAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgIEludm9rZXIgICAgICA9PiAnU2Vzc2lvbkNyZWF0ZScsCiAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICB9LAopOwoKbXkgJE5ld1Nlc3Npb25JRCA9ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0LT57RGF0YX0tPntTZXNzaW9uSUR9OwoKI0NvbmZpZ0l0ZW10cyBjb250YWluZXIgKHVzZWZ1bGwgZm9yIGxvb2t1cCBjb21wYXJlKQpteSAlQWRkZWRDb25maWdJdGVtczsKbXkgQEFkZGVkQ29uZmlnSXRlbUlEczsKCiMgQ29uZmlnSXRlbSBzZXR0aW5ncwpteSBAQ29uZmlnSXRlbXMgPSAoCiAgICB7CiAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0ktMS0nIC4gJFJhbmRvbUlELAogICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgTklDID0+IHsKICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0xvMCcsCiAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0ktMi0nIC4gJFJhbmRvbUlELAogICAgICAgIERlcGxTdGF0ZSA9PiAnUmVwYWlyJywKICAgICAgICBJbmNpU3RhdGUgPT4gJ1dhcm5pbmcnLAogICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgIFZlbmRvciAgICAgICAgICA9PiAnTGVub3ZvJywKICAgICAgICAgICAgTW9kZWwgICAgICAgICAgID0+ICdUaGlua3BhZCcsCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICA9PiAnVGhpbmtwYWQgWDMwMCcsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnRGVza3RvcCcsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICBTZXJpYWxOdW1iZXIgICAgPT4gJ2FiYzEyMzQ1YWJjJywKICAgICAgICAgICAgT3BlcmF0aW5nU3lzdGVtID0+ICdDZW50T1MgNi4wJywKICAgICAgICAgICAgQ1BVICAgICAgICAgICAgID0+ICdJbnRlbCBDb3JlIGkzJywKICAgICAgICAgICAgUmFtICAgICAgICAgICAgID0+IFsKICAgICAgICAgICAgICAgIDQwMDAsCiAgICAgICAgICAgICAgICAyMDAwLAogICAgICAgICAgICBdLAogICAgICAgICAgICBIYXJkRGlzayA9PiB7CiAgICAgICAgICAgICAgICBIYXJkRGlzayA9PiAnL2RldicsCiAgICAgICAgICAgICAgICBDYXBhY2l0eSA9PiA1MDAwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRlFETiA9PiAnaG90cy5leGFtcGxlLmNvbScsCiAgICAgICAgICAgIE5JQyAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICBJUEFkZHJlc3MgID0+ICcxOTIuMTY4LjMwLjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgxJywKICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdZZXMnLAogICAgICAgICAgICAgICAgICAgIElQQWRkcmVzcyAgPT4gJzIwMC4zNC41Ni43OCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBHcmFwaGljQWRhcHRlciA9PiAnQVRJIFJhZGVvbiAzMDAnLAogICAgICAgICAgICBJbnN0YWxsRGF0ZSAgICA9PiAnMTk3Ny0xMi0xMicsCiAgICAgICAgICAgIE5vdGUgICAgICAgICAgID0+ICdUaGlzIGlzIGEgRGVtbyBDSScsCiAgICAgICAgfSwKICAgICAgICBBdHRhY2htZW50ID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaGJpQmxibU52WkdWa0lIUmxlSFE9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdNeSBUZXh0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhiaUJsYm1OdlpHVmtJSFJsZUhRPScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xJywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdNeSBUZXh0Mi50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIENsYXNzICAgICA9PiAnSGFyZHdhcmUnLAogICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJLTMtJyAuICRSYW5kb21JRCwKICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgIEluY2lTdGF0ZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgIFZlbmRvciAgICAgICA9PiAnSGFyZHdhcmUgVmVuZG9yJywKICAgICAgICAgICAgTW9kZWwgICAgICAgID0+ICdIYXJkd2FyZSBNb2RlbCcsCiAgICAgICAgICAgIERlc2NyaXB0aW9uICA9PiAnVGVzaXRuZyBIYW5yZHdhcmUnLAogICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ0NhbWVyYScsCiAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICBTZXJpYWxOdW1iZXIgPT4gJzEyM2FtYzQ1NicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgQ2xhc3MgICAgID0+ICdMb2NhdGlvbicsCiAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0ktNC0nIC4gJFJhbmRvbUlELAogICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgSW5jaVN0YXRlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0J1aWxkaW5nJywKICAgICAgICAgICAgUGhvbmUxICAgPT4gJzEyMycsCiAgICAgICAgICAgIFBob25lMiAgID0+ICc0NTYnLAogICAgICAgICAgICBGYXggICAgICA9PiAnNzg5JywKICAgICAgICAgICAgJ0UtTWFpbCcgPT4gJ3NvZW1vbmVAZXhhbXBsZS5jb20nLAogICAgICAgICAgICBBZGRyZXNzICA9PiAnU29tZSBhZGRyZXNzJywKICAgICAgICAgICAgTm90ZSAgICAgPT4gJ1RoaXMgaXMgYSB0ZXN0IGxvY2F0aW9uJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBDbGFzcyAgICAgPT4gJ05ldHdvcmsnLAogICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJLTUtJyAuICRSYW5kb21JRCwKICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgIEluY2lTdGF0ZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+ICdOZXR3b3JrIENJIGZvciB0ZXN0aW5nJywKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgPT4gJ0xBTicsCiAgICAgICAgICAgIE5ldHdvcmtBZGRyZXNzID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOZXR3b3JrQWRkcmVzcyA9PiAnMTkyLjEuMS4xJywKICAgICAgICAgICAgICAgICAgICBTdWJuZXRNYXNrICAgICA9PiAnMjU1LjI1NS4yNTUuMCcsCiAgICAgICAgICAgICAgICAgICAgR2F0ZXdheSAgICAgICAgPT4gJzE5Mi4xLjEuMjU0JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmV0d29ya0FkZHJlc3MgPT4gJzE5Mi4xLjUwLjEnLAogICAgICAgICAgICAgICAgICAgIFN1Ym5ldE1hc2sgICAgID0+ICcyNTUuMjU1LjI1NS4wJywKICAgICAgICAgICAgICAgICAgICBHYXRld2F5ICAgICAgICA9PiAnMTkyLjEuNTAuMjU0JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIE5vdGUgPT4gJ1RoaXMgaXMgYSB0ZXN0IENJJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBDbGFzcyAgICAgPT4gJ1NvZnR3YXJlJywKICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSS02LScgLiAkUmFuZG9tSUQsCiAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICBJbmNpU3RhdGUgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICBWZW5kb3IgICAgICAgPT4gJ1NvbWUgc29mdHdhcmUgdmVuZG9yJywKICAgICAgICAgICAgVmVyc2lvbiAgICAgID0+ICcxLjEuMScsCiAgICAgICAgICAgIERlc2NyaXB0aW9uICA9PiAnU29tZSBzb2Z0d2FyZSBkZXNjcmlwdGlvbicsCiAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnQWRtaW4gVG9vbCcsCiAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICBTZXJpYWxOdW1iZXIgPT4gJzEyM0FCQzQ1NicsCiAgICAgICAgICAgIExpY2VuY2VUeXBlICA9PiAnT3BlbiBTb3VyY2UnLAogICAgICAgICAgICBMaWNlbmNlS2V5ICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExpY2VuY2VLZXkgICAgID0+ICcxMjM0JywKICAgICAgICAgICAgICAgICAgICBRdWFudGl0eSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgRXhwaXJhdGlvbkRhdGUgPT4gJzE5NzctMTItMTInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMaWNlbmNlS2V5ICAgICA9PiAnNDU2NycsCiAgICAgICAgICAgICAgICAgICAgUXVhbnRpdHkgICAgICAgPT4gJzMnLAogICAgICAgICAgICAgICAgICAgIEV4cGlyYXRpb25EYXRlID0+ICcxOTc3LTEyLTI1JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIE1lZGlhID0+ICdEb3dubG9hZCcsCiAgICAgICAgICAgIE5vdGUgID0+ICdUaGlzIGlzIGEgdGVzdCBDSScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgQ2xhc3MgICAgID0+ICdTb2Z0d2FyZScsCiAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0ktNy0nIC4gJFJhbmRvbUlELAogICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgSW5jaVN0YXRlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgVmVuZG9yICAgICAgID0+ICdTb21lIHNvZnR3YXJlIHZlbmRvcicsCiAgICAgICAgICAgIFZlcnNpb24gICAgICA9PiAnMS4xLjEnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgPT4gJ1NvbWUgc29mdHdhcmUgZGVzY3JpcHRpb24nLAogICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ0FkbWluIFRvb2wnLAogICAgICAgICAgICBPd25lciAgICAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgU2VyaWFsTnVtYmVyID0+ICcxMjNBQkM0NTYnLAogICAgICAgICAgICBMaWNlbmNlVHlwZSAgPT4gJ09wZW4gU291cmNlJywKICAgICAgICAgICAgTGljZW5jZUtleSAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMaWNlbmNlS2V5ICAgICA9PiAnMTIzNCcsCiAgICAgICAgICAgICAgICAgICAgUXVhbnRpdHkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgIEV4cGlyYXRpb25EYXRlID0+ICcxOTc3LTEyLTEyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGljZW5jZUtleSAgICAgPT4gJzQ1NjcnLAogICAgICAgICAgICAgICAgICAgIFF1YW50aXR5ICAgICAgID0+ICczJywKICAgICAgICAgICAgICAgICAgICBFeHBpcmF0aW9uRGF0ZSA9PiAnMTk3Ny0xMi0yNScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBNZWRpYSA9PiAnRG93bmxvYWQnLAogICAgICAgICAgICBOb3RlICA9PiAnVGhpcyBpcyBhIHRlc3QgQ0knLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIENsYXNzICAgICA9PiAnU29mdHdhcmUnLAogICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJLTgtJyAuICRSYW5kb21JRCwKICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgIEluY2lTdGF0ZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgIFZlbmRvciAgICAgICA9PiAnU29tZSBzb2Z0d2FyZSB2ZW5kb3InLAogICAgICAgICAgICBWZXJzaW9uICAgICAgPT4gJzEuMS4xJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gID0+ICdTb21lIHNvZnR3YXJlIGRlc2NyaXB0aW9uJywKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdBZG1pbiBUb29sJywKICAgICAgICAgICAgT3duZXIgICAgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIFNlcmlhbE51bWJlciA9PiAnMTIzQUJDNDU2JywKICAgICAgICAgICAgTGljZW5jZVR5cGUgID0+ICdPcGVuIFNvdXJjZScsCiAgICAgICAgICAgIExpY2VuY2VLZXkgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGljZW5jZUtleSAgICAgPT4gJzEyMzQnLAogICAgICAgICAgICAgICAgICAgIFF1YW50aXR5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICBFeHBpcmF0aW9uRGF0ZSA9PiAnMTk3Ny0xMi0xMicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExpY2VuY2VLZXkgICAgID0+ICc0NTY3JywKICAgICAgICAgICAgICAgICAgICBRdWFudGl0eSAgICAgICA9PiAnMycsCiAgICAgICAgICAgICAgICAgICAgRXhwaXJhdGlvbkRhdGUgPT4gJzE5NzctMTItMjUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgTWVkaWEgPT4gJ0Rvd25sb2FkJywKICAgICAgICAgICAgTm90ZSAgPT4gJ1RoaXMgaXMgYSB0ZXN0IENJJywKICAgICAgICB9LAogICAgfSwKKTsKCm15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwpteSAkQ2xhc3NMaXN0ICAgICAgICAgICAgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKKTsKbXkgJVJldmVyc2VDbGFzc0xpc3QgPSByZXZlcnNlICV7JENsYXNzTGlzdH07Cm15ICRJbmNpU3RhdGVMaXN0ICAgID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKKTsKbXkgJVJldmVyc2VJbmNpU3RhdGVMaXN0ID0gcmV2ZXJzZSAleyRJbmNpU3RhdGVMaXN0fTsKbXkgJERlcGxTdGF0ZUxpc3QgICAgICAgID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAopOwpteSAlUmV2ZXJzZURlcGxTdGF0ZUxpc3QgPSByZXZlcnNlICV7JERlcGxTdGF0ZUxpc3R9Owpmb3IgbXkgJENvbmZpZ0l0ZW0gKEBDb25maWdJdGVtcykgewoKICAgICMgbWFrZSBhIGRlZXAgY29weSB0byBhdm9pZCBjaGFuZ2luZyB0aGUgZGVmaW5pdGlvbgogICAgbXkgJENsb25lZENvbmZpZ0l0ZW0gPSBTdG9yYWJsZTo6ZGNsb25lKCRDb25maWdJdGVtKTsKCiAgICAjIGNyZWF0ZSBuZXcgY29uZmlnIGl0ZW0KICAgIG15ICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgICAgICBDbGFzc0lEID0+ICRSZXZlcnNlQ2xhc3NMaXN0eyAkQ29uZmlnSXRlbS0+e0NsYXNzfSB9LAogICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVja3MKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDb25maWdJdGVtSUQsCiAgICAgICAgIkFkZGVkIENvbmZpZ0l0ZW0gJENvbmZpZ0l0ZW1JRCIsCiAgICApOwoKICAgIG15ICREZWZpbml0aW9uRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uR2V0KAogICAgICAgIENsYXNzSUQgPT4gJFJldmVyc2VDbGFzc0xpc3R7ICRDb25maWdJdGVtLT57Q2xhc3N9IH0sCiAgICApOwoKICAgIG15ICRMb2NhbE9iamVjdCA9IEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtQ3JlYXRlLT5uZXcoCiAgICAgICAgRGVidWdnZXJPYmplY3QgPT4gJERlYnVnZ2VyT2JqZWN0LAogICAgICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICApOwoKICAgIG15ICRSZXBsYWNlZFhNTERhdGEgPSAkTG9jYWxPYmplY3QtPlJlcGxhY2VYTUxEYXRhKAogICAgICAgIFhNTERhdGEgICAgPT4gJENvbmZpZ0l0ZW0tPntDSVhNTERhdGF9LAogICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb25EYXRhLT57RGVmaW5pdGlvblJlZn0sCiAgICApOwoKICAgIG15ICRYTUxEYXRhID0gJExvY2FsT2JqZWN0LT5Gb3JtYXRYTUxEYXRhKAogICAgICAgIFhNTERhdGEgPT4gJFJlcGxhY2VkWE1MRGF0YSwKICAgICk7CgogICAgbXkgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIE5hbWUgICAgICAgICA9PiAkQ29uZmlnSXRlbS0+e05hbWV9LAogICAgICAgIERlZmluaXRpb25JRCA9PiAkRGVmaW5pdGlvbkRhdGEtPntEZWZpbml0aW9uSUR9LAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkUmV2ZXJzZURlcGxTdGF0ZUxpc3R7ICRDb25maWdJdGVtLT57RGVwbFN0YXRlfSB9LAogICAgICAgIEluY2lTdGF0ZUlEICA9PiAkUmV2ZXJzZUluY2lTdGF0ZUxpc3R7ICRDb25maWdJdGVtLT57SW5jaVN0YXRlfSB9LAogICAgICAgIFhNTERhdGEgICAgICA9PiAkWE1MRGF0YSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVja3MKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDb25maWdJdGVtSUQsCiAgICAgICAgIkFkZGVkIENvbmZpZ0l0ZW0gJENvbmZpZ0l0ZW1JRCIsCiAgICApOwoKICAgIG15ICRWZXJzaW9uSW5mbyA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgKTsKCiAgICAkU2VsZi0+SXNOb3REZWVwbHkoCiAgICAgICAgJFZlcnNpb25JbmZvLAogICAgICAgIHt9LAogICAgICAgICJBZGRlZCBDb25maWdJdGVtICRDb25maWdJdGVtSUQgLSBWZXJzaW9uIGlzIG5vdCBhbiBlbXB0eSBoYXNoIiwKICAgICk7CgogICAgIyByZW1lbWJlciB0aGUgY29uZmlnIGl0ZW0KICAgIGlmICgkQ29uZmlnSXRlbUlEKSB7CiAgICAgICAgJEFkZGVkQ29uZmlnSXRlbXN7JENvbmZpZ0l0ZW1JRH0gPSAkQ2xvbmVkQ29uZmlnSXRlbTsKICAgICAgICBwdXNoIEBBZGRlZENvbmZpZ0l0ZW1JRHMsICRDb25maWdJdGVtSUQ7CiAgICB9Cn0KCiMgYWN0dWFsIHRlc3RzIGZvciBDb25maWdJdGVtRGVsZXRlIG9wZXJhdGlvbgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0VtcHR5IFJlcXVlc3QnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0RlbGV0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7fSwKICAgICAgICBFeHBlY3RlZERhdGEgICA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbURlbGV0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbURlbGV0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdXcm9uZyBDb25maWdJdGVtSUQgZm9ybWF0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NEZWxldGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gewogICAgICAgICAgICAgICAgVGVzdDEgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbURlbGV0ZS5Xcm9uZ1N0cnVjdHVyZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1EZWxldGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgQ29uZmlnSXRlbUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NEZWxldGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJ05vdEV4aXN0ZW50JyAuICRSYW5kb21JRCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbURlbGV0ZS5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtRGVsZXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1dyb25nIENvbmZpZ0l0ZW1JRCBBcnJheScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzRGVsZXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+IFsgJ05vdEV4aXN0ZW50JyAuICRSYW5kb21JRCBdLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtRGVsZXRlLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1EZWxldGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBDb25maWdJdGVtSUQgMScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzRGVsZXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBZGRlZENvbmZpZ0l0ZW1JRHNbMF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gWyAkQWRkZWRDb25maWdJdGVtSURzWzBdIF0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1EZWxldGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgQ29uZmlnSXRlbUlEIDEgKHdhcyBhbHJlYWR5IGRlbGV0ZWQgYmVmb3JlKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzRGVsZXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBZGRlZENvbmZpZ0l0ZW1JRHNbMF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1EZWxldGUuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbURlbGV0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDb3JyZWN0IENvbmZpZ0l0ZW1JRCAyJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NEZWxldGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJEFkZGVkQ29uZmlnSXRlbUlEc1sxXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiBbICRBZGRlZENvbmZpZ0l0ZW1JRHNbMV0gXSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbURlbGV0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDb3JyZWN0IENvbmZpZ0l0ZW1JRCAzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NEZWxldGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJEFkZGVkQ29uZmlnSXRlbUlEc1syXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7fSwKICAgICAgICBPcGVyYXRpb24gICAgPT4gJ0NvbmZpZ0l0ZW1EZWxldGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBDb25maWdJdGVtSUQgNCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzRGVsZXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBZGRlZENvbmZpZ0l0ZW1JRHNbM10sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gWyAkQWRkZWRDb25maWdJdGVtSURzWzRdIF0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1EZWxldGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBDb25maWdJdGVtSUQgNScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzRGVsZXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBZGRlZENvbmZpZ0l0ZW1JRHNbNF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gWyAkQWRkZWRDb25maWdJdGVtSURzWzRdIF0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1EZWxldGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBDb25maWdJdGVtSUQgNicsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzRGVsZXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBZGRlZENvbmZpZ0l0ZW1JRHNbNV0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gWyAkQWRkZWRDb25maWdJdGVtSURzWzVdIF0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1EZWxldGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBDb25maWdJdGVtSUQgNy04JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NEZWxldGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gWwogICAgICAgICAgICAgICAgJEFkZGVkQ29uZmlnSXRlbUlEc1s2XSwKICAgICAgICAgICAgICAgICRBZGRlZENvbmZpZ0l0ZW1JRHNbN10sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gWwogICAgICAgICAgICAgICAgJEFkZGVkQ29uZmlnSXRlbUlEc1s2XSwKICAgICAgICAgICAgICAgICRBZGRlZENvbmZpZ0l0ZW1JRHNbN10sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1EZWxldGUnLAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBjcmVhdGUgbG9jYWwgb2JqZWN0CiAgICBteSAkTG9jYWxPYmplY3QgPSAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OiRUZXN0LT57T3BlcmF0aW9ufSItPm5ldygKICAgICAgICBEZWJ1Z2dlck9iamVjdCA9PiAkRGVidWdnZXJPYmplY3QsCiAgICAgICAgV2Vic2VydmljZUlEICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6JFRlc3QtPntPcGVyYXRpb259IiwKICAgICAgICByZWYgJExvY2FsT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ3JlYXRlIGxvY2FsIG9iamVjdCIsCiAgICApOwoKICAgICMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwogICAgJFNlbGYtPklzKAogICAgICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJPYmplY3QsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCiAgICApOwoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKICAgIG15ICRSZXF1ZXN0ZXJSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJE5ld1Nlc3Npb25JRCwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIiwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntTdWNjZXNzfSwKICAgICAgICAkVGVzdC0+e1N1Y2Nlc3NSZXF1ZXN0fSwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciBzdWNjZXNzZnVsIHJlc3VsdCIsCiAgICApOwoKICAgIGlmICggJFRlc3QtPntTdWNjZXNzRGVsZXRlfSApIHsKCiAgICAgICAgIyByZXF1ZXN0ZXIgcmVzdWx0cwogICAgICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBDb25maWdJdGVtSUQgaXMgbm90IHVuZGVmaW5lZC4iLAogICAgICAgICk7CgogICAgICAgIG15ICRFeHBlY3RlZFJlc3VsdFR5cGUgPSByZWYgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntDb25maWdJdGVtSUR9OwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHJlZiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICAkRXhwZWN0ZWRSZXN1bHRUeXBlLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgQ29uZmlnSXRlbUlEIHJlZmVyZW5jZS4iLAogICAgICAgICk7CgogICAgICAgIGlmICggJEV4cGVjdGVkUmVzdWx0VHlwZSBlcSAnQVJSQVknICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIElzQXJyYXlSZWZXaXRoRGF0YSggJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEfSApLAogICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IENvbmZpZ0l0ZW1JRCByZWZlcmVuY2UgaXMgbm90IGVtcHR5LiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgdGVzdHMgc3VwcG9zZWQgdG8gZmFpbAogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgQ29uZmlnSXRlbUlEIHdpdGggZmFsc2UuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfSwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZERhdGF9LT57RGF0YX0tPntFcnJvcn0tPntFcnJvckNvZGV9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgRXJyb3JDb2RlIG1hdGNoZWQgd2l0aCBleHBlY3RlZCBjYWxsIHJlc3VsdC4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBFcnJvck1lc3NhZ2Ugd2l0aCB0cnVlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgRXJyb3JNZXNzYWdlIGlzIG5vdCBlbXB0eS4iLAogICAgICAgICk7CiAgICB9Cn0gICAgI2VuZCBsb29wCgojIGNsZWFuIHVwCgojIGNsZWFuIHVwIHdlYnNlcnZpY2UKbXkgJFdlYnNlcnZpY2VEZWxldGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZURlbGV0ZSgKICAgIElEICAgICA9PiAkV2Vic2VydmljZUlELAogICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZURlbGV0ZSwKICAgICJEZWxldGVkIFdlYnNlcnZpY2UgJFdlYnNlcnZpY2VJRCIsCik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcjsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtQ3JlYXRlOwp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1HZXQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCiMgc2V0IFVzZXJJRCB0byByb290CiRTZWxmLT57VXNlcklEfSA9IDE7CgojIGhlbHBlciBvYmplY3QKIyBza2lwIFNTTCBjZXJ0aWNpYXRlIHZlcmlmaWNhdGlvbgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBTa2lwU1NMVmVyaWZ5ID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCk7CgpteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiMgY2hlY2sgaWYgU1NMIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBpcyBkaXNhYmxlZAokU2VsZi0+SXMoCiAgICAkRU5We1BFUkxfTFdQX1NTTF9WRVJJRllfSE9TVE5BTUV9LAogICAgMCwKICAgICdEaXNhYmxlZCBTU0wgY2VydGl0aWNhdGVzIHZlcmlmaWNhdGlvbiBpbiBlbnZpcm9ubWVudCcsCik7CgojIGNyZWF0ZSBDb25maWdJdGVtIG9iamVjdApteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiMgY3JlYXRlIHdlYnNlcnZpY2Ugb2JqZWN0Cm15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJywKICAgIHJlZiAkV2Vic2VydmljZU9iamVjdCwKICAgICJDcmVhdGUgd2Vic2VydmljZSBvYmplY3QiLAopOwoKIyBzZXQgd2Vic2VydmljZSBuYW1lCm15ICRXZWJzZXJ2aWNlTmFtZSA9ICctVGVzdC0nIC4gJFJhbmRvbUlEOwoKbXkgJFdlYnNlcnZpY2VJRCA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlQWRkKAogICAgTmFtZSAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyA9PiB7CiAgICAgICAgRGVidWdnZXIgPT4gewogICAgICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIH0sCiAgICAgICAgUHJvdmlkZXIgPT4gewogICAgICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZUlELAogICAgIkFkZGVkIFdlYnNlcnZpY2UiLAopOwoKIyBnZXQgcmVtb3RlIGhvc3Qgd2l0aCBzb21lIHByZWNhdXRpb25zIGZvciBjZXJ0YWluIHVuaXQgdGVzdCBzeXN0ZW1zCm15ICRIb3N0OwpteSAkRlFETiA9ICRDb25maWdPYmplY3QtPkdldCgnRlFETicpOwoKIyB0cnkgdG8gcmVzb2x2ZSBmcWRuIGhvc3QKaWYgKCAkRlFETiBuZSAneW91cmhvc3QuZXhhbXBsZS5jb20nICYmIGdldGhvc3RieW5hbWUoJEZRRE4pICkgewogICAgJEhvc3QgPSAkRlFETjsKfQoKIyB0cnkgdG8gcmVzb2x2ZSBsb2NhbGhvc3QgaW5zdGVhZAppZiAoICEkSG9zdCAmJiBnZXRob3N0YnluYW1lKCdsb2NhbGhvc3QnKSApIHsKICAgICRIb3N0ID0gJ2xvY2FsaG9zdCc7Cn0KCiMgdXNlIGhhcmRjb2RlZCBsb2NhbGhvc3QgaXAgYWRkcmVzcwppZiAoICEkSG9zdCApIHsKICAgICRIb3N0ID0gJzEyNy4wLjAuMSc7Cn0KCiMgcHJlcGFyZSB3ZWJzZXJ2aWNlIGNvbmZpZwpteSAkUmVtb3RlU3lzdGVtID0KICAgICRDb25maWdPYmplY3QtPkdldCgnSHR0cFR5cGUnKQogICAgLiAnOi8vJwogICAgLiAkSG9zdAogICAgLiAnLycKICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpCiAgICAuICcvbnBoLWdlbmVyaWNpbnRlcmZhY2UucGwvV2Vic2VydmljZUlELycKICAgIC4gJFdlYnNlcnZpY2VJRDsKCm15ICRXZWJzZXJ2aWNlQ29uZmlnID0gewoKICAgICMgICAgTmFtZSA9PiAnJywKICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgJ1Rlc3QgZm9yIENvbmZpZ0l0ZW0gQ29ubmVjdG9yIHVzaW5nIFNPQVAgdHJhbnNwb3J0IGJhY2tlbmQuJywKICAgIERlYnVnZ2VyID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgUHJvdmlkZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMTBfMDAwXzAwMCwKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ29uZmlnSXRlbTo6Q29uZmlnSXRlbUdldCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ29uZmlnSXRlbTo6Q29uZmlnSXRlbUNyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnU2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBSZXF1ZXN0ZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdHJzLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5jb2RpbmcgID0+ICdVVEYtOCcsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEludm9rZXIgPT4gewogICAgICAgICAgICBDb25maWdJdGVtR2V0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZXNzaW9uQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAp9OwoKIyB1cGRhdGUgd2Vic2VydmljZSB3aXRoIHJlYWwgY29uZmlnCm15ICRXZWJzZXJ2aWNlVXBkYXRlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VVcGRhdGUoCiAgICBJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBOYW1lICAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyAgPT4gJFdlYnNlcnZpY2VDb25maWcsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VVcGRhdGUsCiAgICAiVXBkYXRlZCBXZWJzZXJ2aWNlICRXZWJzZXJ2aWNlSUQgLSAkV2Vic2VydmljZU5hbWUiLAopOwoKIyBkZWJ1Z2dlciBvYmplY3QKbXkgJERlYnVnZ2VyT2JqZWN0ID0gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlci0+bmV3KAogICAgRGVidWdnZXJDb25maWcgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBXZWJzZXJ2aWNlSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgQ29tbXVuaWNhdGlvblR5cGUgPT4gJ1Byb3ZpZGVyJywKKTsKJFNlbGYtPklzKAogICAgcmVmICREZWJ1Z2dlck9iamVjdCwKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyJywKICAgICdEZWJ1Z2dlck9iamVjdCBpbnN0YW5jaWF0ZSBjb3JyZWN0bHknLAopOwoKIyBHZXQgU2Vzc2lvbklECiMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKbXkgJFJlcXVlc3RlclNlc3Npb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwokU2VsZi0+SXMoCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgcmVmICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LAogICAgIlNlc3Npb25JRCAtIENyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0IiwKKTsKCiMgY3JlYXRlIGEgbmV3IHVzZXIgZm9yIGN1cnJlbnQgdGVzdApteSAkVXNlckxvZ2luID0gJEhlbHBlck9iamVjdC0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnLCAnaXRzbS1jb25maWdpdGVtJyBdLAopOwoKbXkgJFBhc3N3b3JkID0gJFVzZXJMb2dpbjsKCiMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKbXkgJFJlcXVlc3RlclNlc3Npb25SZXN1bHQgPSAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdC0+UnVuKAogICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBJbnZva2VyICAgICAgPT4gJ1Nlc3Npb25DcmVhdGUnLAogICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgfSwKKTsKCm15ICROZXdTZXNzaW9uSUQgPSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdC0+e0RhdGF9LT57U2Vzc2lvbklEfTsKCiNDb25maWdJdGVtdHMgY29udGFpbmVyICh1c2VmdWxsIGZvciBsb29rdXAgY29tcGFyZSkKbXkgJUFkZGVkQ29uZmlnSXRlbXM7Cm15IEBBZGRlZENvbmZpZ0l0ZW1JRHM7CgojIENvbmZpZ0l0ZW0gc2V0dGluZ3MKbXkgQENvbmZpZ0l0ZW1zID0gKAogICAgewogICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJLTEtJyAuICRSYW5kb21JRCwKICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgIEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgIE5JQyA9PiB7CiAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdMbzAnLAogICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJLTItJyAuICRSYW5kb21JRCwKICAgICAgICBEZXBsU3RhdGUgPT4gJ1JlcGFpcicsCiAgICAgICAgSW5jaVN0YXRlID0+ICdXYXJuaW5nJywKICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICBWZW5kb3IgICAgICAgICAgPT4gJ0xlbm92bycsCiAgICAgICAgICAgIE1vZGVsICAgICAgICAgICA9PiAnVGhpbmtwYWQnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgPT4gJ1RoaW5rcGFkIFgzMDAnLAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJ0Rlc2t0b3AnLAogICAgICAgICAgICBPd25lciAgICAgICAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgU2VyaWFsTnVtYmVyICAgID0+ICdhYmMxMjM0NWFiYycsCiAgICAgICAgICAgIE9wZXJhdGluZ1N5c3RlbSA9PiAnQ2VudE9TIDYuMCcsCiAgICAgICAgICAgIENQVSAgICAgICAgICAgICA9PiAnSW50ZWwgQ29yZSBpMycsCiAgICAgICAgICAgIFJhbSAgICAgICAgICAgICA9PiBbCiAgICAgICAgICAgICAgICA0MDAwLAogICAgICAgICAgICAgICAgMjAwMCwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSGFyZERpc2sgPT4gewogICAgICAgICAgICAgICAgSGFyZERpc2sgPT4gJy9kZXYnLAogICAgICAgICAgICAgICAgQ2FwYWNpdHkgPT4gNTAwMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEZRRE4gPT4gJ2hvdHMuZXhhbXBsZS5jb20nLAogICAgICAgICAgICBOSUMgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgSVBBZGRyZXNzICA9PiAnMTkyLjE2OC4zMC4xJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMScsCiAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnWWVzJywKICAgICAgICAgICAgICAgICAgICBJUEFkZHJlc3MgID0+ICcyMDAuMzQuNTYuNzgnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgR3JhcGhpY0FkYXB0ZXIgPT4gJ0FUSSBSYWRlb24gMzAwJywKICAgICAgICAgICAgSW5zdGFsbERhdGUgICAgPT4gJzE5NzctMTItMTInLAogICAgICAgICAgICBOb3RlICAgICAgICAgICA9PiAnVGhpcyBpcyBhIERlbW8gQ0knLAogICAgICAgIH0sCiAgICAgICAgQXR0YWNobWVudCA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhiaUJsYm1OdlpHVmtJSFJsZUhRPScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnTXkgVGV4dC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoYmlCbGJtTnZaR1ZrSUhSbGVIUT0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMScsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnTXkgVGV4dDIudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBDbGFzcyAgICAgPT4gJ0hhcmR3YXJlJywKICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSS0zLScgLiAkUmFuZG9tSUQsCiAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICBJbmNpU3RhdGUgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICBWZW5kb3IgICAgICAgPT4gJ0hhcmR3YXJlIFZlbmRvcicsCiAgICAgICAgICAgIE1vZGVsICAgICAgICA9PiAnSGFyZHdhcmUgTW9kZWwnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgPT4gJ1Rlc2l0bmcgSGFucmR3YXJlJywKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdDYW1lcmEnLAogICAgICAgICAgICBPd25lciAgICAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgU2VyaWFsTnVtYmVyID0+ICcxMjNhbWM0NTYnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIENsYXNzICAgICA9PiAnTG9jYXRpb24nLAogICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJLTQtJyAuICRSYW5kb21JRCwKICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgIEluY2lTdGF0ZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgIFR5cGUgICAgID0+ICdCdWlsZGluZycsCiAgICAgICAgICAgIFBob25lMSAgID0+ICcxMjMnLAogICAgICAgICAgICBQaG9uZTIgICA9PiAnNDU2JywKICAgICAgICAgICAgRmF4ICAgICAgPT4gJzc4OScsCiAgICAgICAgICAgICdFLU1haWwnID0+ICdzb2Vtb25lQGV4YW1wbGUuY29tJywKICAgICAgICAgICAgQWRkcmVzcyAgPT4gJ1NvbWUgYWRkcmVzcycsCiAgICAgICAgICAgIE5vdGUgICAgID0+ICdUaGlzIGlzIGEgdGVzdCBsb2NhdGlvbicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgQ2xhc3MgICAgID0+ICdOZXR3b3JrJywKICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSS01LScgLiAkUmFuZG9tSUQsCiAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICBJbmNpU3RhdGUgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiAnTmV0d29yayBDSSBmb3IgdGVzdGluZycsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgID0+ICdMQU4nLAogICAgICAgICAgICBOZXR3b3JrQWRkcmVzcyA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmV0d29ya0FkZHJlc3MgPT4gJzE5Mi4xLjEuMScsCiAgICAgICAgICAgICAgICAgICAgU3VibmV0TWFzayAgICAgPT4gJzI1NS4yNTUuMjU1LjAnLAogICAgICAgICAgICAgICAgICAgIEdhdGV3YXkgICAgICAgID0+ICcxOTIuMS4xLjI1NCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5ldHdvcmtBZGRyZXNzID0+ICcxOTIuMS41MC4xJywKICAgICAgICAgICAgICAgICAgICBTdWJuZXRNYXNrICAgICA9PiAnMjU1LjI1NS4yNTUuMCcsCiAgICAgICAgICAgICAgICAgICAgR2F0ZXdheSAgICAgICAgPT4gJzE5Mi4xLjUwLjI1NCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBOb3RlID0+ICdUaGlzIGlzIGEgdGVzdCBDSScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgQ2xhc3MgICAgID0+ICdTb2Z0d2FyZScsCiAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0ktNi0nIC4gJFJhbmRvbUlELAogICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgSW5jaVN0YXRlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgVmVuZG9yICAgICAgID0+ICdTb21lIHNvZnR3YXJlIHZlbmRvcicsCiAgICAgICAgICAgIFZlcnNpb24gICAgICA9PiAnMS4xLjEnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgPT4gJ1NvbWUgc29mdHdhcmUgZGVzY3JpcHRpb24nLAogICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ0FkbWluIFRvb2wnLAogICAgICAgICAgICBPd25lciAgICAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgU2VyaWFsTnVtYmVyID0+ICcxMjNBQkM0NTYnLAogICAgICAgICAgICBMaWNlbmNlVHlwZSAgPT4gJ09wZW4gU291cmNlJywKICAgICAgICAgICAgTGljZW5jZUtleSAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMaWNlbmNlS2V5ICAgICA9PiAnMTIzNCcsCiAgICAgICAgICAgICAgICAgICAgUXVhbnRpdHkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgIEV4cGlyYXRpb25EYXRlID0+ICcxOTc3LTEyLTEyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGljZW5jZUtleSAgICAgPT4gJzQ1NjcnLAogICAgICAgICAgICAgICAgICAgIFF1YW50aXR5ICAgICAgID0+ICczJywKICAgICAgICAgICAgICAgICAgICBFeHBpcmF0aW9uRGF0ZSA9PiAnMTk3Ny0xMi0yNScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBNZWRpYSA9PiAnRG93bmxvYWQnLAogICAgICAgICAgICBOb3RlICA9PiAnVGhpcyBpcyBhIHRlc3QgQ0knLAogICAgICAgIH0sCiAgICB9LAopOwoKbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7Cm15ICRDbGFzc0xpc3QgICAgICAgICAgICA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAopOwpteSAlUmV2ZXJzZUNsYXNzTGlzdCA9IHJldmVyc2UgJXskQ2xhc3NMaXN0fTsKbXkgJEluY2lTdGF0ZUxpc3QgICAgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAopOwpteSAlUmV2ZXJzZUluY2lTdGF0ZUxpc3QgPSByZXZlcnNlICV7JEluY2lTdGF0ZUxpc3R9OwpteSAkRGVwbFN0YXRlTGlzdCAgICAgICAgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCik7Cm15ICVSZXZlcnNlRGVwbFN0YXRlTGlzdCA9IHJldmVyc2UgJXskRGVwbFN0YXRlTGlzdH07CmZvciBteSAkQ29uZmlnSXRlbSAoQENvbmZpZ0l0ZW1zKSB7CgogICAgIyBtYWtlIGEgZGVlcCBjb3B5IHRvIGF2b2lkIGNoYW5naW5nIHRoZSBkZWZpbml0aW9uCiAgICBteSAkQ2xvbmVkQ29uZmlnSXRlbSA9IFN0b3JhYmxlOjpkY2xvbmUoJENvbmZpZ0l0ZW0pOwoKICAgICMgY3JlYXRlIG5ldyBjb25maWcgaXRlbQogICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgICAgIENsYXNzSUQgPT4gJFJldmVyc2VDbGFzc0xpc3R7ICRDb25maWdJdGVtLT57Q2xhc3N9IH0sCiAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2FuaXR5IGNoZWNrcwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAiQWRkZWQgQ29uZmlnSXRlbSAkQ29uZmlnSXRlbUlEIiwKICAgICk7CgogICAgbXkgJERlZmluaXRpb25EYXRhID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25HZXQoCiAgICAgICAgQ2xhc3NJRCA9PiAkUmV2ZXJzZUNsYXNzTGlzdHsgJENvbmZpZ0l0ZW0tPntDbGFzc30gfSwKICAgICk7CgogICAgbXkgJExvY2FsT2JqZWN0ID0gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1DcmVhdGUtPm5ldygKICAgICAgICBEZWJ1Z2dlck9iamVjdCA9PiAkRGVidWdnZXJPYmplY3QsCiAgICAgICAgV2Vic2VydmljZUlEICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgICk7CgogICAgbXkgJFJlcGxhY2VkWE1MRGF0YSA9ICRMb2NhbE9iamVjdC0+UmVwbGFjZVhNTERhdGEoCiAgICAgICAgWE1MRGF0YSAgICA9PiAkQ29uZmlnSXRlbS0+e0NJWE1MRGF0YX0sCiAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmaW5pdGlvbkRhdGEtPntEZWZpbml0aW9uUmVmfSwKICAgICk7CgogICAgbXkgJFhNTERhdGEgPSAkTG9jYWxPYmplY3QtPkZvcm1hdFhNTERhdGEoCiAgICAgICAgWE1MRGF0YSA9PiAkUmVwbGFjZWRYTUxEYXRhLAogICAgKTsKCiAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICRDb25maWdJdGVtLT57TmFtZX0sCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICREZWZpbml0aW9uRGF0YS0+e0RlZmluaXRpb25JRH0sCiAgICAgICAgRGVwbFN0YXRlSUQgID0+ICRSZXZlcnNlRGVwbFN0YXRlTGlzdHsgJENvbmZpZ0l0ZW0tPntEZXBsU3RhdGV9IH0sCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRSZXZlcnNlSW5jaVN0YXRlTGlzdHsgJENvbmZpZ0l0ZW0tPntJbmNpU3RhdGV9IH0sCiAgICAgICAgWE1MRGF0YSAgICAgID0+ICRYTUxEYXRhLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2FuaXR5IGNoZWNrcwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAiQWRkZWQgQ29uZmlnSXRlbSAkQ29uZmlnSXRlbUlEIiwKICAgICk7CgogICAgbXkgJFZlcnNpb25JbmZvID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwoKICAgICRTZWxmLT5Jc05vdERlZXBseSgKICAgICAgICAkVmVyc2lvbkluZm8sCiAgICAgICAge30sCiAgICAgICAgIkFkZGVkIENvbmZpZ0l0ZW0gJENvbmZpZ0l0ZW1JRCAtIFZlcnNpb24gaXMgbm90IGFuIGVtcHR5IGhhc2giLAogICAgKTsKCiAgICAjIHJlbWVtYmVyIHRoZSBjb25maWcgaXRlbQogICAgaWYgKCRDb25maWdJdGVtSUQpIHsKICAgICAgICAkQWRkZWRDb25maWdJdGVtc3skQ29uZmlnSXRlbUlEfSA9ICRDbG9uZWRDb25maWdJdGVtOwogICAgICAgIHB1c2ggQEFkZGVkQ29uZmlnSXRlbUlEcywgJENvbmZpZ0l0ZW1JRDsKICAgIH0KfQoKIyBhY3R1YWwgdGVzdHMgZm9yIENvbmZpZ0l0ZW1HZXQgb3BlcmF0aW9uCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnRW1wdHkgUmVxdWVzdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzR2V0ICAgICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHt9LAogICAgICAgIEV4cGVjdGVkRGF0YSAgID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtR2V0Lk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtR2V0JywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1dyb25nIENvbmZpZ0l0ZW1JRCBmb3JtYXQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0dldCAgICAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0MSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtR2V0Lldyb25nU3RydWN0dXJlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbUdldCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdXcm9uZyBDb25maWdJdGVtSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0dldCAgICAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAnTm90RXhpc3RlbnQnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtR2V0LkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1HZXQnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgQ29uZmlnSXRlbUlEIEFycmF5JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NHZXQgICAgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gWyAnTm90RXhpc3RlbnQnIC4gJFJhbmRvbUlELCBdLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtR2V0LkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1HZXQnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBDb25maWdJdGVtSUQgMScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzR2V0ICAgICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBZGRlZENvbmZpZ0l0ZW1JRHNbMF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4ge30sCiAgICAgICAgT3BlcmF0aW9uICAgID0+ICdDb25maWdJdGVtR2V0JywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0NvcnJlY3QgQ29uZmlnSXRlbUlEIDInLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0dldCAgICAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQWRkZWRDb25maWdJdGVtSURzWzFdLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHt9LAogICAgICAgIE9wZXJhdGlvbiAgICA9PiAnQ29uZmlnSXRlbUdldCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDb3JyZWN0IENvbmZpZ0l0ZW1JRCAzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NHZXQgICAgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJEFkZGVkQ29uZmlnSXRlbUlEc1syXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7fSwKICAgICAgICBPcGVyYXRpb24gICAgPT4gJ0NvbmZpZ0l0ZW1HZXQnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBDb25maWdJdGVtSUQgNCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzR2V0ICAgICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBZGRlZENvbmZpZ0l0ZW1JRHNbM10sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4ge30sCiAgICAgICAgT3BlcmF0aW9uICAgID0+ICdDb25maWdJdGVtR2V0JywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0NvcnJlY3QgQ29uZmlnSXRlbUlEIDUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0dldCAgICAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQWRkZWRDb25maWdJdGVtSURzWzRdLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHt9LAogICAgICAgIE9wZXJhdGlvbiAgICA9PiAnQ29uZmlnSXRlbUdldCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDb3JyZWN0IENvbmZpZ0l0ZW1JRCA2JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NHZXQgICAgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJEFkZGVkQ29uZmlnSXRlbUlEc1s1XSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7fSwKICAgICAgICBPcGVyYXRpb24gICAgPT4gJ0NvbmZpZ0l0ZW1HZXQnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBDb25maWdJdGVtSUQgMS02JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NHZXQgICAgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gXEBBZGRlZENvbmZpZ0l0ZW1JRHMsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4ge30sCiAgICAgICAgT3BlcmF0aW9uICAgID0+ICdDb25maWdJdGVtR2V0JywKICAgIH0sCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgICMgY3JlYXRlIGxvY2FsIG9iamVjdAogICAgbXkgJExvY2FsT2JqZWN0ID0gIktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjokVGVzdC0+e09wZXJhdGlvbn0iLT5uZXcoCiAgICAgICAgRGVidWdnZXJPYmplY3QgPT4gJERlYnVnZ2VyT2JqZWN0LAogICAgICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OiRUZXN0LT57T3BlcmF0aW9ufSIsCiAgICAgICAgcmVmICRMb2NhbE9iamVjdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSBsb2NhbCBvYmplY3QiLAogICAgKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlCiAgICBteSAkTG9jYWxSZXN1bHQgPSAkTG9jYWxPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgICAgICAgICAleyAkVGVzdC0+e1JlcXVlc3REYXRhfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgY2hlY2sgcmVzdWx0CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0hBU0gnLAogICAgICAgIHJlZiAkTG9jYWxSZXN1bHQsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIiwKICAgICk7CgogICAgIyBjcmVhdGUgcmVxdWVzdGVyIG9iamVjdAogICAgbXkgJFJlcXVlc3Rlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgICAgICByZWYgJFJlcXVlc3Rlck9iamVjdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0IiwKICAgICk7CgogICAgIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2Vic2VydmljZQogICAgbXkgJFJlcXVlc3RlclJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkTmV3U2Vzc2lvbklELAogICAgICAgICAgICAleyAkVGVzdC0+e1JlcXVlc3REYXRhfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgY2hlY2sgcmVzdWx0CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0hBU0gnLAogICAgICAgIHJlZiAkUmVxdWVzdGVyUmVzdWx0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBzdHJ1Y3R1cmUgaXMgdmFsaWQiLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e1N1Y2Nlc3N9LAogICAgICAgICRUZXN0LT57U3VjY2Vzc1JlcXVlc3R9LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHN1Y2Nlc3NmdWwgcmVzdWx0IiwKICAgICk7CgogICAgaWYgKCAkVGVzdC0+e1N1Y2Nlc3NHZXR9ICkgewoKICAgICAgICAjIGxvY2FsIHJlc3VsdHMKICAgICAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbX0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBDb25maWdJdGVtIGlzIG5vdCB1bmRlZmluZWQuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgcmVmICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbX0sCiAgICAgICAgICAgICdBUlJBWScsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IENvbmZpZ0l0ZW0gcmVmZXJlbmNlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgSXNBcnJheVJlZldpdGhEYXRhKCAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW19ICksCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IENvbmZpZ0l0ZW0gcmVmZXJlbmNlIGlzIG5vdCBlbXB0eS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfSwKICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yIGlzIHVuZGVmaW5lZC4iLAogICAgICAgICk7CgogICAgICAgICMgcmVxdWVzdGVyIHJlc3VsdHMKICAgICAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW19LAogICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IENvbmZpZ0l0ZW0gaXMgbm90IHVuZGVmaW5lZC4iLAogICAgICAgICk7CgogICAgICAgIG15ICRFeHBlY3RlZFJlc3VsdFR5cGUgPSByZWYgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntDb25maWdJdGVtSUR9IHx8ICdIQVNIJzsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICByZWYgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbX0sCiAgICAgICAgICAgICRFeHBlY3RlZFJlc3VsdFR5cGUsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBDb25maWdJdGVtIHJlZmVyZW5jZS4iLAogICAgICAgICk7CgogICAgICAgIGlmICggJEV4cGVjdGVkUmVzdWx0VHlwZSBlcSAnQVJSQVknICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIElzQXJyYXlSZWZXaXRoRGF0YSggJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbX0gKSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBDb25maWdJdGVtIHJlZmVyZW5jZSBpcyBub3QgZW1wdHkuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW19ICksCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgQ29uZmlnSXRlbSByZWZlcmVuY2UgaXMgbm90IGVtcHR5LiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LAogICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IEVycm9yIGlzIHVuZGVmaW5lZC4iLAogICAgICAgICk7CgogICAgICAgIGlmICggJEV4cGVjdGVkUmVzdWx0VHlwZSBlcSAnQVJSQVknICkgewoKICAgICAgICAgICAgIyBsb29wIGFsbCBDb25maWdJdGVtSURzIGluIHRoZSByZXNwb25zZQogICAgICAgICAgICBmb3IgbXkgJENvdW50ZXIgKCAwIC4uIHNjYWxhciBAeyAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0NvbmZpZ0l0ZW1JRH0gfSAtIDEgKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBzcGVjaWZpYyBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoQ0lYTUxEYXRhIENsYXNzIERlcGxTdGF0ZSBJbmNpU3RhdGUgTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbX0tPlskQ291bnRlcl0tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAgICAgJEFkZGVkQ29uZmlnSXRlbXN7ICRUZXN0LT57UmVxdWVzdERhdGF9LT57Q29uZmlnSXRlbUlEfS0+WyRDb3VudGVyXSB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2ggQ29uZmlnSXRlbS0+WyRDb3VudGVyXSAkQXR0cmlidXRlIGNyZWF0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIiBkYXRhLiIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBjaGVjayBzcGVjaWZpYyBhdHRyaWJ1dGVzIGZvciB0aGUgb25seSAxIHJlc3VsdAogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoQ0lYTUxEYXRhIENsYXNzIERlcGxTdGF0ZSBJbmNpU3RhdGUgTmFtZSkpIHsKICAgICAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW19LT5bMF0tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAkQWRkZWRDb25maWdJdGVtc3sgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntDb25maWdJdGVtSUR9IH0tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaCBDb25maWdJdGVtICRBdHRyaWJ1dGUgY3JlYXRlIGRhdGEuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBtYWtlIFJlcXVlc3RlciByZXN1bHQgYW4gYXJyYXkgZm9yIGVhc3kgY29tcGFyZQogICAgICAgICAgICBteSAkUmVxdWVzdGVyQ29uZmlnSXRlbSA9IGRlbGV0ZSAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntDb25maWdJdGVtfTsKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbX0gPSBbJFJlcXVlc3RlckNvbmZpZ0l0ZW1dOwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQsCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgY29uZmlnIGl0ZW0gcmVzdWx0IG1hdGNoZWQgd2l0aCByZW1vdGUgcmVzdWx0LiIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRlc3RzIHN1cHBvc2VkIHRvIGZhaWwKICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57Q29uZmlnSXRlbX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IENvbmZpZ0l0ZW1JRCB3aXRoIGZhbHNlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e051bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IE51bWJlciB3aXRoIGZhbHNlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfSwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZERhdGF9LT57RGF0YX0tPntFcnJvcn0tPntFcnJvckNvZGV9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvckNvZGUgbWF0Y2hlZCB3aXRoIGV4cGVjdGVkIGxvY2FsIGNhbGwgcmVzdWx0LiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvck1lc3NhZ2Ugd2l0aCB0cnVlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yTWVzc2FnZSBpcyBub3QgZW1wdHkuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvckNvZGV9CiAgICAgICAgICAgICAgICAuICc6ICcKICAgICAgICAgICAgICAgIC4gJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvck1lc3NhZ2UgKG91dHNpZGUgRGF0YSBoYXNoKSBtYXRjaGVkIHdpdGggY29uY2F0ZW5hdGlvbiIKICAgICAgICAgICAgICAgIC4gIiBvZiBFcnJvckNvZGUgYW5kIEVycm9yTWVzc2FnZSB3aXRoaW4gRGF0YSBoYXNoLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyByZW1vdmUgRXJyb3JNZXNzYWdlIHBhcmFtZXRlciBmcm9tIGRpcmVjdCBjYWxsCiAgICAgICAgIyByZXN1bHQgdG8gYmUgY29uc2lzdGVudCB3aXRoIFNPQVAgY2FsbCByZXN1bHQKICAgICAgICBpZiAoICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gKSB7CiAgICAgICAgICAgIGRlbGV0ZSAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9OwogICAgICAgIH0KCiAgICAgICAgIyBzYW5pdHkgY2hlY2sKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9NZXNzYWdlIChvdXRzaXNlIERhdGEgaGFzaCkgZ290IHJlbW92ZWQgdG8gY29tcGFyZSIKICAgICAgICAgICAgICAgIC4gIiBsb2NhbCBhbmQgcmVtb3RlIHRlc3RzLiIsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQsCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IG1hdGNoZWQgd2l0aCByZW1vdGUgcmVzdWx0LiIsCiAgICAgICAgKTsKICAgIH0KfSAgICAjZW5kIGxvb3AKCiMgY2xlYW4gdXAKCiMgY2xlYW4gdXAgd2Vic2VydmljZQpteSAkV2Vic2VydmljZURlbGV0ZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlRGVsZXRlKAogICAgSUQgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlRGVsZXRlLAogICAgIkRlbGV0ZWQgV2Vic2VydmljZSAkV2Vic2VydmljZUlEIiwKKTsKCmZvciBteSAkQ29uZmlnSXRlbUlEICggc29ydCBrZXlzICVBZGRlZENvbmZpZ0l0ZW1zICkgewoKICAgICMgZGVsZXRlIHRoZSBDb25maWdJdGVtcwogICAgbXkgJFN1Y2Nlc3NEZWxldGUgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbURlbGV0ZSgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3NEZWxldGUsCiAgICAgICAgIlN1Y2Nlc3NEZWxldGUoKSBzdWNjZXNzZnVsIGZvciBDb25maWdJdGVtIElEICRDb25maWdJdGVtSUQiLAogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcjsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtQ3JlYXRlOwp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1TZWFyY2g7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCiMgc2V0IFVzZXJJRCB0byByb290CiRTZWxmLT57VXNlcklEfSA9IDE7CgojIGhlbHBlciBvYmplY3QKIyBza2lwIFNTTCBjZXJ0aWNpYXRlIHZlcmlmaWNhdGlvbgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBTa2lwU1NMVmVyaWZ5ID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCk7CgpteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiMgY2hlY2sgaWYgU1NMIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBpcyBkaXNhYmxlZAokU2VsZi0+SXMoCiAgICAkRU5We1BFUkxfTFdQX1NTTF9WRVJJRllfSE9TVE5BTUV9LAogICAgMCwKICAgICdEaXNhYmxlZCBTU0wgY2VydGl0aWNhdGVzIHZlcmlmaWNhdGlvbiBpbiBlbnZpcm9ubWVudCcsCik7CgojIGNyZWF0ZSBDb25maWdJdGVtIG9iamVjdApteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiMgY3JlYXRlIHdlYnNlcnZpY2Ugb2JqZWN0Cm15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJywKICAgIHJlZiAkV2Vic2VydmljZU9iamVjdCwKICAgICJDcmVhdGUgd2Vic2VydmljZSBvYmplY3QiLAopOwoKIyBzZXQgd2Vic2VydmljZSBuYW1lCm15ICRXZWJzZXJ2aWNlTmFtZSA9ICctVGVzdC0nIC4gJFJhbmRvbUlEOwoKbXkgJFdlYnNlcnZpY2VJRCA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlQWRkKAogICAgTmFtZSAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyA9PiB7CiAgICAgICAgRGVidWdnZXIgPT4gewogICAgICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIH0sCiAgICAgICAgUHJvdmlkZXIgPT4gewogICAgICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZUlELAogICAgIkFkZGVkIFdlYnNlcnZpY2UiLAopOwoKIyBnZXQgcmVtb3RlIGhvc3Qgd2l0aCBzb21lIHByZWNhdXRpb25zIGZvciBjZXJ0YWluIHVuaXQgdGVzdCBzeXN0ZW1zCm15ICRIb3N0OwpteSAkRlFETiA9ICRDb25maWdPYmplY3QtPkdldCgnRlFETicpOwoKIyB0cnkgdG8gcmVzb2x2ZSBmcWRuIGhvc3QKaWYgKCAkRlFETiBuZSAneW91cmhvc3QuZXhhbXBsZS5jb20nICYmIGdldGhvc3RieW5hbWUoJEZRRE4pICkgewogICAgJEhvc3QgPSAkRlFETjsKfQoKIyB0cnkgdG8gcmVzb2x2ZSBsb2NhbGhvc3QgaW5zdGVhZAppZiAoICEkSG9zdCAmJiBnZXRob3N0YnluYW1lKCdsb2NhbGhvc3QnKSApIHsKICAgICRIb3N0ID0gJ2xvY2FsaG9zdCc7Cn0KCiMgdXNlIGhhcmRjb2RlZCBsb2NhbGhvc3QgaXAgYWRkcmVzcwppZiAoICEkSG9zdCApIHsKICAgICRIb3N0ID0gJzEyNy4wLjAuMSc7Cn0KCiMgcHJlcGFyZSB3ZWJzZXJ2aWNlIGNvbmZpZwpteSAkUmVtb3RlU3lzdGVtID0KICAgICRDb25maWdPYmplY3QtPkdldCgnSHR0cFR5cGUnKQogICAgLiAnOi8vJwogICAgLiAkSG9zdAogICAgLiAnLycKICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpCiAgICAuICcvbnBoLWdlbmVyaWNpbnRlcmZhY2UucGwvV2Vic2VydmljZUlELycKICAgIC4gJFdlYnNlcnZpY2VJRDsKCm15ICRXZWJzZXJ2aWNlQ29uZmlnID0gewoKICAgICMgICAgTmFtZSA9PiAnJywKICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgJ1Rlc3QgZm9yIENvbmZpZ0l0ZW0gQ29ubmVjdG9yIHVzaW5nIFNPQVAgdHJhbnNwb3J0IGJhY2tlbmQuJywKICAgIERlYnVnZ2VyID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgUHJvdmlkZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMTBfMDAwXzAwMCwKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1TZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ29uZmlnSXRlbTo6Q29uZmlnSXRlbVNlYXJjaCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ29uZmlnSXRlbTo6Q29uZmlnSXRlbUNyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnU2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBSZXF1ZXN0ZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdHJzLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5jb2RpbmcgID0+ICdVVEYtOCcsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEludm9rZXIgPT4gewogICAgICAgICAgICBDb25maWdJdGVtU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZXNzaW9uQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAp9OwoKIyB1cGRhdGUgd2Vic2VydmljZSB3aXRoIHJlYWwgY29uZmlnCm15ICRXZWJzZXJ2aWNlVXBkYXRlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VVcGRhdGUoCiAgICBJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBOYW1lICAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyAgPT4gJFdlYnNlcnZpY2VDb25maWcsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VVcGRhdGUsCiAgICAiVXBkYXRlZCBXZWJzZXJ2aWNlICRXZWJzZXJ2aWNlSUQgLSAkV2Vic2VydmljZU5hbWUiLAopOwoKIyBkZWJ1Z2dlciBvYmplY3QKbXkgJERlYnVnZ2VyT2JqZWN0ID0gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlci0+bmV3KAogICAgRGVidWdnZXJDb25maWcgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBXZWJzZXJ2aWNlSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgQ29tbXVuaWNhdGlvblR5cGUgPT4gJ1Byb3ZpZGVyJywKKTsKJFNlbGYtPklzKAogICAgcmVmICREZWJ1Z2dlck9iamVjdCwKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyJywKICAgICdEZWJ1Z2dlck9iamVjdCBpbnN0YW5jaWF0ZSBjb3JyZWN0bHknLAopOwoKIyBHZXQgU2Vzc2lvbklECiMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKbXkgJFJlcXVlc3RlclNlc3Npb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwokU2VsZi0+SXMoCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgcmVmICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LAogICAgIlNlc3Npb25JRCAtIENyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0IiwKKTsKCiMgY3JlYXRlIGEgbmV3IHVzZXIgZm9yIGN1cnJlbnQgdGVzdApteSAkVXNlckxvZ2luID0gJEhlbHBlck9iamVjdC0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnLCAnaXRzbS1jb25maWdpdGVtJyBdLAopOwpteSAkUGFzc3dvcmQgPSAkVXNlckxvZ2luOwoKIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2Vic2VydmljZQpteSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdCA9ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LT5SdW4oCiAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgIEludm9rZXIgICAgICA9PiAnU2Vzc2lvbkNyZWF0ZScsCiAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICB9LAopOwoKbXkgJE5ld1Nlc3Npb25JRCA9ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0LT57RGF0YX0tPntTZXNzaW9uSUR9OwoKI0NvbmZpZ0l0ZW10cyBjb250YWluZXIgKHVzZWZ1bGwgZm9yIGxvb2t1cCBjb21wYXJlKQpteSBAQWRkZWRDb25maWdJdGVtSURzOwoKIyBDb25maWdJdGVtIHNldHRpbmdzCm15IEBDb25maWdJdGVtcyA9ICgKICAgIHsKICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSS0xLScgLiAkUmFuZG9tSUQsCiAgICAgICAgRGVwbFN0YXRlID0+ICdSZXBhaXInLAogICAgICAgIEluY2lTdGF0ZSA9PiAnV2FybmluZycsCiAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgVmVuZG9yICAgICAgICAgID0+ICdMZW5vdm8nLAogICAgICAgICAgICBNb2RlbCAgICAgICAgICAgPT4gJ1RoaW5rcGFkJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgID0+ICdUaGlua3BhZCBYMzAwJywKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdEZXNrdG9wJywKICAgICAgICAgICAgT3duZXIgICAgICAgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIFNlcmlhbE51bWJlciAgICA9PiAnYWJjMTIzNDVhYmMnLAogICAgICAgICAgICBPcGVyYXRpbmdTeXN0ZW0gPT4gJ0NlbnRPUyA2LjAnLAogICAgICAgICAgICBDUFUgICAgICAgICAgICAgPT4gJ0ludGVsIENvcmUgaTMnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBSYW0gICAgICAgICAgICAgPT4gWwogICAgICAgICAgICAgICAgNDAwMCwKICAgICAgICAgICAgICAgIDIwMDAsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEhhcmREaXNrID0+IHsKICAgICAgICAgICAgICAgIEhhcmREaXNrID0+ICcvZGV2JywKICAgICAgICAgICAgICAgIENhcGFjaXR5ID0+IDUwMDAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBGUUROID0+ICdob3RzLmV4YW1wbGUuY29tJywKICAgICAgICAgICAgTklDICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgIElQQWRkcmVzcyAgPT4gJzE5Mi4xNjguMzAuMScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDEnLAogICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgSVBBZGRyZXNzICA9PiAnMjAwLjM0LjU2Ljc4JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEdyYXBoaWNBZGFwdGVyID0+ICdBVEkgUmFkZW9uIDMwMCcsCiAgICAgICAgICAgIEluc3RhbGxEYXRlICAgID0+ICcxOTc3LTEyLTEyJywKICAgICAgICAgICAgTm90ZSAgICAgICAgICAgPT4gJ1RoaXMgaXMgYSBEZW1vIENJJywKICAgICAgICB9LAogICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoYmlCbGJtTnZaR1ZrSUhSbGVIUT0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ015IFRleHQudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaGJpQmxibU52WkdWa0lIUmxlSFE9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTEnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ015IFRleHQyLnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0ktMi0nIC4gJFJhbmRvbUlELAogICAgICAgIERlcGxTdGF0ZSA9PiAnUmVwYWlyJywKICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICBWZW5kb3IgICAgICAgICAgPT4gJ0FwcGxlJywKICAgICAgICAgICAgTW9kZWwgICAgICAgICAgID0+ICdpTWFjJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgID0+ICdBcHBsZSBDb21wdXRlcicsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnRGVza3RvcCcsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICBTZXJpYWxOdW1iZXIgICAgPT4gJ2FiYzEyMzQ1YWJjJywKICAgICAgICAgICAgT3BlcmF0aW5nU3lzdGVtID0+ICdPU1ggMTAuOC4zJywKICAgICAgICAgICAgQ1BVICAgICAgICAgICAgID0+ICdJbnRlbCBDb3JlIGkzJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgUmFtICAgICAgICAgICAgID0+IFsKICAgICAgICAgICAgICAgIDQwMDAsCiAgICAgICAgICAgICAgICAyMDAwLAogICAgICAgICAgICBdLAogICAgICAgICAgICBIYXJkRGlzayA9PiB7CiAgICAgICAgICAgICAgICBIYXJkRGlzayA9PiAnL2RldicsCiAgICAgICAgICAgICAgICBDYXBhY2l0eSA9PiA4MDAwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRlFETiA9PiAnaG90cy5leGFtcGxlLmNvbScsCiAgICAgICAgICAgIE5JQyAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0VuMCcsCiAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnWWVzJywKICAgICAgICAgICAgICAgICAgICBJUEFkZHJlc3MgID0+ICcxOTIuMTY4LjMwLjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFbjEnLAogICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgSVBBZGRyZXNzICA9PiAnMjAwLjM0LjU2Ljc4JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEdyYXBoaWNBZGFwdGVyID0+ICdudmlkaWEnLAogICAgICAgICAgICBJbnN0YWxsRGF0ZSAgICA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgIE5vdGUgICAgICAgICAgID0+ICdUaGlzIGlzIGEgRGVtbyBDSScsCiAgICAgICAgfSwKICAgICAgICBBdHRhY2htZW50ID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaGJpQmxibU52WkdWa0lIUmxlSFE9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdNeSBUZXh0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhiaUJsYm1OdlpHVmtJSFJsZUhRPScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xJywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdNeSBUZXh0Mi50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIENsYXNzICAgICA9PiAnU29mdHdhcmUnLAogICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJLTMtJyAuICRSYW5kb21JRCwKICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgIEluY2lTdGF0ZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgIFZlbmRvciAgICAgICA9PiAnU29tZSBzb2Z0d2FyZSB2ZW5kb3InLAogICAgICAgICAgICBWZXJzaW9uICAgICAgPT4gJzEuMS4xJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gID0+ICdTb21lIHNvZnR3YXJlIGRlc2NyaXB0aW9uJywKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdBZG1pbiBUb29sJywKICAgICAgICAgICAgT3duZXIgICAgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIFNlcmlhbE51bWJlciA9PiAnMTIzQUJDNDU2JywKICAgICAgICAgICAgTGljZW5jZVR5cGUgID0+ICdPcGVuIFNvdXJjZScsCiAgICAgICAgICAgIExpY2VuY2VLZXkgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGljZW5jZUtleSAgICAgPT4gJzEyMzQnLAogICAgICAgICAgICAgICAgICAgIFF1YW50aXR5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICBFeHBpcmF0aW9uRGF0ZSA9PiAnMTk3Ny0xMi0xMicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExpY2VuY2VLZXkgICAgID0+ICc0NTY3JywKICAgICAgICAgICAgICAgICAgICBRdWFudGl0eSAgICAgICA9PiAnMycsCiAgICAgICAgICAgICAgICAgICAgRXhwaXJhdGlvbkRhdGUgPT4gJzE5NzctMTItMjUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgTWVkaWEgPT4gJ0Rvd25sb2FkJywKICAgICAgICAgICAgTm90ZSAgPT4gJ1RoaXMgaXMgYSB0ZXN0IENJJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBDbGFzcyAgICAgPT4gJ1NvZnR3YXJlJywKICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSS00LScgLiAkUmFuZG9tSUQsCiAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICBJbmNpU3RhdGUgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICBWZW5kb3IgICAgICAgPT4gJ1NvbWUgc29mdHdhcmUgdmVuZG9yJywKICAgICAgICAgICAgVmVyc2lvbiAgICAgID0+ICcxLjEuMScsCiAgICAgICAgICAgIERlc2NyaXB0aW9uICA9PiAnU29tZSBzb2Z0d2FyZSBkZXNjcmlwdGlvbicsCiAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnQWRtaW4gVG9vbCcsCiAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICBTZXJpYWxOdW1iZXIgPT4gJzEyM0FCQzQ1NicsCiAgICAgICAgICAgIExpY2VuY2VUeXBlICA9PiAnT3BlbiBTb3VyY2UnLAogICAgICAgICAgICBMaWNlbmNlS2V5ICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExpY2VuY2VLZXkgICAgID0+ICcxMjM0JywKICAgICAgICAgICAgICAgICAgICBRdWFudGl0eSAgICAgICA9PiAnNCcsCiAgICAgICAgICAgICAgICAgICAgRXhwaXJhdGlvbkRhdGUgPT4gJzE5NzctMTItMTInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMaWNlbmNlS2V5ICAgICA9PiAnNDU2NycsCiAgICAgICAgICAgICAgICAgICAgUXVhbnRpdHkgICAgICAgPT4gJzMnLAogICAgICAgICAgICAgICAgICAgIEV4cGlyYXRpb25EYXRlID0+ICcxOTc3LTEyLTI1JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIE1lZGlhID0+ICdDRC1ST00nLAogICAgICAgICAgICBOb3RlICA9PiAnVGhpcyBpcyBhIHRlc3QgQ0knLAogICAgICAgIH0sCiAgICB9LAopOwoKIyBjcmVhdGUgbG9jYWwgb2JqZWN0Cm15ICRDb25maWdJdGVtQ3JlYXRlT2JqZWN0ID0gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1DcmVhdGUtPm5ldygKICAgIERlYnVnZ2VyT2JqZWN0ID0+ICREZWJ1Z2dlck9iamVjdCwKICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCik7Cgpmb3IgbXkgJENvbmZpZ0l0ZW0gKEBDb25maWdJdGVtcykgewoKICAgICMgbWFrZSBhIGRlZXAgY29weSB0byBhdm9pZCBjaGFuZ2luZyB0aGUgZGVmaW5pdGlvbgogICAgbXkgJENsb25lZENvbmZpZ0l0ZW0gPSBTdG9yYWJsZTo6ZGNsb25lKCRDb25maWdJdGVtKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlCiAgICAjIGFkZCBuZXcgQ29uZmlnSXRlbXMKICAgIG15ICRDcmVhdGVSZXN1bHQgPSAkQ29uZmlnSXRlbUNyZWF0ZU9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAnQ29uZmlnSXRlbUNyZWF0ZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgVXNlckxvZ2luICA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCAgID0+ICRQYXNzd29yZCwKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkQ29uZmlnSXRlbSwKICAgICAgICB9LAogICAgKTsKCiAgICBteSAkQ29uZmlnSXRlbUlEID0gJENyZWF0ZVJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEfSB8fCAnJzsKCiAgICAjIHNhbml0eSBjaGVja3MKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDb25maWdJdGVtSUQsCiAgICAgICAgIkFkZGVkIENvbmZpZ0l0ZW0gJENvbmZpZ0l0ZW1JRCAtICRDcmVhdGVSZXN1bHQtPntEYXRhfS0+e051bWJlcn0iLAogICAgKTsKCiAgICBteSAkVmVyc2lvbkluZm8gPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgJFNlbGYtPklzTm90RGVlcGx5KAogICAgICAgICRWZXJzaW9uSW5mbywKICAgICAgICB7fSwKICAgICAgICAiQWRkZWQgQ29uZmlnSXRlbSAkQ29uZmlnSXRlbUlEIC0gVmVyc2lvbiBpcyBub3QgYW4gZW1wdHkgaGFzaCIsCiAgICApOwoKICAgICMgcmVtZW1iZXIgdGhlIGNvbmZpZyBpdGVtCiAgICBpZiAoJENvbmZpZ0l0ZW1JRCkgewogICAgICAgIHB1c2ggQEFkZGVkQ29uZmlnSXRlbUlEcywgJENvbmZpZ0l0ZW1JRDsKICAgIH0KfQoKIyBhY3R1YWwgdGVzdHMgZm9yIENvbmZpZ0l0ZW1TZWFyY2ggb3BlcmF0aW9uCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnRW1wdHkgUmVxdWVzdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHt9LAogICAgICAgIEV4cGVjdGVkRGF0YSAgID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQ29uZmlnSXRlbScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGVzdCA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1TZWFyY2guTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1TZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgQ29uZmlnSXRlbSBmb3JtYXQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQ29uZmlnSXRlbS0+Q2xhc3MnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ29uZmlnSXRlbS0+Q2xhc3MnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ05vbkV4aXN0aW5nJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVNlYXJjaC5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbmZpZ0l0ZW0tPkNJWE1MRGF0YScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ29uZmlnSXRlbS0+SW5jaVN0YXRlcycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVzID0+ICdOb3RFeGlzdHNuaW5nJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIENJWE1MRGF0YSAgPT4gewogICAgICAgICAgICAgICAgICAgICdOb3RFeGlzdHNuaW5nJyAuICRSYW5kb21JRCA9PiAxCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ29uZmlnSXRlbS0+SW5jaVN0YXRlcyBIQVNIJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NTZWFyY2ggID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdOb3RFeGlzdHNuaW5nJyAuICRSYW5kb21JRCA9PiAxCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLldyb25nU3RydWN0dXJlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbmZpZ0l0ZW0tPkluY2lTdGF0ZXMgQVJSQVknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlcyA9PiBbICdJbmNpZGVudCcsICdOb3RFeGlzdHNuaW5nJyAuICRSYW5kb21JRCBdLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhICA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ05vdEV4aXN0c25pbmcnIC4gJFJhbmRvbUlEID0+IDEKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1TZWFyY2guSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1TZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBDb25maWdJdGVtLT5EZXBsU3RhdGVzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NTZWFyY2ggID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZXMgPT4gWyAnSW5jaWRlbnQnLCAnV2FybmluZycgXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZXMgPT4gJ05vdEV4aXN0c25pbmcnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhICA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ05vdEV4aXN0c25pbmcnIC4gJFJhbmRvbUlEID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ29uZmlnSXRlbS0+RGVwbFN0YXRlcyBIQVNIJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NTZWFyY2ggID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZXMgPT4gWyAnSW5jaWRlbnQnLCAnV2FybmluZycgXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdOb3RFeGlzdHNuaW5nJyAuICRSYW5kb21JRCA9PiAxCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLldyb25nU3RydWN0dXJlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbmZpZ0l0ZW0tPkRlcGxTdGF0ZXMgQVJSQVknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlcyA9PiBbICdJbmNpZGVudCcsICdXYXJuaW5nJyBdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlcyA9PiBbICdQcm9kdWN0aW9uJywgJ05vdEV4aXN0c25pbmcnIC4gJFJhbmRvbUlEIF0sCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgID0+IHsKICAgICAgICAgICAgICAgICAgICAnTm90RXhpc3RzbmluZycgLiAkUmFuZG9tSUQgPT4gMQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVNlYXJjaC5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbmZpZ0l0ZW0tPk9yZGVyQnkgSEFTSCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVzID0+IFsgJ0luY2lkZW50JywgJ1dhcm5pbmcnIF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVzID0+IFsgJ1Byb2R1Y3Rpb24nLCAnUmV0aXJlZCcgXSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgPT4gewogICAgICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdOb3RFeGlzdHNuaW5nJyAuICRSYW5kb21JRCA9PiAxCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLldyb25nU3RydWN0dXJlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbmZpZ0l0ZW0tPk9yZGVyQnlEaXJlY3Rpb24gSEFTSCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVzICAgICAgID0+IFsgJ0luY2lkZW50JywgJ1dhcm5pbmcnIF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVzICAgICAgID0+IFsgJ1Byb2R1Y3Rpb24nLCAnUmV0aXJlZCcgXSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWydOdW1iZXInXSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gewogICAgICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdOb3RFeGlzdHNuaW5nJyAuICRSYW5kb21JRCA9PiAxCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLldyb25nU3RydWN0dXJlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbmZpZ0l0ZW0tPkNyZWF0ZVRpbWVOZXdlckRhdGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZXMgICAgICAgICAgICAgICAgICAgID0+IFsgJ0luY2lkZW50JywgJ1dhcm5pbmcnIF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVzICAgICAgICAgICAgICAgICAgICA9PiBbICdQcm9kdWN0aW9uJywgJ1JldGlyZWQnIF0sCiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgICAgICAgICAgICAgICA9PiBbJ051bWJlciddLAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiAgICAgICAgICAgICAgPT4gWydEb3duJ10sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAnMjAxMi0wMi0zMCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgICAgICAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ05vdEV4aXN0c25pbmcnIC4gJFJhbmRvbUlEID0+IDEKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1TZWFyY2guSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1TZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBDb25maWdJdGVtLT5DcmVhdGVUaW1lT2xkZXJEYXRlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NTZWFyY2ggID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVzICAgICAgICAgICAgICAgICAgICA9PiBbICdJbmNpZGVudCcsICdXYXJuaW5nJyBdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlcyAgICAgICAgICAgICAgICAgICAgPT4gWyAnUHJvZHVjdGlvbicsICdSZXRpcmVkJyBdLAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICAgICAgICAgICAgICAgPT4gWydOdW1iZXInXSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gICAgICAgICAgICAgID0+IFsnRG93biddLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJzIwMTItMTItMTInLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJzIwMTItMDItMzAnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhICAgICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICdOb3RFeGlzdHNuaW5nJyAuICRSYW5kb21JRCA9PiAxCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ29uZmlnSXRlbS0+Q2hhbmdlVGltZU5ld2VyRGF0ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlcyAgICAgICAgICAgICAgICAgICAgPT4gWyAnSW5jaWRlbnQnLCAnV2FybmluZycgXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZXMgICAgICAgICAgICAgICAgICAgID0+IFsgJ1Byb2R1Y3Rpb24nLCAnUmV0aXJlZCcgXSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgICAgICAgICAgICAgID0+IFsnTnVtYmVyJ10sCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICAgICAgICAgICAgICA9PiBbJ0Rvd24nXSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGVUaW1lT2xkZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICcyMDEyLTAyLTMwJywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSAgICAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAnTm90RXhpc3RzbmluZycgLiAkUmFuZG9tSUQgPT4gMQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVNlYXJjaC5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbmZpZ0l0ZW0tPkNoYW5nZVRpbWVPbGRlckRhdGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZXMgICAgICAgICAgICAgICAgICAgID0+IFsgJ0luY2lkZW50JywgJ1dhcm5pbmcnIF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVzICAgICAgICAgICAgICAgICAgICA9PiBbICdQcm9kdWN0aW9uJywgJ1JldGlyZWQnIF0sCiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgICAgICAgICAgICAgICA9PiBbJ051bWJlciddLAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiAgICAgICAgICAgICAgPT4gWydEb3duJ10sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZSA9PiAnMjAxMi0wMi0zMCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgICAgICAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ05vdEV4aXN0c25pbmcnIC4gJFJhbmRvbUlEID0+IDEKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1TZWFyY2guSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1TZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBDb25maWdJdGVtLT5MaW1pdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlcyAgICAgICAgICAgICAgICAgICAgPT4gWyAnSW5jaWRlbnQnLCAnV2FybmluZycgXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZXMgICAgICAgICAgICAgICAgICAgID0+IFsgJ1Byb2R1Y3Rpb24nLCAnUmV0aXJlZCcgXSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgICAgICAgICAgICAgID0+IFsnTnVtYmVyJ10sCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICAgICAgICAgICAgICA9PiBbJ0Rvd24nXSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGVUaW1lT2xkZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdVbmxpbWl0ZWQnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhICAgICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICdOb3RFeGlzdHNuaW5nJyAuICRSYW5kb21JRCA9PiAxCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ0lYTUxEYXRhIEdlbmVyYWwgQ2F0YWxvZycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlcyAgICAgICAgICAgICAgICAgICAgPT4gWyAnSW5jaWRlbnQnLCAnV2FybmluZycgXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZXMgICAgICAgICAgICAgICAgICAgID0+IFsgJ1Byb2R1Y3Rpb24nLCAnUmV0aXJlZCcgXSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgICAgICAgICAgICAgID0+IFsnTnVtYmVyJ10sCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICAgICAgICAgICAgICA9PiBbJ0Rvd24nXSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DcmVhdGVUaW1lT2xkZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICcyMDEyLTEyLTEyJywKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgICAgICAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgTklDID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ0lYTUxEYXRhIERhdGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZXMgICAgICAgICAgICAgICAgICAgID0+IFsgJ0luY2lkZW50JywgJ1dhcm5pbmcnIF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVzICAgICAgICAgICAgICAgICAgICA9PiBbICdQcm9kdWN0aW9uJywgJ1JldGlyZWQnIF0sCiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgICAgICAgICAgICAgICA9PiBbJ051bWJlciddLAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiAgICAgICAgICAgICAgPT4gWydEb3duJ10sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhICAgICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIE5JQyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBJbnN0YWxsRGF0ZSA9PiAnMjAxMi0wMi0zMCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ0lYTUxEYXRhIFRleHQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1NvZnR3YXJlJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZXMgICAgICAgICAgICAgICAgICAgID0+IFsgJ0luY2lkZW50JywgJ1dhcm5pbmcnIF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVzICAgICAgICAgICAgICAgICAgICA9PiBbICdQcm9kdWN0aW9uJywgJ1JldGlyZWQnIF0sCiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgICAgICAgICAgICAgICA9PiBbJ051bWJlciddLAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiAgICAgICAgICAgICAgPT4gWydEb3duJ10sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZSA9PiAnMjAxMi0xMi0xMicsCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhICAgICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIFZlbmRvciA9PiAnYScgeCA1MSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1TZWFyY2guSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1TZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBDSVhNTERhdGEgTnVtYmVyJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NTZWFyY2ggID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdTb2Z0d2FyZScsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVzICAgICAgICAgICAgICAgICAgICA9PiBbICdJbmNpZGVudCcsICdXYXJuaW5nJyBdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlcyAgICAgICAgICAgICAgICAgICAgPT4gWyAnUHJvZHVjdGlvbicsICdSZXRpcmVkJyBdLAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICAgICAgICAgICAgICAgPT4gWydOdW1iZXInXSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gICAgICAgICAgICAgID0+IFsnRG93biddLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJzIwMTItMTItMTInLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJzIwMTItMTItMTInLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNoYW5nZVRpbWVOZXdlckRhdGUgPT4gJzIwMTItMTItMTInLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNoYW5nZVRpbWVPbGRlckRhdGUgPT4gJzIwMTItMTItMTInLAogICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENJWE1MRGF0YSAgICAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBWZW5kb3IgICAgID0+ICdhJyB4IDUwLAogICAgICAgICAgICAgICAgICAgIExpY2VuY2VLZXkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWFudGl0eSA9PiAnTm90RXhpc3RpbmcnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtU2VhcmNoLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0NvcnJlY3QgQ29tcHV0ZXIgTm8gTGltaXQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1NlYXJjaCAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlcyAgICAgICA9PiBbICdJbmNpZGVudCcsICdXYXJuaW5nJyBdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlcyAgICAgICA9PiBbICdQcm9kdWN0aW9uJywgJ1JldGlyZWQnLCAnUmVwYWlyJyBdLAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbJ051bWJlciddLAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJ1VwJ10sCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBDUFUgPT4gJ0ludGVsIENvcmUgaTMnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgICAgIE5JQyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRHMgPT4gWyAkQWRkZWRDb25maWdJdGVtSURzWzBdLCAkQWRkZWRDb25maWdJdGVtSURzWzFdIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDb3JyZWN0IENvbXB1dGVyIExpbWl0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NTZWFyY2ggID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZXMgICAgICAgPT4gWyAnSW5jaWRlbnQnLCAnV2FybmluZycgXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZXMgICAgICAgPT4gWyAnUHJvZHVjdGlvbicsICdSZXRpcmVkJywgJ1JlcGFpcicgXSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWydOdW1iZXInXSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWydVcCddLAogICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ1BVID0+ICdJbnRlbCBDb3JlIGkzJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgICAgICBOSUMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdZZXMnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb25maWdJdGVtSURzID0+IFsgJEFkZGVkQ29uZmlnSXRlbUlEc1swXSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1TZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ29ycmVjdCBTb2Z0d2FyZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzU2VhcmNoICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICdTb2Z0d2FyZScsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVzICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVzICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWydOdW1iZXInXSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWydVcCddLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgICAgIExpY2VuY2VLZXkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWFudGl0eSA9PiBbICczJywgJzQnIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRHMgPT4gWyAkQWRkZWRDb25maWdJdGVtSURzWzJdLCAkQWRkZWRDb25maWdJdGVtSURzWzNdIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVNlYXJjaCcsCiAgICB9LAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAjIGNyZWF0ZSBsb2NhbCBvYmplY3QKICAgIG15ICRMb2NhbE9iamVjdCA9ICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6JFRlc3QtPntPcGVyYXRpb259Ii0+bmV3KAogICAgICAgIERlYnVnZ2VyT2JqZWN0ID0+ICREZWJ1Z2dlck9iamVjdCwKICAgICAgICBXZWJzZXJ2aWNlSUQgICA9PiAkV2Vic2VydmljZUlELAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgIktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjokVGVzdC0+e09wZXJhdGlvbn0iLAogICAgICAgIHJlZiAkTG9jYWxPYmplY3QsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgbG9jYWwgb2JqZWN0IiwKICAgICk7CgogICAgIyBtYWtlIGEgZGVlcCBjb3B5IHRvIGF2b2lkIGNoYW5naW5nIHRoZSBkZWZpbml0aW9uCiAgICBteSAkQ2xvbmVkUmVxdWVzdERhdGEgPSBTdG9yYWJsZTo6ZGNsb25lKCAkVGVzdC0+e1JlcXVlc3REYXRhfSApOwoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKICAgIG15ICRMb2NhbFJlc3VsdCA9ICRMb2NhbE9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICAgICAgICAgICV7ICRUZXN0LT57UmVxdWVzdERhdGF9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyByZXN0b3JlIGNsb25lZCBkYXRhCiAgICAkVGVzdC0+e1JlcXVlc3REYXRhfSA9ICRDbG9uZWRSZXF1ZXN0RGF0YTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJExvY2FsUmVzdWx0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwogICAgJFNlbGYtPklzKAogICAgICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJPYmplY3QsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCiAgICApOwoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKICAgIG15ICRSZXF1ZXN0ZXJSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJE5ld1Nlc3Npb25JRCwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIiwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntTdWNjZXNzfSwKICAgICAgICAkVGVzdC0+e1N1Y2Nlc3NSZXF1ZXN0fSwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciBzdWNjZXNzZnVsIHJlc3VsdCIsCiAgICApOwoKICAgIGlmICggJFRlc3QtPntTdWNjZXNzU2VhcmNofSApIHsKCiAgICAgICAgIyBsb2NhbCByZXN1bHRzCiAgICAgICAgJFNlbGYtPklzTm90KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRHN9LAogICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgQ29uZmlnSXRlbUlEcyBpcyBub3QgdW5kZWZpbmVkLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHJlZiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRHN9LAogICAgICAgICAgICAnQVJSQVknLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBDb25maWdJdGVtSURzIHJlZmVyZW5jZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIElzQXJyYXlSZWZXaXRoRGF0YSggJExvY2FsUmVzdWx0LT57RGF0YX0tPntDb25maWdJdGVtSURzfSApLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBDb25maWdJdGVtIGlzIGEgbm9uIGVtcHRyeSBhcnJheSB3aXRoIHRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvciBpcyB1bmRlZmluZWQuIiwKICAgICAgICApOwoKICAgICAgICAjIHJlcXVlc3RlciByZXN1bHRzCiAgICAgICAgJFNlbGYtPklzTm90KAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntDb25maWdJdGVtSURzfSwKICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBDb25maWdJdGVtSURzIGlzIG5vdCB1bmRlZmluZWQuIiwKICAgICAgICApOwoKICAgICAgICBpZiAoIHJlZiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntDb25maWdJdGVtSURzfSBlcSAnQVJSQVknICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIElzQXJyYXlSZWZXaXRoRGF0YSggJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEc30gKSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBDb25maWdJdGVtSURzIGlzIGEgbm9uIGVtcHRyeSBhcnJheSB3aXRoIHRydWUuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgSXNOdW1iZXIoICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRHN9ICksCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgQ29uZmlnSXRlbUlEcyBpcyBudW1iZXIgd2l0aCB0cnVlLiIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG1ha2UgUmVxdWVzdGVyIHJlc3VsdCBhbiBhcnJheSBmb3IgZWFzeSBjb21wYXJlCiAgICAgICAgICAgIG15ICRSZXF1ZXN0ZXJDb25maWdJdGVtSURzID0gZGVsZXRlICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRHN9OwogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntDb25maWdJdGVtSURzfSA9IFskUmVxdWVzdGVyQ29uZmlnSXRlbUlEc107CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZERhdGF9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaCBleHBlY3RlZCBkYXRhLiIsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQsCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgY29uZmlnIGl0ZW0gcmVzdWx0IG1hdGNoZWQgd2l0aCByZW1vdGUgcmVzdWx0LiIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRlc3RzIHN1cHBvc2VkIHRvIGZhaWwKICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgQ29uZmlnSXRlbUlEIHdpdGggZmFsc2UuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57TnVtYmVyfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgTnVtYmVyIHdpdGggZmFsc2UuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvckNvZGV9LAogICAgICAgICAgICAkVGVzdC0+e0V4cGVjdGVkRGF0YX0tPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yQ29kZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yQ29kZSBtYXRjaGVkIHdpdGggZXhwZWN0ZWQgbG9jYWwgY2FsbCByZXN1bHQuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yTWVzc2FnZSB3aXRoIHRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAnJywKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIGlzIG5vdCBlbXB0eS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yQ29kZX0KICAgICAgICAgICAgICAgIC4gJzogJwogICAgICAgICAgICAgICAgLiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yTWVzc2FnZSAob3V0c2lkZSBEYXRhIGhhc2gpIG1hdGNoZWQgd2l0aCBjb25jYXRlbmF0aW9uIgogICAgICAgICAgICAgICAgLiAiIG9mIEVycm9yQ29kZSBhbmQgRXJyb3JNZXNzYWdlIHdpdGhpbiBEYXRhIGhhc2guIiwKICAgICAgICApOwoKICAgICAgICAjIHJlbW92ZSBFcnJvck1lc3NhZ2UgcGFyYW1ldGVyIGZyb20gZGlyZWN0IGNhbGwKICAgICAgICAjIHJlc3VsdCB0byBiZSBjb25zaXN0ZW50IHdpdGggU09BUCBjYWxsIHJlc3VsdAogICAgICAgIGlmICggJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfSApIHsKICAgICAgICAgICAgZGVsZXRlICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX07CiAgICAgICAgfQoKICAgICAgICAjIHNhbml0eSBjaGVjawogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb01lc3NhZ2UgKG91dHNpc2UgRGF0YSBoYXNoKSBnb3QgcmVtb3ZlZCB0byBjb21wYXJlIgogICAgICAgICAgICAgICAgLiAiIGxvY2FsIGFuZCByZW1vdGUgdGVzdHMuIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwogICAgfQp9ICAgICNlbmQgbG9vcAoKIyBjbGVhbiB1cAoKIyBjbGVhbiB1cCB3ZWJzZXJ2aWNlCm15ICRXZWJzZXJ2aWNlRGVsZXRlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VEZWxldGUoCiAgICBJRCAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VEZWxldGUsCiAgICAiRGVsZXRlZCBXZWJzZXJ2aWNlICRXZWJzZXJ2aWNlSUQiLAopOwoKZm9yIG15ICRDb25maWdJdGVtSUQgKCBzb3J0IEBBZGRlZENvbmZpZ0l0ZW1JRHMgKSB7CgogICAgIyBkZWxldGUgdGhlIENvbmZpZ0l0ZW1zCiAgICBteSAkU3VjY2Vzc0RlbGV0ZSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2FuaXR5IGNoZWNrCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2Vzc0RlbGV0ZSwKICAgICAgICAiU3VjY2Vzc0RlbGV0ZSgpIHN1Y2Nlc3NmdWwgZm9yIENvbmZpZ0l0ZW0gSUQgJENvbmZpZ0l0ZW1JRCIsCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgTUlNRTo6QmFzZTY0OwoKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXI7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6Q29uZmlnSXRlbUNyZWF0ZTsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb25maWdJdGVtOjpDb25maWdJdGVtVXBkYXRlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIHNldCBVc2VySUQgdG8gcm9vdAokU2VsZi0+e1VzZXJJRH0gPSAxOwoKIyBoZWxwZXIgb2JqZWN0CiMgc2tpcCBTU0wgY2VydGljaWF0ZSB2ZXJpZmljYXRpb24KJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgU2tpcFNTTFZlcmlmeSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgpteSAkUmFuZG9tSUQgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgojIGNoZWNrIGlmIFNTTCBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQKJFNlbGYtPklzKAogICAgJEVOVntQRVJMX0xXUF9TU0xfVkVSSUZZX0hPU1ROQU1FfSwKICAgIDAsCiAgICAnRGlzYWJsZWQgU1NMIGNlcnRpdGljYXRlcyB2ZXJpZmljYXRpb24gaW4gZW52aXJvbm1lbnQnLAopOwoKIyBjcmVhdGUgQ29uZmlnSXRlbSBvYmplY3QKbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCm15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyT2JqZWN0LT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7CgojIGNyZWF0ZSB3ZWJzZXJ2aWNlIG9iamVjdApteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CiRTZWxmLT5JcygKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICByZWYgJFdlYnNlcnZpY2VPYmplY3QsCiAgICAiQ3JlYXRlIHdlYnNlcnZpY2Ugb2JqZWN0IiwKKTsKCiMgc2V0IHdlYnNlcnZpY2UgbmFtZQpteSAkV2Vic2VydmljZU5hbWUgPSAnLVRlc3QtJyAuICRSYW5kb21JRDsKCm15ICRXZWJzZXJ2aWNlSUQgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUFkZCgKICAgIE5hbWUgICA9PiAkV2Vic2VydmljZU5hbWUsCiAgICBDb25maWcgPT4gewogICAgICAgIERlYnVnZ2VyID0+IHsKICAgICAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICB9LAogICAgICAgIFByb3ZpZGVyID0+IHsKICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VJRCwKICAgICJBZGRlZCBXZWJzZXJ2aWNlIiwKKTsKCiMgZ2V0IHJlbW90ZSBob3N0IHdpdGggc29tZSBwcmVjYXV0aW9ucyBmb3IgY2VydGFpbiB1bml0IHRlc3Qgc3lzdGVtcwpteSAkSG9zdDsKbXkgJEZRRE4gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZRRE4nKTsKCiMgdHJ5IHRvIHJlc29sdmUgZnFkbiBob3N0CmlmICggJEZRRE4gbmUgJ3lvdXJob3N0LmV4YW1wbGUuY29tJyAmJiBnZXRob3N0YnluYW1lKCRGUUROKSApIHsKICAgICRIb3N0ID0gJEZRRE47Cn0KCiMgdHJ5IHRvIHJlc29sdmUgbG9jYWxob3N0IGluc3RlYWQKaWYgKCAhJEhvc3QgJiYgZ2V0aG9zdGJ5bmFtZSgnbG9jYWxob3N0JykgKSB7CiAgICAkSG9zdCA9ICdsb2NhbGhvc3QnOwp9CgojIHVzZSBoYXJkY29kZWQgbG9jYWxob3N0IGlwIGFkZHJlc3MKaWYgKCAhJEhvc3QgKSB7CiAgICAkSG9zdCA9ICcxMjcuMC4wLjEnOwp9CgojIHByZXBhcmUgd2Vic2VydmljZSBjb25maWcKbXkgJFJlbW90ZVN5c3RlbSA9CiAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0h0dHBUeXBlJykKICAgIC4gJzovLycKICAgIC4gJEhvc3QKICAgIC4gJy8nCiAgICAuICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKQogICAgLiAnL25waC1nZW5lcmljaW50ZXJmYWNlLnBsL1dlYnNlcnZpY2VJRC8nCiAgICAuICRXZWJzZXJ2aWNlSUQ7CgpteSAkV2Vic2VydmljZUNvbmZpZyA9IHsKCiAgICAjICAgIE5hbWUgPT4gJycsCiAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICdUZXN0IGZvciBDb25maWdJdGVtIENvbm5lY3RvciB1c2luZyBTT0FQIHRyYW5zcG9ydCBiYWNrZW5kLicsCiAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgfSwKICAgIFByb3ZpZGVyID0+IHsKICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICBUeXBlICAgPT4gJ0hUVFA6OlNPQVAnLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwXzAwMF8wMDAsCiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdHJzLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gewogICAgICAgICAgICBDb25maWdJdGVtVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1VcGRhdGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDb25maWdJdGVtQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1DcmVhdGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZXNzaW9uQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Nlc3Npb246OlNlc3Npb25DcmVhdGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgUmVxdWVzdGVyID0+IHsKICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICBUeXBlICAgPT4gJ0hUVFA6OlNPQVAnLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTmFtZVNwYWNlID0+ICdodHRwOi8vb3Rycy5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuY29kaW5nICA9PiAnVVRGLTgnLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBJbnZva2VyID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ29uZmlnSXRlbVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKfTsKCiMgdXBkYXRlIHdlYnNlcnZpY2Ugd2l0aCByZWFsIGNvbmZpZwpteSAkV2Vic2VydmljZVVwZGF0ZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlVXBkYXRlKAogICAgSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgTmFtZSAgICA9PiAkV2Vic2VydmljZU5hbWUsCiAgICBDb25maWcgID0+ICRXZWJzZXJ2aWNlQ29uZmlnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlVXBkYXRlLAogICAgIlVwZGF0ZWQgV2Vic2VydmljZSAkV2Vic2VydmljZUlEIC0gJFdlYnNlcnZpY2VOYW1lIiwKKTsKCiMgZGVidWdnZXIgb2JqZWN0Cm15ICREZWJ1Z2dlck9iamVjdCA9IEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXItPm5ldygKICAgIERlYnVnZ2VyQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgV2Vic2VydmljZUlEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIENvbW11bmljYXRpb25UeXBlID0+ICdQcm92aWRlcicsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkRGVidWdnZXJPYmplY3QsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcicsCiAgICAnRGVidWdnZXJPYmplY3QgaW5zdGFuY2lhdGUgY29ycmVjdGx5JywKKTsKCiMgR2V0IFNlc3Npb25JRAojIGNyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0Cm15ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgIHJlZiAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCwKICAgICJTZXNzaW9uSUQgLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCik7CgojIGNyZWF0ZSBhIG5ldyB1c2VyIGZvciBjdXJyZW50IHRlc3QKbXkgJFVzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2l0c20tY29uZmlnaXRlbScgXSwKKTsKbXkgJFBhc3N3b3JkID0gJFVzZXJMb2dpbjsKCiMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKbXkgJFJlcXVlc3RlclNlc3Npb25SZXN1bHQgPSAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdC0+UnVuKAogICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBJbnZva2VyICAgICAgPT4gJ1Nlc3Npb25DcmVhdGUnLAogICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgfSwKKTsKCm15ICROZXdTZXNzaW9uSUQgPSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdC0+e0RhdGF9LT57U2Vzc2lvbklEfTsKCiMgY3JlYXRlIGEgbmV3IGNvbmZpZyBpdGVtIHdpdGggdGhlIGJhc2ljIG9wdGlvbnMKbXkgJENvbmZpZ0l0ZW0gPSB7CiAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgTklDID0+IHsKICAgICAgICAgICAgTklDICAgICAgICA9PiAnTG8wJywKICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgIH0sCiAgICB9LAp9OwoKIyBjcmVhdGUgbG9jYWwgb2JqZWN0Cm15ICRDb25maWdJdGVtQ3JlYXRlT2JqZWN0ID0gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1DcmVhdGUtPm5ldygKICAgIERlYnVnZ2VyT2JqZWN0ID0+ICREZWJ1Z2dlck9iamVjdCwKICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCik7CgojIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlCm15ICRDcmVhdGVSZXN1bHQgPSAkQ29uZmlnSXRlbUNyZWF0ZU9iamVjdC0+UnVuKAogICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBJbnZva2VyICAgICAgPT4gJ0NvbmZpZ0l0ZW1DcmVhdGUnLAogICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICBVc2VyTG9naW4gID0+ICRVc2VyTG9naW4sCiAgICAgICAgUGFzc3dvcmQgICA9PiAkUGFzc3dvcmQsCiAgICAgICAgQ29uZmlnSXRlbSA9PiAkQ29uZmlnSXRlbSwKICAgIH0sCik7CgpteSAkQ29uZmlnSXRlbUlEID0gJENyZWF0ZVJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEfSB8fCAnJzsKCiRTZWxmLT5UcnVlKAogICAgJENvbmZpZ0l0ZW1JRCwKICAgICJBZGRlZCBDb25maWdJdGVtICRDb25maWdJdGVtSUQgLSAkQ3JlYXRlUmVzdWx0LT57RGF0YX0tPntOdW1iZXJ9IiwKKTsKCiMgYWN0dWFsIHRlc3RzCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnRW1wdHkgUmVxdWVzdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHt9LAogICAgICAgIEV4cGVjdGVkRGF0YSAgID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ29uZmlnSXRlbScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQ29uZmlnSXRlbUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NVcGRhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbmZpZ0l0ZW1JRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICdOb3RFeGlzaXRuZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBDSVhNTERhdGEnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1VwZGF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDb25maWdJdGVtICAgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ0lYTUxEYXRhJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NVcGRhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgQ29uZmlnSXRlbSAgID0+IHsKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQ2xhc3MnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1VwZGF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDb25maWdJdGVtICAgPT4gewogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgTmFtZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIERlcGxTdGF0ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEluY2lTdGF0ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgQ2xhc3MnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1VwZGF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDb25maWdJdGVtICAgPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdOb3RFeGlzaXRuZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgRGVwbFN0YXRlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NVcGRhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgQ29uZmlnSXRlbSAgID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0knIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1dyb25nIEluY2lTdGF0ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIE5JQy0+TklDJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NVcGRhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgQ29uZmlnSXRlbSAgID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0knIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBOSUMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIE5JQy0+SXBPdmVyREhDUCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTklDID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTklDID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgTklDLT5OSUMgaW4gYXJyYXknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1VwZGF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDb25maWdJdGVtICAgPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5JQyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBOSUMtPklwT3ZlckRIQ1AgaW4gYXJyYXknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1VwZGF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDb25maWdJdGVtICAgPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5JQyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1dyb25nIE5JQy0+SXBPdmVyREhDUCBHZW5lcmFsIENhdGFsb2cgaW4gSGFzaCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTklDID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdXcm9uZyBOSUMtPklwT3ZlckRIQ1AgR2VuZXJhbCBDYXRhbG9nIGluIEFycmF5IEhhc2gnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1VwZGF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDb25maWdJdGVtICAgPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5JQyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdXcm9uZyBWZW5kb3IgTG9uZyBUZXh0ICcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmVuZG9yID0+ICdhJyB4IDUxLAogICAgICAgICAgICAgICAgICAgIE5JQyAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnV3JvbmcgV2FycmFudHlFeHBpcmF0aW9uRGF0ZSBEYXRlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NVcGRhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgQ29uZmlnSXRlbSAgID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0knIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWZW5kb3IgPT4gJ1RvcmVybyBDaGlwcycsCiAgICAgICAgICAgICAgICAgICAgTklDICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnWWVzJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIFdhcnJhbnR5RXhwaXJhdGlvbkRhdGUgPT4gJzE5MzAtMzAtMzAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdXcm9uZyBPd25lciBDdXN0b21lcicsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmVuZG9yID0+ICdUb3Jlcm8gQ2hpcHMnLAogICAgICAgICAgICAgICAgICAgIE5JQyAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBXYXJyYW50eUV4cGlyYXRpb25EYXRlID0+ICcxOTc3LTEyLTEyJywKICAgICAgICAgICAgICAgICAgICBPd25lciAgICAgICAgICAgICAgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1dyb25nIFJhbSBUb28gTWFueScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmVuZG9yID0+ICdUb3Jlcm8gQ2hpcHMnLAogICAgICAgICAgICAgICAgICAgIE5JQyAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBXYXJyYW50eUV4cGlyYXRpb25EYXRlID0+ICcxOTc3LTEyLTEyJywKICAgICAgICAgICAgICAgICAgICBPd25lciAgICAgICAgICAgICAgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICAgICAgUmFtICAgICAgICAgICAgICAgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAgICAgICAgIDIsCiAgICAgICAgICAgICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAgICAgICAgICAgIDQsCiAgICAgICAgICAgICAgICAgICAgICAgIDUsCiAgICAgICAgICAgICAgICAgICAgICAgIDYsCiAgICAgICAgICAgICAgICAgICAgICAgIDcsCiAgICAgICAgICAgICAgICAgICAgICAgIDgsCiAgICAgICAgICAgICAgICAgICAgICAgIDksCiAgICAgICAgICAgICAgICAgICAgICAgIDEwLAogICAgICAgICAgICAgICAgICAgICAgICAxMSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdXcm9uZyBBdHRhY2htZW50JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NVcGRhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgQ29uZmlnSXRlbSAgID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0knIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWZW5kb3IgPT4gJ1RvcmVybyBDaGlwcycsCiAgICAgICAgICAgICAgICAgICAgTklDICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnWWVzJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIFdhcnJhbnR5RXhwaXJhdGlvbkRhdGUgPT4gJzE5NzctMTItMTInLAogICAgICAgICAgICAgICAgICAgIE93bmVyICAgICAgICAgICAgICAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgICAgICBSYW0gICAgICAgICAgICAgICAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgNDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgNDAwMCwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEF0dGFjaG1lbnQtPkNvbnRlbnQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc1VwZGF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDb25maWdJdGVtICAgPT4gewogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1Rlc3RDSScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZlbmRvciA9PiAnVG9yZXJvIENoaXBzJywKICAgICAgICAgICAgICAgICAgICBOSUMgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdZZXMnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgV2FycmFudHlFeHBpcmF0aW9uRGF0ZSA9PiAnMTk3Ny0xMi0xMicsCiAgICAgICAgICAgICAgICAgICAgT3duZXIgICAgICAgICAgICAgICAgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgICAgIFJhbSAgICAgICAgICAgICAgICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICA0MDAwLAogICAgICAgICAgICAgICAgICAgICAgICA0MDAwLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0YWNobWVudCA9PiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ0NvbmZpZ0l0ZW1VcGRhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBBdHRhY2htZW50LT5Db250ZW50VHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdENJJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIENJWE1MRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmVuZG9yID0+ICdUb3Jlcm8gQ2hpcHMnLAogICAgICAgICAgICAgICAgICAgIE5JQyAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUMgICAgICAgID0+ICdFdGgxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQb3ZlckRIQ1AgPT4gJ1llcycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBXYXJyYW50eUV4cGlyYXRpb25EYXRlID0+ICcxOTc3LTEyLTEyJywKICAgICAgICAgICAgICAgICAgICBPd25lciAgICAgICAgICAgICAgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICAgICAgUmFtICAgICAgICAgICAgICAgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIDQwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgIDQwMDAsCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRhY2htZW50ID0+IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1ZHaHBjeUJwY3lCaGJpQmxibU52WkdWa0lIUmxlSFE9JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnQ29uZmlnSXRlbVVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEF0dGFjaG1lbnQtPkZpbGVuYW1lJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NVcGRhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgQ29uZmlnSXRlbSAgID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAnQ29tcHV0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUZXN0Q0knIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVwbFN0YXRlID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ0lYTUxEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWZW5kb3IgPT4gJ1RvcmVybyBDaGlwcycsCiAgICAgICAgICAgICAgICAgICAgTklDICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyAgICAgICAgPT4gJ0V0aDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvdmVyREhDUCA9PiAnWWVzJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIFdhcnJhbnR5RXhwaXJhdGlvbkRhdGUgPT4gJzE5NzctMTItMTInLAogICAgICAgICAgICAgICAgICAgIE93bmVyICAgICAgICAgICAgICAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgICAgICBSYW0gICAgICAgICAgICAgICAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgNDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgNDAwMCwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaGJpQmxibU52WkdWa0lIUmxlSFE9JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdDb25maWdJdGVtVXBkYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdDb25maWdJdGVtVXBkYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0NvcnJlY3QgQ29uZmlnSXRlbScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzVXBkYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gICA9PiB7CiAgICAgICAgICAgICAgICBDbGFzcyAgICAgPT4gJ0NvbXB1dGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVGVzdCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDSVhNTERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZlbmRvciAgICAgICAgICA9PiAnTGVub3ZvJywKICAgICAgICAgICAgICAgICAgICBNb2RlbCAgICAgICAgICAgPT4gJ1RoaW5rcGFkJywKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgPT4gJ1RoaW5rcGFkIFgzMDAnLAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnRGVza3RvcCcsCiAgICAgICAgICAgICAgICAgICAgT3duZXIgICAgICAgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICAgICAgU2VyaWFsTnVtYmVyICAgID0+ICdhYmMxMjM0NWFiYycsCiAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW5nU3lzdGVtID0+ICdDZW50T1MgNi4wJywKICAgICAgICAgICAgICAgICAgICBDUFUgICAgICAgICAgICAgPT4gJ0ludGVsIENvcmUgaTMnLAogICAgICAgICAgICAgICAgICAgIFJhbSAgICAgICAgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICc0MDAwJywKICAgICAgICAgICAgICAgICAgICAgICAgJzIwMDAnLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgSGFyZERpc2sgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBIYXJkRGlzayA9PiAnL2RldicsCiAgICAgICAgICAgICAgICAgICAgICAgIENhcGFjaXR5ID0+ICc1MDAwMCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBGUUROID0+ICdob3RzLmV4YW1wbGUuY29tJywKICAgICAgICAgICAgICAgICAgICBOSUMgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUEFkZHJlc3MgID0+ICcxOTIuMTY4LjMwLjEnLAoKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTklDICAgICAgICA9PiAnRXRoMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+ICdZZXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBBZGRyZXNzICA9PiAnMjAwLjM0LjU2Ljc4JywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIEdyYXBoaWNBZGFwdGVyICAgICAgICAgPT4gJ0FUSSBSYWRlb24gMzAwJywKICAgICAgICAgICAgICAgICAgICBXYXJyYW50eUV4cGlyYXRpb25EYXRlID0+ICcxOTc3LTEyLTEyJywKICAgICAgICAgICAgICAgICAgICBJbnN0YWxsRGF0ZSAgICAgICAgICAgID0+ICcxOTc3LTEyLTEyJywKICAgICAgICAgICAgICAgICAgICBOb3RlICAgICAgICAgICAgICAgICAgID0+ICdUaGlzIGlzIGEgRGVtbyBDSScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHt9LAogICAgICAgIE9wZXJhdGlvbiAgICA9PiAnQ29uZmlnSXRlbVVwZGF0ZScsCiAgICB9LAopOwoKIyBzdGFydCB0ZXN0aW5nCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBjcmVhdGUgbG9jYWwgb2JqZWN0CiAgICBteSAkTG9jYWxPYmplY3QgPSAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbmZpZ0l0ZW06OiRUZXN0LT57T3BlcmF0aW9ufSItPm5ldygKICAgICAgICBEZWJ1Z2dlck9iamVjdCA9PiAkRGVidWdnZXJPYmplY3QsCiAgICAgICAgV2Vic2VydmljZUlEICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29uZmlnSXRlbTo6JFRlc3QtPntPcGVyYXRpb259IiwKICAgICAgICByZWYgJExvY2FsT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ3JlYXRlIGxvY2FsIG9iamVjdCIsCiAgICApOwoKICAgICMgbWFrZSBhIGRlZXAgY29weSB0byBhdm9pZCBjaGFuZ2luZyB0aGUgZGVmaW5pdGlvbgogICAgbXkgJENsb25lZFJlcXVlc3REYXRhID0gU3RvcmFibGU6OmRjbG9uZSggJFRlc3QtPntSZXF1ZXN0RGF0YX0gKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlCiAgICBteSAkTG9jYWxSZXN1bHQgPSAkTG9jYWxPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgICAgICAgICAleyAkVGVzdC0+e1JlcXVlc3REYXRhfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgcmVzdG9yZSBjbG9uZWQgZGF0YQogICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0gPSAkQ2xvbmVkUmVxdWVzdERhdGE7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICAnSEFTSCcsCiAgICAgICAgcmVmICRMb2NhbFJlc3VsdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBzdHJ1Y3R1cmUgaXMgdmFsaWQiLAogICAgKTsKCiAgICAjIGNyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0CiAgICBteSAkUmVxdWVzdGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKICAgICRTZWxmLT5JcygKICAgICAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgICAgIHJlZiAkUmVxdWVzdGVyT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gVXBkYXRlIHJlcXVlc3RlciBvYmplY3QiLAogICAgKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlCiAgICBteSAkUmVxdWVzdGVyUmVzdWx0ID0gJFJlcXVlc3Rlck9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICROZXdTZXNzaW9uSUQsCiAgICAgICAgICAgICV7ICRUZXN0LT57UmVxdWVzdERhdGF9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICAnSEFTSCcsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57U3VjY2Vzc30sCiAgICAgICAgJFRlc3QtPntTdWNjZXNzUmVxdWVzdH0sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgc3VjY2Vzc2Z1bCByZXN1bHQiLAogICAgKTsKCiAgICAjIHRlc3RzIHN1cHBvc2VkIHRvIHN1Y2NlZWQKICAgIGlmICggJFRlc3QtPntTdWNjZXNzVXBkYXRlfSApIHsKCiAgICAgICAgIyBsb2NhbCByZXN1bHRzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgQ29uZmlnSXRlbUlEIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57TnVtYmVyfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgTnVtYmVyIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfSwKICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yIGlzIHVuZGVmaW5lZC4iLAogICAgICAgICk7CgogICAgICAgICMgcmVxdWVzdGVyIHJlc3VsdHMKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IENvbmZpZ0l0ZW1JRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntOdW1iZXJ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgTnVtYmVyIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgRXJyb3IgaXMgdW5kZWZpbmVkLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGhlIENvbmZpZ0l0ZW0gZW50cnkgKGZyb20gbG9jYWwgcmVzdWx0KQogICAgICAgIG15ICRMb2NhbFZlcnNpb25EYXRhID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSgkTG9jYWxWZXJzaW9uRGF0YSksCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gY3JlYXRlZCBsb2NhbCB2ZXJzaW9uIHN0cmN0dXJlIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRoZSBjb25maWcgaXRlbSBlbnRyeSAoZnJvbSByZXF1ZXN0ZXIgcmVzdWx0KQogICAgICAgIG15ICRSZXF1ZXN0ZXJWZXJzaW9uRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIElzSGFzaFJlZldpdGhEYXRhKCRSZXF1ZXN0ZXJWZXJzaW9uRGF0YSksCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gY3JlYXRlZCByZXF1ZXN0ZXIgY29uZmlnIGl0ZW0gc3RyY3R1cmUgd2l0aCBUcnVlLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBjb25maWcgaXRlbSBhdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIHRlc3QKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoTnVtYmVyIENsYXNzIE5hbWUgSW5jaVN0YXRlIERlcGxTdGF0ZSBEZXBsU3RhdGVUeXBlKSkgewogICAgICAgICAgICBpZiAoICRUZXN0LT57UmVxdWVzdERhdGF9LT57Q29uZmlnSXRlbX0tPnskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkTG9jYWxWZXJzaW9uRGF0YS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57Q29uZmlnSXRlbX0tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIENvbmZpZ0l0ZW0tPiRBdHRyaWJ1dGUiIC4gIiBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdHJhbnNmb3JtIFhNTCBkYXRhIHRvIGEgY29tcGFyYWJsZSBmb3JtYXQKICAgICAgICBteSAkRGVmaW5pdGlvbiA9ICRMb2NhbFZlcnNpb25EYXRhLT57WE1MRGVmaW5pdGlvbn07CgogICAgICAgICMgbWFrZSBhIGRlZXAgY29weSB0byBhdm9pZCBjaGFuZ2luZyB0aGUgcmVzdWx0CiAgICAgICAgbXkgJENsb25lZFhNTERhdGEgPSBTdG9yYWJsZTo6ZGNsb25lKCAkTG9jYWxWZXJzaW9uRGF0YS0+e1hNTERhdGF9ICk7CgogICAgICAgIG15ICRGb3JtYXRlZFhNTERhdGEgPSAkTG9jYWxPYmplY3QtPkludmVydEZvcm1hdFhNTERhdGEoCiAgICAgICAgICAgIFhNTERhdGEgPT4gJENsb25lZFhNTERhdGEtPlsxXS0+e1ZlcnNpb259LAogICAgICAgICk7CgogICAgICAgIG15ICRSZXBsYWNlZFhNTERhdGEgPSAkTG9jYWxPYmplY3QtPkludmVydFJlcGxhY2VYTUxEYXRhKAogICAgICAgICAgICBYTUxEYXRhICAgID0+ICRGb3JtYXRlZFhNTERhdGEsCiAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb24sCiAgICAgICAgKTsKCiAgICAgICAgIyBjb21wYXJlIFhNTCBkYXRhCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkUmVwbGFjZWRYTUxEYXRhLAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0NvbmZpZ0l0ZW19LT57Q0lYTUxEYXRhfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBDb25maWdJdGVtLT5DSVhNTERhdGEgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBhdHRhY2htZW50cwogICAgICAgIGlmICggZGVmaW5lZCAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0F0dGFjaG1lbnR9ICkgewogICAgICAgICAgICBteSBAQXR0YWNobWVudExpc3QgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUF0dGFjaG1lbnRMaXN0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSBAQXR0YWNobWVudHM7CiAgICAgICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgICAgIGZvciBteSAkRmlsZU5hbWUgKEBBdHRhY2htZW50TGlzdCkgewogICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkRmlsZU5hbWU7CgogICAgICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgID0+ICRGaWxlTmFtZSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBuZXh0IGlmIG5vdCBhdHRhY2htZW50CiAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCRBdHRhY2htZW50KTsKCiAgICAgICAgICAgICAgICAjIGNvbnZlcnQgY29udGVudCB0byBiYXNlNjQKICAgICAgICAgICAgICAgICRBdHRhY2htZW50LT57Q29udGVudH0gPSBlbmNvZGVfYmFzZTY0KCAkQXR0YWNobWVudC0+e0NvbnRlbnR9LCAnJyApOwoKICAgICAgICAgICAgICAgICMgZGVsZXRlIG5vdCBuZWVkZWQgYXR0aWJ1dGVzCiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoUHJlZmVyZW5jZXMgRmlsZXNpemUgVHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEF0dGFjaG1lbnQtPnskQXR0cmlidXRlfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2ggQEF0dGFjaG1lbnRzLCAkQXR0YWNobWVudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgQFJlcXVlc3RlZEF0dGFjaG1lbnRzOwogICAgICAgICAgICBpZiAoIHJlZiAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0F0dGFjaG1lbnR9IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgICAgIHB1c2ggQFJlcXVlc3RlZEF0dGFjaG1lbnRzLCAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0NvbmZpZ0l0ZW19LT57QXR0YWNobWVudH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBAUmVxdWVzdGVkQXR0YWNobWVudHMgPSBAeyAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0NvbmZpZ0l0ZW19LT57QXR0YWNobWVudH0gfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgXEBBdHRhY2htZW50cywKICAgICAgICAgICAgICAgIFxAUmVxdWVzdGVkQXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIENvbmZpZ0l0ZW0tPkF0dGFjaG1lbnQgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFZlcnNpb25EYXRhLAogICAgICAgICAgICAkUmVxdWVzdGVyVmVyc2lvbkRhdGEsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgY29uZmlnIGl0ZW0gcmVzdWx0IG1hdGNoZWQgd2l0aCByZW1vdGUgcmVzdWx0LiIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRlc3RzIHN1cHBvc2VkIHRvIGZhaWwKICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57Q29uZmlnSXRlbUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgQ29uZmlnSXRlbUlEIHdpdGggZmFsc2UuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57TnVtYmVyfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgTnVtYmVyIHdpdGggZmFsc2UuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvckNvZGV9LAogICAgICAgICAgICAkVGVzdC0+e0V4cGVjdGVkRGF0YX0tPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yQ29kZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yQ29kZSBtYXRjaGVkIHdpdGggZXhwZWN0ZWQgbG9jYWwgY2FsbCByZXN1bHQuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yTWVzc2FnZSB3aXRoIHRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAnJywKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIGlzIG5vdCBlbXB0eS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yQ29kZX0KICAgICAgICAgICAgICAgIC4gJzogJwogICAgICAgICAgICAgICAgLiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yTWVzc2FnZSAob3V0c2lkZSBEYXRhIGhhc2gpIG1hdGNoZWQgd2l0aCBjb25jYXRlbmF0aW9uIgogICAgICAgICAgICAgICAgLiAiIG9mIEVycm9yQ29kZSBhbmQgRXJyb3JNZXNzYWdlIHdpdGhpbiBEYXRhIGhhc2guIiwKICAgICAgICApOwoKICAgICAgICAjIHJlbW92ZSBFcnJvck1lc3NhZ2UgcGFyYW1ldGVyIGZyb20gZGlyZWN0IGNhbGwKICAgICAgICAjIHJlc3VsdCB0byBiZSBjb25zaXN0ZW50IHdpdGggU09BUCBjYWxsIHJlc3VsdAogICAgICAgIGlmICggJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfSApIHsKICAgICAgICAgICAgZGVsZXRlICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX07CiAgICAgICAgfQoKICAgICAgICAjIHNhbml0eSBjaGVjawogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb01lc3NhZ2UgKG91dHNpc2UgRGF0YSBoYXNoKSBnb3QgcmVtb3ZlZCB0byBjb21wYXJlIgogICAgICAgICAgICAgICAgLiAiIGxvY2FsIGFuZCByZW1vdGUgdGVzdHMuIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwogICAgfQp9CgojIGNsZWFuIHVwIGNvbmZpZyBpdGVtcwpteSAkQ29uZmlnSXRlbURlbGV0ZSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJENvbmZpZ0l0ZW1EZWxldGUsCiAgICAiQ29uZmlnSXRlbURlbGV0ZSgpIHN1Y2Nlc3NmdWwgZm9yIENvbmZpZ0l0ZW0gSUQgJENvbmZpZ0l0ZW1JRCIsCik7CgojIGNsZWFuIHVwIHdlYnNlcnZpY2UKbXkgJFdlYnNlcnZpY2VEZWxldGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZURlbGV0ZSgKICAgIElEICAgICA9PiAkV2Vic2VydmljZUlELAogICAgVXNlcklEID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VEZWxldGUsCiAgICAiRGVsZXRlZCBXZWJzZXJ2aWNlICRXZWJzZXJ2aWNlSUQiLAopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCm15ICRYTUxEZWZpbml0aW9uID0gWwogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ1ZlbmRvcicsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmVuZG9yJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ01vZGVsJywKICAgICAgICBOYW1lICAgICAgID0+ICdNb2RlbCcsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdEZXNjcmlwdGlvbicsCiAgICAgICAgTmFtZSAgICAgICA9PiAnRGVzY3JpcHRpb24nLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ1R5cGUnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1R5cGUnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ0dlbmVyYWxDYXRhbG9nJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNvbXB1dGVyOjpUeXBlJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdPd25lcicsCiAgICAgICAgTmFtZSAgICAgICA9PiAnT3duZXInLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnQ3VzdG9tZXInLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ1NlcmlhbE51bWJlcicsCiAgICAgICAgTmFtZSAgICAgICA9PiAnU2VyaWFsIE51bWJlcicsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgPT4gJ09wZXJhdGluZ1N5c3RlbScsCiAgICAgICAgTmFtZSAgPT4gJ09wZXJhdGluZyBTeXN0ZW0nLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgID0+ICdDUFUnLAogICAgICAgIE5hbWUgID0+ICdDUFUnLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNYXggPT4gMTYsCiAgICB9LAogICAgewogICAgICAgIEtleSAgID0+ICdSYW0nLAogICAgICAgIE5hbWUgID0+ICdSYW0nLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICB9LAogICAgewogICAgICAgIEtleSAgID0+ICdIYXJkRGlzaycsCiAgICAgICAgTmFtZSAgPT4gJ0hhcmQgRGlzaycsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1heCA9PiAxMDAsCiAgICAgICAgU3ViICAgICAgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnQ2FwYWNpdHknLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gJ0NhcGFjaXR5JywKICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAwLAogICAgICAgICAgICAgICAgU3ViICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0NhcGFjaXR5JywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJ0NhcGFjaXR5JywKICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAwLAogICAgICAgICAgICAgICAgICAgICAgICBTdWIgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0NhcGFjaXR5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAnQ2FwYWNpdHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAxMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0ZRRE4nLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0ZRRE4nLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgID0+ICdOSUMnLAogICAgICAgIE5hbWUgID0+ICdOZXR3b3JrIEFkYXB0ZXInLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwLAogICAgICAgICAgICBSZXF1aXJlZCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIENvdW50TWluICAgICA9PiAwLAogICAgICAgIENvdW50TWF4ICAgICA9PiAxMCwKICAgICAgICBDb3VudERlZmF1bHQgPT4gMSwKICAgICAgICBTdWIgICAgICAgICAgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnSVBvdmVyREhDUCcsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAnSVAgb3ZlciBESENQJywKICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpZZXNObycsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnSVBBZGRyZXNzJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0lQIEFkZHJlc3MnLAogICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNDAsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDQwLAogICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIENvdW50TWluICAgICA9PiAwLAogICAgICAgICAgICAgICAgQ291bnRNYXggICAgID0+IDIwLAogICAgICAgICAgICAgICAgQ291bnREZWZhdWx0ID0+IDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgPT4gJ0dyYXBoaWNBZGFwdGVyJywKICAgICAgICBOYW1lICA9PiAnR3JhcGhpYyBBZGFwdGVyJywKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICA9PiAnT3RoZXJFcXVpcG1lbnQnLAogICAgICAgIE5hbWUgID0+ICdPdGhlciBFcXVpcG1lbnQnLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ1RleHRBcmVhJywKICAgICAgICAgICAgUmVxdWlyZWQgPT4gMSwKICAgICAgICB9LAogICAgICAgIENvdW50TWluICAgICA9PiAwLAogICAgICAgIENvdW50RGVmYXVsdCA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdXYXJyYW50eUV4cGlyYXRpb25EYXRlJywKICAgICAgICBOYW1lICAgICAgID0+ICdXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnRGF0ZScsCiAgICAgICAgICAgIFllYXJQZXJpb2RQYXN0ICAgPT4gMjAsCiAgICAgICAgICAgIFllYXJQZXJpb2RGdXR1cmUgPT4gMTAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnSW5zdGFsbERhdGUnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0luc3RhbGwgRGF0ZScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdEYXRlJywKICAgICAgICAgICAgUmVxdWlyZWQgICAgICAgICA9PiAxLAogICAgICAgICAgICBZZWFyUGVyaW9kUGFzdCAgID0+IDIwLAogICAgICAgICAgICBZZWFyUGVyaW9kRnV0dXJlID0+IDEwLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNaW4gICAgID0+IDAsCiAgICAgICAgQ291bnREZWZhdWx0ID0+IDAsCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ05vdGUnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ05vdGUnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ1RleHRBcmVhJywKICAgICAgICAgICAgUmVxdWlyZWQgPT4gMSwKICAgICAgICB9LAogICAgICAgIENvdW50TWluICAgICA9PiAwLAogICAgICAgIENvdW50RGVmYXVsdCA9PiAwLAogICAgfSwKXTsKCm15ICRYTUxEYXRhID0gewogICAgSGFyZERpc2sgPT4gWwogICAgICAgIHVuZGVmLAogICAgICAgIHsKICAgICAgICAgICAgQ29udGVudCAgPT4gJ0hEMScsCiAgICAgICAgICAgIENhcGFjaXR5ID0+IFsKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzQyIEdCJywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBDb250ZW50ICA9PiAnSEQyJywKICAgICAgICAgICAgQ2FwYWNpdHkgPT4gWwogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnNzgwIEdCJywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICBdLAp9OwoKbXkgQFNob3dDb2x1bW5zQnlDbGFzcyA9ICgKICAgICdOYW1lJywKICAgICdDdXJEZXBsU3RhdGUnLAogICAgJ0NQVTo6MScsCiAgICAnSGFyZERpc2s6OjE6OkNhcGFjaXR5OjoxJywKICAgICdIYXJkRGlzazo6MicsCiAgICAnSGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxJywKICAgICdXYXJyYW50eUV4cGlyYXRpb25EYXRlOjoxJywKICAgICdDcmVhdGVUaW1lJywKKTsKCm15ICRSZXN1bHQgPSAkTGF5b3V0T2JqZWN0LT5YTUxEYXRhMkhhc2goCiAgICBYTUxEZWZpbml0aW9uID0+ICRYTUxEZWZpbml0aW9uLAogICAgWE1MRGF0YSAgICAgICA9PiAkWE1MRGF0YSwKICAgIEF0dHJpYnV0ZXMgICAgPT4gXEBTaG93Q29sdW1uc0J5Q2xhc3MsCik7CgpteSAkRXhwZWN0ZWQgPSB7CiAgICAnQ1BVOjoxJyA9PiB7CiAgICAgICAgVmFsdWUgPT4gJycsCiAgICAgICAgTmFtZSAgPT4gJ0NQVScsCiAgICB9LAogICAgJ0hhcmREaXNrOjoxOjpDYXBhY2l0eTo6MScgPT4gewogICAgICAgIFZhbHVlID0+ICc0MiBHQicsCiAgICAgICAgTmFtZSAgPT4gJ0NhcGFjaXR5JywKICAgIH0sCiAgICAnSGFyZERpc2s6OjInID0+IHsKICAgICAgICBWYWx1ZSA9PiAnSEQyJywKICAgICAgICBOYW1lICA9PiAnSGFyZCBEaXNrJywKICAgIH0sCiAgICAnSGFyZERpc2s6OjI6OkNhcGFjaXR5OjoxJyA9PiB7CiAgICAgICAgVmFsdWUgPT4gJzc4MCBHQicsCiAgICAgICAgTmFtZSAgPT4gJ0NhcGFjaXR5JywKICAgIH0sCiAgICAnV2FycmFudHlFeHBpcmF0aW9uRGF0ZTo6MScgPT4gewogICAgICAgIE5hbWUgID0+ICdXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUnLAogICAgICAgIFZhbHVlID0+ICcnCiAgICB9Cn07CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkUmVzdWx0LAogICAgJEV4cGVjdGVkLAogICAgJ1hNTCBEYXRhIGNvbnZlcnRzIGludG8gSGFzaCBzdHJ1Y3R1cmUnLAopOwoKIyBUZXN0IElUU01Db25maWdJdGVtSW5wdXRDcmVhdGUoKSB0byBjaGVjayBidWcjMTQxNzQgKGh0dHBzOi8vYnVncy5vdHJzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNzQpLgojIFNldCBPVFJTVGltZVpvbmUgdG8gVVRDLgokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdPVFJTVGltZVpvbmUnLAogICAgVmFsdWUgPT4gJ1VUQycsCik7CgojIEdldCBMYXlvdXQgb2JqZWN0IHdpdGggRVNUIHVzZXIgdGltZSB6b25lLgokS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoCiAgICBPYmplY3RzID0+IFsnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCddLAopOwokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcgPT4gewogICAgICAgIExhbmcgICAgICAgICA9PiAnZW4nLAogICAgICAgIFVzZXJUaW1lWm9uZSA9PiAnRVNUJywKICAgIH0sCik7CiRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgpteSAlUGFyYW0gPSAoCiAgICAnSXRlbScgPT4gewogICAgICAgICdTZWFyY2hhYmxlJyA9PiAxLAogICAgICAgICdGb3JtJyAgICAgICA9PiB7CiAgICAgICAgICAgICdJbnN0YWxsRGF0ZTo6MScgPT4ge30KICAgICAgICB9LAogICAgICAgICdLZXknICAgICAgPT4gJ0luc3RhbGxEYXRlJywKICAgICAgICAnQ291bnRNYXgnID0+IDEsCiAgICAgICAgJ05hbWUnICAgICA9PiAnSW5zdGFsbCBEYXRlJywKICAgICAgICAnQ291bnRNaW4nID0+IDAsCiAgICAgICAgJ0lucHV0JyAgICA9PiB7CiAgICAgICAgICAgICdUeXBlJyAgICAgICAgICAgICA9PiAnRGF0ZScsCiAgICAgICAgICAgICdZZWFyUGVyaW9kRnV0dXJlJyA9PiAxMCwKICAgICAgICAgICAgJ1JlcXVpcmVkJyAgICAgICAgID0+IDEsCiAgICAgICAgICAgICdZZWFyUGVyaW9kUGFzdCcgICA9PiAyMAogICAgICAgIH0sCiAgICAgICAgJ0NvdW50RGVmYXVsdCcgPT4gMAogICAgfSwKICAgICdJbnZhbGlkJyAgPT4gMCwKICAgICdWYWx1ZScgICAgPT4gJzIwMTgtMDEtMTYnLAogICAgJ0tleScgICAgICA9PiAnSW5zdGFsbERhdGU6OjEnLAogICAgJ1JlcXVpcmVkJyA9PiAxLAogICAgJ0l0ZW1JZCcgICA9PiAnSXRlbTE0MCcKKTsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBPdmVycmlkZVRpbWVab25lID0+IDAsCiAgICAgICAgRXhwZWN0ZWQgICAgICAgICA9PiAnPG9wdGlvbiBccyB2YWx1ZT0iMTUiIFxzIHNlbGVjdGVkPSJzZWxlY3RlZCI+MTU8L29wdGlvbj4nLAogICAgICAgIENvbW1lbnQgICAgICAgICAgPT4gJ2RhdGUgaXMgY2hhbmdlZCcsCiAgICB9LAogICAgewogICAgICAgIE92ZXJyaWRlVGltZVpvbmUgPT4gMSwKICAgICAgICBFeHBlY3RlZCAgICAgICAgID0+ICc8b3B0aW9uIFxzIHZhbHVlPSIxNiIgXHMgc2VsZWN0ZWQ9InNlbGVjdGVkIj4xNjxcL29wdGlvbj4nLAogICAgICAgIENvbW1lbnQgICAgICAgICAgPT4gJ2RhdGUgaXMgbm90IGNoYW5nZWQnLAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICBteSAkU3RyaW5nID0gJExheW91dE9iamVjdC0+SVRTTUNvbmZpZ0l0ZW1JbnB1dENyZWF0ZSgKICAgICAgICAlUGFyYW0sCiAgICAgICAgT3ZlcnJpZGVUaW1lWm9uZSA9PiAkVGVzdC0+e092ZXJyaWRlVGltZVpvbmV9LAogICAgKTsKCiAgICBteSAkU3VjY2VzczsKICAgIGlmICggJFN0cmluZyA9fiBteyAkVGVzdC0+e0V4cGVjdGVkfSB9bXN4ICkgewogICAgICAgICRTdWNjZXNzID0gMTsKICAgIH0KCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiT3ZlcnJpZGVUaW1lWm9uZSA9ICRUZXN0LT57T3ZlcnJpZGVUaW1lWm9uZX0gLSAkVGVzdC0+e0NvbW1lbnR9IiwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbi4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jb25maWdpdGVtJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFkbWluSVRTTUNvbmZpZ0l0ZW0uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5JVFNNQ29uZmlnSXRlbSIpOwoKICAgICAgICAjIFRlc3QgZGVmYXVsdCBJVFNNQ29uZmlnSXRlbSBjbGFzcy4KICAgICAgICBmb3IgbXkgJEl0ZW0gKHF3KCBDb21wdXRlciBIYXJkd2FyZSBMb2NhdGlvbiBOZXR3b3JrIFNvZnR3YXJlICkpIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJEl0ZW0sICdsaW5rX3RleHQnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICMgQ2hlY2sgZm9yIHRhYmxlIHN0cnVjdHVyZS4KICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSIsICAgICAgICAgICAgICdjc3MnICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRib2R5IHRyIHRkIiwgJ2NzcycgKTsKCiAgICAgICAgICAgICMgQ2xpY2sgb24gJ0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJy4KICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J0FkZCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgIyBDaGVjayBmb3IgaW5wdXQgYXJlYS4KICAgICAgICAgICAgbXkgJElucHV0RmllbGQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEZWZpbml0aW9uIiwgJ2NzcycgKTsKICAgICAgICAgICAgJElucHV0RmllbGQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJElucHV0RmllbGQtPmlzX2Rpc3BsYXllZCgpOwoKICAgICAgICAgICAgIyBSZXR1cm4gYmFjayB0byBvdmVydmlldyBzY3JlZW4uCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZG1pbklUU01Db25maWdJdGVtJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgfQoKICAgICAgICAjIEFkZCBpbnRlZ2VyIGZpZWxkIHRvIG5ldyBJVFNNQ29uZmlnSXRlbSBjbGFzcyB0byB2ZXJpZnkgZXhpc3RlbmNlIG9mIDAuCiAgICAgICAgIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGJ1ZyM2MDA1IC0gaHR0cHM6Ly9idWdzLm90cnMub3JnL3Nob3dfYnVnLmNnaT9pZD02MDA1LgogICAgICAgIG15ICRDbGFzcyAgID0gIkNsYXNzJFJhbmRvbUlEIjsKICAgICAgICBteSAkQ2xhc3NJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtQWRkKAogICAgICAgICAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgICAgIE5hbWUgICAgPT4gJENsYXNzLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ0NvbW1lbnQnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBHZXQgJ2l0c20tY29uZmlnaXRlbScgZ3JvdXAgSUQuCiAgICAgICAgbXkgJElUU01Db25maWdJdGVtR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICAgICAgR3JvdXAgPT4gJ2l0c20tY29uZmlnaXRlbScsCiAgICAgICAgKTsKCiAgICAgICAgIyBTZXQgcGVybWlzc2lvbiBmb3IgdGVzdCBjbGFzcy4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbkdlbmVyYWxDYXRhbG9nO1N1YmFjdGlvbj1JdGVtRWRpdDtJdGVtSUQ9JENsYXNzSUQiKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNQZXJtaXNzaW9uJykudmFsKCckSVRTTUNvbmZpZ0l0ZW1Hcm91cElEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWRtaW5JVFNNQ29uZmlnSXRlbS4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbklUU01Db25maWdJdGVtIik7CgogICAgICAgICMgQ2xpY2sgb24gdGVzdCBjbGFzcy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJENsYXNzLCAnbGlua190ZXh0JyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2xpY2sgb24gJ0NoYW5nZSBjbGFzcyBkZWZpbml0aW9uJy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nQWRkJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgIG15ICRJbnRlZ2VyS2V5ICAgICAgICA9ICJUZXN0SW50ZWdlciRSYW5kb21JRCI7CiAgICAgICAgbXkgJEludGVnZXJEZWZpbml0aW9uID0gPDwgIkVPRiI7Ci0tLQotIEtleTogJEludGVnZXJLZXkKICBOYW1lOiBUZXN0IEludGVnZXIKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiAgSW50ZWdlcgogICAgVmFsdWVNaW46IDAKICAgIFZhbHVlTWF4OiAxMAogICAgVmFsdWVEZWZhdWx0OiAwCkVPRgoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEZWZpbml0aW9uIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRJbnRlZ2VyRGVmaW5pdGlvbik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIFZlcmlmeSBvcHRpb24gd2l0aCAwIGluIGFkZCBjb25maWcgaXRlbSBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ7Q2xhc3NJRD0kQ2xhc3NJRCIpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9zZWxlY3RbY29udGFpbnMoXEBpZCwgXCckSW50ZWdlcktleScpXS9vcHRpb25bXEB2YWx1ZT0nMCddIiksCiAgICAgICAgICAgICJBZGQgc2NyZWVuIC0gT3B0aW9uIHdpdGggJzAnIHZhbHVlIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIFZlcmlmeSBvcHRpb24gd2l0aCAwIGluIHNlYXJjaCBjb25maWcgaXRlbSBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCIpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNTZWFyY2hDbGFzc0lEJykubGVuZ3RoOyIgKTsKICAgICAgICBzbGVlcCAxOwoKICAgICAgICAjIFNlbGVjdCB0ZXN0IGNsYXNzLgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1NlYXJjaENsYXNzSUQnKS52YWwoJyRDbGFzc0lEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI0F0dHJpYnV0ZSIpLmxlbmd0aDsnLAogICAgICAgICk7CiAgICAgICAgc2xlZXAgMTsKCiAgICAgICAgIyBDaG9vc2UgdGVzdCBpbnRlZ2VyIGZpZWxkLgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0F0dHJpYnV0ZScpLnZhbCgnJEludGVnZXJLZXknKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNTZWFyY2hJbnNlcnQgIyRJbnRlZ2VyS2V5JykubGVuZ3RoOyIKICAgICAgICApOwoKICAgICAgICAjIFZlcmlmeSBvcHRpb24gd2l0aCAwIGV4aXN0cy4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vc2VsZWN0W1xAaWQ9JyRJbnRlZ2VyS2V5J10vb3B0aW9uW1xAdmFsdWU9JzAnXSIpLAogICAgICAgICAgICAiU2VhcmNoIHNjcmVlbiAtIE9wdGlvbiB3aXRoICcwJyB2YWx1ZSBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGVhbnVwLgogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbiBXSEVSRSBjbGFzc19pZCA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCRDbGFzc0lEIF0sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJDb25maWdJdGVtIGRlZmluaXRpb25zIGZyb20gQ2xhc3NJRCAkQ2xhc3NJRCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGdlbmVyYWxfY2F0YWxvZ19wcmVmZXJlbmNlcyBXSEVSRSBnZW5lcmFsX2NhdGFsb2dfaWQgPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ2xhc3NJRCBdLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiQ2F0YWxvZ0l0ZW1JRCAkQ2xhc3NJRCBwcmVmZXJlbmNlIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJENsYXNzSUQgXSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkNhdGFsb2dJdGVtSUQgJENsYXNzSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QuCiAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICAgICAgZm9yIG15ICRDYWNoZSAocXcoQ29uZmlnSXRlbSBHZW5lcmFsQ2F0YWxvZykpIHsKICAgICAgICAgICAgJENhY2hlT2JqZWN0LT5DbGVhblVwKCBUeXBlID0+ICRDYWNoZSApOwogICAgICAgIH0KCiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwogICAgICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgICAgIG15ICVTaG93Q29sdW1uc0J5Q2xhc3NTeXNDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyktPlNldHRpbmdHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01Db25maWdJdGVtOjpGcm9udGVuZDo6QWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zQnlDbGFzcycsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAeyAkU2hvd0NvbHVtbnNCeUNsYXNzU3lzQ29uZmlne0VmZmVjdGl2ZVZhbHVlfSB9LCAnQ29tcHV0ZXI6Ok93bmVyOjoxJzsKCiAgICAgICAgIyBFbmFibGUgQWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zQnlDbGFzcyBzeXNjb25maWcgaXRlbS4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjpBZ2VudElUU01Db25maWdJdGVtIyMjU2hvd0NvbHVtbnNCeUNsYXNzJywKICAgICAgICAgICAgVmFsdWUgPT4gJFNob3dDb2x1bW5zQnlDbGFzc1N5c0NvbmZpZ3tFZmZlY3RpdmVWYWx1ZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBHZXQgY2F0YWxvZyBjbGFzcyBJRHMuCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1DbGFzc0lEczsKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1DbGFzcyAocXcoQ29tcHV0ZXIgSGFyZHdhcmUgTG9jYXRpb24gTmV0d29yayBTb2Z0d2FyZSkpIHsKICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICAgICAgICAgIE5hbWUgID0+ICRDb25maWdJdGVtQ2xhc3MsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1DbGFzc0lEcywgJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKICAgICAgICB9CgogICAgICAgICMgR2V0ICdQcm9kdWN0aW9uJyBkZXBsb3ltZW50IHN0YXRlIElELgogICAgICAgIG15ICREZXBsU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICk7CiAgICAgICAgbXkgJERlcGxTdGF0ZUlEID0gJERlcGxTdGF0ZURhdGFSZWYtPntJdGVtSUR9OwoKICAgICAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgICAgICBteSAkT3duZXIgICAgICAgICAgID0gJyJUZXN0IFRlc3QiIDx0ZXN0QHRlc3QuY29tPic7CiAgICAgICAgbXkgJENvbXB1dGVyQ2xhc3NJRCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0NvbXB1dGVyJywKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBDb25maWdJdGVtIGZvciBlYWNoIENvbmZpZ0l0ZW0gY2xhc3MuCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1OdW1iZXJzOwogICAgICAgIG15IEBDb25maWdJdGVtSURzOwogICAgICAgIGZvciBteSAkSVRTTUNvbmZpZ0l0ZW0gKEBDb25maWdJdGVtQ2xhc3NJRHMpIHsKCiAgICAgICAgICAgICMgQ3JlYXRlIENvbmZpZ0l0ZW0gbnVtYmVyLgogICAgICAgICAgICBteSAkQ29uZmlnSXRlbU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpOdW1iZXJHZW5lcmF0b3InKSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJElUU01Db25maWdJdGVtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gbnVtYmVyIGlzIGNyZWF0ZWQgLSAkQ29uZmlnSXRlbU51bWJlciIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAQ29uZmlnSXRlbU51bWJlcnMsICRDb25maWdJdGVtTnVtYmVyOwoKICAgICAgICAgICAgIyBBZGQgdGhlIG5ldyBDb25maWdJdGVtLgogICAgICAgICAgICBteSAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkSVRTTUNvbmZpZ0l0ZW0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGNyZWF0ZWQgLSBJRCAkQ29uZmlnSXRlbUlEIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJVhNTERhdGE7CiAgICAgICAgICAgIGlmICggJENvbXB1dGVyQ2xhc3NJRC0+e0l0ZW1JRH0gPT0gJElUU01Db25maWdJdGVtICkgewogICAgICAgICAgICAgICAgJVhNTERhdGEgPSAoCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE93bmVyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJE93bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBBZGQgYSBuZXcgdmVyc2lvbi4KICAgICAgICAgICAgbXkgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdTZWxlbml1bVRlc3QnLAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+IDEsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUlELAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgJVhNTERhdGEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAgICAgICAgICJWZXJzaW9uIGlzIGNyZWF0ZWQgLSBJRCAkVmVyc2lvbklEIgogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkQ29uZmlnSXRlbUlEOwogICAgICAgIH0KCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbi4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jb25maWdpdGVtJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50SVRTTUNvbmZpZ0l0ZW0sIHNvcnRlZCBieSBjcmVhdGVkIHRpbWUuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW07RmlsdGVyPUFsbDtWaWV3PTs7U29ydEJ5PUNoYW5nZVRpbWU7T3JkZXJCeT1Eb3duIgogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgZm9yIGNyZWF0ZWQgdGVzdCBDb25maWdJdGVtcyB3aXRoICdBbGwnIGZpbHRlciBhY3RpdmUKICAgICAgICBmb3IgbXkgJEFsbENvbmZpZ0l0ZW0gKEBDb25maWdJdGVtTnVtYmVycykgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2Rpdltjb250YWlucyhcQHRpdGxlLCBcJyRBbGxDb25maWdJdGVtXCcgKV0iKSwKICAgICAgICAgICAgICAgICJUZXN0IENvbmZpZ0l0ZW0gbnVtYmVyICRBbGxDb25maWdJdGVtIC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBlYWNoIG9mIENvbmZpZ0l0ZW0gY2xhc3MgZmlsdGVycyBmb3IgdGhlcmUgcmVzcGVjdGl2ZSB0ZXN0IENvbmZpZ0l0ZW0KICAgICAgICBteSAkQ291bnQgPSAwOwogICAgICAgIGZvciBteSAkQ2hlY2tDb25maWdJdGVtIChAQ29uZmlnSXRlbUlEcykgewoKICAgICAgICAgICAgIyBDbGljayBvbiBDb25maWdJdGVtIGNsYXNzCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW07U29ydEJ5PUNoYW5nZVRpbWU7T3JkZXJCeT1Eb3duO1ZpZXc9O0ZpbHRlcj0kQ29uZmlnSXRlbUNsYXNzSURzWyRDb3VudF0nICldIgogICAgICAgICAgICApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAjIENoZWNrIGZvciB0YWJsZSBzdHJ1Y3R1cmUKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjT3ZlcnZpZXdCb2R5IC5UYWJsZVNtYWxsIiwgJ2NzcycgKTsKCiAgICAgICAgICAgICMgQ2hlY2sgZm9yIENvbmZpZ0l0ZW0gbnVtYmVyCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vZGl2W2NvbnRhaW5zKFxAdGl0bGUsIFwnJENvbmZpZ0l0ZW1OdW1iZXJzWyRDb3VudF1cJyApXSIpLAogICAgICAgICAgICAgICAgIlRlc3QgQ29uZmlnSXRlbSBudW1iZXIgJENvbmZpZ0l0ZW1OdW1iZXJzWyRDb3VudF0gLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRDb3VudCsrOwoKICAgICAgICAgICAgIyBDaGVjayBpZiB0aGVyZSBpcyBjb2x1bW4gQ3JlYXRlIFRpbWUgZm9yIENvbXB1dGVyIGNsYXNzCiAgICAgICAgICAgICMgU2VlIGJ1ZyMxNDA0OQogICAgICAgICAgICBteSAkQ29uZmlnSXRlbURhdGEgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ2hlY2tDb25maWdJdGVtLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0NsYXNzfSBlcSAnQ29tcHV0ZXInICkgewoKICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgQWdlbnRJVFNNQ29uZmlnSXRlbSBPd25lciBpcyBkaXNwbGF5ZWQgY29ycmVjdGx5LiBTZWUgYnVnIzE0NjMzLgogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJyNDb25maWdJdGVtSURfJENoZWNrQ29uZmlnSXRlbSB0ZDpjb250YWlucygkT3duZXIpJykudGV4dCgpLnRyaW0oKTsiCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAkT3duZXIsCiAgICAgICAgICAgICAgICAgICAgJ093bmVyIG5hbWUgYW5kIGFkZHJlc3MgaXMgZGlzcGxheWVkIGNvcnJlY3RseScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoLiwnQ3JlYXRlIFRpbWUnKV0iKSwKICAgICAgICAgICAgICAgICAgICAiVGhlcmUgaXMgY29sdW1uICdDcmVhdGVUaW1lJywgZW5hYmxlZCBieSBzeXNjb25maWcgaXRlbSAgQWdlbnRJVFNNQ29uZmlnSXRlbSMjI1Nob3dDb2x1bW5zQnlDbGFzcyIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFZlcmlmeSB0aGVyZSBhcmUgbGlua3MgdG8gQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20gb24gQ29uZmlnSXRlbSBOdW1iZXIgYW5kIE5hbWUgY29sdW1ucy4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJ3RyOmVxKFwiMVwiKSBkaXZbdGl0bGUqPVwiJENvbmZpZ0l0ZW1OdW1iZXJzWzRdXCJdIGFbaHJlZio9XCJJdGVtSUQ9JENvbmZpZ0l0ZW1JRHNbNF1cIl0nKS5sZW5ndGg7IgogICAgICAgICAgICApLAogICAgICAgICAgICAiTGluayBvbiBDb25maWdJdGVtICdOdW1iZXInIGNvbHVtbiBjb3JyZWN0LiIKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgndHI6ZXEoXCIxXCIpIGRpdlt0aXRsZSo9XCJTZWxlbml1bVRlc3RcIl0gYVtocmVmKj1cIkl0ZW1JRD0kQ29uZmlnSXRlbUlEc1s0XVwiXScpLmxlbmd0aDsiCiAgICAgICAgICAgICksCiAgICAgICAgICAgICJMaW5rIG9uIENvbmZpZ0l0ZW0gJ05hbWUnIGNvbHVtbiBjb3JyZWN0LiIKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSBjcmVhdGVkIHRlc3QgQ29uZmlnSXRlbXMuCiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtRGVsZXRlIChAQ29uZmlnSXRlbUlEcykgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtRGVsZXRlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiQ29uZmlnSXRlbSBpcyBkZWxldGVkIC0gSUQgJENvbmZpZ0l0ZW1EZWxldGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgaGVscGVyIG9iamVjdAogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGdldCBjYXRhbG9nIGNsYXNzIElEcwogICAgICAgIG15IEBDb25maWdJdGVtQ2xhc3NJRHM7CiAgICAgICAgbXkgQENvbmZpZ0l0ZW1DbGFzc05hbWVzOwogICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUNsYXNzIChxdyhDb21wdXRlciBIYXJkd2FyZSBMb2NhdGlvbiBOZXR3b3JrIFNvZnR3YXJlKSkgewogICAgICAgICAgICBteSAkQ29uZmlnSXRlbURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkQ29uZmlnSXRlbUNsYXNzLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtQ2xhc3NJRHMsICAgJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKICAgICAgICAgICAgcHVzaCBAQ29uZmlnSXRlbUNsYXNzTmFtZXMsICRDb25maWdJdGVtRGF0YVJlZi0+e05hbWV9OwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNvbmZpZ2l0ZW0nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNQ29uZmlnSXRlbUFkZAogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQiKTsKCiAgICAgICAgIyBjaGVjayBmb3IgSVRTTUNvbmZpZ0l0ZW0gY2xhc3NlcwogICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUNsYXNzTmFtZSAoQENvbmZpZ0l0ZW1DbGFzc05hbWVzKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDb25maWdJdGVtQ2xhc3NOYW1lICkgPiAtMSwKICAgICAgICAgICAgICAgICJDb25maWdJdGVtIGNsYXNzICRDb25maWdJdGVtQ2xhc3NOYW1lIC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBmb3IgbGlua3MgdG8gJ0FkZCcgbmV3IGl0ZW0gZm9yIGVhY2ggY2xhc3MKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1DbGFzc0FkZCAoQENvbmZpZ0l0ZW1DbGFzc0lEcykgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ7Q2xhc3NJRD0kQ29uZmlnSXRlbUNsYXNzQWRkJyApXSIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJDb25maWdJdGVtIElEICRDb25maWdJdGVtQ2xhc3NBZGQgYWRkIGxpbmsgLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwogICAgICAgIG15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgICAgICMgR2V0ICdDb21wdXRlcicgY2F0YWxvZyBjbGFzcyBJRHMuCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICBOYW1lICA9PiAnQ29tcHV0ZXInLAogICAgICAgICk7CiAgICAgICAgbXkgJENvbXB1dGVyQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKCiAgICAgICAgIyBHZXQgJ1Byb2R1Y3Rpb24nIGFuZCAnUmVwYWlyJyBkZXBsb3ltZW50IHN0YXRlIElEcy4KICAgICAgICBteSBARGVwbFN0YXRlSURzOwogICAgICAgIGZvciBteSAkRGVwbFN0YXRlIChxdyAoUHJvZHVjdGlvbiBSZXBhaXIpKSB7CiAgICAgICAgICAgIG15ICREZXBsU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRGVwbFN0YXRlLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBEZXBsU3RhdGVJRHMsICREZXBsU3RhdGVEYXRhUmVmLT57SXRlbUlEfTsKICAgICAgICB9CgogICAgICAgICMgQ3JlYXRlIHRocmVlIHRlc3QgQ29uZmlnSXRlbXMgZm9yICdDb21wdXRlcicgQ29uZmlnSXRlbSBjbGFzcy4KICAgICAgICBteSBAQ29uZmlnSXRlbXM7CiAgICAgICAgZm9yIG15ICRJVFNNQ29uZmlnSXRlbSAoIDEgLi4gMyApIHsKCiAgICAgICAgICAgICMgQ3JlYXRlIENvbmZpZ0l0ZW0gbnVtYmVyLgogICAgICAgICAgICBteSAkQ29uZmlnSXRlbU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpOdW1iZXJHZW5lcmF0b3InKSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbXB1dGVyQ29uZmlnSXRlbUlELAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gbnVtYmVyIGlzIGNyZWF0ZWQgLSAkQ29uZmlnSXRlbU51bWJlciIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEFkZCB0aGUgbmV3IENvbmZpZ0l0ZW0uCiAgICAgICAgICAgIG15ICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb21wdXRlckNvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gaXMgY3JlYXRlZCAtIElEICRDb25maWdJdGVtSUQiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEFkZCBhIG5ldyB2ZXJzaW9uLgogICAgICAgICAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1NlbGVuaXVtVGVzdCcsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gMSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlSURzWzBdLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgICAgICAgICAiVmVyc2lvbiBpcyBjcmVhdGVkIC0gSUQgJFZlcnNpb25JRCIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1zLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSUQgICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbU51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlciwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNvbmZpZ2l0ZW0nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWdlbnRJVFNNQ29uZmlnSXRlbSwgc29ydGVkIGJ5IGNyZWF0ZWQgdGltZS4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbTtGaWx0ZXI9QWxsO1ZpZXc9OztTb3J0Qnk9Q2hhbmdlVGltZTtPcmRlckJ5PURvd24iCiAgICAgICAgKTsKCiAgICAgICAgIyBTZWxlY3QgdHdvIGNyZWF0ZWQgdGVzdCBDb25maWdJdGVtcy4KICAgICAgICBmb3IgbXkgJFNlbGVjdENvbmZpZ0l0ZW0gKEBDb25maWdJdGVtcykgewoKICAgICAgICAgICAgIyBEb24ndCBjbGljayBvbiB0aGlyZCB0ZXN0IENvbmZpZ0l0ZW0uCiAgICAgICAgICAgIGlmICggJFNlbGVjdENvbmZpZ0l0ZW0tPntJRH0gbmUgJENvbmZpZ0l0ZW1zWzJdLT57SUR9ICkgewogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEB2YWx1ZT0nJFNlbGVjdENvbmZpZ0l0ZW0tPntJRH0nXSIpLT5jbGljaygpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIENsaWNrIG9uIGJ1bGsgYWN0aW9uLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvLypbdGV4dCgpPSdCdWxrJ10iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBTd2l0Y2ggdG8gJ0J1bGsnIHdpbmRvdy4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjRGVwbFN0YXRlSUQiKS5sZW5ndGg7JyApOwoKICAgICAgICAjIENoZWNrIHNjcmVlbgogICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICBxdyhEZXBsU3RhdGVJRCBJbmNpU3RhdGVJRCBMaW5rVG9nZXRoZXIgTGlua1RvZ2V0aGVyTGlua1R5cGUgTGlua1RvZ2V0aGVyQW5vdGhlciBMaW5rVHlwZSBzdWJtaXRSaWNoVGV4dCkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkSUQiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICAjIENoYW5nZSBkZXBsb3ltZW50IHN0YXRlIHRvICdSZXBhaXInIGZvciB0ZXN0IENvbmZpZ0l0ZW1zCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNEZXBsU3RhdGVJRCcpLnZhbCgnJERlcGxTdGF0ZUlEc1sxXScpOyIpOwoKICAgICAgICAjIGxpbmsgJ0FsdGVybmF0aXZlIHRvJyB0ZXN0IENvbmZpZ0l0ZW1zIHRvZ2V0aGVyCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTGlua1RvZ2V0aGVyIG9wdGlvblt2YWx1ZT0nMSddIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0xpbmtUb2dldGhlckxpbmtUeXBlIG9wdGlvblt2YWx1ZT0nQ29ubmVjdGVkVG86OlNvdXJjZSddIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyBsaW5rIHRoaXJkIHRlc3QgQ29uZmlnSXRlbSBhcyBwYXJ0IG9mIGZpcnN0IHR3bwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0xpbmtUb2dldGhlckFub3RoZXIiLCAnY3NzJyApLT5zZW5kX2tleXMoICRDb25maWdJdGVtc1syXS0+e0NvbmZpZ0l0ZW1OdW1iZXJ9ICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTGlua1R5cGUgb3B0aW9uW3ZhbHVlPSdJbmNsdWRlczo6VGFyZ2V0J10iLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIFN1Ym1pdCBidWxrIGNoYW5nZXMKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNzdWJtaXRSaWNoVGV4dCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgU3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIGZpcnN0IGNyZWF0ZWQgdGVzdCBDb25maWdJdGVtcyB6b29tIHZpZXcuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbXNbMV0tPntJRH0iCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBmb3Igb3RoZXIgdHdvIGNyZWF0ZWQgdGVzdCBDb25maWdJdGVtcy4KICAgICAgICAjIFZlcmlmeSB0aGF0IGxpbmsgYWN0aW9uIGluIGJ1bGsgc2NyZWVuIHdhcyBzdWNjZXNzLgogICAgICAgIG15ICRDb3VudCA9IDE7CiAgICAgICAgSVRFTToKICAgICAgICBmb3IgbXkgJENoZWNrQ29uZmlnSXRlbSAoQENvbmZpZ0l0ZW1zKSB7CgogICAgICAgICAgICBuZXh0IElURU0gaWYgJENvbmZpZ0l0ZW1zWzFdLT57Q29uZmlnSXRlbU51bWJlcn0gPT0gJENoZWNrQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1OdW1iZXJ9OwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICIvL2FbXEBjbGFzcz1cJ0FzQmxvY2sgTGlua09iamVjdExpbmtcJ11bY29udGFpbnMoLixcJyRDaGVja0NvbmZpZ0l0ZW0tPntDb25maWdJdGVtTnVtYmVyfVwnKV0iCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgIlRlc3QgQ29uZmlnSXRlbSBudW1iZXIgJENoZWNrQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1OdW1iZXJ9IC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcuTWFzdGVyQWN0aW9uIHRkOmVxKDEpIHNwYW4nKS50ZXh0KCk7IiksCiAgICAgICAgICAgICdSZXBhaXInLAogICAgICAgICAgICAiRGVwbG95bWVudCBzdGF0ZSBpcyBSZXBhaXIuIiwKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSBjcmVhdGVkIHRlc3QgQ29uZmlnSXRlbXMuCiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtRGVsZXRlIChAQ29uZmlnSXRlbXMpIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbURlbGV0ZSgKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbURlbGV0ZS0+e0lEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkNvbmZpZyBpdGVtIGlzIGRlbGV0ZWQgLSBJRCAkQ29uZmlnSXRlbURlbGV0ZS0+e0lEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwogICAgICAgIG15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgICAgICMgR2V0ICdIYXJkd2FyZScgY2F0YWxvZyBjbGFzcyBJRHMuCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICBOYW1lICA9PiAnSGFyZHdhcmUnLAogICAgICAgICk7CiAgICAgICAgbXkgJEhhcmR3YXJlQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKCiAgICAgICAgIyBHZXQgJ1Byb2R1Y3Rpb24nIGRlcGxveW1lbnQgc3RhdGUgSURzLgogICAgICAgIG15ICRQcm9kdWN0aW9uRGVwbFN0YXRlRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICApOwogICAgICAgIG15ICRQcm9kdWN0aW9uRGVwbFN0YXRlSUQgPSAkUHJvZHVjdGlvbkRlcGxTdGF0ZURhdGFSZWYtPntJdGVtSUR9OwoKICAgICAgICAjIENyZWF0ZSBDb25maWdJdGVtIG51bWJlci4KICAgICAgICBteSAkQ29uZmlnSXRlbU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgICAgICBUeXBlICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06Ok51bWJlckdlbmVyYXRvcicpLAogICAgICAgICAgICBDbGFzc0lEID0+ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlciwKICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gbnVtYmVyIGlzIGNyZWF0ZWQgLSAkQ29uZmlnSXRlbU51bWJlciIKICAgICAgICApOwoKICAgICAgICAjIEFkZCB0aGUgbmV3IENvbmZpZ0l0ZW0uCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICBDbGFzc0lEID0+ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGNyZWF0ZWQgLSBJRCAkQ29uZmlnSXRlbUlEIgogICAgICAgICk7CgogICAgICAgICMgQWRkIGEgbmV3IHZlcnNpb24uCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1OYW1lID0gJ0hhcmR3YXJlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFZlcnNpb25JRCAgICAgID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkQ29uZmlnSXRlbU5hbWUsCiAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAxLAogICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCwKICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVmVyc2lvbklELAogICAgICAgICAgICAiVmVyc2lvbiBpcyBjcmVhdGVkIC0gSUQgJFZlcnNpb25JRCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNvbmZpZ2l0ZW0nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20gc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JENvbmZpZ0l0ZW1JRDtWZXJzaW9uPSRWZXJzaW9uSUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBHZXQgQ29uZmlnSXRlbSB2YWx1ZSBwYXJhbXMuCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1WYWx1ZXMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdIYXJkd2FyZScsCiAgICAgICAgICAgICAgICBDaGVjayA9PiAncC5WYWx1ZTpjb250YWlucyhIYXJkd2FyZSknLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkQ29uZmlnSXRlbU5hbWUsCiAgICAgICAgICAgICAgICBDaGVjayA9PiAiaDE6Y29udGFpbnMoJENvbmZpZ0l0ZW1OYW1lKSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBDb25maWdJdGVtIHZhbHVlcyBvbiBzY3JlZW4KICAgICAgICBmb3IgbXkgJENoZWNrQ29uZmlnSXRlbVZhbHVlIChAQ29uZmlnSXRlbVZhbHVlcykgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgInJldHVybiBcJCgnJENoZWNrQ29uZmlnSXRlbVZhbHVlLT57Q2hlY2t9JykubGVuZ3RoOyIKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAiVGVzdCBDb25maWdJdGVtIHZhbHVlICRDaGVja0NvbmZpZ0l0ZW1WYWx1ZS0+e1ZhbHVlfSAtIGZvdW5kIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgQ2xpY2sgb24gJ0R1cGxpY2F0ZScgbWVudSBpdGVtIGFuZCBzd2l0Y2ggd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01Db25maWdJdGVtRWRpdDtEdXBsaWNhdGVJRD0kQ29uZmlnSXRlbUlEO1ZlcnNpb25JRD0kVmVyc2lvbklEXCcgKV0iCiAgICAgICAgKS0+Y2xpY2soKTsKCiAgICAgICAgIyBzd2l0Y2ggd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI0RlcGxTdGF0ZUlEIikubGVuZ3RoOycgKTsKCiAgICAgICAgIyBDaGVjayBmb3IgY3JlYXRlZCBDb25maWdJdGVtIHZhbHVlcwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjTmFtZScsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkQ29uZmlnSXRlbU5hbWUsCiAgICAgICAgICAgICIjTmFtZSBzdG9yZWQgdmFsdWUiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNEZXBsU3RhdGVJRCcsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkUHJvZHVjdGlvbkRlcGxTdGF0ZUlELAogICAgICAgICAgICAiI0RlcGxTdGF0ZUlEIHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI0luY2lTdGF0ZUlEJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICIjSW5jaVN0YXRlSUQgc3RvcmVkIHZhbHVlIiwKICAgICAgICApOwoKICAgICAgICAjIEVkaXQgbmFtZSBmb3IgZHVwbGljYXRlIHRlc3QgQ29uZmlnSXRlbS4KICAgICAgICBteSAkRHVwbGljYXRlQ29uZmlnSXRlbU5hbWUgPSAiRHVwbGljYXRlIiAuICRDb25maWdJdGVtTmFtZTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCREdXBsaWNhdGVDb25maWdJdGVtTmFtZSk7CiAgICAgICAgc2xlZXAgMjsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5jbGljaygpOwoKICAgICAgICAjIFN3aXRjaCBiYWNrIHRvIHpvb20gdmlldy4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgJ3JldHVybiB0eXBlb2YoQ29yZSkgPT0gIm9iamVjdCIgJiYgdHlwZW9mKENvcmUuQXBwKSA9PSAib2JqZWN0IiAmJiBDb3JlLkFwcC5QYWdlTG9hZENvbXBsZXRlOycKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJ2gxOmNvbnRhaW5zKCREdXBsaWNhdGVDb25maWdJdGVtTmFtZSknKS5sZW5ndGg7IgogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgZm9yIGR1cGxpY2F0ZWQgQ29uZmlnSXRlbSB2YWx1ZS4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJ2gxOmNvbnRhaW5zKCREdXBsaWNhdGVDb25maWdJdGVtTmFtZSknKS5sZW5ndGg7IgogICAgICAgICAgICApLAogICAgICAgICAgICAiVGVzdCBDb25maWdJdGVtIHZhbHVlICREdXBsaWNhdGVDb25maWdJdGVtTmFtZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSBjcmVhdGVkIHRlc3QgQ29uZmlnSXRlbXMuCiAgICAgICAgZm9yIG15ICREZWxldGVDb25maWdJdGVtICggMSAuLiAyICkgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGRlbGV0ZWQgLSBJRCAkQ29uZmlnSXRlbUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCsrOwogICAgICAgIH0KICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICBteSBAVGVzdCA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNsYXNzID0+ICdDb21wdXRlcicsCiAgICAgICAgICAgICAgICBDaGVja0VkaXRGaWVsZHMgPT4gWwogICAgICAgICAgICAgICAgICAgICdOYW1lJywgJ0RlcGxTdGF0ZUlEJywgJ0luY2lTdGF0ZUlEJywgJ1ZlbmRvcicsICdNb2RlbCcsICdEZXNjcmlwdGlvbicsICdUeXBlJywgJ093bmVyJywKICAgICAgICAgICAgICAgICAgICAnU2VyaWFsTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW5nU3lzdGVtJywgJ0NQVScsICdSYW0nLCAnSGFyZERpc2snLCAnQ2FwYWNpdHknLCAnRlFETicsICdOSUMnLCAnUG92ZXJESENQJywKICAgICAgICAgICAgICAgICAgICAnR3JhcGhpY0FkYXB0ZXInLAogICAgICAgICAgICAgICAgICAgICdPdGhlckVxdWlwbWVudCcsICdXYXJyYW50eUV4cGlyYXRpb25EYXRlJywgJ0luc3RhbGxEYXRlJywgJ05vdGUnLCAnRmlsZVVwbG9hZCcsICdTdWJtaXRTYXZlJwogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUNsYXNzID0+ICdIYXJkd2FyZScsCiAgICAgICAgICAgICAgICBDaGVja0VkaXRGaWVsZHMgPT4gWwogICAgICAgICAgICAgICAgICAgICdOYW1lJywgJ0RlcGxTdGF0ZUlEJywgJ0luY2lTdGF0ZUlEJywgJ1ZlbmRvcicsICdNb2RlbCcsICdEZXNjcmlwdGlvbicsICdUeXBlJywgJ093bmVyJywKICAgICAgICAgICAgICAgICAgICAnU2VyaWFsTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICAnV2FycmFudHlFeHBpcmF0aW9uRGF0ZScsICdJbnN0YWxsRGF0ZScsICdOb3RlJywgJ0ZpbGVVcGxvYWQnLCAnU3VibWl0U2F2ZScKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1DbGFzcyA9PiAnTG9jYXRpb24nLAogICAgICAgICAgICAgICAgQ2hlY2tFZGl0RmllbGRzID0+IFsKICAgICAgICAgICAgICAgICAgICAnTmFtZScsICdEZXBsU3RhdGVJRCcsICdJbmNpU3RhdGVJRCcsICdUeXBlJywgJ1Bob25lMScsICdQaG9uZTInLCAnRmF4JywgJ0UtTWFpbCcsICdBZGRyZXNzJywKICAgICAgICAgICAgICAgICAgICAnTm90ZScsICdGaWxlVXBsb2FkJywgJ1N1Ym1pdFNhdmUnCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2xhc3MgPT4gJ05ldHdvcmsnLAogICAgICAgICAgICAgICAgQ2hlY2tFZGl0RmllbGRzID0+IFsKICAgICAgICAgICAgICAgICAgICAnTmFtZScsICdEZXBsU3RhdGVJRCcsICdJbmNpU3RhdGVJRCcsICdEZXNjcmlwdGlvbicsICdUeXBlJywgJ05ldHdvcmtBZGRyZXNzJywgJ1N1Ym5ldE1hc2snLAogICAgICAgICAgICAgICAgICAgICdHYXRld2F5JywKICAgICAgICAgICAgICAgICAgICAnTm90ZScsICdGaWxlVXBsb2FkJywgJ1N1Ym1pdFNhdmUnCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb25maWdJdGVtQ2xhc3MgPT4gJ1NvZnR3YXJlJywKICAgICAgICAgICAgICAgIENoZWNrRWRpdEZpZWxkcyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ05hbWUnLCAnRGVwbFN0YXRlSUQnLCAnSW5jaVN0YXRlSUQnLCAnVmVuZG9yJywgJ1ZlcnNpb24nLCAnRGVzY3JpcHRpb24nLCAnVHlwZScsICdPd25lcicsCiAgICAgICAgICAgICAgICAgICAgJ1NlcmlhbE51bWJlcicsCiAgICAgICAgICAgICAgICAgICAgJ0xpY2VuY2VUeXBlJywgJ0xpY2VuY2VLZXknLCAnTWVkaWEnLCAnTm90ZScsICdTdWJtaXRTYXZlJwogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIEdldCAnUHJvZHVjdGlvbicgZGVwbG95bWVudCBzdGF0ZSBJRC4KICAgICAgICBteSAkRGVwbFN0YXRlRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICApOwogICAgICAgIG15ICREZXBsU3RhdGVJRCA9ICREZXBsU3RhdGVEYXRhUmVmLT57SXRlbUlEfTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbi4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jb25maWdpdGVtJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwogICAgICAgIG15ICRSYW5kb21JRCAgICA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgogICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUVkaXQgKEBUZXN0KSB7CgogICAgICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50SVRTTUNvbmZpZ0l0ZW1BZGQgc2NyZWVuLgogICAgICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01Db25maWdJdGVtQWRkIik7CgogICAgICAgICAgICAjIEdldCBDb25maWdJdGVtIGNsYXNzIElELgogICAgICAgICAgICBteSAkQ29uZmlnSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gJENvbmZpZ0l0ZW1FZGl0LT57Q29uZmlnSXRlbUNsYXNzfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW1DbGFzc0lEID0gJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJ2FbaHJlZio9XCJBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ7Q2xhc3NJRD0kQ29uZmlnSXRlbUNsYXNzSURcIl0nKS5sZW5ndGgiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIENsaWNrIG9uIENvbmZpZ0l0ZW0gY2xhc3MuCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0O0NsYXNzSUQ9JENvbmZpZ0l0ZW1DbGFzc0lEXCcgKV0iCiAgICAgICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjTmFtZScpLmxlbmd0aCAmJiBcJCgnI1N1Ym1pdEJ1dHRvbicpLmxlbmd0aCIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgQ2hlY2sgZm9yIENvbmZpZ0l0ZW1FZGl0IGZpZWxkcy4KICAgICAgICAgICAgZm9yIG15ICRDaGVja0NvbmZpZ0l0ZW1GaWVsZCAoIEB7ICRDb25maWdJdGVtRWRpdC0+e0NoZWNrRWRpdEZpZWxkc30gfSApIHsKCiAgICAgICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvLypbY29udGFpbnMoXEBuYW1lLCBcJyRDaGVja0NvbmZpZ0l0ZW1GaWVsZFwnICldIik7CiAgICAgICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENyZWF0ZSB0ZXN0IENvbmZpZ0l0ZW0uCiAgICAgICAgICAgIG15ICRDb25maWdJdGVtTmFtZSA9ICRDb25maWdJdGVtRWRpdC0+e0NvbmZpZ0l0ZW1DbGFzc30gLiAkUmFuZG9tSUQ7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAnY3NzJyApLT5zZW5kX2tleXMoJENvbmZpZ0l0ZW1OYW1lKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAiXCQoJyNEZXBsU3RhdGVJRCcpLnZhbCgnJERlcGxTdGF0ZUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKSIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNEZXBsU3RhdGVJRCcpLnZhbCgpID09PSAnJERlcGxTdGF0ZUlEJyIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjSW5jaVN0YXRlSUQnKS52YWwoJzEnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpIik7CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNJbmNpU3RhdGVJRCcpLnZhbCgpID09PSAnMSciICk7CgogICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRWRpdC0+e0NvbmZpZ0l0ZW1DbGFzc30gZXEgJ0NvbXB1dGVyJyApIHsKCiAgICAgICAgICAgICAgICAjIEdldCBHZW5lcmFsIENhdGFsb2cgSUQgZm9yICdZZXMnLgogICAgICAgICAgICAgICAgbXkgJFllc0RhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06Olllc05vJywKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAnWWVzJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkWWVzSUQgPSAkWWVzRGF0YVJlZi0+e0l0ZW1JRH07CgogICAgICAgICAgICAgICAgIyBFbnRlciBOSUMgbmFtZS4KICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvLypbY29udGFpbnMoXEBuYW1lLCBcJ05JQzo6MVwnICldIiktPnNlbmRfa2V5cygnU2VsZW5pdW1OZXR3b3JrJyk7CgogICAgICAgICAgICAgICAgIyBTZWxlY3QgWWVzIGZvciBESENQT3ZlcklQLgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICAgICAiXCQoJyMnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoJ0l0ZW0xTklDOjoxMScpKS52YWwoJyRZZXNJRCcpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRWRpdC0+e0NvbmZpZ0l0ZW1DbGFzc30gZXEgJ05ldHdvcmsnICkgewogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vKltjb250YWlucyhcQG5hbWUsIFwnTmV0d29ya0FkZHJlc3NcJyApXSIpLT5zZW5kX2tleXMoJ1NlbGVuaXVtTmV0d29yaycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnaDE6Y29udGFpbnMoJENvbmZpZ0l0ZW1OYW1lKScpLmxlbmd0aCIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgR2V0IENvbmZpZ0l0ZW0gdmFsdWUuCiAgICAgICAgICAgIG15IEBDb25maWdJdGVtVmFsdWVzID0gKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRDb25maWdJdGVtTmFtZSwKICAgICAgICAgICAgICAgICAgICBDaGVjayAgICAgICA9PiAiaDE6Y29udGFpbnMoJENvbmZpZ0l0ZW1OYW1lKSIsCiAgICAgICAgICAgICAgICAgICAgQ2hlY2tSZXN1bHQgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJENvbmZpZ0l0ZW1FZGl0LT57Q29uZmlnSXRlbUNsYXNzfSwKICAgICAgICAgICAgICAgICAgICBDaGVjayAgICAgICA9PiAicC5WYWx1ZTpjb250YWlucygkQ29uZmlnSXRlbUVkaXQtPntDb25maWdJdGVtQ2xhc3N9KSIsCiAgICAgICAgICAgICAgICAgICAgQ2hlY2tSZXN1bHQgPT4gMiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIENoZWNrIHN1Ym1pdHRlZCB2YWx1ZXMgaW4gQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20gc2NyZWVuLgogICAgICAgICAgICBmb3IgbXkgJENoZWNrQ29uZmlnSXRlbVZhbHVlIChAQ29uZmlnSXRlbVZhbHVlcykgewogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiBcJCgnJENoZWNrQ29uZmlnSXRlbVZhbHVlLT57Q2hlY2t9JykubGVuZ3RoID09PSAkQ2hlY2tDb25maWdJdGVtVmFsdWUtPntDaGVja1Jlc3VsdH0iCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAiVGVzdCBDb25maWdJdGVtIHZhbHVlICRDaGVja0NvbmZpZ0l0ZW1WYWx1ZS0+e1ZhbHVlfSAtIGZvdW5kIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgR2V0IENvbmZpZ0l0ZW1JRC4KICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uU2VhcmNoKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkQ29uZmlnSXRlbU5hbWUKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgRGVsZXRlIGNyZWF0ZWQgdGVzdCBDb25maWdJdGVtLgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQtPlswXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gaXMgZGVsZXRlZCAtIElEICRDb25maWdJdGVtSUQtPlswXSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIG11bHRpcGxlIEN1c3RvbWVyIHR5cGUgZmllbGRzIChzZWUgYnVnIzE0MjE4IC0gaHR0cHM6Ly9idWdzLm90cnMub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIxOCkuCiAgICAgICAgIyBDcmVhdGUgdGVzdCBDSSBjbGFzcy4KICAgICAgICBteSAkQ2xhc3NOYW1lID0gJ0NsYXNzJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENsYXNzSUQgICA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUFkZCgKICAgICAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICBOYW1lICAgID0+ICRDbGFzc05hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDbGFzc0lELAogICAgICAgICAgICAiQ2xhc3NJRCAkQ2xhc3NJRCBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICAgICAgR3JvdXAgID0+ICdpdHNtLWNvbmZpZ2l0ZW0nLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIFNldCBwZXJtaXNzaW9uLgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIEtleSAgICA9PiAnUGVybWlzc2lvbicsCiAgICAgICAgICAgIFZhbHVlICA9PiAkR3JvdXBJRCwKICAgICAgICApOwoKICAgICAgICBteSAkRGVmaW5pdGlvbiA9IDw8ICJFT0YiOwotLS0KLSBLZXk6IEN1c3RvbWVySUQxCiAgTmFtZTogQ3VzdG9tZXJDb21wYW55IDEKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBDdXN0b21lckNvbXBhbnkKICBTdWI6CiAgLSBLZXk6IEN1c3RvbWVyMQogICAgTmFtZTogQ3VzdG9tZXIgMQogICAgU2VhcmNoYWJsZTogMQogICAgSW5wdXQ6CiAgICAgIFR5cGU6IEN1c3RvbWVyCgotIEtleTogQ3VzdG9tZXJJRDIKICBOYW1lOiBDdXN0b21lckNvbXBhbnkgMgogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IEN1c3RvbWVyQ29tcGFueQogIFN1YjoKICAtIEtleTogQ3VzdG9tZXIyCiAgICBOYW1lOiBDdXN0b21lciAyCiAgICBTZWFyY2hhYmxlOiAxCiAgICBJbnB1dDoKICAgICAgVHlwZTogQ3VzdG9tZXIKCi0gS2V5OiBDdXN0b21lcklEMwogIE5hbWU6IEN1c3RvbWVyQ29tcGFueSAzCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogQ3VzdG9tZXJDb21wYW55CiAgU3ViOgogIC0gS2V5OiBDdXN0b21lcjMKICAgIE5hbWU6IEN1c3RvbWVyIDMKICAgIFNlYXJjaGFibGU6IDEKICAgIElucHV0OgogICAgICBUeXBlOiBDdXN0b21lcgpFT0YKCiAgICAgICAgIyBBZGQgdGVzdCBkZWZpbml0aW9uIHRvIHRlc3QgQ0kgY2xhc3MuCiAgICAgICAgbXkgJERlZmluaXRpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uQWRkKAogICAgICAgICAgICBDbGFzc0lEICAgID0+ICRDbGFzc0lELAogICAgICAgICAgICBEZWZpbml0aW9uID0+ICREZWZpbml0aW9uLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJERlZmluaXRpb25JRCwKICAgICAgICAgICAgIkRlZmluaXRpb25JRCAkRGVmaW5pdGlvbklEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWdlbnRJVFNNQ29uZmlnSXRlbUFkZCBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ7Q2xhc3NJRD0kQ2xhc3NJRCIpOwoKICAgICAgICAjIFZlcmlmeSBhbGwgb2YgdGhyZWUgc3ViIGVsZW1lbnRzIGFyZSBhdXRvY29tcGxldGUgaW5wdXQgZmllbGRzLgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJy5TdWJFbGVtZW50IC5JVFNNQ3VzdG9tZXJTZWFyY2gudWktYXV0b2NvbXBsZXRlLWlucHV0JykubGVuZ3RoOyIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgMywKICAgICAgICAgICAgIkFsbCBzdWIgZWxlbWVudHMgd29yayBjb3JyZWN0bHkgLSB0aGV5IGFyZSBhdXRvY29tcGxldGUgaW5wdXQgZmllbGRzIiwKICAgICAgICApOwoKICAgICAgICAjIENsZWFudXAuCiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICMgRGVsZXRlIHRlc3QgZGVmaW5pdGlvbi4KICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbiBXSEVSRSBpZCA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCREZWZpbml0aW9uSUQgXSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkNvbmZpZyBpdGVtIGRlZmluaXRpb24gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBnZW5lcmFsX2NhdGFsb2dfcHJlZmVyZW5jZXMgV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2lkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJENsYXNzSUQgXSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkdlbmVyYWwgY2F0YWxvZyBwcmVmZXJlbmNlcyBmb3IgQ2xhc3NJRCAkQ2xhc3NJRCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSBpZCA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCRDbGFzc0lEIF0sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJDbGFzc0lEICRDbGFzc0lEIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIGdldCAnSGFyZHdhcmUnIGNhdGFsb2cgY2xhc3MgSURzCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICBOYW1lICA9PiAnSGFyZHdhcmUnLAogICAgICAgICk7CiAgICAgICAgbXkgJEhhcmR3YXJlQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKCiAgICAgICAgIyBnZXQgJ1Byb2R1Y3Rpb24nIGRlcGxveW1lbnQgc3RhdGUgSURzCiAgICAgICAgbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICk7CiAgICAgICAgbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCA9ICRQcm9kdWN0aW9uRGVwbFN0YXRlRGF0YVJlZi0+e0l0ZW1JRH07CgogICAgICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgICAgICMgY3JlYXRlIENvbmZpZ0l0ZW0gbnVtYmVyCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1OdW1iZXIgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbU51bWJlckNyZWF0ZSgKICAgICAgICAgICAgVHlwZSAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpOdW1iZXJHZW5lcmF0b3InKSwKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkSGFyZHdhcmVDb25maWdJdGVtSUQsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICAgICAgICAgICJDb25maWdJdGVtIG51bWJlciBpcyBjcmVhdGVkIC0gJENvbmZpZ0l0ZW1OdW1iZXIiCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgdGhlIG5ldyBDb25maWdJdGVtCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICBDbGFzc0lEID0+ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGNyZWF0ZWQgLSBJRCAkQ29uZmlnSXRlbUlEIgogICAgICAgICk7CgogICAgICAgICMgYWRkIGEgbmV3IHZlcnNpb24KICAgICAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnU2VsZW5pdW1UZXN0JywKICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+IDEsCiAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkUHJvZHVjdGlvbkRlcGxTdGF0ZUlELAogICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgICAgICJWZXJzaW9uIGlzIGNyZWF0ZWQgLSBJRCAkVmVyc2lvbklEIgogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jb25maWdpdGVtJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIGNoZWNrIGZvciBlcnJvciBtZXNzYWdlIHdoZW4gbm8gQ29uZmlnSXRlbUlEIGlzIHByb3ZpZGVkIGluIGhpc3Rvcnkgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUhpc3RvcnkiKTsKCiAgICAgICAgbXkgJEVycm9yTWVzc2FnZU5vSUQgPSAnQ2FuXCd0IHNob3cgaGlzdG9yeSwgbm8gQ29uZmlnSXRlbUlEIGlzIGdpdmVuISc7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRXJyb3JNZXNzYWdlTm9JRCApID4gLTEsCiAgICAgICAgICAgICJFcnJvciBtZXNzYWdlICRFcnJvck1lc3NhZ2VOb0lEIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGhpc3RvcnkgbWVzc2FnZXMgbGlzdAogICAgICAgIG15IEBIaXN0b3J5TWVzc2FnZXMgPSAoCiAgICAgICAgICAgICdOZXcgQ29uZmlnSXRlbSAoSUQ9JyAuICRDb25maWdJdGVtSUQgLiAnKScsCiAgICAgICAgICAgICdOZXcgdmVyc2lvbiAoSUQ9JyAuICRWZXJzaW9uSUQgLiAnKScsCiAgICAgICAgICAgICdDb25maWdJdGVtIGRlZmluaXRpb24gdXBkYXRlZCAoSUQ9MSknLAogICAgICAgICAgICAnTmFtZSB1cGRhdGVkIChuZXc9U2VsZW5pdW1UZXN0LCBvbGQ9KScsCiAgICAgICAgICAgICdJbmNpZGVudCBzdGF0ZSB1cGRhdGVkIChuZXc9T3BlcmF0aW9uYWwsIG9sZD0pJywKICAgICAgICAgICAgJ0RlcGxveW1lbnQgc3RhdGUgdXBkYXRlZCAobmV3PVByb2R1Y3Rpb24sIG9sZD0pJywKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciBoaXN0b3J5IG1lc3NhZ2VzIGluIGhpc3Rvcnkgc2NyZWVuIG9mIGNyZWF0ZWQgdGVzdCBDb25maWdJdGVtCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5O0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEO1ZlcnNpb25JRD0kVmVyc2lvbklEIgogICAgICAgICk7CgogICAgICAgIGZvciBteSAkSGlzdG9yeU1lc3NhZ2UgKEBIaXN0b3J5TWVzc2FnZXMpIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEhpc3RvcnlNZXNzYWdlICkgPiAtMSwKICAgICAgICAgICAgICAgICJIaXN0b3J5IG1lc3NhZ2UgJEhpc3RvcnlNZXNzYWdlIC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyByZW1vdmUgaXRzbS1jb25maWdpdGVtICdybycgYWNjZXNzIHJpZ2h0IGZvciB0ZXN0IHVzZXIKICAgICAgICAjIGdldCBncm91cCBvYmplY3QKICAgICAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAgICAgIyBnZXQgJ2l0c20tY29uZmlnaXRlbScgZ3JvdXAgSUQKICAgICAgICBteSAkSVRTTUNvbmZpZ0l0ZW1Hcm91cElEID0gJEdyb3VwT2JqZWN0LT5Hcm91cExvb2t1cCgKICAgICAgICAgICAgR3JvdXAgPT4gJ2l0c20tY29uZmlnaXRlbScsCiAgICAgICAgKTsKCiAgICAgICAgIyByZW1vdmUgYWNjZXNzIHJpZ2h0cyB0byB0ZXN0IHVzZXIKICAgICAgICAkR3JvdXBPYmplY3QtPkdyb3VwTWVtYmVyQWRkKAogICAgICAgICAgICBHSUQgICAgICAgID0+ICRJVFNNQ29uZmlnSXRlbUdyb3VwSUQsCiAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBmb3IgZXJyb3IgbWVzc2FnZSB3aGVuIHVzZXIgaGF2ZSBubyBhY2Nlc3MgcmlnaHRzIGluIGhpc3Rvcnkgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1IaXN0b3J5O0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEO1ZlcnNpb25JRD0kVmVyc2lvbklEIgogICAgICAgICk7CgogICAgICAgIG15ICRFcnJvck1lc3NhZ2VOb1Blcm1pc3Npb24gPSAnTm8gUGVybWlzc2lvbiB0byB1c2UgdGhpcyBmcm9udGVuZCBtb2R1bGUhJzsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRFcnJvck1lc3NhZ2VOb1Blcm1pc3Npb24gKSA+IC0xLAogICAgICAgICAgICAiRXJyb3IgbWVzc2FnZSAkRXJyb3JNZXNzYWdlTm9QZXJtaXNzaW9uIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGNyZWF0ZWQgdGVzdCBDb25maWdJdGVtCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbURlbGV0ZSgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiQ29uZmlnSXRlbSBpcyBkZWxldGVkIC0gSUQgJENvbmZpZ0l0ZW1JRCIsCiAgICAgICAgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgppZiAoICRTZWxlbml1bS0+e2Jyb3dzZXJfbmFtZX0gbmUgJ2ZpcmVmb3gnICkgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMSwKICAgICAgICAiUERGIHRlc3QgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgRmlyZWZveCIsCiAgICApOwogICAgcmV0dXJuIDE7Cn0KCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgIG15ICRIZWxwZXIgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CiAgICAgICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CiAgICAgICAgbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgIyBHZXQgJ0hhcmR3YXJlJyBjYXRhbG9nIGNsYXNzIElEcy4KICAgICAgICBteSAkQ29uZmlnSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdIYXJkd2FyZScsCiAgICAgICAgKTsKICAgICAgICBteSAkSGFyZHdhcmVDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbURhdGFSZWYtPntJdGVtSUR9OwoKICAgICAgICAjIEdldCAnUHJvZHVjdGlvbicgZGVwbG95bWVudCBzdGF0ZSBJRHMuCiAgICAgICAgbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICk7CiAgICAgICAgbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCA9ICRQcm9kdWN0aW9uRGVwbFN0YXRlRGF0YVJlZi0+e0l0ZW1JRH07CgogICAgICAgICMgQ3JlYXRlIENvbmZpZ0l0ZW0gbnVtYmVyLgogICAgICAgIG15ICRDb25maWdJdGVtTnVtYmVyID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUoCiAgICAgICAgICAgIFR5cGUgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6TnVtYmVyR2VuZXJhdG9yJyksCiAgICAgICAgICAgIENsYXNzSUQgPT4gJEhhcmR3YXJlQ29uZmlnSXRlbUlELAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICAiQ29uZmlnSXRlbSBudW1iZXIgaXMgY3JlYXRlZCAtICRDb25maWdJdGVtTnVtYmVyIgogICAgICAgICk7CgogICAgICAgICMgQWRkIHRoZSBuZXcgQ29uZmlnSXRlbS4KICAgICAgICBteSAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICAgICAgICAgIENsYXNzSUQgPT4gJEhhcmR3YXJlQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gaXMgY3JlYXRlZCAtIElEICRDb25maWdJdGVtSUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBBZGQgYSBuZXcgdmVyc2lvbi4KICAgICAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnU2VsZW5pdW1UZXN0JywKICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+IDEsCiAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkUHJvZHVjdGlvbkRlcGxTdGF0ZUlELAogICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgICAgICJWZXJzaW9uIGlzIGNyZWF0ZWQgLSBJRCAkVmVyc2lvbklEIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4uCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY29uZmlnaXRlbScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudElUU0NvbmZpZ0l0ZW1ab29tIHNjcmVlbi4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JENvbmZpZ0l0ZW1JRCIpOwoKICAgICAgICAjIENoZWNrIGlmIHRoZXJlIGlzIHRoZSBsaW5rIHRvIEFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludCBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJ2FbaHJlZio9XCJBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVByaW50O0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEXCJdJykubGVuZ3RoOyIKICAgICAgICApOwoKICAgICAgICAjIEdvIHRvIEFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludCBzY3JlZW4gZm9yIHRlc3QgQ29uZmlnSXRlbS4KICAgICAgICAkU2VsZW5pdW0tPmdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1QcmludDtDb25maWdJdGVtSUQ9JENvbmZpZ0l0ZW1JRDtWZXJzaW9uSUQ9JFZlcnNpb25JRCIKICAgICAgICApOwoKICAgICAgICAjIFdhaXQgdW50aWwgcHJpbnQgc2NyZWVuIGlzIGxvYWRlZC4KICAgICAgICBBQ1RJVkVTTEVFUDoKICAgICAgICBmb3IgbXkgJFNlY29uZCAoIDEgLi4gMzAgKSB7CiAgICAgICAgICAgIGlmICggaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJwcmludGVkIGJ5IiApID4gLTEsICkgewogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJwcmludGVkIGJ5IiApID4gLTEsCiAgICAgICAgICAgICAgICAgICAgIlByaW50IHNjcmVlbiBpcyBsb2FkZWQiLAogICAgICAgICAgICAgICAgKSB8fCBkaWU7CiAgICAgICAgICAgICAgICBsYXN0IEFDVElWRVNMRUVQOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNsZWVwIDE7CiAgICAgICAgfQoKICAgICAgICAjIEdldCB0ZXN0IHByaW50IHZhbHVlcy4KICAgICAgICBteSBAQ29uZmlnSXRlbVByaW50ID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ29uZmlnSXRlbSMgJENvbmZpZ0l0ZW1OdW1iZXIgLSBmb3VuZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJ1NlbGVuaXVtVGVzdCcsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb25maWdJdGVtOiBTZWxlbml1bVRlc3QgLSBmb3VuZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJ0hhcmR3YXJlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNsYXNzOiBIYXJkd2FyZSAtIGZvdW5kIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDdXJyZW50IERlcGxveW1lbnQgU3RhdGU6IFByb2R1Y3Rpb24gLSBmb3VuZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkN1cnJlbnQgSW5jaWRlbnQgU3RhdGU6IE9wZXJhdGlvbmFsIC0gZm91bmQiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICdWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ3VycmVudCBWZXJzaW9uOiBWZXJzaW9uIDEgLSBmb3VuZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBmb3IgcHJpbnRlZCB2YWx1ZXMuCiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtVmFsdWUgKEBDb25maWdJdGVtUHJpbnQpIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENvbmZpZ0l0ZW1WYWx1ZS0+e1ZhbHVlfSApID4gLTEsCiAgICAgICAgICAgICAgICAiJENvbmZpZ0l0ZW1WYWx1ZS0+e01lc3NhZ2V9IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgRGVsZXRlIGNyZWF0ZWQgdGVzdCBDb25maWdJdGVtLgogICAgICAgIG15ICRTdWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1EZWxldGUoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gaXMgZGVsZXRlZCAtIElEICRDb25maWdJdGVtSUQiLAogICAgICAgICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIEdldCAnQ29tcHV0ZXInIENvbmZpZ0l0ZW0gSUQuCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1DbGFzc0lEczsKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1DbGFzcyAocXcoQ29tcHV0ZXIpKSB7CiAgICAgICAgICAgIG15ICRDb25maWdJdGVtRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkQ29uZmlnSXRlbUNsYXNzLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtQ2xhc3NJRHMsICRDb25maWdJdGVtRGF0YVJlZi0+e0l0ZW1JRH07CiAgICAgICAgfQoKICAgICAgICAjIEdldCAnUHJvZHVjdGlvbicgZGVwbG95bWVudCBzdGF0ZSBJRHMuCiAgICAgICAgbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICk7CiAgICAgICAgbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCA9ICRQcm9kdWN0aW9uRGVwbFN0YXRlRGF0YVJlZi0+e0l0ZW1JRH07CgogICAgICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CiAgICAgICAgbXkgJENvbmZpZ09iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICAjIENyZWF0ZSBDb25maWdJdGVtIG51bWJlcnMuCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1OdW1iZXJzOwogICAgICAgIGZvciBteSAkQ29uZmlnTnVtYmVyQ3JlYXRlICggMSAuLiAyICkgewogICAgICAgICAgICBteSAkQ29uZmlnSXRlbU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpOdW1iZXJHZW5lcmF0b3InKSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlciwKICAgICAgICAgICAgICAgICJDb25maWdJdGVtICRDb25maWdJdGVtTnVtYmVyIG51bWJlciBpcyBjcmVhdGVkIgogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtTnVtYmVycywgJENvbmZpZ0l0ZW1OdW1iZXI7CiAgICAgICAgfQoKICAgICAgICAjIEFkZCB0aGUgbmV3IENvbmZpZ0l0ZW1zLgogICAgICAgIG15IEBDb25maWdJdGVtSURzOwogICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUNyZWF0ZU51bWJlciAoQENvbmZpZ0l0ZW1OdW1iZXJzKSB7CiAgICAgICAgICAgIG15ICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1DcmVhdGVOdW1iZXIsCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICJDb25maWdJdGVtSUQgJENvbmZpZ0l0ZW1JRCBpcyBjcmVhdGVkIgogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkQ29uZmlnSXRlbUlEOwogICAgICAgIH0KCiAgICAgICAgbXkgJEluY2lTdGF0ZUlEID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdJbmNpZGVudCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBBZGQgYSBuZXcgdmVyc2lvbiBmb3IgZWFjaCBDb25maWdJdGVtLgogICAgICAgIG15IEBWZXJzaW9uSURzOwogICAgICAgIG15ICRDb3VudCAgICA9IDE7CiAgICAgICAgbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1WZXJzaW9uIChAQ29uZmlnSXRlbUlEcykgewogICAgICAgICAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJENvdW50IC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+IDEsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlSUQtPntJdGVtSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1WZXJzaW9uLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgICAgICAgICAiVmVyc2lvbklEICRWZXJzaW9uSUQgaXMgY3JlYXRlZCIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAVmVyc2lvbklEcywgJFZlcnNpb25JRDsKCiAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbi4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnLCAnaXRzbS1jb25maWdpdGVtJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2guCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVNlYXJjaCIpOwoKICAgICAgICAjIFdhaXQgdW50aWwgZm9ybSBhbmQgb3ZlcmxheSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnI1NlYXJjaENsYXNzSUQnKS5sZW5ndGgiICk7CgogICAgICAgICMgQ2hlY2sgZm9yICdDbGFzcycgbGFiZWwuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnbGFiZWxbZm9yPVwiQ2xhc3NcIl0nKS5sZW5ndGgiKSwKICAgICAgICAgICAgIkNsYXNzIGxhYmVsIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgZm9yICdDbGFzcycgc2VsZWN0IGJveC4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU2VhcmNoQ2xhc3NJRCIsICdjc3MnICksCiAgICAgICAgICAgICJDbGFzcyBzZWxlY3QgYm94IC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgQmUgc3VyZSBtb2Rlcm5pemVkIGZpZWxkIGhhcyBsb2FkZWQuCiAgICAgICAgc2xlZXAgMTsKCiAgICAgICAgIyBTZWxlY3QgJ0NvbXB1dGVyJyBjbGFzcy4KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNTZWFyY2hDbGFzc0lEJykudmFsKCckQ29uZmlnSXRlbUNsYXNzSURzWzBdJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKCiAgICAgICAgIyBCZSBzdXJlIGFsbCBmaWVsZHMgYXJlIGxvYWRlZC4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI1NlYXJjaEZvcm1TdWJtaXQiKS5sZW5ndGg7JywKICAgICAgICApOwoKICAgICAgICAjIENoZWNrIENvbmZpZ0l0ZW0gc2VhcmNoIHBhZ2UuCiAgICAgICAgZm9yIG15ICRJRCAoCiAgICAgICAgICAgIHF3KFNlYXJjaENsYXNzSUQgU2VhcmNoUHJvZmlsZSBTZWFyY2hQcm9maWxlTmV3IEF0dHJpYnV0ZSBQcmV2aW91c1ZlcnNpb25TZWFyY2ggUmVzdWx0Rm9ybSBTZWFyY2hGb3JtU3VibWl0KQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBzbGVlcCAxOwogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjJElEJykubGVuZ3RoIiApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjJElEJykubGVuZ3RoOyIpLAogICAgICAgICAgICAgICAgIkVsZW1lbnQgaXMgZm91bmQgLSAkSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBpZiBJVFNNQ2hhbmdlIFNlYXJjaCBmb3JtIGNvbnRhaW4gRXhjZWwgb3V0cHV0IG9wdGlvbiwgc2VlIGJ1ZyMxMjc2OS4KICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCcjUmVzdWx0Rm9ybSBvcHRpb246Y29udGFpbnMoXCJFeGNlbFwiKScpLmxlbmd0aCIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJzEnLAogICAgICAgICAgICAnSVRTTUNvbmZpZ0l0ZW0gU2VhcmNoIGNvbnRhaW4gRXhjZWwgb3V0cHV0JywKICAgICAgICApOwoKICAgICAgICAjIFNlYXJjaCBDb25maWdJdGVtcyBieSB0ZXN0IENvbmZpZ0l0ZW0gbnVtYmVyIGFuZCBuYW1lcy4KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI0F0dHJpYnV0ZScpLnZhbCgnTmFtZScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnI1NlYXJjaEluc2VydCBpbnB1dFtuYW1lPVwiTmFtZVwiXScpLmxlbmd0aCIKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQG5hbWU9J051bWJlciddIiktPnNlbmRfa2V5cygnKicpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAbmFtZT0nTmFtZSddIiktPnNlbmRfa2V5cyggJyonIC4gJFJhbmRvbUlEICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU2VhcmNoRm9ybVN1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgIVwkKCdEaWFsb2cuTW9kYWwnKS5sZW5ndGggJiYgXCQoJyNPdmVydmlld0JvZHkgLlRhYmxlU21hbGwnKS5sZW5ndGgiCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBmb3IgZXhwZWN0ZWQgcmVzdWx0LgogICAgICAgIGZvciBteSAkQ2hlY2tDb25maWdJdGVtIChAQ29uZmlnSXRlbU51bWJlcnMpIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJyNPdmVydmlld0JvZHkgLlRhYmxlU21hbGwgdGQ6Y29udGFpbnMoJENoZWNrQ29uZmlnSXRlbSknKS5sZW5ndGgiCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gJENoZWNrQ29uZmlnSXRlbSBudW1iZXIgaXMgZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBWZXJpZnkgc29ydGluZyBpbiB0YWJsZSwgYnkgZGVmYXVsdCBzb3J0aW5nIGlzIGRvbmUgYnkgQ29uZmlnSXRlbU51bWJlciAtIHNvcnQgYXNjZW5kaW5nLgogICAgICAgICMgTG93ZXIgSUQgd2lsbCBvbiB0aGUgdG9wIG9mIHRhYmxlLgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCd0Ym9keSB0cjplcSgwKScpLmF0dHIoJ2lkJykiKSwKICAgICAgICAgICAgJ0NvbmZpZ0l0ZW1JRF8nIC4gJENvbmZpZ0l0ZW1JRHNbMV0sCiAgICAgICAgICAgICJDb25maWdJdGVtSUQgJENvbmZpZ0l0ZW1JRHNbMV0gaXMgb24gdG9wIG9mIHRhYmxlIHNvcnQgYnkgTnVtYmVyIGFzY2VuZGluZyIKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCd0Ym9keSB0cjplcSgxKScpLmF0dHIoJ2lkJykiKSwKICAgICAgICAgICAgJ0NvbmZpZ0l0ZW1JRF8nIC4gJENvbmZpZ0l0ZW1JRHNbMF0sCiAgICAgICAgICAgICJDb25maWdJdGVtSUQgJENvbmZpZ0l0ZW1JRHNbMF0gaXMgb24gYm90dG9tIG9mIHRhYmxlIHNvcnQgYnkgTnVtYmVyIGFzY2VuZGluZyIKICAgICAgICApOwoKICAgICAgICAjIENsaWNrIHRvIHNvcnQgYnkgTmFtZS4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5OYW1lIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIGZvciBleHBlY3RlZCByZXN1bHQuCiAgICAgICAgZm9yIG15ICRDaGVja0NvbmZpZ0l0ZW0gKEBDb25maWdJdGVtTnVtYmVycykgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgInJldHVybiBcJCgnI092ZXJ2aWV3Qm9keSAuVGFibGVTbWFsbCB0ZDpjb250YWlucygkQ2hlY2tDb25maWdJdGVtKScpLmxlbmd0aCIKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAiQ29uZmlnSXRlbSAkQ2hlY2tDb25maWdJdGVtIG51bWJlciBpcyBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIFNvcnQgaXMgYnkgTmFtZSBkZXNjZW5kaW5nLgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCd0Ym9keSB0cjplcSgwKScpLmF0dHIoJ2lkJykiKSwKICAgICAgICAgICAgJ0NvbmZpZ0l0ZW1JRF8nIC4gJENvbmZpZ0l0ZW1JRHNbMF0sCiAgICAgICAgICAgICJDb25maWdJdGVtSUQgJENvbmZpZ0l0ZW1JRHNbMV0gaXMgb24gdG9wIG9mIHRhYmxlIHNvcnQgYnkgTmFtZSBkZXNjZW5kaW5nIgogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJ3Rib2R5IHRyOmVxKDEpJykuYXR0cignaWQnKSIpLAogICAgICAgICAgICAnQ29uZmlnSXRlbUlEXycgLiAkQ29uZmlnSXRlbUlEc1sxXSwKICAgICAgICAgICAgIkNvbmZpZ0l0ZW1JRCAkQ29uZmlnSXRlbUlEc1swXSBpcyBvbiBib3R0b20gb2YgdGFibGUgc29ydCBieSBOYW1lIGRlc2NlbmRpbmciCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGljayB0byBzb3J0IGJ5IE5hbWUgYWdhaW4uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuTmFtZSIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBWZXJpZnkgb3JkZXIgaXMgY2hhbmdlZCwgc29ydCBieSBOYW1lIGFzY2VuZGluZy4KICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgndGJvZHkgdHI6ZXEoMCknKS5hdHRyKCdpZCcpIiksCiAgICAgICAgICAgICdDb25maWdJdGVtSURfJyAuICRDb25maWdJdGVtSURzWzFdLAogICAgICAgICAgICAiQ29uZmlnSXRlbUlEICRDb25maWdJdGVtSURzWzBdIGlzIG9uIHRvcCBvZiB0YWJsZSBzb3J0IGJ5IE5hbWUgYXNjZW5kaW5nIgogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJ3Rib2R5IHRyOmVxKDEpJykuYXR0cignaWQnKSIpLAogICAgICAgICAgICAnQ29uZmlnSXRlbUlEXycgLiAkQ29uZmlnSXRlbUlEc1swXSwKICAgICAgICAgICAgIkNvbmZpZ0l0ZW1JRCAkQ29uZmlnSXRlbUlEc1sxXSBpcyBvbiBib3R0b20gb2YgdGFibGUgc29ydCBieSBOYW1lIGFzY2VuZGluZyIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBDb25maWdJdGVtIG51bWJlcnMgYW5kIGFkZCB0aGUgbmV3IENvbmZpZ0l0ZW1zLgogICAgICAgIEBDb25maWdJdGVtTnVtYmVycyA9ICgpOwogICAgICAgIGZvciBteSAkQ29uZmlnTnVtYmVyQ3JlYXRlICggMSAuLiAzNSApIHsKICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW1OdW1iZXIgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbU51bWJlckNyZWF0ZSgKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6TnVtYmVyR2VuZXJhdG9yJyksCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICAgICAgICAgICAgICAiQ29uZmlnSXRlbSAkQ29uZmlnSXRlbU51bWJlciBudW1iZXIgaXMgY3JlYXRlZCIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAQ29uZmlnSXRlbU51bWJlcnMsICRDb25maWdJdGVtTnVtYmVyOwoKICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlciwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAgICAgIkNvbmZpZ0l0ZW1JRCAkQ29uZmlnSXRlbUlEIGlzIGNyZWF0ZWQiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1JRHMsICRDb25maWdJdGVtSUQ7CiAgICAgICAgfQoKICAgICAgICBteSBAWE1MRGF0YUFycmF5ID0gWwogICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ1ZlcnNpb24nID0+IFsKICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAnV2FycmFudHlFeHBpcmF0aW9uRGF0ZScgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQnID0+ICcyMDE3LTEwLTEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgJ05JQycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lQb3ZlckRIQ1AnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50JyA9PiAnMzgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJUEFkZHJlc3MnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50JyA9PiAnMTcyLjAuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudCcgPT4gJ3Rlc3QgMTcyLjAuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnVmVyc2lvbicgPT4gWwogICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICdXYXJyYW50eUV4cGlyYXRpb25EYXRlJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudCcgPT4gJzIwMTctMTEtMTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIF07CgogICAgICAgICMgQWRkIGEgbmV3IHZlcnNpb24gZm9yIGVhY2ggQ29uZmlnSXRlbS4KICAgICAgICAkQ291bnQgPSAxOwogICAgICAgIGZvciBteSAkQ29uZmlnSXRlbVZlcnNpb24gKEBDb25maWdJdGVtSURzKSB7CgogICAgICAgICAgICBteSAkWE1MRGF0YSAgID0gKCAkQ291bnQgPD0gMzAgKSA/ICRYTUxEYXRhQXJyYXlbMF0gOiAkWE1MRGF0YUFycmF5WzFdOwogICAgICAgICAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJENvdW50IC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+IDEsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlSUQtPntJdGVtSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgPT4gJFhNTERhdGEsCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1WZXJzaW9uLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgICAgICAgICAiVmVyc2lvbklEICRWZXJzaW9uSUQgaXMgY3JlYXRlZCIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAVmVyc2lvbklEcywgJFZlcnNpb25JRDsKCiAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgIyBDaGFuZ2Ugc2VhcmNoIG9wdGlvbi4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNJVFNNQ29uZmlnSXRlbVNlYXJjaCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgV2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0F0dHJpYnV0ZScpLmxlbmd0aCIgKTsKCiAgICAgICAgIyBBZGQgc2VhcmNoIGZpbHRlciBieSBXYXJyYW50eUV4cGlyYXRpb25EYXRlIGFuZCBzZXQgZGF0ZSByYW5nZSAoOC0xMC0yMDE3IC0gMTUtMTAtMjAxNykuCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjQXR0cmlidXRlJykudmFsKCdXYXJyYW50eUV4cGlyYXRpb25EYXRlJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiLAogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnaW5wdXRbbmFtZT1cIldhcnJhbnR5RXhwaXJhdGlvbkRhdGVcIl0nKS5sZW5ndGgiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNTZWFyY2hJbnNlcnQgc2VsZWN0W2lkPVwiV2FycmFudHlFeHBpcmF0aW9uRGF0ZTo6VGltZVN0YXJ0OjpEYXlcIl0nKS52YWwoJzgnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNTZWFyY2hJbnNlcnQgc2VsZWN0W2lkPVwiV2FycmFudHlFeHBpcmF0aW9uRGF0ZTo6VGltZVN0YXJ0OjpNb250aFwiXScpLnZhbCgnMTAnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNTZWFyY2hJbnNlcnQgc2VsZWN0W2lkPVwiV2FycmFudHlFeHBpcmF0aW9uRGF0ZTo6VGltZVN0YXJ0OjpZZWFyXCJdJykudmFsKCcyMDE3Jyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjU2VhcmNoSW5zZXJ0IHNlbGVjdFtpZD1cIldhcnJhbnR5RXhwaXJhdGlvbkRhdGU6OlRpbWVTdG9wOjpEYXlcIl0nKS52YWwoJzE1Jyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjU2VhcmNoSW5zZXJ0IHNlbGVjdFtpZD1cIldhcnJhbnR5RXhwaXJhdGlvbkRhdGU6OlRpbWVTdG9wOjpNb250aFwiXScpLnZhbCgnMTAnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNTZWFyY2hJbnNlcnQgc2VsZWN0W2lkPVwiV2FycmFudHlFeHBpcmF0aW9uRGF0ZTo6VGltZVN0b3A6OlllYXJcIl0nKS52YWwoJzIwMTcnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQG5hbWU9J051bWJlciddIiktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBuYW1lPSdOdW1iZXInXSIpLT5zZW5kX2tleXMoJyonKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQG5hbWU9J05hbWUnXSIpLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAbmFtZT0nTmFtZSddIiktPnNlbmRfa2V5cyggJyonIC4gJFJhbmRvbUlEICk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaEZvcm1TdWJtaXQiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmICFcJCgnRGlhbG9nLk1vZGFsJykubGVuZ3RoICYmIFwkKCcjT3ZlcnZpZXdCb2R5IC5UYWJsZVNtYWxsJykubGVuZ3RoIgogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJy5QYWdpbmF0aW9uJykudGV4dCgpLnRyaW0oKS5pbmRleE9mKCcxLTI1IG9mIDMwJykgPiAtMTsiKSwKICAgICAgICAgICAgIkNoZWNrIHBhZ2luYXRpb24gb24gdGhlIGZpcnN0IHBhZ2UiLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjT3ZlcnZpZXdCb2R5IC5UYWJsZVNtYWxsIHRib2R5IHRyJykubGVuZ3RoOyIpLAogICAgICAgICAgICAnMjUnLAogICAgICAgICAgICAiTnVtYmVyIG9mIGNvbmZpZyBpdGVtcyBvbiB0aGUgZmlyc3QgcGFnZSBpcyBjb3JyZWN0IC0gMjUiLAogICAgICAgICk7CgogICAgICAgICMgR28gdG8gdGhlIHNlY29uZCBwYWdlLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0dlbmVyaWNQYWdlMiIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnLlBhZ2luYXRpb24nKS50ZXh0KCkudHJpbSgpLmluZGV4T2YoJzI2LTMwIG9mIDMwJykgPiAtMTsiKSwKICAgICAgICAgICAgIkNoZWNrIHBhZ2luYXRpb24gb24gdGhlIHNlY29uZCBwYWdlIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI092ZXJ2aWV3Qm9keSAuVGFibGVTbWFsbCB0Ym9keSB0cicpLmxlbmd0aDsiKSwKICAgICAgICAgICAgJzUnLAogICAgICAgICAgICAiTnVtYmVyIG9mIGNvbmZpZyBpdGVtcyBvbiB0aGUgc2Vjb25kIHBhZ2UgaXMgY29ycmVjdCAtIDUiLAogICAgICAgICk7CgogICAgICAgICMgQ2hhbmdlIHNlYXJjaCBvcHRpb24uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjSVRTTUNvbmZpZ0l0ZW1TZWFyY2giLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIFdhaXQgdW50aWwgZm9ybSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNBdHRyaWJ1dGUnKS5sZW5ndGggJiYgXCQoJyNTZWFyY2hJbnNlcnQgaW5wdXRbbmFtZT1cIk5hbWVcIl0nKS5sZW5ndGgiCiAgICAgICAgKTsKCiAgICAgICAgIyBJbnB1dCB3cm9uZyBzZWFyY2ggcGFyYW1ldGVycywgcmVzdWx0IHNob3VsZCBiZSAnTm8gZGF0YSBmb3VuZCcuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBuYW1lPSdOYW1lJ10iKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQG5hbWU9J05hbWUnXSIpLT5zZW5kX2tleXMoJ2FzZGZnJyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU2VhcmNoRm9ybVN1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgIVwkKCdEaWFsb2cuTW9kYWwnKS5sZW5ndGggJiYgXCQoJyNPdmVydmlld0JvZHkgLlRhYmxlU21hbGwnKS5sZW5ndGgiCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBmb3IgZXhwZWN0ZWQgcmVzdWx0LgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05vIGRhdGEgZm91bmQnICkgPiAtMSwKICAgICAgICAgICAgIidObyBkYXRhIGZvdW5kJyAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIENsaWNrIG9uICJDaGFuZ2Ugc2VhcmNoIG9wdGlvbiIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNJVFNNQ29uZmlnSXRlbVNlYXJjaCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnI1NlYXJjaFByb2ZpbGVOZXcnKS5sZW5ndGgiICk7CiAgICAgICAgc2xlZXAgMjsKCiAgICAgICAgIyBDcmVhdGUgbmV3IHRlbXBsYXRlIHNlYXJjaC4KICAgICAgICBteSAkU2VhcmNoUHJvZmlsZU5hbWUgPSAiU2VhcmNoLSIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaFByb2ZpbGVOZXciLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNTZWFyY2hQcm9maWxlQWRkTmFtZScpLmxlbmd0aCIgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU2VhcmNoUHJvZmlsZUFkZE5hbWUiLCAgICdjc3MnICktPnNlbmRfa2V5cygkU2VhcmNoUHJvZmlsZU5hbWUpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaFByb2ZpbGVBZGRBY3Rpb24iLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNTZWFyY2hQcm9maWxlJykudmFsKCkgPT09ICckU2VhcmNoUHJvZmlsZU5hbWUnIgogICAgICAgICk7CgogICAgICAgICMgRXhlY3V0ZSBzZWFyY2ggd2l0aCBuZXcgc2VhcmNoIHByb2ZpbGUgdG8gc2F2ZSBpdC4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQG5hbWU9J051bWJlciddIiktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBuYW1lPSdOdW1iZXInXSIpLT5zZW5kX2tleXMoJyonKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQG5hbWU9J05hbWUnXSIpLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAbmFtZT0nTmFtZSddIiktPnNlbmRfa2V5cyggJyonIC4gJFJhbmRvbUlEICk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaEZvcm1TdWJtaXQiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmICFcJCgnRGlhbG9nLk1vZGFsJykubGVuZ3RoICYmIFwkKCcjT3ZlcnZpZXdCb2R5IC5UYWJsZVNtYWxsJykubGVuZ3RoIgogICAgICAgICk7CgogICAgICAgICMgQ2xpY2sgb24gIkNoYW5nZSBzZWFyY2ggb3B0aW9uIgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0lUU01Db25maWdJdGVtU2VhcmNoIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyBTZWxlY3QgbmV3bHkgY3JlYXRlZCBzZWFyY2ggcHJvZmlsZS4KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNTZWFyY2hQcm9maWxlJykudmFsKCckU2VhcmNoUHJvZmlsZU5hbWUnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnI1NlYXJjaFByb2ZpbGUnKS52YWwoKSA9PT0gJyRTZWFyY2hQcm9maWxlTmFtZSc7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnI1NlYXJjaFByb2ZpbGVBc0xpbms6dmlzaWJsZScpLmxlbmd0aCIKICAgICAgICApOwoKICAgICAgICAjIENoZWNrIGJ1dHRvbiBmb3IgcHJvZmlsZSBsaW5rLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaFByb2ZpbGVBc0xpbmsiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICdyZXR1cm4gdHlwZW9mKENvcmUpID09ICJvYmplY3QiICYmIHR5cGVvZihDb3JlLkFwcCkgPT0gIm9iamVjdCIgJiYgQ29yZS5BcHAuUGFnZUxvYWRDb21wbGV0ZScKICAgICAgICApOwoKICAgICAgICAjIENsaWNrIG9uICJDaGFuZ2Ugc2VhcmNoIG9wdGlvbiIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNJVFNNQ29uZmlnSXRlbVNlYXJjaCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnI1NlYXJjaFByb2ZpbGUnKS52YWwoKSA9PT0gJyRTZWFyY2hQcm9maWxlTmFtZSciCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNTZWFyY2hQcm9maWxlJykudmFsKCk7IiksCiAgICAgICAgICAgICRTZWFyY2hQcm9maWxlTmFtZSwKICAgICAgICAgICAgIkNoZWNrIGlmIHByb2ZpbGUgaXMgbG9hZGVkIHdlbGwiCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBpZiBjb3JyZWN0IGNvbmZpZyBpdGVtcyBhcmUgc2hvd24gYWZ0ZXIgc3ViIGF0dHJpYnV0ZXMgYXJlIHNlYXJjaGVkLiBTZWUgYnVnIzEyOTk4LgogICAgICAgIG15ICRDb25maWdJdGVtTnVtYmVyMiA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgICAgICBUeXBlICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06Ok51bWJlckdlbmVyYXRvcicpLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXIyLAogICAgICAgICAgICAiQ29uZmlnSXRlbSAkQ29uZmlnSXRlbU51bWJlcjIgbnVtYmVyIGlzIGNyZWF0ZWQiCiAgICAgICAgKTsKICAgICAgICBteSAkQ29uZmlnSXRlbUlEMiA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyMiwKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRDIsCiAgICAgICAgICAgICJDb25maWdJdGVtSUQgJENvbmZpZ0l0ZW1JRDIgaXMgY3JlYXRlZCIKICAgICAgICApOwoKICAgICAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkQ29uZmlnSXRlbUlEMjsKCiAgICAgICAgIyBDcmVhdGUgY29uZmlnIHRoYXQgc2hvdWxkIG5vdCBhcHBlYXIgaW4gc2VhcmNoLgogICAgICAgIG15ICRWZXJzaW9uSUQyID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkQ291bnQgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAxLAogICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCwKICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVJRC0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRDIsCiAgICAgICAgICAgIFhNTERhdGEgICAgICA9PiBbCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JQyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUG92ZXJESENQID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzM4JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUEFkZHJlc3MgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjIyLjAuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICd0ZXN0IDIyMi4wLjAuMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRWZXJzaW9uSUQyLAogICAgICAgICAgICAiVmVyc2lvbklEICRWZXJzaW9uSUQyIGlzIGNyZWF0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBDb25maWd1cmUgSVBBZGRyZXMgdG8gc2hvdyBpbiBzZWFyY2ggcmVzdWx0LgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2gjIyNTaG93Q29sdW1ucycsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEN1ckRlcGxTaWduYWwgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEN1ckluY2lTaWduYWwgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIExhc3RDaGFuZ2VkICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICdOSUM6OjE6OklQQWRkcmVzczo6MScgPT4gMSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5EaWFsb2cgLkNsb3NlIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudElUU01Db25maWdJdGVtU2VhcmNoLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2giKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIGZvcm0gYW5kIG92ZXJsYXkgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNTZWFyY2hDbGFzc0lEJykubGVuZ3RoIiApOwogICAgICAgIHNsZWVwIDE7CgogICAgICAgICMgU2VsZWN0ICdDb21wdXRlcicgY2xhc3MuCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjU2VhcmNoQ2xhc3NJRCcpLnZhbCgnJENvbmZpZ0l0ZW1DbGFzc0lEc1swXScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CgogICAgICAgICMgV2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0F0dHJpYnV0ZScpLmxlbmd0aCIgKTsKCiAgICAgICAgIyBBZGQgc2VhcmNoIGZpbHRlciBieSBOSUM6OklQQWRkcmVzcyBhbmQgc2V0IDE3MiouCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjQXR0cmlidXRlJykudmFsKCdOSUM6OklQQWRkcmVzcycpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IiwKICAgICAgICApOwoKICAgICAgICAjIFdhaXQgZm9yIE5ldHdvcmsgQWRhcHRlcjo6SVAgQWRkcmVzcyB0byBhcHBlYXIuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNTZWFyY2hJbnNlcnQgaW5wdXRbbmFtZT1cIk5JQzo6SVBBZGRyZXNzXCJdJykubGVuZ3RoIgogICAgICAgICk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAbmFtZT0nTklDOjpJUEFkZHJlc3MnXSIpLT5zZW5kX2tleXMoJzE3MionKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU2VhcmNoRm9ybVN1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgIVwkKCdEaWFsb2cuTW9kYWwnKS5sZW5ndGggJiYgXCQoJyNPdmVydmlld0JvZHkgLlRhYmxlU21hbGwnKS5sZW5ndGgiCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBpZiBjb3JyZWN0IG51bWJlciBvZiBpdGVtcyBhcmUgc2hvd24gb24gcGFnaW5hdGlvbi4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcuUGFnaW5hdGlvbicpLnRleHQoKS50cmltKCkuaW5kZXhPZignMS0yNSBvZiAzMCcpID4gLTE7IiksCiAgICAgICAgICAgICJDaGVjayBwYWdpbmF0aW9uIG9uIHRoZSBmaXJzdCBwYWdlIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI092ZXJ2aWV3Qm9keSAuVGFibGVTbWFsbCB0Ym9keSB0cicpLmxlbmd0aDsiKSwKICAgICAgICAgICAgJzI1JywKICAgICAgICAgICAgIk51bWJlciBvZiBjb25maWcgaXRlbXMgb24gdGhlIGZpcnN0IHBhZ2UgaXMgY29ycmVjdCAtIDI1IiwKICAgICAgICApOwoKICAgICAgICAjIEdvIHRvIHRoZSBzZWNvbmQgcGFnZS4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNHZW5lcmljUGFnZTIiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgaWYgY29ycmVjdCBudW1iZXIgb2YgaXRlbXMgYXJlIHNob3duIG9uIHBhZ2luYXRpb24uCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnLlBhZ2luYXRpb24nKS50ZXh0KCkudHJpbSgpLmluZGV4T2YoJzI2LTMwIG9mIDMwJykgPiAtMTsiKSwKICAgICAgICAgICAgIkNoZWNrIHBhZ2luYXRpb24gb24gdGhlIHNlY29uZCBwYWdlIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI092ZXJ2aWV3Qm9keSAuVGFibGVTbWFsbCB0Ym9keSB0cicpLmxlbmd0aDsiKSwKICAgICAgICAgICAgJzUnLAogICAgICAgICAgICAiTnVtYmVyIG9mIGNvbmZpZyBpdGVtcyBvbiB0aGUgc2Vjb25kIHBhZ2UgaXMgY29ycmVjdCAtIDUiLAogICAgICAgICk7CgogICAgICAgICMgVmVyaWZ5IHNlYXJjaCByZXN1bHQgcmVtYWluZWQgaW50YWN0IGFmdGVyIGNoYW5naW5nIGl0ZW1zIHBlciBwYWdlLCBzZWUgYnVnIzE0NzE3IGZvciBtb3JlIGRldGFpbHMuCiAgICAgICAgIyBTZXQgMTAgY29uZmlnIGl0ZW1zIHBlciBwYWdlLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiYSNTaG93Q29udGV4dFNldHRpbmdzRGlhbG9nIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCIuRGlhbG9nLk1vZGFsICNVc2VyQ29uZmlnSXRlbU92ZXJ2aWV3U21hbGxQYWdlU2hvd24iKS5sZW5ndGgnCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPklucHV0RmllbGRWYWx1ZVNldCgKICAgICAgICAgICAgRWxlbWVudCA9PiAnI1VzZXJDb25maWdJdGVtT3ZlcnZpZXdTbWFsbFBhZ2VTaG93bicsCiAgICAgICAgICAgIFZhbHVlICAgPT4gJzEwJywKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAncmV0dXJuICEkKCIuRGlhbG9nLk1vZGFsIikubGVuZ3RoJwogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgaWYgY29ycmVjdCBudW1iZXIgb2YgaXRlbXMgYXJlIHNob3duIG9uIHBhZ2luYXRpb24uCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnLlBhZ2luYXRpb24nKS50ZXh0KCkudHJpbSgpLmluZGV4T2YoJzEtMTAgb2YgMzAnKSA+IC0xOyIpLAogICAgICAgICAgICAiQ2hlY2sgcGFnaW5hdGlvbiBhZnRlciBzd2l0Y2giLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNPdmVydmlld0JvZHkgLlRhYmxlU21hbGwgdGJvZHkgdHInKS5sZW5ndGg7IiksCiAgICAgICAgICAgICcxMCcsCiAgICAgICAgICAgICJOdW1iZXIgb2YgY29uZmlnIGl0ZW1zIGlzIGNvcnJlY3QgLSAxMCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgY3JlYXRlZCB0ZXN0IENvbmZpZ0l0ZW0uCiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtRGVsZXRlSUQgKEBDb25maWdJdGVtSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1EZWxldGUoCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1EZWxldGVJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkNvbmZpZ0l0ZW1JRCAkQ29uZmlnSXRlbURlbGV0ZUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QuCiAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICAgICAgZm9yIG15ICRDYWNoZSAocXcoQ29uZmlnSXRlbSBWZXJzaW9uKSkgewogICAgICAgICAgICAkQ2FjaGVPYmplY3QtPkNsZWFuVXAoIFR5cGUgPT4gJENhY2hlICk7CiAgICAgICAgfQogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIGdldCAnSGFyZHdhcmUnIGNhdGFsb2cgY2xhc3MgSURzCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICBOYW1lICA9PiAnSGFyZHdhcmUnLAogICAgICAgICk7CiAgICAgICAgbXkgJEhhcmR3YXJlQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKCiAgICAgICAgIyBnZXQgJ1Byb2R1Y3Rpb24nIGFuZCAnUmVwYWlyJyBkZXBsb3ltZW50IHN0YXRlIElEcwogICAgICAgIG15IEBEZXBsU3RhdGVJRHM7CiAgICAgICAgbXkgQERlcGxTdGF0ZXMgPSAocXcoUHJvZHVjdGlvbiBSZXBhaXIpKTsKICAgICAgICBmb3IgbXkgJERlcGxTdGF0ZSAoQERlcGxTdGF0ZXMpIHsKICAgICAgICAgICAgbXkgJERlcGxTdGF0ZURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREZXBsU3RhdGUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQERlcGxTdGF0ZUlEcywgJERlcGxTdGF0ZURhdGFSZWYtPntJdGVtSUR9OwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgICAgIG15ICRDb25maWdPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgIyBjcmVhdGUgQ29uZmlnSXRlbSBudW1iZXIKICAgICAgICBteSAkQ29uZmlnSXRlbU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgICAgICBUeXBlICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06Ok51bWJlckdlbmVyYXRvcicpLAogICAgICAgICAgICBDbGFzc0lEID0+ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlciwKICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gbnVtYmVyIGlzIGNyZWF0ZWQgLSAkQ29uZmlnSXRlbU51bWJlciIKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0aGUgbmV3IENvbmZpZ0l0ZW0KICAgICAgICBteSAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICAgICAgICAgIENsYXNzSUQgPT4gJEhhcmR3YXJlQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gaXMgY3JlYXRlZCAtIElEICRDb25maWdJdGVtSUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgdHdvIHZlcnNpb25zCiAgICAgICAgbXkgQFZlcnNpb25JRHM7CiAgICAgICAgZm9yIG15ICRWZXJzaW9uIChARGVwbFN0YXRlSURzKSB7CiAgICAgICAgICAgIG15ICRWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnU2VsZW5pdW1UZXN0JywKICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAxLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICRWZXJzaW9uLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgICAgICAgICAiVmVyc2lvbiBpcyBjcmVhdGVkIC0gSUQgJFZlcnNpb25JRCIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAVmVyc2lvbklEcywgJFZlcnNpb25JRDsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jb25maWdpdGVtJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50SVRTTUNvbmZpZ0l0ZW0gc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01Db25maWdJdGVtO1NvcnRCeT1OdW1iZXI7T3JkZXJCeT1Eb3duO1ZpZXc9O0ZpbHRlcj0kSGFyZHdhcmVDb25maWdJdGVtSUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGljayBvbiBjcmVhdGVkIENvbmZpZ0l0ZW0uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vZGl2W2NvbnRhaW5zKFxAdGl0bGUsICckQ29uZmlnSXRlbU51bWJlcicgKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGdldCBDb25maWdJdGVtIHZhbHVlIHBhcmFtcwogICAgICAgIG15IEBDb25maWdJdGVtVmFsdWVzID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnSGFyZHdhcmUnLAogICAgICAgICAgICAgICAgQ2hlY2sgPT4gJ3AuVmFsdWU6Y29udGFpbnMoSGFyZHdhcmUpJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgPT4gJ1NlbGVuaXVtVGVzdCcsCiAgICAgICAgICAgICAgICBDaGVjayA9PiAncC5WYWx1ZTpjb250YWlucyhTZWxlbml1bVRlc3QpJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgPT4gJ1JlcGFpcicsCiAgICAgICAgICAgICAgICBDaGVjayA9PiAnZGl2LlZhbHVlOmNvbnRhaW5zKFJlcGFpciknLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgQ2hlY2sgPT4gJ2Rpdi5WYWx1ZTpjb250YWlucyhPcGVyYXRpb25hbCknLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAiJENvbmZpZ0l0ZW1OdW1iZXIiLAogICAgICAgICAgICAgICAgQ2hlY2sgPT4gImgxOmNvbnRhaW5zKCRDb25maWdJdGVtTnVtYmVyKSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBDb25maWdJdGVtIHZhbHVlcyBvbiBzY3JlZW4KICAgICAgICBmb3IgbXkgJENoZWNrQ29uZmlnSXRlbVZhbHVlIChAQ29uZmlnSXRlbVZhbHVlcykgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgInJldHVybiBcJCgnJENoZWNrQ29uZmlnSXRlbVZhbHVlLT57Q2hlY2t9JykubGVuZ3RoIgogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICJUZXN0IENvbmZpZ0l0ZW0gdmFsdWUgJENoZWNrQ29uZmlnSXRlbVZhbHVlLT57VmFsdWV9IC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjbGljayB0byBzaG93IGFsbCB2ZXJzaW9ucwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLkFsbElUU01JdGVtcyIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgdmVyaWZ5IGJvdGggdmVyc2lvbnMgYXJlIHByZXNlbnQgb24gc2NyZWVuCiAgICAgICAgZm9yIG15ICRWZXJzaW9uc0NoZWNrIChARGVwbFN0YXRlcykgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiU2VsZW5pdW1UZXN0ICgkVmVyc2lvbnNDaGVjaykiICkgPiAtMSwKICAgICAgICAgICAgICAgICJTZWxlbml1bVRlc3QgKCRWZXJzaW9uc0NoZWNrKSAtIGZvdW5kIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRlc3QgbWVudSBidXR0b25zIHBhcmFtcwogICAgICAgIG15IEBNZW51QnV0dG9ucyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiAnQmFjaycsCiAgICAgICAgICAgICAgICBMaW5rID0+ICJBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbTtTb3J0Qnk9TnVtYmVyO09yZGVyQnk9RG93bjtWaWV3PTtGaWx0ZXI9JEhhcmR3YXJlQ29uZmlnSXRlbUlEIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiAnSGlzdG9yeScsCiAgICAgICAgICAgICAgICBMaW5rID0+ICJBZ2VudElUU01Db25maWdJdGVtSGlzdG9yeTtDb25maWdJdGVtSUQ9JENvbmZpZ0l0ZW1JRDtWZXJzaW9uSUQ9JFZlcnNpb25JRHNbMV0iLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lID0+ICdFZGl0JywKICAgICAgICAgICAgICAgIExpbmsgPT4gIkFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0O0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiAnUHJpbnQnLAogICAgICAgICAgICAgICAgTGluayA9PiAiQWdlbnRJVFNNQ29uZmlnSXRlbVByaW50O0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEO1ZlcnNpb25JRD0kVmVyc2lvbklEc1sxXSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgTGluayA9PiAiQWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1JVFNNQ29uZmlnSXRlbTtTb3VyY2VLZXk9JENvbmZpZ0l0ZW1JRCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R1cGxpY2F0ZScsCiAgICAgICAgICAgICAgICBMaW5rID0+ICJBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUVkaXQ7RHVwbGljYXRlSUQ9JENvbmZpZ0l0ZW1JRDtWZXJzaW9uSUQ9JFZlcnNpb25JRHNbMV0iLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgbWVudSBidXR0b25zCiAgICAgICAgZm9yIG15ICRNZW51QnV0dG9uQ2hlY2sgKEBNZW51QnV0dG9ucykgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJyRNZW51QnV0dG9uQ2hlY2stPntMaW5rfScgKV0iKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJNZW51IGJ1dHRvbiAkTWVudUJ1dHRvbkNoZWNrLT57TmFtZX0gLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgQ29uZmlnSXRlbQogICAgICAgIG15ICRTdWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1EZWxldGUoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gaXMgZGVsZXRlZCAtIElEICRDb25maWdJdGVtSUQiLAogICAgICAgICk7CiAgICB9CgopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwogICAgICAgIG15ICRUaWNrZXRPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgICAgICBteSAkQ29uZmlnSXRlbU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICAjIEdldCBDb21wdXRlciBhbmQgSGFyZHdhcmUgY2F0YWxvZyBjbGFzcyBJRHMuCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1DbGFzc0lEczsKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW0gKHF3KENvbXB1dGVyIEhhcmR3YXJlKSkgewogICAgICAgICAgICBteSAkQ29uZmlnSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gJENvbmZpZ0l0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1DbGFzc0lEcywgJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKICAgICAgICB9CgogICAgICAgICMgR2V0ICdQcm9kdWN0aW9uJyBkZXBsb3ltZW50IHN0YXRlIElELgogICAgICAgIG15ICREZXBsU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICk7CiAgICAgICAgbXkgJERlcGxTdGF0ZUlEID0gJERlcGxTdGF0ZURhdGFSZWYtPntJdGVtSUR9OwoKICAgICAgICAjIENyZWF0ZSB0d28gdGVzdCBDb25maWdJdGVtcyBmb3IgQ29tcHV0ZXIgYW5kIEhhcmR3YXJlIENvbmZpZ0l0ZW0gY2xhc3MuCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1OdW1iZXJzOwogICAgICAgIG15IEBDb25maWdJdGVtSURzOwogICAgICAgIG15IEBWZXJzaW9uSURzOwogICAgICAgIGZvciBteSAkSVRTTUNvbmZpZ0l0ZW0gKEBDb25maWdJdGVtQ2xhc3NJRHMpIHsKCiAgICAgICAgICAgICMgQ3JlYXRlIENvbmZpZ0l0ZW0gbnVtYmVyLgogICAgICAgICAgICBteSAkQ29uZmlnSXRlbU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpOdW1iZXJHZW5lcmF0b3InKSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJElUU01Db25maWdJdGVtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gbnVtYmVyIGlzIGNyZWF0ZWQgLSAkQ29uZmlnSXRlbU51bWJlciIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAQ29uZmlnSXRlbU51bWJlcnMsICRDb25maWdJdGVtTnVtYmVyOwoKICAgICAgICAgICAgIyBBZGQgdGhlIG5ldyBDb25maWdJdGVtLgogICAgICAgICAgICBteSAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkSVRTTUNvbmZpZ0l0ZW0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGNyZWF0ZWQgLSBJRCAkQ29uZmlnSXRlbUlEIgogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkQ29uZmlnSXRlbUlEOwoKICAgICAgICAgICAgIyBBZGQgYSBuZXcgdmVyc2lvbi4KICAgICAgICAgICAgbXkgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdTZWxlbml1bVRlc3QnLAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+IDEsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUlELAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgICAgICAgICAiVmVyc2lvbiBpcyBjcmVhdGVkIC0gSUQgJFZlcnNpb25JRCIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAVmVyc2lvbklEcywgJFZlcnNpb25JRDsKCiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHNlcnZpY2UuCiAgICAgICAgbXkgJFNlcnZpY2VOYW1lID0gIlNlcnZpY2UiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkU2VydmljZUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlQWRkKAogICAgICAgICAgICBOYW1lICAgICAgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgID0+ICdTZWxlbml1bSBUZXN0IFNlcnZpY2UnLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICJTZXJ2aWNlIGlzIGNyZWF0ZWQgLSBJRCAkU2VydmljZUlEIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdGlja2V0LgogICAgICAgIG15ICRUaWNrZXROdW1iZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGVOdW1iZXIoKTsKICAgICAgICBteSAkVGlja2V0SUQgICAgID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICBUTiAgICAgICAgICAgPT4gJFRpY2tldE51bWJlciwKICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdTZWxlbml1bVRlc3RUaWNrZXQnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgICAgICAgICAgQ3VzdG9tZXJJRCAgID0+ICcxMjM0NjUnLAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgICAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRUaWNrZXRJRCwKICAgICAgICAgICAgIlRpY2tldCBpcyBjcmVhdGVkIC0gSUQgJFRpY2tldElEIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4uCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2l0c20tY29uZmlnaXRlbScsICdpdHNtLXNlcnZpY2UnIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20gc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JENvbmZpZ0l0ZW1JRHNbMF07VmVyc2lvbj0kVmVyc2lvbklEc1swXSIKICAgICAgICApOwoKICAgICAgICAjIENsaWNrIG9uICdMaW5rJyBtZW51LgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1JVFNNQ29uZmlnSXRlbTtTb3VyY2VLZXk9JENvbmZpZ0l0ZW1JRHNbMF1cJyApXSIKICAgICAgICApLT5jbGljaygpOwoKICAgICAgICAjIFN3aXRjaCB0byAnTGluaycgd2luZG93LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZihDb3JlKSA9PSAib2JqZWN0IiAmJiB0eXBlb2YoQ29yZS5BcHApID09ICJvYmplY3QiICYmIENvcmUuQXBwLlBhZ2VMb2FkQ29tcGxldGUnCiAgICAgICAgKTsKCiAgICAgICAgIyBTZWxlY3QgdG8gbGluayB3aXRoIHRlc3QgSGFyZHdhcmUgQ29uZmlnSXRlbS4KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNUYXJnZXRJZGVudGlmaWVyJykudmFsKCdJVFNNQ29uZmlnSXRlbTo6JENvbmZpZ0l0ZW1DbGFzc0lEc1sxXScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CgogICAgICAgIHNsZWVwIDI7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNTRUFSQ0hcXFxcOlxcXFw6TnVtYmVyIikubGVuZ3RoOycKICAgICAgICApOwoKICAgICAgICAjIENoZWNrICdMaW5rJyBzY3JlZW4gZm9yIHR3byBDb25maWdJdGVtcy4KICAgICAgICBmb3IgbXkgJElEICgKICAgICAgICAgICAgcXcoVGFyZ2V0SWRlbnRpZmllciBTdWJtaXRTZWFyY2gpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjJElEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgIyBTZWFyY2ggQ29uZmlnSXRlbSBieSBpdHMgbnVtYmVyIGFuZCBzZWxlY3QgcmVzdWx0LgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAaWQ9J1NFQVJDSDo6TnVtYmVyJ10iKS0+c2VuZF9rZXlzKCAkQ29uZmlnSXRlbU51bWJlcnNbMV0gKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXRTZWFyY2giLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI0xpbmtUYXJnZXRLZXlzJywgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICBzbGVlcCAxOwoKICAgICAgICAjIFNlbGVjdCAnQWx0ZXJuYXRpdmVUbycgbGluayB0eXBlLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQGlkPSdBZGRMaW5rcyddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBTZWxlY3QgdG8gbGluayB3aXRoIHRlc3QgU2VydmljZS4KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNUYXJnZXRJZGVudGlmaWVyJykudmFsKCdTZXJ2aWNlJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKCiAgICAgICAgc2xlZXAgMjsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI1NFQVJDSFxcXFw6XFxcXDpOYW1lIikubGVuZ3RoOycKICAgICAgICApOwoKICAgICAgICAjIFNlYXJjaCBTZXJ2aWNlIGJ5IG5hbWUgYW5kIHNlbGVjdCByZXN1bHQuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBpZD0nU0VBUkNIOjpOYW1lJ10iKS0+c2VuZF9rZXlzKCRTZXJ2aWNlTmFtZSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0U2VhcmNoIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAaWQ9J0xpbmtUYXJnZXRLZXlzJ11bXEB2YWx1ZT0nJFNlcnZpY2VJRCddIiktPmNsaWNrKCk7CgogICAgICAgICMgU2VsZWN0ICdSZWxldmFudCB0bycgbGluayB0eXBlLgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1R5cGVJZGVudGlmaWVyJykudmFsKCdSZWxldmFudFRvOjpTb3VyY2UnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQGlkPSdBZGRMaW5rcyddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBTZWxlY3QgdG8gbGluayB3aXRoIHRlc3QgVGlja2V0LgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1RhcmdldElkZW50aWZpZXInKS52YWwoJ1RpY2tldCcpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CgogICAgICAgIHNsZWVwIDI7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNTRUFSQ0hcXFxcOlxcXFw6VGlja2V0TnVtYmVyIikubGVuZ3RoOycKICAgICAgICApOwoKICAgICAgICAjIFNlYXJjaCBUaWNrZXQgYnkgbnVtYmVyIGFuZCBzZWxlY3QgcmVzdWx0LgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAaWQ9J1NFQVJDSDo6VGlja2V0TnVtYmVyJ10iKS0+c2VuZF9rZXlzKCRUaWNrZXROdW1iZXIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdFNlYXJjaCIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBpZD0nTGlua1RhcmdldEtleXMnXVtcQHZhbHVlPSckVGlja2V0SUQnXSIpLT5jbGljaygpOwoKICAgICAgICAjIFNlbGVjdCAnRGVwZW5kcyB0bycgbGluayB0eXBlLgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1R5cGVJZGVudGlmaWVyJykudmFsKCdEZXBlbmRzT246OlNvdXJjZScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAaWQ9J0FkZExpbmtzJ10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENsb3NlIGxpbmsgd2luZG93LCByZXR1cm4gdG8gWm9vbSB2aWV3IGFuZCByZWZyZXNoIHBhZ2UuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTGlua0FkZENsb3NlTGluayIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CgogICAgICAgICMgQ2hlY2sgZm9yIGxpbmtlZCB2YWx1ZXMgaW4gQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20gc2NyZWVuLgogICAgICAgIGZvciBteSAkQ2hlY2tWYWx1ZXMgKCAkQ29uZmlnSXRlbU51bWJlcnNbMV0sICRTZXJ2aWNlTmFtZSwgJFRpY2tldE51bWJlciApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENoZWNrVmFsdWVzICkgPiAtMSwKICAgICAgICAgICAgICAgICJMaW5rZWQgdmFsdWUgJENoZWNrVmFsdWVzIC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDbGljayBvbiAnTGluaycgbWVudSBhbmQgc3dpdGNoIHdpbmRvdy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50TGlua09iamVjdDtTb3VyY2VPYmplY3Q9SVRTTUNvbmZpZ0l0ZW07U291cmNlS2V5PSRDb25maWdJdGVtSURzWzBdXCcgKV0iCiAgICAgICAgKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIFdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKENvcmUpID09ICJvYmplY3QiICYmIHR5cGVvZihDb3JlLkFwcCkgPT0gIm9iamVjdCIgJiYgQ29yZS5BcHAuUGFnZUxvYWRDb21wbGV0ZScKICAgICAgICApOwoKICAgICAgICAjIENsaWNrICdnbyB0byBtYW5hZ2UgbGlua3Mgc2NyZWVuJy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCcjTWFuYWdlTGlua3NcJyApXSIpLT5jbGljaygpOwoKICAgICAgICAjIFdhaXQgZm9yIHRoZSBtYW5hZ2UgbGlua3MgdGFiIHRvIHNob3cgdXAuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCJkaXZbZGF0YS1pZD1NYW5hZ2VMaW5rc106dmlzaWJsZSIpLmxlbmd0aCAmJiBwYXJzZUludCgkKCJkaXZbZGF0YS1pZD1NYW5hZ2VMaW5rc10iKS5jc3MoIm9wYWNpdHkiKSwgMTApID09IDEnCiAgICAgICAgKTsKCiAgICAgICAgIyBTZWxlY3QgYWxsIGxpbmtlZCBpdGVtcyBhbmQgZGVsZXRlIGxpbmtzLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAdmFsdWU9J0lUU01Db25maWdJdGVtOjokQ29uZmlnSXRlbUlEc1sxXTo6QWx0ZXJuYXRpdmVUbyddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdGl0bGU9J0RlbGV0ZSBsaW5rcyddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEB2YWx1ZT0nU2VydmljZTo6JFNlcnZpY2VJRFw6OlJlbGV2YW50VG8nXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHRpdGxlPSdEZWxldGUgbGlua3MnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAdmFsdWU9J1RpY2tldDo6JFRpY2tldElEXDo6RGVwZW5kc09uJ10iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB0aXRsZT0nRGVsZXRlIGxpbmtzJ10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENsb3NlIGxpbmsgd2luZG93LCByZXR1cm4gdG8gWm9vbSB2aWV3IGFuZCByZWZyZXNoIHBhZ2UuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTGlua0FkZENsb3NlTGluayIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CgogICAgICAgICMgQ2hlY2sgZm9yIG5vIGxpbmtlZCB2YWx1ZXMgaW4gQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20gc2NyZWVuLgogICAgICAgIGZvciBteSAkQ2hlY2tWYWx1ZXMgKCAkQ29uZmlnSXRlbU51bWJlcnNbMV0sICRTZXJ2aWNlTmFtZSwgJFRpY2tldE51bWJlciApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENoZWNrVmFsdWVzICkgPT0gLTEsCiAgICAgICAgICAgICAgICAiTGlua2VkIHZhbHVlICRDaGVja1ZhbHVlcyAtIG5vdCBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIERlbGV0ZSB0ZXN0IFRpY2tldC4KICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiVGlja2V0IGlzIGRlbGV0ZWQgLSBJRCAkVGlja2V0SUQgIgogICAgICAgICk7CgogICAgICAgICMgRGVsZXRlIHRlc3QgQ29uZmlnSXRlbS4KICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1EZWxldGUgKEBDb25maWdJdGVtSURzKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1EZWxldGUoCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1EZWxldGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGRlbGV0ZWQgLSBJRCAkQ29uZmlnSXRlbURlbGV0ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBEZWxldGUgdGVzdCBzZXJ2aWNlIGFuZCBpdHMgcHJlZmVyZW5jZXMuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBwcmVmZXJlbmNlcyBpcyBkZWxldGVkIiwKICAgICAgICApOwogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTZXJ2aWNlIGlzIGRlbGV0ZWQgLSBJRCAkU2VydmljZUlEIiwKICAgICAgICApOwogICAgfQopOwoKMTsK
LS0tCkRlYnVnZ2VyOgogIERlYnVnVGhyZXNob2xkOiBkZWJ1ZwogIFRlc3RNb2RlOiAwCkRlc2NyaXB0aW9uOiBJVFNNIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCBDb25uZWN0b3IgU2FtcGxlCkZyYW1ld29ya1ZlcnNpb246IDUuMC54IGdpdApQcm92aWRlcjoKICBPcGVyYXRpb246CiAgICBDb25maWdJdGVtQ3JlYXRlOgogICAgICBEZXNjcmlwdGlvbjogQ3JlYXRlcyBuZXcgQ29uZmlndXJhdGlvbiBJdGVtcyBmcm9tIElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudAogICAgICBNYXBwaW5nSW5ib3VuZDoge30KICAgICAgTWFwcGluZ091dGJvdW5kOiB7fQogICAgICBUeXBlOiBDb25maWdJdGVtOjpDb25maWdJdGVtQ3JlYXRlCiAgICBDb25maWdJdGVtRGVsZXRlOgogICAgICBEZXNjcmlwdGlvbjogRGVsZXRlcyBDb25maWd1cmF0aW9uIEl0ZW1zIGZyb20gSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50CiAgICAgIE1hcHBpbmdJbmJvdW5kOiB7fQogICAgICBNYXBwaW5nT3V0Ym91bmQ6IHt9CiAgICAgIFR5cGU6IENvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1EZWxldGUKICAgIENvbmZpZ0l0ZW1HZXQ6CiAgICAgIERlc2NyaXB0aW9uOiBHZXQgdGhlIGRldGFpbHMgZm9yIENvbmZpZ3VyYXRpb24gSXRlbXMgZnJvbSBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQKICAgICAgTWFwcGluZ0luYm91bmQ6IHt9CiAgICAgIE1hcHBpbmdPdXRib3VuZDoge30KICAgICAgVHlwZTogQ29uZmlnSXRlbTo6Q29uZmlnSXRlbUdldAogICAgQ29uZmlnSXRlbVNlYXJjaDoKICAgICAgRGVzY3JpcHRpb246IFNlYXJjaCBDb25maWd1cmF0aW9uIEl0ZW1zIGZyb20gSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50CiAgICAgIE1hcHBpbmdJbmJvdW5kOiB7fQogICAgICBNYXBwaW5nT3V0Ym91bmQ6IHt9CiAgICAgIFR5cGU6IENvbmZpZ0l0ZW06OkNvbmZpZ0l0ZW1TZWFyY2gKICAgIENvbmZpZ0l0ZW1VcGRhdGU6CiAgICAgIERlc2NyaXB0aW9uOiBVcGRhdGVzIENvbmZpZ3VyYXRpb24gSXRlbXMgZnJvbSBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQKICAgICAgTWFwcGluZ0luYm91bmQ6IHt9CiAgICAgIE1hcHBpbmdPdXRib3VuZDoge30KICAgICAgVHlwZTogQ29uZmlnSXRlbTo6Q29uZmlnSXRlbVVwZGF0ZQogIFRyYW5zcG9ydDoKICAgIENvbmZpZzoKICAgICAgTWF4TGVuZ3RoOiAxMDAwMDAwMDAKICAgICAgTmFtZVNwYWNlOiBodHRwOi8vd3d3Lm90cnMub3JnL0NvbmZpZ0l0ZW1Db25uZWN0b3IKICAgICAgUmVxdWVzdE5hbWVGcmVlVGV4dDogJycKICAgICAgUmVxdWVzdE5hbWVTY2hlbWU6IFBsYWluCiAgICAgIFJlc3BvbnNlTmFtZUZyZWVUZXh0OiAnJwogICAgICBSZXNwb25zZU5hbWVTY2hlbWU6IFJlc3BvbnNlCiAgICBUeXBlOiBIVFRQOjpTT0FQClJlbW90ZVN5c3RlbTogJycKUmVxdWVzdGVyOgogIFRyYW5zcG9ydDoKICAgIFR5cGU6ICcnCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgcXcoJFNlbGYpOwoKIyBydW4gdGhpcyB0ZXN0IG9ubHkgaWYgdGhlIEltcG9ydEV4cG9ydCBwYWNrYWdlIGlzIGluc3RhbGxlZAp7CiAgICAjIGdldCBJbXBvcnRFeHBvcnQgbW9kdWxlIGRpcmVjdG9yeQogICAgbXkgJEltcG9ydEV4cG9ydE1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpIC4gJy9LZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC5wbSc7CgogICAgIyBSZXR1cm4gZWFybHkgaWYgSW1wb3J0RXhwb3J0IHBhY2thZ2UgaXMgbm90IGluc3RhbGxlZC4KICAgIGlmICggIS1lICRJbXBvcnRFeHBvcnRNb2R1bGUgKSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAnSW1wb3J0RXhwb3J0IHBhY2thZ2Ugbm90IGluc3RhbGxlZCcKICAgICAgICApOwoKICAgICAgICByZXR1cm4gMTsKICAgIH0KfQoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7Cm15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwpteSAkSW1wb3J0RXhwb3J0T2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7Cm15ICRPYmplY3RCYWNrZW5kT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OklUU01Db25maWdJdGVtJyk7Cm15ICRYTUxPYmplY3QgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpYTUwnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZQpteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgYWRkIHNvbWUgdGVzdCB0ZW1wbGF0ZXMgZm9yIGxhdGVyIGNoZWNrcwpteSBAVGVtcGxhdGVJRHM7Cm15ICRDb3VudGVyID0gMDsKZm9yICggMSAuLiAzMCApIHsKCiAgICAjIGFkZCBhIHRlc3QgdGVtcGxhdGUgZm9yIGxhdGVyIGNoZWNrcwogICAgbXkgJFRlbXBsYXRlSUQgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUFkZCgKICAgICAgICBPYmplY3QgID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgRm9ybWF0ICA9PiAnVW5pdFRlc3QnIC4gJENvdW50ZXIgLiAkUmFuZG9tSUQsCiAgICAgICAgTmFtZSAgICA9PiAnVW5pdFRlc3QnIC4gJENvdW50ZXIgLiAkUmFuZG9tSUQsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgcHVzaCBAVGVtcGxhdGVJRHMsICRUZW1wbGF0ZUlEOwoKICAgICRDb3VudGVyKys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBPYmplY3RMaXN0IHRlc3QgMSAoY2hlY2sgQ1NWIGl0ZW0pCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IG9iamVjdCBsaXN0Cm15ICRPYmplY3RMaXN0MSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCiMgY2hlY2sgb2JqZWN0IGxpc3QKJFNlbGYtPlRydWUoCiAgICAkT2JqZWN0TGlzdDEgJiYgcmVmICRPYmplY3RMaXN0MSBlcSAnSEFTSCcgJiYgJE9iamVjdExpc3QxLT57SVRTTUNvbmZpZ0l0ZW19LAogICAgIk9iamVjdExpc3QoKSAtIElUU01Db25maWdJdGVtIGV4aXN0cyIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgT2JqZWN0QXR0cmlidXRlc0dldCB0ZXN0IDEgKGNoZWNrIGF0dHJpYnV0ZSBoYXNoKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CgogICAgIyBnZXQgb2JqZWN0IGF0dHJpYnV0ZXMKICAgIG15ICRPYmplY3RBdHRyaWJ1dGVzR2V0MSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMF0sCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIG9iamVjdCBhdHRyaWJ1dGUgcmVmZXJlbmNlCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkT2JqZWN0QXR0cmlidXRlc0dldDEgJiYgcmVmICRPYmplY3RBdHRyaWJ1dGVzR2V0MSBlcSAnQVJSQVknLAogICAgICAgICJPYmplY3RBdHRyaWJ1dGVzR2V0KCkgLSBjaGVjayBhcnJheSByZWZlcmVuY2UiLAogICAgKTsKCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIGRlZmluZSB0aGUgcmVmZXJlbmNlIGhhc2gKICAgIG15ICRPYmplY3RBdHRyaWJ1dGVzR2V0MVJlZmVyZW5jZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDbGFzc0lEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0NsYXNzJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRDbGFzc0xpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDb3VudE1heCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdNYXhpbXVtIG51bWJlciBvZiBvbmUgZWxlbWVudCcsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBWYWx1ZURlZmF1bHQgPT4gJzEwJywKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAxLAogICAgICAgICAgICAgICAgUmVnZXggICAgICAgID0+IHFyeyBcQSBcZCsgXHogfXhtcywKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDUsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggICAgPT4gNSwKICAgICAgICAgICAgICAgIERhdGFUeXBlICAgICA9PiAnSW50ZWdlckJpZ2dlclRoYW5aZXJvJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgJ0lucHV0JyA9PiB7CiAgICAgICAgICAgICAgICAnVHlwZScgPT4gJ0NoZWNrYm94JwogICAgICAgICAgICB9LAogICAgICAgICAgICAnTmFtZScgPT4gJ0VtcHR5IGZpZWxkcyBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcyBhcmUga2VwdCcsCiAgICAgICAgICAgICdLZXknICA9PiAnRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcycsCiAgICAgICAgfQogICAgXTsKCiAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgJE9iamVjdEF0dHJpYnV0ZXNHZXQxLAogICAgICAgICRPYmplY3RBdHRyaWJ1dGVzR2V0MVJlZmVyZW5jZSwKICAgICAgICAiT2JqZWN0QXR0cmlidXRlc0dldCgpIC0gYXR0cmlidXRlcyBvZiB0aGUgcm93IGFyZSBpZGVudGljYWwiLAogICAgKTsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIE9iamVjdEF0dHJpYnV0ZXNHZXQgdGVzdCAyIChjaGVjayB3aXRoIG5vbiBleGlzdGluZyB0ZW1wbGF0ZSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgb2JqZWN0IGF0dHJpYnV0ZXMKbXkgJE9iamVjdEF0dHJpYnV0ZXNHZXQyID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0QXR0cmlidXRlc0dldCgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWy0xXSArIDEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIGNoZWNrIGZhbHNlIHJldHVybgokU2VsZi0+RmFsc2UoCiAgICAkT2JqZWN0QXR0cmlidXRlc0dldDIsCiAgICAiT2JqZWN0QXR0cmlidXRlc0dldCgpIC0gY2hlY2sgZmFsc2UgcmV0dXJuIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCB0ZXN0IDEgKGNoZWNrIGF0dHJpYnV0ZSBoYXNoKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCBtYXBwaW5nIG9iamVjdCBhdHRyaWJ1dGVzCm15ICRNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldDEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzBdLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBjaGVjayBtYXBwaW5nIG9iamVjdCBhdHRyaWJ1dGUgcmVmZXJlbmNlCiRTZWxmLT5UcnVlKAogICAgJE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0MSAmJiByZWYgJE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0MSBlcSAnQVJSQVknLAogICAgIk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KCkgLSBjaGVjayBhcnJheSByZWZlcmVuY2UiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0IHRlc3QgMiAoY2hlY2sgd2l0aCBub24gZXhpc3RpbmcgdGVtcGxhdGUpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IG1hcHBpbmcgb2JqZWN0IGF0dHJpYnV0ZXMKbXkgJE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0MiA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbLTFdICsgMSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgY2hlY2sgZmFsc2UgcmV0dXJuCiRTZWxmLT5GYWxzZSgKICAgICRNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldDIsCiAgICAiTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQoKSAtIGNoZWNrIGZhbHNlIHJldHVybiIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMgdG8gdGVzdCBFeHBvcnREYXRhR2V0KCkgYW5kIEltcG9ydERhdGFTYXZlKCkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEdlbmVyYWxDYXRhbG9nQ2xhc3MgPSAnVW5pdFRlc3QnIC4gJFJhbmRvbUlEOwoKIyBhZGQgYSBnZW5lcmFsIGNhdGFsb2cgdGVzdCBsaXN0CmZvciBteSAkTmFtZSAocXcoVGVzdDEgVGVzdDIgVGVzdDMgVGVzdDQpKSB7CgogICAgIyBhZGQgYSBuZXcgaXRlbQogICAgbXkgJEl0ZW1JRCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUFkZCgKICAgICAgICBDbGFzcyAgID0+ICRHZW5lcmFsQ2F0YWxvZ0NsYXNzLAogICAgICAgIE5hbWUgICAgPT4gJE5hbWUsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBpdGVtIGlkCiAgICBpZiAoICEkSXRlbUlEICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIkNhbid0IGFkZCBuZXcgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0uIiwKICAgICAgICApOwogICAgfQp9CgojIGRlZmluZSB0aGUgZmlyc3QgdGVzdCBkZWZpbml0aW9uIChhbGwgcHJvdmlkZWQgZGF0YSB0eXBlcykKbXkgQENvbmZpZ0l0ZW1QZXJsRGVmaW5pdGlvbnM7CiRDb25maWdJdGVtUGVybERlZmluaXRpb25zWzBdID0gIiBbCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnQ3VzdG9tZXIxJywKICAgICAgICBOYW1lICAgICAgID0+ICdDdXN0b21lciAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0N1c3RvbWVyJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdEYXRlMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnRGF0ZSAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0RhdGUnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0RhdGVUaW1lMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnRGF0ZSBUaW1lIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnRGF0ZVRpbWUnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgID0+ICdEdW1teTEnLAogICAgICAgIE5hbWUgID0+ICdEdW1teSAxJywKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0R1bW15JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdHZW5lcmFsQ2F0YWxvZzEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0dlbmVyYWxDYXRhbG9nIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSAgPT4gJ0dlbmVyYWxDYXRhbG9nJywKICAgICAgICAgICAgQ2xhc3MgPT4gJyRHZW5lcmFsQ2F0YWxvZ0NsYXNzJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdJbnRlZ2VyMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnSW50ZWdlciAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0ludGVnZXInLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ1RleHQxJywKICAgICAgICBOYW1lICAgICAgID0+ICdUZXh0IDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnVGV4dEFyZWExJywKICAgICAgICBOYW1lICAgICAgID0+ICdUZXh0QXJlYSAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHRBcmVhJywKICAgICAgICB9LAogICAgfSwKXSAiOwoKIyBkZWZpbmUgdGhlIHNlY29uZCB0ZXN0IGRlZmluaXRpb24gKHN1YiBkYXRhIHR5cGVzKQokQ29uZmlnSXRlbVBlcmxEZWZpbml0aW9uc1sxXSA9ICIgWwogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ01haW4xJywKICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICBTdWIgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMVN1YjEnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAxIFN1YiAxJywKICAgICAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICAgICAgICAgIFN1YiA9PiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMVN1YjFTdWJTdWIxJywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAxIFN1YiAxIFN1YlN1YiAxJywKICAgICAgICAgICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMVN1YjFTdWJTdWIyJywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAxIFN1YiAxIFN1YlN1YiAyJywKICAgICAgICAgICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RleHRBcmVhJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ01haW4xU3ViMicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDEgU3ViIDInLAogICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ01haW4yJywKICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDInLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgIH0sCiAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgU3ViID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTWFpbjJTdWIxJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ01haW4gMiBTdWIgMScsCiAgICAgICAgICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ01haW4yU3ViMicsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDIgU3ViIDInLAogICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LApdICI7CgojIERlZmluZSB0aGUgdGhpcmQgdGVzdCBkZWZpbml0aW9uIHdpdGggcmVxdWlyZWQgYXR0cmlidXRlICdUeXBlJy4KJENvbmZpZ0l0ZW1QZXJsRGVmaW5pdGlvbnNbMl0gPSAiIFsKICAgIHsKICAgICAgICAnS2V5JyA9PiAnVHlwZScsCiAgICAgICAgJ0lucHV0JyA9PiB7CiAgICAgICAgICAgICdDbGFzcycgPT4gJyRHZW5lcmFsQ2F0YWxvZ0NsYXNzJywKICAgICAgICAgICAgJ1JlcXVpcmVkJyA9PiAxLAogICAgICAgICAgICAnVHJhbnNsYXRpb24nID0+IDEsCiAgICAgICAgICAgICdUeXBlJyA9PiAnR2VuZXJhbENhdGFsb2cnCiAgICAgICAgfSwKICAgICAgICAnU2VhcmNoYWJsZScgPT4gMSwKICAgICAgICAnQ291bnRNaW4nID0+IDEsCiAgICAgICAgJ0NvdW50RGVmYXVsdCcgPT4gMSwKICAgICAgICAnQ291bnRNYXgnID0+IDMsCiAgICAgICAgJ05hbWUnID0+ICdUeXBlJywKICAgIH0sCl0gIjsKCm15ICRZQU1MT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OllBTUwnKTsKCm15IEBDb25maWdJdGVtRGVmaW5pdGlvbnM7CmZvciBteSAkUGVybERlZmluaXRpb24gKEBDb25maWdJdGVtUGVybERlZmluaXRpb25zKSB7CiAgICBteSAkWUFNTERlZmluaXRpb24gPSAkWUFNTE9iamVjdC0+RHVtcCgKICAgICAgICBEYXRhID0+IGV2YWwgJFBlcmxEZWZpbml0aW9uLCAgICAjIyBubyBjcml0aWMKICAgICk7CiAgICBwdXNoIEBDb25maWdJdGVtRGVmaW5pdGlvbnMsICRZQU1MRGVmaW5pdGlvbjsKfQoKIyBhZGQgdGhlIHRlc3QgY2xhc3NlcwpteSBAQ29uZmlnSXRlbUNsYXNzSURzOwpteSBAQ29uZmlnSXRlbURlZmluaXRpb25JRHM7CmZvciBteSAkRGVmaW5pdGlvbiAoQENvbmZpZ0l0ZW1EZWZpbml0aW9ucykgewoKICAgICMgZ2VuZXJhdGUgYSByYW5kb20gbmFtZQogICAgbXkgJENsYXNzTmFtZSA9ICdVbml0VGVzdCcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKICAgICMgYWRkIGFuIHVuaXR0ZXN0IGNvbmZpZyBpdGVtIGNsYXNzCiAgICBteSAkQ2xhc3NJRCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUFkZCgKICAgICAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgTmFtZSAgICA9PiAkQ2xhc3NOYW1lLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgY2xhc3MgaWQKICAgIGlmICggISRDbGFzc0lEICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIkNhbid0IGFkZCBuZXcgY29uZmlnIGl0ZW0gY2xhc3MuIiwKICAgICAgICApOwogICAgfQoKICAgIHB1c2ggQENvbmZpZ0l0ZW1DbGFzc0lEcywgJENsYXNzSUQ7CgogICAgIyBhZGQgYSBkZWZpbml0aW9uIHRvIHRoZSBjbGFzcwogICAgbXkgJERlZmluaXRpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uQWRkKAogICAgICAgIENsYXNzSUQgICAgPT4gJENsYXNzSUQsCiAgICAgICAgRGVmaW5pdGlvbiA9PiAkRGVmaW5pdGlvbiwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgZGVmaW5pdGlvbiBpZAogICAgaWYgKCAhJERlZmluaXRpb25JRCApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IGNvbmZpZyBpdGVtIGRlZmluaXRpb24uIiwKICAgICAgICApOwogICAgfQoKICAgIHB1c2ggQENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzLCAkRGVmaW5pdGlvbklEOwp9CgojIGNyZWF0ZSBzb21lIHJhbmRvbSBudW1iZXJzCm15IEBDb25maWdJdGVtTnVtYmVyczsKZm9yICggMSAuLiAxMCApIHsKICAgIHB1c2ggQENvbmZpZ0l0ZW1OdW1iZXJzLCAkSGVscGVyLT5HZXRSYW5kb21OdW1iZXIoKTsKfQoKIyBnZXQgZGVwbG95bWVudCBzdGF0ZSBsaXN0Cm15ICREZXBsU3RhdGVMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAopOwpteSAlRGVwbFN0YXRlTGlzdFJldmVyc2UgPSByZXZlcnNlICV7JERlcGxTdGF0ZUxpc3R9OwoKIyBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdApteSAkSW5jaVN0YXRlTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCik7Cm15ICVJbmNpU3RhdGVMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskSW5jaVN0YXRlTGlzdH07CgojIGdldCBnZW5lcmFsIGNhdGFsb2cgdGVzdCBsaXN0Cm15ICRHZW5lcmFsQ2F0YWxvZ0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJEdlbmVyYWxDYXRhbG9nQ2xhc3MsCik7Cm15ICVHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyRHZW5lcmFsQ2F0YWxvZ0xpc3R9OwoKIyBkZWZpbmUgdGhlIHRlc3QgY29uZmlnIGl0ZW1zCm15IEBDb25maWdJdGVtcyA9ICgKCiAgICAjIGNvbmZpZyBpdGVtIGZvciBhbGwgcHJvdmlkZWQgZGF0YSB0eXBlcwogICAgewogICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBWZXJzaW9ucyA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lcjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMi0wMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMi0wMSAwMzo1OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmFsQ2F0YWxvZzEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1Rlc3QgVGV4dCBUZXN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBcmVhMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICJUZXN0XG5UZXh0IEFycmF5XG5UZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYSBzZWNvbmQgY29uZmlnIGl0ZW0gZm9yIGFsbCBwcm92aWRlZCBkYXRhIHR5cGVzCiAgICAjIChkdXBsaWNhdGUgbmFtZSBvZiBmaXJzdCB2ZXJzaW9uIGZvciBzZWFyY2ggY2hlY2tzKQogICAgewogICAgICAgIENvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1sxXSwKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBWZXJzaW9ucyA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywgICAgIyBkdXBsaWNhdGUgbmFtZSBmb3IgdGVzdHMKICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lcjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMi0wMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMi0wMSAwMzo1OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmFsQ2F0YWxvZzEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1Rlc3QgVGV4dCBUZXN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBcmVhMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICJUZXN0XG5UZXh0IEFycmF5XG5UZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAyIFZlcnNpb24gMicsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1VuaXRUZXN0MicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA4LTAyLTAyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA4LTAyLTAyIDAzOjU5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWxDYXRhbG9nMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dDEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVGVzdCBUZXh0IFRlc3QyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBcmVhMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICJUZXN0MlxuVGV4dCBBcnJheVxuVGVzdCAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAoKICAgICMgY29uZmlnIGl0ZW0gZm9yIHN1YiBlbGVtZW50IHRlc3RzCiAgICB7CiAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzJdLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMV0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFZlcnNpb25zID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1sxXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnTWFpbjEgKDEpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICdNYWluMSAoMSkgU3ViMSAoMSknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgyKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgzKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICdNYWluMSAoMSkgU3ViMSAoMiknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIyICgyKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjFTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ01haW4xICgxKSBTdWIyICgyKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ01haW4yICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMlN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnTWFpbjIgKDEpIFN1YjEgKDEpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4yU3ViMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudCcgPT4gJ01haW4yICgxKSBTdWIyICgxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50JyA9PiAnTWFpbjIgKDEpIFN1YjIgKDIpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAoKICAgICMgY29uZmlnIGl0ZW0gZm9yIHN1YiBlbGVtZW50IHRlc3RzCiAgICB7CiAgICAgICAgQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzNdLAogICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMV0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFZlcnNpb25zID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gNCBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1sxXSwKICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIxID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjFTdWJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjFTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMlN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4yU3ViMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBjb25maWcgaXRlbSBmb3Igc3BlY2lhbCBjaGFyYWN0ZXIgdGVzdHMKICAgIHsKICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNF0sCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVmVyc2lvbnMgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSA1IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzFdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICciIjs7OjouLi0tX18jIycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMVN1YlN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMVN1YlN1YjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJyIiOzs6Oi4uLS1fXyMjJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4yU3ViMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdUZXN0IFRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gIlRlc3RcblRlc3RcdFRlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBjb25maWcgaXRlbSBmb3IgVVRGLTggdGVzdHMKICAgIHsKICAgICAgICBDb25maWdJdGVtID0+IHsKICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNV0sCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVmVyc2lvbnMgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSA2IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzFdLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICfihoIg4oW7IOKFmycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAn4piEIOKGriDihrkg4oaSJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjFTdWIxU3ViU3ViMSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICfigqQg4oKhIOKCqSDigq8g4oK1JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4xU3ViMVN1YlN1YjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAn4pmKIOKZiCDimYkg4pmKIOKZiyDimY0g4pmRJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMVN1YjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAn4pyIIOKdpCDimK4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICfViiDVhCDVgCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluMlN1YjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnwq4gwqknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbjJTdWIyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ+OBiyDjgZIg44KSJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9LAopOwoKIyBhZGQgdGhlIHRlc3QgY29uZmlnIGl0ZW1zCm15IEBDb25maWdJdGVtSURzOwpmb3IgbXkgJENvbmZpZ0l0ZW0gKEBDb25maWdJdGVtcykgewoKICAgICMgYWRkIGEgY29uZmlnIGl0ZW0KICAgIG15ICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgICAgICAleyAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW19IH0sCiAgICApOwoKICAgICMgY2hlY2sgY29uZmlnIGl0ZW0gaWQKICAgIGlmICggISRDb25maWdJdGVtSUQgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiQ2FuJ3QgYWRkIG5ldyBjb25maWcgaXRlbS4iLAogICAgICAgICk7CiAgICB9CgogICAgcHVzaCBAQ29uZmlnSXRlbUlEcywgJENvbmZpZ0l0ZW1JRDsKCiAgICAjIGFkZCB0aGUgdmVyc2lvbnMKICAgIGZvciBteSAkVmVyc2lvbiAoIEB7ICRDb25maWdJdGVtLT57VmVyc2lvbnN9IH0gKSB7CgogICAgICAgICMgYWRkIGEgdmVyc2lvbgogICAgICAgIG15ICRWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgICAgICAgICAgJXskVmVyc2lvbn0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgdmVyc2lvbiBpZAogICAgICAgIGlmICggISRWZXJzaW9uSUQgKSB7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAiQ2FuJ3QgYWRkIG5ldyB2ZXJzaW9uLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgRXhwb3J0RGF0YUdldCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSBARXhwb3J0RGF0YVRlc3RzID0gKAoKICAgICMgSW1wb3J0RGF0YUdldCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgSW1wb3J0RGF0YUdldCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgbm8gZXhpc3RpbmcgdGVtcGxhdGUgaWQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1stMV0gKyAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgbm8gY2xhc3MgaWQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1syXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGludmFsaWQgY2xhc3MgaWQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbLTFdICsgMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1syXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG1hcHBpbmcgbGlzdCBpcyBlbXB0eSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1szXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChudW1iZXIgc2VhcmNoIGNoZWNrKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICRDb25maWdJdGVtTnVtYmVyc1swXSBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKG5hbWUgc2VhcmNoIGNoZWNrKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICRDb25maWdJdGVtTnVtYmVyc1swXSBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNhc2UgaW5zZW5zaXRpdmUgbmFtZSBzZWFyY2ggY2hlY2spCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+ICd1bml0dGVzdCAtIGNvbmZpZ2l0ZW0gMSB2ZXJzaW9uIDEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRXhwb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJENvbmZpZ0l0ZW1OdW1iZXJzWzBdIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmFtZSBhbmQgbnVtYmVyIHNlYXJjaCBjaGVjaykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAxIFZlcnNpb24gMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMF0gXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChkZXBsb3ltZW50IHN0YXRlIHNlYXJjaCBjaGVjaykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEcyA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMF0gXSwKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMV0gXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChpbmNpZGVudCBzdGF0ZSBzZWFyY2ggY2hlY2spCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRHMgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICRDb25maWdJdGVtTnVtYmVyc1swXSBdLAogICAgICAgICAgICBbICRDb25maWdJdGVtTnVtYmVyc1sxXSBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNvbWJpbmVkIHNlYXJjaCBjaGVjaykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAxIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRHMgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgSW5jaVN0YXRlSURzID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMF0gXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChYTUwgZGF0YSBzZWFyY2ggY2hlY2spCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEYXRlMSAgICAgICAgICAgPT4gJzIwMDgtMDItMDEnLAogICAgICAgICAgICAgICAgVGV4dEFyZWExICAgICAgID0+ICJUZXN0XG5UZXh0IEFycmF5XG5UZXN0IiwKICAgICAgICAgICAgICAgIEN1c3RvbWVyMSAgICAgICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgVGV4dDEgICAgICAgICAgID0+ICdUZXN0IFRleHQgVGVzdCcsCiAgICAgICAgICAgICAgICBEYXRlVGltZTEgICAgICAgPT4gJzIwMDgtMDItMDEgMDM6NTknLAogICAgICAgICAgICAgICAgSW50ZWdlcjEgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgIEdlbmVyYWxDYXRhbG9nMSA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAkQ29uZmlnSXRlbU51bWJlcnNbMF0gXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjb21iaW5lZCBhbGwgc2VhcmNoIGNoZWNrKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEcyAgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRHMgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIERhdGUxICAgICAgICAgICA9PiAnMjAwOC0wMi0wMScsCiAgICAgICAgICAgICAgICBUZXh0QXJlYTEgICAgICAgPT4gIlRlc3RcblRleHQgQXJyYXlcblRlc3QiLAogICAgICAgICAgICAgICAgQ3VzdG9tZXIxICAgICAgID0+ICdVbml0VGVzdCcsCiAgICAgICAgICAgICAgICBUZXh0MSAgICAgICAgICAgPT4gJ1Rlc3QgVGV4dCBUZXN0JywKICAgICAgICAgICAgICAgIERhdGVUaW1lMSAgICAgICA9PiAnMjAwOC0wMi0wMSAwMzo1OScsCiAgICAgICAgICAgICAgICBJbnRlZ2VyMSAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgR2VuZXJhbENhdGFsb2cxID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QxfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICRDb25maWdJdGVtTnVtYmVyc1swXSBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSByZXR1cm5lZCBhcnJheSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0N1c3RvbWVyMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGF0ZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGVUaW1lMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRHVtbXkxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0ludGVnZXIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dEFyZWExOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s2XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgJzIwMDgtMDItMDEnLAogICAgICAgICAgICAgICAgJzIwMDgtMDItMDEgMDM6NTknLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAnVGVzdDEnLAogICAgICAgICAgICAgICAgJzEnLAogICAgICAgICAgICAgICAgJ1Rlc3QgVGV4dCBUZXN0JywKICAgICAgICAgICAgICAgICJUZXN0XG5UZXh0IEFycmF5XG5UZXN0IiwKICAgICAgICAgICAgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChkb3VibGUgZWxlbWVudCBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdDdXN0b21lcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0N1c3RvbWVyMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGF0ZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlVGltZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGVUaW1lMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRHVtbXkxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEdW1teTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbnRlZ2VyMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW50ZWdlcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dEFyZWExOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0QXJlYTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzZdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRXhwb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAxIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdVbml0VGVzdCcsCiAgICAgICAgICAgICAgICAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgJzIwMDgtMDItMDEnLAogICAgICAgICAgICAgICAgJzIwMDgtMDItMDEnLAogICAgICAgICAgICAgICAgJzIwMDgtMDItMDEgMDM6NTknLAogICAgICAgICAgICAgICAgJzIwMDgtMDItMDEgMDM6NTknLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICdUZXN0MScsCiAgICAgICAgICAgICAgICAnVGVzdDEnLAogICAgICAgICAgICAgICAgJzEnLAogICAgICAgICAgICAgICAgJzEnLAogICAgICAgICAgICAgICAgJ1Rlc3QgVGV4dCBUZXN0JywKICAgICAgICAgICAgICAgICdUZXN0IFRleHQgVGVzdCcsCiAgICAgICAgICAgICAgICAiVGVzdFxuVGV4dCBBcnJheVxuVGVzdCIsCiAgICAgICAgICAgICAgICAiVGVzdFxuVGV4dCBBcnJheVxuVGVzdCIsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3ViIGVsZW1lbnQgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1syXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s3XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbMl0sCiAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDMgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDEpIFN1YlN1YjEgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMSkgU3ViU3ViMSAoMyknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMikgU3ViU3ViMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDIpIFN1YlN1YjIgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIyICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjIgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMiAoMSkgU3ViMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4yICgxKSBTdWIyICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjIgKDEpIFN1YjIgKDIpJywKICAgICAgICAgICAgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChzdWIgZWxlbWVudCBjaGVja3Mgd2l0aCB1bmRlZiB2YWx1ZXMpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6NCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMTo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMjo6MycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjE6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxOjpNYWluMlN1YjI6OjMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1syXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s3XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbMl0sCiAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDMgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgxKSBTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDEpIFN1YlN1YjEgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMSAoMSkgU3ViMSAoMSkgU3ViU3ViMSAoMyknLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDEpIFN1YlN1YjIgKDEpJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDIpIFN1YlN1YjEgKDEpJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIxICgyKSBTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjEgKDIpIFN1YlN1YjIgKDIpJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgJ01haW4xICgxKSBTdWIyICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIFN1YjIgKDIpJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgJ01haW4yICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjIgKDEpIFN1YjEgKDEpJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgJ01haW4yICgxKSBTdWIyICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjIgKDEpIFN1YjIgKDIpJywKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3ViIGVsZW1lbnQgY2hlY2tzIHdpdGggdW5kZWYgdmFsdWVzIGFuZCBlbXB0eSBzdHJpbmdzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjE6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIxOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjozJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbM10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzNdLAogICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSA0IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbOF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VFeHBvcnREYXRhID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzRdLAogICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSA1IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJyIiOzs6Oi4uLS1fXyMjJywKICAgICAgICAgICAgICAgICdUZXN0OzpfwrBeISLCpyQlJi8oKT0/wrRgKitUZXN0JywKICAgICAgICAgICAgICAgICc+PEB+XCd9e1tdXFwnLAogICAgICAgICAgICAgICAgJz48QH5cJ317W11cXCcsCiAgICAgICAgICAgICAgICAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAnIiI7Ozo6Li4tLV9fIyMnLAogICAgICAgICAgICAgICAgJ1Rlc3QgVGVzdCcsCiAgICAgICAgICAgICAgICAiVGVzdFxuVGVzdFx0VGVzdCIsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoVVRGLTggY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1sxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1s1XSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1s5XSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUV4cG9ydERhdGEgPT4gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNV0sCiAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDYgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAn4oaCIOKFuyDihZsnLAogICAgICAgICAgICAgICAgJ+KYhCDihq4g4oa5IOKGkicsCiAgICAgICAgICAgICAgICAn4oKkIOKCoSDigqkg4oKvIOKCtScsCiAgICAgICAgICAgICAgICAn4pmKIOKZiCDimYkg4pmKIOKZiyDimY0g4pmRJywKICAgICAgICAgICAgICAgICfinIgg4p2kIOKYricsCiAgICAgICAgICAgICAgICAn1Yog1YQg1YAnLAogICAgICAgICAgICAgICAgJ8KuIMKpJywKICAgICAgICAgICAgICAgICfjgYsg44GSIOOCkicsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgIH0sCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgcnVuIGdlbmVyYWwgRXhwb3J0RGF0YUdldCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkRXhwb3J0VGVzdENvdW50ID0gMTsKVEVTVDoKZm9yIG15ICRUZXN0IChARXhwb3J0RGF0YVRlc3RzKSB7CgogICAgIyBjaGVjayBTb3VyY2VFeHBvcnREYXRhIGF0dHJpYnV0ZQogICAgaWYgKCAhJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfSB8fCByZWYgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiRXhwb3J0VGVzdCAkRXhwb3J0VGVzdENvdW50OiBObyBTb3VyY2VFeHBvcnREYXRhIGZvdW5kIGZvciB0aGlzIHRlc3QuIgogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICAjIHNldCB0aGUgb2JqZWN0IGRhdGEKICAgIGlmICgKICAgICAgICAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57T2JqZWN0RGF0YX0KICAgICAgICAmJiByZWYgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e09iamVjdERhdGF9IGVxICdIQVNIJwogICAgICAgICYmICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhR2V0fS0+e1RlbXBsYXRlSUR9CiAgICAgICAgKQogICAgewoKICAgICAgICAjIHNhdmUgb2JqZWN0IGRhdGEKICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3REYXRhU2F2ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57T2JqZWN0RGF0YX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IHRoZSBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e01hcHBpbmdPYmplY3REYXRhfQogICAgICAgICYmIHJlZiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57TWFwcGluZ09iamVjdERhdGF9IGVxICdBUlJBWScKICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBkZWxldGUgYWxsIGV4aXN0aW5nIG1hcHBpbmcgZGF0YQogICAgICAgICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e0V4cG9ydERhdGFHZXR9LT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0aGUgbWFwcGluZyBvYmplY3Qgcm93cwogICAgICAgIE1BUFBJTkdPQkpFQ1REQVRBOgogICAgICAgIGZvciBteSAkTWFwcGluZ09iamVjdERhdGEgKCBAeyAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57TWFwcGluZ09iamVjdERhdGF9IH0gKSB7CgogICAgICAgICAgICAjIGFkZCBhIG5ldyBtYXBwaW5nIHJvdwogICAgICAgICAgICBteSAkTWFwcGluZ0lEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0FkZCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e0V4cG9ydERhdGFHZXR9LT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCB0aGUgbWFwcGluZyBvYmplY3QgZGF0YQogICAgICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nT2JqZWN0RGF0YVNhdmUoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgICAgICAgICA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gJE1hcHBpbmdPYmplY3REYXRhLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBhZGQgdGhlIHNlYXJjaCBkYXRhCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e1NlYXJjaERhdGF9CiAgICAgICAgJiYgcmVmICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntTZWFyY2hEYXRhfSBlcSAnSEFTSCcKICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBzYXZlIHNlYXJjaCBkYXRhCiAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoRGF0YVNhdmUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e0V4cG9ydERhdGFHZXR9LT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e1NlYXJjaERhdGF9LAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBleHBvcnQgZGF0YQogICAgbXkgJEV4cG9ydERhdGEgPSAkT2JqZWN0QmFja2VuZE9iamVjdC0+RXhwb3J0RGF0YUdldCgKICAgICAgICAleyAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YUdldH0gfSwKICAgICk7CgogICAgaWYgKCAhJFRlc3QtPntSZWZlcmVuY2VFeHBvcnREYXRhfSApIHsKCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkRXhwb3J0RGF0YSwKICAgICAgICAgICAgIkV4cG9ydFRlc3QgJEV4cG9ydFRlc3RDb3VudDogRXhwb3J0RGF0YUdldCgpIC0gcmV0dXJuIGZhbHNlIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgaWYgKCByZWYgJEV4cG9ydERhdGEgbmUgJ0FSUkFZJyApIHsKCiAgICAgICAgIyBjaGVjayBhcnJheSByZWZlcmVuY2UKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIkV4cG9ydFRlc3QgJEV4cG9ydFRlc3RDb3VudDogRXhwb3J0RGF0YUdldCgpIC0gcmV0dXJuIHZhbHVlIGlzIGFuIGFycmF5IHJlZmVyZW5jZSIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgICMgY2hlY2sgbnVtYmVyIG9mIHJvd3MKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQHskRXhwb3J0RGF0YX0sCiAgICAgICAgc2NhbGFyIEB7ICRUZXN0LT57UmVmZXJlbmNlRXhwb3J0RGF0YX0gfSwKICAgICAgICAiRXhwb3J0VGVzdCAkRXhwb3J0VGVzdENvdW50OiBFeHBvcnREYXRhR2V0KCkgLSBjb3JyZWN0IG51bWJlciBvZiByb3dzIiwKICAgICk7CgogICAgIyBjaGVjayBjb250ZW50IG9mIGV4cG9ydCBkYXRhCiAgICBteSAkQ291bnRlclJvdyA9IDA7CiAgICBST1c6CiAgICBmb3IgbXkgJEV4cG9ydFJvdyAoIEB7JEV4cG9ydERhdGF9ICkgewoKICAgICAgICAjIGV4dHJhY3QgcmVmZXJlbmNlIHJvdwogICAgICAgIG15ICRSZWZlcmVuY2VSb3cgPSAkVGVzdC0+e1JlZmVyZW5jZUV4cG9ydERhdGF9LT5bJENvdW50ZXJSb3ddOwoKICAgICAgICBpZiAoIHJlZiAkRXhwb3J0Um93IG5lICdBUlJBWScgfHwgcmVmICRSZWZlcmVuY2VSb3cgbmUgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICMgY2hlY2sgYXJyYXkgcmVmZXJlbmNlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICJFeHBvcnRUZXN0ICRFeHBvcnRUZXN0Q291bnQ6IEV4cG9ydERhdGFHZXQoKSAtIGV4cG9ydCByb3cgYW5kIHJlZmVyZW5jZSByb3cgbWF0Y2hlZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFRFU1Q7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG51bWJlciBvZiBjb2x1bW5zCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICBzY2FsYXIgQHskRXhwb3J0Um93fSwKICAgICAgICAgICAgc2NhbGFyIEB7JFJlZmVyZW5jZVJvd30sCiAgICAgICAgICAgICJFeHBvcnRUZXN0ICRFeHBvcnRUZXN0Q291bnQ6IEV4cG9ydERhdGFHZXQoKSAtIGNvcnJlY3QgbnVtYmVyIG9mIGNvbHVtbnMiLAogICAgICAgICk7CgogICAgICAgIG15ICRDb3VudGVyQ29sdW1uID0gMDsKICAgICAgICBmb3IgbXkgJENlbGwgKCBAeyRFeHBvcnRSb3d9ICkgewoKICAgICAgICAgICAgIyBzZXQgY29udGVudCBpZiB2YWx1ZXMgYXJlIHVuZGVmCiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJENlbGwgKSB7CiAgICAgICAgICAgICAgICAkQ2VsbCA9ICdVTkRFRi11bml0dGVzdCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkUmVmZXJlbmNlUm93LT5bJENvdW50ZXJDb2x1bW5dICkgewogICAgICAgICAgICAgICAgJFJlZmVyZW5jZVJvdy0+WyRDb3VudGVyQ29sdW1uXSA9ICdVTkRFRi11bml0dGVzdCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgY2VsbCBkYXRhCiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRDZWxsLAogICAgICAgICAgICAgICAgJFJlZmVyZW5jZVJvdy0+WyRDb3VudGVyQ29sdW1uXSwKICAgICAgICAgICAgICAgICJFeHBvcnRUZXN0ICRFeHBvcnRUZXN0Q291bnQ6IEV4cG9ydERhdGFHZXQoKSAiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENvdW50ZXJDb2x1bW4rKzsKICAgICAgICB9CgogICAgICAgICRDb3VudGVyUm93Kys7CiAgICB9Cn0KY29udGludWUgewogICAgJEV4cG9ydFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgSW1wb3J0RGF0YVNhdmUgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgQEltcG9ydERhdGFUZXN0cyA9ICgKCiAgICAjIEltcG9ydERhdGFTYXZlIGRvZXNuJ3QgY29udGFpbnMgYWxsIGRhdGEgKGNoZWNrIHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gW10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBJbXBvcnREYXRhU2F2ZSBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1syMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBJbXBvcnREYXRhU2F2ZSBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMF0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFtdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW1wb3J0IGRhdGEgcm93IG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIwXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gJycsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgZGF0YSByb3cgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjBdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiB7fSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIGV4aXN0aW5nIHRlbXBsYXRlIGlkIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWy0xXSArIDEsCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsnRHVtbXknXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIGNsYXNzIGlkIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIxXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWydEdW1teSddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW52YWxpZCBjbGFzcyBpZCBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1stMV0gKyAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMl0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsnRHVtbXknXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG1hcHBpbmcgbGlzdCBpcyBlbXB0eSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbJ0R1bW15J10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBtb3JlIHRoYW4gb25lIGlkZW50aWZpZXIgd2l0aCB0aGUgc2FtZSBuYW1lIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbICcxMjMnLCAnMzIxJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaWRlbnRpZmllciBpcyBlbXB0eSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbJyddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaWRlbnRpZmllciBpcyB1bmRlZiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbdW5kZWZdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYm90aCBpZGVudGlmaWVycyBhcmUgZW1wdHkgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbICcnLCAnJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYm90aCBpZGVudGlmaWVycyBhcmUgdW5kZWYgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbIHVuZGVmLCB1bmRlZiBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgb25lIGlkZW50aWZpZXJzIGlzIGVtcHR5LCBvbmUgaXMgdW5kZWYgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbICcnLCB1bmRlZiBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgb25lIG9mIHRoZSBpZGVudGlmaWVycyBpcyBlbXB0eSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syM10sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsgJzEyMycsICcnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBvbmUgb2YgdGhlIGlkZW50aWZpZXJzIGlzIHVuZGVmIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWyAnMTIzJywgdW5kZWYgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG9uZSBvZiB0aGUgaWRlbnRpZmllcnMgaXMgZW1wdHkgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjNdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbICcnLCAnMTIzJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgb25lIG9mIHRoZSBpZGVudGlmaWVycyBpcyBlbXB0eSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syM10sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsgdW5kZWYsICcxMjMnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBUT0RPIEFkZCBzb21lIGlkZW50aWZpZXIgdGVzdHMKCiAgICAjIGVtcHR5IG5hbWUgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI0XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWyAnJywgJ1Byb2R1Y3Rpb24nLCAnT3BlcmF0aW9uYWwnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbnZhbGlkIGRlcGxveW1lbnQgc3RhdGUgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI0XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWyAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDEnLCAnRHVtbXknLCAnT3BlcmF0aW9uYWwnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbnZhbGlkIGluY2lkZW50IHN0YXRlIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNF0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCAyJywgJ1Byb2R1Y3Rpb24nLCAnRHVtbXknIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoYSBORVcgY29uZmlnIGl0ZW0gbXVzdCBiZSBjcmVhdGVkKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0N1c3RvbWVyMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGF0ZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGVUaW1lMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbnRlZ2VyMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHRBcmVhMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDMnLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCcsCiAgICAgICAgICAgICAgICAgICAgJzIwMDgtMDYtMDUnLAogICAgICAgICAgICAgICAgICAgICcyMDA4LTA4LTA1IDA0OjUwJywKICAgICAgICAgICAgICAgICAgICAnVGVzdDMnLAogICAgICAgICAgICAgICAgICAgICczJywKICAgICAgICAgICAgICAgICAgICAnVGVzdDMgVGV4dDMgVGVzdDMnLAogICAgICAgICAgICAgICAgICAgICJUZXN0M1xuVGV4dEFycmF5M1xuVGVzdDMiLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gMSwKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDMnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdDdXN0b21lcjE6OjEnICAgICAgID0+ICdVbml0VGVzdCcsCiAgICAgICAgICAgICAgICAnRGF0ZTE6OjEnICAgICAgICAgICA9PiAnMjAwOC0wNi0wNScsCiAgICAgICAgICAgICAgICAnRGF0ZVRpbWUxOjoxJyAgICAgICA9PiAnMjAwOC0wOC0wNSAwNDo1MCcsCiAgICAgICAgICAgICAgICAnR2VuZXJhbENhdGFsb2cxOjoxJyA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0M30sCiAgICAgICAgICAgICAgICAnSW50ZWdlcjE6OjEnICAgICAgICA9PiAnMycsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnVGVzdDMgVGV4dDMgVGVzdDMnLAogICAgICAgICAgICAgICAgJ1RleHRBcmVhMTo6MScgICAgICAgPT4gIlRlc3QzXG5UZXh0QXJyYXkzXG5UZXN0MyIsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoYSBzZWNvbmQgTkVXIGNvbmZpZyBpdGVtIG11c3QgYmUgY3JlYXRlZCkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdDdXN0b21lcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlVGltZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW50ZWdlcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0QXJlYTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA0JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgICAgICcyMDA4LTA5LTA1JywKICAgICAgICAgICAgICAgICAgICAnMjAwOC0xMi0wNSAwNDo1MCcsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3Q0JywKICAgICAgICAgICAgICAgICAgICAnNCcsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3Q0IFRleHQ0IFRlc3Q0JywKICAgICAgICAgICAgICAgICAgICAiVGVzdDRcblRleHRBcnJheTRcblRlc3Q0IiwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDEsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA0JywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnQ3VzdG9tZXIxOjoxJyAgICAgICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgJ0RhdGUxOjoxJyAgICAgICAgICAgPT4gJzIwMDgtMDktMDUnLAogICAgICAgICAgICAgICAgJ0RhdGVUaW1lMTo6MScgICAgICAgPT4gJzIwMDgtMTItMDUgMDQ6NTAnLAogICAgICAgICAgICAgICAgJ0dlbmVyYWxDYXRhbG9nMTo6MScgPT4gJEdlbmVyYWxDYXRhbG9nTGlzdFJldmVyc2V7VGVzdDR9LAogICAgICAgICAgICAgICAgJ0ludGVnZXIxOjoxJyAgICAgICAgPT4gJzQnLAogICAgICAgICAgICAgICAgJ1RleHQxOjoxJyAgICAgICAgICAgPT4gJ1Rlc3Q0IFRleHQ0IFRlc3Q0JywKICAgICAgICAgICAgICAgICdUZXh0QXJlYTE6OjEnICAgICAgID0+ICJUZXN0NFxuVGV4dEFycmF5NFxuVGVzdDQiLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGEgbmV3IHZlcnNpb24gbXVzdCBiZSBhZGRlZCB0byBmaXJzdCB0ZXN0IGNvbmZpZyBpdGVtKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdDdXN0b21lcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlVGltZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW50ZWdlcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0QXJlYTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjZdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzBdLAogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgICdQaWxvdCcsCiAgICAgICAgICAgICAgICAgICAgJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgICAgICcyMDA4LTAyLTAyJywKICAgICAgICAgICAgICAgICAgICAnMjAwOC0wMi0wMiAwMzo1OScsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QyJywKICAgICAgICAgICAgICAgICAgICAnMicsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QgVGV4dCBVUERBVEUxIFRlc3QnLAogICAgICAgICAgICAgICAgICAgICJUZXN0XG5UZXh0IEFycmF5IFVQREFURTFcblRlc3QiLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gMiwKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDEgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQaWxvdCcsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgJ0N1c3RvbWVyMTo6MScgICAgICAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgICAgICdEYXRlMTo6MScgICAgICAgICAgID0+ICcyMDA4LTAyLTAyJywKICAgICAgICAgICAgICAgICdEYXRlVGltZTE6OjEnICAgICAgID0+ICcyMDA4LTAyLTAyIDAzOjU5JywKICAgICAgICAgICAgICAgICdHZW5lcmFsQ2F0YWxvZzE6OjEnID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QyfSwKICAgICAgICAgICAgICAgICdJbnRlZ2VyMTo6MScgICAgICAgID0+ICcyJywKICAgICAgICAgICAgICAgICdUZXh0MTo6MScgICAgICAgICAgID0+ICdUZXN0IFRleHQgVVBEQVRFMSBUZXN0JywKICAgICAgICAgICAgICAgICdUZXh0QXJlYTE6OjEnICAgICAgID0+ICJUZXN0XG5UZXh0IEFycmF5IFVQREFURTFcblRlc3QiLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGEgbmV3IHZlcnNpb24gbXVzdCBiZSBhZGRlZCB0byBmaXJzdCB0ZXN0IGNvbmZpZyBpdGVtIGFnYWluKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ051bWJlcicsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdDdXN0b21lcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RhdGUxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEYXRlVGltZTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW50ZWdlcjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0QXJlYTE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjddLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzBdLAogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDMnLAogICAgICAgICAgICAgICAgICAgICdSZXBhaXInLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0JywKICAgICAgICAgICAgICAgICAgICAnMjAwOC0wMi0wMycsCiAgICAgICAgICAgICAgICAgICAgJzIwMDgtMDItMDMgMDM6NTknLAogICAgICAgICAgICAgICAgICAgICdUZXN0MycsCiAgICAgICAgICAgICAgICAgICAgJzMnLAogICAgICAgICAgICAgICAgICAgICdUZXN0IFRleHQgVVBEQVRFMiBUZXN0JywKICAgICAgICAgICAgICAgICAgICAiVGVzdFxuVGV4dCBBcnJheSBVUERBVEUyXG5UZXN0IiwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDMsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAxIFZlcnNpb24gMycsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICA9PiAnUmVwYWlyJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnQ3VzdG9tZXIxOjoxJyAgICAgICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICAgICAgJ0RhdGUxOjoxJyAgICAgICAgICAgPT4gJzIwMDgtMDItMDMnLAogICAgICAgICAgICAgICAgJ0RhdGVUaW1lMTo6MScgICAgICAgPT4gJzIwMDgtMDItMDMgMDM6NTknLAogICAgICAgICAgICAgICAgJ0dlbmVyYWxDYXRhbG9nMTo6MScgPT4gJEdlbmVyYWxDYXRhbG9nTGlzdFJldmVyc2V7VGVzdDN9LAogICAgICAgICAgICAgICAgJ0ludGVnZXIxOjoxJyAgICAgICAgPT4gJzMnLAogICAgICAgICAgICAgICAgJ1RleHQxOjoxJyAgICAgICAgICAgPT4gJ1Rlc3QgVGV4dCBVUERBVEUyIFRlc3QnLAogICAgICAgICAgICAgICAgJ1RleHRBcmVhMTo6MScgICAgICAgPT4gIlRlc3RcblRleHQgQXJyYXkgVVBEQVRFMlxuVGVzdCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoYSBuZXcgdmVyc2lvbiBtdXN0IGJlIGFkZGVkIHRvIHRoaXJkIHRlc3QgY29uZmlnIGl0ZW0pCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjozJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syN10sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbMl0sCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMicsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDEpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMSkgTWFpbjFTdWIxU3ViU3ViMSAoMSknLAogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgxKSBNYWluMVN1YjFTdWJTdWIxICgyKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDEpIE1haW4xU3ViMVN1YlN1YjEgKDMpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMSkgTWFpbjFTdWIxU3ViU3ViMiAoMSknLAogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDIpIE1haW4xU3ViMVN1YlN1YjEgKDEpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMikgTWFpbjFTdWIxU3ViU3ViMiAoMSknLAogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKSBNYWluMVN1YjFTdWJTdWIyICgyKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjIgKDEpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMiAoMiknLAogICAgICAgICAgICAgICAgICAgICdNYWluMiAoMSknLAogICAgICAgICAgICAgICAgICAgICdNYWluMiAoMSkgTWFpbjJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAgICAgJ01haW4yICgxKSBNYWluMlN1YjIgKDEpJywKICAgICAgICAgICAgICAgICAgICAnTWFpbjIgKDEpIE1haW4yU3ViMiAoMiknLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gMiwKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMicsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjEnICAgICAgICAgICAgICAgPT4gJ01haW4xICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MScgPT4gJ01haW4xICgxKSBNYWluMVN1YjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgxKSBNYWluMVN1YjFTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MicgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMSkgTWFpbjFTdWIxU3ViU3ViMSAoMiknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjMnID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDEpIE1haW4xU3ViMVN1YlN1YjEgKDMpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoxJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgxKSBNYWluMVN1YjFTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MicgPT4gJ01haW4xICgxKSBNYWluMVN1YjEgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIxOjoxJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKSBNYWluMVN1YjFTdWJTdWIxICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMjo6MScgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMikgTWFpbjFTdWIxU3ViU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjInID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDIpIE1haW4xU3ViMVN1YlN1YjIgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJyA9PiAnTWFpbjEgKDEpIE1haW4xU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjI6OjInID0+ICdNYWluMSAoMSkgTWFpbjFTdWIyICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjEnICAgICAgICAgICAgICAgPT4gJ01haW4yICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScgPT4gJ01haW4yICgxKSBNYWluMlN1YjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMjo6MTo6TWFpbjJTdWIyOjoxJyA9PiAnTWFpbjIgKDEpIE1haW4yU3ViMiAoMSknLAogICAgICAgICAgICAgICAgJ01haW4yOjoxOjpNYWluMlN1YjI6OjInID0+ICdNYWluMiAoMSkgTWFpbjJTdWIyICgyKScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgIyBJbiAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDMgVmVyc2lvbiAyJyAxNiBBdHRyaWJ1dGVzIHdlcmUgaW1wb3J0ZWQsCiAgICAjIHNvIHRoZXJlIHdpbGwgYmUgOCBsaW5nZXJpbmcgYXR0cmlidXRlcy4KICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdOYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxOjpNYWluMVN1YjI6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4yOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MTo6TWFpbjJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI3XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1syXSwKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDMgVmVyc2lvbiAzJywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnIiI7Ozo6Li4tLV9fIyMnLAogICAgICAgICAgICAgICAgICAgICdUZXN0OzpfwrBeISLCpyQlJi8oKT0/wrRgKitUZXN0JywKICAgICAgICAgICAgICAgICAgICAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICAgICAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICAgICAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgJyIiOzs6Oi4uLS1fXyMjJywKICAgICAgICAgICAgICAgICAgICAnVGVzdCBUZXN0JywKICAgICAgICAgICAgICAgICAgICAiVGVzdFxuVGVzdFx0VGVzdCIsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgVmVyc2lvbk51bWJlciA9PiAzLAogICAgICAgICAgICBMYXN0VmVyc2lvbiAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDMgVmVyc2lvbiAzJywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdNYWluMTo6MScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnIiI7Ozo6Li4tLV9fIyMnLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjEnICAgICAgICAgICAgICAgICAgICAgID0+ICdUZXN0OzpfwrBeISLCpyQlJi8oKT0/wrRgKitUZXN0JywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJyA9PiAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoxJyA9PiAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJyAgICAgICAgICAgICAgICAgICAgICA9PiAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjEnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJyIiOzs6Oi4uLS1fXyMjJywKICAgICAgICAgICAgICAgICdNYWluMjo6MTo6TWFpbjJTdWIxOjoxJyAgICAgICAgICAgICAgICAgICAgICA9PiAnVGVzdCBUZXN0JywKICAgICAgICAgICAgICAgICdNYWluMjo6MTo6TWFpbjJTdWIyOjoxJyAgICAgICAgICAgICAgICAgICAgICA9PiAiVGVzdFxuVGVzdFx0VGVzdCIsCgogICAgICAgICAgICAgICAgIyBsaW5nZXJpbmcgZnJvbSAnVW5pdFRlc3QgLSBDb25maWdJdGVtIDMgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoyJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgxKSBNYWluMVN1YjFTdWJTdWIxICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MycgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMSkgTWFpbjFTdWIxU3ViU3ViMSAoMyknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjInID0+ICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMTo6MScgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMikgTWFpbjFTdWIxU3ViU3ViMSAoMSknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjI6OjEnID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDIpIE1haW4xU3ViMVN1YlN1YjIgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoyJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKSBNYWluMVN1YjFTdWJTdWIyICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMjo6MicgPT4gJ01haW4xICgxKSBNYWluMVN1YjIgKDIpJywKICAgICAgICAgICAgICAgICdNYWluMjo6MTo6TWFpbjJTdWIyOjoyJyA9PiAnTWFpbjIgKDEpIE1haW4yU3ViMiAoMiknLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKFVURi04IGNoZWNrcykKICAgICMgSW4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMicgMTYgQXR0cmlidXRlcyB3ZXJlIGltcG9ydGVkLAogICAgIyBzbyB0aGVyZSB3aWxsIGJlIDggbGluZ2VyaW5nIGF0dHJpYnV0ZXMuCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ01haW4xOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxOjpNYWluMVN1YjFTdWJTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdNYWluMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syN10sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbMl0sCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gNCcsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJ86rIM60IM67JywKICAgICAgICAgICAgICAgICAgICAnz4Agz4cgz5gnLAogICAgICAgICAgICAgICAgICAgICfPuiDPsSDPricsCiAgICAgICAgICAgICAgICAgICAgJ8mvIMqTIMqgJywKICAgICAgICAgICAgICAgICAgICAnyqwgyq8nLAogICAgICAgICAgICAgICAgICAgICfQuSDRhCDRiScsCiAgICAgICAgICAgICAgICAgICAgJ9GaINGRJywKICAgICAgICAgICAgICAgICAgICAn0awg0aYnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gNCwKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gNCcsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjEnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ86rIM60IM67JywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoxJyAgICAgICAgICAgICAgICAgICAgICA9PiAnz4Agz4cgz5gnLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjEnID0+ICfPuiDPsSDPricsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMjo6MScgPT4gJ8mvIMqTIMqgJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIyOjoxJyAgICAgICAgICAgICAgICAgICAgICA9PiAnyqwgyq8nLAogICAgICAgICAgICAgICAgJ01haW4yOjoxJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICfQuSDRhCDRiScsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjE6Ok1haW4yU3ViMTo6MScgICAgICAgICAgICAgICAgICAgICAgPT4gJ9GaINGRJywKICAgICAgICAgICAgICAgICdNYWluMjo6MTo6TWFpbjJTdWIyOjoxJyAgICAgICAgICAgICAgICAgICAgICA9PiAn0awg0aYnLAoKICAgICAgICAgICAgICAgICMgbGluZ2VyaW5nIGZyb20gJ1VuaXRUZXN0IC0gQ29uZmlnSXRlbSAzIFZlcnNpb24gMicsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6MTo6TWFpbjFTdWIxU3ViU3ViMTo6MicgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMSkgTWFpbjFTdWIxU3ViU3ViMSAoMiknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjE6Ok1haW4xU3ViMVN1YlN1YjE6OjMnID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDEpIE1haW4xU3ViMVN1YlN1YjEgKDMpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyJyA9PiAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMiknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjE6OjI6Ok1haW4xU3ViMVN1YlN1YjE6OjEnID0+CiAgICAgICAgICAgICAgICAgICAgJ01haW4xICgxKSBNYWluMVN1YjEgKDIpIE1haW4xU3ViMVN1YlN1YjEgKDEpJywKICAgICAgICAgICAgICAgICdNYWluMTo6MTo6TWFpbjFTdWIxOjoyOjpNYWluMVN1YjFTdWJTdWIyOjoxJyA9PgogICAgICAgICAgICAgICAgICAgICdNYWluMSAoMSkgTWFpbjFTdWIxICgyKSBNYWluMVN1YjFTdWJTdWIyICgxKScsCiAgICAgICAgICAgICAgICAnTWFpbjE6OjE6Ok1haW4xU3ViMTo6Mjo6TWFpbjFTdWIxU3ViU3ViMjo6MicgPT4KICAgICAgICAgICAgICAgICAgICAnTWFpbjEgKDEpIE1haW4xU3ViMSAoMikgTWFpbjFTdWIxU3ViU3ViMiAoMiknLAogICAgICAgICAgICAgICAgJ01haW4xOjoxOjpNYWluMVN1YjI6OjInID0+ICdNYWluMSAoMSkgTWFpbjFTdWIyICgyKScsCiAgICAgICAgICAgICAgICAnTWFpbjI6OjE6Ok1haW4yU3ViMjo6MicgPT4gJ01haW4yICgxKSBNYWluMlN1YjIgKDIpJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGEgc2ltcGxlIGltcG9ydCBmb3IgdGVzdGluZyB0aGUgb3ZlcnJpZGluZyBiZWhhdmlvciBvZiBlbXB0eSB2YWx1ZXMKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnSW1wb3J0dGVzdCA1IGZvciBiZWhhdmlvciBvZiBlbXB0eSB2YWx1ZXMnLAogICAgICAgICAgICAgICAgICAgICdUZXN0MScsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgVmVyc2lvbk51bWJlciA9PiAxLAogICAgICAgICAgICBMYXN0VmVyc2lvbiAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ1RleHQxOjoxJyAgICAgICAgICAgPT4gJ0ltcG9ydHRlc3QgNSBmb3IgYmVoYXZpb3Igb2YgZW1wdHkgdmFsdWVzJywKICAgICAgICAgICAgICAgICdHZW5lcmFsQ2F0YWxvZzE6OjEnID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QxfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGltcG9ydCBhbiBlbXB0eSB2YWx1ZSBmb3IgVGV4dDEsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb24KICAgICMgbm8gbmV3IHZlcnNpb24gc2hvdWxkIGJlIGNyZWF0ZWQKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICdvbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnVGVzdDEnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gMSwKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdUZXh0MTo6MScgICAgICAgICAgID0+ICdJbXBvcnR0ZXN0IDUgZm9yIGJlaGF2aW9yIG9mIGVtcHR5IHZhbHVlcycsCiAgICAgICAgICAgICAgICAnR2VuZXJhbENhdGFsb2cxOjoxJyA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgdW5kZWYgZm9yIFRleHQxLCB3aXRoIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgdHVybmVkIG9uCiAgICAjIG5vIG5ldyB2ZXJzaW9uIHNob3VsZCBiZSBjcmVhdGVkCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9PiAnb24nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QxJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDEsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnSW1wb3J0dGVzdCA1IGZvciBiZWhhdmlvciBvZiBlbXB0eSB2YWx1ZXMnLAogICAgICAgICAgICAgICAgJ0dlbmVyYWxDYXRhbG9nMTo6MScgPT4gJEdlbmVyYWxDYXRhbG9nTGlzdFJldmVyc2V7VGVzdDF9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW1wb3J0IGFuIGVtcHR5IHZhbHVlIGZvciBUZXh0MSwgd2l0aCBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzIHR1cm5lZCBvZmYKICAgICMgYSBuZXcgdmVyc2lvbiBzaG91bGQgYmUgY3JlYXRlZAogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnVGVzdDEnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gMiwKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdUZXh0MTo6MScgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgJ0dlbmVyYWxDYXRhbG9nMTo6MScgPT4gJEdlbmVyYWxDYXRhbG9nTGlzdFJldmVyc2V7VGVzdDF9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW1wb3J0IGEgc2luZ2xlIHNwYWNlIHZhbHVlIGZvciBUZXh0MSwgd2l0aCBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzIHR1cm5lZCBvbgogICAgIyBhIG5ldyB2ZXJzaW9uIHNob3VsZCBiZSBjcmVhdGVkCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICcgJywKICAgICAgICAgICAgICAgICAgICAnVGVzdDEnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gMywKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdUZXh0MTo6MScgICAgICAgICAgID0+ICcgJywKICAgICAgICAgICAgICAgICdHZW5lcmFsQ2F0YWxvZzE6OjEnID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QxfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGltcG9ydCB0aGUgc3RyaW5nICcwJyB2YWx1ZSBmb3IgVGV4dDEsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb24KICAgICMgYSBuZXcgdmVyc2lvbiBzaG91bGQgYmUgY3JlYXRlZAogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAnMCcsCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QxJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDQsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnMCcsCiAgICAgICAgICAgICAgICAnR2VuZXJhbENhdGFsb2cxOjoxJyA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgYW4gZW1wdHkgdmFsdWUgZm9yIEdlbmVyYWxDYXRhbG9nMSwgd2l0aCBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzIHR1cm5lZCBvbgogICAgIyBubyBuZXcgdmVyc2lvbiBzaG91bGQgYmUgY3JlYXRlZAogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPT4gJ29uJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gNCwKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdUZXh0MTo6MScgICAgICAgICAgID0+ICcwJywKICAgICAgICAgICAgICAgICdHZW5lcmFsQ2F0YWxvZzE6OjEnID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QxfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGltcG9ydCBhbiBpbnZhbGlkIHZhbHVlIGZvciBHZW5lcmFsQ2F0YWxvZzEsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb24KICAgICMgdGhlIGltcG9ydCBzaG91bGQgZmFpbAogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPT4gJ29uJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgICdub24tZXhpc3RlbnQgZ2VuZXJhbCBjYXRhbG9nIGVudHJ5JywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGltcG9ydCBhbiBpbnZhbGlkIHZhbHVlIGZvciBHZW5lcmFsQ2F0YWxvZzEsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb2ZmCiAgICAjIHRoZSBpbXBvcnQgc2hvdWxkIGZhaWwKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0RlcGxTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnSW5jaVN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdUZXh0MTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnR2VuZXJhbENhdGFsb2cxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEltcG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEltcG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEltcG9ydHRlc3QgNScsCiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJ25vbi1leGlzdGVudCBnZW5lcmFsIGNhdGFsb2cgZW50cnknLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW1wb3J0IGFuIGVtcHR5IHZhbHVlIGZvciBEZXBsU3RhdGUsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb24KICAgICMgbm8gbmV3IHZlcnNpb24gc2hvdWxkIGJlIGNyZWF0ZWQKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICdvbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIFZlcnNpb25OdW1iZXIgPT4gNCwKICAgICAgICAgICAgTGFzdFZlcnNpb24gICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdUZXh0MTo6MScgICAgICAgICAgID0+ICcwJywKICAgICAgICAgICAgICAgICdHZW5lcmFsQ2F0YWxvZzE6OjEnID0+ICRHZW5lcmFsQ2F0YWxvZ0xpc3RSZXZlcnNle1Rlc3QxfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGltcG9ydCBhbiBpbnZhbGlkIHZhbHVlIGZvciBEZXBsU3RhdGUsIHdpdGggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyB0dXJuZWQgb24KICAgICMgYW4gZXJyb3Igc2hvdWxkIGJlIGdlbmVyYXRlZAogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPT4gJ29uJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGRlcGxveW1lbnQgc3RhdGUnLAogICAgICAgICAgICAgICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgYW4gZW1wdHkgdmFsdWUgZm9yIEluY2lTdGF0ZSwgd2l0aCBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzIHR1cm5lZCBvbgogICAgIyBubyBuZXcgdmVyc2lvbiBzaG91bGQgYmUgY3JlYXRlZAogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBPYmplY3REYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgPT4gJ29uJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnVGV4dDE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0dlbmVyYWxDYXRhbG9nMTo6MScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBWZXJzaW9uTnVtYmVyID0+IDQsCiAgICAgICAgICAgIExhc3RWZXJzaW9uICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnVGV4dDE6OjEnICAgICAgICAgICA9PiAnMCcsCiAgICAgICAgICAgICAgICAnR2VuZXJhbENhdGFsb2cxOjoxJyA9PiAkR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZXtUZXN0MX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbXBvcnQgYW4gaW52YWxpZCB2YWx1ZSBmb3IgSW5jaVN0YXRlLCB3aXRoIEVtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMgdHVybmVkIG9uCiAgICAjIGFuIGVycm9yIHNob3VsZCBiZSBnZW5lcmF0ZWQKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzID0+ICdvbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnRGVwbFN0YXRlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdJbmNpU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1RleHQxOjoxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdHZW5lcmFsQ2F0YWxvZzE6OjEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgSW1wb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1VuaXRUZXN0IC0gSW1wb3J0dGVzdCA1JywKICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgaW5jaWRlbnQgc3RhdGUnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgSW1wb3J0IHdpdGhvdXQgcmVxdWlyZWQgYXR0cmlidXRlICdUeXBlJywgYW4gZXJyb3Igc2hvdWxkIGJlIGdlbmVyYXRlZCAoc2VlIGJ1ZyMxNDA5OCkuCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdEZXBsU3RhdGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ0luY2lTdGF0ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBJbXBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVW5pdFRlc3QgLSBJbXBvcnR0ZXN0IDUnLAogICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIEV4cG9ydERhdGFHZXQgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEltcG9ydFRlc3RDb3VudCA9IDE7ClRFU1Q6CmZvciBteSAkVGVzdCAoQEltcG9ydERhdGFUZXN0cykgewoKICAgICMgY2hlY2sgU291cmNlSW1wb3J0RGF0YSBhdHRyaWJ1dGUKICAgIGlmICggISRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0gfHwgcmVmICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0gbmUgJ0hBU0gnICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIkltcG9ydFRlc3QgJEltcG9ydFRlc3RDb3VudDogTm8gU291cmNlSW1wb3J0RGF0YSBmb3VuZCBmb3IgdGhpcyB0ZXN0LiIKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgIyBzZXQgdGhlIG9iamVjdCBkYXRhCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e09iamVjdERhdGF9CiAgICAgICAgJiYgcmVmICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntPYmplY3REYXRhfSBlcSAnSEFTSCcKICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YVNhdmV9LT57VGVtcGxhdGVJRH0KICAgICAgICApCiAgICB7CgogICAgICAgICMgc2F2ZSBvYmplY3QgZGF0YQogICAgICAgICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdERhdGFTYXZlKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntJbXBvcnREYXRhU2F2ZX0tPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57T2JqZWN0RGF0YX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IHRoZSBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e01hcHBpbmdPYmplY3REYXRhfQogICAgICAgICYmIHJlZiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57TWFwcGluZ09iamVjdERhdGF9IGVxICdBUlJBWScKICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YVNhdmV9LT57VGVtcGxhdGVJRH0KICAgICAgICApCiAgICB7CgogICAgICAgICMgZGVsZXRlIGFsbCBleGlzdGluZyBtYXBwaW5nIGRhdGEKICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nRGVsZXRlKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntJbXBvcnREYXRhU2F2ZX0tPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoZSBtYXBwaW5nIG9iamVjdCByb3dzCiAgICAgICAgTUFQUElOR09CSkVDVERBVEE6CiAgICAgICAgZm9yIG15ICRNYXBwaW5nT2JqZWN0RGF0YSAoIEB7ICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntNYXBwaW5nT2JqZWN0RGF0YX0gfSApIHsKCiAgICAgICAgICAgICMgYWRkIGEgbmV3IG1hcHBpbmcgcm93CiAgICAgICAgICAgIG15ICRNYXBwaW5nSUQgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nQWRkKAogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YVNhdmV9LT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCB0aGUgbWFwcGluZyBvYmplY3QgZGF0YQogICAgICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nT2JqZWN0RGF0YVNhdmUoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgICAgICAgICA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gJE1hcHBpbmdPYmplY3REYXRhLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBpbXBvcnQgZGF0YSBzYXZlCiAgICBteSAoICRDb25maWdJdGVtSUQsICRSZXRDb2RlICkgPSAkT2JqZWN0QmFja2VuZE9iamVjdC0+SW1wb3J0RGF0YVNhdmUoCiAgICAgICAgJXsgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFTYXZlfSB9LAogICAgICAgIENvdW50ZXIgPT4gJEltcG9ydFRlc3RDb3VudCwKICAgICk7CgogICAgaWYgKCAhJFRlc3QtPntSZWZlcmVuY2VJbXBvcnREYXRhfSApIHsKCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAiSW1wb3J0VGVzdCAkSW1wb3J0VGVzdENvdW50OiBJbXBvcnREYXRhU2F2ZSgpIC0gcmV0dXJuIG5vIENvbmZpZ0l0ZW1JRCIKICAgICAgICApOwogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJFJldENvZGUsCiAgICAgICAgICAgICJJbXBvcnRUZXN0ICRJbXBvcnRUZXN0Q291bnQ6IEltcG9ydERhdGFTYXZlKCkgLSByZXR1cm4gbm8gUmV0Q29kZSIKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAiSW1wb3J0VGVzdCAkSW1wb3J0VGVzdENvdW50OiBJbXBvcnREYXRhU2F2ZSgpIC0gcmV0dXJuIENvbmZpZ0l0ZW1JRCIKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkUmV0Q29kZSwKICAgICAgICAiSW1wb3J0VGVzdCAkSW1wb3J0VGVzdENvdW50OiBJbXBvcnREYXRhU2F2ZSgpIC0gcmV0dXJuIFJldENvZGUiCiAgICApOwoKICAgICMgZ2V0IHRoZSB2ZXJzaW9uIGxpc3QKICAgIG15ICRWZXJzaW9uTGlzdCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uTGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICkgLy8gW107CgogICAgIyBjaGVjayBudW1iZXIgb2YgdmVyc2lvbnMKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQHskVmVyc2lvbkxpc3R9LAogICAgICAgICRUZXN0LT57UmVmZXJlbmNlSW1wb3J0RGF0YX0tPntWZXJzaW9uTnVtYmVyfSB8fCAwLAogICAgICAgICJJbXBvcnRUZXN0ICRJbXBvcnRUZXN0Q291bnQ6IEltcG9ydERhdGFTYXZlKCkgLSBjb3JyZWN0IG51bWJlciBvZiB2ZXJzaW9ucyIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsYXN0IHZlcnNpb24KICAgIG15ICRWZXJzaW9uRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFhNTERhdGFHZXQgICA9PiAxLAogICAgKTsKCiAgICAjIHRyYW5zbGF0ZSB4bWxkYXRhIGluIGEgMmQgaGFzaAogICAgbXkgJVhNTEhhc2ggPSAkWE1MT2JqZWN0LT5YTUxIYXNoMkQoCiAgICAgICAgWE1MSGFzaCA9PiAkVmVyc2lvbkRhdGEtPntYTUxEYXRhfSwKICAgICk7CgogICAgIyBjbGVhbiB0aGUgeG1sIGhhc2gKICAgIEtFWToKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVYTUxIYXNoICkgewoKICAgICAgICBuZXh0IEtFWSBpZiAkS2V5ID1+IG17IFx7J0NvbnRlbnQnXH0gXHogfXhtczsKCiAgICAgICAgZGVsZXRlICRYTUxIYXNoeyRLZXl9OwogICAgfQoKICAgICMgY2hlY2sgZ2VuZXJhbCBlbGVtZW50cwogICAgRUxFTUVOVDoKICAgIGZvciBteSAkRWxlbWVudCAocXcoTnVtYmVyIE5hbWUgRGVwbFN0YXRlIEluY2lTdGF0ZSkpIHsKCiAgICAgICAgbmV4dCBFTEVNRU5UIGlmICFleGlzdHMgJFRlc3QtPntSZWZlcmVuY2VJbXBvcnREYXRhfS0+e0xhc3RWZXJzaW9ufS0+eyRFbGVtZW50fTsKCiAgICAgICAgIyBzZXQgY29udGVudCBpZiB2YWx1ZXMgYXJlIHVuZGVmCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9ICkgewogICAgICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9ID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICB9CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9ICkgewogICAgICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9ID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZWxlbWVudAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFZlcnNpb25EYXRhLT57JEVsZW1lbnR9LAogICAgICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEVsZW1lbnR9LAogICAgICAgICAgICAiSW1wb3J0VGVzdCAkSW1wb3J0VGVzdENvdW50OiBJbXBvcnREYXRhU2F2ZSgpICRFbGVtZW50IGlzIGlkZW50aWNhbCIsCiAgICAgICAgKTsKCiAgICAgICAgZGVsZXRlICRUZXN0LT57UmVmZXJlbmNlSW1wb3J0RGF0YX0tPntMYXN0VmVyc2lvbn0tPnskRWxlbWVudH07CiAgICB9CgogICAgIyBjaGVjayBudW1iZXIgb2YgWE1MIGVsZW1lbnRzCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIGtleXMgJVhNTEhhc2gsCiAgICAgICAgc2NhbGFyIGtleXMgJXsgJFRlc3QtPntSZWZlcmVuY2VJbXBvcnREYXRhfS0+e0xhc3RWZXJzaW9ufSB9LAogICAgICAgICJJbXBvcnRUZXN0ICRJbXBvcnRUZXN0Q291bnQ6IEltcG9ydERhdGFTYXZlKCkgLSBjb3JyZWN0IG51bWJlciBvZiBYTUwgZWxlbWVudHMiLAogICAgKTsKCiAgICAjIGNoZWNrIFhNTCBlbGVtZW50cwogICAgRUxFTUVOVDoKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRUZXN0LT57UmVmZXJlbmNlSW1wb3J0RGF0YX0tPntMYXN0VmVyc2lvbn0gfSApIHsKCiAgICAgICAgIyBkdXBsaWNhdGUga2V5CiAgICAgICAgbXkgJFhNTEtleSA9ICRLZXk7CgogICAgICAgICMgcHJlcGFyZSBrZXkKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgd2hpbGUgKCAkWE1MS2V5ID1+IG17IDo6IH14bXMgKSB7CgogICAgICAgICAgICBpZiAoICRDb3VudGVyICUgMiApIHsKICAgICAgICAgICAgICAgICRYTUxLZXkgPX4gc3sgOjogfXtdXHsnfXhtczsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRYTUxLZXkgPX4gc3sgOjogfXsnXH1bfXhtczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICB9CgogICAgICAgIG5leHQgRUxFTUVOVCBpZiAhZXhpc3RzICRYTUxIYXNoeyAnWzFde1wnVmVyc2lvblwnfVsxXXtcJycgLiAkWE1MS2V5IC4gJ117XCdDb250ZW50XCd9JyB9OwoKICAgICAgICAjIHNldCBjb250ZW50IGlmIHZhbHVlcyBhcmUgdW5kZWYKICAgICAgICBpZiAoICFkZWZpbmVkICRYTUxIYXNoeyAnWzFde1wnVmVyc2lvblwnfVsxXXtcJycgLiAkWE1MS2V5IC4gJ117XCdDb250ZW50XCd9JyB9ICkgewogICAgICAgICAgICAkWE1MSGFzaHsgJ1sxXXtcJ1ZlcnNpb25cJ31bMV17XCcnIC4gJFhNTEtleSAuICdde1wnQ29udGVudFwnfScgfSA9ICdVTkRFRi11bml0dGVzdCc7CiAgICAgICAgfQogICAgICAgIGlmICggIWRlZmluZWQgJFRlc3QtPntSZWZlcmVuY2VJbXBvcnREYXRhfS0+e0xhc3RWZXJzaW9ufS0+eyRLZXl9ICkgewogICAgICAgICAgICAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT57TGFzdFZlcnNpb259LT57JEtleX0gPSAnVU5ERUYtdW5pdHRlc3QnOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBYTUwgZWxlbWVudAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFhNTEhhc2h7ICdbMV17XCdWZXJzaW9uXCd9WzFde1wnJyAuICRYTUxLZXkgLiAnXXtcJ0NvbnRlbnRcJ30nIH0sCiAgICAgICAgICAgICRUZXN0LT57UmVmZXJlbmNlSW1wb3J0RGF0YX0tPntMYXN0VmVyc2lvbn0tPnskS2V5fSwKICAgICAgICAgICAgIkltcG9ydFRlc3QgJEltcG9ydFRlc3RDb3VudDogSW1wb3J0RGF0YVNhdmUoKSAkS2V5IGlzIGlkZW50aWNhbCIsCiAgICAgICAgKTsKICAgIH0KfQpjb250aW51ZSB7CiAgICAkSW1wb3J0VGVzdENvdW50Kys7Cn0KCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKKTsKbXkgJFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiApOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCm15ICRDbGFzc0lEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1BZGQoCiAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICBOYW1lICAgID0+ICRSYW5kb21JRCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkQ2xhc3NJRCwKICAgICJDbGFzcyBhZGRlZCB0byBHZW5lcmFsQ2F0YWxvZyIsCik7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnRW1wdHknLAogICAgICAgIENvbmZpZyAgPT4ge30sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ01pc3NpbmcgQ2xhc3NzSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERlZmluaXRpb24gPT4gPDwgJ0VPRicsCi0tLQotIEtleTogVmVuZG9yCiAgTmFtZTogVmVuZG9yCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogNTAKRU9GCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ01pc3NpbmcgRGVmaW5pdGlvbicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ01pc3NpbmcgVXNlcklEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBDbGFzc0lEICAgID0+ICRDbGFzc0lELAogICAgICAgICAgICBEZWZpbml0aW9uID0+IDw8ICdFT0YnLAotLS0KLSBLZXk6IFZlbmRvcgogIE5hbWU6IFZlbmRvcgogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDUwCkVPRgogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIERlZmluaXRpb24gKExlZ2FjeSBQZXJsKScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgQ2xhc3NJRCAgICA9PiAkQ2xhc3NJRCwKICAgICAgICAgICAgRGVmaW5pdGlvbiA9PiA8PCAnRU9GJywKWwogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ1ZlbmRvcicsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmVuZG9yJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwCiAgICAgICAgfSwKICAgIH0sCl07CkVPRgogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBEZWZpbml0aW9uIChJbnZhbGlkIFlBTUwpJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBDbGFzc0lEICAgID0+ICRDbGFzc0lELAogICAgICAgICAgICBEZWZpbml0aW9uID0+IDw8ICdFT0YnLAotLS0KVGVzdAogSW52YWxpZAotIEtleTogVmVuZG9yCiAgTmFtZTogVmVuZG9yCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogNTAKRU9GCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0NvcnJlY3QgQVNDSUknLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIENsYXNzSUQgICAgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIERlZmluaXRpb24gPT4gPDwgJ0VPRicsCi0tLQotIEtleTogVmVuZG9yCiAgTmFtZTogVmVuZG9yCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogNTAKRU9GCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKCik7CgpteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKVEVTVDoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICBteSAkRGVmaW5pdGlvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25BZGQoICV7ICRUZXN0LT57Q29uZmlnfSB9ICk7CgogICAgaWYgKCAhJFRlc3QtPntTdWNjZXNzfSApIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICREZWZpbml0aW9uSUQsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IERlZmluaXRpb25BZGQoKSAtIFdpdGggZmFsc2UiLAogICAgICAgICk7CiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAkRGVmaW5pdGlvbklEIC8vIDAsCiAgICAgICAgMCwKICAgICAgICAiJFRlc3QtPntOYW1lfSBEZWZpbml0aW9uQWRkKCkgLSBEZWZpbml0aW9uSUQiCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKKTsKbXkgJFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiApOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCm15ICRDbGFzc0lEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1BZGQoCiAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICBOYW1lICAgID0+ICRSYW5kb21JRCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkQ2xhc3NJRCwKICAgICJDbGFzcyBhZGRlZCB0byBHZW5lcmFsQ2F0YWxvZyIsCik7CgpteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwpteSAkRGVmaW5pdGlvbklEMSAgICA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uQWRkKAogICAgQ2xhc3NJRCAgICA9PiAkQ2xhc3NJRCwKICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRCwKICAgIENyZWF0ZUJ5ICAgPT4gJFVzZXJJRCwKICAgIERlZmluaXRpb24gPT4gPDwgJ0VPRicsCi0tLQotIEtleTogVmVuZG9yCiAgTmFtZTogVmVuZG9yCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogNTAKRU9GCik7CiRTZWxmLT5UcnVlKAogICAgJERlZmluaXRpb25JRDEsCiAgICAiRGVmaW5pdGlvbkFkZCgpIiwKKTsKbXkgJERlZmluaXRpb25JRDIgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkFkZCgKICAgIENsYXNzSUQgICAgPT4gJENsYXNzSUQsCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCiAgICBDcmVhdGVCeSAgID0+ICRVc2VySUQsCiAgICBEZWZpbml0aW9uID0+IDw8ICdFT0YnLAotLS0KLSBLZXk6IFZlbmRvcgogIE5hbWU6IFZlbmRvcgogIFNlYXJjaGFibGU6IDAKICBJbnB1dDoKICAgIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDUwCkVPRgopOwoKJFNlbGYtPlRydWUoCiAgICAkRGVmaW5pdGlvbklEMiwKICAgICJEZWZpbml0aW9uQWRkKCkiLAopOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ0VtcHR5JywKICAgICAgICBDb25maWcgID0+IHt9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdCeSBDbGFzc0lEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbiA9PiA8PCAnRU9GJywKLS0tCi0gS2V5OiBWZW5kb3IKICBOYW1lOiBWZW5kb3IKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiA1MApFT0YKICAgICAgICAgICAgICAgIFZlcnNpb24gICAgICA9PiAxLAogICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICREZWZpbml0aW9uSUQxLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uID0+IDw8ICdFT0YnLAotLS0KLSBLZXk6IFZlbmRvcgogIE5hbWU6IFZlbmRvcgogIFNlYXJjaGFibGU6IDAKICBJbnB1dDoKICAgIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDUwCkVPRgogICAgICAgICAgICAgICAgVmVyc2lvbiAgICAgID0+IDIsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJERlZmluaXRpb25JRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCik7CgpURVNUOgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgIG15ICREZWZpbml0aW9uTGlzdCA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uTGlzdCggJXsgJFRlc3QtPntDb25maWd9IH0gKTsKCiAgICBpZiAoICEkVGVzdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJERlZmluaXRpb25MaXN0LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBEZWZpbml0aW9uTGlzdCgpIC0gV2l0aCBmYWxzZSIsCiAgICAgICAgKTsKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgZm9yIG15ICREZWZpbml0aW9uICggQHskRGVmaW5pdGlvbkxpc3R9ICkgewogICAgICAgIGRlbGV0ZSAkRGVmaW5pdGlvbi0+e0NyZWF0ZVRpbWV9OwogICAgfQoKICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAkRGVmaW5pdGlvbkxpc3QsCiAgICAgICAgJFRlc3QtPntFeHBlY3RlZFJlc3VsdHN9LAogICAgICAgICIkVGVzdC0+e05hbWV9IERlZmluaXRpb25MaXN0KCkgLSBEZWZpbml0aW9uIgogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKKTsKbXkgJFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiApOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCm15ICRDbGFzc0lEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1BZGQoCiAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICBOYW1lICAgID0+ICRSYW5kb21JRCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkQ2xhc3NJRCwKICAgICJDbGFzcyBhZGRlZCB0byBHZW5lcmFsQ2F0YWxvZyIsCik7CgpteSAkQ29uZmlnSXRlbU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7Cm15ICVEZWZpbml0aW9uVGVtcGxhdGUgPSAoCiAgICBDbGFzc0lEICAgID0+ICRDbGFzc0lELAogICAgQ2xhc3MgICAgICA9PiAkUmFuZG9tSUQsCiAgICBDcmVhdGVCeSAgID0+ICRVc2VySUQsCiAgICBWZXJzaW9uICAgID0+IDEsCiAgICBEZWZpbml0aW9uID0+IDw8ICdFT0YnLAotLS0KLSBLZXk6IFZlbmRvcgogIE5hbWU6IFZlbmRvcgogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDUwCkVPRgogICAgRGVmaW5pdGlvblJlZiA9PiBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgID0+ICdWZW5kb3InLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdWZW5kb3InLAogICAgICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ291bnRNaW4gICAgID0+IDEsCiAgICAgICAgICAgIENvdW50TWF4ICAgICA9PiAxLAogICAgICAgICAgICBDb3VudERlZmF1bHQgPT4gMSwKICAgICAgICB9LAogICAgXSwKKTsKbXkgJERlZmluaXRpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uQWRkKAogICAgJURlZmluaXRpb25UZW1wbGF0ZSwKICAgIFVzZXJJRCA9PiAkVXNlcklELAopOwokU2VsZi0+VHJ1ZSgKICAgICREZWZpbml0aW9uSUQsCiAgICAiRGVmaW5pdGlvbkFkZCgpIiwKKTsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdFbXB0eScsCiAgICAgICAgQ29uZmlnICA9PiB7fSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQnkgRGVmaW5pdGlvbklEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJERlZmluaXRpb25JRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiB7CiAgICAgICAgICAgICVEZWZpbml0aW9uVGVtcGxhdGUsCiAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkRGVmaW5pdGlvbklELAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQnkgQ2xhc3NJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiB7CiAgICAgICAgICAgICVEZWZpbml0aW9uVGVtcGxhdGUsCiAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkRGVmaW5pdGlvbklELAogICAgICAgIH0sCiAgICB9LAopOwoKVEVTVDoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICBteSAkRGVmaW5pdGlvbiA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uR2V0KCAleyAkVGVzdC0+e0NvbmZpZ30gfSApOwoKICAgIGlmICggISRUZXN0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkRGVmaW5pdGlvbiwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gRGVmaW5pdGlvbkdldCgpIC0gV2l0aCBmYWxzZSIsCiAgICAgICAgKTsKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgZGVsZXRlICREZWZpbml0aW9uLT57Q3JlYXRlVGltZX07CgogICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICREZWZpbml0aW9uLAogICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXN1bHRzfSwKICAgICAgICAiJFRlc3QtPntOYW1lfSBEZWZpbml0aW9uR2V0KCkgLSBEZWZpbml0aW9uIgogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6Ok1pZ3JhdGlvbnM6Ok9UUlM2OjpTeXNDb25maWcpCgp1c2UgdXRmODsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCiMgZ2V0IG5lZWRlZCBvYmplY3RzCm15ICREQk9iamVjdCAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwpteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkQ29uZmlnSXRlbU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7Cm15ICRMaW5rT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7Cm15ICRVc2VyT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIGRlZmluZSBuZWVkZWQgdmFyaWFibGUKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIHBlcmZvcm0gQ29uZmlnSXRlbUNvdW50IHRvIGZpbGwgdGhlIGVtcHR5IGZpZWxkcwokQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUNvdW50KCk7CgojIGNyZWF0ZSBuZWVkZWQgdXNlcnMKbXkgQFVzZXJJRHM7CnsKCiAgICAjIGRpc2FibGUgZW1haWwgY2hlY2tzIHRvIGNyZWF0ZSBuZXcgdXNlcgogICAgbXkgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrRW1haWxBZGRyZXNzZXMnKSB8fCAxOwogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAwLAogICAgKTsKCiAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDMgKSB7CgogICAgICAgICMgY3JlYXRlIG5ldyB1c2VycyBmb3IgdGhlIHRlc3RzCiAgICAgICAgbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdJVFNNQ29uZmlnSXRlbScgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1JVFNNQ29uZmlnSXRlbS0nIC4gJENvdW50ZXIgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LUlUU01Db25maWdJdGVtLScgLiAkQ291bnRlciAuICdAbG9jYWxob3N0JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAVXNlcklEcywgJFVzZXJJRDsKICAgIH0KCiAgICAjIHJlc3RvcmUgb3JpZ2luYWwgZW1haWwgY2hlY2sgcGFyYW0KICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gJENoZWNrRW1haWxBZGRyZXNzZXNPcmcsCiAgICApOwp9CgpteSAkR2VuZXJhbENhdGFsb2dDbGFzcyA9ICdVbml0VGVzdCcgLiAkUmFuZG9tSUQ7CgojIGFkZCBhIGdlbmVyYWwgY2F0YWxvZyB0ZXN0IGxpc3QKZm9yIG15ICROYW1lIChxdyhUZXN0MSBUZXN0MiBUZXN0MyBUZXN0NCkpIHsKCiAgICAjIGFkZCBhIG5ldyBpdGVtCiAgICBteSAkSXRlbUlEID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgICAgIENsYXNzICAgPT4gJEdlbmVyYWxDYXRhbG9nQ2xhc3MsCiAgICAgICAgTmFtZSAgICA9PiAkTmFtZSwKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIGl0ZW0gaWQKICAgIGlmICggISRJdGVtSUQgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiQ2FuJ3QgYWRkIG5ldyBnZW5lcmFsIGNhdGFsb2cgaXRlbS4iLAogICAgICAgICk7CiAgICB9Cn0KCiMgZGVmaW5lIHRoZSBmaXJzdCB0ZXN0IGRlZmluaXRpb24gKGFsbCBwcm92aWRlZCBkYXRhIHR5cGVzKQpteSBAQ29uZmlnSXRlbVBlcmxEZWZpbml0aW9uczsKJENvbmZpZ0l0ZW1QZXJsRGVmaW5pdGlvbnNbMF0gPSAiIFsKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdDdXN0b21lcjEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0N1c3RvbWVyIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnQ3VzdG9tZXInLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0RhdGUxJywKICAgICAgICBOYW1lICAgICAgID0+ICdEYXRlIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnRGF0ZScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnRGF0ZVRpbWUxJywKICAgICAgICBOYW1lICAgICAgID0+ICdEYXRlIFRpbWUgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdEYXRlVGltZScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgPT4gJ0R1bW15MScsCiAgICAgICAgTmFtZSAgPT4gJ0R1bW15IDEnLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnRHVtbXknLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0dlbmVyYWxDYXRhbG9nMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnR2VuZXJhbENhdGFsb2cgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlICA9PiAnR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBDbGFzcyA9PiAnJEdlbmVyYWxDYXRhbG9nQ2xhc3MnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0ludGVnZXIxJywKICAgICAgICBOYW1lICAgICAgID0+ICdJbnRlZ2VyIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnSW50ZWdlcicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnVGV4dDEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RleHQgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdUZXh0QXJlYTEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RleHRBcmVhIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgIH0sCiAgICB9LApdICI7CgojIGRlZmluZSB0aGUgc2Vjb25kIHRlc3QgZGVmaW5pdGlvbiAoc3ViIGRhdGEgdHlwZXMpCiRDb25maWdJdGVtUGVybERlZmluaXRpb25zWzFdID0gIiBbCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnTWFpbjEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ01haW4gMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICB9LAogICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgIFN1YiA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ01haW4xU3ViMScsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDEgU3ViIDEnLAogICAgICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIENvdW50TWF4ID0+IDEwLAogICAgICAgICAgICAgICAgU3ViID0+IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ01haW4xU3ViMVN1YlN1YjEnLAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDEgU3ViIDEgU3ViU3ViIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ01haW4xU3ViMVN1YlN1YjInLAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNYWluIDEgU3ViIDEgU3ViU3ViIDInLAogICAgICAgICAgICAgICAgICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnVGV4dEFyZWEnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTWFpbjFTdWIyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ01haW4gMSBTdWIgMicsCiAgICAgICAgICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXh0QXJlYScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnTWFpbjInLAogICAgICAgIE5hbWUgICAgICAgPT4gJ01haW4gMicsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdUZXh0QXJlYScsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICBTdWIgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICAgICAgID0+ICdNYWluMlN1YjEnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTWFpbiAyIFN1YiAxJywKICAgICAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDb3VudE1heCA9PiAxMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnTWFpbjJTdWIyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ01haW4gMiBTdWIgMicsCiAgICAgICAgICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXh0QXJlYScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ291bnRNYXggPT4gMTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCl0gIjsKCiMgZGVmaW5lIHRoZSB0aGlyZCB0ZXN0IGRlZmluaXRpb24gKGVzcGVjaWFsbHkgZm9yIHNlYXJjaCB0ZXN0cyB3aXRoIFhNTERhdGEpCiRDb25maWdJdGVtUGVybERlZmluaXRpb25zWzJdID0gIiBbCiAgICB7CiAgICAgICAgS2V5ICAgICAgICA9PiAnQ3VzdG9tZXIxJywKICAgICAgICBOYW1lICAgICAgID0+ICdDdXN0b21lciAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0N1c3RvbWVyJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICAgICAgID0+ICdEYXRlMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnRGF0ZSAxJywKICAgICAgICBTZWFyY2hhYmxlID0+IDEsCiAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ0RhdGUnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0RhdGVUaW1lMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnRGF0ZSBUaW1lIDEnLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnRGF0ZVRpbWUnLAogICAgICAgIH0sCiAgICB9LApdICI7CgojIGRlZmluZSB0aGUgZm91cnRoIHRlc3QgZGVmaW5pdGlvbiAob25seSBmb3Igc2VhcmNoIHRlc3RzKQokQ29uZmlnSXRlbVBlcmxEZWZpbml0aW9uc1szXSA9ICIgWwogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ0N1c3RvbWVyMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnQ3VzdG9tZXIgMScsCiAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgIElucHV0ICAgICAgPT4gewogICAgICAgICAgICBUeXBlID0+ICdDdXN0b21lcicsCiAgICAgICAgfSwKICAgIH0sCl0gIjsKCm15ICRZQU1MT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OllBTUwnKTsKCm15IEBDb25maWdJdGVtRGVmaW5pdGlvbnM7CmZvciBteSAkUGVybERlZmluaXRpb24gKEBDb25maWdJdGVtUGVybERlZmluaXRpb25zKSB7CiAgICBteSAkWUFNTERlZmluaXRpb24gPSAkWUFNTE9iamVjdC0+RHVtcCgKICAgICAgICBEYXRhID0+IGV2YWwgJFBlcmxEZWZpbml0aW9uLCAgICAjIyBubyBjcml0aWMKICAgICk7CiAgICBwdXNoIEBDb25maWdJdGVtRGVmaW5pdGlvbnMsICRZQU1MRGVmaW5pdGlvbjsKfQoKIyBhZGQgdGhlIHRlc3QgY2xhc3NlcwpteSBAQ29uZmlnSXRlbUNsYXNzSURzOwpteSBAQ29uZmlnSXRlbUNsYXNzZXM7Cm15IEBDb25maWdJdGVtRGVmaW5pdGlvbklEczsKZm9yIG15ICREZWZpbml0aW9uIChAQ29uZmlnSXRlbURlZmluaXRpb25zKSB7CgogICAgIyBnZW5lcmF0ZSBhIHJhbmRvbSBuYW1lCiAgICBteSAkQ2xhc3NOYW1lID0gJ1VuaXRUZXN0JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgogICAgIyBhZGQgYW4gdW5pdHRlc3QgY29uZmlnIGl0ZW0gY2xhc3MKICAgIG15ICRDbGFzc0lEID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICBOYW1lICAgID0+ICRDbGFzc05hbWUsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBjbGFzcyBpZAogICAgaWYgKCAhJENsYXNzSUQgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiQ2FuJ3QgYWRkIG5ldyBjb25maWcgaXRlbSBjbGFzcy4iLAogICAgICAgICk7CiAgICB9CgogICAgcHVzaCBAQ29uZmlnSXRlbUNsYXNzSURzLCAkQ2xhc3NJRDsKICAgIHB1c2ggQENvbmZpZ0l0ZW1DbGFzc2VzLCAgJENsYXNzTmFtZTsKCiAgICAjIGFkZCBhIGRlZmluaXRpb24gdG8gdGhlIGNsYXNzCiAgICBteSAkRGVmaW5pdGlvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25BZGQoCiAgICAgICAgQ2xhc3NJRCAgICA9PiAkQ2xhc3NJRCwKICAgICAgICBEZWZpbml0aW9uID0+ICREZWZpbml0aW9uLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBkZWZpbml0aW9uIGlkCiAgICBpZiAoICEkRGVmaW5pdGlvbklEICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIkNhbid0IGFkZCBuZXcgY29uZmlnIGl0ZW0gZGVmaW5pdGlvbi4iLAogICAgICAgICk7CiAgICB9CgogICAgcHVzaCBAQ29uZmlnSXRlbURlZmluaXRpb25JRHMsICREZWZpbml0aW9uSUQ7Cn0KCiMgdGVzdCBEZWZpbml0aW9uTGlzdCBmb3IgdGhvc2Ugc2ltcGxlIGNhc2VzCm15ICRDb3VudGVyID0gMDsKZm9yIG15ICRDbGFzc0lEIChAQ29uZmlnSXRlbUNsYXNzSURzKSB7CiAgICBteSAkRGVmaW5pdGlvbkxpc3RSZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkxpc3QoCiAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRCwKICAgICk7CgogICAgIyBleHBlY3QgYSBzaW5nbGUgZGVmaW5pdGlvbiBwZXIgY29uZmlnIGl0ZW0gY2xhc3MKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQHskRGVmaW5pdGlvbkxpc3RSZWZ9LAogICAgICAgIDEsCiAgICAgICAgIkRlZmluaXRpb25MaXN0KCkgZm9yIGNsYXNzIGlkICRDbGFzc0lEOiBnb3QgYSBzaW5nbGUgcmVzdWx0IiwKICAgICk7CgogICAgIyBleHBlY3QgdGhlIHJlbWVtYmVyZWQgZGVmaW5pdGlvbiBpZCBpbiB0aGUgZmlyc3QgZGVmaW5pdGlvbgogICAgJFNlbGYtPklzKAogICAgICAgICREZWZpbml0aW9uTGlzdFJlZi0+WzBdLT57RGVmaW5pdGlvbklEfSwKICAgICAgICAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbJENvdW50ZXJdLAogICAgICAgICJEZWZpbml0aW9uTGlzdCgpIGZvciBjbGFzcyBpZCAkQ2xhc3NJRDogZ290IGV4cGVjdGVkIGRlZmluaXRpb24gaWQiLAogICAgKTsKCiAgICAkQ291bnRlcisrOwp9CgojIGNyZWF0ZSBzb21lIHJhbmRvbSBudW1iZXJzCm15IEBDb25maWdJdGVtTnVtYmVyczsKZm9yICggMSAuLiAxMDAgKSB7CiAgICBwdXNoIEBDb25maWdJdGVtTnVtYmVycywgJEhlbHBlci0+R2V0UmFuZG9tTnVtYmVyKCk7Cn0KCiMgZ2V0IGNsYXNzIGxpc3QKbXkgJENsYXNzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAopOwpteSAlQ2xhc3NMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskQ2xhc3NMaXN0fTsKCiMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdApteSAkRGVwbFN0YXRlTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKKTsKbXkgJURlcGxTdGF0ZUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyREZXBsU3RhdGVMaXN0fTsKCiMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKbXkgJEluY2lTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAopOwpteSAlSW5jaVN0YXRlTGlzdFJldmVyc2UgPSByZXZlcnNlICV7JEluY2lTdGF0ZUxpc3R9OwoKIyBnZXQgZ2VuZXJhbCBjYXRhbG9nIHRlc3QgbGlzdApteSAkR2VuZXJhbENhdGFsb2dMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICRHZW5lcmFsQ2F0YWxvZ0NsYXNzLAopOwpteSAlR2VuZXJhbENhdGFsb2dMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskR2VuZXJhbENhdGFsb2dMaXN0fTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCBjb25maWcgaXRlbSB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ29uZmlnSXRlbVRlc3RzID0gWwoKICAgICMgQ29uZmlnSXRlbUFkZCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgQ29uZmlnSXRlbUFkZCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGludmFsaWQgY2xhc3MgaWQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbLTFdICsgMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCBjb25maWcgaXRlbSB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayByZXR1cm5lZCBjb25maWcgaXRlbSB2YWx1ZXMpCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIExhc3RWZXJzaW9uSUQgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgY29uZmlnIGl0ZW0gdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgbnVtYmVyIGF0dHJpYnV0ZSkKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1swXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBjb25maWcgaXRlbSB3aXRoIHRoaXMgbnVtYmVyIGFscmVhZHkgZXhpc3RzIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMF0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBWZXJzaW9uQWRkIGRvZXNuJ3QgY29udGFpbnMgYWxsIGRhdGEgKGNoZWNrIHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMV0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1sxXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVmVyc2lvbkFkZCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzJdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gMiBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMl0sCiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgTGFzdFZlcnNpb25JRCAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFZlcnNpb25BZGQgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1szXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSAzIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1szXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVmVyc2lvbkFkZCBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzRdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDQgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNF0sCiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgTGFzdFZlcnNpb25JRCAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFZlcnNpb25BZGQgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s1XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gNSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s1XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbnZhbGlkIGRlcGxveW1lbnQgc3RhdGUgaWQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybmVkIHZhbHVlcykKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s2XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSA2IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gOTk5OTk5OSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s2XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBMYXN0VmVyc2lvbklEICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW52YWxpZCBpbmNpZGVudCBzdGF0ZSBpZCBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuZWQgdmFsdWVzKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzddLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDcgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+IDk5OTk5OTksCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbN10sCiAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgTGFzdFZlcnNpb25JRCAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayByZXR1cm5lZCB2YWx1ZXMpCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbOF0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gOCBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUdldCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s4XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdvcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25HZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzhdLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDggVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoZ2VuZXJhbCBjaGVjayB3aXRoIHR3byB2ZXJzaW9ucykKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s5XSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSA5IFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDkgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtR2V0ID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzldLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25HZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzldLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMSBDb25maWdJdGVtIDkgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbOV0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gOSBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIGNhbGN1bGF0aW9uIG9mIGRlcGxveW1lbnQgYW5kIGluY2lkZW50IHN0YXRlKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzEwXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSAxMCBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQbGFubmVkfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDEgQ29uZmlnSXRlbSAxMCBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbMTBdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1sxMF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gMTAgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQbGFubmVkfSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQbGFubmVkJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcmVwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1sxMF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAxIENvbmZpZ0l0ZW0gMTAgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVUeXBlICAgID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWRkIGNvbmZpZyBpdGVtIG9ubHkgZm9yIGxhdGVyIHNlYXJjaCB0ZXN0cwogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMl0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICRVc2VySURzWzJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1syXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhZGQgY29uZmlnIGl0ZW0gb25seSBmb3IgbGF0ZXIgc2VhcmNoIHRlc3RzCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyBDb25maWdJdGVtIDIgVmVyc2lvbiAxJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMiBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtR2V0ID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdIH0sCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25HZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMl0gfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDMgQ29uZmlnSXRlbSAyIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEICAgICA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgICAgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlVHlwZSAgICA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyBDb25maWdJdGVtIDIgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1syXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVUeXBlICAgID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFkZCBjb25maWcgaXRlbSBvbmx5IGZvciBsYXRlciBzZWFyY2ggdGVzdHMsIGluY2x1ZGluZyBYTUxEYXRhCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1BZGQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1syXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDMgQ29uZmlnSXRlbSAzIFZlcnNpb24gMScsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1syXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkVXNlcklEc1syXSwKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lcjEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnZHVtbXlfY3VzdG9tZXJfZm9yX3VuaXRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAxMC0wMi0xMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZTEgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAxMC0wMi0xMiAwOToxNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMl0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICRVc2VySURzWzJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhZ0tleScgID0+ICdbMV0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcnNpb24nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDdXN0b21lcjEnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50JyA9PiAnZHVtbXlfY3VzdG9tZXJfZm9yX3VuaXRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWdLZXknICA9PiAnWzFde1wnVmVyc2lvblwnfVsxXXtcJ0N1c3RvbWVyMVwnfVsxXScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGF0ZTEnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50JyA9PiAnMjAxMC0wMi0xMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhZ0tleScgID0+ICdbMV17XCdWZXJzaW9uXCd9WzFde1wnRGF0ZTFcJ31bMV0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RhdGVUaW1lMScgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQnID0+ICcyMDEwLTAyLTEyIDA5OjE0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFnS2V5JyAgPT4gJ1sxXXtcJ1ZlcnNpb25cJ31bMV17XCdEYXRlVGltZTFcJ31bMV0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhZ0tleScgPT4gJ1sxXXtcJ1ZlcnNpb25cJ31bMV0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgPT4gJFVzZXJJRHNbMl0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWRkIGNvbmZpZyBpdGVtIG9ubHkgZm9yIGxhdGVyIHNlYXJjaCB0ZXN0cwogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyA0IENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzNdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbM10gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzNdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyA0IENvbmZpZ0l0ZW0gMSBWZXJzaW9uIDEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhZGRlZCB0byBjaGVjayBoaXN0b3J5IGZ1bmN0aW9ucwogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIGNhbGN1bGF0aW9uIG9mIGRlcGxveW1lbnQgYW5kIGluY2lkZW50IHN0YXRlKQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzcwXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEhpc3RvcnlUZXN0JywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UGxhbm5lZH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBIaXN0b3J5VGVzdCBWZXJzaW9uIDInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzBdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3MF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBIaXN0b3J5VGVzdCcsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEICAgICA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgICAgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UGxhbm5lZH0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnUGxhbm5lZCcsCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlVHlwZSAgICA9PiAncHJlcHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlSUQgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ2luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gSGlzdG9yeVRlc3QgVmVyc2lvbiAyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVUeXBlICAgID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBIaXN0b3J5R2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgID0+ICdDb25maWdJdGVtQ3JlYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDEsCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgID0+ICdWZXJzaW9uQ3JlYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDYsCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgID0+ICdEZWZpbml0aW9uVXBkYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDgsCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgID0+ICdOYW1lVXBkYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDUsCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAnVW5pdFRlc3QgLSBIaXN0b3J5VGVzdCUlJywKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ0luY2lkZW50U3RhdGVVcGRhdGUnLAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlSUQgPT4gOSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0gLiAnJSUnLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICA9PiAnRGVwbG95bWVudFN0YXRlVXBkYXRlJywKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZUlEID0+IDEwLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1BsYW5uZWR9IC4gJyUlJywKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ1ZlcnNpb25DcmVhdGUnLAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlSUQgPT4gNiwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ05hbWVVcGRhdGUnLAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlSUQgPT4gNSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICdVbml0VGVzdCAtIEhpc3RvcnlUZXN0IFZlcnNpb24gMiUlVW5pdFRlc3QgLSBIaXN0b3J5VGVzdCcsCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICA9PiAnSW5jaWRlbnRTdGF0ZVVwZGF0ZScsCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGVJRCA9PiA5LAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSAuICclJScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ0RlcGxveW1lbnRTdGF0ZVVwZGF0ZScsCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGVJRCA9PiAxMCwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0gLiAnJSUnCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1BsYW5uZWR9LAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWRkZWQgZm9yIEJ1ZzQxOTYKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBjYWxjdWxhdGlvbiBvZiBkZXBsb3ltZW50IGFuZCBpbmNpZGVudCBzdGF0ZSkKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3MV0sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0MTk2JywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UGxhbm5lZH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0MTk2IFYyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQnVnZml4NDE5NiBWMicsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQxOTYgVjInLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzFdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ01haW50ZW5hbmNlJywKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBWZXJzaW9uR2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3MV0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0MTk2JywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQbGFubmVkfSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQbGFubmVkJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcmVwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnaW5jaWRlbnQnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3MV0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0MTk2IFYyJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgICAgICAgICAgRGVwbFN0YXRlICAgICAgICA9PiAnTWFpbnRlbmFuY2UnLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdNYWludGVuYW5jZScsCiAgICAgICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZSAgICAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVUeXBlICAgID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdpbmNpZGVudCcsCiAgICAgICAgICAgICAgICAgICAgWE1MRGF0YSAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYWRkZWQgZm9yIEJ1ZyA0Mzc3IC0gQ0ktQQogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtQWRkID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzcyXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQzNzcgLSBDSS1BJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1HZXQgPT4gewogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzJdLAogICAgICAgICAgICAgICAgQ2xhc3NJRCAgICAgICAgICA9PiAkQ29uZmlnSXRlbUNsYXNzSURzWzBdLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlICAgICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmVyc2lvbkdldCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzJdLAogICAgICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgID0+ICRDbGFzc0xpc3QtPnsgJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSB9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQnVnZml4NDM3NyAtIENJLUEnLAogICAgICAgICAgICAgICAgICAgIERlZmluaXRpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZUlEICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZSAgICAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERlcGxTdGF0ZVR5cGUgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZUlEICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZVR5cGUgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICAgICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGUgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlVHlwZSAgICA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIFhNTERhdGEgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGFkZGVkIGZvciBCdWcgNDM3NyAtIENJLUIKICAgIHsKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ29uZmlnSXRlbUFkZCA9PiB7CiAgICAgICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyc1s3M10sCiAgICAgICAgICAgICAgICBDbGFzc0lEID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25BZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0Mzc3IC0gQ0ktQicsCiAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDb25maWdJdGVtR2V0ID0+IHsKICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzczXSwKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1DbGFzc0lEc1swXSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgPT4gJENsYXNzTGlzdC0+eyAkQ29uZmlnSXRlbUNsYXNzSURzWzBdIH0sCiAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgIEN1ckRlcGxTdGF0ZSAgICAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICAgICAgICAgQ3VyRGVwbFN0YXRlVHlwZSA9PiAncHJvZHVjdGl2ZScsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdvcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZlcnNpb25HZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OdW1iZXJzWzczXSwKICAgICAgICAgICAgICAgICAgICBDbGFzc0lEICAgICAgICAgID0+ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LT57ICRDb25maWdJdGVtQ2xhc3NJRHNbMF0gfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQzNzcgLSBDSS1CJywKICAgICAgICAgICAgICAgICAgICBEZWZpbml0aW9uSUQgICAgID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVJRCAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGUgICAgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBEZXBsU3RhdGVUeXBlICAgID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVJRCAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGUgICAgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBDdXJEZXBsU3RhdGVUeXBlID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAgICAgICAgICAgICBJbmNpU3RhdGVJRCAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgSW5jaVN0YXRlICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEluY2lTdGF0ZVR5cGUgICAgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBYTUxEYXRhICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH0sCgpdOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIGNvbmZpZyBpdGVtIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRUZXN0Q291bnQgPSAxOwpteSBAQ29uZmlnSXRlbUlEczsKClRFU1Q6CmZvciBteSAkVGVzdCAoIEB7JENvbmZpZ0l0ZW1UZXN0c30gKSB7CgogICAgIyBjaGVjayBTb3VyY2VEYXRhIGF0dHJpYnV0ZQogICAgaWYgKCAhJFRlc3QtPntTb3VyY2VEYXRhfSB8fCByZWYgJFRlc3QtPntTb3VyY2VEYXRhfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBObyBTb3VyY2VEYXRhIGZvdW5kIGZvciB0aGlzIHRlc3QuIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgIyBleHRyYWN0IHNvdXJjZSBkYXRhCiAgICBteSAkU291cmNlRGF0YSA9ICRUZXN0LT57U291cmNlRGF0YX07CgogICAgIyBhZGQgYSBuZXcgY29uZmlnIGl0ZW0KICAgIG15ICRDb25maWdJdGVtSUQ7CiAgICBpZiAoICRTb3VyY2VEYXRhLT57Q29uZmlnSXRlbUFkZH0gKSB7CgogICAgICAgICMgYWRkIHRoZSBuZXcgY29uZmlnIGl0ZW0KICAgICAgICAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57Q29uZmlnSXRlbUFkZH0gfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJENvbmZpZ0l0ZW1JRCkgewogICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkQ29uZmlnSXRlbUlEOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHRoZSBjb25maWcgaXRlbQogICAgaWYgKCAkVGVzdC0+e1JlZmVyZW5jZURhdGF9ICYmICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntDb25maWdJdGVtR2V0fSApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENvbmZpZ0l0ZW1BZGQoKSAtIEFkZCBuZXcgY29uZmlnIGl0ZW0uIEluc2VydCBzdWNjZXNzLiIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUIGlmICEkQ29uZmlnSXRlbUlEOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ29uZmlnSXRlbUFkZCgpIC0gQWRkIG5ldyBjb25maWcgaXRlbS4gUmV0dXJuIGZhbHNlLiIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFkZCBhbGwgZGVmaW5lZCB2ZXJzaW9ucwogICAgbXkgQFZlcnNpb25JRHM7CiAgICBteSAlVmVyc2lvbklEc1NlZW47CiAgICBpZiAoICRTb3VyY2VEYXRhLT57VmVyc2lvbkFkZH0gKSB7CgogICAgICAgIGZvciBteSAkVmVyc2lvbiAoIEB7ICRTb3VyY2VEYXRhLT57VmVyc2lvbkFkZH0gfSApIHsKCiAgICAgICAgICAgIGlmICgkQ29uZmlnSXRlbUlEKSB7CiAgICAgICAgICAgICAgICAkVmVyc2lvbi0+e0NvbmZpZ0l0ZW1JRH0gPSAkQ29uZmlnSXRlbUlEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBhIG5ldyB2ZXJzaW9uCiAgICAgICAgICAgIG15ICRWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgICAgICAgICAgICAgICV7JFZlcnNpb259LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRWZXJzaW9uSUQpIHsKICAgICAgICAgICAgICAgIHB1c2ggQFZlcnNpb25JRHMsICRWZXJzaW9uSUQgaWYgISRWZXJzaW9uSURzU2VlbnskVmVyc2lvbklEfSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdGhlIGNvbmZpZyBpdGVtCiAgICBteSAkQ29uZmlnSXRlbURhdGE7CiAgICBpZiAoICRUZXN0LT57UmVmZXJlbmNlRGF0YX0gJiYgJFRlc3QtPntSZWZlcmVuY2VEYXRhfS0+e0NvbmZpZ0l0ZW1HZXR9ICkgewoKICAgICAgICAjIGdldCB0aGUgY29uZmlnIGl0ZW0gZGF0YQogICAgICAgICRDb25maWdJdGVtRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkQ29uZmlnSXRlbURhdGEgKSB7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDb25maWdJdGVtR2V0KCkgLSBnZXQgY29uZmlnIGl0ZW0gZGF0YS4iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGFsbCBjb25maWcgaXRlbSBhdHRyaWJ1dGVzCiAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntDb25maWdJdGVtR2V0fSB9ICkgewoKICAgICAgICAgICAgIyBzZXQgY29udGVudCBpZiB2YWx1ZXMgYXJlIHVuZGVmCiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJENvbmZpZ0l0ZW1EYXRhLT57JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbURhdGEtPnskQXR0cmlidXRlfSA9ICdVTkRFRi11bml0dGVzdCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57Q29uZmlnSXRlbUdldH0tPnskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgICAgICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntDb25maWdJdGVtR2V0fS0+eyRBdHRyaWJ1dGV9ID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBhdHRyaWJ1dGVzCiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRDb25maWdJdGVtRGF0YS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJFRlc3QtPntSZWZlcmVuY2VEYXRhfS0+e0NvbmZpZ0l0ZW1HZXR9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDb25maWdJdGVtR2V0KCkgLSAkQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdGhlIHZlcnNpb25zCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntSZWZlcmVuY2VEYXRhfQogICAgICAgICYmICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntWZXJzaW9uR2V0fQogICAgICAgICYmIEB7ICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntWZXJzaW9uR2V0fSB9CiAgICAgICAgKQogICAgewoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHNjYWxhciBAVmVyc2lvbklEcywKICAgICAgICAgICAgc2NhbGFyIEB7ICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntWZXJzaW9uR2V0fSB9LAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBWZXJzaW9uQWRkKCkgLSBjb3JyZWN0IG51bWJlciBvZiB2ZXJzaW9ucyIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUIGlmICEkQ29uZmlnSXRlbUlEOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgc2NhbGFyIEBWZXJzaW9uSURzLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBWZXJzaW9uQWRkKCkgLSBubyB2ZXJzaW9ucyBleGl0cyIsCiAgICAgICAgKTsKICAgIH0KCiAgICBuZXh0IFRFU1QgaWYgISRUZXN0LT57UmVmZXJlbmNlRGF0YX07CiAgICBuZXh0IFRFU1QgaWYgISRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntWZXJzaW9uR2V0fTsKCiAgICBteSAkQ291bnRlciAgICAgICAgICAgPSAwOwogICAgbXkgJExhc3RWZXJzaW9uSURNdXN0ID0gJ1VOREVGLXVuaXR0ZXN0JzsKCiAgICAjIFJlZnJlc2ggSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50IGNhY2hlIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHByZXZpb3VzbHkgY2FjaGVkIHZhbHVlcy4KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJ0lUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudCcsCiAgICApOwoKICAgIFZFUlNJT05JRDoKICAgIGZvciBteSAkVmVyc2lvbklEIChAVmVyc2lvbklEcykgewoKICAgICAgICAjIGdldCB0aGlzIHZlcnNpb24KICAgICAgICBteSAkVmVyc2lvbkRhdGEgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICAgICAgVmVyc2lvbklEICA9PiAkVmVyc2lvbklELAogICAgICAgICAgICBYTUxEYXRhR2V0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFZlcnNpb25EYXRhICkgewoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVmVyc2lvbkdldCgpIC0gZ2V0IHZlcnNpb24gZGF0YS4iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFZFUlNJT05JRDsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSBsYXN0IHZlcnNpb24gaWQKICAgICAgICAkTGFzdFZlcnNpb25JRE11c3QgPSAkVmVyc2lvbkRhdGEtPntWZXJzaW9uSUR9OwoKICAgICAgICAjIGNoZWNrIGFsbCB2ZXJzaW9uIGF0dHJpYnV0ZXMKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57VmVyc2lvbkdldH0tPlskQ291bnRlcl0gfSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgbmVlZGVkIGF0dHJpYnV0ZXMKICAgICAgICAgICAgbXkgJFZlcnNpb25BdHRyaWJ1dGUgICA9ICRWZXJzaW9uRGF0YS0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICBteSAkUmVmZXJlbmNlQXR0cmlidXRlID0gJFRlc3QtPntSZWZlcmVuY2VEYXRhfS0+e1ZlcnNpb25HZXR9LT5bJENvdW50ZXJdLT57JEF0dHJpYnV0ZX07CgogICAgICAgICAgICAjIHNldCBjb250ZW50IGlmIHZhbHVlcyBhcmUgdW5kZWYKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkVmVyc2lvbkF0dHJpYnV0ZSApIHsKICAgICAgICAgICAgICAgICRWZXJzaW9uQXR0cmlidXRlID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICFkZWZpbmVkICRSZWZlcmVuY2VBdHRyaWJ1dGUgKSB7CiAgICAgICAgICAgICAgICAkUmVmZXJlbmNlQXR0cmlidXRlID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBhdHRyaWJ1dGVzCiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICRWZXJzaW9uQXR0cmlidXRlLAogICAgICAgICAgICAgICAgJFJlZmVyZW5jZUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFZlcnNpb25HZXQoKSAtICRBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJENvdW50ZXIrKzsKICAgIH0KCiAgICAjIHByZXBhcmUgbGFzdCB2ZXJzaW9uIGlkCiAgICBteSAkTGFzdFZlcnNpb25JREFjdHVhbCA9ICdVTkRFRi11bml0dGVzdCc7CiAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0xhc3RWZXJzaW9uSUR9ICkgewogICAgICAgICRMYXN0VmVyc2lvbklEQWN0dWFsID0gJENvbmZpZ0l0ZW1EYXRhLT57TGFzdFZlcnNpb25JRH07CiAgICB9CgogICAgIyBjaGVjayBsYXN0IHZlcnNpb24gaWQKICAgICRTZWxmLT5JcygKICAgICAgICAkQ29uZmlnSXRlbURhdGEtPntMYXN0VmVyc2lvbklEfSwKICAgICAgICAkTGFzdFZlcnNpb25JRE11c3QsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogbGFzdCB2ZXJzaW9uIGlkIGlkZW50aWNhbCIsCiAgICApOwoKICAgICMgY2hlY2sgaGlzdG9yeSBlbnRyaWVzCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntSZWZlcmVuY2VEYXRhfQogICAgICAgICYmICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntIaXN0b3J5R2V0fQogICAgICAgICYmIEB7ICRUZXN0LT57UmVmZXJlbmNlRGF0YX0tPntIaXN0b3J5R2V0fSB9CiAgICAgICAgKQogICAgewogICAgICAgIG15ICRDb21wbGV0ZUhpc3RvcnkgPSAkQ29uZmlnSXRlbU9iamVjdC0+SGlzdG9yeUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBuciBvZiBoaXN0b3J5IGVudHJpZXMKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHNjYWxhciBAeyAkVGVzdC0+e1JlZmVyZW5jZURhdGF9LT57SGlzdG9yeUdldH0gfSwKICAgICAgICAgICAgc2NhbGFyIEB7JENvbXBsZXRlSGlzdG9yeX0sCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IG5yIG9mIGhpc3RvcnkgZW50cmllcyIsCiAgICAgICAgKTsKCiAgICAgICAgQ0hFQ0tOUjogZm9yIG15ICRDaGVja05yICggMCAuLiAkI3skQ29tcGxldGVIaXN0b3J5fSApIHsKICAgICAgICAgICAgbXkgJENoZWNrID0gJFRlc3QtPntSZWZlcmVuY2VEYXRhfS0+e0hpc3RvcnlHZXR9LT5bJENoZWNrTnJdOwogICAgICAgICAgICBteSAkRGF0YSAgPSAkQ29tcGxldGVIaXN0b3J5LT5bJENoZWNrTnJdOwoKICAgICAgICAgICAgbmV4dCBDSEVDS05SIGlmICEoICRDaGVjayAmJiAkRGF0YSApOwoKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskQ2hlY2t9ICkgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaGlzdG9yeSBkYXRhCiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJENoZWNrLT57JEtleX0sCiAgICAgICAgICAgICAgICAgICAgJERhdGEtPnskS2V5fSwKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiAkS2V5IiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KY29udGludWUgewogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCBmb3IgYnVnZml4IDQzNzcKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKewoKICAgIG15ICRDSTEgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUxvb2t1cCgKICAgICAgICBDb25maWdJdGVtTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1s3Ml0sCiAgICApOwoKICAgIG15ICRDSTIgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUxvb2t1cCgKICAgICAgICBDb25maWdJdGVtTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1s3M10sCiAgICApOwoKICAgICMgbGluayB0aGUgQ0kgd2l0aCBhIENJCiAgICBteSAkTGlua1Jlc3VsdCA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkKAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAkQ0kxLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFRhcmdldEtleSAgICA9PiAkQ0kyLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnRGVwZW5kc09uJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgIyB1cGRhdGUgaW5jaWRlbnQgc3RhdGUgb2YgQ0kxCiAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTEsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQzNzcgLSBDSS1BJywKICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgdmVyc2lvbiBjb3VsZCBiZSBhZGRlZAogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBWZXJzaW9uQWRkKCkgZm9yICRDSTEgLSBTZXQgdG8gJ0luY2lkZW50JyIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmb3IgQ0kxCiAgICBteSAkVmVyc2lvblJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ0kxLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGluY2lkZW50IHN0YXRlIG9mIENJMSBpcyAnSW5jaWRlbnQnCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFZlcnNpb25SZWYtPntDdXJJbmNpU3RhdGV9LAogICAgICAgICdJbmNpZGVudCcsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiBDSSAkQ0kxIiwKICAgICk7CgogICAgIyBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZvciBDSTIKICAgICRWZXJzaW9uUmVmID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTIsCiAgICApOwoKICAgICMgY2hlY2sgaWYgaW5jaWRlbnQgc3RhdGUgb2YgQ0kyIGlzICdXYXJuaW5nJwogICAgJFNlbGYtPklzKAogICAgICAgICRWZXJzaW9uUmVmLT57Q3VySW5jaVN0YXRlfSwKICAgICAgICAnV2FybmluZycsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiBDSSAkQ0kyIiwKICAgICk7CgogICAgIyB1cGRhdGUgaW5jaWRlbnQgc3RhdGUgb2YgQ0kyIHRvICdJbmNpZGVudCcKICAgICRWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENJMiwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQnVnZml4NDM3NyAtIENJLUInLAogICAgICAgIERlZmluaXRpb25JRCA9PiAkQ29uZmlnSXRlbURlZmluaXRpb25JRHNbMF0sCiAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle0luY2lkZW50fSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBpZiB2ZXJzaW9uIGNvdWxkIGJlIGFkZGVkCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVmVyc2lvbklELAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFZlcnNpb25BZGQoKSBmb3IgQ0kgJENJMiAtIFNldCB0byAnSW5jaWRlbnQnIiwKICAgICk7CgogICAgIyBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZvciBDSTIKICAgICRWZXJzaW9uUmVmID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTIsCiAgICApOwoKICAgICMgY2hlY2sgaWYgaW5jaWRlbnQgc3RhdGUgb2YgQ0kyIGlzICdJbmNpZGVudCcKICAgICRTZWxmLT5JcygKICAgICAgICAkVmVyc2lvblJlZi0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgJ0luY2lkZW50JywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDdXJyZW50IGluY2lkZW50IHN0YXRlIG9mIENJICRDSTIiLAogICAgKTsKCiAgICAjIHVwZGF0ZSBpbmNpZGVudCBzdGF0ZSBvZiBDSTEgdG8gJ09wZXJhdGlvbmFsJwogICAgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ0kxLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXg0Mzc3IC0gQ0ktQScsCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIHZlcnNpb24gY291bGQgYmUgYWRkZWQKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVmVyc2lvbkFkZCgpIGZvciBDSSAkQ0kxIC0gU2V0IHRvICdPcGVyYXRpb25hbCciLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZm9yIENJMQogICAgJFZlcnNpb25SZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENJMSwKICAgICk7CgogICAgIyBjaGVjayBpZiBpbmNpZGVudCBzdGF0ZSBvZiBDSTEgaXMgJ1dhcm5pbmcnIChiZWNhdXNlIG9mIGxpbmtlZCBDSTIgaW4gc3RhdGUgJ2luY2lkZW50JykKICAgICRTZWxmLT5JcygKICAgICAgICAkVmVyc2lvblJlZi0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgJ1dhcm5pbmcnLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgb2YgQ0kgJENJMSIsCiAgICApOwoKICAgICMgdXBkYXRlIGluY2lkZW50IHN0YXRlIG9mIENJMiB0byAnT3BlcmF0aW9uYWwnCiAgICAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTIsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdVbml0VGVzdCAtIEJ1Z2ZpeDQzNzcgLSBDSS1CJywKICAgICAgICBEZWZpbml0aW9uSUQgPT4gJENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzWzBdLAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgdmVyc2lvbiBjb3VsZCBiZSBhZGRlZAogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBWZXJzaW9uQWRkKCkgZm9yIENJICRDSTIgLSBTZXQgdG8gJ09wZXJhdGlvbmFsJyIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmb3IgQ0kxCiAgICAkVmVyc2lvblJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ0kxLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGluY2lkZW50IHN0YXRlIG9mIENJMSBpcyAnT3BlcmF0aW9uYWwnCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFZlcnNpb25SZWYtPntDdXJJbmNpU3RhdGV9LAogICAgICAgICdPcGVyYXRpb25hbCcsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiBDSSAkQ0kxIiwKICAgICk7CgogICAgIyBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZvciBDSTIKICAgICRWZXJzaW9uUmVmID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDSTIsCiAgICApOwoKICAgICMgY2hlY2sgaWYgaW5jaWRlbnQgc3RhdGUgb2YgQ0kyIGlzICdXYXJuaW5nJwogICAgJFNlbGYtPklzKAogICAgICAgICRWZXJzaW9uUmVmLT57Q3VySW5jaVN0YXRlfSwKICAgICAgICAnT3BlcmF0aW9uYWwnLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgb2YgQ0kgJENJMiIsCiAgICApOwoKICAgICMgaW5jcmVhc2UgdGhlIHRlc3QgY291bnRlcgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCBmb3IgYnVnZml4IDEwMzU2CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCnsKCiAgICBteSAkQ0kxID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1Mb29rdXAoCiAgICAgICAgQ29uZmlnSXRlbU51bWJlciA9PiAkQ29uZmlnSXRlbU51bWJlcnNbNzJdLAogICAgKTsKCiAgICAjIGFkZCBhIHZlcnNpb24sIHNldCBpbmNpZGVudCBzdGF0ZSB0byBpbmNpZGVudAogICAgbXkgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ0kxLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnVW5pdFRlc3QgLSBCdWdmaXgxMDM1NicsCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICRDb25maWdJdGVtRGVmaW5pdGlvbklEc1swXSwKICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIHZlcnNpb24gY291bGQgYmUgYWRkZWQKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVmVyc2lvbkFkZCgpIGZvciAkQ0kxIC0gU2V0IHRvICdJbmNpZGVudCciLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZm9yIENJMQogICAgbXkgJFZlcnNpb25SZWYgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENJMSwKICAgICk7CgogICAgIyBjaGVjayBpZiBpbmNpZGVudCBzdGF0ZSBvZiBDSTEgaXMgJ0luY2lkZW50JwogICAgJFNlbGYtPklzKAogICAgICAgICRWZXJzaW9uUmVmLT57Q3VySW5jaVN0YXRlfSwKICAgICAgICAnSW5jaWRlbnQnLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgb2YgQ0kgJENJMSIsCiAgICApOwoKICAgICMgZGVsZXRlIHRoZSBsYXN0IHZlcnNpb24KICAgIG15ICRWZXJzaW9uRGVsZXRlU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uRGVsZXRlKAogICAgICAgIFZlcnNpb25JRCA9PiAkVmVyc2lvblJlZi0+e1ZlcnNpb25JRH0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgdmVyc2lvbiBjb3VsZCBiZSBkZWxldGVkCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVmVyc2lvbkRlbGV0ZVN1Y2Nlc3MsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVmVyc2lvbkRlbGV0ZSgpIGZvciAkQ0kxJyIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBoaXN0b3J5CiAgICBteSAkSGlzdG9yeVJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5IaXN0b3J5R2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ0kxLAogICAgKTsKCiAgICBteSAkTGFzdEhpc3RvcnlFbnRyeSA9IHBvcCBAeyRIaXN0b3J5UmVmfTsKCiAgICAjIGNoZWNrIGlmIGxhc3QgaGlzdG9yeSBlbnRyeSBoYXMgdGhlIGNvcnJlY3QgaGlzdG9yeSB0eXBlCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJExhc3RIaXN0b3J5RW50cnktPntIaXN0b3J5VHlwZX0sCiAgICAgICAgJ1ZlcnNpb25EZWxldGUnLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEhpc3RvcnlUeXBlIG9mIGxhc3QgdmVyc2lvbiBvZiBDSSAkQ0kxIiwKICAgICk7CgogICAgIyBpbmNyZWFzZSB0aGUgdGVzdCBjb3VudGVyCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCBjb25maWcgaXRlbSBzZWFyY2ggdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgQFNlYXJjaFRlc3RzID0gKAoKICAgICMgc2VhcmNoIEFMTCBjb25maWcgaXRlbXMgaW4gdGhlIHR3byB0ZXN0IGNsYXNzZXMKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbnVtYmVyIHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgTnVtYmVyID0+ICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIG51bWJlciBwYXJhbSB3aXRoIHdpbGRjYXJkcwogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE51bWJlciA9PiAnKicgLiAkQ29uZmlnSXRlbU51bWJlcnNbNTBdIC4gJyonLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBudW1iZXIgcGFyYW0gd2l0aCB3aWxkY2FyZHMgYnV0IHdpdGggZGVhY3RpdmF0ZWQgd2lsZGNhcmQgZmVhdHVyZQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE51bWJlciAgICAgICAgID0+ICcqJyAuICRDb25maWdJdGVtTnVtYmVyc1s1MF0gLiAnKicsCiAgICAgICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDAsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGRlcGxveW1lbnQgc3RhdGUgcGFyYW0gaW4gY29tYmluYXRpb24gb2YgdGhlIGNsYXNzIGlkCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBEZXBsU3RhdGVJRHMgPT4gWyAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgZGVwbG95bWVudCBzdGF0ZSBwYXJhbSBpbiBjb21iaW5hdGlvbiBvZiB0aGUgY2xhc3MgaWQKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyAgICAgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIERlcGxTdGF0ZUlEcyA9PiBbICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgZGVwbG95bWVudCBzdGF0ZSBwYXJhbSBpbiBjb21iaW5hdGlvbiBvZiB0aGUgY2xhc3MgaWQKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyAgICAgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIERlcGxTdGF0ZUlEcyA9PiBbCiAgICAgICAgICAgICAgICAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBpbmNpZGVudCBzdGF0ZSBwYXJhbSBpbiBjb21iaW5hdGlvbiBvZiB0aGUgY2xhc3MgaWQKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyAgICAgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIEluY2lTdGF0ZUlEcyA9PiBbICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgaW5jaWRlbnQgc3RhdGUgcGFyYW0gaW4gY29tYmluYXRpb24gb2YgdGhlIGNsYXNzIGlkCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBJbmNpU3RhdGVJRHMgPT4gWyAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9IF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGluY2lkZW50IHN0YXRlIHBhcmFtIGluIGNvbWJpbmF0aW9uIG9mIHRoZSBjbGFzcyBpZAogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzICAgICA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgSW5jaVN0YXRlSURzID0+IFsKICAgICAgICAgICAgICAgICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgICAgICAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBvcmRlciBieSBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzICAgICAgICAgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWydDcmVhdGVCeSddLAogICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsnVXAnXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbGltaXQgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgTGltaXQgICAgPT4gMTAwLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBMaW1pdCAgICA9PiAzLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBMaW1pdCAgICA9PiAyLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBMaW1pdCAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBMaW1pdCAgICA9PiAwLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBjcmVhdGUgYnkgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDcmVhdGVCeSA9PiBbICRVc2VySURzWzJdIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGNyZWF0ZSBieSBwYXJhbSBpbiBjb21iaW5hdGlvbiBvZiB0aGUgY2xhc3MgaWQKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gWyAkVXNlcklEc1sxXSwgICAgICAgICAgICAkVXNlcklEc1syXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBjaGFuZ2UgYnkgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VCeSA9PiBbICRVc2VySURzWzJdIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGNoYW5nZSBieSBwYXJhbSBpbiBjb21iaW5hdGlvbiBvZiB0aGUgY2xhc3MgaWQKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsgJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCcsICdDb25maWdJdGVtU2VhcmNoJyBdLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gWzFdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBjaGFuZ2UgYnkgcGFyYW0gaW4gY29tYmluYXRpb24gb2YgdGhlIGNsYXNzIGlkCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbICdDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnLCAnQ29uZmlnSXRlbVNlYXJjaCcgXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IFsgJFVzZXJJRHNbMV0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgY2hhbmdlIGJ5IHBhcmFtIGluIGNvbWJpbmF0aW9uIG9mIHRoZSBjbGFzcyBpZAogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWyAnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJywgJ0NvbmZpZ0l0ZW1TZWFyY2gnIF0sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiBbICRVc2VySURzWzJdIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHNlYXJjaCBBTEwgY29uZmlnIGl0ZW1zIGluIHRoZSB0d28gdGVzdCBjbGFzc2VzIHVzaW5nIHRoZSB2ZXJzaW9uIHNlYXJjaAogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBuYW1lIHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyBDb25maWdJdGVtIDEgVmVyc2lvbiAxJywKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIG5hbWUgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAnVW5pdFRlc3QgLSBDbGFzcyAzIENvbmZpZ0l0ZW0gMyBWZXJzaW9uIDEnLAogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbmFtZSBwYXJhbSB3aXRoIGFuIHdpbGRjYXJkCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1VuaXRUZXN0IC0gKiAxJywKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIG5hbWUgcGFyYW0gd2l0aCBhbiB3aWxkY2FyZCBhbmQgYSBwcmV2aW91cyB2ZXJzaW9uIHNlYXJjaAogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICA9PiAnVW5pdFRlc3QgLSAqIDEnLAogICAgICAgICAgICBDbGFzc0lEcyAgICAgICAgICAgICAgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIFByZXZpb3VzVmVyc2lvblNlYXJjaCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBuYW1lIHBhcmFtIHdpdGggd2lsZGNhcmRzCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyonLAogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbmFtZSBwYXJhbSB3aXRoIHdpbGRjYXJkcyBidXQgd2l0aCBkZWFjdGl2YXRlZCB3aWxkY2FyZCBmZWF0dXJlCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyonLAogICAgICAgICAgICBDbGFzc0lEcyAgICAgICA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbGFzdCB2ZXJzaW9uIHNlYXJjaAogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgID0+ICdVbml0VGVzdCAtIENsYXNzIDMgQ29uZmlnSXRlbSAyIFZlcnNpb24gMScsCiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBQcmV2aW91c1ZlcnNpb25TZWFyY2ggcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgPT4gJ1VuaXRUZXN0IC0gQ2xhc3MgMyBDb25maWdJdGVtIDIgVmVyc2lvbiAxJywKICAgICAgICAgICAgQ2xhc3NJRHMgICAgICAgICAgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgbGltaXQgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgTGltaXQgICAgPT4gMTAwLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBMaW1pdCAgICA9PiAzLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBMaW1pdCAgICA9PiAyLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBsaW1pdCBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBMaW1pdCAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBkZXBsb3ltZW50IHN0YXRlIHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBEZXBsU3RhdGVJRHMgPT4gWwogICAgICAgICAgICAgICAgJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgICAgICAgICAgJERlcGxTdGF0ZUxpc3RSZXZlcnNle01haW50ZW5hbmNlfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTBdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgZGVwbG95bWVudCBzdGF0ZSBwYXJhbQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzICAgICA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgRGVwbFN0YXRlSURzID0+IFsgJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259IF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGRlcGxveW1lbnQgc3RhdGUgcGFyYW0KICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyAgICAgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIERlcGxTdGF0ZUlEcyA9PiBbICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0gXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgZGVwbG95bWVudCBzdGF0ZSBwYXJhbSB3aXRoIGFjdGl2YXRlZCBwcmV2aW91cyB2ZXJzaW9uIHNlYXJjaAogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzICAgICA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgRGVwbFN0YXRlSURzID0+IFsKICAgICAgICAgICAgICAgICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICAgICAgICAgICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFByZXZpb3VzVmVyc2lvblNlYXJjaCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBkZXBsb3ltZW50IHN0YXRlIHBhcmFtIHdpdGggYWN0aXZhdGVkIHByZXZpb3VzIHZlcnNpb24gc2VhcmNoCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgICAgICAgICAgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBEZXBsU3RhdGVJRHMgICAgICAgICAgPT4gWyAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0gXSwKICAgICAgICAgICAgUHJldmlvdXNWZXJzaW9uU2VhcmNoID0+IDEsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGRlcGxveW1lbnQgc3RhdGUgcGFyYW0gd2l0aCBhY3RpdmF0ZWQgcHJldmlvdXMgdmVyc2lvbiBzZWFyY2gKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyAgICAgICAgICAgICAgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIERlcGxTdGF0ZUlEcyAgICAgICAgICA9PiBbICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtNYWludGVuYW5jZX0gXSwKICAgICAgICAgICAgUHJldmlvdXNWZXJzaW9uU2VhcmNoID0+IDEsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGluY2lkZW50IHN0YXRlIHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBJbmNpU3RhdGVJRHMgPT4gWwogICAgICAgICAgICAgICAgJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGluY2lkZW50IHN0YXRlIHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBJbmNpU3RhdGVJRHMgPT4gWyAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9IF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzYwXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGluY2lkZW50IHN0YXRlIHBhcmFtCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBJbmNpU3RhdGVJRHMgPT4gWyAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9IF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgdGhlIGluY2lkZW50IHN0YXRlIHBhcmFtIHdpdGggYWN0aXZhdGVkIHByZXZpb3VzIHZlcnNpb24gc2VhcmNoCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ1ZlcnNpb25TZWFyY2gnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgICAgID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBJbmNpU3RhdGVJRHMgPT4gWwogICAgICAgICAgICAgICAgJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgICAgICAgICAgICAgICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFByZXZpb3VzVmVyc2lvblNlYXJjaCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MF0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1MV0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s2MF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IHRoZSBpbmNpZGVudCBzdGF0ZSBwYXJhbSB3aXRoIGFjdGl2YXRlZCBwcmV2aW91cyB2ZXJzaW9uIHNlYXJjaAogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydWZXJzaW9uU2VhcmNoJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzICAgICAgICAgICAgICA9PiBbICRDb25maWdJdGVtQ2xhc3NJRHNbMl0sICRDb25maWdJdGVtQ2xhc3NJRHNbM10gXSwKICAgICAgICAgICAgSW5jaVN0YXRlSURzICAgICAgICAgID0+IFsgJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSBdLAogICAgICAgICAgICBQcmV2aW91c1ZlcnNpb25TZWFyY2ggPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTFdLAogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNjBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCB0aGUgaW5jaWRlbnQgc3RhdGUgcGFyYW0gd2l0aCBhY3RpdmF0ZWQgcHJldmlvdXMgdmVyc2lvbiBzZWFyY2gKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnVmVyc2lvblNlYXJjaCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyAgICAgICAgICAgICAgPT4gWyAkQ29uZmlnSXRlbUNsYXNzSURzWzJdLCAkQ29uZmlnSXRlbUNsYXNzSURzWzNdIF0sCiAgICAgICAgICAgIEluY2lTdGF0ZUlEcyAgICAgICAgICA9PiBbICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtJbmNpZGVudH0gXSwKICAgICAgICAgICAgUHJldmlvdXNWZXJzaW9uU2VhcmNoID0+IDEsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUwXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUxXSwKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKEN1c3RvbWVyMSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFsgJENvbmZpZ0l0ZW1DbGFzc0lEc1syXSwgJENvbmZpZ0l0ZW1DbGFzc0lEc1szXSBdLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiBbICRVc2VySURzWzJdIF0sCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0N1c3RvbWVyMSd9WzFdeydDb250ZW50J30iID0+ICdkdW1teV9jdXN0b21lcl9mb3JfdW5pdGVzdCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAoKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IiA9PiAnMjAxMC0wMi0xMicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAoKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZVRpbWUxKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGVUaW1lMSd9WzFdeydDb250ZW50J30iID0+ICcyMDEwLTAyLTEyIDA5OjE0JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCgogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChDdXN0b21lcjEsIERhdGUxLCBEYXRlVGltZTEpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnQ3VzdG9tZXIxJ31bMV17J0NvbnRlbnQnfSIgPT4gJ2R1bW15X2N1c3RvbWVyX2Zvcl91bml0ZXN0JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iID0+ICcyMDEwLTAyLTEyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlVGltZTEnfVsxXXsnQ29udGVudCd9IiA9PiAnMjAxMC0wMi0xMiAwOToxNCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAoKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsIDwsIGZhbHNlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnPCcgPT4gJzIwMTAtMDItMTInLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAoKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsIDwsIHRydWUpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICc8JyA9PiAnMjAxMC0wMi0xMycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCgogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPD0sIGZhbHNlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnPD0nID0+ICcyMDEwLTAyLTExJywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKERhdGUxLCA8PSwgdHJ1ZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJzw9JyA9PiAnMjAxMC0wMi0xMicsCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCgogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPD0sIHRydWUpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICc8PScgPT4gJzIwMTAtMDItMTMnLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAoKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsID0sIGZhbHNlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnPScgPT4gJzIwMTAtMDItMTEnLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPSwgdHJ1ZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJz0nID0+ICcyMDEwLTAyLTEyJywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsICE9LCBmYWxzZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJyE9JyA9PiAnMjAxMC0wMi0xMicsCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKERhdGUxLCAhPSwgdHJ1ZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJyE9JyA9PiAnMjAxMC0wMi0xMycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzUyXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIHRlc3QgQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkKCkgd2l0aCAnV2hhdCcgKERhdGUxLCA+PSwgZmFsc2UpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICc+PScgPT4gJzIwMTAtMDItMTMnLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPj0sIHRydWUpCiAgICB7CiAgICAgICAgRnVuY3Rpb24gICA9PiBbJ0NvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCddLAogICAgICAgIFNlYXJjaERhdGEgPT4gewogICAgICAgICAgICBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcywKICAgICAgICAgICAgV2hhdCAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJbMV17J1ZlcnNpb24nfVsxXXsnRGF0ZTEnfVsxXXsnQ29udGVudCd9IgogICAgICAgICAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICc+PScgPT4gJzIwMTAtMDItMTInLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAoKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsID49LCB0cnVlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnPj0nID0+ICcyMDEwLTAyLTExJywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsID4sIGZhbHNlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnPicgPT4gJzIwMTAtMDItMTInLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggJ1doYXQnIChEYXRlMSwgPiwgdHJ1ZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJz4nID0+ICcyMDEwLTAyLTExJywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAkQ29uZmlnSXRlbU51bWJlcnNbNTJdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsIC1iZXR3ZWVuLCBmYWxzZSkKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBXaGF0ICAgICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIlsxXXsnVmVyc2lvbid9WzFdeydEYXRlMSd9WzFdeydDb250ZW50J30iCiAgICAgICAgICAgICAgICAgICAgICAgID0+IHsgJy1iZXR3ZWVuJyA9PiBbICcyMDEwLTAxLTAxJywgJzIwMTAtMDEtMzEnIF0gfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgIF0sCiAgICB9LAoKICAgICMgdGVzdCBDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoKSB3aXRoICdXaGF0JyAoRGF0ZTEsIC1iZXR3ZWVuLCB0cnVlKQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIFdoYXQgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiWzFdeydWZXJzaW9uJ31bMV17J0RhdGUxJ31bMV17J0NvbnRlbnQnfSIKICAgICAgICAgICAgICAgICAgICAgICAgPT4geyAnLWJldHdlZW4nID0+IFsgJzIwMTAtMDItMDEnLCAnMjAxMC0wMi0zMScgXSB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyc1s1Ml0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggTmFtZSA9IDAgd2l0aG91dCBhbnkgd2lsZGNhcmRzCiAgICAjIHNob3VsZCByZXR1cm4gbm8gcmVzdWx0cwogICAgIyBCdWdmaXgjIDg4ODEKICAgIHsKICAgICAgICBGdW5jdGlvbiAgID0+IFsnQ29uZmlnSXRlbVNlYXJjaEV4dGVuZGVkJ10sCiAgICAgICAgU2VhcmNoRGF0YSA9PiB7CiAgICAgICAgICAgIENsYXNzSURzID0+IFxAQ29uZmlnSXRlbUNsYXNzSURzLAogICAgICAgICAgICBOYW1lICAgICA9PiAwLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgXSwKICAgIH0sCgogICAgIyB0ZXN0IENvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgpIHdpdGggTnVtYmVyID0gMCB3aXRob3V0IGFueSB3aWxkY2FyZHMKICAgICMgc2hvdWxkIHJldHVybiBubyByZXN1bHRzCiAgICAjIEJ1Z2ZpeCMgODg4MQogICAgewogICAgICAgIEZ1bmN0aW9uICAgPT4gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXSwKICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgQ2xhc3NJRHMgPT4gXEBDb25maWdJdGVtQ2xhc3NJRHMsCiAgICAgICAgICAgIE51bWJlciAgID0+IDAsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICBdLAogICAgfSwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCBjb25maWcgaXRlbSBzZWFyY2ggdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyAkU2VhcmNoVGVzdENvdW50IHByb3ZpZGVzIGdyb3VwaW5nIG9mIHRlc3QgY2FzZXMKbXkgJFNlYXJjaFRlc3RDb3VudCA9IDE7CgpURVNUOgpmb3IgbXkgJFRlc3QgKEBTZWFyY2hUZXN0cykgewoKICAgICMgY2hlY2sgU2VhcmNoRGF0YSBhdHRyaWJ1dGUKICAgIGlmICggISRUZXN0LT57U2VhcmNoRGF0YX0gfHwgcmVmICRUZXN0LT57U2VhcmNoRGF0YX0gbmUgJ0hBU0gnICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIlNlYXJjaFRlc3QgJFNlYXJjaFRlc3RDb3VudDogTm8gU2VhcmNoRGF0YSBmb3VuZCBmb3IgdGhpcyB0ZXN0LiIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgIGlmICggISRUZXN0LT57RnVuY3Rpb259IHx8IHJlZiAkVGVzdC0+e0Z1bmN0aW9ufSBuZSAnQVJSQVknIHx8ICFAeyAkVGVzdC0+e0Z1bmN0aW9ufSB9ICkgewogICAgICAgICRUZXN0LT57RnVuY3Rpb259ID0gWydDb25maWdJdGVtU2VhcmNoRXh0ZW5kZWQnXTsKICAgIH0KCiAgICBmb3IgbXkgJEZ1bmN0aW9uICggQHsgJFRlc3QtPntGdW5jdGlvbn0gfSApIHsKCiAgICAgICAgIyBzdGFydCBzZWFyY2gKICAgICAgICBteSAkQ29uZmlnSXRlbUxpc3QgPSAkQ29uZmlnSXRlbU9iamVjdC0+JEZ1bmN0aW9uKAogICAgICAgICAgICAleyAkVGVzdC0+e1NlYXJjaERhdGF9IH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayB0aGUgY29uZmlnIGl0ZW0gbGlzdAogICAgICAgIGlmICggJFRlc3QtPntSZWZlcmVuY2VEYXRhfSApIHsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW1MaXN0ICYmIHJlZiAkQ29uZmlnSXRlbUxpc3QgZXEgJ0FSUkFZJywKICAgICAgICAgICAgICAgICJTZWFyY2hUZXN0ICRTZWFyY2hUZXN0Q291bnQ6ICRGdW5jdGlvbigpIC0gTGlzdCBpcyBhbiBhcnJheSByZWZlcmVuY2UuIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgVEVTVCBpZiAhJENvbmZpZ0l0ZW1MaXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRDb25maWdJdGVtTGlzdCwKICAgICAgICAgICAgICAgICJTZWFyY2hUZXN0ICRTZWFyY2hUZXN0Q291bnQ6ICRGdW5jdGlvbigpIC0gUmV0dXJuIGZhbHNlLiIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFRFU1QgaWYgISRDb25maWdJdGVtTGlzdDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgbnVtYmVyIG9mIGZvdW5kIGNvbmZpZyBpdGVtcwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgc2NhbGFyIEB7JENvbmZpZ0l0ZW1MaXN0fSwKICAgICAgICAgICAgc2NhbGFyIEB7ICRUZXN0LT57UmVmZXJlbmNlRGF0YX0gfSwKICAgICAgICAgICAgIlNlYXJjaFRlc3QgJFNlYXJjaFRlc3RDb3VudDogJEZ1bmN0aW9uKCkgLSBjb3JyZWN0IG51bWJlciBvZiBmb3VuZCBjb25maWcgaXRlbXMiLAogICAgICAgICk7CgogICAgICAgIG15IEBSZWZlcmVuY2VMaXN0OwogICAgICAgIGZvciBteSAkTnVtYmVyICggQHsgJFRlc3QtPntSZWZlcmVuY2VEYXRhfSB9ICkgewoKICAgICAgICAgICAgIyBmaW5kIGlkIG9mIHRoZSBpdGVtCiAgICAgICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gY29uZmlnaXRlbSBXSEVSRSAiCiAgICAgICAgICAgICAgICAgICAgLiAiY29uZmlnaXRlbV9udW1iZXIgPSAnJE51bWJlcicgIgogICAgICAgICAgICAgICAgICAgIC4gIk9SREVSIEJZIGlkIERFU0MiLAogICAgICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgICAgICBteSAkQ29uZmlnSXRlbUlEOwogICAgICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgICAgICRDb25maWdJdGVtSUQgPSAkUm93WzBdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdXNoIEBSZWZlcmVuY2VMaXN0LCAkQ29uZmlnSXRlbUlEOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBhcnJheXMKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRDb25maWdJdGVtTGlzdCwKICAgICAgICAgICAgXEBSZWZlcmVuY2VMaXN0LAogICAgICAgICAgICAiU2VhcmNoVGVzdCAkU2VhcmNoVGVzdENvdW50OiAkRnVuY3Rpb24oKSAtIExpc3QiLAogICAgICAgICk7CiAgICB9Cn0KY29udGludWUgewogICAgJFNlYXJjaFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdGluZyBhZGRpbmcgb2YgaW52YWxpZCBkZWZpbml0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CiAgICAjIGRlZmluZSBzb21lIGludmFsaWQgZGVmaW5pdGlvbnMKCiAgICBteSBASW52YWxpZENvbmZpZ0l0ZW1EZWZpbml0aW9uczsKCiAgICAjIERhdGEgc2N0cnVjdHVyZSBpcyBubyBhcnJheSByZWZlcmVuY2UuCiAgICBwdXNoIEBJbnZhbGlkQ29uZmlnSXRlbURlZmluaXRpb25zLCAiCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgID0+ICdDdXN0b21lcjEnLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdDdXN0b21lciAxJywKICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgfSwKICAgICAgICB9CiAgICAiOwoKICAgICMgRGF0YSBzY3RydWN0dXJlIGhhc2ggZWxlbWVudHMgY29udGFpbiBubyBkYXRhLgogICAgcHVzaCBASW52YWxpZENvbmZpZ0l0ZW1EZWZpbml0aW9ucywgIiBbCiAgICAgICAgewogICAgICAgIH0sCiAgICAgICAgewogICAgICAgIH0sCiAgICBdIjsKCiAgICAjIE1pc3NpbmcgY29tbWEgYmV0d2VlbiB0aGUgMiBlbGVtZW50cwogICAgcHVzaCBASW52YWxpZENvbmZpZ0l0ZW1EZWZpbml0aW9ucywgIiBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgID0+ICdDdXN0b21lcjEnLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdDdXN0b21lciAxJywKICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgfSwKICAgICAgICB9CiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgID0+ICdEYXRlMScsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0RhdGUgMScsCiAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdEYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgXSI7CgogICAgIyBLZXkgIkN1c3RvbWVyIDEiIGNvbnRhaW5pbmcgYSBzcGFjZS4KICAgIHB1c2ggQEludmFsaWRDb25maWdJdGVtRGVmaW5pdGlvbnMsICIgWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnQ3VzdG9tZXIgMScsICAgIyBLZXkgY29udGFpbmluZyBhIHNwYWNlIQogICAgICAgICAgICBOYW1lICAgICAgID0+ICdDdXN0b21lciAxJywKICAgICAgICAgICAgU2VhcmNoYWJsZSA9PiAxLAogICAgICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgXSI7CgogICAgIyBLZXkgIkN1c3RvbWVyMc6j1Y7OrSIgY29udGFpbmluZyBub24tYXNjaWkgY2hhcmFjdGVycy4KICAgIHB1c2ggQEludmFsaWRDb25maWdJdGVtRGVmaW5pdGlvbnMsICIgWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnQ3VzdG9tZXIxzqPVjs6tJywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnQ3VzdG9tZXIgMScsCiAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIF0iOwoKICAgICMgSW52YWxpZCBlbXB0eSBzdWIgZWxlbWVudC4KICAgIHB1c2ggQEludmFsaWRDb25maWdJdGVtRGVmaW5pdGlvbnMsICIgWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgICA9PiAnQ3VzdG9tZXIxJywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnQ3VzdG9tZXIgMScsCiAgICAgICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICAgICAgSW5wdXQgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1YiA9PiBbCiAgICAgICAgICAgICAgICB7fSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgXSI7CgogICAgIyBnZW5lcmF0ZSBhIHJhbmRvbSBuYW1lCiAgICBteSAkQ2xhc3NOYW1lID0gJ1VuaXRUZXN0JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgogICAgIyBhZGQgYW4gdW5pdHRlc3QgY29uZmlnIGl0ZW0gY2xhc3MKICAgIG15ICRDbGFzc0lEID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICAgICBOYW1lICAgID0+ICRDbGFzc05hbWUsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBjbGFzcyBpZAogICAgaWYgKCAhJENsYXNzSUQgKSB7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IGNvbmZpZyBpdGVtIGNsYXNzLiIsCiAgICAgICAgKTsKICAgIH0KCiAgICBmb3IgbXkgJERlZmluaXRpb24gKEBJbnZhbGlkQ29uZmlnSXRlbURlZmluaXRpb25zKSB7CgogICAgICAgICMgYWRkIGEgZGVmaW5pdGlvbiB0byB0aGUgY2xhc3MKICAgICAgICBteSAkRGVmaW5pdGlvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25BZGQoCiAgICAgICAgICAgIENsYXNzSUQgICAgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb24sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGRlZmluaXRpb24gaWQsIG11c3QgYmUgZmFsc2UsIGJlY2F1c2UgYWxsIGRlZmluaXRpb25zIGhhdmUgZXJyb3JzCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkRGVmaW5pdGlvbklELAogICAgICAgICAgICAiQ2FuJ3QgYWRkIG5ldyBjb25maWcgaXRlbSBkZWZpbml0aW9uLiIsCiAgICAgICAgKTsKICAgIH0KCn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0aW5nIHN1cHBvcnQgZm9yIGF0dGFjaG1lbnRzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRBdHRhY2htZW50VGVzdENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtSURzWzBdOwoKIyB2ZXJpZnkgdGhhdCBpbml0aWFsbHkgbm8gYXR0YWNobWVudCBleGlzdHMKbXkgQEF0dGFjaG1lbnRMaXN0ID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgIENvbmZpZ0l0ZW1JRCA9PiAkQXR0YWNobWVudFRlc3RDb25maWdJdGVtSUQsCik7CgokU2VsZi0+SXMoCiAgICBzY2FsYXIgQEF0dGFjaG1lbnRMaXN0LAogICAgMCwKICAgICdObyBhdHRhY2htZW50cyBpbml0aWFsbHknLAopOwoKbXkgQFRlc3RGaWxlTGlzdCA9ICgKICAgIHsKICAgICAgICBGaWxlbmFtZSAgICA9PiAnZmlyc3QgYXR0YWNobWVudCcsCiAgICAgICAgQ29udGVudCAgICAgPT4gJ0ZpcnN0IGF0dGFjaG1lbnQgZnJvbSBJVFNNQ29uZmlnSXRlbS50JywKICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICB9LAogICAgewogICAgICAgIEZpbGVuYW1lICAgID0+ICdzZWNvbmQgYXR0YWNobWVudCcsCiAgICAgICAgQ29udGVudCAgICAgPT4gJ1NlY29uZCBhdHRhY2htZW50IGZyb20gSVRTTUNvbmZpZ0l0ZW0udCcsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgfSwKKTsKCm15ICRGaWxlQ291bnQ7CmZvciBteSAkVGVzdEZpbGUgKEBUZXN0RmlsZUxpc3QpIHsKCiAgICAkRmlsZUNvdW50Kys7CgogICAgbXkgJEFkZE9rID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50QWRkKAogICAgICAgICV7JFRlc3RGaWxlfSwKICAgICAgICBDb25maWdJdGVtSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRBZGRPaywKICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiBhdHRhY2htZW50IGFkZGVkIiwKICAgICk7CgogICAgbXkgQEF0dGFjaG1lbnRMaXN0ID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50TGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQEF0dGFjaG1lbnRMaXN0LAogICAgICAgICRGaWxlQ291bnQsCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogbnVtYmVyIG9mIGF0dGFjaG1lbnRzIGFmdGVyIGFkZGluZyIsCiAgICApOwoKICAgICMgY2hlY2sgd2hldGhlciB0aGUgbGFzdCBhZGRlZCBhdHRhY2htZW50IGlzIGluIHRoZSBsaXN0CiAgICBteSAlQXR0YWNobWVudExvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAQXR0YWNobWVudExpc3Q7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQXR0YWNobWVudExvb2t1cHsgJFRlc3RGaWxlLT57RmlsZW5hbWV9IH0sCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogZmlsZW5hbWUgZnJvbSBDb25maWdJdGVtQXR0YWNobWVudExpc3QoKSIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBhdHRhY2htZW50CiAgICBteSAkQXR0YWNobWVudCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudEdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q29uZmlnSXRlbUlELAogICAgICAgIEZpbGVuYW1lICAgICA9PiAkVGVzdEZpbGUtPntGaWxlbmFtZX0sCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEF0dGFjaG1lbnQsCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogQ29uZmlnSXRlbUF0dGFjaG1lbnRHZXQoKSByZXR1cm5lZCB0cnVlIiwKICAgICk7CgogICAgIyBjaGVjayBhdHRhY2htZW50IGZpbGUgYXR0cmlidXRlcwogICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KEZpbGVuYW1lIENvbnRlbnQgQ29udGVudFR5cGUpKSB7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkQXR0YWNobWVudC0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAkVGVzdEZpbGUtPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogJEF0dHJpYnV0ZSBmcm9tIENvbmZpZ0l0ZW1BdHRhY2htZW50R2V0IiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZXhpc3RlbmNlIG9mIGF0dGFjaG1lbnQKICAgIG15ICRBdHRhY2htZW50RXhpc3RzID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BdHRhY2htZW50RXhpc3RzKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQXR0YWNobWVudFRlc3RDb25maWdJdGVtSUQsCiAgICAgICAgRmlsZW5hbWUgICAgID0+ICRUZXN0RmlsZS0+e0ZpbGVuYW1lfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQXR0YWNobWVudEV4aXN0cywKICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiBhdHRhY2htZW50IGV4aXN0cyIsCiAgICApOwoKfQoKIyBub3cgZGVsZXRlIHRoZSBhdHRhY2htZW50cwokRmlsZUNvdW50ID0gMDsKbXkgJE1heFRlc3RGaWxlcyA9IHNjYWxhciBAVGVzdEZpbGVMaXN0Owpmb3IgbXkgJFRlc3RGaWxlIChAVGVzdEZpbGVMaXN0KSB7CgogICAgJEZpbGVDb3VudCsrOwoKICAgIG15ICREZWxldGVPayA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudERlbGV0ZSgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q29uZmlnSXRlbUlELAogICAgICAgIEZpbGVuYW1lICAgICA9PiAkVGVzdEZpbGUtPntGaWxlbmFtZX0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERlbGV0ZU9rLAogICAgICAgICJBdHRhY2htZW50ICRGaWxlQ291bnQ6IGF0dGFjaG1lbnQgZGVsZXRlZCIsCiAgICApOwoKICAgIG15IEBBdHRhY2htZW50TGlzdCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQXR0YWNobWVudExpc3QoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRBdHRhY2htZW50VGVzdENvbmZpZ0l0ZW1JRCwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgIHNjYWxhciBAQXR0YWNobWVudExpc3QsCiAgICAgICAgJE1heFRlc3RGaWxlcyAtICRGaWxlQ291bnQsCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogbnVtYmVyIG9mIGF0dGFjaG1lbnRzIGFmdGVyIGRlbGV0aW9uIiwKICAgICk7CgogICAgbXkgJEF0dGFjaG1lbnRFeGlzdHMgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUF0dGFjaG1lbnRFeGlzdHMoCiAgICAgICAgRmlsZW5hbWUgICAgID0+ICRUZXN0RmlsZS0+e0ZpbGVuYW1lfSwKICAgICAgICBDb25maWdJdGVtSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkQXR0YWNobWVudEV4aXN0cywKICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiBhdHRhY2htZW50IGlzIGdvbmUiLAogICAgKTsKfQoKIyBjaGVjayBjb25maWcgaXRlbSBkZWxldGUKbXkgJERlbGV0ZVRlc3RDb3VudCA9IDE7CmZvciBteSAkQ29uZmlnSXRlbUlEIChAQ29uZmlnSXRlbUlEcykgewogICAgbXkgJERlbGV0ZU9rID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1EZWxldGUoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERlbGV0ZU9rLAogICAgICAgICJEZWxldGVUZXN0ICREZWxldGVUZXN0Q291bnQgLSBDb25maWdJdGVtRGVsZXRlKCkgKENvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEKSIKICAgICk7CgogICAgIyBkb3VibGUgY2hlY2sgaWYgY29uZmlnIGl0ZW0gaXMgcmVhbGx5IGRlbGV0ZWQKICAgIG15ICRDb25maWdJdGVtRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgIENhY2hlICAgICAgICA9PiAwLAogICAgKTsKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkQ29uZmlnSXRlbURhdGEtPntDb25maWdJdGVtSUR9LAogICAgICAgICJEZWxldGVUZXN0ICREZWxldGVUZXN0Q291bnQgLSBkb3VibGUgY2hlY2sgKENvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEKSIsCiAgICApOwoKICAgICREZWxldGVUZXN0Q291bnQrKzsKfQoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6Ok1pZ3JhdGlvbnM6Ok9UUlM2OjpTeXNDb25maWcpCgp1c2UgdXRmODsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCiMgZ2V0IG5lZWRlZCBvYmplY3RzCm15ICRDb25maWdPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwpteSAkQ29uZmlnSXRlbU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKbXkgJExpbmtPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZQpteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKbXkgJENvbmZpZ0l0ZW1OYW1lID0gJ1VuaXRUZXN0Q29uZmlnSXRlbVRlc3QnIC4gJFJhbmRvbUlEOwpteSAkU2VydmljZU5hbWUgICAgPSAnVW5pdFRlc3RTZXJ2aWNlVGVzdCcgLiAkUmFuZG9tSUQ7CgpteSBAQ29uZmlnSXRlbUlEczsKbXkgQFNlcnZpY2VJRHM7CgpteSAkQ2hlY2tFeHBlY3RlZFJlc3VsdHM7CiRDaGVja0V4cGVjdGVkUmVzdWx0cyA9IHN1YiB7CgogICAgIyBnZXQgcGFyYW1ldGVycwogICAgbXkgKCVQYXJhbSkgPSBAXzsKCiAgICBteSAlRXhwZWN0ZWRJbmNpZGVudFN0YXRlcyA9ICV7ICRQYXJhbXtFeHBlY3RlZEluY2lkZW50U3RhdGVzfSB9OwogICAgbXkgJU9iamVjdE5hbWVTdWZmaXgySUQgICAgPSAleyAkUGFyYW17T2JqZWN0TmFtZVN1ZmZpeDJJRH0gfTsKCiAgICAjIGNoZWNrIHRoZSByZXN1bHRzCiAgICBmb3IgbXkgJE9iamVjdCAoIHNvcnQga2V5cyAlRXhwZWN0ZWRJbmNpZGVudFN0YXRlcyApIHsKCiAgICAgICAgaWYgKCAkT2JqZWN0IGVxICdJVFNNQ29uZmlnSXRlbScgKSB7CgogICAgICAgICAgICBmb3IgbXkgJE5hbWVTdWZmaXggKCBzb3J0IGtleXMgJXsgJEV4cGVjdGVkSW5jaWRlbnRTdGF0ZXN7JE9iamVjdH0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBjb25maWcgaXRlbSBkYXRhCiAgICAgICAgICAgICAgICBteSAkQ29uZmlnSXRlbSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkT2JqZWN0TmFtZVN1ZmZpeDJJRHskT2JqZWN0fS0+eyROYW1lU3VmZml4fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjaGVjayB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJENvbmZpZ0l0ZW0tPntDdXJJbmNpU3RhdGV9LAogICAgICAgICAgICAgICAgICAgICRFeHBlY3RlZEluY2lkZW50U3RhdGVzeyRPYmplY3R9LT57JE5hbWVTdWZmaXh9LAogICAgICAgICAgICAgICAgICAgICJDaGVjayBpbmNpZGVudCBzdGF0ZSBvZiBjb25maWcgaXRlbSAkTmFtZVN1ZmZpeC4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRPYmplY3QgZXEgJ1NlcnZpY2UnICkgewoKICAgICAgICAgICAgZm9yIG15ICROYW1lU3VmZml4ICggc29ydCBrZXlzICV7ICRFeHBlY3RlZEluY2lkZW50U3RhdGVzeyRPYmplY3R9IH0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhIChpbmNsdWRpbmcgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUpCiAgICAgICAgICAgICAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRPYmplY3ROYW1lU3VmZml4MklEeyRPYmplY3R9LT57JE5hbWVTdWZmaXh9LAogICAgICAgICAgICAgICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGV9LAogICAgICAgICAgICAgICAgICAgICRFeHBlY3RlZEluY2lkZW50U3RhdGVzeyRPYmplY3R9LT57JE5hbWVTdWZmaXh9LAogICAgICAgICAgICAgICAgICAgICJDaGVjayBpbmNpZGVudCBzdGF0ZSBvZiBzZXJ2aWNlICROYW1lU3VmZml4LiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgRG9uZSBmb3Igc2Vjb25kIHJ1biAoYWZ0ZXIgcmVjYWxjdWxhdGlvbikuCiAgICByZXR1cm4gMSBpZiAkUGFyYW17UmVjYWxjdWxhdGV9OwoKICAgICMgVHJpZ2dlciByZWNhbGN1bGF0aW9uIG9mIGluY2lkZW50IHN0YXRlcyBmb3IgZWFjaCBjb25maWcgaXRlbS4KICAgIG15ICRFeGl0Q29kZQogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZScpLT5FeGVjdXRlKCk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEV4aXRDb2RlLAogICAgICAgIDAsCiAgICAgICAgIkFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBleGl0IGNvZGUiLAogICAgKTsKCiAgICAjIENoZWNrIHJlc3VsdHMgYWdhaW4gYWZ0ZXIgcmVjYWxjdWxhdGlvbiAoY2FsbCBteXNlbGYgcmVjdXJzaXZlbHkpLgogICAgJENoZWNrRXhwZWN0ZWRSZXN1bHRzLT4oCiAgICAgICAgJVBhcmFtLAogICAgICAgIFJlY2FsY3VsYXRlID0+IDEsCiAgICApOwoKICAgICMgRG9uZSBmb3IgZmlyc3QgcnVuIChiZWZvcmUgcmVjYWxjdWxhdGlvbikuCiAgICByZXR1cm4gMTsKfTsKCiMgZ2V0IGNsYXNzIGxpc3QKbXkgJENsYXNzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAopOwpteSAlQ2xhc3NMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskQ2xhc3NMaXN0fTsKCiMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdApteSAkRGVwbFN0YXRlTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKKTsKbXkgJURlcGxTdGF0ZUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyREZXBsU3RhdGVMaXN0fTsKCiMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKbXkgJEluY2lTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAopOwpteSAlSW5jaVN0YXRlTGlzdFJldmVyc2UgPSByZXZlcnNlICV7JEluY2lTdGF0ZUxpc3R9OwoKIyBnZXQgZGVmaW5pdGlvbiBmb3IgJ0hhcmR3YXJlJyBjbGFzcwpteSAkRGVmaW5pdGlvblJlZiA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uR2V0KAogICAgQ2xhc3NJRCA9PiAkQ2xhc3NMaXN0UmV2ZXJzZXtIYXJkd2FyZX0sCik7CgpteSAlT2JqZWN0TmFtZVN1ZmZpeDJJRDsKCiMgY3JlYXRlIGNvbmZpZyBpdGVtcwpmb3IgbXkgJE5hbWVTdWZmaXggKCAxIC4uIDcsIHF3KEEgQiBDIEQgRSBGIEcpICkgewoKICAgICMgYWRkIGEgY29uZmlnaXRlbQogICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgICAgIENsYXNzSUQgPT4gJENsYXNzTGlzdFJldmVyc2V7SGFyZHdhcmV9LAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAiQWRkZWQgY29uZmlnaXRlbSBpZCAkQ29uZmlnSXRlbUlELiIsCiAgICApOwoKICAgICMgcmVtZW1iZXIgdGhlIGNvbmZpZyBpdGVtIGlkCiAgICAkT2JqZWN0TmFtZVN1ZmZpeDJJRHtJVFNNQ29uZmlnSXRlbX0tPnskTmFtZVN1ZmZpeH0gPSAkQ29uZmlnSXRlbUlEOwoKICAgIHB1c2ggQENvbmZpZ0l0ZW1JRHMsICRDb25maWdJdGVtSUQ7CgogICAgIyBzZXQgYSBuYW1lIGZvciBlYWNoIGNvbmZpZ2l0ZW0KICAgIG15ICRWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OYW1lIC4gJ19IYXJkd2FyZV8nIC4gJE5hbWVTdWZmaXgsCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICREZWZpbml0aW9uUmVmLT57RGVmaW5pdGlvbklEfSwKICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgIFhNTERhdGEgICAgICA9PiBbCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWZXJzaW9uID0+IFsKICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZlbmRvciA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdUZXN0VmVuZG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAiQWRkZWQgYSB2ZXJzaW9uIGZvciB0aGUgY29uZmlnaXRlbSBpZCAkQ29uZmlnSXRlbUlEIiwKICAgICk7Cn0KCiMgY3JlYXRlIHNlcnZpY2VzCmZvciBteSAkTmFtZVN1ZmZpeCAoIDEgLi4gMiApIHsKCiAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lIC4gJ18nIC4gJE5hbWVTdWZmaXgsCiAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAiQWRkZWQgc2VydmljZSBpZCAkU2VydmljZUlELiIsCiAgICApOwoKICAgICMgcmVtZW1iZXIgdGhlIHNlcnZpY2UgaWQKICAgICRPYmplY3ROYW1lU3VmZml4MklEe1NlcnZpY2V9LT57JE5hbWVTdWZmaXh9ID0gJFNlcnZpY2VJRDsKCiAgICBwdXNoIEBTZXJ2aWNlSURzLCAkU2VydmljZUlEOwp9CgojIHJlYWQgdGhlIG9yaWdpbmFsIHNldHRpbmcgZm9yIEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24KbXkgJE9yaWdJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uU2V0dGluZyA9ICRDb25maWdPYmplY3QtPkdldCgnSVRTTTo6Q29yZTo6SW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbicpOwoKIyBzZXQgbmV3IGNvbmZpZyBmb3IgSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbgokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbicsCiAgICBWYWx1ZSA9PiB7CiAgICAgICAgRGVwZW5kc09uID0+ICdTb3VyY2UnLAogICAgICAgIEluY2x1ZGVzICA9PiAnU291cmNlJywKICAgIH0sCik7CgojICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayBEaWFncmFtCiMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMKIwojICAgICAgICAgICAgICAgICAgICAgNiAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlIDEKIyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIyAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIyAgICAgICAgIEMgPCoqKioqKioqIDUgLS0tLS0tPiA0IC0tLS0tLT4gMyAtLS0tLS0+IDEgKioqKioqKioqPiBBICoqKioqKio+IEYgKioqKioqKioqKj4gRwojICAgICAgICAgKiAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgXgojICAgICAgICAgKiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgKgojICAgICAgICAgKiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgKgojICAgICAgICAgKiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgKgojICAgICAgICAgKiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgQiAgICAgICAgICAgICogICAgICAgICAgKgojICAgICAgICAgKiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgKiAgICAgICAgICAgICogICAgICAgICAgKgojICAgICAgICAgKiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgKiAgICAgICAgICAgICogICAgICAgICAgKgojICAgICAgICAgKiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgKiAgICAgICAgICAgICogICAgICAgICAgKgojICAgICAgICAgdiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgdiAgICAgICAgICAgICogICAgICAgICAgKgojICAgICAgICAgRCAqKioqKioqKj4gNyAgICAgICAgICAgICAgICAgICArLS0tLS0tLT4gMiAqKioqKioqKioqKiogICAgICAgICAgRQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZSAyCiMKIwojCiMKIyAgRXhwbGFuYXRpb246CiMgICAgICAgICAgICAgICAxIC4uIDcgYW5kIEEgLi4gRyBhcmUgSVRTTUNvbmZpZ0l0ZW1zCiMKIyAgICAgICAgICAgICAgIERlcGVuZHNPbiBMaW5rcyBhcmUgc2hvd24gYXMgLS0tLS0+CiMgICAgICAgICAgICAgICBJbmNsdWRlcyAgTGlua3MgYXJlIHNob3duIGFzICoqKioqPgojCiMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBkZWZpbmUgdGhlIGxpbmtzIGJldHdlZW4gQ0lzIGFuZCBTZXJ2aWNlcwpteSAlTGlua3MgPSAoCiAgICBEZXBlbmRzT24gPT4gewogICAgICAgIElUU01Db25maWdJdGVtID0+IHsKICAgICAgICAgICAgJzcnID0+IHsKICAgICAgICAgICAgICAgIElUU01Db25maWdJdGVtID0+IFsnNSddLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnNicgPT4gewogICAgICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gWyc1J10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICc1JyA9PiB7CiAgICAgICAgICAgICAgICBJVFNNQ29uZmlnSXRlbSA9PiBbJzQnXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJzQnID0+IHsKICAgICAgICAgICAgICAgIElUU01Db25maWdJdGVtID0+IFsnMyddLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnMycgPT4gewogICAgICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gWyAnMScsICcyJyBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnMScgPT4gewogICAgICAgICAgICAgICAgU2VydmljZSA9PiBbJzEnXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAnMicgPT4gewogICAgICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gWycyJ10sCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgfSwKICAgIEluY2x1ZGVzID0+IHsKICAgICAgICBJVFNNQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICc1JyA9PiB7CiAgICAgICAgICAgICAgICBJVFNNQ29uZmlnSXRlbSA9PiBbJ0MnXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ0MnID0+IHsKICAgICAgICAgICAgICAgIElUU01Db25maWdJdGVtID0+IFsnRCddLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnRCcgPT4gewogICAgICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gWyc3J10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdCJyA9PiB7CiAgICAgICAgICAgICAgICBJVFNNQ29uZmlnSXRlbSA9PiBbJzInXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJzInID0+IHsKICAgICAgICAgICAgICAgIElUU01Db25maWdJdGVtID0+IFsnQSddLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnMScgPT4gewogICAgICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gWydBJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdBJyA9PiB7CiAgICAgICAgICAgICAgICBJVFNNQ29uZmlnSXRlbSA9PiBbJ0YnXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ0YnID0+IHsKICAgICAgICAgICAgICAgIElUU01Db25maWdJdGVtID0+IFsnRyddLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnRScgPT4gewogICAgICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gWydGJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCik7CgojIGxpbmsgdGhlIGNvbmZpZyBpdGVtcyBhbmQgc2VydmljZXMgYXMgc2hvd24gaW4gdGhlIGRpYWdyYW0KZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAlTGlua3MgKSB7CiAgICBmb3IgbXkgJFRhcmdldE9iamVjdCAoIHNvcnQga2V5cyAleyAkTGlua3N7JExpbmtUeXBlfSB9ICkgewogICAgICAgIGZvciBteSAkVGFyZ2V0S2V5ICggc29ydCBrZXlzICV7ICRMaW5rc3skTGlua1R5cGV9LT57JFRhcmdldE9iamVjdH0gfSApIHsKICAgICAgICAgICAgZm9yIG15ICRTb3VyY2VPYmplY3QgKCBzb3J0IGtleXMgJXsgJExpbmtzeyRMaW5rVHlwZX0tPnskVGFyZ2V0T2JqZWN0fS0+eyRUYXJnZXRLZXl9IH0gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJFNvdXJjZUtleSAoCiAgICAgICAgICAgICAgICAgICAgQHsgJExpbmtzeyRMaW5rVHlwZX0tPnskVGFyZ2V0T2JqZWN0fS0+eyRUYXJnZXRLZXl9LT57JFNvdXJjZU9iamVjdH0gfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGxpbmtzCiAgICAgICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkTGlua09iamVjdC0+TGlua0FkZCgKICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlT2JqZWN0ID0+ICRTb3VyY2VPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUtleSAgICA9PiAkT2JqZWN0TmFtZVN1ZmZpeDJJRHskU291cmNlT2JqZWN0fS0+eyRTb3VyY2VLZXl9LAogICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJFRhcmdldE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0S2V5ICAgID0+ICRPYmplY3ROYW1lU3VmZml4MklEeyRUYXJnZXRPYmplY3R9LT57JFRhcmdldEtleX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkTGlua1R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICJMaW5rQWRkKCkgLSAkU291cmNlT2JqZWN0OiRTb3VyY2VLZXkgbGlua2VkIHdpdGggJFRhcmdldE9iamVjdDokVGFyZ2V0S2V5IHdpdGggTGlua1R5cGUgJyRMaW5rVHlwZScuIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgc2V0IENJNiB0byAiSW5jaWRlbnQiIGFuZCBjaGVjayB0aGUgcmVzdWx0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CgogICAgbXkgJE5hbWVTdWZmaXggICAgPSA2OwogICAgbXkgJEluY2lkZW50U3RhdGUgPSAnSW5jaWRlbnQnOwoKICAgICMgY2hhbmdlIGluY2lkZW50IHN0YXRlCiAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRPYmplY3ROYW1lU3VmZml4MklEe0lUU01Db25maWdJdGVtfS0+eyROYW1lU3VmZml4fSwKICAgICAgICBOYW1lICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OYW1lIC4gJ19IYXJkd2FyZV8nIC4gJE5hbWVTdWZmaXgsCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICREZWZpbml0aW9uUmVmLT57RGVmaW5pdGlvbklEfSwKICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7JEluY2lkZW50U3RhdGV9LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVmVyc2lvbklELAogICAgICAgICJTZXQgY29uZmlnIGl0ZW0gaWQgJE5hbWVTdWZmaXggdG8gc3RhdGUgJyRJbmNpZGVudFN0YXRlJy4iLAogICAgKTsKCiAgICAkQ2hlY2tFeHBlY3RlZFJlc3VsdHMtPigKICAgICAgICBFeHBlY3RlZEluY2lkZW50U3RhdGVzID0+IHsKICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgJzEnID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICcyJyA9PiAnV2FybmluZycsCiAgICAgICAgICAgICAgICAnMycgPT4gJ1dhcm5pbmcnLAogICAgICAgICAgICAgICAgJzQnID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICc1JyA9PiAnV2FybmluZycsCiAgICAgICAgICAgICAgICAnNicgPT4gJ0luY2lkZW50JywKICAgICAgICAgICAgICAgICc3JyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0EnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnQicgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdDJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0QnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnRScgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdGJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0cnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgJzEnID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICcyJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT2JqZWN0TmFtZVN1ZmZpeDJJRCA9PiBcJU9iamVjdE5hbWVTdWZmaXgySUQsCiAgICApOwoKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHNldCBDSTYgYmFjayB0byAiT3BlcmF0aW9uYWwiIGFuZCBjaGVjayB0aGUgcmVzdWx0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CgogICAgbXkgJE5hbWVTdWZmaXggICAgPSA2OwogICAgbXkgJEluY2lkZW50U3RhdGUgPSAnT3BlcmF0aW9uYWwnOwoKICAgICMgY2hhbmdlIGluY2lkZW50IHN0YXRlCiAgICBteSAkVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRPYmplY3ROYW1lU3VmZml4MklEe0lUU01Db25maWdJdGVtfS0+eyROYW1lU3VmZml4fSwKICAgICAgICBOYW1lICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OYW1lIC4gJ19IYXJkd2FyZV8nIC4gJE5hbWVTdWZmaXgsCiAgICAgICAgRGVmaW5pdGlvbklEID0+ICREZWZpbml0aW9uUmVmLT57RGVmaW5pdGlvbklEfSwKICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7JEluY2lkZW50U3RhdGV9LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVmVyc2lvbklELAogICAgICAgICJTZXQgY29uZmlnIGl0ZW0gaWQgJE5hbWVTdWZmaXggdG8gc3RhdGUgJyRJbmNpZGVudFN0YXRlJy4iLAogICAgKTsKCiAgICAkQ2hlY2tFeHBlY3RlZFJlc3VsdHMtPigKICAgICAgICBFeHBlY3RlZEluY2lkZW50U3RhdGVzID0+IHsKICAgICAgICAgICAgSVRTTUNvbmZpZ0l0ZW0gPT4gewogICAgICAgICAgICAgICAgJzEnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnMicgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICczJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJzQnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnNScgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICc2JyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJzcnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnQScgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdCJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0MnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnRCcgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdFJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0YnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnRycgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2VydmljZSA9PiB7CiAgICAgICAgICAgICAgICAnMScgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICcyJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT2JqZWN0TmFtZVN1ZmZpeDJJRCA9PiBcJU9iamVjdE5hbWVTdWZmaXgySUQsCiAgICApOwoKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHNldCBDSTEgdG8gIkluY2lkZW50IiBhbmQgY2hlY2sgdGhlIHJlc3VsdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKewoKICAgIG15ICROYW1lU3VmZml4ICAgID0gMTsKICAgIG15ICRJbmNpZGVudFN0YXRlID0gJ0luY2lkZW50JzsKCiAgICAjIGNoYW5nZSBpbmNpZGVudCBzdGF0ZQogICAgbXkgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkT2JqZWN0TmFtZVN1ZmZpeDJJRHtJVFNNQ29uZmlnSXRlbX0tPnskTmFtZVN1ZmZpeH0sCiAgICAgICAgTmFtZSAgICAgICAgID0+ICRDb25maWdJdGVtTmFtZSAuICdfSGFyZHdhcmVfJyAuICROYW1lU3VmZml4LAogICAgICAgIERlZmluaXRpb25JRCA9PiAkRGVmaW5pdGlvblJlZi0+e0RlZmluaXRpb25JRH0sCiAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNleyRJbmNpZGVudFN0YXRlfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAiU2V0IGNvbmZpZyBpdGVtIGlkICROYW1lU3VmZml4IHRvIHN0YXRlICckSW5jaWRlbnRTdGF0ZScuIiwKICAgICk7CgogICAgJENoZWNrRXhwZWN0ZWRSZXN1bHRzLT4oCiAgICAgICAgRXhwZWN0ZWRJbmNpZGVudFN0YXRlcyA9PiB7CiAgICAgICAgICAgIElUU01Db25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgICcxJyA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgJzInID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnMycgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICc0JyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJzUnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnNicgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICc3JyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0EnID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICdCJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0MnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnRCcgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdFJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0YnID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICdHJyA9PiAnV2FybmluZycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgJzEnID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAnMicgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9iamVjdE5hbWVTdWZmaXgySUQgPT4gXCVPYmplY3ROYW1lU3VmZml4MklELAogICAgKTsKCn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBzZXQgQ0k1IHRvICJJbmNpZGVudCIgYW5kIGNoZWNrIHRoZSByZXN1bHRzIChDSTEgaXMgc3RpbGwgaW4gIkluY2lkZW50IikKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKewoKICAgIG15ICROYW1lU3VmZml4ICAgID0gNTsKICAgIG15ICRJbmNpZGVudFN0YXRlID0gJ0luY2lkZW50JzsKCiAgICAjIGNoYW5nZSBpbmNpZGVudCBzdGF0ZQogICAgbXkgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkT2JqZWN0TmFtZVN1ZmZpeDJJRHtJVFNNQ29uZmlnSXRlbX0tPnskTmFtZVN1ZmZpeH0sCiAgICAgICAgTmFtZSAgICAgICAgID0+ICRDb25maWdJdGVtTmFtZSAuICdfSGFyZHdhcmVfJyAuICROYW1lU3VmZml4LAogICAgICAgIERlZmluaXRpb25JRCA9PiAkRGVmaW5pdGlvblJlZi0+e0RlZmluaXRpb25JRH0sCiAgICAgICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNleyRJbmNpZGVudFN0YXRlfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAiU2V0IGNvbmZpZyBpdGVtIGlkICROYW1lU3VmZml4IHRvIHN0YXRlICckSW5jaWRlbnRTdGF0ZScuIiwKICAgICk7CgogICAgJENoZWNrRXhwZWN0ZWRSZXN1bHRzLT4oCiAgICAgICAgRXhwZWN0ZWRJbmNpZGVudFN0YXRlcyA9PiB7CiAgICAgICAgICAgIElUU01Db25maWdJdGVtID0+IHsKICAgICAgICAgICAgICAgICcxJyA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgICAgICAgJzInID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICczJyA9PiAnV2FybmluZycsCiAgICAgICAgICAgICAgICAnNCcgPT4gJ1dhcm5pbmcnLAogICAgICAgICAgICAgICAgJzUnID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAnNicgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICc3JyA9PiAnV2FybmluZycsCiAgICAgICAgICAgICAgICAnQScgPT4gJ1dhcm5pbmcnLAogICAgICAgICAgICAgICAgJ0InID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnQycgPT4gJ1dhcm5pbmcnLAogICAgICAgICAgICAgICAgJ0QnID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICdFJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0YnID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICdHJyA9PiAnV2FybmluZycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgJzEnID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAnMicgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9iamVjdE5hbWVTdWZmaXgySUQgPT4gXCVPYmplY3ROYW1lU3VmZml4MklELAogICAgKTsKCn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHNldCBDSTEgdG8gIk9wZXJhdGlvbmFsIiBhbmQgY2hlY2sgdGhlIHJlc3VsdHMgKENJNSBpcyBzdGlsbCBpbiAiSW5jaWRlbnQiKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCnsKCiAgICBteSAkTmFtZVN1ZmZpeCAgICA9IDE7CiAgICBteSAkSW5jaWRlbnRTdGF0ZSA9ICdPcGVyYXRpb25hbCc7CgogICAgIyBjaGFuZ2UgaW5jaWRlbnQgc3RhdGUKICAgIG15ICRWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJE9iamVjdE5hbWVTdWZmaXgySUR7SVRTTUNvbmZpZ0l0ZW19LT57JE5hbWVTdWZmaXh9LAogICAgICAgIE5hbWUgICAgICAgICA9PiAkQ29uZmlnSXRlbU5hbWUgLiAnX0hhcmR3YXJlXycgLiAkTmFtZVN1ZmZpeCwKICAgICAgICBEZWZpbml0aW9uSUQgPT4gJERlZmluaXRpb25SZWYtPntEZWZpbml0aW9uSUR9LAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXskSW5jaWRlbnRTdGF0ZX0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgIlNldCBjb25maWcgaXRlbSBpZCAkTmFtZVN1ZmZpeCB0byBzdGF0ZSAnJEluY2lkZW50U3RhdGUnLiIsCiAgICApOwoKICAgICRDaGVja0V4cGVjdGVkUmVzdWx0cy0+KAogICAgICAgIEV4cGVjdGVkSW5jaWRlbnRTdGF0ZXMgPT4gewogICAgICAgICAgICBJVFNNQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICAnMScgPT4gJ1dhcm5pbmcnLAogICAgICAgICAgICAgICAgJzInID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICczJyA9PiAnV2FybmluZycsCiAgICAgICAgICAgICAgICAnNCcgPT4gJ1dhcm5pbmcnLAogICAgICAgICAgICAgICAgJzUnID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAgICAgICAnNicgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICc3JyA9PiAnV2FybmluZycsCiAgICAgICAgICAgICAgICAnQScgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdCJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0MnID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICdEJyA9PiAnV2FybmluZycsCiAgICAgICAgICAgICAgICAnRScgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdGJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0cnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgJzEnID0+ICdXYXJuaW5nJywKICAgICAgICAgICAgICAgICcyJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT2JqZWN0TmFtZVN1ZmZpeDJJRCA9PiBcJU9iamVjdE5hbWVTdWZmaXgySUQsCiAgICApOwoKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgc2V0IENJNSB0byAiT3BlcmF0aW9uYWwiIGFuZCBjaGVjayB0aGUgcmVzdWx0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCnsKCiAgICBteSAkTmFtZVN1ZmZpeCAgICA9IDU7CiAgICBteSAkSW5jaWRlbnRTdGF0ZSA9ICdPcGVyYXRpb25hbCc7CgogICAgIyBjaGFuZ2UgaW5jaWRlbnQgc3RhdGUKICAgIG15ICRWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJE9iamVjdE5hbWVTdWZmaXgySUR7SVRTTUNvbmZpZ0l0ZW19LT57JE5hbWVTdWZmaXh9LAogICAgICAgIE5hbWUgICAgICAgICA9PiAkQ29uZmlnSXRlbU5hbWUgLiAnX0hhcmR3YXJlXycgLiAkTmFtZVN1ZmZpeCwKICAgICAgICBEZWZpbml0aW9uSUQgPT4gJERlZmluaXRpb25SZWYtPntEZWZpbml0aW9uSUR9LAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXskSW5jaWRlbnRTdGF0ZX0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgIlNldCBjb25maWcgaXRlbSBpZCAkTmFtZVN1ZmZpeCB0byBzdGF0ZSAnJEluY2lkZW50U3RhdGUnLiIsCiAgICApOwoKICAgICRDaGVja0V4cGVjdGVkUmVzdWx0cy0+KAogICAgICAgIEV4cGVjdGVkSW5jaWRlbnRTdGF0ZXMgPT4gewogICAgICAgICAgICBJVFNNQ29uZmlnSXRlbSA9PiB7CiAgICAgICAgICAgICAgICAnMScgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICcyJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJzMnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnNCcgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICc1JyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJzYnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnNycgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdBJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0InID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnQycgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdEJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJ0UnID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAnRicgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICdHJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZXJ2aWNlID0+IHsKICAgICAgICAgICAgICAgICcxJyA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgJzInID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPYmplY3ROYW1lU3VmZml4MklEID0+IFwlT2JqZWN0TmFtZVN1ZmZpeDJJRCwKICAgICk7Cgp9CgojIHJlc2V0IHRoZSBlbmFibGVkIHNldHRpbmcgZm9yIEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24gdG8gaXRzIG9yaWdpbmFsIHZhbHVlCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uJywKICAgIFZhbHVlID0+ICRPcmlnSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvblNldHRpbmcsCik7CgojIENoZWNrIENJJ3MgaW5jaWRlbnQgc3RhdGUgdXBkYXRlIGFmdGVyICdMaW5rQWRkJyBhY3Rpb24gKHNlZSBidWcjMTQzODIpLgojIFNldCBzb21lIGNvbmZpZ3MgZm9yIGxpbmsgc3RhdHVzLgokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0lUU01Db25maWdJdGVtOjpTZXRJbmNpZGVudFN0YXRlT25MaW5rJywKICAgIFZhbHVlID0+IDEsCik7CiRDb25maWdPYmplY3QtPlNldCgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnSVRTTUNvbmZpZ0l0ZW06OkxpbmtTdGF0dXM6OkRlcGxveW1lbnRTdGF0ZXMnLAogICAgVmFsdWUgPT4gWydQcm9kdWN0aW9uJ10sCik7CiRDb25maWdPYmplY3QtPlNldCgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnSVRTTUNvbmZpZ0l0ZW06OkxpbmtTdGF0dXM6OkluY2lkZW50U3RhdGVzJywKICAgIFZhbHVlID0+IFsgJ0luY2lkZW50JywgJ1dhcm5pbmcnLCAnT3BlcmF0aW9uYWwnIF0sCik7CiRDb25maWdPYmplY3QtPlNldCgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnSVRTTUNvbmZpZ0l0ZW06OkxpbmtTdGF0dXM6OkxpbmtUeXBlcycsCiAgICBWYWx1ZSA9PiB7CiAgICAgICAgUmVsZXZhbnRUbyA9PiAnSW5jaWRlbnQnLAogICAgfSwKKTsKJENvbmZpZ09iamVjdC0+U2V0KAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdJVFNNQ29uZmlnSXRlbTo6TGlua1N0YXR1czo6VGlja2V0VHlwZXMnLAogICAgVmFsdWUgPT4gWydJbmNpZGVudCddLAopOwoKJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCm15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgojIENyZWF0ZSB0ZXN0IHRpY2tldC4KbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICJUTi0kUmFuZG9tSUQiLAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ29wZW4nLAogICAgVHlwZSAgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElELAogICAgIlRpY2tldElEICRUaWNrZXRJRCBpcyBjcmVhdGVkIiwKKTsKCm15ICRYTUxEYXRhID0gWwogICAgdW5kZWYsCiAgICB7CiAgICAgICAgVmVyc2lvbiA9PiBbCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWZW5kb3IgPT4gWwogICAgICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVGVzdFZlbmRvcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCl07CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gIkNJLTAxLSRSYW5kb21JRCIsCiAgICAgICAgRGVwbFN0YXRlSUQgICAgICAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgICAgIEluY2lTdGF0ZUlEICAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgTGlua1R5cGUgICAgICAgICAgPT4gJ1JlbGV2YW50VG8nLAogICAgICAgIEV4cGVjdGVkSW5jaVN0YXRlID0+ICdJbmNpZGVudCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgICAgID0+ICJDSS0wMi0kUmFuZG9tSUQiLAogICAgICAgIERlcGxTdGF0ZUlEICAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICBJbmNpU3RhdGVJRCAgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgICAgIExpbmtUeXBlICAgICAgICAgID0+ICdEZXBlbmRzT24nLAogICAgICAgIEV4cGVjdGVkSW5jaVN0YXRlID0+ICdPcGVyYXRpb25hbCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgICAgID0+ICJDSS0wMy0kUmFuZG9tSUQiLAogICAgICAgIERlcGxTdGF0ZUlEICAgICAgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgICAgICBJbmNpU3RhdGVJRCAgICAgICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7SW5jaWRlbnR9LAogICAgICAgIExpbmtUeXBlICAgICAgICAgID0+ICdSZWxldmFudFRvJywKICAgICAgICBFeHBlY3RlZEluY2lTdGF0ZSA9PiAnSW5jaWRlbnQnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICA9PiAiQ0ktMDQtJFJhbmRvbUlEIiwKICAgICAgICBEZXBsU3RhdGVJRCAgICAgICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7TWFpbnRlbmFuY2V9LAogICAgICAgIEluY2lTdGF0ZUlEICAgICAgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICAgICAgTGlua1R5cGUgICAgICAgICAgPT4gJ1JlbGV2YW50VG8nLAogICAgICAgIEV4cGVjdGVkSW5jaVN0YXRlID0+ICdPcGVyYXRpb25hbCcsCiAgICB9LAopOwoKbXkgQENJSURzOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAjIENyZWF0ZSBDSS4KICAgIG15ICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0xpc3RSZXZlcnNle0hhcmR3YXJlfSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAiQ29uZmlnSXRlbUlEICRDb25maWdJdGVtSUQgaXMgY3JlYXRlZCIsCiAgICApOwoKICAgIHB1c2ggQENJSURzLCAkQ29uZmlnSXRlbUlEOwoKICAgICMgQWRkIGEgdmVyc2lvbi4KICAgIG15ICRWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJFRlc3QtPntOYW1lfSwKICAgICAgICBEZWZpbml0aW9uSUQgPT4gJERlZmluaXRpb25SZWYtPntEZWZpbml0aW9uSUR9LAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkVGVzdC0+e0RlcGxTdGF0ZUlEfSwKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gJFRlc3QtPntJbmNpU3RhdGVJRH0sCiAgICAgICAgWE1MRGF0YSAgICAgID0+ICRYTUxEYXRhLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgIlZlcnNpb25JRCAkVmVyc2lvbklEIGlzIGNyZWF0ZWQiLAogICAgKTsKCiAgICAjIEFkZCBhIGxpbmsuCiAgICBteSAkU3VjY2VzcyA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkKAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnVGlja2V0JywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gJFRpY2tldElELAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgIFRhcmdldEtleSAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIFR5cGUgICAgICAgICA9PiAkVGVzdC0+e0xpbmtUeXBlfSwKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiVGlja2V0SUQgJFRpY2tldElEIGxpbmtlZCB3aXRoIENvbmZpZ0l0ZW1JRCAkQ29uZmlnSXRlbUlEIHdpdGggTGlua1R5cGUgJyRUZXN0LT57TGlua1R5cGV9JyIsCiAgICApOwoKICAgIG15ICRDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICApOwoKICAgICMgQ2hlY2sgQ0kncyBpbmNpZGVudCBzdGF0ZS4KICAgICRTZWxmLT5JcygKICAgICAgICAkQ29uZmlnSXRlbS0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgJFRlc3QtPntFeHBlY3RlZEluY2lTdGF0ZX0sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDdXJJbmNpU3RhdGU6ICRUZXN0LT57RXhwZWN0ZWRJbmNpU3RhdGV9IiwKICAgICk7Cn0KCiMgU2V0IHRpY2tldCB0eXBlIHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdGhhbiAnSW5jaWRlbnQnIHRvIHZlcmlmeSBDSSdzIGluY2lkZW50IHN0YXRlIHVwZGF0ZS4KbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRUeXBlU2V0KAogICAgVHlwZSAgICAgPT4gJ1VuY2xhc3NpZmllZCcsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlR5cGUgZm9yIFRpY2tldElEICRUaWNrZXRJRCBpcyBjaGFuZ2VkIHRvICdVbmNsYXNzaWZpZWQnIiwKKTsKCmZvciBteSAkQ0lJRCAoQENJSURzKSB7CiAgICBteSAkQ0kgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENJSUQsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRDSS0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgJ09wZXJhdGlvbmFsJywKICAgICAgICAiQ0lJRCAkQ0lJRCBpcyBpbiAnT3BlcmF0aW9uYWwnIHN0YXRlIGFmdGVyIHRpY2tldCB0eXBlIHVwZGF0ZSIsCiAgICApOwp9CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgcXcoJFNlbGYpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7Cm15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBkZWZpbmUgbmVlZGVkIHZhcmlhYmxlCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBhZGQgdGhlIHRlc3QgY2xhc3NlcwpteSBAQ29uZmlnSXRlbUNsYXNzSURzOwpteSBAQ29uZmlnSXRlbUNsYXNzZXM7Cm15IEBDb25maWdJdGVtRGVmaW5pdGlvbklEczsKCiMgZ2VuZXJhdGUgYSByYW5kb20gbmFtZQpteSAkRmlyc3RDbGFzc05hbWUgID0gJ1VuaXRUZXN0Q2xhc3MxJyAuICRSYW5kb21JRDsKbXkgJFNlY29uZENsYXNzTmFtZSA9ICdVbml0VGVzdENsYXNzMicgLiAkUmFuZG9tSUQ7CgojIHNldCBhIG5hbWUgcHJlZml4Cm15ICROYW1lUHJlZml4ID0gJ1VuaXRUZXN0TmFtZScgLiAkUmFuZG9tSUQ7CgojIGFkZCBib3RoIHVuaXR0ZXN0IGNvbmZpZyBpdGVtIGNsYXNzZXMKbXkgJEZpcnN0Q2xhc3NJRCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUFkZCgKICAgIENsYXNzICAgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgIE5hbWUgICAgPT4gJEZpcnN0Q2xhc3NOYW1lLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBjaGVjayBmaXJzdCBjbGFzcyBpZAppZiAoICEkRmlyc3RDbGFzc0lEICkgewoKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgIkNhbid0IGFkZCBmaXJzdCBjb25maWcgaXRlbSBjbGFzcy4iLAogICAgKTsKfQoKcHVzaCBAQ29uZmlnSXRlbUNsYXNzSURzLCAkRmlyc3RDbGFzc0lEOwpwdXNoIEBDb25maWdJdGVtQ2xhc3NlcywgICRGaXJzdENsYXNzTmFtZTsKCm15ICRTZWNvbmRDbGFzc0lEID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgQ2xhc3MgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgTmFtZSAgICA9PiAkU2Vjb25kQ2xhc3NOYW1lLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBjaGVjayBzZWNvbmQgY2xhc3MgaWQKaWYgKCAhJFNlY29uZENsYXNzSUQgKSB7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMCwKICAgICAgICAiQ2FuJ3QgYWRkIHNlY29uZCBjb25maWcgaXRlbSBjbGFzcy4iLAogICAgKTsKfQoKcHVzaCBAQ29uZmlnSXRlbUNsYXNzSURzLCAkU2Vjb25kQ2xhc3NJRDsKcHVzaCBAQ29uZmlnSXRlbUNsYXNzZXMsICAkU2Vjb25kQ2xhc3NOYW1lOwoKIyBhZGQgYW4gZW1wdHkgZGVmaW5pdGlvbiB0byB0aGUgY2xhc3MuIHRoZSBkZWZpbml0aW9uIGRvZXNuJ3QgbmVlZCBhbnkgZWxlbWVudHMsIGFzIHdlJ3JlIG9ubHkKIyB0ZXN0aW5nIHRoZSBuYW1lIHdoaWNoIGlzbid0IHBhcnQgb2YgdGhlIGRlZmluaXRpb24sIGJ1dCBvZiB0aGUgY29uZmlnIGl0ZW0gaXRzZWxmCm15ICRGaXJzdERlZmluaXRpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5EZWZpbml0aW9uQWRkKAogICAgQ2xhc3NJRCAgICA9PiAkRmlyc3RDbGFzc0lELAogICAgRGVmaW5pdGlvbiA9PiAiLS0tIFtdIiwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgY2hlY2sgZGVmaW5pdGlvbiBpZAppZiAoICEkRmlyc3REZWZpbml0aW9uSUQgKSB7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMCwKICAgICAgICAiQ2FuJ3QgYWRkIGZpcnN0IGNvbmZpZyBpdGVtIGRlZmluaXRpb24uIiwKICAgICk7Cn0KCnB1c2ggQENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzLCAkRmlyc3REZWZpbml0aW9uSUQ7CgpteSAkU2Vjb25kRGVmaW5pdGlvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkRlZmluaXRpb25BZGQoCiAgICBDbGFzc0lEICAgID0+ICRTZWNvbmRDbGFzc0lELAogICAgRGVmaW5pdGlvbiA9PiAiLS0tIFtdIiwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgY2hlY2sgZGVmaW5pdGlvbiBpZAppZiAoICEkU2Vjb25kRGVmaW5pdGlvbklEICkgewoKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgIkNhbid0IGFkZCBzZWNvbmQgY29uZmlnIGl0ZW0gZGVmaW5pdGlvbi4iLAogICAgKTsKfQoKcHVzaCBAQ29uZmlnSXRlbURlZmluaXRpb25JRHMsICRTZWNvbmREZWZpbml0aW9uSUQ7CgpteSBAQ29uZmlnSXRlbUlEczsKCiMgYWRkIGEgY29uZmlnaXRlbSB0byBlYWNoIGNsYXNzCm15ICRGaXJzdENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgQ2xhc3NJRCA9PiAkRmlyc3RDbGFzc0lELAogICAgVXNlcklEICA9PiAxLAopOwoKaWYgKCAhJEZpcnN0Q29uZmlnSXRlbUlEICkgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMCwKICAgICAgICAiRmFpbGVkIHRvIGFkZCB0aGUgZmlyc3QgY29uZmlnaXRlbSIsCiAgICApOwp9CgpwdXNoIEBDb25maWdJdGVtSURzLCAkRmlyc3RDb25maWdJdGVtSUQ7CgpteSAkU2Vjb25kQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICBDbGFzc0lEID0+ICRTZWNvbmRDbGFzc0lELAogICAgVXNlcklEICA9PiAxLAopOwoKaWYgKCAhJFNlY29uZENvbmZpZ0l0ZW1JRCApIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgIkZhaWxlZCB0byBhZGQgdGhlIHNlY29uZCBjb25maWdpdGVtIiwKICAgICk7Cn0KCnB1c2ggQENvbmZpZ0l0ZW1JRHMsICRTZWNvbmRDb25maWdJdGVtSUQ7CgojIGNyZWF0ZSBhIDNyZCBjb25maWdpdGVtIGluIHRoZSAybmQgY2xhc3MKbXkgJFRoaXJkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICBDbGFzc0lEID0+ICRTZWNvbmRDbGFzc0lELAogICAgVXNlcklEICA9PiAxLAopOwoKaWYgKCAhJFRoaXJkQ29uZmlnSXRlbUlEICkgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMCwKICAgICAgICAiRmFpbGVkIHRvIGFkZCB0aGUgdGhpcmQgY29uZmlnaXRlbSIsCiAgICApOwp9CgpwdXNoIEBDb25maWdJdGVtSURzLCAkVGhpcmRDb25maWdJdGVtSUQ7CgojIGdldCBkZXBsb3ltZW50IHN0YXRlIGxpc3QKbXkgJERlcGxTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCik7Cm15ICVEZXBsU3RhdGVMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJXskRGVwbFN0YXRlTGlzdH07CgojIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0Cm15ICRJbmNpU3RhdGVMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKKTsKbXkgJUluY2lTdGF0ZUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyRJbmNpU3RhdGVMaXN0fTsKCiMgc2V0IGEgbmFtZSBmb3IgZWFjaCBjb25maWdpdGVtCm15ICRGaXJzdEluaXRpYWxWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgIENvbmZpZ0l0ZW1JRCA9PiAkRmlyc3RDb25maWdJdGVtSUQsCiAgICBOYW1lICAgICAgICAgPT4gJE5hbWVQcmVmaXggLiAnRmlyc3QjMDAxJywKICAgIERlZmluaXRpb25JRCA9PiAkRmlyc3REZWZpbml0aW9uSUQsCiAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCmlmICggISRGaXJzdEluaXRpYWxWZXJzaW9uSUQgKSB7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAwLAogICAgICAgICJGYWlsZWQgdG8gYWRkIHRoZSBpbml0aWFsIHZlcnNpb24gZm9yIHRoZSBmaXJzdCBjb25maWdpdGVtIiwKICAgICk7Cn0KCm15ICRTZWNvbmRJbml0aWFsVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICBDb25maWdJdGVtSUQgPT4gJFNlY29uZENvbmZpZ0l0ZW1JRCwKICAgIE5hbWUgICAgICAgICA9PiAkTmFtZVByZWZpeCAuICdTZWNvbmQjMDAxJywKICAgIERlZmluaXRpb25JRCA9PiAkU2Vjb25kRGVmaW5pdGlvbklELAogICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgppZiAoICEkU2Vjb25kSW5pdGlhbFZlcnNpb25JRCApIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgIkZhaWxlZCB0byBhZGQgdGhlIGluaXRpYWwgdmVyc2lvbiBmb3IgdGhlIHNlY29uZCBjb25maWdpdGVtIiwKICAgICk7Cn0KCm15ICRUaGlyZEluaXRpYWxWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgIENvbmZpZ0l0ZW1JRCA9PiAkVGhpcmRDb25maWdJdGVtSUQsCiAgICBOYW1lICAgICAgICAgPT4gJE5hbWVQcmVmaXggLiAnU2Vjb25kIzAwMicsCiAgICBEZWZpbml0aW9uSUQgPT4gJFNlY29uZERlZmluaXRpb25JRCwKICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKaWYgKCAhJFRoaXJkSW5pdGlhbFZlcnNpb25JRCApIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgIkZhaWxlZCB0byBhZGQgdGhlIGluaXRpYWwgdmVyc2lvbiBmb3IgdGhlIHRoaXJkIGNvbmZpZ2l0ZW0iLAogICAgKTsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biB0aGUgYWN0dWFsIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgcmVhZCB0aGUgb3JpZ2luYWwgc2V0dGluZyBmb3IgdGhlIHNldHRpbmcgRW5hYmxlVW5pcXVlbmVzc0NoZWNrCm15ICRPcmlnRW5hYmxlU2V0dGluZyA9ICRDb25maWdPYmplY3QtPkdldCgnVW5pcXVlQ0lOYW1lOjpFbmFibGVVbmlxdWVuZXNzQ2hlY2snKTsKCiMgZW5hYmxlIHRoZSB1bmlxdWVuZXNzIGNoZWNrCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdVbmlxdWVDSU5hbWU6OkVuYWJsZVVuaXF1ZW5lc3NDaGVjaycsCiAgICBWYWx1ZSA9PiAxLAopOwoKIyByZWFkIHRoZSBvcmlnaW5hbCBzZXR0aW5nIGZvciB0aGUgc2NvcGUgb2YgdGhlIHVuaXF1ZW5lc3MgY2hlY2sKbXkgJE9yaWdTY29wZSA9ICRDb25maWdPYmplY3QtPkdldCgnVW5pcXVlQ0lOYW1lOjpVbmlxdWVuZXNzQ2hlY2tTY29wZScpOwoKIyBtYWtlIHN1cmUsIHRoZSBzY29wZSBmb3IgdGhlIHVuaXF1ZW5lc3MgY2hlY2sgaXMgc2V0IHRvICdnbG9iYWwnCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdVbmlxdWVDSU5hbWU6OlVuaXF1ZW5lc3NDaGVja1Njb3BlJywKICAgIFZhbHVlID0+ICdnbG9iYWwnLAopOwoKbXkgJFJlbmFtZVN1Y2Nlc3M7CgojIHRyeSB0byBnaXZlIHRoZSAxc3QgY29uZmlnaXRlbSB0aGUgc2FtZSBuYW1lIGFzIHRoZSAybmQgb25lCiRSZW5hbWVTdWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICBDb25maWdJdGVtSUQgPT4gJEZpcnN0Q29uZmlnSXRlbUlELAogICAgTmFtZSAgICAgICAgID0+ICROYW1lUHJlZml4IC4gJ1NlY29uZCMwMDEnLAogICAgRGVmaW5pdGlvbklEID0+ICRGaXJzdERlZmluaXRpb25JRCwKICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKJFNlbGYtPkZhbHNlKAogICAgJFJlbmFtZVN1Y2Nlc3MsCiAgICAiU2NvcGUgPT4gZ2xvYmFsOiBSZW5hbWluZyBGaXJzdCMwMDEgdG8gYWxyZWFkeSBleGlzdGluZyBTZWNvbmQjMDAxIHN1Y2Nlc3NmdWxseSBwcmV2ZW50ZWQiCik7CgojIHRyeSB0byBnaXZlIHRoZSAybmQgY29uZmlnaXRlbSB0aGUgc2FtZSBuYW1lIGFzIHRoZSAzcmQgb25lCiRSZW5hbWVTdWNjZXNzID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICBDb25maWdJdGVtSUQgPT4gJFNlY29uZENvbmZpZ0l0ZW1JRCwKICAgIE5hbWUgICAgICAgICA9PiAkTmFtZVByZWZpeCAuICdTZWNvbmQjMDAyJywKICAgIERlZmluaXRpb25JRCA9PiAkRmlyc3REZWZpbml0aW9uSUQsCiAgICBEZXBsU3RhdGVJRCAgPT4gJERlcGxTdGF0ZUxpc3RSZXZlcnNle1Byb2R1Y3Rpb259LAogICAgSW5jaVN0YXRlSUQgID0+ICRJbmNpU3RhdGVMaXN0UmV2ZXJzZXtPcGVyYXRpb25hbH0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRSZW5hbWVTdWNjZXNzLAogICAgIlNjb3BlID0+IGdsb2JhbDogUmVuYW1pbmcgU2Vjb25kIzAwMSB0byBhbHJlYWR5IGV4aXN0aW5nIFNlY29uZCMwMDIgc3VjY2Vzc2Z1bGx5IHByZXZlbnRlZCIKKTsKCiMgc2V0IHRoZSBzY29wZSBmb3IgdGhlIHVuaXF1ZW5lc3MgY2hlY2sgdG8gJ2NsYXNzJwokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnVW5pcXVlQ0lOYW1lOjpVbmlxdWVuZXNzQ2hlY2tTY29wZScsCiAgICBWYWx1ZSA9PiAnY2xhc3MnLAopOwoKIyB0cnkgdG8gcmVuYW1lIEZpcnN0IzAwMSBhZ2FpbiB0byBTZWNvbmQjMDAxIHdoaWNoIHNob3VsZCB3b3JrIG5vdywgZHVlIHRvIHRoZSBkaWZmZXJlbnQgY2xhc3MKJFJlbmFtZVN1Y2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgIENvbmZpZ0l0ZW1JRCA9PiAkRmlyc3RDb25maWdJdGVtSUQsCiAgICBOYW1lICAgICAgICAgPT4gJE5hbWVQcmVmaXggLiAnU2Vjb25kIzAwMScsCiAgICBEZWZpbml0aW9uSUQgPT4gJEZpcnN0RGVmaW5pdGlvbklELAogICAgRGVwbFN0YXRlSUQgID0+ICREZXBsU3RhdGVMaXN0UmV2ZXJzZXtQcm9kdWN0aW9ufSwKICAgIEluY2lTdGF0ZUlEICA9PiAkSW5jaVN0YXRlTGlzdFJldmVyc2V7T3BlcmF0aW9uYWx9LAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRSZW5hbWVTdWNjZXNzLAogICAgIlNjb3BlID0+IGNsYXNzOiBSZW5hbWluZyBGaXJzdCMwMDEgdG8gYWxyZWFkeSBleGlzdGluZyBTZWNvbmQjMDAxIHN1Y2NlZWRlZCIKKTsKCiMgdHJ5aW5nIG5vdyB0byBjcmVhdGUgYSBkdXBsaWNhdGUgbmFtZSB3aXRoaW4gYSBjbGFzcwokUmVuYW1lU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgQ29uZmlnSXRlbUlEID0+ICRTZWNvbmRDb25maWdJdGVtSUQsCiAgICBOYW1lICAgICAgICAgPT4gJE5hbWVQcmVmaXggLiAnU2Vjb25kIzAwMicsCiAgICBEZWZpbml0aW9uSUQgPT4gJFNlY29uZERlZmluaXRpb25JRCwKICAgIERlcGxTdGF0ZUlEICA9PiAkRGVwbFN0YXRlTGlzdFJldmVyc2V7UHJvZHVjdGlvbn0sCiAgICBJbmNpU3RhdGVJRCAgPT4gJEluY2lTdGF0ZUxpc3RSZXZlcnNle09wZXJhdGlvbmFsfSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKJFNlbGYtPkZhbHNlKAogICAgJFJlbmFtZVN1Y2Nlc3MsCiAgICAiU2NvcGUgPT4gY2xhc3M6IFJlbmFtaW5nIFNlY29uZCMwMDEgdG8gYWxyZWFkeSBleGlzdGluZyBTZWNvbmQjMDAyIHN1Y2Nlc3NmdWxseSBwcmV2ZW50ZWQiCik7CgojIHJlc2V0IHRoZSBlbmFibGVkIHNldHRpbmcgZm9yIHRoZSB1bmlxdWVuZXNzIGNoZWNrIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnVW5pcXVlQ0lOYW1lOjpFbmFibGVVbmlxdWVuZXNzQ2hlY2snLAogICAgVmFsdWUgPT4gJE9yaWdFbmFibGVTZXR0aW5nLAopOwoKIyByZXNldCB0aGUgc2NvcGUgZm9yIHRoZSB1bmlxdWVuZXNzIGNoZWNrIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnVW5pcXVlQ0lOYW1lOjpVbmlxdWVuZXNzQ2hlY2tTY29wZScsCiAgICBWYWx1ZSA9PiAkT3JpZ1Njb3BlLAopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IGNvbW1hbmQgb2JqZWN0Cm15ICRDb21tYW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpJVFNNOjpDb25maWdpdGVtOjpMaXN0RHVwbGljYXRlcycpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBjaGVjayBjb21tYW5kIHdpdGhvdXQgYW55IG9wdGlvbnMKbXkgJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDAsCiAgICAiTm8gb3B0aW9ucyAtIGxpc3QgYWxsIGNvbmZpZyBpdGVtcyBpbiBwcm9kdWN0aXZlIHN0YXRlcyIsCik7CgojIGNoZWNrIGNvbW1hbmQgd2l0aCAtLWNsYXNzIG9wdGlvbnMgKGludmFsaWQgY2xhc3MpCm15ICRSYW5kb21DbGFzcyA9ICdOb25FeGlzdGluZ0NsYXNzJyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCk7CiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1jbGFzcycsICRSYW5kb21DbGFzcyApOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJPcHRpb24gJ2NsYXNzJyAoYnV0IGNsYXNzICRSYW5kb21DbGFzcyBkb2Vzbid0IGV4aXN0KSAiLAopOwoKIyBhZGQgdGVzdCBjb25maWcgaXRlbQpteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKCiMgZ2V0ICdIYXJkd2FyZScgY2F0YWxvZyBjbGFzcyBJRHMKbXkgJENvbmZpZ0l0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgIE5hbWUgID0+ICdIYXJkd2FyZScsCik7Cm15ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtRGF0YVJlZi0+e0l0ZW1JRH07CgojIGdldCAnUHJvZHVjdGlvbicgZGVwbG95bWVudCBzdGF0ZSBJRHMKbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICBOYW1lICA9PiAnUHJvZHVjdGlvbicsCik7Cm15ICRQcm9kdWN0aW9uRGVwbFN0YXRlSUQgPSAkUHJvZHVjdGlvbkRlcGxTdGF0ZURhdGFSZWYtPntJdGVtSUR9OwoKIyBnZXQgQ29uZmlnSXRlbSBvYmplY3QKbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiMgY3JlYXRlIENvbmZpZ0l0ZW0gbnVtYmVyCm15ICRDb25maWdJdGVtTnVtYmVyID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUoCiAgICBUeXBlICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTUNvbmZpZ0l0ZW06Ok51bWJlckdlbmVyYXRvcicpLAogICAgQ2xhc3NJRCA9PiAkSGFyZHdhcmVDb25maWdJdGVtSUQsCik7CgpteSBAQ29uZmlnSXRlbUlEOwoKIyBhZGQgdGhlIG5ldyBDb25maWdJdGVtCm15ICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICBDbGFzc0lEID0+ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCwKICAgIFVzZXJJRCAgPT4gMSwKKTsKcHVzaCBAQ29uZmlnSXRlbUlELCAkQ29uZmlnSXRlbUlEOwoKbXkgJENvbmZpZ0l0ZW1OYW1lID0gJ1Rlc3RDb25maWdJdGVtJyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCk7Cm15ICRWZXJzaW9uSUQgICAgICA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgTmFtZSAgICAgICAgID0+ICRDb25maWdJdGVtTmFtZSwKICAgIERlZmluaXRpb25JRCA9PiAxLAogICAgRGVwbFN0YXRlSUQgID0+ICRQcm9kdWN0aW9uRGVwbFN0YXRlSUQsCiAgICBJbmNpU3RhdGVJRCAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCik7CgojIGFkZCB0aGUgbmV3IGR1cGxpY2F0ZSBDb25maWdJdGVtCiRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgIENsYXNzSUQgPT4gJEhhcmR3YXJlQ29uZmlnSXRlbUlELAogICAgVXNlcklEICA9PiAxLAopOwpwdXNoIEBDb25maWdJdGVtSUQsICRDb25maWdJdGVtSUQ7CgokVmVyc2lvbklEID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICBOYW1lICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OYW1lLAogICAgRGVmaW5pdGlvbklEID0+IDEsCiAgICBEZXBsU3RhdGVJRCAgPT4gJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCwKICAgIEluY2lTdGF0ZUlEICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKKTsKCiMgYWRkIHRoZSBuZXcgZHVwbGljYXRlIENvbmZpZ0l0ZW0gaW4gU29mdHdhcmUgY2F0YWxvZyBjbGFzcwojIGdldCAnU29mdHdhcmUnIGNhdGFsb2cgY2xhc3MgSURzCiRDb25maWdJdGVtRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICBOYW1lICA9PiAnU29mdHdhcmUnLAopOwpteSAkU29mdHdhcmVDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbURhdGFSZWYtPntJdGVtSUR9OwoKJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgQ2xhc3NJRCA9PiAkU29mdHdhcmVDb25maWdJdGVtSUQsCiAgICBVc2VySUQgID0+IDEsCik7CnB1c2ggQENvbmZpZ0l0ZW1JRCwgJENvbmZpZ0l0ZW1JRDsKCiRWZXJzaW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgIE5hbWUgICAgICAgICA9PiAkQ29uZmlnSXRlbU5hbWUsCiAgICBEZWZpbml0aW9uSUQgPT4gMSwKICAgIERlcGxTdGF0ZUlEICA9PiAkUHJvZHVjdGlvbkRlcGxTdGF0ZUlELAogICAgSW5jaVN0YXRlSUQgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAopOwoKIyBjaGVjayBjb21tYW5kIHdpdGggLS1jbGFzcyBIYXJkd2FyZSBvcHRpb25zCiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1jbGFzcycsICJIYXJkd2FyZSIgKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDAsCiAgICAiT3B0aW9uICdjbGFzcycgKEhhcmR3YXJlKSAiLAopOwoKIyBjaGVjayBjb21tYW5kIHdpdGggLS1zY29wZSBvcHRpb25zIChpbnZhbGlkIHNjb3BlKQpteSAkUmFuZG9tU2NvcGUgPSAnc2NvcGUnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLXNjb3BlJywgJFJhbmRvbVNjb3BlICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIk9wdGlvbiAnc2NvcGUnIChidXQgcHJvdmlkZWQgaW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uICctLXNjb3BlJyAtICRSYW5kb21TY29wZSApICIsCik7CgojIGNoZWNrIGNvbW1hbmQgd2l0aCAtLXNjb3BlIGNsYXNzIG9wdGlvbnMKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLXNjb3BlJywgJ2NsYXNzJyApOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMCwKICAgICJPcHRpb24gJ3Njb3BlJyAoY2xhc3MpICIsCik7CgojIGNoZWNrIGNvbW1hbmQgd2l0aCAtLXNjb3BlIGdsb2JhbCBvcHRpb25zCiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1zY29wZScsICdnbG9iYWwnICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk9wdGlvbiAnc2NvcGUnIChnbG9iYWwpICIsCik7CgojIGNoZWNrIGNvbW1hbmQgd2l0aCAtLWFsbC1zdGF0ZXMgb3B0aW9ucwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSgnLS1hbGwtc3RhdGVzJyk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk9wdGlvbiAnc2NvcGUnIChhbGwtc3RhdGVzKSAiLAopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFic2UKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCm15ICRDb21tYW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpJVFNNOjpDb25maWdpdGVtOjpEZWxldGUnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCm15ICRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIkFkbWluOjpJVFNNOjpDb25maWdpdGVtOjpEZWxldGUgZXhpdCBjb2RlIHdpdGhvdXQgb3B0aW9ucyIsCik7CgojIGNoZWNrIGNvbW1hbmQgd2l0aCBvcHRpb24gLS1hbGwgYW5kIGFyZ3VtZW50IC0tYWNjZXB0IG4gKCBjYW5jZWwgZGVsZXRpbmcgYWxsIGNvbmZpZyBpdGVtKQokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tYWxsJywgJ24nICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk9wdGlvbiAnLS1hbGwnIG4iLAopOwoKIyBjaGVjayBjb21tYW5kIHdpdGggY2xhc3Mgb3B0aW9ucyAoaW52YWxpZCBjbGFzcykKbXkgJFJhbmRvbUNsYXNzID0gJ1Rlc3RDbGFzcycgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tY2xhc3MnLCAkUmFuZG9tQ2xhc3MgKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiT3B0aW9uICdjbGFzcycgKGJ1dCBjbGFzcyAkUmFuZG9tQ2xhc3MgZG9lc24ndCBleGlzdCkgIiwKKTsKCiMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBvYmplY3QKbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CgojIGFkZCB0ZXN0IGdlbmVyYWwgY2F0YWxvZyBpdGVtCm15ICRHZW5lcmFsQ2F0YWxvZ0l0ZW1JRCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUFkZCgKICAgIENsYXNzICAgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgIE5hbWUgICAgPT4gJFJhbmRvbUNsYXNzLAogICAgVmFsaWRJRCA9PiAxLAogICAgQ29tbWVudCA9PiAnQ29tbWVudCcsCiAgICBVc2VySUQgID0+IDEsCik7CgokR2VuZXJhbENhdGFsb2dPYmplY3QtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoCiAgICBJdGVtSUQgPT4gJEdlbmVyYWxDYXRhbG9nSXRlbUlELAogICAgS2V5ICAgID0+ICdQZXJtaXNzaW9uJywKICAgIFZhbHVlICA9PiA1LAopOwoKJFNlbGYtPlRydWUoCiAgICAkR2VuZXJhbENhdGFsb2dJdGVtSUQsCiAgICAiVGVzdCBnZW5lcmFsIGNhdGFsb2cgaXRlbSBpcyBjcmVhdGVkIC0gJEdlbmVyYWxDYXRhbG9nSXRlbUlEICIsCik7CgojIGdldCBDb25maWdJdGVtIG9iamVjdApteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKIyBnZXQgbGlzdCBvZiBhbGwgZGVwbG95bWVudCBzdGF0ZXMKbXkgJERlcGxTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCik7Cm15ICVSZXZlcnNlRGVwbFN0YXRlTGlzdCA9IHJldmVyc2UgJXskRGVwbFN0YXRlTGlzdH07CgojIGdldCBsaXN0IG9mIGFsbCBpbmNpZGVudCBzdGF0ZXMKbXkgJEluY2lTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAopOwpteSAlUmV2ZXJzZUluY2lTdGF0ZUxpc3QgPSByZXZlcnNlICV7JEluY2lTdGF0ZUxpc3R9OwoKbXkgQENvbmZpZ0l0ZW1OdW1iZXJzOwpteSAkQ29uZmlnSXRlbUlEOwoKZm9yICggMSAuLiAxMCApIHsKCiAgICAjIGNyZWF0ZSBDb25maWdJdGVtIG51bWJlcgogICAgbXkgJENvbmZpZ0l0ZW1OdW1iZXIgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbU51bWJlckNyZWF0ZSgKICAgICAgICBUeXBlICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTUNvbmZpZ0l0ZW06Ok51bWJlckdlbmVyYXRvcicpLAogICAgICAgIENsYXNzSUQgPT4gJEdlbmVyYWxDYXRhbG9nSXRlbUlELAogICAgKTsKCiAgICAjIGFkZCB0ZXN0IENvbmZpZ0l0ZW0KICAgICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgIENsYXNzSUQgPT4gJEdlbmVyYWxDYXRhbG9nSXRlbUlELAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgcHVzaCBAQ29uZmlnSXRlbU51bWJlcnMsICRDb25maWdJdGVtTnVtYmVyOwoKICAgICMgYWRkIG5ldyB2ZXJzaW9ucyBmb3IgdGhlIGxhc3QgYWRkZWQgaW4gcHJldmlvdXMgbG9vcAogICAgbXkgJENvbmZpZ0l0ZW1OYW1lID0gJ1Rlc3RDb25maWdJdGVtJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgogICAgQ09VTlQ6CiAgICBmb3IgbXkgJENvdW50ICggMSAuLiA1MCApIHsKCiAgICAgICAgbXkgJFZlcnNpb25JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OYW1lIC4gJy0nIC4gJENvdW50LAogICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gMSwKICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICRSZXZlcnNlRGVwbFN0YXRlTGlzdHtQbGFubmVkfSwKICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+ICRSZXZlcnNlSW5jaVN0YXRlTGlzdHtPcGVyYXRpb25hbH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAgICAgIlZlcnNpb24gJENvdW50IGZvciBjb25maWcgaXRlbSAkQ29uZmlnSXRlbUlEIGlzIGNyZWF0ZWQgLSAkQ29uZmlnSXRlbU5hbWUiLAogICAgICAgICk7CgogICAgICAgICMgY2hhbmdlIHRoZSBkYXRlIGludG8gcGFzdCBmb3IgdGhlIGZpcnN0IDIwIHZlcnNpb25zCiAgICAgICAgbmV4dCBDT1VOVCBpZiAkQ291bnQgPiAxMDsKCiAgICAgICAgbXkgJFZlcnNpb25UZXN0Q3JlYXRlVGltZSA9ICcyMDEwLTAxLTAxIDAwOjAwOjAwJzsKCiAgICAgICAgIyBpbnNlcnQgbmV3IHZlcnNpb24KICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdVUERBVEUgY29uZmlnaXRlbV92ZXJzaW9uCiAgICAgICAgICAgICAgICBTRVQgY3JlYXRlX3RpbWUgPSA/CiAgICAgICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkVmVyc2lvblRlc3RDcmVhdGVUaW1lLAogICAgICAgICAgICAgICAgXCRWZXJzaW9uSUQsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGNvbW1hbmQgd2l0aCBhbGwtb2xkZXItdGhhbi1kYXlzLXZlcnNpb25zIG9wdGlvbnMgKGRlbGV0ZSBhbGwgdmVyc2lvbnMgb2xkZXIgdGhhbiBvbmUgZGF5KQogICAgJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLWFsbC1vbGRlci10aGFuLWRheXMtdmVyc2lvbnMnLCAxICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRFeGl0Q29kZSwKICAgICAgICAwLAogICAgICAgICJFeGl0IGNvZGU6IE9wdGlvbnMgLS1hbGwtb2xkZXItdGhhbi1kYXlzLXZlcnNpb25zIDEiLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiByZW1haW5pbmcgdmVyc2lvbnMgb2YgdGhpcyBjb25maWcgaXRlbQogICAgbXkgJFZlcnNpb25MaXN0ID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25MaXN0KAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgKTsKCiAgICAjIHJlc3VsdCBzaG91bGQgb25seSBiZSA0MCB2ZXJzaW9ucyBub3cKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQHskVmVyc2lvbkxpc3R9LAogICAgICAgIDQwLAogICAgICAgICJOdW1iZXIgb2YgcmVtYWluaW5nIHZlcnNpb25zIGFmdGVyIHJ1bm5pbmcgY29tbWFuZCB3aXRoIE9wdGlvbnMgLS1hbGwtb2xkZXItdGhhbi1kYXlzLXZlcnNpb25zIDEiLAogICAgKTsKCiAgICAjIGNoZWNrIGNvbW1hbmQgd2l0aCBhbGwtYnV0LWtlZXAtbGFzdC12ZXJzaW9ucyBvcHRpb25zIChkZWxldGUgYWxsIHZlcnNpb25zIGJ1dCBrZWVwIHRoZSBsYXN0IDMwIHZlcnNpb25zKQogICAgJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLWFsbC1idXQta2VlcC1sYXN0LXZlcnNpb25zJywgMzAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEV4aXRDb2RlLAogICAgICAgIDAsCiAgICAgICAgIkV4aXQgY29kZTogT3B0aW9ucyAtLWFsbC1idXQta2VlcC1sYXN0LXZlcnNpb25zIDMwIiwKICAgICk7CgogICAgIyBnZXQgdGhlIGxpc3Qgb2YgcmVtYWluaW5nIHZlcnNpb25zIG9mIHRoaXMgY29uZmlnIGl0ZW0KICAgICRWZXJzaW9uTGlzdCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uTGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgIyByZXN1bHQgc2hvdWxkIG9ubHkgYmUgNDAgdmVyc2lvbnMgbm93CiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEB7JFZlcnNpb25MaXN0fSwKICAgICAgICAzMCwKICAgICAgICAiTnVtYmVyIG9mIHJlbWFpbmluZyB2ZXJzaW9ucyBhZnRlciBydW5uaW5nIGNvbW1hbmQgd2l0aCBPcHRpb25zIC0tYWxsLWJ1dC1rZWVwLWxhc3QtdmVyc2lvbnMgMzAiLAogICAgKTsKCiAgICAjIGNoZWNrIGNvbW1hbmQgd2l0aCBhbGwtb2xkLXZlcnNpb25zIG9wdGlvbnMgKGRlbGV0ZSBhbGwgb2xkIHZlcnNpb25zIGV4Y2VwdCB0aGUgbGFzdCBvbmUpCiAgICAkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSgnLS1hbGwtb2xkLXZlcnNpb25zJyk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRFeGl0Q29kZSwKICAgICAgICAwLAogICAgICAgICJFeGl0IGNvZGU6IE9wdGlvbnMgLS1hbGwtb2xkLXZlcnNpb25zIiwKICAgICk7CgogICAgIyBnZXQgdGhlIGxpc3Qgb2YgcmVtYWluaW5nIHZlcnNpb25zIG9mIHRoaXMgY29uZmlnIGl0ZW0KICAgICRWZXJzaW9uTGlzdCA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uTGlzdCgKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgIyByZXN1bHQgc2hvdWxkIG9ubHkgYmUgNDAgdmVyc2lvbnMgbm93CiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEB7JFZlcnNpb25MaXN0fSwKICAgICAgICAxLAogICAgICAgICJOdW1iZXIgb2YgcmVtYWluaW5nIHZlcnNpb25zIGFmdGVyIHJ1bm5pbmcgY29tbWFuZCB3aXRoIE9wdGlvbnMgLS1hbGwtb2xkLXZlcnNpb25zIiwKICAgICk7Cn0KCiMgY2hlY2sgY29tbWFuZCB3aXRoIGNsYXNzIG9wdGlvbnMgKCRSYW5kb21DbGFzcyBjbGFzcykgYW5kIGRlcGxveW1lbnQtc3RhdGUgJ1BsYW5uZWQnCiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1jbGFzcycsICRSYW5kb21DbGFzcywgJy0tZGVwbG95bWVudC1zdGF0ZScsICdQbGFubmVkJyApOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMCwKICAgICJFeGl0IGNvZGU6IE9wdGlvbnMgLS1jbGFzcyAkUmFuZG9tQ2xhc3MgLS1kZXBsb3ltZW50LXN0YXRlJyBQbGFubmVkIiwKKTsKCiMgY2hlY2sgY29tbWFuZCB3aXRoIGNvbmZpZ2l0ZW0tbnVtYmVyIG9wdGlvbnMKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoCiAgICAnLS1jb25maWdpdGVtLW51bWJlcicsICRDb25maWdJdGVtTnVtYmVyc1swXSwgJy0tY29uZmlnaXRlbS1udW1iZXInLAogICAgJENvbmZpZ0l0ZW1OdW1iZXJzWzFdCik7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIkV4aXQgY29kZTogT3B0aW9ucyAtLWNvbmZpZ2l0ZW0tbnVtYmVyIiwKKTsKCiMgY2hlY2sgY29tbWFuZCB3aXRoIGNsYXNzIG9wdGlvbnMgKCRSYW5kb21DbGFzcyBjbGFzcykKIyB0aHJlZSBjb25maWcgSXRlbXMgb2YgdGVuIGNyZWF0ZWQgaW4gdGVzdCB3ZXJlIGRlbGV0ZWQgd2l0aCB0aGUgcHJldmlvdXMgY29tbWFuZHMKIyB3aXRoIHRoZSBuZXh0IGNvbW1hbmQgb3RoZXIgc2V2ZW4gd2lsbCBiZSBkZWxldGVkCiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1jbGFzcycsICRSYW5kb21DbGFzcyApOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMCwKICAgICJFeGl0IGNvZGU6IE9wdGlvbiAtLWNsYXNzICRSYW5kb21DbGFzcyIsCik7CgojIGNoZWNrIGNvbW1hbmQgd2l0aCBjb25maWdpdGVtLW51bWJlciBvcHRpb25zIGFuZCBub3QgYWxsb3dlZCBhZGRpdGlvbmFsIGNsYXNzIG9wdGlvbgokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tY29uZmlnaXRlbS1udW1iZXInLCAkQ29uZmlnSXRlbU51bWJlcnNbMF0sICctLWNsYXNzJywgJFJhbmRvbUNsYXNzICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIkV4aXQgY29kZTogT3B0aW9ucyAtLWNvbmZpZ2l0ZW0tbnVtYmVyIC0tY2xhc3MiLAopOwoKIyBjaGVjayBjb21tYW5kIHdpdGggY29uZmlnaXRlbS1udW1iZXIgb3B0aW9ucyBhbmQgbm90IGFsbG93ZWQgYWRkaXRpb25hbCBkZXBsb3ltZW50IHN0YXRlIG9wdGlvbgokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tY29uZmlnaXRlbS1udW1iZXInLCAkQ29uZmlnSXRlbU51bWJlcnNbMF0sICctLWRlcGxveW1lbnQtc3RhdGUnLCAnUGxhbm5lZCcgKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiRXhpdCBjb2RlOiBPcHRpb25zIC0tY29uZmlnaXRlbS1udW1iZXIgLS1kZXBsb3ltZW50LXN0YXRlIiwKKTsKCiMgY2hlY2sgY29tbWFuZCB3aXRoIC0tYWxsLCAtLWFsbC1vbGQtdmVyc2lvbnMsIC0tYWxsLWJ1dC1rZWVwLWxhc3QtdmVyc2lvbnMsIC0tYWxsLW9sZGVyLXRoYW4tZGF5cy12ZXJzaW9ucyBtaXhlZCB0b2dldGhlci4KJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoCiAgICAnLS1hbGwnLCAnLS1hbGwtb2xkLXZlcnNpb25zJywgICAgICAgICAgICAgJy0tYWxsLWJ1dC1rZWVwLWxhc3QtdmVyc2lvbnMnLAogICAgMiwgICAgICAgJy0tYWxsLW9sZGVyLXRoYW4tZGF5cy12ZXJzaW9ucycsICcxMCcKKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiRXhpdCBjb2RlOiBPcHRpb25zIC0tYWxsIC0tYWxsLW9sZC12ZXJzaW9ucyAtLWFsbC1idXQta2VlcC1sYXN0LXZlcnNpb25zIDIgLS1hbGwtb2xkZXItdGhhbi1kYXlzLXZlcnNpb25zIDEwIiwKKTsKCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCm15ICRDb21tYW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZScpOwoKbXkgJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDAsCiAgICAiQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIGV4aXQgY29kZSIsCik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKKTsKbXkgJFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiApOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCm15ICRDbGFzc0lEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1BZGQoCiAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICBOYW1lICAgID0+ICRSYW5kb21JRCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkQ2xhc3NJRCwKICAgICJDbGFzcyBhZGRlZCB0byBHZW5lcmFsQ2F0YWxvZyIsCik7CgpteSAkVmVyc2lvbiA9IDE7CgpteSAkUGVybERlZmluaXRpb24gPSA8PCAnRU9GJzsKWwogICAgewogICAgICAgIEtleSAgICAgICAgPT4gJ1ZlbmRvcicsCiAgICAgICAgTmFtZSAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1ZlbmRvcicpLAogICAgICAgIFNlYXJjaGFibGUgPT4gMSwKICAgICAgICBJbnB1dCAgICAgID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgfSwKICAgICAgICBDb3VudE1pbiAgICAgPT4gMSwKICAgICAgICBDb3VudE1heCAgICAgPT4gMSwKICAgICAgICBDb3VudERlZmF1bHQgPT4gMSwKICAgIH0sCl0KRU9GCgpteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCnJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAnCiAgICAgICAgSU5TRVJUIElOVE8gY29uZmlnaXRlbV9kZWZpbml0aW9uCiAgICAgICAgICAgIChjbGFzc19pZCwgY29uZmlnaXRlbV9kZWZpbml0aW9uLCB2ZXJzaW9uLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5KQogICAgICAgIFZBTFVFUwogICAgICAgICAgICAoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgIEJpbmQgPT4gWyBcJENsYXNzSUQsIFwkUGVybERlZmluaXRpb24sIFwkVmVyc2lvbiwgXCRVc2VySUQgXSwKKTsKCnJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgU1FMID0+ICcKICAgICAgICBTRUxFQ1QgaWQKICAgICAgICBGUk9NIGNvbmZpZ2l0ZW1fZGVmaW5pdGlvbgogICAgICAgIFdIRVJFIGNsYXNzX2lkID0gPwogICAgICAgICAgICBBTkQgdmVyc2lvbiA9ID8KICAgICAgICBPUkRFUiBCWSB2ZXJzaW9uIERFU0MnLAogICAgQmluZCAgPT4gWyBcJENsYXNzSUQsIFwkVmVyc2lvbiBdLAogICAgTGltaXQgPT4gMSwKKTsKCm15ICREZWZpbml0aW9uSUQ7CndoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgJERlZmluaXRpb25JRCA9ICRSb3dbMF07Cn0KCm15ICRHZXREZWZpbml0aW9uID0gc3ViIHsKICAgIG15ICVQYXJhbSA9IEBfOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFNFTEVDVCBjb25maWdpdGVtX2RlZmluaXRpb24KICAgICAgICAgICAgRlJPTSBjb25maWdpdGVtX2RlZmluaXRpb24KICAgICAgICAgICAgV0hFUkUgaWQgPSA/CiAgICAgICAgICAgIE9SREVSIEJZIHZlcnNpb24gREVTQycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0RlZmluaXRpb25JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkRGVmaW5pdGlvbjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREZWZpbml0aW9uID0gJFJvd1swXTsKICAgIH0KICAgIHJldHVybiAkRGVmaW5pdGlvbjsKfTsKCm15ICREZWZpbml0aW9uID0gJEdldERlZmluaXRpb24tPiggRGVmaW5pdGlvbklEID0+ICREZWZpbml0aW9uSUQgKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICREZWZpbml0aW9uLAogICAgJFBlcmxEZWZpbml0aW9uLAogICAgIkRlZmluaXRpb24gYmVmb3JlIHJ1biAoUGVybCkiLAopOwoKbXkgJENvbW1hbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6Q29tbWFuZDo6TWFpbnQ6OklUU006OkNvbmZpZ2l0ZW06OkRlZmluaXRpb25QZXJsMllBTUwnKTsKCm15ICggJFJlc3VsdCwgJEV4aXRDb2RlICk7Cgp7CiAgICBsb2NhbCAqU1RET1VUOwogICAgb3BlbiBTVERPVVQsICc+OnV0ZjgnLCBcJFJlc3VsdDsgICAgIyMgbm8gY3JpdGljCiAgICAkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSgpOwp9CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIkNvbW1hbmQgZXhpdCBjb2RlIiwKKTsKCiREZWZpbml0aW9uID0gJEdldERlZmluaXRpb24tPiggRGVmaW5pdGlvbklEID0+ICREZWZpbml0aW9uSUQgKTsKCm15ICRZQU1MRGVmaW5pdGlvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpZQU1MJyktPkR1bXAoCiAgICBEYXRhID0+IGV2YWwgJFBlcmxEZWZpbml0aW9uLCAgICAjIyBubyBjcml0aWMKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICREZWZpbml0aW9uLAogICAgJFlBTUxEZWZpbml0aW9uLAogICAgIkRlZmluaXRpb24gYmVmb3JlIHJ1biAoWUFNTCkiLAopOwoKMTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKCi8vIFRPRE86Ci8vUmVtb3ZlIHRoaXMgbGluZSBhbmQgZml4IEpTRG9jCi8vIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6SmF2YVNjcmlwdDo6RVNMaW50KQoKCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CklUU00uQWdlbnQuQ29uZmlnSXRlbSA9IElUU00uQWdlbnQuQ29uZmlnSXRlbSB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIElUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2gKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIHNlYXJjaC4KICovCklUU00uQWdlbnQuQ29uZmlnSXRlbS5DdXN0b21lclNlYXJjaCA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXQKICAgICAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkRWxlbWVudCAtIFRoZSBqUXVlcnkgb2JqZWN0IG9mIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGF1dG9jb21wbGV0ZS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplcyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewoKICAgICAgICB2YXIgQ3VzdG9tZXJTZWFyY2hJdGVtSURzID0gQ29yZS5Db25maWcuR2V0KCdDdXN0b21lclNlYXJjaEl0ZW1JRHMnKTsKCiAgICAgICAgaWYgKHR5cGVvZiBDdXN0b21lclNlYXJjaEl0ZW1JRHMgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkoQ3VzdG9tZXJTZWFyY2hJdGVtSURzKSAmJiBDdXN0b21lclNlYXJjaEl0ZW1JRHMubGVuZ3RoKSB7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEN1c3RvbWVyU2VhcmNoSXRlbUlEcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgLy8gZXNjYXBlIHBvc3NpYmxlIGNvbG9ucyAoOikgaW4gZWxlbWVudCBpZCBiZWNhdXNlIGpRdWVyeSBjYW4gbm90IGhhbmRsZSBpdCBpbiBpZCBhdHRyaWJ1dGUgc2VsZWN0b3JzCiAgICAgICAgICAgICAgICBJVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoLkluaXQoICQoIiMiICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoQ3VzdG9tZXJTZWFyY2hJdGVtSURzW2ldKSApICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5Db25maWdJdGVtLkN1c3RvbWVyU2VhcmNoIHx8IHt9KSk7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKCi8vIFRPRE86Ci8vUmVtb3ZlIHRoaXMgbGluZSBhbmQgZml4IEpTRG9jCi8vIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6SmF2YVNjcmlwdDo6RVNMaW50KQoKCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CklUU00uQWdlbnQuQ29uZmlnSXRlbSA9IElUU00uQWdlbnQuQ29uZmlnSXRlbSB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIElUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2gKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIHNlYXJjaC4KICovCklUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2ggPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBzZWFyY2ggc2NyZWVuLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBJVFNNQ29uZmlnSXRlbU9wZW5TZWFyY2hEaWFsb2cgPSBDb3JlLkNvbmZpZy5HZXQoJ0lUU01Db25maWdJdGVtT3BlblNlYXJjaERpYWxvZycpOwogICAgICAgIGlmICggSVRTTUNvbmZpZ0l0ZW1PcGVuU2VhcmNoRGlhbG9nICkgewogICAgICAgICAgICBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uU2VhcmNoLk9wZW5TZWFyY2hEaWFsb2coCiAgICAgICAgICAgICAgICBJVFNNQ29uZmlnSXRlbU9wZW5TZWFyY2hEaWFsb2cuQWN0aW9uLAogICAgICAgICAgICAgICAgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoSVRTTUNvbmZpZ0l0ZW1PcGVuU2VhcmNoRGlhbG9nLlByb2ZpbGUpLAogICAgICAgICAgICAgICAgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoSVRTTUNvbmZpZ0l0ZW1PcGVuU2VhcmNoRGlhbG9nLkNsYXNzSUQpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gcmVidWlsZCBhdHRyaWJ1dGUgc2VsZWN0aW9uLCBvbmx5IHNob3cgYXZhaWxhYmxlIGF0dHJpYnV0ZXMuCiAgICAgKi8KICAgIFRhcmdldE5TLkFkZGl0aW9uYWxBdHRyaWJ1dGVTZWxlY3Rpb25SZWJ1aWxkID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAvLyBnZXQgb3JpZ2luYWwgc2VsZWN0aW9uIHdpdGggYWxsIHBvc3NpYmxlIGZpZWxkcyBhbmQgY2xvbmUgaXQKICAgICAgICB2YXIgJEF0dHJpYnV0ZUNsb25lID0gJCgnI0F0dHJpYnV0ZU9yaWcgb3B0aW9uJykuY2xvbmUoKSwKICAgICAgICAgICAgJEF0dHJpYnV0ZVNlbGVjdGlvbiA9ICQoJyNBdHRyaWJ1dGUnKS5lbXB0eSgpLAogICAgICAgICAgICBWYWx1ZTsKCiAgICAgICAgLy8gc3RyaXAgYWxsIGFscmVhZHkgdXNlZCBhdHRyaWJ1dGVzCiAgICAgICAgJEF0dHJpYnV0ZUNsb25lLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICBWYWx1ZSA9IENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKCQodGhpcykuYXR0cigndmFsdWUnKSk7CiAgICAgICAgICAgIGlmICghJCgnI1NlYXJjaEluc2VydCBsYWJlbCNMYWJlbCcgKyBWYWx1ZSkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAkQXR0cmlidXRlU2VsZWN0aW9uLmFwcGVuZCgkKHRoaXMpKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAkQXR0cmlidXRlU2VsZWN0aW9uLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJyk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IG9mIGF0dHJpYnV0ZSB0byBhZGQuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBhZGRzIG9uZSBhdHRyaWJ1dGUgZm9yIHNlYXJjaAogICAgICovCiAgICBUYXJnZXROUy5TZWFyY2hBdHRyaWJ1dGVBZGQgPSBmdW5jdGlvbiAoQXR0cmlidXRlKSB7CgogICAgICAgIC8vIGVzY2FwZSBwb3NzaWJsZSBjb2xvbnMgKDopIGluIGVsZW1lbnQgaWQgYmVjYXVzZSBqUXVlcnkgY2FuIG5vdCBoYW5kbGUgaXQgaW4gaWQgYXR0cmlidXRlIHNlbGVjdG9ycwogICAgICAgIEF0dHJpYnV0ZSA9IENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKEF0dHJpYnV0ZSk7CgogICAgICAgIHZhciAkTGFiZWwgPSAkKCcjU2VhcmNoQXR0cmlidXRlc0hpZGRlbiBsYWJlbCNMYWJlbCcgKyBBdHRyaWJ1dGUpOwoKICAgICAgICBpZiAoJExhYmVsLmxlbmd0aCkgewogICAgICAgICAgICAkTGFiZWwucHJldigpLmNsb25lKCkuYXBwZW5kVG8oJyNTZWFyY2hJbnNlcnQnKTsKICAgICAgICAgICAgJExhYmVsLmNsb25lKCkuYXBwZW5kVG8oJyNTZWFyY2hJbnNlcnQnKTsKICAgICAgICAgICAgJExhYmVsLm5leHQoKS5jbG9uZSgpLmFwcGVuZFRvKCcjU2VhcmNoSW5zZXJ0JykKCiAgICAgICAgICAgICAgICAvLyBiaW5kIGNsaWNrIGZ1bmN0aW9uIHRvIHJlbW92ZSBidXR0b24gbm93CiAgICAgICAgICAgICAgICAuZmluZCgnLlJlbW92ZUJ1dHRvbicpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgJEVsZW1lbnQgPSAkKHRoaXMpLnBhcmVudCgpOwogICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLlNlYXJjaEF0dHJpYnV0ZVJlbW92ZSgkRWxlbWVudCk7CgogICAgICAgICAgICAgICAgICAgIC8vIHJlYnVpbGQgc2VsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TlMuQWRkaXRpb25hbEF0dHJpYnV0ZVNlbGVjdGlvblJlYnVpbGQoKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gc2V0IGF1dG9jb21wbGV0ZSB0byBjdXN0b21lciB0eXBlIGZpZWxkcwogICAgICAgICAgICAgICAgJCgnI1NlYXJjaEluc2VydCcpLmZpbmQoJy5JVFNNQ3VzdG9tZXJTZWFyY2gnKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBJbnB1dElEID0gJCh0aGlzKS5hdHRyKCdpZCcpICsgJ0F1dG9jb21wbGV0ZSc7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnSVRTTUN1c3RvbWVyU2VhcmNoJyk7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdpZCcsIElucHV0SUQpOwogICAgICAgICAgICAgICAgICAgICQodGhpcykucHJldigpLmF0dHIoJ2lkJywgSW5wdXRJRCArICdTZWxlY3RlZCcpOwoKICAgICAgICAgICAgICAgICAgICAvLyBlc2NhcGUgcG9zc2libGUgY29sb25zICg6KSBpbiBlbGVtZW50IGlkIGJlY2F1c2UgalF1ZXJ5IGNhbiBub3QgaGFuZGxlIGl0IGluIGlkIGF0dHJpYnV0ZSBzZWxlY3RvcnMKICAgICAgICAgICAgICAgICAgICBJVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoLkluaXQoICQoJyMnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoSW5wdXRJRCkgKSApOwoKICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGRpYWxvZyBjbG9zdXJlIHdoZW4gc2VsZWN0IGEgY3VzdG9tZXIgZnJvbSB0aGUgbGlzdAogICAgICAgICAgICAgICAgICAgICQoJ3VsLnVpLWF1dG9jb21wbGV0ZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKEV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICBDb3JlLlVJLklucHV0RmllbGRzLkFjdGl2YXRlKCQoJyNTZWFyY2hJbnNlcnQnKSk7CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkRWxlbWVudCBUaGUgalF1ZXJ5IG9iamVjdCBvZiB0aGUgZm9ybSAgb3IgYW55IGVsZW1lbnQKICAgICAqICAgICAgd2l0aGluIHRoaXMgZm9ybSBjaGVjay4KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHJlbW92ZSBhdHRyaWJ1dGVzIGZyb20gYW4gZWxlbWVudC4KICAgICAqLwoKICAgIFRhcmdldE5TLlNlYXJjaEF0dHJpYnV0ZVJlbW92ZSA9IGZ1bmN0aW9uICgkRWxlbWVudCkgewogICAgICAgICRFbGVtZW50LnByZXYoKS5wcmV2KCkucmVtb3ZlKCk7CiAgICAgICAgJEVsZW1lbnQucHJldigpLnJlbW92ZSgpOwogICAgICAgICRFbGVtZW50LnJlbW92ZSgpOwogICAgfTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHByaXZhdGUKICAgICAqIEBwYXJhbSB7U3RyaW5nfSBQcm9maWxlIFRoZSBwcm9maWxlIG5hbWUgdGhhdCB3aWxsIGJlIGRlbGV0ZS4KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBhIHByb2ZpbGUgdmlhIGFuIGFqYXggcmVxdWVzdHMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIFNlYXJjaFByb2ZpbGVEZWxldGUoUHJvZmlsZSkgewogICAgICAgIHZhciBEYXRhID0gewogICAgICAgICAgICBBY3Rpb246ICdBZ2VudElUU01Db25maWdJdGVtU2VhcmNoJywKICAgICAgICAgICAgU3ViYWN0aW9uOiAnQUpBWFByb2ZpbGVEZWxldGUnLAogICAgICAgICAgICBQcm9maWxlOiBQcm9maWxlLAogICAgICAgICAgICBDbGFzc0lEOiAkKCcjU2VhcmNoQ2xhc3NJRCcpLnZhbCgpCiAgICAgICAgfTsKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKAogICAgICAgICAgICBDb3JlLkNvbmZpZy5HZXQoJ0NHSUhhbmRsZScpLAogICAgICAgICAgICBEYXRhLAogICAgICAgICAgICBmdW5jdGlvbiAoKSB7fQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwcml2YXRlCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqIEBkZXNjcmlwdGlvbiBTaG93cyB3YWl0aW5nIGRpYWxvZyB1bnRpbCBzZWFyY2ggc2NyZWVuIGlzIHJlYWR5LgogICAgICovCiAgICBmdW5jdGlvbiBTaG93V2FpdGluZ0RpYWxvZygpIHsKICAgICAgICB2YXIgQ29udGVudCA9IENvcmUuVGVtcGxhdGUuUmVuZGVyKAogICAgICAgICAgICAnQWdlbnQvSVRTTUNvcmUvTG9hZGluZ0RpYWxvZycsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNwYW5UaXRsZTogQ29yZS5Db25maWcuR2V0KCdMb2FkaW5nTXNnJykKICAgICAgICAgICAgfQogICAgICAgICk7CgogICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKAogICAgICAgICAgICBDb250ZW50LAogICAgICAgICAgICBDb3JlLkNvbmZpZy5HZXQoJ0xvYWRpbmdNc2cnKSwKICAgICAgICAgICAgJzEwcHgnLAogICAgICAgICAgICAnQ2VudGVyJywKICAgICAgICAgICAgdHJ1ZQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSBub25lCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBzZXRzIGFsbCBzZWFyY2ggZGlhbG9nIHNldHRpbmdzCiAgICAgKi8KCiAgICBUYXJnZXROUy5TZXRTZWFyY2hEaWFsb2cgPSBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gaGlkZSBhZGQgdGVtcGxhdGUgYmxvY2sKICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZUFkZEJsb2NrJykuaGlkZSgpOwoKICAgICAgICAvLyBoaWRlIHNhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSBibG9jawogICAgICAgICQoJyNTYXZlUHJvZmlsZScpLnBhcmVudCgpLmhpZGUoKS5wcmV2KCkuaGlkZSgpLnByZXYoKS5oaWRlKCk7CgogICAgICAgIC8vIHNlYXJjaCBwcm9maWxlIGlzIHNlbGVjdGVkCiAgICAgICAgaWYgKCQoJyNTZWFyY2hQcm9maWxlJykudmFsKCkgJiYgJCgnI1NlYXJjaFByb2ZpbGUnKS52YWwoKSAhPT0gJ2xhc3Qtc2VhcmNoJykgewoKICAgICAgICAgICAgLy8gc2hvdyBkZWxldGUgYnV0dG9uCiAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlRGVsZXRlJykuc2hvdygpOwoKICAgICAgICAgICAgLy8gc2hvdyBwcm9maWxlIGxpbmsKICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBc0xpbmsnKS5zaG93KCk7CgogICAgICAgICAgICAvLyBzaG93IHNhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSBibG9jawogICAgICAgICAgICAkKCcjU2F2ZVByb2ZpbGUnKS5wYXJlbnQoKS5zaG93KCkucHJldigpLnNob3coKS5wcmV2KCkuc2hvdygpOwoKICAgICAgICAgICAgLy8gc2V0IFNhdmVQcm9maWxlIHRvIDAKICAgICAgICAgICAgJCgnI1NhdmVQcm9maWxlJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIENvcmUuVUkuSW5wdXRGaWVsZHMuQWN0aXZhdGUoJCgnLkRpYWxvZzp2aXNpYmxlJykpOwoKICAgICAgICAvLyByZWdpc3RlciBhZGQgb2YgYXR0cmlidXRlCiAgICAgICAgJCgnI0F0dHJpYnV0ZScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBBdHRyaWJ1dGUgPSAkKCcjQXR0cmlidXRlJykudmFsKCk7CiAgICAgICAgICAgIFRhcmdldE5TLlNlYXJjaEF0dHJpYnV0ZUFkZChBdHRyaWJ1dGUpOwogICAgICAgICAgICBUYXJnZXROUy5BZGRpdGlvbmFsQXR0cmlidXRlU2VsZWN0aW9uUmVidWlsZCgpOwoKICAgICAgICAgICAgLy8gUmVnaXN0ZXIgZXZlbnQgZm9yIHRyZWUgc2VsZWN0aW9uIGRpYWxvZwogICAgICAgICAgICAkKCcuU2hvd1RyZWVTZWxlY3Rpb24nKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgQ29yZS5VSS5UcmVlU2VsZWN0aW9uLlNob3dUcmVlU2VsZWN0aW9uKCQodGhpcykpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gcmVnaXN0ZXIgcmV0dXJuIGtleQogICAgICAgICQoJyNTZWFyY2hGb3JtJykub2ZmKCdrZXlwcmVzcy5GaWx0ZXJJbnB1dCcpLm9uKCdrZXlwcmVzcy5GaWx0ZXJJbnB1dCcsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgICAgICBpZiAoKEV2ZW50LmNoYXJDb2RlIHx8IEV2ZW50LmtleUNvZGUpID09PSAxMykgewogICAgICAgICAgICAgICAgaWYgKCFDaGVja0ZvclNlYXJjaGVkVmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybVN1Ym1pdCcpLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gcmVnaXN0ZXIgc3VibWl0CiAgICAgICAgJCgnI1NlYXJjaEZvcm1TdWJtaXQnKS5vZmYoJ2NsaWNrLkRvU2VhcmNoJykub24oJ2NsaWNrLkRvU2VhcmNoJywgZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgdmFyIFNob3duQXR0cmlidXRlcyA9IFtdOwoKICAgICAgICAgICAgaWYgKCQoJyNTZWFyY2hQcm9maWxlQWRkQWN0aW9uLCAjU2VhcmNoUHJvZmlsZUFkZE5hbWUnKS5pcygnOnZpc2libGUnKSAmJiAkKCcjU2VhcmNoUHJvZmlsZUFkZE5hbWUnKS52YWwoKSkgewogICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBZGRBY3Rpb24nKS50cmlnZ2VyKCdjbGljaycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyByZW1lbWJlciBzaG93biBhdHRyaWJ1dGVzCiAgICAgICAgICAgICQoJyNTZWFyY2hJbnNlcnQgbGFiZWwnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2lkJykpIHsKICAgICAgICAgICAgICAgICAgICBTaG93bkF0dHJpYnV0ZXMucHVzaCgkKHRoaXMpLmF0dHIoJ2lkJykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJCgnI1NlYXJjaEZvcm0gI1Nob3duQXR0cmlidXRlcycpLnZhbChTaG93bkF0dHJpYnV0ZXMuam9pbignOycpKTsKCiAgICAgICAgICAgIC8vIE5vcm1hbCByZXN1bHRzIG1vZGUgd2lsbCByZXR1cm4gSFRNTCBpbiB0aGUgc2FtZSB3aW5kb3cKICAgICAgICAgICAgaWYgKCQoJyNTZWFyY2hGb3JtICNSZXN1bHRGb3JtJykudmFsKCkgPT09ICdOb3JtYWwnKSB7CgogICAgICAgICAgICAgICAgaWYgKCFDaGVja0ZvclNlYXJjaGVkVmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBDaGVja1NlYXJjaFN0cmluZ3NGb3JTdG9wV29yZHMoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsgLy8gUHJpbnQgYW5kIENTViBzaG91bGQgb3BlbiBpbiBhIG5ldyB3aW5kb3csIG5vIHdhaXRpbmcgZGlhbG9nCiAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLmF0dHIoJ3RhcmdldCcsICdTZWFyY2hSZXN1bHRQYWdlJyk7CiAgICAgICAgICAgICAgICBpZiAoIUNoZWNrRm9yU2VhcmNoZWRWYWx1ZXMoKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIENoZWNrU2VhcmNoU3RyaW5nc0ZvclN0b3BXb3JkcyhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNTZWFyY2hGb3JtJykuc3VibWl0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNTZWFyY2hGb3JtJykuYXR0cigndGFyZ2V0JywgJycpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkluaXQoKTsKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuU2V0U3VibWl0RnVuY3Rpb24oJCgnI1NlYXJjaEZvcm0nKSwgZnVuY3Rpb24gKEZvcm0pIHsKICAgICAgICAgICAgRm9ybS5zdWJtaXQoKTsKCiAgICAgICAgICAgIC8vIFNob3cgb25seSBhIHdhaXRpbmcgZGlhbG9nIGZvciBOb3JtYWwgcmVzdWx0cyBtb2RlLCBiZWNhdXNlIHRoaXMgcmVzdWx0CiAgICAgICAgICAgIC8vICB3aWxsIHJldHVybiB0aGUgSFRNTCBpbiB0aGUgc2FtZSB3aW5kb3cuCiAgICAgICAgICAgIGlmICgkKCcjU2VhcmNoRm9ybSAjUmVzdWx0Rm9ybScpLnZhbCgpID09PSAnTm9ybWFsJykgewogICAgICAgICAgICAgICAgU2hvd1dhaXRpbmdEaWFsb2coKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBsb2FkIHByb2ZpbGUKICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIFNlYXJjaFByb2ZpbGUgPSAkKCcjU2VhcmNoUHJvZmlsZScpLnZhbCgpLAogICAgICAgICAgICAgICAgU2VhcmNoUHJvZmlsZUNsYXNzSUQgPSAkKCcjU2VhcmNoQ2xhc3NJRCcpLnZhbCgpLAogICAgICAgICAgICAgICAgU2VhcmNoUHJvZmlsZUFjdGlvbiA9ICQoJyNTZWFyY2hBY3Rpb24nKS52YWwoKTsKCiAgICAgICAgICAgIFRhcmdldE5TLk9wZW5TZWFyY2hEaWFsb2coU2VhcmNoUHJvZmlsZUFjdGlvbiwgU2VhcmNoUHJvZmlsZSwgU2VhcmNoUHJvZmlsZUNsYXNzSUQpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CgogICAgICAgIC8vIHNob3cgYWRkIHByb2ZpbGUgYmxvY2sgb3Igbm90CiAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVOZXcnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBZGRCbG9jaycpLnRvZ2dsZSgpOwogICAgICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZUFkZE5hbWUnKS5mb2N1cygpOwogICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CgogICAgICAgIC8vIGFkZCBuZXcgcHJvZmlsZQogICAgICAgICQoJyNTZWFyY2hQcm9maWxlQWRkQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBQcm9maWxlTmFtZSwgJEVsZW1lbnQxOwoKICAgICAgICAgICAgLy8gZ2V0IG5hbWUKICAgICAgICAgICAgUHJvZmlsZU5hbWUgPSAkKCcjU2VhcmNoUHJvZmlsZUFkZE5hbWUnKS52YWwoKTsKCiAgICAgICAgICAgIC8vIGNoZWNrIG5hbWUKICAgICAgICAgICAgaWYgKCFQcm9maWxlTmFtZS5sZW5ndGggfHwgUHJvZmlsZU5hbWUubGVuZ3RoIDwgMikgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBhZGQgbmFtZSB0byBwcm9maWxlIHNlbGVjdGlvbgogICAgICAgICAgICAkRWxlbWVudDEgPSAkKCcjU2VhcmNoUHJvZmlsZScpLmNoaWxkcmVuKCkuZmlyc3QoKS5jbG9uZSgpOwogICAgICAgICAgICAkRWxlbWVudDEudGV4dChQcm9maWxlTmFtZSk7CiAgICAgICAgICAgICRFbGVtZW50MS5hdHRyKCd2YWx1ZScsIFByb2ZpbGVOYW1lKTsKICAgICAgICAgICAgJEVsZW1lbnQxLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7CiAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlJykuYXBwZW5kKCRFbGVtZW50MSkudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKTsKCiAgICAgICAgICAgIC8vIHNldCBpbnB1dCBib3ggdG8gZW1wdHkKICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBZGROYW1lJykudmFsKCcnKTsKCiAgICAgICAgICAgIC8vIGhpZGUgYWRkIHRlbXBsYXRlIGJsb2NrCiAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlQWRkQmxvY2snKS5oaWRlKCk7CgogICAgICAgICAgICAvLyBoaWRlIHNhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSBibG9jawogICAgICAgICAgICAkKCcjU2F2ZVByb2ZpbGUnKS5wYXJlbnQoKS5oaWRlKCkucHJldigpLmhpZGUoKS5wcmV2KCkuaGlkZSgpOwoKICAgICAgICAgICAgLy8gc2V0IFNhdmVQcm9maWxlIHRvIDEKICAgICAgICAgICAgJCgnI1NhdmVQcm9maWxlJykucHJvcCgnY2hlY2tlZCcsIHRydWUpOwoKICAgICAgICAgICAgLy8gc2hvdyBkZWxldGUgYnV0dG9uCiAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlRGVsZXRlJykuc2hvdygpOwoKICAgICAgICAgICAgLy8gc2hvdyBwcm9maWxlIGxpbmsKICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBc0xpbmsnKS5zaG93KCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIGRpcmVjdCBsaW5rIHRvIHByb2ZpbGUKICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZUFzTGluaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgU2VhcmNoUHJvZmlsZSA9ICQoJyNTZWFyY2hQcm9maWxlJykudmFsKCksCiAgICAgICAgICAgICAgICBTZWFyY2hQcm9maWxlQWN0aW9uID0gJCgnI1NlYXJjaEFjdGlvbicpLnZhbCgpLAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9ICQoJyNTZWFyY2hDbGFzc0lEJykudmFsKCk7CgogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArICdBY3Rpb249JyArIFNlYXJjaFByb2ZpbGVBY3Rpb24gKwogICAgICAgICAgICAnO1N1YmFjdGlvbj1TZWFyY2g7VGFrZUxhc3RTZWFyY2g9MTtTYXZlUHJvZmlsZT0xO1Byb2ZpbGU9JyArIGVuY29kZVVSSUNvbXBvbmVudChTZWFyY2hQcm9maWxlKQogICAgICAgICAgICArICc7Q2xhc3NJRD0nICsgQ2xhc3NJRDsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICAvLyBkZWxldGUgcHJvZmlsZQogICAgICAgICQoJyNTZWFyY2hQcm9maWxlRGVsZXRlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CgogICAgICAgICAgICAvLyBzdHJpcCBhbGwgYWxyZWFkeSB1c2VkIGF0dHJpYnV0ZXMKICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGUnKS5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ3ZhbHVlJykgIT09ICdsYXN0LXNlYXJjaCcpIHsKCiAgICAgICAgICAgICAgICAgICAgLy8gcmVidWlsZCBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgICAgJCgnI1NlYXJjaEluc2VydCcpLnRleHQoJycpOwoKICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgcmVtb3RlCiAgICAgICAgICAgICAgICAgICAgU2VhcmNoUHJvZmlsZURlbGV0ZSgkKHRoaXMpLnZhbCgpKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGxvY2FsCiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdyBmdWxsdGV4dAogICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLlNlYXJjaEF0dHJpYnV0ZUFkZCgnRnVsbHRleHQnKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gcmVidWlsZCBzZWxlY3Rpb24KICAgICAgICAgICAgICAgICAgICBUYXJnZXROUy5BZGRpdGlvbmFsQXR0cmlidXRlU2VsZWN0aW9uUmVidWlsZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGUnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKCiAgICAgICAgICAgIGlmICgkKCcjU2VhcmNoUHJvZmlsZScpLnZhbCgpICYmICQoJyNTZWFyY2hQcm9maWxlJykudmFsKCkgPT09ICdsYXN0LXNlYXJjaCcpIHsKCiAgICAgICAgICAgICAgICAvLyBoaWRlIGRlbGV0ZSBsaW5rCiAgICAgICAgICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZURlbGV0ZScpLmhpZGUoKTsKCiAgICAgICAgICAgICAgICAvLyBzaG93IHByb2ZpbGUgbGluawogICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBc0xpbmsnKS5oaWRlKCk7CgogICAgICAgICAgICB9CgogICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CgogICAgfTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtQcm9maWxlfSBUaGUgcHJvZmlsZSB0aGF0IGlzIHNldCB0byB0aGUgc2VhcmNoIGRpYWxvZwogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gcmVmcmVzaCB0aGUgc2VhcmNoIGRpYWxvZyB3aXRoIHRoZSBzZWxlY3RlZCBwcm9maWxlCiAgICAgKi8KCiAgICBUYXJnZXROUy5Mb2FkUHJvZmlsZSA9IGZ1bmN0aW9uIChQcm9maWxlKSB7CiAgICAgICAgdmFyIEJhc2VMaW5rID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLAogICAgICAgICAgICBBY3Rpb24gPSAnQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1TZWFyY2g7JywKICAgICAgICAgICAgU3ViQWN0aW9uID0gJ1N1YmFjdGlvbj1BSkFYVXBkYXRlOycsCiAgICAgICAgICAgIENsYXNzSUQgPSAnQ2xhc3NJRD0nICsgJCgnI1NlYXJjaENsYXNzSUQnKS52YWwoKSArICc7JywKICAgICAgICAgICAgU2VhcmNoUHJvZmlsZSA9ICdQcm9maWxlPScgKyBQcm9maWxlLAogICAgICAgICAgICBVUkwgPSAgQmFzZUxpbmsgKyBBY3Rpb24gKyBTdWJBY3Rpb24gKyBDbGFzc0lEICsgU2VhcmNoUHJvZmlsZTsKCiAgICAgICAgJCgnI0RpdkNsYXNzSUQnKS5hZGRDbGFzcygndWktYXV0b2NvbXBsZXRlLWxvYWRpbmcnKTsKICAgICAgICBDb3JlLkFKQVguQ29udGVudFVwZGF0ZSgkKCcjQUpBWFVwZGF0ZScpLCBVUkwsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgSVRTTVNlYXJjaFByb2ZpbGVBdHRyaWJ1dGVzID0gQ29yZS5Db25maWcuR2V0KCdJVFNNU2VhcmNoUHJvZmlsZUF0dHJpYnV0ZXMnKSB8fCBbXTsKICAgICAgICAgICAgJC5lYWNoKElUU01TZWFyY2hQcm9maWxlQXR0cmlidXRlcywgZnVuY3Rpb24oSWR4LCBBdHRyaWJ1dGUpIHsKICAgICAgICAgICAgICAgIElUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2guU2VhcmNoQXR0cmlidXRlQWRkKENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKEF0dHJpYnV0ZSkpOwogICAgICAgICAgICAgICAgSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5BZGRpdGlvbmFsQXR0cmlidXRlU2VsZWN0aW9uUmVidWlsZCgpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIFRhcmdldE5TLlNldFNlYXJjaERpYWxvZyggJyRFbnZ7IkFjdGlvbiJ9JyApOwogICAgICAgICAgICAkKCcjSVRTTVNlYXJjaFByb2ZpbGUnKS5yZW1vdmVDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgICAgICQoJyNJVFNNU2VhcmNoRmllbGRzJykucmVtb3ZlQ2xhc3MoJ0hpZGRlbicpOwogICAgICAgICAgICAkKCcuRGlhbG9nOnZpc2libGUgI1NlYXJjaEZvcm1TdWJtaXQnKS5hcHBlbmRUbygkKCcuRGlhbG9nOnZpc2libGUgPiAuQ29udGVudCA+IC5Db250ZW50Rm9vdGVyJykpOwogICAgICAgICAgICAkKCcjU2VhcmNoRm9ybVN1Ym1pdCcpLnJlbW92ZUNsYXNzKCdIaWRkZW4nKTsKICAgICAgICAgICAgJCgnI0RpdkNsYXNzSUQnKS5yZW1vdmVDbGFzcygndWktYXV0b2NvbXBsZXRlLWxvYWRpbmcnKTsKICAgICAgICAgICAgQ29yZS5VSS5JbnB1dEZpZWxkcy5BY3RpdmF0ZSgkKCcjU2VhcmNoRm9ybScpKTsKICAgICAgICB9KTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgQ2hlY2tGb3JTZWFyY2hlZFZhbHVlcwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuU2VhcmNoCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBGYWxzZSBpZiBubyB2YWx1ZXMgd2VyZSBmb3VuZCwgdHJ1ZSBpZiB2YWx1ZXMgd2hlcmUgdGhlcmUuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgQ2hlY2tzIGlmIGFueSB2YWx1ZXMgd2VyZSBlbnRlcmVkIGluIHRoZSBzZWFyY2guCiAgICAgKiAgICAgIElmIG5vdGhpbmcgYXQgYWxsIGV4aXN0cywgaXQgYWxlcnRzIHdpdGggdHJhbnNsYXRlZDoKICAgICAqICAgICAgIlBsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZyIKICAgICAqLwogICAgZnVuY3Rpb24gQ2hlY2tGb3JTZWFyY2hlZFZhbHVlcygpIHsKICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIFNlcmFjaEZvcm0gbGFiZWxzCiAgICAgICAgdmFyIFNlYXJjaFZhbHVlRmxhZyA9IGZhbHNlOwogICAgICAgICQoJyNTZWFyY2hGb3JtIGxhYmVsJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBFbGVtZW50TmFtZSwKICAgICAgICAgICAgICAgICRFbGVtZW50LAogICAgICAgICAgICAgICAgJExhYmVsRWxlbWVudCA9ICQodGhpcyksCiAgICAgICAgICAgICAgICAkRmllbGRFbGVtZW50ID0gJExhYmVsRWxlbWVudC5uZXh0KCcuRmllbGQnKTsKICAgICAgICAgICAgLy8gdGhvc2Ugd2l0aCBJRCdzIGFyZSB1c2VkIGZvciBzZWFyY2hpbmcKICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignaWQnKSkgewoKICAgICAgICAgICAgICAgIC8vIHN1YnN0cmluZyAiTGFiZWwiIChlLmcuIGZpcnN0IGZpdmUgY2hhcmFjdGVycyApIGZyb20gdGhlCiAgICAgICAgICAgICAgICAvLyBsYWJlbCBpZCwgdXNlIHRoZSByZW1haW5pbmcgbmFtZSBhcyBuYW1lIHN0cmluZyBmb3IgYWNjZXNzaW5nCiAgICAgICAgICAgICAgICAvLyB0aGUgZm9ybSBpbnB1dCdzIHZhbHVlCiAgICAgICAgICAgICAgICBFbGVtZW50TmFtZSA9ICQodGhpcykuYXR0cignaWQnKS5zdWJzdHJpbmcoNSk7CiAgICAgICAgICAgICAgICAkRWxlbWVudCA9ICQoJyNTZWFyY2hGb3JtIGlucHV0W25hbWU9JyArIENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKEVsZW1lbnROYW1lKSArICddJyk7CgogICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBubyBpbnB1dCBlbGVtZW50IHdpdGggdGhlIHNlbGVjdGVkIG5hbWUKICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIG5leHQgInNlbGVjdCIgZWxlbWVudCBhbmQgdXNlIHRoYXQgb25lIGZvciBjaGVja2luZwogICAgICAgICAgICAgICAgaWYgKCEkRWxlbWVudC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudCA9ICQodGhpcykubmV4dCgpLmZpbmQoJ3NlbGVjdCcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgYnVnIzEwODQ1OiBtYWtlIHN1cmUgdGltZSBzbG90IGZpZWxkcyB3aXRoIFRpbWVJbnB1dEZvcm1hdAogICAgICAgICAgICAgICAgLy8gJ0lucHV0JyBzZXQgYXJlIGJlaW5nIGNvbnNpZGVyZWQgY29ycmVjdGx5LCB0b28uIEFzIHRoaXMgaXMgb25seQogICAgICAgICAgICAgICAgLy8gcmVsZXZhbnQgZm9yIHNlYXJjaCB0eXBlICdUaW1lU2xvdCcsIHdlIGNoZWNrIGZvciB0aGUgZmlyc3QKICAgICAgICAgICAgICAgIC8vIGlucHV0IHR5cGU9dGV4dCBlbG1lbnQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgZWxlbWVudC4KICAgICAgICAgICAgICAgIC8vIEFsbCB0aW1lIGZpZWxkIGVsZW1lbnRzIGhhdmUgdG8gYmUgZmlsbGVkIGluLCBidXQgaWYgb25seSBvbmUKICAgICAgICAgICAgICAgIC8vIGlzIG1pc3NpbmcsIHdlIHRyZWF0IHRoZSB3aG9sZSBmaWVsZCBhcyBpbnZhbGlkLgogICAgICAgICAgICAgICAgaWYgKCRGaWVsZEVsZW1lbnQuZmluZCgnaW5wdXRbbmFtZSQ9IlNlYXJjaFR5cGUiXScpLnZhbCgpID09PSAnVGltZVNsb3QnICYmICEkRmllbGRFbGVtZW50LmZpbmQoJ3NlbGVjdCcpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICRFbGVtZW50ID0gJEZpZWxkRWxlbWVudC5maW5kKCdpbnB1dFt0eXBlPXRleHRdJykuZmlyc3QoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJEVsZW1lbnQubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRFbGVtZW50LnZhbCgpICYmICRFbGVtZW50LnZhbCgpICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICBTZWFyY2hWYWx1ZUZsYWcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghU2VhcmNoVmFsdWVGbGFnKSB7CiAgICAgICAgICAgYWxlcnQoQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCBvbmUgc2VhcmNoIHZhbHVlIG9yICogdG8gZmluZCBhbnl0aGluZy4nKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBTZWFyY2hWYWx1ZUZsYWc7CiAgICB9CgogICAgICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBuYW1lIENoZWNrU2VhcmNoU3RyaW5nc0ZvclN0b3BXb3JkcwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuU2VhcmNoCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IENhbGxiYWNrIC0gZnVuY3Rpb24gdG8gZXhlY3V0ZSwgaWYgbm8gc3RvcCB3b3JkcyB3ZXJlIGZvdW5kLgogICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBzcGVjaWZpYyB2YWx1ZXMgb2YgdGhlIHNlYXJjaCBmb3JtIGNvbnRhaW4gc3RvcCB3b3Jkcy4KICAgICAqICAgICAgICAgICAgICBJZiBzdG9wIHdvcmRzIGFyZSBwcmVzZW50LCBhIHdhcm5pbmcgd2lsbCBiZSBkaXNwbGF5ZWQuCiAgICAgKiAgICAgICAgICAgICAgSWYgc3RvcCB3b3JkcyBhcmUgbm90IHByZXNlbnQsIHRoZSBnaXZlbiBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkLgogICAgICovCiAgICBmdW5jdGlvbiBDaGVja1NlYXJjaFN0cmluZ3NGb3JTdG9wV29yZHMoQ2FsbGJhY2spIHsKICAgICAgICB2YXIgU2VhcmNoU3RyaW5ncyA9IHt9LAogICAgICAgICAgICBTZWFyY2hTdHJpbmdzRm91bmQgPSAwLAogICAgICAgICAgICBSZWxldmFudEVsZW1lbnROYW1lcyA9IHsKICAgICAgICAgICAgICAgICdGcm9tJzogMSwKICAgICAgICAgICAgICAgICdUbyc6IDEsCiAgICAgICAgICAgICAgICAnQ2MnOiAxLAogICAgICAgICAgICAgICAgJ1N1YmplY3QnOiAxLAogICAgICAgICAgICAgICAgJ0JvZHknOiAxLAogICAgICAgICAgICAgICAgJ0Z1bGx0ZXh0JzogMQogICAgICAgICAgICB9OwoKICAgICAgICBpZiAoIUNvcmUuQ29uZmlnLkdldCgnQ2hlY2tTZWFyY2hTdHJpbmdzRm9yU3RvcFdvcmRzJykpIHsKICAgICAgICAgICAgQ2FsbGJhY2soKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJCgnI1NlYXJjaEZvcm0gbGFiZWwnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEVsZW1lbnROYW1lLAogICAgICAgICAgICAgICAgJEVsZW1lbnQ7CgogICAgICAgICAgICAvLyB0aG9zZSB3aXRoIElEJ3MgYXJlIHVzZWQgZm9yIHNlYXJjaGluZwogICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdpZCcpKSB7CgogICAgICAgICAgICAgICAgLy8gc3Vic3RyaW5nICJMYWJlbCIgKGUuZy4gZmlyc3QgZml2ZSBjaGFyYWN0ZXJzICkgZnJvbSB0aGUKICAgICAgICAgICAgICAgIC8vIGxhYmVsIGlkLCB1c2UgdGhlIHJlbWFpbmluZyBuYW1lIGFzIG5hbWUgc3RyaW5nIGZvciBhY2Nlc3NpbmcKICAgICAgICAgICAgICAgIC8vIHRoZSBmb3JtIGlucHV0J3MgdmFsdWUKICAgICAgICAgICAgICAgIEVsZW1lbnROYW1lID0gJCh0aGlzKS5hdHRyKCdpZCcpLnN1YnN0cmluZyg1KTsKICAgICAgICAgICAgICAgIGlmICghUmVsZXZhbnRFbGVtZW50TmFtZXNbRWxlbWVudE5hbWVdKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRFbGVtZW50ID0gJCgnI1NlYXJjaEZvcm0gaW5wdXRbbmFtZT0nICsgRWxlbWVudE5hbWUgKyAnXScpOwoKICAgICAgICAgICAgICAgIGlmICgkRWxlbWVudC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJEVsZW1lbnQudmFsKCkgJiYgJEVsZW1lbnQudmFsKCkgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNlYXJjaFN0cmluZ3NbRWxlbWVudE5hbWVdID0gJEVsZW1lbnQudmFsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIFNlYXJjaFN0cmluZ3NGb3VuZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIENoZWNrIGlmIHN0b3Agd29yZHMgYXJlIHByZXNlbnQuCiAgICAgICAgaWYgKCFTZWFyY2hTdHJpbmdzRm91bmQpIHsKICAgICAgICAgICAgQ2FsbGJhY2soKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgQUpBWFN0b3BXb3JkQ2hlY2soCiAgICAgICAgICAgIFNlYXJjaFN0cmluZ3MsCiAgICAgICAgICAgIGZ1bmN0aW9uIChGb3VuZFN0b3BXb3JkcykgewogICAgICAgICAgICAgICAgYWxlcnQoQ29yZS5Db25maWcuR2V0KCdTZWFyY2hTdHJpbmdzQ29udGFpblN0b3BXb3Jkc01zZycpICsgIlxuIiArIEZvdW5kU3RvcFdvcmRzKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2FsbGJhY2sKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge0V2ZW50fSBBY3Rpb24KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIG9wZW4gdGhlIHNlYXJjaCBkaWFsb2cKICAgICAqLwoKICAgIFRhcmdldE5TLk9wZW5TZWFyY2hEaWFsb2cgPSBmdW5jdGlvbiAoQWN0aW9uLCBQcm9maWxlLCBDbGFzcykgewoKICAgICAgICB2YXIgUmVmZXJyZXIgPSBDb3JlLkNvbmZpZy5HZXQoJ0FjdGlvbicpLAogICAgICAgICAgICBEYXRhOwoKICAgICAgICBpZiAoIUFjdGlvbikgewogICAgICAgICAgICBBY3Rpb24gPSdBZ2VudElUU01Db25maWdJdGVtU2VhcmNoJzsKICAgICAgICB9CiAgICAgICAgRGF0YSA9IHsKICAgICAgICAgICAgQWN0aW9uOiBBY3Rpb24sCiAgICAgICAgICAgIFJlZmVycmVyOiBSZWZlcnJlciwKICAgICAgICAgICAgUHJvZmlsZTogUHJvZmlsZSwKICAgICAgICAgICAgU3ViYWN0aW9uOiAnQUpBWCcsCiAgICAgICAgICAgIENsYXNzSUQ6IENsYXNzCiAgICAgICAgfTsKCiAgICAgICAgU2hvd1dhaXRpbmdEaWFsb2coKTsKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKAogICAgICAgICAgICBDb3JlLkNvbmZpZy5HZXQoJ0NHSUhhbmRsZScpLAogICAgICAgICAgICBEYXRhLAogICAgICAgICAgICBmdW5jdGlvbiAoSFRNTCkgewoKICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB3YWl0aW5nIGRpYWxvZyB3YXMgY2FuY2VsZWQsIGRvIG5vdCBzaG93IHRoZSBzZWFyY2gKICAgICAgICAgICAgICAgIC8vICBkaWFsb2cgYXMgd2VsbAogICAgICAgICAgICAgICAgaWYgKCEkKCcuRGlhbG9nOnZpc2libGUnKS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coSFRNTCwgQ29yZS5Db25maWcuR2V0KCdTZWFyY2hNc2cnKSwgJzEwcHgnLCAnQ2VudGVyJywgdHJ1ZSwgW10sIHRydWUpOwoKICAgICAgICAgICAgICAgICQoJyNTZWFyY2hDbGFzc0lEJykub2ZmKCdjaGFuZ2UuU2VhcmNoUHJvZmlsZScpLm9uKCdjaGFuZ2UuU2VhcmNoUHJvZmlsZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmICggJCgnI1NlYXJjaENsYXNzSUQnKS52YWwoKSAhPT0gIiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIElUU00uQWdlbnQuQ29uZmlnSXRlbS5TZWFyY2guTG9hZFByb2ZpbGUoICQoJyNTZWFyY2hQcm9maWxlJykudmFsKCkgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlJykuYXR0cigiaWQiLCAiU2VhcmNoUHJvZmlsZU9sZCIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHZhciBDbGFzc1NlbGVjdGVkID0gJCgnI1NlYXJjaENsYXNzSUQnKS52YWwoKTsKICAgICAgICAgICAgICAgIGlmIChDbGFzc1NlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5Mb2FkUHJvZmlsZSgkKCcjU2VhcmNoUHJvZmlsZScpLnZhbCgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBUYXJnZXROUy5TZXRTZWFyY2hEaWFsb2coKTsKICAgICAgICAgICAgfSwgJ2h0bWwnCiAgICAgICAgKTsKICAgIH07CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uU2VhcmNoIHx8IHt9KSk7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKSVRTTS5BZ2VudC5Db25maWdJdGVtID0gSVRTTS5BZ2VudC5Db25maWdJdGVtIHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5Db25maWdJdGVtLkFkZAogKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5Db25maWdJdGVtCiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciB0aGUgY29uZmlnIGl0ZW0gYWRkLgogKi8KSVRTTS5BZ2VudC5Db25maWdJdGVtLkFkZCA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKgogICAgKiBAbmFtZSBJbml0CiAgICAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uQWRkCiAgICAqIEBmdW5jdGlvbgogICAgKiBAZGVzY3JpcHRpb24KICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRhYmxlIGZpbHRlci4KICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIENvcmUuVUkuVGFibGUuSW5pdFRhYmxlRmlsdGVyKCQoJyNGaWx0ZXJDbGFzc2VzJyksICQoJyNDbGFzc2VzJykpOwogICAgfTsKCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuQ29uZmlnSXRlbS5BZGQgfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKSVRTTS5BZ2VudC5Db25maWdJdGVtID0gSVRTTS5BZ2VudC5Db25maWdJdGVtIHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5Db25maWdJdGVtLkVkaXQKICogQG1lbWJlcm9mIElUU00uQWdlbnQKICogQGF1dGhvciBPVFJTIEFHCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSBjb25maWcgaXRlbSBlZGl0LgogKi8KSVRTTS5BZ2VudC5Db25maWdJdGVtLkVkaXQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoKICAgICogQG5hbWUgSW5pdAogICAgKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5Db25maWdJdGVtLkVkaXQKICAgICogQGZ1bmN0aW9uCiAgICAqIEBkZXNjcmlwdGlvbgogICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGZvcm0gc3VibWl0dGlvbi4KICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICQoJyNTdWJtaXRCdXR0b24nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICQoJ2lucHV0W25hbWU9U3VibWl0U2F2ZV0nKS52YWwoJzEnKTsKICAgICAgICB9KTsKCiAgICAgICAgJCgnI0NhbmNlbEJ1dHRvbicpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKENvcmUuVUkuUG9wdXAuQ3VycmVudElzUG9wdXBXaW5kb3coKSkgewogICAgICAgICAgICAgICAgQ29yZS5VSS5Qb3B1cC5DbG9zZVBvcHVwKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgJCgnLkRpc2FibGVWYWxpZGF0aW9uJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVN1Ym1pdFNhdmVdJykudmFsKCcwJyk7CiAgICAgICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkKCcjQ2xhc3NJdGVtJykpOwogICAgICAgICAgICAvLyBmaXggZm9yIFNhZmFyaTogcmFjZSBjb25kaXRpb24gd2l0aCBzdWJtaXQgaW4gQ29yZS5Gb3JtLlZhbGlkYXRlLmpzCiAgICAgICAgICAgIC8vIGZpeGVkIGluIE9UUlMgMy4wLjUsIHRoaXMgbGluZSByZW1haW5zIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMKICAgICAgICAgICAgJCgnI0NsYXNzSXRlbScpLnJlbW92ZUNsYXNzKCdQcmV2ZW50TXVsdGlwbGVTdWJtaXRzJyk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFJlZ2lzdGVyIHJldHVybiBrZXkuIEJ1dCBub3QgaW4gdGV4dGFyZWFzLgogICAgICAgICQoJyNDbGFzc0l0ZW0nKS5vZmYoJ2tleXByZXNzLkZpbHRlcklucHV0Jykub24oJ2tleXByZXNzLkZpbHRlcklucHV0JywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgICAgIGlmICgoRXZlbnQuY2hhckNvZGUgfHwgRXZlbnQua2V5Q29kZSkgPT09IDEzICYmICgkKEV2ZW50LnRhcmdldCkucHJvcCgndGFnTmFtZScpICE9PSAnVEVYVEFSRUEnKSkgewogICAgICAgICAgICAgICAgJCgnI1N1Ym1pdEJ1dHRvbicpLmNsaWNrKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uRWRpdCB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKLyplc2xpbnQtZGlzYWJsZSBuby13aW5kb3cqLwoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKSVRTTS5BZ2VudC5Db25maWdJdGVtID0gSVRTTS5BZ2VudC5Db25maWdJdGVtIHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5Db25maWdJdGVtLkhpc3RvcnkKICogQG1lbWJlcm9mIElUU00uQWdlbnQuQ29uZmlnSXRlbQogKiBAYXV0aG9yIE9UUlMgQUcKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbmZpZyBpdGVtIGhpc3RvcnkuCiAqLwpJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uSGlzdG9yeSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKgogICAgKiBAbmFtZSBJbml0CiAgICAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uSGlzdG9yeQogICAgKiBAZnVuY3Rpb24KICAgICogQGRlc2NyaXB0aW9uCiAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcG9wdXAuCiAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAkKCdhLkxpbmtab29tVmlldycpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgd2luZG93Lm9wZW5lci5Db3JlLlVJLlBvcHVwLkZpcmVQb3B1cEV2ZW50KCdVUkwnLCB7IFVSTDogJCh0aGlzKS5hdHRyKCdocmVmJyl9KTsKICAgICAgICAgICAgQ29yZS5VSS5Qb3B1cC5DbG9zZVBvcHVwKCk7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5Db25maWdJdGVtLkhpc3RvcnkgfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKSVRTTS5BZ2VudC5Db25maWdJdGVtID0gSVRTTS5BZ2VudC5Db25maWdJdGVtIHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20KICogQG1lbWJlcm9mIElUU00uQWdlbnQuQ29uZmlnSXRlbQogKiBAYXV0aG9yIE9UUlMgQUcKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbmZpZyBpdGVtIGFkZC4KICovCklUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qCiAgICAqIEBuYW1lIEluaXQKICAgICogQG1lbWJlcm9mIElUU00uQWdlbnQuQ29uZmlnSXRlbS5ab29tCiAgICAqIEBmdW5jdGlvbgogICAgKiBAZGVzY3JpcHRpb24KICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGNvbmZpZyBpdGVtIHpvb20gc2VjdGlvbi4KICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBJVFNNU2hvd0NvbmZpcm1EaWFsb2cgPSBDb3JlLkNvbmZpZy5HZXQoJ0lUU01TaG93Q29uZmlybURpYWxvZycpOwoKICAgICAgICBJVFNNLkFnZW50Llpvb20uSW5pdChDb3JlLkNvbmZpZy5HZXQoJ1VzZXJDb25maWdJdGVtWm9vbVRhYmxlSGVpZ2h0JykpOwoKICAgICAgICAkKCd1bC5BY3Rpb25zIGEuQXNQb3B1cCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICAkKCcuTWFzdGVyQWN0aW9uJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAgICAgLy8gb25seSBhY3QgaWYgdGhlIGxpbmsgd2FzIG5vdCBjbGlja2VkIGRpcmVjdGx5CiAgICAgICAgICAgIGlmIChFdmVudC50YXJnZXQgIT09ICRNYXN0ZXJBY3Rpb25MaW5rLmdldCgwKSkgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIEluaXRpYWxpemUgYWxsb2NhdGlvbiBsaXN0IGZvciBsaW5rIG9iamVjdCB0YWJsZS4KICAgICAgICBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5TZXRBbGxvY2F0aW9uTGlzdCgpOwoKICAgICAgICBpZiAoSVRTTVNob3dDb25maXJtRGlhbG9nKSB7CiAgICAgICAgICAgICQuZWFjaChJVFNNU2hvd0NvbmZpcm1EaWFsb2csIGZ1bmN0aW9uKEtleSwgRGF0YSkgewogICAgICAgICAgICAgICAgSVRTTS5BZ2VudC5Db25maXJtRGlhbG9nLkJpbmRDb25maXJtRGlhbG9nKHsKICAgICAgICAgICAgICAgICAgICBFbGVtZW50SUQ6ICAgICAgICAgICAgICAgICAgRGF0YS5NZW51SUQsCiAgICAgICAgICAgICAgICAgICAgRWxlbWVudFNlbGVjdG9yOiAgICAgICAgICAgIERhdGEuRWxlbWVudFNlbGVjdG9yLAogICAgICAgICAgICAgICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICBEYXRhLkRpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZywKICAgICAgICAgICAgICAgICAgICBDb25maXJtZWRBY3Rpb25RdWVyeVN0cmluZzogRGF0YS5Db25maXJtZWRBY3Rpb25RdWVyeVN0cmluZywKICAgICAgICAgICAgICAgICAgICBEaWFsb2dUaXRsZTogICAgICAgICAgICAgICAgRGF0YS5EaWFsb2dUaXRsZSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBZZXM6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCJZZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgTm86ICBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgiTm8iKSwKICAgICAgICAgICAgICAgICAgICAgICAgT2s6ICBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgiT2siKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5Db25maWdJdGVtLlpvb20gfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKSVRTTS5BZ2VudC5Db25maWdJdGVtID0gSVRTTS5BZ2VudC5Db25maWdJdGVtIHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5Db25maWdJdGVtLk92ZXJ2aWV3CiAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0KICogQGF1dGhvciBPVFJTIEFHCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSBjb25maWcgaXRlbSBvdmVydmlldyBuYXZiYXIuCiAqLwpJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uT3ZlcnZpZXcgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoKICAgICogQG5hbWUgSW5pdAogICAgKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5Db25maWdJdGVtLk92ZXJ2aWV3CiAgICAqIEBmdW5jdGlvbgogICAgKiBAZGVzY3JpcHRpb24KICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBvdmVydmlldyBiZWhhdmlvdXJzLgogICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIElUU01Db25maWdJdGVtU2VhcmNoICAgID0gQ29yZS5Db25maWcuR2V0KCdJVFNNQ29uZmlnSXRlbVNlYXJjaCcpOwogICAgICAgIHZhciBJVFNNQ29uZmlnSXRlbUFjdGlvblJvdyA9IENvcmUuQ29uZmlnLkdldCgnSVRTTUNvbmZpZ0l0ZW1BY3Rpb25Sb3cnKSB8fCB7fTsKCiAgICAgICAgJCgnI1Nob3dDb250ZXh0U2V0dGluZ3NEaWFsb2cnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coJCgnI0NvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lcicpLCBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgiU2V0dGluZ3MiKSwgJzIwJScsICdDZW50ZXInLCB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWw6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCJTdWJtaXQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZTogJ1N1Ym1pdCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzOiAnUHJpbWFyeScKICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICBpZiAoSVRTTUNvbmZpZ0l0ZW1TZWFyY2gpIHsKICAgICAgICAgICAgJCgnI0lUU01Db25maWdJdGVtU2VhcmNoJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgSVRTTS5BZ2VudC5Db25maWdJdGVtLlNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nKAogICAgICAgICAgICAgICAgICAgICdBZ2VudElUU01Db25maWdJdGVtU2VhcmNoJywKICAgICAgICAgICAgICAgICAgICBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcihJVFNNQ29uZmlnSXRlbVNlYXJjaC5Qcm9maWxlKSwKICAgICAgICAgICAgICAgICAgICBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcihJVFNNQ29uZmlnSXRlbVNlYXJjaC5DbGFzc0lEKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAkLmVhY2goSVRTTUNvbmZpZ0l0ZW1BY3Rpb25Sb3csIGZ1bmN0aW9uKEtleSwgRGF0YSkgewogICAgICAgICAgICBJVFNNLlVJLkNvbmZpZ0l0ZW1BY3Rpb25Sb3cuQWRkQWN0aW9ucygkKCcjQ29uZmlnSXRlbUlEXycgKyBLZXkpLCBEYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgSVRTTS5VSS5Db25maWdJdGVtQWN0aW9uUm93LkluaXQoKTsKCiAgICAgICAgQ29yZS5VSS5Jbml0Q2hlY2tib3hTZWxlY3Rpb24oJCgndGFibGUgdGQuQ2hlY2tib3gnKSk7CgogICAgICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgdmFyICRNYXN0ZXJBY3Rpb25MaW5rID0gJCh0aGlzKS5maW5kKCcuTWFzdGVyQWN0aW9uTGluaycpOwogICAgICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICAgICAgaWYgKEV2ZW50LnRhcmdldCAhPT0gJE1hc3RlckFjdGlvbkxpbmsuZ2V0KDApKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkTWFzdGVyQWN0aW9uTGluay5hdHRyKCdocmVmJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uT3ZlcnZpZXcgfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKCi8vIFRPRE86Ci8vUmVtb3ZlIHRoaXMgbGluZSBhbmQgZml4IEpTRG9jCi8vIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6SmF2YVNjcmlwdDo6RVNMaW50KQoKCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5VSSA9IElUU00uVUkgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBJVFNNLlVJLkNvbmZpZ0l0ZW1BY3Rpb25Sb3cKICogQGRlc2NyaXB0aW9uCiAqICAgICAgQWN0aW9uIHJvdyBmdW5jdGlvbmFsaXR5CiAqIEByZXF1aXJlcwogKiAgICAgIENvcmUuSlNPTgogKiAgICAgIENvcmUuRGF0YQogKi8KSVRTTS5VSS5Db25maWdJdGVtQWN0aW9uUm93ID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIGlmICghQ29yZS5EZWJ1Zy5DaGVja0RlcGVuZGVuY3koJ0lUU00uVUkuQ29uZmlnSXRlbUFjdGlvblJvdycsICdDb3JlLkpTT04nLCAnSlNPTiBBUEknKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghQ29yZS5EZWJ1Zy5DaGVja0RlcGVuZGVuY3koJ0lUU00uVUkuQ29uZmlnSXRlbUFjdGlvblJvdycsICdDb3JlLkRhdGEnLCAnRGF0YSBBUEknKSkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICB2YXIgQ29uZmlnSXRlbUVsZW1lbnRTZWxlY3RvcnMgPSB7CiAgICAgICAgICAgICdTbWFsbCc6ICdkaXYuT3ZlcnZpZXcgdGFibGUgdGQgaW5wdXQ6Y2hlY2tib3hbbmFtZT1Db25maWdJdGVtSURdJywKICAgICAgICAgICAgJ01lZGl1bSc6ICd1bC5PdmVydmlldyBpbnB1dDpjaGVja2JveFtuYW1lPUNvbmZpZ0l0ZW1JRF0nLAogICAgICAgICAgICAnTGFyZ2UnOiAndWwuT3ZlcnZpZXcgaW5wdXQ6Y2hlY2tib3hbbmFtZT1Db25maWdJdGVtSURdJwogICAgICAgIH0sCiAgICAgICAgQ29uZmlnSXRlbVZpZXc7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0ge09iamVjdH0gRGF0YSBUaGUgZGF0YSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQKICAgICAqIEByZXR1cm4ge3N0cmluZ30gcXVlcnkgc3RyaW5nIG9mIHRoZSBkYXRhCiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBnaXZlbiBoYXNoIGludG8gYSBxdWVyeSBzdHJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gU2VyaWFsaXplRGF0YShEYXRhKSB7CiAgICAgICAgdmFyIFF1ZXJ5U3RyaW5nID0gJyc7CiAgICAgICAgJC5lYWNoKERhdGEsIGZ1bmN0aW9uIChLZXksIFZhbHVlKSB7CiAgICAgICAgICAgIFF1ZXJ5U3RyaW5nICs9ICc7JyArIGVuY29kZVVSSUNvbXBvbmVudChLZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KFZhbHVlKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gUXVlcnlTdHJpbmc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9ucyBhZGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YWxpZCBhY3Rpb24gb2YgYW4gZWxlbWVudCB0byB0aGUgZWxlbWVudC4KICAgICAqICAgICAgVGhlc2UgaW5mb3JtYXRpb24gYXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGFjdGlvbiByb3cgaW5kaXZpZHVhbGx5IGZvciB0aGlzIGVsZW1lbnQuCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gJEVsZW1lbnQKICAgICAqICAgICAgVGhlIGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBkYXRhIGlzIHN0b3JlZAogICAgICogQHBhcmFtIHtTdHJpbmd9IEpTT05TdHJpbmcKICAgICAqICAgICAgVGhlIEpTT04gc3RyaW5nIHdoaWNoIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFsaWQgYWN0aW9ucyBvZiB0aGUgZWxlbWVudCAoZ2VuZXJhdGVkIGJ5IFBlcmwgbW9kdWxlKQogICAgICogICAgICBDb3VsZCBhbHNvIGJlIGFuIGphdmFzY3JpcHQgb2JqZWN0IGRpcmVjdGx5CiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqLwogICAgVGFyZ2V0TlMuQWRkQWN0aW9ucyA9IGZ1bmN0aW9uICgkRWxlbWVudCwgSlNPTlN0cmluZykgewogICAgICAgIHZhciBBY3Rpb25zOwogICAgICAgIC8vIFRoZSBlbGVtZW50IG9mIHRoZSBnaXZlbiBJRCBtdXN0IGV4aXN0LCBKU09OU3RyaW5nIG11c3Qgbm90IGJlIGVtcHR5CiAgICAgICAgaWYgKGlzSlF1ZXJ5T2JqZWN0KCRFbGVtZW50KSkgewogICAgICAgICAgICBpZiAodHlwZW9mIEpTT05TdHJpbmcgPT09ICdTdHJpbmcnKSB7CiAgICAgICAgICAgICAgICBBY3Rpb25zID0gQ29yZS5KU09OLlBhcnNlKEpTT05TdHJpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgQWN0aW9ucyA9IEpTT05TdHJpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNhdmUgYWN0aW9uIGRhdGEgdG8gdGhlIGdpdmVuIGVsZW1lbnQKICAgICAgICAgICAgQ29yZS5EYXRhLlNldCgkRWxlbWVudCwgJ0FjdGlvbnMnLCBBY3Rpb25zKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIENvcmUuRGVidWcuTG9nKCdFbGVtZW50IGRvZXMgbm90IGV4aXN0IG9yIG5vIHZhbGlkIGRhdGEgc3RydWN0dXJlIHBhc3NlZC4nKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gY2xpY2sgb24gdGhlIGNoZWNrYm94IG9mIGFuIENvbmZpZ0l0ZW0gZWxlbWVudCBhbmQgdXBkYXRlcyB0aGUgYWN0aW9uIHJvdyBmb3IgdGhpcyBlbGVtZW50LgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRDbGlja2VkRWxlbWVudAogICAgICogICAgICBqUXVlcnlPYmplY3Qgb2YgdGhlIGNsaWNrZWQgZWxlbWVudCAobm9ybWFsbHkgJCh0aGlzKSkKICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSBDaGVja2JveGVzCiAgICAgKiAgICAgIGpRdWVyeU9iamVjdCBvZiB0aGUgY2hlY2tib3hlcyBvZiB0aGUgZGlmZmVyZW50IENvbmZpZ0l0ZW1zCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gJEFjdGlvblJvdwogICAgICogICAgICBUaGUgalF1ZXJ5T2JqZWN0IG9mIHRoZSBBY3Rpb25Sb3cgd3JhcHBlciAobm9ybWFsbHkgdGhlIDx1bD4tRWxlbWVudCkKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICovCiAgICBUYXJnZXROUy5VcGRhdGVBY3Rpb25Sb3cgPSBmdW5jdGlvbiAoJENsaWNrZWRFbGVtZW50LCAkQ2hlY2tib3hlcywgJEFjdGlvblJvdykgewogICAgICAgIHZhciBDb25maWdJdGVtQWN0aW9uRGF0YSwKICAgICAgICAgICAgQWN0aW9uUm93RWxlbWVudDsKCiAgICAgICAgLy8gQ2hlY2ssIGlmIG9uZSBvciBtb3JlIGl0ZW1zIGFyZSBzZWxlY3RlZAogICAgICAgICRDaGVja2JveGVzID0gJENoZWNrYm94ZXMuZmlsdGVyKCc6Y2hlY2tlZCcpOwogICAgICAgIC8vIE5vIGNoZWNrYm94IGlzIHNlbGVjdGVkCiAgICAgICAgaWYgKCEkQ2hlY2tib3hlcy5sZW5ndGgpIHsKICAgICAgICAgICAgLy8gUmVtb3ZlIGFjdGlvbnMgYW5kIGRlYWN0aXZhdGUgYnVsayBhY3Rpb24KICAgICAgICAgICAgJEFjdGlvblJvdwogICAgICAgICAgICAgICAgLmZpbmQoJ2xpJykuZmlsdGVyKCc6bm90KC5CdWxrKScpLnJlbW92ZSgpCiAgICAgICAgICAgICAgICAuZW5kKCkuZW5kKCkKICAgICAgICAgICAgICAgIC5maW5kKCcjQ29uZmlnSXRlbUJ1bGtBY3Rpb24nKS5hZGRDbGFzcygnSW5hY3RpdmUnKQogICAgICAgICAgICAgICAgLmVuZCgpCiAgICAgICAgICAgICAgICAuZmluZCgnbGkuTGFzdCcpLnJlbW92ZUNsYXNzKCdMYXN0JykKICAgICAgICAgICAgICAgIC5lbmQoKQogICAgICAgICAgICAgICAgLmZpbmQoJ2xpOmxhc3QnKS5hZGRDbGFzcygnTGFzdCcpOwogICAgICAgIH0KICAgICAgICAvLyBFeGFjdGx5IG9uZSBjaGVja2JveCBpcyBzZWxlY3RlZAogICAgICAgIGVsc2UgaWYgKCRDaGVja2JveGVzLmxlbmd0aCA9PT0gMSAmJiAhJCgnI1NlbGVjdEFsbENvbmZpZ0l0ZW1zJykuaXMoJzpjaGVja2VkJykgKSB7CiAgICAgICAgICAgIC8vIFVwZGF0ZSBhY3Rpb25zIGFuZCBhY3RpdmF0ZSBidWxrIGFjdGlvbgogICAgICAgICAgICAkQWN0aW9uUm93LmZpbmQoJyNDb25maWdJdGVtQnVsa0FjdGlvbicpLnJlbW92ZUNsYXNzKCdJbmFjdGl2ZScpOwoKICAgICAgICAgICAgLy8gRmluZCB0aGUgZWxlbWVudCB3aGljaCBpcyBhY3RpdmUgKGl0IG11c3Qgbm90IGJlIHRoZSBjbGlja2VkIGVsZW1lbnQhKQogICAgICAgICAgICAvLyBhbmQgZ2V0IHRoZSBkYXRhCiAgICAgICAgICAgIENvbmZpZ0l0ZW1BY3Rpb25EYXRhID0gQ29yZS5EYXRhLkdldCgkQ2hlY2tib3hlcy5jbG9zZXN0KCdsaSwgdHInKSwgJ0FjdGlvbnMnKTsKICAgICAgICAgICAgaWYgKHR5cGVvZiBDb25maWdJdGVtQWN0aW9uRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICQuZWFjaChDb25maWdJdGVtQWN0aW9uRGF0YSwgZnVuY3Rpb24gKEluZGV4LCBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChWYWx1ZS5IVE1MKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoVmFsdWUuSFRNTCkuYXR0cignaWQnLCBWYWx1ZS5JRCkuYXBwZW5kVG8oJEFjdGlvblJvdyk7CiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvblJvd0VsZW1lbnQgPSAkQWN0aW9uUm93LmZpbmQoJyMnICsgVmFsdWUuSUQpLmZpbmQoJ2EnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBWYWx1ZS5UYXJnZXQgPT09ICd1bmRlZmluZWQnIHx8IFZhbHVlLlRhcmdldCA9PT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvblJvd0VsZW1lbnQuYXR0cignaHJlZicsIFZhbHVlLkxpbmspOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWYWx1ZS5Qb3B1cFR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvblJvd0VsZW1lbnQub24oJ2NsaWNrLlBvcHVwJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwKFZhbHVlLkxpbmssIFZhbHVlLlBvcHVwVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQXBwbHkgdGhlIExhc3QgY2xhc3MgdG8gdGhlIHJpZ2h0IGVsZW1lbnQKICAgICAgICAgICAgJEFjdGlvblJvdwogICAgICAgICAgICAgICAgLmZpbmQoJ2xpLkxhc3QnKS5yZW1vdmVDbGFzcygnTGFzdCcpCiAgICAgICAgICAgICAgICAuZW5kKCkKICAgICAgICAgICAgICAgIC5maW5kKCdsaTpsYXN0JykuYWRkQ2xhc3MoJ0xhc3QnKTsKICAgICAgICB9CiAgICAgICAgLy8gVHdvIG9yZSBtb3JlIGNoZWNrYm94ZXMgc2VsZWN0ZWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gUmVtb3ZlIGFjdGlvbnMgYW5kIGFjdGl2YXRlIGJ1bGsgYWN0aW9uCiAgICAgICAgICAgICRBY3Rpb25Sb3cKICAgICAgICAgICAgICAgIC5maW5kKCdsaScpLmZpbHRlcignOm5vdCguQnVsayknKS5yZW1vdmUoKQogICAgICAgICAgICAgICAgLmVuZCgpLmVuZCgpCiAgICAgICAgICAgICAgICAuZmluZCgnI0NvbmZpZ0l0ZW1CdWxrQWN0aW9uJykucmVtb3ZlQ2xhc3MoJ0luYWN0aXZlJykKICAgICAgICAgICAgICAgIC5lbmQoKQogICAgICAgICAgICAgICAgLmZpbmQoJ2xpLkxhc3QnKS5yZW1vdmVDbGFzcygnTGFzdCcpCiAgICAgICAgICAgICAgICAuZW5kKCkKICAgICAgICAgICAgICAgIC5maW5kKCdsaTpsYXN0JykuYWRkQ2xhc3MoJ0xhc3QnKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgY29tcGxldGUgQWN0aW9uUm93IGZ1bmN0aW9uYWxpdHkgYW5kIGJpbmRzIGFsbCBjbGljayBldmVudHMuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBHZXQgdXNlZCBDb25maWdJdGVtIHZpZXcgbW9kZQogICAgICAgIGlmICgkKCcjQ29uZmlnSXRlbU92ZXJ2aWV3TWVkaXVtJykubGVuZ3RoKSB7CiAgICAgICAgICAgIENvbmZpZ0l0ZW1WaWV3ID0gJ01lZGl1bSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCQoJyNDb25maWdJdGVtT3ZlcnZpZXdMYXJnZScpLmxlbmd0aCkgewogICAgICAgICAgICBDb25maWdJdGVtVmlldyA9ICdMYXJnZSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBDb25maWdJdGVtVmlldyA9ICdTbWFsbCc7CiAgICAgICAgfQoKICAgICAgICAkKCcjU2VsZWN0QWxsQ29uZmlnSXRlbXMnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBTdGF0dXMgPSAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnKTsKICAgICAgICAgICAgJChDb25maWdJdGVtRWxlbWVudFNlbGVjdG9yc1tDb25maWdJdGVtVmlld10pLnByb3AoJ2NoZWNrZWQnLCBTdGF0dXMpLnRyaWdnZXJIYW5kbGVyKCdjbGljaycpOwogICAgICAgIH0pOwoKICAgICAgICAkKENvbmZpZ0l0ZW1FbGVtZW50U2VsZWN0b3JzW0NvbmZpZ0l0ZW1WaWV3XSkub24oJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgICAgIEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBJVFNNLlVJLkNvbmZpZ0l0ZW1BY3Rpb25Sb3cuVXBkYXRlQWN0aW9uUm93KCQodGhpcyksICQoQ29uZmlnSXRlbUVsZW1lbnRTZWxlY3RvcnNbQ29uZmlnSXRlbVZpZXddKSwgJCgnZGl2Lk92ZXJ2aWV3QWN0aW9ucyB1bC5BY3Rpb25zJykpOwogICAgICAgIH0pOwoKICAgICAgICAkKCcjQ29uZmlnSXRlbUJ1bGtBY3Rpb24gYScpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyICRFbGVtZW50ID0gJCh0aGlzKSwKICAgICAgICAgICAgICAgICRTZWxlY3RlZENvbmZpZ0l0ZW1zLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEUGFyYW1ldGVyID0gIkNvbmZpZ0l0ZW1JRD0iLAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEcyA9ICIiLAogICAgICAgICAgICAgICAgVVJMOwogICAgICAgICAgICBpZiAoJEVsZW1lbnQucGFyZW50KCdsaScpLmhhc0NsYXNzKCdJbmFjdGl2ZScpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRDb25maWdJdGVtcyA9ICQoQ29uZmlnSXRlbUVsZW1lbnRTZWxlY3RvcnNbQ29uZmlnSXRlbVZpZXddICsgJzpjaGVja2VkJyk7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRDb25maWdJdGVtcy5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtSURzICs9IENvbmZpZ0l0ZW1JRFBhcmFtZXRlciArICQodGhpcykudmFsKCkgKyAiOyI7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIFVSTCA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArICJBY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUJ1bGs7IiArIENvbmZpZ0l0ZW1JRHM7CiAgICAgICAgICAgICAgICBVUkwgKz0gU2VyaWFsaXplRGF0YShDb3JlLkFwcC5HZXRTZXNzaW9uSW5mb3JtYXRpb24oKSk7CiAgICAgICAgICAgICAgICBDb3JlLlVJLlBvcHVwLk9wZW5Qb3B1cChVUkwsICdDb25maWdJdGVtQWN0aW9uJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5VSS5Db25maWdJdGVtQWN0aW9uUm93IHx8IHt9KSk7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKSVRTTS5BZ2VudC5Db25maWdJdGVtID0gSVRTTS5BZ2VudC5Db25maWdJdGVtIHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5Db25maWdJdGVtLkRhc2hib2FyZAogKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5Db25maWdJdGVtCiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciB0aGUgY29uZmlnIGl0ZW0gb3ZlcnZpZXcgbmF2YmFyLgogKi8KSVRTTS5BZ2VudC5Db25maWdJdGVtLkRhc2hib2FyZCA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKgogICAgKiBAbmFtZSBJbml0CiAgICAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkNvbmZpZ0l0ZW0uRGFzaGJvYXJkCiAgICAqIEBmdW5jdGlvbgogICAgKiBAZGVzY3JpcHRpb24KICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBvdmVydmlldyBiZWhhdmlvdXJzLgogICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgIHZhciBEYXNobGV0RGF0YSA9IENvcmUuQ29uZmlnLkdldCgnSVRTTUNvbmZpZ0l0ZW1HZW5lcmljJyk7CgogICAgICAgIGlmICh0eXBlb2YgRGFzaGxldERhdGEgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIElUU01Db25maWdJdGVtR2VuZXJpYyhEYXNobGV0RGF0YSk7CgogICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gQ29udGVudFVwZGF0ZSBldmVudCB0byBpbml0aWF0ZSB0aWNrZXQgZ2VuZXJpYyBldmVudHMgb24gd2lkZ2V0IHVwZGF0ZQogICAgICAgICAgICBDb3JlLkFwcC5TdWJzY3JpYmUoJ0V2ZW50LkFKQVguQ29udGVudFVwZGF0ZS5DYWxsYmFjaycsIGZ1bmN0aW9uKCRXaWRnZXRFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICRXaWRnZXRFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAkV2lkZ2V0RWxlbWVudC5zZWFyY2goRGFzaGxldERhdGEuTmFtZSkgIT09IHBhcnNlSW50KCctMScsIDEwKSkgewogICAgICAgICAgICAgICAgICAgIElUU01Db25maWdJdGVtR2VuZXJpYyhEYXNobGV0RGF0YSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAgKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5Db25maWdJdGVtLkRhc2hib2FyZAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge09iamVjdH0gRGFzaGxldERhdGEgLSBIYXNoIHdpdGggY29udGFpbmVyIG5hbWUgYW5kIEhUTUwgbmFtZQogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIEluaXRpYWxpemVzIGRhc2hib2FyZCB3aWRnZXQgSVRTTUNvbmZpZ0l0ZW1HZW5lcmljCiAgICAgKi8KICAgIGZ1bmN0aW9uIElUU01Db25maWdJdGVtR2VuZXJpYyAoRGFzaGxldERhdGEpIHsKCiAgICAgICAgICAgICQoJyNEYXNoYm9hcmQnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoRGFzaGxldERhdGEuTmFtZSkgKyAnLWJveCcpLmZpbmQoJy5UYWIuQWN0aW9ucyBsaSBhJykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIEN1c3RvbWVySUQsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgRmlsdGVyOwoKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgICA9ICQoJ2lucHV0W25hbWU9Q3VzdG9tZXJJRF0nKS52YWwoKSB8fCAnJzsKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEICA9ICQoJ2lucHV0W25hbWU9Q3VzdG9tZXJVc2VySURdJykudmFsKCkgfHwgJyc7CiAgICAgICAgICAgICAgICBGaWx0ZXIgICAgICAgICAgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtZmlsdGVyJyk7CgogICAgICAgICAgICAgICAgJCgnI0Rhc2hib2FyZCcgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcihEYXNobGV0RGF0YS5OYW1lKSArICctYm94JykuYWRkQ2xhc3MoJ0xvYWRpbmcnKTsKICAgICAgICAgICAgICAgIENvcmUuQUpBWC5Db250ZW50VXBkYXRlKCQoJyNEYXNoYm9hcmQnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoRGFzaGxldERhdGEuTmFtZSkpLCBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykgKyAnQWN0aW9uPScgKyBDb3JlLkNvbmZpZy5HZXQoJ0FjdGlvbicpICsgJztTdWJhY3Rpb249RWxlbWVudDtOYW1lPScgKyBEYXNobGV0RGF0YS5OYW1lICsgJztDdXN0b21lcklEPScgKyBlbmNvZGVVUklDb21wb25lbnQoQ3VzdG9tZXJJRCkgKyAnO0N1c3RvbWVyVXNlcklEPScgKyBlbmNvZGVVUklDb21wb25lbnQoQ3VzdG9tZXJVc2VySUQpICsgJztGaWx0ZXI9JyArIEZpbHRlciwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICQoJyNEYXNoYm9hcmQnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoRGFzaGxldERhdGEuTmFtZSkgKyAnLWJveCcpLnJlbW92ZUNsYXNzKCdMb2FkaW5nJyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAkKCcjRGFzaGJvYXJkJyArIENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKERhc2hsZXREYXRhLk5hbWUpICsgJy1ib3gnKS5maW5kKCcuRGF0YVRhYmxlIHRoIGEnKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgQ3VzdG9tZXJJRCwKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCwKICAgICAgICAgICAgICAgICAgICBTb3J0QnkgICAgICAgICAgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtY29sdW1uJyksCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgID0gJycsCiAgICAgICAgICAgICAgICAgICAgJE9yZGVyQnlPYmogICAgID0gJCgnI0Rhc2hib2FyZCcgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcihEYXNobGV0RGF0YS5OYW1lKSArICctYm94JykuZmluZCgndGguU29ydERlc2NlbmRpbmdMYXJnZSwgdGguU29ydEFzY2VuZGluZ0xhcmdlJyk7CgogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCAgICAgID0gJCgnaW5wdXRbbmFtZT1DdXN0b21lcklEXScpLnZhbCgpIHx8ICcnOwogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgID0gJCgnaW5wdXRbbmFtZT1DdXN0b21lclVzZXJJRF0nKS52YWwoKSB8fCAnJzsKCiAgICAgICAgICAgICAgICBpZiAoJE9yZGVyQnlPYmogJiYgJE9yZGVyQnlPYmouaGFzQ2xhc3MoJ1NvcnREZXNjZW5kaW5nTGFyZ2UnKSkgewogICAgICAgICAgICAgICAgICAgIE9yZGVyQnkgPSAnRG93bic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICgkT3JkZXJCeU9iaiAmJiAkT3JkZXJCeU9iai5oYXNDbGFzcygnU29ydEFzY2VuZGluZ0xhcmdlJykpIHsKICAgICAgICAgICAgICAgICAgICBPcmRlckJ5ID0gJ1VwJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkKCcjRGFzaGJvYXJkJyArIENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKERhc2hsZXREYXRhLk5hbWUpICsgJy1ib3gnKS5hZGRDbGFzcygnTG9hZGluZycpOwogICAgICAgICAgICAgICAgQ29yZS5BSkFYLkNvbnRlbnRVcGRhdGUoJCgnI0Rhc2hib2FyZCcgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcihEYXNobGV0RGF0YS5OYW1lKSksIENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArICdBY3Rpb249JyArIENvcmUuQ29uZmlnLkdldCgnQWN0aW9uJykgKyAnO1N1YmFjdGlvbj1FbGVtZW50O05hbWU9JyArIERhc2hsZXREYXRhLk5hbWUgKyAnO0N1c3RvbWVySUQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChDdXN0b21lcklEKSArICc7Q3VzdG9tZXJVc2VySUQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChDdXN0b21lclVzZXJJRCkgKyAnO1NvcnRCeT0nICsgU29ydEJ5ICsgJztPcmRlckJ5PScgKyBPcmRlckJ5LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI0Rhc2hib2FyZCcgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcihEYXNobGV0RGF0YS5OYW1lKSArICctYm94JykucmVtb3ZlQ2xhc3MoJ0xvYWRpbmcnKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9KTsKICAgIH0KCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuQ29uZmlnSXRlbS5EYXNoYm9hcmQgfHwge30pKTsK
LyoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIElUU00gQ29uZmlnSXRlbgogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgogLkZpZWxkIGJ1dHRvbi5EaXNhYmxlVmFsaWRhdGlvbiAgewoJei1pbmRleDogMDsKfQoKfSAvKiBlbmQgQG1lZGlhICovCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQ7ICAgICMjIG5vIGNyaXRpYwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpNaWdyYXRpb25zOjpPVFJTNjo6U3lzQ29uZmlnKQoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6T3V0cHV0OjpUZW1wbGF0ZTo6UHJvdmlkZXI7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6Ok1haW50OjpJVFNNOjpDb25maWdpdGVtOjpEZWZpbml0aW9uUGVybDJZQU1MJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN0YXRzJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAopOwoKPWhlYWQxIE5BTUUKCnZhcjo6cGFja2FnZXNldHVwOjpJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQgLSBjb2RlIHRvIGV4ZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCgo9aGVhZDEgREVTQ1JJUFRJT04KCkZ1bmN0aW9ucyBmb3IgaW5zdGFsbGluZyB0aGUgSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50IHBhY2thZ2UuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ3Zhcjo6cGFja2FnZXNldHVwOjpJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBGb3JjZSBhIHJlbG9hZCBvZiBaWlpBdXRvLnBtIGFuZCBaWlpBQXV0by5wbSB0byBnZXQgdGhlIGZyZXNoIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgogICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJUlOQyApIHsKICAgICAgICBpZiAoICRNb2R1bGUgPX4gbS9aWlpBQT91dG9cLnBtJC8gKSB7CiAgICAgICAgICAgIGRlbGV0ZSAkSU5DeyRNb2R1bGV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIENyZWF0ZSBjb21tb24gb2JqZWN0cyB3aXRoIGZyZXNoIGRlZmF1bHQgY29uZmlnLgogICAgJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKCk7CgogICAgIyBkZWZpbmUgVXNlcklEIHBhcmFtZXRlciBmb3IgdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBzdGF0cyBvYmplY3QKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlN0YXRzJyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZGVmaW5lIGZpbGUgcHJlZml4IGZvciBzdGF0cwogICAgJFNlbGYtPntGaWxlUHJlZml4fSA9ICdJVFNNU3RhdHMnOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIENvZGVJbnN0YWxsKCkKCnJ1biB0aGUgY29kZSBpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVJbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZUluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgaXRzbS1jb25maWdpdGVtCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICdpdHNtLWNvbmZpZ2l0ZW0nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBDb25maWdJdGVtIG1hc2sgYWNjZXNzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJywKICAgICk7CgogICAgIyBpbnN0YWxsIGNvbmZpZ3VyYXRpb24gaXRlbSBkZWZpbml0aW9ucwogICAgJFNlbGYtPl9BZGRDb25maWdJdGVtRGVmaW5pdGlvbnMoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgbGFzdF92ZXJzaW9uX2lkIHJvd3MgaW4gQzxjb25maWdpdGVtPiB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eUxhc3RWZXJzaW9uSUQoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgaW5jaV9zdGF0ZV9pZCByb3dzIGluIEM8Y29uZmlnaXRlbV92ZXJzaW9uPiB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVZlcnNpb25JbmNpZGVudFN0YXRlSUQoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgQzxjdXJfZGVwbF9zdGF0ZV9pZD4gb3IgQzxjdXJfaW5jaV9zdGF0ZV9pZD4gcm93cyBpbiBDPGNvbmZpZ2l0ZW0+IHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5SW5jaWRlbnRBbmREZXBsb3ltZW50U3RhdGVJRCgpOwoKICAgICMgc2V0IHByZWZlcmVuY2VzIGZvciBzb21lIGNvbmZpZ3VyYXRpb24gaXRlbXMKICAgICRTZWxmLT5fU2V0UHJlZmVyZW5jZXMoKTsKCiAgICAjIHNldCBkZWZhdWx0IHBlcm1pc3Npb24gZ3JvdXAKICAgICRTZWxmLT5fU2V0RGVmYXVsdFBlcm1pc3Npb24oKTsKCiAgICAjIGluc3RhbGwgc3RhdHMKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0cycpLT5TdGF0c0luc3RhbGwoCiAgICAgICAgRmlsZVByZWZpeCA9PiAkU2VsZi0+e0ZpbGVQcmVmaXh9LAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgaXRzbS1jb25maWdpdGVtCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICdpdHNtLWNvbmZpZ2l0ZW0nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBDb25maWdJdGVtIG1hc2sgYWNjZXNzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJywKICAgICk7CgogICAgIyBpbnN0YWxsIGNvbmZpZ3VyYXRpb24gaXRlbSBkZWZpbml0aW9ucwogICAgJFNlbGYtPl9BZGRDb25maWdJdGVtRGVmaW5pdGlvbnMoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgbGFzdF92ZXJzaW9uX2lkIHJvd3MgaW4gQzxjb25maWdpdGVtPiB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eUxhc3RWZXJzaW9uSUQoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgaW5jaV9zdGF0ZV9pZCByb3dzIGluIEM8Y29uZmlnaXRlbV92ZXJzaW9uPiB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVZlcnNpb25JbmNpZGVudFN0YXRlSUQoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgY3VyX2RlcGxfc3RhdGVfaWQgb3IgY3VyX2luY2lfc3RhdGVfaWQgcm93cyBpbiBDPGNvbmZpZ2l0ZW0+IHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5SW5jaWRlbnRBbmREZXBsb3ltZW50U3RhdGVJRCgpOwoKICAgICMgc2V0IHByZWZlcmVuY2VzIGZvciBzb21lIGNvbmZpZ3VyYXRpb24gaXRlbXMKICAgICRTZWxmLT5fU2V0UHJlZmVyZW5jZXMoKTsKCiAgICAjIHNldCBkZWZhdWx0IHBlcm1pc3Npb24gZ3JvdXAKICAgICRTZWxmLT5fU2V0RGVmYXVsdFBlcm1pc3Npb24oKTsKCiAgICAjIGluc3RhbGwgc3RhdHMKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0cycpLT5TdGF0c0luc3RhbGwoCiAgICAgICAgRmlsZVByZWZpeCA9PiAkU2VsZi0+e0ZpbGVQcmVmaXh9LAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzIoKQoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBpbnN0YWxsZWQgbW9kdWxlIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIDQuMC4yLgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzIoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzIgeyAgICAjIyBubyBjcml0aWMKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBtaWdyYXRlIHRoZSB0ZW1wbGF0ZSBDb250ZW50IGluIHRoZSBTeXNDb25maWcKICAgICRTZWxmLT5fTWlncmF0ZURUTEluU3lzQ29uZmlnKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzgoKQoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBpbnN0YWxsZWQgbW9kdWxlIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIDQuMC44LgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzgoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzggeyAgICAjIyBubyBjcml0aWMKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBmaXggYSB0eXBvIGluIHRoZSBnZW5lcmFsIGNhdGFsb2cKICAgICRTZWxmLT5fRml4VHlwbygpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF85MSgpCgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgaWYgdGhlIGluc3RhbGxlZCBtb2R1bGUgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gNC4wLjkxLgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF85MSB7ICAgICMjIG5vIGNyaXRpYwogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoYW5nZSBjb25maWd1cmF0aW9ucyB0byBtYXRjaCB0aGUgbmV3IG1vZHVsZSBsb2NhdGlvbi4KICAgICRTZWxmLT5fTWlncmF0ZUNvbmZpZ3MoKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVcGdyYWRlKCkKCnJ1biB0aGUgY29kZSB1cGdyYWRlIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGluc3RhbGwgY29uZmlndXJhdGlvbiBpdGVtIGRlZmluaXRpb25zCiAgICAkU2VsZi0+X0FkZENvbmZpZ0l0ZW1EZWZpbml0aW9ucygpOwoKICAgICMgZmlsbCB1cCBlbXB0eSBsYXN0X3ZlcnNpb25faWQgcm93cyBpbiBDPGNvbmZpZ2l0ZW0+IHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5TGFzdFZlcnNpb25JRCgpOwoKICAgICMgZmlsbCB1cCBlbXB0eSBpbmNpX3N0YXRlX2lkIHJvd3MgaW4gQzxjb25maWdpdGVtX3ZlcnNpb24+IHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5VmVyc2lvbkluY2lkZW50U3RhdGVJRCgpOwoKICAgICMgZmlsbCB1cCBlbXB0eSBjdXJfZGVwbF9zdGF0ZV9pZCBvciBjdXJfaW5jaV9zdGF0ZV9pZCByb3dzIGluIEM8Y29uZmlnaXRlbT4gdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlJbmNpZGVudEFuZERlcGxveW1lbnRTdGF0ZUlEKCk7CgogICAgIyBzZXQgcHJlZmVyZW5jZXMgZm9yIHNvbWUgY29uZmlndXJhdGlvbiBpdGVtcwogICAgJFNlbGYtPl9TZXRQcmVmZXJlbmNlcygpOwoKICAgICMgc2V0IGRlZmF1bHQgcGVybWlzc2lvbiBncm91cAogICAgJFNlbGYtPl9TZXREZWZhdWx0UGVybWlzc2lvbigpOwoKICAgICMgaW5zdGFsbCBzdGF0cwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRzJyktPlN0YXRzSW5zdGFsbCgKICAgICAgICBGaWxlUHJlZml4ID0+ICRTZWxmLT57RmlsZVByZWZpeH0sCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICAjIENvbnZlcnQgYW55IFBlcmwgZGVmaW5pdGlvbiB0byBZQU1MCiAgICAjIFRoaXMgY291bGQgYmUgbW92ZWQgdG8gYSB2ZXJzaW9uIHNwZWNpZmljCiAgICAkU2VsZi0+X0NvbnZlcnRQZXJsRGVmaW5pdGlvbnMyWUFNTCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVVuaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgdW5pbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVbmluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlVW5pbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgYWxsIGxpbmtzIHdpdGggY29uZmlndXJhdGlvbiBpdGVtcwogICAgJFNlbGYtPl9MaW5rRGVsZXRlKCk7CgogICAgIyBkZWFjdGl2YXRlIHRoZSBncm91cCBDPGl0c20tY29uZmlnaXRlbT4KICAgICRTZWxmLT5fR3JvdXBEZWFjdGl2YXRlKAogICAgICAgIE5hbWUgPT4gJ2l0c20tY29uZmlnaXRlbScsCiAgICApOwoKICAgICMgZGVsZXRlICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycgc2VydmljZSBwcmVmZXJlbmNlcwogICAgJFNlbGYtPl9EZWxldGVTZXJ2aWNlUHJlZmVyZW5jZXMoKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9TZXRQcmVmZXJlbmNlcygpCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fU2V0UHJlZmVyZW5jZXMoKQoKPWN1dAoKc3ViIF9TZXRQcmVmZXJlbmNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVNYXAgPSAoCiAgICAgICAgRXhwaXJlZCAgICAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgIEluYWN0aXZlICAgID0+ICdwb3N0cHJvZHVjdGl2ZScsCiAgICAgICAgTWFpbnRlbmFuY2UgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgIFBpbG90ICAgICAgID0+ICdwcm9kdWN0aXZlJywKICAgICAgICBQbGFubmVkICAgICA9PiAncHJlcHJvZHVjdGl2ZScsCiAgICAgICAgUHJvZHVjdGlvbiAgPT4gJ3Byb2R1Y3RpdmUnLAogICAgICAgIFJlcGFpciAgICAgID0+ICdwcm9kdWN0aXZlJywKICAgICAgICBSZXRpcmVkICAgICA9PiAncG9zdHByb2R1Y3RpdmUnLAogICAgICAgIFJldmlldyAgICAgID0+ICdwcm9kdWN0aXZlJywKICAgICAgICAnVGVzdC9RQScgICA9PiAncHJlcHJvZHVjdGl2ZScsCiAgICApOwoKICAgIE5BTUU6CiAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJU1hcCApIHsKICAgICAgICBteSAkSXRlbSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBOYW1lICA9PiAkTmFtZSwKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBOQU1FIGlmICEkSXRlbTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbS0+e0l0ZW1JRH0sCiAgICAgICAgICAgIEtleSAgICA9PiAnRnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgIFZhbHVlICA9PiAkTWFweyROYW1lfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX1NldERlZmF1bHRQZXJtaXNzaW9uKCkKCnNldCB0aGUgZGVmYXVsdCBncm91cCB0aGF0IGhhcyBhY2Nlc3MgcmlnaHRzCgo9Y3V0CgpzdWIgX1NldERlZmF1bHRQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGdyb3VwIGFscmVhZHkgZXhpc3RzCiAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCAgPT4gJ2l0c20tY29uZmlnaXRlbScsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgYSBwZXJtaXNzaW9uIGdyb3VwIGlzIGFscmVhZHkgc2V0LiBJZiBub3QsIHNldCBkZWZhdWx0IHBlcm1pc3Npb24gZ3JvdXAKICAgIGZvciBteSAkQ2xhc3NJRCAoIHNvcnQga2V5cyAleyRDbGFzc0xpc3R9ICkgewogICAgICAgIG15ICRDbGFzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJENsYXNzSUQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJENsYXNzLT57UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRDbGFzcy0+e0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ1Blcm1pc3Npb24nLAogICAgICAgICAgICAgICAgVmFsdWUgID0+ICRHcm91cElELAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9Hcm91cEFkZCgpCgphZGQgYSBncm91cAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICd0aGUtZ3JvdXAtbmFtZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1RoZSBncm91cCBkZXNjcmlwdGlvbi4nLAogICAgKTsKCj1jdXQKCnN1YiBfR3JvdXBBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBEZXNjcmlwdGlvbikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgIyBnZXQgbGlzdCBvZiBhbGwgZ3JvdXBzCiAgICBteSAlR3JvdXBMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTGlzdCgpOwoKICAgICMgcmV2ZXJzZSB0aGUgZ3JvdXAgbGlzdCBmb3IgZWFzaWVyIGxvb2t1cAogICAgbXkgJUdyb3VwTGlzdFJldmVyc2UgPSByZXZlcnNlICVHcm91cExpc3Q7CgogICAgIyBjaGVjayBpZiBncm91cCBhbHJlYWR5IGV4aXN0cwogICAgbXkgJEdyb3VwSUQgPSAkR3JvdXBMaXN0UmV2ZXJzZXsgJFBhcmFte05hbWV9IH07CgogICAgIyByZWFjdGl2YXRlIHRoZSBncm91cAogICAgaWYgKCRHcm91cElEKSB7CgogICAgICAgICMgZ2V0IGN1cnJlbnQgZ3JvdXAgZGF0YQogICAgICAgIG15ICVHcm91cERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBHZXQoCiAgICAgICAgICAgIElEICAgICA9PiAkR3JvdXBJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyByZWFjdGl2YXRlIGdyb3VwCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwVXBkYXRlKAogICAgICAgICAgICAlR3JvdXBEYXRhLAogICAgICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgYWRkIHRoZSBncm91cAogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFBhcmFte05hbWV9LAogICAgICAgICAgICBDb21tZW50ID0+ICRQYXJhbXtEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGxvb2t1cCB0aGUgbmV3IGdyb3VwIGlkCiAgICBteSAkTmV3R3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCAgPT4gJFBhcmFte05hbWV9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGFkZCB1c2VyIHJvb3QgdG8gdGhlIGdyb3VwCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBNZW1iZXJBZGQoCiAgICAgICAgR0lEICAgICAgICA9PiAkTmV3R3JvdXBJRCwKICAgICAgICBVSUQgICAgICAgID0+IDEsCiAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgIHJvICAgICAgICA9PiAxLAogICAgICAgICAgICBtb3ZlX2ludG8gPT4gMSwKICAgICAgICAgICAgY3JlYXRlICAgID0+IDEsCiAgICAgICAgICAgIG93bmVyICAgICA9PiAxLAogICAgICAgICAgICBwcmlvcml0eSAgPT4gMSwKICAgICAgICAgICAgcncgICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfR3JvdXBEZWFjdGl2YXRlKCkKCmRlYWN0aXZhdGUgYSBncm91cAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0dyb3VwRGVhY3RpdmF0ZSgKICAgICAgICBOYW1lID0+ICd0aGUtZ3JvdXAtbmFtZScsCiAgICApOwoKPWN1dAoKc3ViIF9Hcm91cERlYWN0aXZhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBOYW1lIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb29rdXAgZ3JvdXAgaWQKICAgIG15ICRHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwID0+ICRQYXJhbXtOYW1lfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkR3JvdXBJRDsKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAjIGdldCBjdXJyZW50IGdyb3VwIGRhdGEKICAgIG15ICVHcm91cERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBHZXQoCiAgICAgICAgSUQgICAgID0+ICRHcm91cElELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGRlYWN0aXZhdGUgZ3JvdXAKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cFVwZGF0ZSgKICAgICAgICAlR3JvdXBEYXRhLAogICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7aW52YWxpZH0sCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9BZGRDb25maWdJdGVtRGVmaW5pdGlvbnMoKQoKaW5zdGFsbHMgY29uZmlndXJhdGlvbiBpdGVtIGRlZmluaXRpb25zCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQWRkQ29uZmlnSXRlbURlZmluaXRpb25zKCk7Cgo9Y3V0CgpzdWIgX0FkZENvbmZpZ0l0ZW1EZWZpbml0aW9ucyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgVGhpcyBpcyBuZWVkZWQgdG8gZXh0cmFjdCB0cmFuc2xhdGFibGUgd29yZHMgZnJvbSB0aGUgY29uZmlnIGl0ZW0gZGVmaW5pdGlvbnMuCiAgICBteSAlVHJhbnNsYXRpb25zID0gKAogICAgICAgIFZlbmRvciAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdWZW5kb3InKSwKICAgICAgICBNb2RlbCAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTW9kZWwnKSwKICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRGVzY3JpcHRpb24nKSwKICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnVHlwZScpLAogICAgICAgIEN1c3RvbWVyQ29tcGFueSAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdDdXN0b21lciBDb21wYW55JyksCiAgICAgICAgT3duZXIgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ093bmVyJyksCiAgICAgICAgU2VyaWFsTnVtYmVyICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1NlcmlhbCBOdW1iZXInKSwKICAgICAgICBPcGVyYXRpbmdTeXN0ZW0gICAgICAgID0+IFRyYW5zbGF0YWJsZSgnT3BlcmF0aW5nIFN5c3RlbScpLAogICAgICAgIENQVSAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdDUFUnKSwKICAgICAgICBSYW0gICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUmFtJyksCiAgICAgICAgSGFyZERpc2sgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0hhcmQgRGlzaycpLAogICAgICAgIENhcGFjaXR5ICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdDYXBhY2l0eScpLAogICAgICAgIEZRRE4gICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdGUUROJyksCiAgICAgICAgTmV0d29ya0FkYXB0ZXIgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05ldHdvcmsgQWRhcHRlcicpLAogICAgICAgIElQb3ZlckRIQ1AgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJUCBvdmVyIERIQ1AnKSwKICAgICAgICBJUEFkZHJlc3MgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnSVAgQWRkcmVzcycpLAogICAgICAgIEdyYXBoaWNBZGFwdGVyICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdHcmFwaGljIEFkYXB0ZXInKSwKICAgICAgICBPdGhlckVxdWlwbWVudCAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnT3RoZXIgRXF1aXBtZW50JyksCiAgICAgICAgV2FycmFudHlFeHBpcmF0aW9uRGF0ZSA9PiBUcmFuc2xhdGFibGUoJ1dhcnJhbnR5IEV4cGlyYXRpb24gRGF0ZScpLAogICAgICAgIEluc3RhbGxEYXRlICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJbnN0YWxsIERhdGUnKSwKICAgICAgICBOb3RlICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTm90ZScpLAogICAgICAgIFBob25lMSAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdQaG9uZSAxJyksCiAgICAgICAgUGhvbmUyICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1Bob25lIDInKSwKICAgICAgICBGYXggICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRmF4JyksCiAgICAgICAgRU1haWwgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0UtTWFpbCcpLAogICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBZGRyZXNzJyksCiAgICAgICAgTmV0d29ya0FkZHJlc3MgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05ldHdvcmsgQWRkcmVzcycpLAogICAgICAgIFN1Ym5ldE1hc2sgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdTdWJuZXQgTWFzaycpLAogICAgICAgIEdhdGV3YXkgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdHYXRld2F5JyksCiAgICAgICAgVmVyc2lvbiAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1ZlcnNpb24nKSwKICAgICAgICBMaWNlbmNlVHlwZSAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTGljZW5jZSBUeXBlJyksCiAgICAgICAgTGljZW5jZUtleSAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0xpY2VuY2UgS2V5JyksCiAgICAgICAgUXVhbnRpdHkgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1F1YW50aXR5JyksCiAgICAgICAgRXhwaXJhdGlvbkRhdGUgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0V4cGlyYXRpb24gRGF0ZScpLAogICAgICAgIE1lZGlhICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdNZWRpYScpLAogICAgKTsKCiAgICAjIENvbmZpZyBpdGVtIGRlZmluaXRpb25zLgogICAgbXkgJURlZmluaXRpb24gPSAoCiAgICAgICAgQ29tcHV0ZXIgPT4gPDwgIkVPRiIsCi0tLQotIEtleTogVmVuZG9yCiAgTmFtZTogVmVuZG9yCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogNTAKICAgICMgRXhhbXBsZSBmb3IgQ0kgYXR0cmlidXRlIHN5bnRheCBjaGVjayBmb3IgdGV4dCBhbmQgdGV4dGFyZWEgZmllbGRzCiAgICAjUmVnRXg6IF5BQkMuKgogICAgI1JlZ0V4RXJyb3JNZXNzYWdlOiBWYWx1ZSBtdXN0IHN0YXJ0IHdpdGggQUJDIQoKLSBLZXk6IE1vZGVsCiAgTmFtZTogTW9kZWwKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiA1MAoKLSBLZXk6IERlc2NyaXB0aW9uCiAgTmFtZTogRGVzY3JpcHRpb24KICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0QXJlYQoKLSBLZXk6IFR5cGUKICBOYW1lOiBUeXBlCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogR2VuZXJhbENhdGFsb2cKICAgIENsYXNzOiBJVFNNOjpDb25maWdJdGVtOjpDb21wdXRlcjo6VHlwZQogICAgVHJhbnNsYXRpb246IDEKCi0gS2V5OiBDdXN0b21lcklECiAgTmFtZTogQ3VzdG9tZXIgQ29tcGFueQogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IEN1c3RvbWVyQ29tcGFueQoKLSBLZXk6IE93bmVyCiAgTmFtZTogT3duZXIKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBDdXN0b21lcgoKLSBLZXk6IFNlcmlhbE51bWJlcgogIE5hbWU6IFNlcmlhbCBOdW1iZXIKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiAxMDAKCi0gS2V5OiBPcGVyYXRpbmdTeXN0ZW0KICBOYW1lOiBPcGVyYXRpbmcgU3lzdGVtCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiAxMDAKCi0gS2V5OiBDUFUKICBOYW1lOiBDUFUKICBJbnB1dDoKICAgIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDEwMAogIENvdW50TWF4OiAxNgoKLSBLZXk6IFJhbQogIE5hbWU6IFJhbQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogMTAwCiAgQ291bnRNYXg6IDEwCgotIEtleTogSGFyZERpc2sKICBOYW1lOiBIYXJkIERpc2sKICBJbnB1dDoKICAgIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDEwMAogIENvdW50TWF4OiAxMAogIFN1YjoKICAtIEtleTogQ2FwYWNpdHkKICAgIE5hbWU6IENhcGFjaXR5CiAgICBJbnB1dDoKICAgICAgVHlwZTogVGV4dAogICAgICBTaXplOiAyMAogICAgICBNYXhMZW5ndGg6IDEwCgotIEtleTogRlFETgogIE5hbWU6IEZRRE4KICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiAxMDAKCi0gS2V5OiBOSUMKICBOYW1lOiBOZXR3b3JrIEFkYXB0ZXIKICBJbnB1dDoKICAgIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDEwMAogICAgUmVxdWlyZWQ6IDEKICBDb3VudE1pbjogMAogIENvdW50TWF4OiAxMAogIENvdW50RGVmYXVsdDogMQogIFN1YjoKICAtIEtleTogSVBvdmVyREhDUAogICAgTmFtZTogSVAgb3ZlciBESENQCiAgICBJbnB1dDoKICAgICAgVHlwZTogR2VuZXJhbENhdGFsb2cKICAgICAgQ2xhc3M6IElUU006OkNvbmZpZ0l0ZW06Olllc05vCiAgICAgIFRyYW5zbGF0aW9uOiAxCiAgICAgIFJlcXVpcmVkOiAxCiAgLSBLZXk6IElQQWRkcmVzcwogICAgTmFtZTogSVAgQWRkcmVzcwogICAgU2VhcmNoYWJsZTogMQogICAgSW5wdXQ6CiAgICAgIFR5cGU6IFRleHQKICAgICAgU2l6ZTogNDAKICAgICAgTWF4TGVuZ3RoOiA0MAogICAgICBSZXF1aXJlZDogMQogICAgQ291bnRNaW46IDAKICAgIENvdW50TWF4OiAyMAogICAgQ291bnREZWZhdWx0OiAwCgotIEtleTogR3JhcGhpY0FkYXB0ZXIKICBOYW1lOiBHcmFwaGljIEFkYXB0ZXIKICBJbnB1dDoKICAgIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDEwMAoKLSBLZXk6IE90aGVyRXF1aXBtZW50CiAgTmFtZTogT3RoZXIgRXF1aXBtZW50CiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0QXJlYQogICAgUmVxdWlyZWQ6IDEKICBDb3VudE1pbjogMAogIENvdW50RGVmYXVsdDogMAoKLSBLZXk6IFdhcnJhbnR5RXhwaXJhdGlvbkRhdGUKICBOYW1lOiBXYXJyYW50eSBFeHBpcmF0aW9uIERhdGUKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBEYXRlCiAgICBZZWFyUGVyaW9kUGFzdDogMjAKICAgIFllYXJQZXJpb2RGdXR1cmU6IDEwCgotIEtleTogSW5zdGFsbERhdGUKICBOYW1lOiBJbnN0YWxsIERhdGUKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBEYXRlCiAgICBSZXF1aXJlZDogMQogICAgWWVhclBlcmlvZFBhc3Q6IDIwCiAgICBZZWFyUGVyaW9kRnV0dXJlOiAxMAogIENvdW50TWluOiAwCiAgQ291bnREZWZhdWx0OiAwCgotIEtleTogTm90ZQogIE5hbWU6IE5vdGUKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0QXJlYQogICAgUmVxdWlyZWQ6IDEKICBDb3VudE1pbjogMAogIENvdW50RGVmYXVsdDogMApFT0YKICAgICAgICBIYXJkd2FyZSA9PiA8PCAiRU9GIiwKLS0tCi0gS2V5OiBWZW5kb3IKICBOYW1lOiBWZW5kb3IKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiA1MAoKLSBLZXk6IE1vZGVsCiAgTmFtZTogTW9kZWwKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiA1MAoKLSBLZXk6IERlc2NyaXB0aW9uCiAgTmFtZTogRGVzY3JpcHRpb24KICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0QXJlYQoKLSBLZXk6IFR5cGUKICBOYW1lOiBUeXBlCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogR2VuZXJhbENhdGFsb2cKICAgIENsYXNzOiBJVFNNOjpDb25maWdJdGVtOjpIYXJkd2FyZTo6VHlwZQogICAgVHJhbnNsYXRpb246IDEKCi0gS2V5OiBDdXN0b21lcklECiAgTmFtZTogQ3VzdG9tZXIgQ29tcGFueQogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IEN1c3RvbWVyQ29tcGFueQoKLSBLZXk6IE93bmVyCiAgTmFtZTogT3duZXIKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBDdXN0b21lcgoKLSBLZXk6IFNlcmlhbE51bWJlcgogIE5hbWU6IFNlcmlhbCBOdW1iZXIKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiAxMDAKCi0gS2V5OiBXYXJyYW50eUV4cGlyYXRpb25EYXRlCiAgTmFtZTogV2FycmFudHkgRXhwaXJhdGlvbiBEYXRlCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogRGF0ZQogICAgWWVhclBlcmlvZFBhc3Q6IDIwCiAgICBZZWFyUGVyaW9kRnV0dXJlOiAxMAoKLSBLZXk6IEluc3RhbGxEYXRlCiAgTmFtZTogSW5zdGFsbCBEYXRlCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogRGF0ZQogICAgUmVxdWlyZWQ6IDEKICAgIFllYXJQZXJpb2RQYXN0OiAyMAogICAgWWVhclBlcmlvZEZ1dHVyZTogMTAKICBDb3VudE1pbjogMAogIENvdW50TWF4OiAxCiAgQ291bnREZWZhdWx0OiAwCgotIEtleTogTm90ZQogIE5hbWU6IE5vdGUKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0QXJlYQogICAgUmVxdWlyZWQ6IDEKICBDb3VudE1pbjogMAogIENvdW50TWF4OiAxCiAgQ291bnREZWZhdWx0OiAwCkVPRgogICAgICAgIExvY2F0aW9uID0+IDw8ICJFT0YiLAotLS0KLSBLZXk6IFR5cGUKICBOYW1lOiBUeXBlCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogR2VuZXJhbENhdGFsb2cKICAgIENsYXNzOiBJVFNNOjpDb25maWdJdGVtOjpMb2NhdGlvbjo6VHlwZQogICAgVHJhbnNsYXRpb246IDEKCi0gS2V5OiBDdXN0b21lcklECiAgTmFtZTogQ3VzdG9tZXIgQ29tcGFueQogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IEN1c3RvbWVyQ29tcGFueQoKLSBLZXk6IE93bmVyCiAgTmFtZTogT3duZXIKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBDdXN0b21lcgoKLSBLZXk6IFBob25lMQogIE5hbWU6IFBob25lIDEKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiAxMDAKCi0gS2V5OiBQaG9uZTIKICBOYW1lOiBQaG9uZSAyCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogMTAwCgotIEtleTogRmF4CiAgTmFtZTogRmF4CiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogMTAwCgotIEtleTogRS1NYWlsCiAgTmFtZTogRS1NYWlsCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogMTAwCgotIEtleTogQWRkcmVzcwogIE5hbWU6IEFkZHJlc3MKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0QXJlYQoKLSBLZXk6IE5vdGUKICBOYW1lOiBOb3RlCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dEFyZWEKICAgIFJlcXVpcmVkOiAxCiAgQ291bnRNaW46IDAKICBDb3VudERlZmF1bHQ6IDAKRU9GCiAgICAgICAgTmV0d29yayA9PiA8PCAiRU9GIiwKLS0tCi0gS2V5OiBEZXNjcmlwdGlvbgogIE5hbWU6IERlc2NyaXB0aW9uCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dEFyZWEKCi0gS2V5OiBUeXBlCiAgTmFtZTogVHlwZQogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IEdlbmVyYWxDYXRhbG9nCiAgICBDbGFzczogSVRTTTo6Q29uZmlnSXRlbTo6TmV0d29yazo6VHlwZQogICAgVHJhbnNsYXRpb246IDEKCi0gS2V5OiBDdXN0b21lcklECiAgTmFtZTogQ3VzdG9tZXIgQ29tcGFueQogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IEN1c3RvbWVyQ29tcGFueQoKLSBLZXk6IE93bmVyCiAgTmFtZTogT3duZXIKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBDdXN0b21lcgoKLSBLZXk6IE5ldHdvcmtBZGRyZXNzCiAgTmFtZTogTmV0d29yayBBZGRyZXNzCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogMzAKICAgIE1heExlbmd0aDogMjAKICAgIFJlcXVpcmVkOiAxCiAgQ291bnRNaW46IDAKICBDb3VudE1heDogMTAwCiAgQ291bnREZWZhdWx0OiAxCiAgU3ViOgogIC0gS2V5OiBTdWJuZXRNYXNrCiAgICBOYW1lOiBTdWJuZXQgTWFzawogICAgSW5wdXQ6CiAgICAgIFR5cGU6IFRleHQKICAgICAgU2l6ZTogMzAKICAgICAgTWF4TGVuZ3RoOiAyMAogICAgICBWYWx1ZURlZmF1bHQ6IDI1NS4yNTUuMjU1LjAKICAgICAgUmVxdWlyZWQ6IDEKICAgIENvdW50TWluOiAwCiAgICBDb3VudE1heDogMQogICAgQ291bnREZWZhdWx0OiAwCiAgLSBLZXk6IEdhdGV3YXkKICAgIE5hbWU6IEdhdGV3YXkKICAgIElucHV0OgogICAgICBUeXBlOiBUZXh0CiAgICAgIFNpemU6IDMwCiAgICAgIE1heExlbmd0aDogMjAKICAgICAgUmVxdWlyZWQ6IDEKICAgIENvdW50TWluOiAwCiAgICBDb3VudE1heDogMTAKICAgIENvdW50RGVmYXVsdDogMAoKLSBLZXk6IE5vdGUKICBOYW1lOiBOb3RlCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgUmVxdWlyZWQ6IDEKICAgIFR5cGU6IFRleHRBcmVhCiAgQ291bnRNaW46IDAKICBDb3VudE1heDogMQogIENvdW50RGVmYXVsdDogMApFT0YKICAgICAgICBTb2Z0d2FyZSA9PiA8PCAiRU9GIiwKLS0tCi0gS2V5OiBWZW5kb3IKICBOYW1lOiBWZW5kb3IKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA1MAogICAgTWF4TGVuZ3RoOiA1MAoKLSBLZXk6IFZlcnNpb24KICBOYW1lOiBWZXJzaW9uCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogNTAKCi0gS2V5OiBEZXNjcmlwdGlvbgogIE5hbWU6IERlc2NyaXB0aW9uCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dEFyZWEKCi0gS2V5OiBUeXBlCiAgTmFtZTogVHlwZQogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IEdlbmVyYWxDYXRhbG9nCiAgICBDbGFzczogSVRTTTo6Q29uZmlnSXRlbTo6U29mdHdhcmU6OlR5cGUKICAgIFRyYW5zbGF0aW9uOiAxCgotIEtleTogQ3VzdG9tZXJJRAogIE5hbWU6IEN1c3RvbWVyIENvbXBhbnkKICBTZWFyY2hhYmxlOiAxCiAgSW5wdXQ6CiAgICBUeXBlOiBDdXN0b21lckNvbXBhbnkKCi0gS2V5OiBPd25lcgogIE5hbWU6IE93bmVyCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogQ3VzdG9tZXIKCi0gS2V5OiBTZXJpYWxOdW1iZXIKICBOYW1lOiBTZXJpYWwgTnVtYmVyCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dAogICAgU2l6ZTogNTAKICAgIE1heExlbmd0aDogNTAKCi0gS2V5OiBMaWNlbmNlVHlwZQogIE5hbWU6IExpY2VuY2UgVHlwZQogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IEdlbmVyYWxDYXRhbG9nCiAgICBDbGFzczogSVRTTTo6Q29uZmlnSXRlbTo6U29mdHdhcmU6OkxpY2VuY2VUeXBlCiAgICBUcmFuc2xhdGlvbjogMQoKLSBLZXk6IExpY2VuY2VLZXkKICBOYW1lOiBMaWNlbmNlIEtleQogIFNlYXJjaGFibGU6IDEKICBJbnB1dDoKICAgIFR5cGU6IFRleHQKICAgIFNpemU6IDUwCiAgICBNYXhMZW5ndGg6IDUwCiAgICBSZXF1aXJlZDogMQogIENvdW50TWluOiAwCiAgQ291bnRNYXg6IDEwMAogIENvdW50RGVmYXVsdDogMAogIFN1YjoKICAtIEtleTogUXVhbnRpdHkKICAgIE5hbWU6IFF1YW50aXR5CiAgICBJbnB1dDoKICAgICAgVHlwZTogSW50ZWdlcgogICAgICBWYWx1ZU1pbjogMQogICAgICBWYWx1ZU1heDogMTAwMAogICAgICBWYWx1ZURlZmF1bHQ6IDEKICAgICAgUmVxdWlyZWQ6IDEKICAgIENvdW50TWluOiAwCiAgICBDb3VudE1heDogMQogICAgQ291bnREZWZhdWx0OiAwCiAgLSBLZXk6IEV4cGlyYXRpb25EYXRlCiAgICBOYW1lOiBFeHBpcmF0aW9uIERhdGUKICAgIElucHV0OgogICAgICBUeXBlOiBEYXRlCiAgICAgIFJlcXVpcmVkOiAxCiAgICAgIFllYXJQZXJpb2RQYXN0OiAyMAogICAgICBZZWFyUGVyaW9kRnV0dXJlOiAxMAogICAgQ291bnRNaW46IDAKICAgIENvdW50TWF4OiAxCiAgICBDb3VudERlZmF1bHQ6IDAKCi0gS2V5OiBNZWRpYQogIE5hbWU6IE1lZGlhCiAgSW5wdXQ6CiAgICBUeXBlOiBUZXh0CiAgICBTaXplOiA0MAogICAgTWF4TGVuZ3RoOiAyMAoKLSBLZXk6IE5vdGUKICBOYW1lOiBOb3RlCiAgU2VhcmNoYWJsZTogMQogIElucHV0OgogICAgVHlwZTogVGV4dEFyZWEKICAgIFJlcXVpcmVkOiAxCiAgQ291bnRNaW46IDAKICBDb3VudE1heDogMQogIENvdW50RGVmYXVsdDogMApFT0YKICAgICk7CgogICAgIyBnZXQgbGlzdCBvZiBpbnN0YWxsZWQgY29uZmlndXJhdGlvbiBpdGVtIGNsYXNzZXMKICAgIG15ICRDbGFzc0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CiAgICBteSAlUmV2ZXJzZUNsYXNzTGlzdCA9IHJldmVyc2UgJXskQ2xhc3NMaXN0fTsKCiAgICBDTEFTU05BTUU6CiAgICBmb3IgbXkgJENsYXNzTmFtZSAoIHNvcnQgeyBsYyAkYSBjbXAgbGMgJGIgfSBrZXlzICVEZWZpbml0aW9uICkgewoKICAgICAgICAjIGNoZWNrIGlmIGNsYXNzIGV4aXN0cwogICAgICAgIG15ICRDbGFzc0lEID0gJFJldmVyc2VDbGFzc0xpc3R7JENsYXNzTmFtZX07CgogICAgICAgIG5leHQgQ0xBU1NOQU1FIGlmICEkQ2xhc3NJRDsKCiAgICAgICAgIyBjaGVjayBpZiBkZWZpbml0aW9uIGFscmVhZHkgZXhpc3RzCiAgICAgICAgbXkgJERlZmluaXRpb25MaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPkRlZmluaXRpb25MaXN0KAogICAgICAgICAgICBDbGFzc0lEID0+ICRDbGFzc0lELAogICAgICAgICk7CgogICAgICAgIG5leHQgQ0xBU1NOQU1FIGlmICFkZWZpbmVkICREZWZpbml0aW9uTGlzdDsKICAgICAgICBuZXh0IENMQVNTTkFNRSBpZiAkRGVmaW5pdGlvbkxpc3QgJiYgcmVmICREZWZpbml0aW9uTGlzdCBlcSAnQVJSQVknICYmIEB7JERlZmluaXRpb25MaXN0fTsKCiAgICAgICAgIyBhZGQgdGhlIG5ldyBkZWZpbml0aW9uCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPkRlZmluaXRpb25BZGQoCiAgICAgICAgICAgIENsYXNzSUQgICAgPT4gJENsYXNzSUQsCiAgICAgICAgICAgIERlZmluaXRpb24gPT4gJERlZmluaXRpb257JENsYXNzTmFtZX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0xpbmtEZWxldGUoKQoKZGVsZXRlIGFsbCBleGlzdGluZyBsaW5rcyB0byBjb25maWd1cmF0aW9uIGl0ZW1zCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fTGlua0RlbGV0ZSgpOwoKPWN1dAoKc3ViIF9MaW5rRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgYWxsIGNvbmZpZ3VyYXRpb24gaXRlbXMKICAgIG15ICRDb25maWdJdGVtSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPkNvbmZpZ0l0ZW1TZWFyY2goKTsKCiAgICByZXR1cm4gaWYgISRDb25maWdJdGVtSURzOwogICAgcmV0dXJuIGlmIHJlZiAkQ29uZmlnSXRlbUlEcyBuZSAnQVJSQVknOwoKICAgICMgZGVsZXRlIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gbGlua3MKICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggQHskQ29uZmlnSXRlbUlEc30gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0RlbGV0ZUFsbCgKICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIEtleSAgICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0ZpbGx1cEVtcHR5TGFzdFZlcnNpb25JRCgpCgpmaWxsIHVwIGVtcHR5IGVudHJpZXMgaW4gdGhlIGxhc3RfdmVyc2lvbl9pZCBjb2x1bW4gb2YgdGhlIEM8Y29uZmlnaXRlbT4gdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eUxhc3RWZXJzaW9uSUQoKTsKCj1jdXQKCnN1YiBfRmlsbHVwRW1wdHlMYXN0VmVyc2lvbklEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlndXJhdGlvbiBpdGVtcyB3aXRoIGVtcHR5IGxhc3RfdmVyc2lvbl9pZAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtIFdIRVJFICcKICAgICAgICAgICAgLiAnbGFzdF92ZXJzaW9uX2lkID0gMCBPUiBsYXN0X3ZlcnNpb25faWQgSVMgTlVMTCcsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQENvbmZpZ0l0ZW1JRHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1JRHMsICRSb3dbMF07CiAgICB9CgogICAgQ09ORklHSVRFTUlEOgogICAgZm9yIG15ICRDb25maWdJdGVtSUQgKEBDb25maWdJdGVtSURzKSB7CgogICAgICAgICMgZ2V0IHRoZSBsYXN0IHZlcnNpb24gb2YgdGhpcyBjb25maWd1cmF0aW9uIGl0ZW0KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtX3ZlcnNpb24gJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgY29uZmlnaXRlbV9pZCA9ID8gT1JERVIgQlkgaWQgREVTQycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRDb25maWdJdGVtSUQgXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSAkVmVyc2lvbklEOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRWZXJzaW9uSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRWZXJzaW9uSUQ7CgogICAgICAgICMgdXBkYXRlIEM8aW5jaV9zdGF0ZV9pZD4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGNvbmZpZ2l0ZW0gJwogICAgICAgICAgICAgICAgLiAnU0VUIGxhc3RfdmVyc2lvbl9pZCA9ID8gJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkVmVyc2lvbklELCBcJENvbmZpZ0l0ZW1JRCBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfRmlsbHVwRW1wdHlWZXJzaW9uSW5jaWRlbnRTdGF0ZUlEKCkKCmZpbGwgdXAgZW1wdHkgZW50cmllcyBpbiB0aGUgQzxpbmNpX3N0YXRlX2lkIGNvbHVtbj4gb2YgdGhlIEM8Y29uZmlnaXRlbV92ZXJzaW9uPiB0YWJsZQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0ZpbGx1cEVtcHR5VmVyc2lvbkluY2lkZW50U3RhdGVJRCgpOwoKPWN1dAoKc3ViIF9GaWxsdXBFbXB0eVZlcnNpb25JbmNpZGVudFN0YXRlSUQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBvcGVyYXRpb25hbCBpbmNpZGVudCBzdGF0ZSBsaXN0CiAgICBteSAkSW5jaVN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICdvcGVyYXRpb25hbCcsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBlcnJvciBoYW5kbGluZwogICAgaWYgKCAhJEluY2lTdGF0ZUxpc3QgfHwgcmVmICRJbmNpU3RhdGVMaXN0IG5lICdIQVNIJyB8fCAhJXskSW5jaVN0YXRlTGlzdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBmaW5kIGFueSBpdGVtIGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzb3J0IGlkcwogICAgbXkgQEluY2lTdGF0ZUtleUxpc3QgPSBzb3J0IGtleXMgJXskSW5jaVN0YXRlTGlzdH07CgogICAgIyB1cGRhdGUgaW5jaV9zdGF0ZV9pZAogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBjb25maWdpdGVtX3ZlcnNpb24gJwogICAgICAgICAgICAuICdTRVQgaW5jaV9zdGF0ZV9pZCA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpbmNpX3N0YXRlX2lkID0gMCBPUiBpbmNpX3N0YXRlX2lkIElTIE5VTEwnLAogICAgICAgIEJpbmQgPT4gWyBcJEluY2lTdGF0ZUtleUxpc3RbMF0gXSwKICAgICk7Cn0KCj1oZWFkMiBfRmlsbHVwRW1wdHlJbmNpZGVudEFuZERlcGxveW1lbnRTdGF0ZUlEKCkKCmZpbGwgdXAgZW1wdHkgZW50cmllcyBpbiB0aGUgY3VyX2RlcGxfc3RhdGVfaWQgb3IgY3VyX2luY2lfc3RhdGVfaWQgY29sdW1uIG9mIHRoZSBDPGNvbmZpZ2l0ZW0+IHRhYmxlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fRmlsbHVwRW1wdHlJbmNpZGVudEFuZERlcGxveW1lbnRTdGF0ZUlEKCk7Cgo9Y3V0CgpzdWIgX0ZpbGx1cEVtcHR5SW5jaWRlbnRBbmREZXBsb3ltZW50U3RhdGVJRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZ3VyYXRpb24gaXRlbXMgd2l0aCBlbXB0eSBjdXJfZGVwbF9zdGF0ZV9pZCBvciBjdXJfaW5jaV9zdGF0ZV9pZAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25maWdpdGVtIFdIRVJFICcKICAgICAgICAgICAgLiAnY3VyX2RlcGxfc3RhdGVfaWQgPSAwIE9SIGN1cl9kZXBsX3N0YXRlX2lkIElTIE5VTEwgT1IgJwogICAgICAgICAgICAuICdjdXJfaW5jaV9zdGF0ZV9pZCA9IDAgT1IgY3VyX2luY2lfc3RhdGVfaWQgSVMgTlVMTCcsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQENvbmZpZ0l0ZW1JRHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1JRHMsICRSb3dbMF07CiAgICB9CgogICAgQ09ORklHSVRFTUlEOgogICAgZm9yIG15ICRDb25maWdJdGVtSUQgKEBDb25maWdJdGVtSURzKSB7CgogICAgICAgICMgZ2V0IGxhc3QgdmVyc2lvbgogICAgICAgIG15ICRMYXN0VmVyc2lvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5WZXJzaW9uR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAhJExhc3RWZXJzaW9uOwogICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmIHJlZiAkTGFzdFZlcnNpb24gbmUgJ0hBU0gnOwogICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICEkTGFzdFZlcnNpb24tPntEZXBsU3RhdGVJRH07CiAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgISRMYXN0VmVyc2lvbi0+e0luY2lTdGF0ZUlEfTsKCiAgICAgICAgIyBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGl0ZW0KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGNvbmZpZ2l0ZW0gU0VUICcKICAgICAgICAgICAgICAgIC4gJ2N1cl9kZXBsX3N0YXRlX2lkID0gPywgJwogICAgICAgICAgICAgICAgLiAnY3VyX2luY2lfc3RhdGVfaWQgPSA/ICcKICAgICAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCRMYXN0VmVyc2lvbi0+e0RlcGxTdGF0ZUlEfSwKICAgICAgICAgICAgICAgIFwkTGFzdFZlcnNpb24tPntJbmNpU3RhdGVJRH0sCiAgICAgICAgICAgICAgICBcJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0RlbGV0ZVNlcnZpY2VQcmVmZXJlbmNlcygpCgpEZWxldGVzIHRoZSBzZXJ2aWNlIHByZWZlcmVuY2VzIGZvciB0aGUga2V5ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycuCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fRGVsZXRlU2VydmljZVByZWZlcmVuY2VzKCk7Cgo9Y3V0CgpzdWIgX0RlbGV0ZVNlcnZpY2VQcmVmZXJlbmNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNlcnZpY2UgbGlzdAogICAgbXkgJVNlcnZpY2VMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdCApIHsKCiAgICAgICAgIyBkZWxldGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgdHlwZSBmcm9tIENJcyBvZiB0aGUgc2VydmljZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnLAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gJycsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfTWlncmF0ZURUTEluU3lzQ29uZmlnKCkKCkNvbnZlcnRzIHRlbXBsYXRlIHNldHRpbmdzIGluIHN5c2NvbmZpZyB0byB0ZW1wbGF0ZSB0b29sa2l0LgoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X01pZ3JhdGVEVExJblN5c0NvbmZpZygpOwoKPWN1dAoKc3ViIF9NaWdyYXRlRFRMSW5TeXNDb25maWcgewoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ29uZmlnT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CiAgICBteSAkUHJvdmlkZXJPYmplY3QgID0gS2VybmVsOjpPdXRwdXQ6OlRlbXBsYXRlOjpQcm92aWRlci0+bmV3KCk7CgogICAgbXkgQE5ld1NldHRpbmdzOwoKICAgICMgaGFuZGxlIGhhc2ggc2V0dGluZ3MKICAgIE5BTUU6CiAgICBmb3IgbXkgJE5hbWUgKAogICAgICAgIHF3KAogICAgICAgIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6TWVudU1vZHVsZQogICAgICAgIElUU01Db25maWdJdGVtOjpGcm9udGVuZDo6UHJlTWVudU1vZHVsZQogICAgICAgICkKICAgICAgICApCiAgICB7CgogICAgICAgICMgZ2V0IHNldHRpbmcncyBjb250ZW50CiAgICAgICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJE5hbWUpOwogICAgICAgIG5leHQgTkFNRSBpZiAhJFNldHRpbmc7CgogICAgICAgIE1FTlVNT0RVTEU6CiAgICAgICAgZm9yIG15ICRNZW51TW9kdWxlICggc29ydCBrZXlzICV7JFNldHRpbmd9ICkgewoKICAgICAgICAgICAgIyBTZXR0aW5nIGlzIGEgaGFzaC4KICAgICAgICAgICAgU0VUVElOR0lURU06CiAgICAgICAgICAgIGZvciBteSAkU2V0dGluZ0l0ZW0gKCBzb3J0IGtleXMgJXsgJFNldHRpbmctPnskTWVudU1vZHVsZX0gfSApIHsKCiAgICAgICAgICAgICAgICBteSAkU2V0dGluZ0NvbnRlbnQgPSAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eyRTZXR0aW5nSXRlbX07CgogICAgICAgICAgICAgICAgIyBEbyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGZvciBtaWdyYXRpbmcuCiAgICAgICAgICAgICAgICBuZXh0IFNFVFRJTkdJVEVNIGlmICEkU2V0dGluZ0NvbnRlbnQ7CgogICAgICAgICAgICAgICAgbXkgJFRUQ29udGVudDsKICAgICAgICAgICAgICAgIGV2YWwgewogICAgICAgICAgICAgICAgICAgICRUVENvbnRlbnQgPSAkUHJvdmlkZXJPYmplY3QtPk1pZ3JhdGVEVEx0b1RUKCBDb250ZW50ID0+ICRTZXR0aW5nQ29udGVudCApOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGlmICgkQCkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJE1lbnVNb2R1bGUtPiRTZXR0aW5nSXRlbSA6ICRAISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LT57JFNldHRpbmdJdGVtfSA9ICRUVENvbnRlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQnVpbGQgbmV3IHNldHRpbmcuCiAgICAgICAgICAgIHB1c2ggQE5ld1NldHRpbmdzLCB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAkTmFtZSAuICcjIyMnIC4gJE1lbnVNb2R1bGUsCiAgICAgICAgICAgICAgICBFZmZlY3RpdmVWYWx1ZSA9PiAkU2V0dGluZy0+eyRNZW51TW9kdWxlfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgIUBOZXdTZXR0aW5nczsKCiAgICAjIFdyaXRlIG5ldyBzZXR0aW5nLgogICAgJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ3NTZXQoCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBDb21tZW50cyA9PiAnSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50IC0gcGFja2FnZSBzZXR1cCBmdW5jdGlvbjogX01pZ3JhdGVEVExJblN5c0NvbmZpZycsCiAgICAgICAgU2V0dGluZ3MgPT4gXEBOZXdTZXR0aW5ncywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfRml4VHlwbygpCgpGaXhlcyBhIHR5cG8gaW4gdGhlIGdlbmVyYWwgY2F0YWxvZwoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0ZpeFR5cG8oKTsKCj1jdXQKCnN1YiBfRml4VHlwbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHRoZSBpdGVtIGRhdGEgd2l0aCB0aGUgd3JvbmcgbmFtZSAiS2V5Ym9yZCIKICAgIG15ICRJdGVtRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpIYXJkd2FyZTo6VHlwZScsCiAgICAgICAgTmFtZSAgPT4gJ0tleWJvcmQnLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGdlbmVyYWwgY2F0YWxvZyBlbnRyeSBleGlzdHMKICAgIGlmICggJEl0ZW1EYXRhUmVmICYmIHJlZiAkSXRlbURhdGFSZWYgZXEgJ0hBU0gnICYmICV7JEl0ZW1EYXRhUmVmfSApIHsKCiAgICAgICAgIyB1cGRhdGUgdGhlIGl0ZW0gZGF0YSB3aXRoIHRoZSBjb3JyZWN0IG5hbWUgIktleWJvYXJkIgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtVXBkYXRlKAogICAgICAgICAgICAleyRJdGVtRGF0YVJlZn0sCiAgICAgICAgICAgIE5hbWUgICA9PiAnS2V5Ym9hcmQnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX01pZ3JhdGVDb25maWdzKCkKCmNoYW5nZSBjb25maWd1cmF0aW9ucyB0byBtYXRjaCB0aGUgbmV3IG1vZHVsZSBsb2NhdGlvbi4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9NaWdyYXRlQ29uZmlncygpOwoKPWN1dAoKc3ViIF9NaWdyYXRlQ29uZmlncyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CgogICAgbXkgQE5ld1NldHRpbmdzOwoKICAgIGZvciBteSAkVHlwZSAocXcoTWVudU1vZHVsZSBPdmVydmlldykpIHsKCiAgICAgICAgIyBtaWdyYXRlIElUU01Db25maWd1cmF0aW9uIFByZWZlcmVuY2VzCiAgICAgICAgIyBnZXQgc2V0dGluZyBjb250ZW50IGZvciBJVFNNQ29uZmlndXJhdGlvbiBQcmVmZXJlbmNlcwogICAgICAgIG15ICRTZXR0aW5nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCAnSVRTTUNvbmZpZ0l0ZW06OkZyb250ZW5kOjonIC4gJFR5cGUgKTsKCiAgICAgICAgQ09ORklHSVRFTToKICAgICAgICBmb3IgbXkgJE1lbnVNb2R1bGUgKCBzb3J0IGtleXMgJXskU2V0dGluZ30gKSB7CiAgICAgICAgICAgIG15ICRNZW51TW9kdWxlU2V0dGluZ3MgPSAkU2V0dGluZy0+eyRNZW51TW9kdWxlfTsKCiAgICAgICAgICAgICMgdXBkYXRlIG1vZHVsZSBsb2NhdGlvbgogICAgICAgICAgICBteSAkTW9kdWxlID0gJE1lbnVNb2R1bGVTZXR0aW5ncy0+eydNb2R1bGUnfTsKICAgICAgICAgICAgaWYgKCAkTW9kdWxlICF+IG17S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtKFx3Kyl9ICkgewogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTW9kdWxlID1+IHN7S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Db25maWdJdGVtKFx3Kyl9e0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ29uZmlnSXRlbTo6JDF9eG1zZzsKICAgICAgICAgICAgJE1lbnVNb2R1bGVTZXR0aW5ncy0+e01vZHVsZX0gPSAkTW9kdWxlOwoKICAgICAgICAgICAgIyBCdWlsZCBuZXcgc2V0dGluZy4KICAgICAgICAgICAgcHVzaCBATmV3U2V0dGluZ3MsIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJVFNNQ29uZmlnSXRlbTo6RnJvbnRlbmQ6OicgLiAkVHlwZSAuICcjIyMnIC4gJE1lbnVNb2R1bGUsCiAgICAgICAgICAgICAgICBFZmZlY3RpdmVWYWx1ZSA9PiAkTWVudU1vZHVsZVNldHRpbmdzLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAhQE5ld1NldHRpbmdzOwoKICAgICMgV3JpdGUgbmV3IHNldHRpbmcuCiAgICAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nc1NldCgKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIENvbW1lbnRzID0+ICdJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQgLSBwYWNrYWdlIHNldHVwIGZ1bmN0aW9uOiBfTWlncmF0ZUNvbmZpZ3MnLAogICAgICAgIFNldHRpbmdzID0+IFxATmV3U2V0dGluZ3MsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0NvbnZlcnRQZXJsRGVmaW5pdGlvbnMyWUFNTCgpCgpDb252ZXJ0cyBQZXJsIGRlZmluaXRpb25zIHRvIFlBTUwuCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQ29udmVydFBlcmxEZWZpbml0aW9uczJZQU1MKCk7Cgo9Y3V0CgpzdWIgX0NvbnZlcnRQZXJsRGVmaW5pdGlvbnMyWUFNTCB7CgogICAgbXkgJENvbW1hbmRPYmplY3QKICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6SVRTTTo6Q29uZmlnaXRlbTo6RGVmaW5pdGlvblBlcmwyWUFNTCcpOwoKICAgIG15ICggJFJlc3VsdCwgJEV4aXRDb2RlICk7CgogICAgewogICAgICAgIGxvY2FsICpTVERPVVQ7CiAgICAgICAgb3BlbiBTVERPVVQsICc+OnV0ZjgnLCBcJFJlc3VsdDsgICAgIyMgbm8gY3JpdGljCiAgICAgICAgJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoKTsKICAgIH0KCiAgICByZXR1cm4gMSBpZiAhJEV4aXRDb2RlOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgTWVzc2FnZSAgPT4gIiRSZXN1bHQiLAogICAgKTsKCiAgICByZXR1cm47Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IGN1c3RvbWVyIHVzZXIgbG9naW4uCiAgICAgICAgbXkgJFRlc3RDdXN0b21lclVzZXIgPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IGN1c3RvbWVyIHVzZXIiOwoKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwogICAgICAgIG15ICRDdXN0b21lckNvbXBhbnlPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJDb21wYW55Jyk7CgogICAgICAgICMgR2V0IGN1c3RvbWVyIHVzZXIgZGF0YS4KICAgICAgICBteSAlQ3VzdG9tZXJVc2VyID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlciwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSByYW5kb20gaWQuCiAgICAgICAgbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiAgICAgICAgbXkgJEN1c3RvbWVyQ29tcGFueUlEID0gJEN1c3RvbWVyQ29tcGFueU9iamVjdC0+Q3VzdG9tZXJDb21wYW55QWRkKAogICAgICAgICAgICBDdXN0b21lcklEICAgICAgICAgID0+ICIkVGVzdEN1c3RvbWVyVXNlci0kUmFuZG9tSUQiLAogICAgICAgICAgICBDdXN0b21lckNvbXBhbnlOYW1lID0+ICIkVGVzdEN1c3RvbWVyVXNlci0kUmFuZG9tSUQiLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ3VzdG9tZXJDb21wYW55SUQsCiAgICAgICAgICAgICJDcmVhdGVkIHRlc3QgY3VzdG9tZXIgY29tcGFueSAkQ3VzdG9tZXJDb21wYW55SUQiLAogICAgICAgICk7CgogICAgICAgICMgRGVmaW5lIHRlc3QgYXJyYXkuCiAgICAgICAgbXkgQFRlc3QgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENsYXNzTmFtZSAgPT4gJ0N1c3RvbWVyJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgICAgIERlZmluaXRpb24gPT4gPDwgIkVPRiIsCi0tLQotIEtleTogQ3VzdG9tZXIKICBOYW1lOiBDdXN0b21lcgogIFNlYXJjaGFibGU6IDEsCiAgSW5wdXQ6CiAgICBUeXBlOiBDdXN0b21lcgpFT0YKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ2xhc3NOYW1lICA9PiAnQ3VzdG9tZXJDb21wYW55JyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ0N1c3RvbWVyQ29tcGFueScsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uID0+IDw8ICJFT0YiLAotLS0KLSBLZXk6IEN1c3RvbWVyQ29tcGFueQogIE5hbWU6IEN1c3RvbWVyQ29tcGFueQogIFNlYXJjaGFibGU6IDEsCiAgSW5wdXQ6CiAgICBUeXBlOiBDdXN0b21lckNvbXBhbnkKRU9GCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGFuZ2UgY29uZmlnIHNldHRpbmdzLgogICAgICAgIG15ICVJVFNNQ29uZmlnSXRlbUN1c3RvbWVyVXNlclN5c0NvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKS0+U2V0dGluZ0dldCgKICAgICAgICAgICAgTmFtZSA9PiAnQWdlbnRDdXN0b21lclVzZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ1VJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyVXNlcicsCiAgICAgICAgKTsKCiAgICAgICAgZGVsZXRlICRJVFNNQ29uZmlnSXRlbUN1c3RvbWVyVXNlclN5c0NvbmZpZ3tFZmZlY3RpdmVWYWx1ZX0tPntDb25maWdJdGVtS2V5fTsKICAgICAgICAkSVRTTUNvbmZpZ0l0ZW1DdXN0b21lclVzZXJTeXNDb25maWd7RWZmZWN0aXZlVmFsdWV9LT57Q29uZmlnSXRlbUtleX0gPSB7CiAgICAgICAgICAgICdDdXN0b21lcicgLiAkUmFuZG9tSUQgPT4gJ0N1c3RvbWVyJywKICAgICAgICB9OwoKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnQWdlbnRDdXN0b21lclVzZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ1VJQy1JVFNNQ29uZmlnSXRlbUN1c3RvbWVyVXNlcicsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgICV7ICRJVFNNQ29uZmlnSXRlbUN1c3RvbWVyVXNlclN5c0NvbmZpZ3tFZmZlY3RpdmVWYWx1ZX0gfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSAlSVRTTUNvbmZpZ0l0ZW1DdXN0b21lckNvbXBhbnlTeXNDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyktPlNldHRpbmdHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJ0FnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55JywKICAgICAgICApOwoKICAgICAgICBkZWxldGUgJElUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55U3lzQ29uZmlne0VmZmVjdGl2ZVZhbHVlfS0+e0NvbmZpZ0l0ZW1LZXl9OwogICAgICAgICRJVFNNQ29uZmlnSXRlbUN1c3RvbWVyQ29tcGFueVN5c0NvbmZpZ3tFZmZlY3RpdmVWYWx1ZX0tPntDb25maWdJdGVtS2V5fSA9IHsKICAgICAgICAgICAgJ0N1c3RvbWVyQ29tcGFueScgLiAkUmFuZG9tSUQgPT4gJ0N1c3RvbWVyQ29tcGFueScsCiAgICAgICAgfTsKCiAgICAgICAgIyBDaGFuZ2UgY29uZmlnIHNldHRpbmcuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0FnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjo6QmFja2VuZCMjIzAwNjAtQ0lDLUlUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55JywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgJXsgJElUU01Db25maWdJdGVtQ3VzdG9tZXJDb21wYW55U3lzQ29uZmlne0VmZmVjdGl2ZVZhbHVlfSB9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgICAgICMgQWRkIHRoZSB0ZXN0IGNsYXNzZXMuCiAgICAgICAgbXkgQENvbmZpZ0l0ZW1DbGFzc0lEczsKICAgICAgICBteSBAQ29uZmlnSXRlbUNsYXNzZXM7CiAgICAgICAgbXkgQENvbmZpZ0l0ZW1EZWZpbml0aW9uSURzOwoKICAgICAgICBmb3IgbXkgJERlZmluaXRpb24gKEBUZXN0KSB7CgogICAgICAgICAgICAjIEFkZCBhbiB1bml0dGVzdCBjb25maWcgaXRlbSBjbGFzcy4KICAgICAgICAgICAgbXkgJENsYXNzSUQgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1BZGQoCiAgICAgICAgICAgICAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICREZWZpbml0aW9uLT57Q2xhc3NOYW1lfSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgQ2hlY2sgY2xhc3MgaWQuCiAgICAgICAgICAgIGlmICggISRDbGFzc0lEICkgewoKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGFkZCBuZXcgY29uZmlnIGl0ZW0gY2xhc3MuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1DbGFzc0lEcywgJENsYXNzSUQ7CiAgICAgICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1DbGFzc2VzLCAgJERlZmluaXRpb24tPntDbGFzc05hbWV9OwoKICAgICAgICAgICAgIyBDaGVjayBpZiBncm91cCBhbHJlYWR5IGV4aXN0cy4KICAgICAgICAgICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgICAgICAgICBHcm91cCAgPT4gJ2l0c20tY29uZmlnaXRlbScsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgU2V0IHBlcm1pc3Npb24uCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRDbGFzc0lELAogICAgICAgICAgICAgICAgS2V5ICAgID0+ICdQZXJtaXNzaW9uJywKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkR3JvdXBJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgQWRkIGEgZGVmaW5pdGlvbiB0byB0aGUgY2xhc3MuCiAgICAgICAgICAgIG15ICREZWZpbml0aW9uSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+RGVmaW5pdGlvbkFkZCgKICAgICAgICAgICAgICAgIENsYXNzSUQgICAgPT4gJENsYXNzSUQsCiAgICAgICAgICAgICAgICBEZWZpbml0aW9uID0+ICREZWZpbml0aW9uLT57RGVmaW5pdGlvbn0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIENoZWNrIGRlZmluaXRpb24gaWQuCiAgICAgICAgICAgIGlmICggISREZWZpbml0aW9uSUQgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgYWRkIG5ldyBjb25maWcgaXRlbSBkZWZpbml0aW9uLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdXNoIEBDb25maWdJdGVtRGVmaW5pdGlvbklEcywgJERlZmluaXRpb25JRDsKCiAgICAgICAgICAgICMgQWRkIGRhdGEgdG8gdGVzdCBhcnJheS4KICAgICAgICAgICAgJERlZmluaXRpb24tPntDbGFzc0lEfSA9ICRDbGFzc0lEOwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgJ1Byb2R1Y3Rpb24nIGRlcGxveW1lbnQgc3RhdGUgSUQuCiAgICAgICAgbXkgJERlcGxTdGF0ZURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAnUHJvZHVjdGlvbicsCiAgICAgICAgKTsKICAgICAgICBteSAkRGVwbFN0YXRlSUQgPSAkRGVwbFN0YXRlRGF0YVJlZi0+e0l0ZW1JRH07CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4uCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY29uZmlnaXRlbScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgR2V0IHNjcmlwdCBhbGlhcy4KICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3QpIHsKCiAgICAgICAgICAgICMgTmF2aWdhdGUgdG8gQWdlbnRJVFNNQ29uZmlnSXRlbUFkZC4KICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbUFkZCIpOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgICAgICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnYVtocmVmKj1cIkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtRWRpdDtDbGFzc0lEPSRUZXN0LT57Q2xhc3NJRH1cIl0nKS5sZW5ndGgiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIENsaWNrIG9uIENvbmZpZ0l0ZW0gY2xhc3MuCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1FZGl0O0NsYXNzSUQ9JFRlc3QtPntDbGFzc0lEfVwnICldIgogICAgICAgICAgICApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnI05hbWUnKS5sZW5ndGggJiYgXCQoJyNTdWJtaXRCdXR0b24nKS5sZW5ndGgiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIENyZWF0ZSB0ZXN0IENvbmZpZ0l0ZW0uCiAgICAgICAgICAgIG15ICRDb25maWdJdGVtTmFtZSA9ICdTZWxlbml1bVRlc3QtJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAnY3NzJyApLT5zZW5kX2tleXMoJENvbmZpZ0l0ZW1OYW1lKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAiXCQoJyNEZXBsU3RhdGVJRCcpLnZhbCgnJERlcGxTdGF0ZUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKSIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNEZXBsU3RhdGVJRCcpLnZhbCgpID09PSAnJERlcGxTdGF0ZUlEJyIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjSW5jaVN0YXRlSUQnKS52YWwoJzEnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpIik7CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNJbmNpU3RhdGVJRCcpLnZhbCgpID09PSAnMSciICk7CgogICAgICAgICAgICBpZiAoICRUZXN0LT57S2V5fSBlcSAnQ3VzdG9tZXInICkgewogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjSXRlbTEwIiwgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0l0ZW0xMCIsICdjc3MnICktPnNlbmRfa2V5cyggJEN1c3RvbWVyVXNlcntVc2VySUR9ICk7CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCJsaS51aS1tZW51LWl0ZW06dmlzaWJsZSIpLmxlbmd0aCcKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnbGkudWktbWVudS1pdGVtOmNvbnRhaW5zKCRDdXN0b21lclVzZXJ7VXNlcklEfSknKS5jbGljaygpIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgICAgICJcJCgnI0l0ZW0xMCcpLnZhbCgnJEN1c3RvbWVyQ29tcGFueUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKSIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNJdGVtMTAnKS52YWwoKSA9PT0gJyRDdXN0b21lckNvbXBhbnlJRCciCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnaDE6Y29udGFpbnMoJENvbmZpZ0l0ZW1OYW1lKScpLmxlbmd0aCIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggJFRlc3QtPntLZXl9IGVxICdDdXN0b21lcicgKSB7CgogICAgICAgICAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudEN1c3RvbWVyVXNlckluZm9ybWF0aW9uQ2VudGVyLgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRDdXN0b21lclVzZXJJbmZvcm1hdGlvbkNlbnRlcjtDdXN0b21lclVzZXJJRD0kQ3VzdG9tZXJVc2Vye1VzZXJJRH0iCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkQ29uZmlnSXRlbU5hbWUgKSA+IC0xLAogICAgICAgICAgICAgICAgICAgICIkQ29uZmlnSXRlbU5hbWUgZm91bmQgb24gcGFnZSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFRlc3QtPntLZXl9IGVxICdDdXN0b21lckNvbXBhbnknICkgewoKICAgICAgICAgICAgICAgICMgTmF2aWdhdGUgdG8gQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyLgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyO0N1c3RvbWVySUQ9JEN1c3RvbWVyQ29tcGFueUlEIgogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENvbmZpZ0l0ZW1OYW1lICkgPiAtMSwKICAgICAgICAgICAgICAgICAgICAiJENvbmZpZ0l0ZW1OYW1lIGZvdW5kIG9uIHBhZ2UiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBDbGVhbnVwLgogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGN1c3RvbWVyX2NvbXBhbnkgV0hFUkUgY3VzdG9tZXJfaWQgPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ3VzdG9tZXJDb21wYW55SUQgXSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkRlbGV0ZWQgQ3VzdG9tZXJDb21wYW55IiwKICAgICAgICApOwoKICAgICAgICBteSAkQ29uZmlnSXRlbUlEcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtU2VhcmNoKCBDbGFzc0lEcyA9PiBcQENvbmZpZ0l0ZW1DbGFzc0lEcyApOwoKICAgICAgICAjIERlbGV0ZSBjcmVhdGVkIHRlc3QgQ29uZmlnSXRlbS4KICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIEB7JENvbmZpZ0l0ZW1JRHN9ICkgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGRlbGV0ZWQgLSBJRCAkQ29uZmlnSXRlbUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkRGVmaW5pdGlvbklEIChAQ29uZmlnSXRlbURlZmluaXRpb25JRHMpIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBjb25maWdpdGVtX2RlZmluaXRpb24gV0hFUkUgaWQgPSAkRGVmaW5pdGlvbklEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJDb25maWcgaXRlbSBkZWZpbml0aW9uIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRDbGFzc0lEIChAQ29uZmlnSXRlbUNsYXNzSURzKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gZ2VuZXJhbF9jYXRhbG9nX3ByZWZlcmVuY2VzIFdIRVJFIGdlbmVyYWxfY2F0YWxvZ19pZCA9ICRDbGFzc0lEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJQcmVmZXJlbmNlcyBkZWxldGVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGlkID0gJENsYXNzSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkNsYXNzIGl0ZW0gaXMgZGVsZXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdC4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgpOwogICAgfQopOwoKMTsK
ITSM::ConfigItem::Class
Computer
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Hardware
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Location
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Network
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Software
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Expired
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Inactive
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Maintenance
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Pilot
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Planned
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Production
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Repair
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Retired
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Review
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::DeploymentState
Test/QA
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::YesNo
Yes
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::YesNo
No
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Laptop
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Desktop
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Phone
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
PDA
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Server
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Computer::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Monitor
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Printer
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Switch
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Router
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
WLAN Access Point
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Security Device
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Backup Device
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Mouse
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Keyboard
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Camera
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Beamer
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Modem
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
PCMCIA Card
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
USB Device
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Docking Station
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Scanner
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Hardware::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Building
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Office
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Floor
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Room
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Rack
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Workplace
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Outlet
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
IT Facility
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Location::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
LAN
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
WLAN
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
Telco
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
GSM
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Network::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Client Application
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Middleware
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Server Application
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Client OS
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Server OS
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Admin Tool
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
User Tool
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Embedded
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Single Licence
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Per User
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Concurrent Users
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Per Processor
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Per Server
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Per Node
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Volume Licence
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Enterprise Licence
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Developer Licence
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Demo
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Time Restricted
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Freeware
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Open Source
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Software::LicenceType
Unlimited
1
current_timestamp
1
current_timestamp
1
ConfigItemCreate
1
current_timestamp
1
current_timestamp
1
ConfigItemDelete
1
current_timestamp
1
current_timestamp
1
LinkAdd
1
current_timestamp
1
current_timestamp
1
LinkDelete
1
current_timestamp
1
current_timestamp
1
NameUpdate
1
current_timestamp
1
current_timestamp
1
VersionCreate
1
current_timestamp
1
current_timestamp
1
ValueUpdate
1
current_timestamp
1
current_timestamp
1
DefinitionUpdate
1
current_timestamp
1
current_timestamp
1
IncidentStateUpdate
1
current_timestamp
1
current_timestamp
1
DeploymentStateUpdate
1
current_timestamp
1
current_timestamp
1
VersionDelete
1
current_timestamp
1
current_timestamp
1
AttachmentAdd
1
current_timestamp
1
current_timestamp
1
AttachmentDelete
1
current_timestamp
1
current_timestamp
1
ITSM::ConfigItem::Class
Location
1
current_timestamp
1
current_timestamp
1
ConfigItemCreate
1
current_timestamp
1
current_timestamp
1
ConfigItemDelete
1
current_timestamp
1
current_timestamp
1
LinkAdd
1
current_timestamp
1
current_timestamp
1
LinkDelete
1
current_timestamp
1
current_timestamp
1
NameUpdate
1
current_timestamp
1
current_timestamp
1
VersionCreate
1
current_timestamp
1
current_timestamp
1
ValueUpdate
1
current_timestamp
1
current_timestamp
1
DefinitionUpdate
1
current_timestamp
1
current_timestamp
1
IncidentStateUpdate
1
current_timestamp
1
current_timestamp
1
DeploymentStateUpdate
1
current_timestamp
1
current_timestamp
1
VersionDelete
1
current_timestamp
1
current_timestamp
1
AttachmentAdd
1
current_timestamp
1
current_timestamp
1
AttachmentDelete
1
current_timestamp
1
current_timestamp
1