FAQ
2.2.4
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for FAQ 2.2.4.
Build for FAQ 2.2.3.
Build for FAQ 2.2.2.
Build for FAQ 2.2.1.
Build for FAQ 2.2.0 rc1.
Build for FAQ 2.2.0 beta3.
Build for FAQ 2.2.0 beta2.
First version for OTRS 3.2.x.
The FAQ/knowledge base.
Die FAQ-/Wissensdatenbank.
3.2.x
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to install the OTRS package FAQ.<br/>
<br/>
<br/>
<strong>ATTENTION</strong>
<br/>
<br/>
Make sure your database accepts packages over 5 MB in size. A MySQL database for example accepts packages up to 1 MB by default. In this case, the value for max_allowed_packet must be increased. The recommended maximum size accepted is 20 MB.<br/>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket FAQ zu installieren.<br/>
<br/>
<br/>
<strong>ACHTUNG</strong>
<br/>
<br/>
Vergewissern Sie sich, dass ihre Datenbank Pakete mit einer Größe von mehr als 5 MB akzeptiert. Eine MySQL Datenbank akzeptiert beispielsweise standardmäßig Pakete mit einer Größe von maximal 1 MB. In diesem Fall muss der Wert für max_allowed_packet erhöht werden. Empfohlen werden 20 MB.<br/>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está a punto de instalar el paquete FAQ de OTRS.<br/>
<br/>
<br/>
<strong>ATENCIÓN</strong>
<br/>
<br/>
Por favor asegúrese que su base de datos acepte paquetes de más de 5 MB de tamaño. Por ejemplo una base de datos de MySQL acepta paquetes de más de 1 MB predefinido. En este caso la configuración max_allowed_packet debe ser incrementada. El tamaño recomendado es 20 MB.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>NOTICE</strong>
<br/>
<br/>
In order to grant users access to the faq menu, you need to add them as member to the group 'faq'.
<br/>
<br/>
The menu items that were added by this package will be visible after you log-in to the system again.
<br/>
<br/>
To create new FAQ article you need to create categories and define the permission who can access categories.
<br/>
<br/>
If you are using the FAQ approval feature, you need to create a group and define a queue.
You will find further information in the sysconfig in FAQ -> Core::Approval.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>HINWEIS</strong>
<br/>
<br/>
Um Benutzern Zugriff auf das FAQ-Menü zu gewähren, müssen diese Mitglied der neuen Gruppe 'faq' sein.
<br/>
<br/>
Die von diesem Paket hinzugefügten Menü-Punkte sind erst nach einem erneuten Anmeldevorgang im System sichtbar.
<br/>
<br/>
Um FAQ Artikel erstellen zu können müssen zuerst Kategorien erstellt und die Berechtigungs-Gruppen dieser Kategorien definiert werden.
<br/>
<br/>
Wenn Sie das FAQ-Freigabe-Feature verwenden möchten, müssen Sie eine Gruppe dafür anlegen und eine Queue definieren.
Weitere Informationen finden Sie in der Sysconfig unter FAQ -> Core::Approval.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>AVISO</strong>
<br/>
<br/>
Para poder permitir el acceso a los usuarios al menú de faq, usted necesita agregarlos como miembros del grupo 'faq'.<br/>
<br/>
<br/>
Los elementos del menu que fueron agregados por este paquete serán visibles después de que cierre y abra su sesión de nuevo.
<br/>
<br/>
Para crear un nuevo artículo FAQ usted necesita crear una categoría y definir los permisos de quienes pueden acceder esta categoría.
<br/>
<br/>
Si usted está utilizando la funcionalidad de "FAQ approval", necesita crear un grupo y definir una cola.
Encontrará más información en sysconfig, en FAQ -> Core::Approval.
<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 groups 'faq' and 'faq_admin' that were created during package installation will be deactivated.
You can activate these groups again in the admin area.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ACHTUNG</strong>
<br/>
<br/>
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
<br/>
<br/>
Die von diesem Paket angelegten Gruppen 'faq' und 'faq_admin' werden deaktiviert.
Sie können jederzeit im Admin-Bereich wieder aktiviert werden.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ATENCIÓN</strong>
<br/>
<br/>
Si usted desinstala este paquete, todas las tablas de la base de datos creadas durante la instalación serán borradas.
¡Todos los datos de esas tablas se perderán irrevocablemente!.
<br/>
<br/>
Los grupos 'faq' y 'faq_admin' que fueron creados durante la instalación del paquete serán desactivados.
Usted puede activar estos grupos nuevamente en el área de admin.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to upgrade the OTRS package FAQ.<br/>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket FAQ zu aktualisieren.<br/>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está apunto de actualizar el paquete FAQ de OTRS.<br/>
<br/>
<br/>
((enjoy))<br/>
<br/>
# define function name
my $FunctionName = 'CodeInstall';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start method
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
# define function name
my $FunctionName = 'CodeUpgrade';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start method
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
# define function name
my $FunctionName = 'CodeUpgradeSpecial';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start method
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
# define function name
my $FunctionName = 'CodeUninstall';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start method
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
# define function name
my $FunctionName = 'CodeReinstall';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start method
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
2017-10-09 14:12:27
opms.otrs.com
IyEvdXNyL2Jpbi9wZXJsCiMgLS0KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFGRkVSTyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiMgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQojIG9yIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIEZpbmRCaW4gcXcoJFJlYWxCaW4pOwp1c2UgbGliIGRpcm5hbWUoJFJlYWxCaW4pOwp1c2UgbGliIGRpcm5hbWUoJFJlYWxCaW4pIC4gJy9LZXJuZWwvY3Bhbi1saWInOwoKdXNlIEdldG9wdDo6U3RkOwp1c2UgS2VybmVsOjpDb25maWc7CnVzZSBLZXJuZWw6OlN5c3RlbTo6REI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwp1c2UgS2VybmVsOjpTeXN0ZW06OkNTVjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lOwp1c2UgS2VybmVsOjpTeXN0ZW06Okdyb3VwOwp1c2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OICRSZWFsQmluKTsKCiMgY3JlYXRlIGNvbW1vbiBvYmplY3RzCm15ICVDb21tb25PYmplY3Q7CiRDb21tb25PYmplY3R7VXNlcklEfSAgICAgICA9IDE7CiRDb21tb25PYmplY3R7Q29uZmlnT2JqZWN0fSA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKJENvbW1vbk9iamVjdHtMb2dPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgTG9nUHJlZml4ID0+ICdPVFJTLUZBUUltcG9ydCcsCiAgICAlQ29tbW9uT2JqZWN0LAopOwokQ29tbW9uT2JqZWN0e0NTVk9iamVjdH0gICAgPSBLZXJuZWw6OlN5c3RlbTo6Q1NWLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7RW5jb2RlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldyglQ29tbW9uT2JqZWN0KTsKJENvbW1vbk9iamVjdHtNYWluT2JqZWN0fSAgID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldyglQ29tbW9uT2JqZWN0KTsKJENvbW1vbk9iamVjdHtEQk9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7VGltZU9iamVjdH0gICA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7R3JvdXBPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpHcm91cC0+bmV3KCVDb21tb25PYmplY3QpOwokQ29tbW9uT2JqZWN0e0ZBUU9iamVjdH0gICAgPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJUNvbW1vbk9iamVjdCk7CgojIGdldCBvcHRpb25zCm15ICVPcHRzOwpnZXRvcHQoICdoaXNxJywgXCVPcHRzICk7CgppZiAoIGV4aXN0cyAkT3B0c3tofSApIHsKICAgIHByaW50IFNURE9VVCAiXG4iOwogICAgcHJpbnQgU1RET1VUICJvdHJzLkZBUUltcG9ydC5wbCAtIGEgRkFRIGltcG9ydCB0b29sXG4iOwogICAgcHJpbnQgU1RET1VUICJDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vXG4iOwogICAgcHJpbnQgU1RET1VUICIgICB1c2FnZTogXG4iOwogICAgcHJpbnQgU1RET1VUICIgICAgICBvdHJzLkZBUUltcG9ydC5wbCAtaSA8SW1wb3J0RmlsZT4gWy1zIDxzZXBhcmF0b3I+XSBbLXEgPHF1b3RlPl1cbiI7CiAgICBwcmludCBTVERPVVQgIlxuIjsKICAgIHByaW50IFNURE9VVCAiICAgZXhhbXBsZXM6XG4iOwogICAgcHJpbnQgU1RET1VUICIgICAgICAgb3Rycy5GQVFJbXBvcnQucGwgLWkgZmFxLmNzdlxuIjsKICAgIHByaW50IFNURE9VVCAiICAgICAgIG90cnMuRkFRSW1wb3J0LnBsIC1pIGZhcS5jc3YgLXMgJ3wnIC1xICdcIicgXG4iOwogICAgcHJpbnQgU1RET1VUICJcbiI7CiAgICBwcmludCBTVERPVVQgIiAgIEZvcm1hdCBvZiB0aGUgQ1NWIGZpbGU6XG4iOwogICAgcHJpbnQgU1RET1VUICcgICAgICAgInRpdGxlIjsiY2F0ZWdvcnkiOyJsYW5ndWFnZSI7InN0YXRldHlwZSI7JzsKICAgIHByaW50IFNURE9VVCAnImZpZWxkMSI7ImZpZWxkMiI7ImZpZWxkMyI7ImZpZWxkNCI7ImZpZWxkNSI7ImZpZWxkNiI7ImtleXdvcmRzIicgLiAiXG4iOwogICAgcHJpbnQgU1RET1VUICJcbiI7CiAgICBleGl0IDE7Cn0KCiMgY2hlY2sgYWN0aW9uIG1vZGUKaWYgKCAhJE9wdHN7aX0gKSB7CiAgICBwcmludCBTVERFUlIgIkVSUk9SOiBOZWVkIC1pIDxJbXBvcnRGaWxlPlxuIjsKICAgIGV4aXQgMTsKfQoKcHJpbnQgU1RET1VUICJSZWFkIEZpbGUgJE9wdHN7aX0uXG4iOwoKIyByZWFkIHNvdXJjZSBmaWxlCm15ICRDU1ZTdHJpbmdSZWYgPSAkQ29tbW9uT2JqZWN0e01haW5PYmplY3R9LT5GaWxlUmVhZCgKICAgIExvY2F0aW9uID0+ICRPcHRze2l9LAogICAgUmVzdWx0ICAgPT4gJ1NDQUxBUicsCiAgICBNb2RlICAgICA9PiAnYmlubW9kZScsCik7CmRpZSAiQ2FuJ3QgcmVhZCBmaWxlICRPcHRze2l9LlxuSW1wb3J0IGFib3J0ZWQuXG4iIGlmICEkQ1NWU3RyaW5nUmVmOwoKcHJpbnQgU1RET1VUICJJbXBvcnQgaW4gcHJvY2Vzcy4uLlxuIjsKCiMgcmVhZCBjc3YgZGF0YQpteSAkRGF0YVJlZiA9ICRDb21tb25PYmplY3R7Q1NWT2JqZWN0fS0+Q1NWMkFycmF5KAogICAgU3RyaW5nICAgID0+ICQkQ1NWU3RyaW5nUmVmLAogICAgU2VwYXJhdG9yID0+ICRPcHRze3N9IHx8ICc7JywKICAgIFF1b3RlICAgICA9PiAkT3B0c3txfSB8fCAnIicsCik7CmRpZSAiXG5FcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuXG4iIGlmICFkZWZpbmVkICREYXRhUmVmOwoKIyBnZXQgYWxsIEZBUSBsYW5ndWFnZSBpZHMKbXkgJUxhbmd1YWdlSUQgPSByZXZlcnNlICRDb21tb25PYmplY3R7RkFRT2JqZWN0fS0+TGFuZ3VhZ2VMaXN0KAogICAgVXNlcklEID0+IDEsCik7CgojIGdldCBhbGwgc3RhdGUgdHlwZSBpZHMKbXkgJVN0YXRlVHlwZUlEID0gcmV2ZXJzZSAleyAkQ29tbW9uT2JqZWN0e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUxpc3QoIFVzZXJJRCA9PiAxICkgfTsKCiMgZ2V0IGdyb3VwIGlkIGZvciBmYXEgZ3JvdXAKbXkgJEZBUUdyb3VwSUQgPSAkQ29tbW9uT2JqZWN0e0dyb3VwT2JqZWN0fS0+R3JvdXBMb29rdXAoCiAgICBHcm91cCA9PiAnZmFxJywKKTsKCm15ICRMaW5lQ291bnRlcjsKUk9XOgpmb3IgbXkgJFJvd1JlZiAoIEB7JERhdGFSZWZ9ICkgewoKICAgICRMaW5lQ291bnRlcisrOwoKICAgIG15ICgKICAgICAgICAkVGl0bGUsICRDYXRlZ29yeVN0cmluZywgJExhbmd1YWdlLCAkU3RhdGVUeXBlLAogICAgICAgICRGaWVsZDEsICRGaWVsZDIsICRGaWVsZDMsICRGaWVsZDQsICRGaWVsZDUsICRGaWVsZDYsICRLZXl3b3JkcwogICAgKSA9IEB7JFJvd1JlZn07CgogICAgIyBjaGVjayBsYW5ndWFnZQogICAgaWYgKCAhJExhbmd1YWdlSUR7JExhbmd1YWdlfSApIHsKICAgICAgICBwcmludCBTVERPVVQKICAgICAgICAgICAgIkVycm9yOiBDb3VsZCBub3QgaW1wb3J0IGxpbmUgJExpbmVDb3VudGVyLiBMYW5ndWFnZSAnJExhbmd1YWdlJyBkb2VzIG5vdCBleGlzdC5cbiI7CiAgICAgICAgbmV4dCBST1c7CiAgICB9CgogICAgIyBjaGVjayBzdGF0ZSB0eXBlCiAgICBpZiAoICEkU3RhdGVUeXBlSUR7JFN0YXRlVHlwZX0gKSB7CiAgICAgICAgcHJpbnQgU1RET1VUCiAgICAgICAgICAgICJFcnJvcjogQ291bGQgbm90IGltcG9ydCBsaW5lICRMaW5lQ291bnRlci4gU3RhdGUgJyRTdGF0ZVR5cGUnIGRvZXMgbm90IGV4aXN0LlxuIjsKICAgICAgICBuZXh0IFJPVzsKICAgIH0KCiAgICAjIGdldCBzdWJjYXRlZ29yaWVzCiAgICBteSBAQ2F0ZWdvcnlBcnJheSA9IHNwbGl0IC86Oi8sICRDYXRlZ29yeVN0cmluZzsKCiAgICAjIGNoZWNrIGVhY2ggc3ViY2F0ZWdvcnkgaWYgaXQgZXhpc3RzCiAgICBteSAkQ2F0ZWdvcnlJRDsKICAgIG15ICRQYXJlbnRJRCA9IDA7CiAgICBmb3IgbXkgJENhdGVnb3J5IChAQ2F0ZWdvcnlBcnJheSkgewoKICAgICAgICAjIGdldCB0aGUgY2F0ZWdvcnkgaWQKICAgICAgICAkQ29tbW9uT2JqZWN0e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBmYXFfY2F0ZWdvcnkgJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgdmFsaWRfaWQgPSAxIEFORCBuYW1lID0gPyBBTkQgcGFyZW50X2lkID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRDYXRlZ29yeSwgXCRQYXJlbnRJRCBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CiAgICAgICAgbXkgQFJlc3VsdDsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkQ29tbW9uT2JqZWN0e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICBwdXNoKCBAUmVzdWx0LCAkUm93WzBdICk7CiAgICAgICAgfQogICAgICAgICRDYXRlZ29yeUlEID0gJFJlc3VsdFswXTsKCiAgICAgICAgIyBjcmVhdGUgY2F0ZWdvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QKICAgICAgICBpZiAoICEkQ2F0ZWdvcnlJRCApIHsKICAgICAgICAgICAgJENhdGVnb3J5SUQgPSAkQ29tbW9uT2JqZWN0e0ZBUU9iamVjdH0tPkNhdGVnb3J5QWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICAgPT4gJENhdGVnb3J5LAogICAgICAgICAgICAgICAgUGFyZW50SUQgPT4gJFBhcmVudElELAogICAgICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBuZXcgY2F0ZWdvcnkgdG8gZmFxIGdyb3VwCiAgICAgICAgICAgICRDb21tb25PYmplY3R7RkFRT2JqZWN0fS0+U2V0Q2F0ZWdvcnlHcm91cCgKICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgICAgICBHcm91cElEcyAgID0+IFskRkFRR3JvdXBJRF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBuZXcgcGFyZW50IGlkCiAgICAgICAgJFBhcmVudElEID0gJENhdGVnb3J5SUQ7CiAgICB9CgogICAgIyBjaGVjayBjYXRlZ29yeQogICAgaWYgKCAhJENhdGVnb3J5SUQgKSB7CiAgICAgICAgcHJpbnQgU1RET1VUCiAgICAgICAgICAgICJFcnJvcjogQ291bGQgbm90IGltcG9ydCBsaW5lICRMaW5lQ291bnRlci4gQ2F0ZWdvcnkgJyRDYXRlZ29yeVN0cmluZycgY291bGQgbm90IGJlIGNyZWF0ZWQuXG4iOwogICAgICAgIG5leHQgUk9XOwogICAgfQoKICAgICMgYWRkIEZBUSBhcnRpY2xlCiAgICBteSAkRkFRSUQgPSAkQ29tbW9uT2JqZWN0e0ZBUU9iamVjdH0tPkZBUUFkZCgKICAgICAgICBUaXRsZSAgICAgID0+ICRUaXRsZSwKICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgIFN0YXRlSUQgICAgPT4gJFN0YXRlVHlwZUlEeyRTdGF0ZVR5cGV9LAogICAgICAgIExhbmd1YWdlSUQgPT4gJExhbmd1YWdlSUR7JExhbmd1YWdlfSwKICAgICAgICBGaWVsZDEgICAgID0+ICRGaWVsZDEsCiAgICAgICAgRmllbGQyICAgICA9PiAkRmllbGQyLAogICAgICAgIEZpZWxkMyAgICAgPT4gJEZpZWxkMywKICAgICAgICBGaWVsZDQgICAgID0+ICRGaWVsZDQsCiAgICAgICAgRmllbGQ1ICAgICA9PiAkRmllbGQ1LAogICAgICAgIEZpZWxkNiAgICAgPT4gJEZpZWxkNiwKICAgICAgICBLZXl3b3JkcyAgID0+ICRLZXl3b3JkcyB8fCAnJywKICAgICAgICBBcHByb3ZlZCAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIHN1Y2Nlc3MKICAgIGlmICggISRGQVFJRCApIHsKICAgICAgICBwcmludCBTVERPVVQgIkVycm9yOiBDb3VsZCBub3QgaW1wb3J0IGxpbmUgJExpbmVDb3VudGVyLlxuIjsKICAgICAgICBuZXh0IFJPVzsKICAgIH0KfQoKcHJpbnQgU1RET1VUICJJbXBvcnQgY29tcGxldGUuXG4iOwoKZXhpdCAwOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyEvdXNyL2Jpbi9wZXJsCiMgLS0KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFGRkVSTyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiMgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQojIG9yIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgdXNlIC4uLy4uLyBhcyBsaWIgbG9jYXRpb24KdXNlIEZpbmRCaW4gcXcoJEJpbik7CnVzZSBsaWIgIiRCaW4vLi4vLi4iOwp1c2UgbGliICIkQmluLy4uLy4uL0tlcm5lbC9jcGFuLWxpYiI7CnVzZSBsaWIgIiRCaW4vLi4vLi4vQ3VzdG9tIjsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OIEBJTkMpOwoKIyAwPW9mZjsxPW9uOwpteSAkRGVidWcgPSAwOwoKIyBjaGVjayBASU5DIGZvciBtb2RfcGVybCAoYWRkIGxpYiBwYXRoIGZvciAicmVxdWlyZSBtb2R1bGUiISkKcHVzaCggQElOQywgIiRCaW4vLi4vLi4iLCAiJEJpbi8uLi8uLi9LZXJuZWwvY3Bhbi1saWIiICk7CgpwcmludCAibG9jYXRpb246IHB1YmxpYy5wbD9BY3Rpb249UHVibGljRkFRRXhwbG9yZXJcbiI7CnByaW50ICJcbiI7CnByaW50ICI8YSBocmVmPSdwdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUUV4cGxvcmVyJz5tb3ZlZDwvYT5cbiI7Cg==
IyEvdXNyL2Jpbi9wZXJsIC13CiMgLS0KIyBmYXEucGwgLSB0aGUgZ2xvYmFsIENHSSBoYW5kbGUgZmlsZSBmb3IgT1RSUwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogZmFxLmZwbCx2IDEuNSAyMDEyLTExLTIwIDEzOjE4OjI2IG1oIEV4cCAkCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFGRkVSTyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiMgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCiMgb3Igc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyB1c2UgLi4vLi4vIGFzIGxpYiBsb2NhdGlvbgp1c2UgRmluZEJpbiBxdygkQmluKTsKdXNlIGxpYiAiJEJpbi8uLi8uLiI7CnVzZSBsaWIgIiRCaW4vLi4vLi4vS2VybmVsL2NwYW4tbGliIjsKdXNlIGxpYiAiJEJpbi8uLi8uLi9DdXN0b20iOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04gQElOQyk7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjUgJCkgWzFdOwoKIyAwPW9mZjsxPW9uOwpteSAkRGVidWcgPSAwOwoKIyBjaGVjayBASU5DIGZvciBtb2RfcGVybCAoYWRkIGxpYiBwYXRoIGZvciAicmVxdWlyZSBtb2R1bGUiISkKcHVzaCAoQElOQywgIiRCaW4vLi4vLi4iLCAiJEJpbi8uLi8uLi9LZXJuZWwvY3Bhbi1saWIiKTsKCnByaW50ICJsb2NhdGlvbjogcHVibGljLmZwbD9BY3Rpb249UHVibGljRkFRRXhwbG9yZXJcbiI7CnByaW50ICJcbiI7CnByaW50ICI8YSBocmVmPSdwdWJsaWMuZnBsP0FjdGlvbj1QdWJsaWNGQVFFeHBsb3Jlcic+bW92ZWQ8L2E+XG4iOwo=
iVBORw0KGgoAAAANSUhEUgAABbsAAAObCAIAAAD14cvUAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAfQAAAH0AG5i+efAAAgAElEQVR4nOzdeVxTx/o/8AkkkITdBQVFBEWKVnDBDUVxBbFVQVzrUuveuuCVUFurUr60FFosYLXXulRksVIQvGARvSgKgmsBV3ABFJAtKohAgJD8/ji/e25ugBAwkICf9x99ncyZM/OclJHwZM4MQywWEwAAAAAAAAAAkKCm7AAAAAAAAAAAAFQOMiYAAAAAAAAAANKQMQEAAAAAAAAAkIaMCQAAAAAAAACANKbkC4FAcPv27ezs7PLy8rq6Ok1Nzd69e1taWtra2rLZbLqal5eXPE1T1aQqa2hoGBgYWFhY2NnZcbncpleJRKLbt2/fu3evrKysrq6OyWTq6ur26dNn4MCBI0eOZDKZTS+hPX/+PCMjo7S0tKKiQiAQMJlMfX19CwuLCRMmaGtryxNzRUVFcnLykydPampquFzu4MGDHRwc9PX15b/ftp4CSdQbtXPnTsmfNwAAAAAAAIDO998ERG5ubnR0dHV1tYaGhomJCZfLrampKSwsLCgoSE9PX7Bggbm5OVVzxIgRkk00NjbevXu3abmk4cOHq6urE0IEAsGzZ89SU1Pv3r27du1aHR0dyWp1dXVhYWEFBQVMJtPExERHR6e+vr68vPz+/fv379+3tLTU1dWVcTNPnjzJyMgwMDDo378/m82uq6srLCy8evVqRkbGypUr+/btK/u9KCkpCQkJqa2tNTQ0HDhwYHl5eWZmZk5OzurVqw0NDWVf2/ROAQAAAAAAAKDr+v8Zk/z8/PDwcJFINHnyZHt7exaLRZULhcLU1NTLly+Hh4evXLnS1NSUEDJ//nzJJgQCAZUxkSqXNGfOHHrWQF1d3cmTJ/Pz8y9evDhv3jzJasnJyQUFBaamposWLdLS0qLLX79+nZmZKXuCCSHE2tp67NixktNJhEJhfHx8Zmbm2bNn16xZI+NasVgcExNTW1s7derUKVOmUIVXrly5ePFiTEzM+vXrGQyG7N6b3ikAAAAAAAAAdFFqhJCGhoaYmJjGxsZZs2ZNmzaNTpcQQphMpoODg5OTU2Nj4+nTp4VC4bt3qampOWvWLEJITk6O1Kn79+8TQpydnSXTJYQQAwODqVOnNvsUj6RevXpJ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uXPnHj58uNueHgAAAAAAdJc+uyvnypUrQUFBCQkJixcvvnr16g8//CCE2L59+8GDB9PS0iZMmPD111+vXr1aoVC8/vrr0i2xsbHvvPOOk5OTs7OzHKe+vv706dNywcXImjVrvv/++7/97W///Oc/X3rpJaOrjz76aFpaWvc8HwAAAAAA6EZ9tmJy/fr15ubm3/72t8OHDx8+fLgQ4vbt2zt27Pj0008nTZokhHBxcUlMTHz55Zflism2bdsee+wxoziXLl1qbGx84IEHWk6h1WqPHDmSm5v78MMPCyFefvnlsLAwwwHDhw//9ttvu+PpAAAAAABAt+qzFZNx48Y9/vjjjz/++Pz583/729/6+vpWVFRotdr//M//lMfodLpbt241NjZKH6VKipGff/5ZCNHqmUDffvttU1OTfFfL2/v379/Q0NDQ0NCvX78ueSjT6urqWh6/BAAAAAAAOqF3V0wMX/EthJAOJZFYW1ufPHmysLAwPz8/KCjoyJEj0vuxP/nkE0dHR8O7bGz+70tQKpUtpxgwYIAQ4saNG4MGDTInB0NarValUt2Fcsn3338fGxur1+vffffd7p4LAAAAwL1Gq9X+/e9/f++99yydCPq4L774wsPDw9JZ/EvvrphI5Yxr165Ja0DOnTtneNXGxmbu3Llz586dNWvWM8888+677zo4OHz33XePPvqo+VM88MADSqXy0qVLLi4uRpdGjRplY2Pz2WefzZo1Swhx5swZowHff//9yJEjO/Fc5vv++++jo6MzMzP1ev358+e7dS4AAAAA96b+/ft/8MEHRi+7ALrcjz/+aGdnZ+ks/qV3V0wefPDBX/7ylzExMVu3br1w4YLh+ax///vfT506NXv2bKVSmZOT4+rqam9vHxUVFRISUl9fP3369Nu3b58+ffrrr7/esmWLiSlUKtXkyZNPnz49ZcoUo0v9+/dftGhRRERERkZGbW3t3r17jQb8z//8z9SpU7vqYY1ItZL3339fej+0t7e3SqX67rvvzLn3yy+/NHNkq27cuHH79u1O325BGo1GCHEnzw4AAADcm8LCwni7MLqb9HZhS2fxL727YmJtbf3HP/5x9erVY8eOffzxx6Ojo1944QXpUv/+/Y8ePRoVFdXQ0DBp0qQ///nPQoiNGzcOGTIkKSlpxYoVSqVywoQJq1atancWX1/f48ePv/LK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AI8y3mMCAAAAAACg9P8Ao4AV2Y1KBXcAAAAASUVORK5CYII=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6QWdlbnQ6OlN0YXRlVHlwZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkludGVyZmFjZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPmludGVybmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+ZXh0ZXJuYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5wdWJsaWM8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpDdXN0b21lcjo6U3RhdGVUeXBlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5MaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+SW50ZXJmYWNlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+ZXh0ZXJuYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5wdWJsaWM8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpQdWJsaWM6OlN0YXRlVHlwZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5JbnRlcmZhY2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5wdWJsaWM8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpEZWZhdWx0OjpSb290Q2F0ZWdvcnlOYW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgY2F0ZWdvcnkgbmFtZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz5GQVE8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkRlZmF1bHQ6OlJvb3RDYXRlZ29yeUNvbW1lbnQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBjYXRlZ29yeSBuYW1lLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPmRlZmF1bHQgY29tbWVudDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6SXRlbTo6Vm90aW5nOjpSYXRlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6Okl0ZW06OlZvdGluZzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxMDAiPjU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ijc1Ij40PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSI1MCI+MzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjUiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6Okl0ZW06OlZvdGluZzo6U2hvdyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SXRlbTo6Vm90aW5nPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImludGVybmFsIj5pbnRlcm5hbCAoYWdlbnQpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJleHRlcm5hbCI+ZXh0ZXJuYWwgKGN1c3RvbWVyKTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6OlBhdGg6OlNob3ciIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvdyBGQVEgcGF0aCB5ZXMvbm8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkV4cGxvcmVyOjpJdGVtTGlzdDo6Vm90aW5nUmVzdWx0RGVjaW1hbFBsYWNlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+MjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6Okl0ZW1MaXN0OjpWb3RpbmdSZXN1bHRDb2xvcnMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzMCI+cmVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSI3MCI+b3JhbmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxMDAiPmdyZWVuPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpFeHBsb3Jlcjo6UGF0aDo6U2VwYXJhdG9yIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZBUSBwYXRoIHNlcGFyYXRvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+wrs8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkV4cGxvcmVyOjpRdWlja1NlYXJjaDo6U2hvdyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWlja3NlYXJjaCBzaG91bGQgYmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0icHVibGljIj5wdWJsaWMgKHB1YmxpYyk8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkV4cGxvcmVyOjpMYXN0Q2hhbmdlOjpTaG93IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkV4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImludGVybmFsIj5pbnRlcm5hbCAoYWdlbnQpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJleHRlcm5hbCI+ZXh0ZXJuYWwgKGN1c3RvbWVyKTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0icHVibGljIj5wdWJsaWMgKHB1YmxpYyk8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkV4cGxvcmVyOjpMYXN0Q2hhbmdlOjpTaG93U3ViQ2F0ZWdvcnlJdGVtcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkV4cGxvcmVyOjpMYXN0Q2hhbmdlOjpMaW1pdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkV4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz4zPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpFeHBsb3Jlcjo6TGFzdENyZWF0ZTo6U2hvdyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaW50ZXJuYWwiPmludGVybmFsIChhZ2VudCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImV4dGVybmFsIj5leHRlcm5hbCAoY3VzdG9tZXIpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJwdWJsaWMiPnB1YmxpYyAocHVibGljKTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6Okxhc3RDcmVhdGU6OlNob3dTdWJDYXRlZ29yeUl0ZW1zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6Okxhc3RDcmVhdGU6OkxpbWl0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk51bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPjM8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkV4cGxvcmVyOjpUb3AxMDo6U2hvdyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaW50ZXJuYWwiPmludGVybmFsIChhZ2VudCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImV4dGVybmFsIj5leHRlcm5hbCAoY3VzdG9tZXIpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJwdWJsaWMiPnB1YmxpYyAocHVibGljKTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6OlRvcDEwOjpMaW1pdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkV4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz4xMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6OlRvcDEwOjpTaG93U3ViQ2F0ZWdvcnlJdGVtcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZBUUhvb2siIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPkZBUSM8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkRlZmF1bHQ6OlN0YXRlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz5pbnRlcm5hbCAoYWdlbnQpPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpBcHByb3ZhbFJlcXVpcmVkIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk5ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkFwcHJvdmFsPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIwIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpBcHByb3ZhbEdyb3VwIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkFwcHJvdmFsPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz5mYXFfYXBwcm92YWw8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkFwcHJvdmFsUXVldWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6QXBwcm92YWw8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPkZBUV9BcHByb3ZhbDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KCiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkFwcHJvdmFsVGlja2V0U3ViamVjdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6QXBwcm92YWw8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPkZBUSBhcHByb3ZhbCByZXF1aXJlZCBmb3IgRkFRIyAmbHQ7T1RSU19GQVFfTlVNQkVSJmd0OzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6QXBwcm92YWxUaWNrZXRCb2R5IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpBcHByb3ZhbDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxUZXh0QXJlYT5IaSwKCmEgbmV3IEZBUSBhcnRpY2xlIG5lZWRzIHlvdXIgYXBwcm92YWwgYmVmb3JlIGl0IGNhbiBiZSBwdWJsaXNoZWQuCgogIEZBUSMgICA6ICZsdDtPVFJTX0ZBUV9OVU1CRVImZ3Q7CiAgVGl0bGUgIDogJmx0O09UUlNfRkFRX1RJVExFJmd0OwogIEF1dGhvciA6ICZsdDtPVFJTX0ZBUV9BVVRIT1ImZ3Q7CiAgU3RhdGUgIDogJmx0O09UUlNfRkFRX1NUQVRFJmd0OwoKSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgY2xpY2sgb24gdGhpcyBsaW5rOgoKJmx0O09UUlNfQ09ORklHX0h0dHBUeXBlJmd0OzovLyZsdDtPVFJTX0NPTkZJR19GUUROJmd0Oy8mbHQ7T1RSU19DT05GSUdfU2NyaXB0QWxpYXMmZ3Q7aW5kZXgucGw/QWN0aW9uPUFnZW50RkFRRWRpdDtJdGVtSUQ9Jmx0O09UUlNfRkFRX0lURU1JRCZndDsKCllvdXIgT1RSUyBOb3RpZmljYXRpb24gTWFzdGVyCiAgICAgICAgICAgIDwvVGV4dEFyZWE+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpBcHByb3ZhbFRpY2tldFByaW9yaXR5IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpBcHByb3ZhbDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+MyBub3JtYWw8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkFwcHJvdmFsVGlja2V0RGVmYXVsdFN0YXRlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpBcHByb3ZhbDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+bmV3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpJdGVtOjpGaWVsZDEiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SXRlbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTaG93Ij5wdWJsaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhcHRpb24iPlN5bXB0b208L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjEwMDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6SXRlbTo6RmllbGQyIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6Okl0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+cHVibGljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXB0aW9uIj5Qcm9ibGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMDA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6Okl0ZW06OkZpZWxkMyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbml0aW9uIG9mIEZBUSBpdGVtIGZyZWUgdGV4dCBmaWVsZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJdGVtPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPnB1YmxpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2FwdGlvbiI+U29sdXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjMwMDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6SXRlbTo6RmllbGQ0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6Okl0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXB0aW9uIj5GaWVsZDQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjQwMDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6SXRlbTo6RmllbGQ1IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6Okl0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXB0aW9uIj5GaWVsZDU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjUwMDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6SXRlbTo6RmllbGQ2IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6Okl0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+aW50ZXJuYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhcHRpb24iPkNvbW1lbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjYwMDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzgzMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdGQVEnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ05vcm1hbCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzgzMDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdGQVEnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ1BhcmVudENoaWxkJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UGFyZW50Q2hpbGQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyM4MzAzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnRkFRJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdUaWNrZXQnIG9iamVjdHMgdXNpbmcgdGhlICdOb3JtYWwnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyM4MzA0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnRkFRJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdUaWNrZXQnIG9iamVjdHMgdXNpbmcgdGhlICdQYXJlbnRDaGlsZCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlBhcmVudENoaWxkPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRRXhwbG9yZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+ZmFxPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT5GQVE8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8R3JvdXBSbz5mYXE8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5NZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5JdGVtQXJlYTwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+RkFRPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudEZBUUV4cGxvcmVyPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+RkFRPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT5xPC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+MzUwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxHcm91cFJvPmZhcTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5GQVEgRXhwbG9yZXI8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPkV4cGxvcmVyPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxJbWFnZT5saXN0LnBuZzwvSW1hZ2U+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50RkFRRXhwbG9yZXI8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+RkFRPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT5lPC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+OTEwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLkFnZW50LkRldGFpbC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI0N1c3RvbWVyRkFRRXhwbG9yZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5DdXN0b21lciBGQVE8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPjwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5GQVE8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPkZBUTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249Q3VzdG9tZXJGQVFFeHBsb3JlcjwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5NZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+RkFRPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz43MDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUSBFeHBsb3JlcjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+RkFRIEV4cGxvcmVyPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1DdXN0b21lckZBUUV4cGxvcmVyPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlN1Ym1lbnU8L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5GQVE8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PmY8L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz43MTA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuQ3VzdG9tZXIuRGV0YWlsLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLkN1c3RvbWVyLkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuV2lkZ2V0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1NfSUU3PkZBUS5DdXN0b21lci5EZWZhdWx0LklFNy5jc3M8L0NTU19JRTc+CiAgICAgICAgICAgICAgICAgICAgPENTU19JRTc+RkFRLldpZGdldC5JRTcuY3NzPC9DU1NfSUU3PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFFeHBsb3JlciMjI1NlYXJjaExpbWl0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OlZpZXdGQVFFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDh9JCI+MjAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFFeHBsb3JlciMjI1NlYXJjaFBhZ2VTaG93biIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3RkFRRXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSwzfSQiPjQwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFFeHBsb3JlciMjI1NvcnRCeTo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OlZpZXdGQVFFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRkFRSUQiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+VGl0bGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkZBUUlEIj5OdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5Ij5DYXRlZ29yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFuZ3VhZ2UiPkxhZ3VhZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXRlIj5TdGF0ZTwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFFeHBsb3JlciMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6Vmlld0ZBUUV4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJEb3duIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRG93biI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiPlVwPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQdWJsaWNGcm9udGVuZDo6Q29tbW9uUGFyYW0jIyNBY3Rpb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz5QdWJsaWNGQVFFeHBsb3JlcjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlB1YmxpY0Zyb250ZW5kOjpNb2R1bGUjIyNQdWJsaWNGQVFFeHBsb3JlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+UHVibGljIGZhcTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8VGl0bGU+PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5GQVE8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPVB1YmxpY0ZBUUV4cGxvcmVyPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPjwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+ZjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjQwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5DdXN0b21lci5EZXRhaWwuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuQ3VzdG9tZXIuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5XaWRnZXQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTU19JRTc+RkFRLkN1c3RvbWVyLkRlZmF1bHQuSUU3LmNzczwvQ1NTX0lFNz4KICAgICAgICAgICAgICAgICAgICA8Q1NTX0lFNz5GQVEuV2lkZ2V0LklFNy5jc3M8L0NTU19JRTc+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFFeHBsb3JlciMjI1NlYXJjaExpbWl0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6Vmlld0ZBUUV4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsOH0kIj4yMDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFFeHBsb3JlciMjI1NlYXJjaFBhZ2VTaG93biIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpQdWJsaWM6OlZpZXdGQVFFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDN9JCI+NDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFFeHBsb3JlciMjI1NvcnRCeTo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6Vmlld0ZBUUV4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJGQVFJRCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj5UaXRsZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRkFRSUQiPk51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPkNhdGVnb3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYW5ndWFnZSI+TGFndWFnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGUiPlN0YXRlPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFFeHBsb3JlciMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpWaWV3RkFRRXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IkRvd24iPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEb3duIj5Eb3duPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJVcCI+VXA8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlB1YmxpY0Zyb250ZW5kOjpNb2R1bGUjIyNQdWJsaWNGQVFSU1MiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlB1YmxpYyBmYXE8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6SXRlbTo6SFRNTCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJdGVtPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6OkhlYWRlck1ldGFNb2R1bGUjIyMzLUZBUVNlYXJjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVNZXRhSGVhZDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpIZWFkZXJNZXRhRkFRU2VhcmNoPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50RkFRU2VhcmNoPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iQ3VzdG9tZXJGcm9udGVuZDo6SGVhZGVyTWV0YU1vZHVsZSMjIzMtRkFRU2VhcmNoIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TW9kdWxlTWV0YUhlYWQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6Q3VzdG9tZXJIZWFkZXJNZXRhRkFRU2VhcmNoPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkN1c3RvbWVyRkFRU2VhcmNoPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHVibGljRnJvbnRlbmQ6OkhlYWRlck1ldGFNb2R1bGUjIyMzLUZBUVNlYXJjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlTWV0YUhlYWQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6UHVibGljSGVhZGVyTWV0YUZBUVNlYXJjaDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5QdWJsaWNGQVFTZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6T3V0cHV0OjpGaWx0ZXJFbGVtZW50UG9zdCMjI0ZBUSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHdoZXJlIHRoZSAnSW5zZXJ0IEZBUScgbGluayB3aWxsIGJlIGRpc3BsYXllZC4gTm90ZTogQWdlbnRUaWNrZXRBY3Rpb25Db21tb24gaW5jbHVkZXMgQWdlbnRUaWNrZXROb3RlLCBBZ2VudFRpY2tldENsb3NlLCBBZ2VudFRpY2tldEZyZWVUZXh0LCBBZ2VudFRpY2tldE93bmVyLCBBZ2VudFRpY2tldFBlbmRpbmcsIEFnZW50VGlja2V0UHJpb3JpdHkgYW5kIEFnZW50VGlja2V0UmVzcG9uc2libGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok91dHB1dEZpbHRlckZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVidWciPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRlbXBsYXRlcyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRQaG9uZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEVtYWlsIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0Q29tcG9zZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEZvcndhcmQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRBY3Rpb25Db21tb24iPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok91dHB1dDo6T3V0cHV0RmlsdGVyVGV4dEF1dG9MaW5rIyMjRkFRIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpXZWI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVnRXhwIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPihGQVEpWyNcc10qPzEoXGR7NH0pPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVSTDEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVVJMIj4vb3Rycy9pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0mbHQ7TUFUQ0gyJmd0OzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbWFnZSI+aGVscC1zbWFsbC5wbmc8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5fYmxhbms8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRQWRkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5GQVEtQXJlYTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8VGl0bGU+RkFRPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEdyb3VwPmZhcTwvR3JvdXA+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TmV3IEZBUSBBcnRpY2xlPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5OZXc8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50RkFRQWRkPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkZBUTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+bjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjkyMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5BZ2VudC5EZXRhaWwuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRGQVFFZGl0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5GQVEgRWRpdDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGU+RWRpdDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLkFnZW50LkRldGFpbC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudEZBUUxhbmd1YWdlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxX2FkbWluPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5GQVEtQXJlYTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGU+RkFRPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEdyb3VwPmZhcV9hZG1pbjwvR3JvdXA+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGFuZ3VhZ2UgTWFuYWdlbWVudDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5MYW5ndWFnZSBNYW5hZ2VtZW50PC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudEZBUUxhbmd1YWdlPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkZBUTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+dTwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjk0MDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5GQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRQ2F0ZWdvcnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXFfYWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5GQVE8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxX2FkbWluPC9Hcm91cD4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DYXRlZ29yeSBNYW5hZ2VtZW50PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPkNhdGVnb3J5IE1hbmFnZW1lbnQ8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50RkFRQ2F0ZWdvcnk8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+RkFRPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT5jPC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+OTUwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkZBUS5BZ2VudC5Db25maXJtYXRpb25EaWFsb2cuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRGQVFTZWFyY2giIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+ZmFxPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPFRpdGxlPkZBUTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxHcm91cFJvPmZhcTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZWFyY2ggRkFRPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlNlYXJjaDwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRGQVFTZWFyY2g8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPExpbmtPcHRpb24+b25jbGljaz0iQ29yZS5BZ2VudC5TZWFyY2guT3BlblNlYXJjaERpYWxvZygnQWdlbnRGQVFTZWFyY2gnKTsgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgeyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgfSBlbHNlIHsgd2luZG93LmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7IH0gcmV0dXJuIGZhbHNlOyI8L0xpbmtPcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+RkFRPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT5zPC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+OTYwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRU2VhcmNoU21hbGwiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+ZmFxPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPFRpdGxlPkZBUTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6OlNlYXJjaCMjI0ZBUSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5GQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpTZWFyY2hSb3V0ZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iXig/OkFnZW50fEFkbWluKUZBUSI+QWN0aW9uPUFnZW50RkFRU2VhcmNoO1N1YmFjdGlvbj1BSkFYPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6T3ZlcnZpZXcjIyNTbWFsbCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVFPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFPdmVydmlld1NtYWxsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5TbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZVNob3J0Ij5TPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNTaG93Q29sdW1ucyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0ZBUVNlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhbmd1YWdlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCMjI1NvcnRCeTo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0ZBUVNlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRkFRSUQiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+VGl0bGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkZBUUlEIj5OdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5Ij5DYXRlZ29yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFuZ3VhZ2UiPkxhZ3VhZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXRlIj5TdGF0ZTwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNPcmRlcjo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3RkFRU2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJEb3duIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRG93biI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiPlVwPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCMjI1NlYXJjaExpbWl0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0ZBUVNlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDh9JCI+MjAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFFeHBsb3JlciMjI1Nob3dDb2x1bW5zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdGQVFFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhbmd1YWdlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZWQiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUUV4cGxvcmVyIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0ZBUUV4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJGQVFJRCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj5UaXRsZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRkFRSUQiPk51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPkNhdGVnb3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYW5ndWFnZSI+TGFndWFnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGUiPlN0YXRlPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUUV4cGxvcmVyIyMjT3JkZXI6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3RkFRRXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IkRvd24iPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEb3duIj5Eb3duPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJVcCI+VXA8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRRXhwbG9yZXIjIyNTZWFyY2hMaW1pdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3RkFRRXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw4fSQiPjIwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlByZWZlcmVuY2VzR3JvdXBzIyMjRkFRT3ZlcnZpZXdTbWFsbFBhZ2VTaG93biIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6UHJlZmVyZW5jZXM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6UHJlZmVyZW5jZXNHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb2x1bW4iPk90aGVyIFNldHRpbmdzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCIgVHJhbnNsYXRhYmxlPSIxIj5GQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5IiBUcmFuc2xhdGFibGU9IjEiPkZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEwIj4xMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxNSI+MTU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjAiPjIwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjI1Ij4yNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzMCI+MzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMzUiPjM1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YVNlbGVjdGVkIj4yNTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+VXNlckZBUU92ZXJ2aWV3U21hbGxQYWdlU2hvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjgwMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGl2ZSI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudEZBUVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+ZmFxPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5GQVE8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5BZ2VudC5EZXRhaWwuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuV2lkZ2V0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkZBUS5BZ2VudC5Db25maXJtYXRpb25EaWFsb2cuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+RkFRLkFnZW50LlRpY2tldENvbXBvc2UuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+RkFRLkFnZW50LkZBUVpvb20uanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDAwLUJhY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPiRFbnZ7Ikxhc3RTY3JlZW5PdmVydmlldyJ9PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDEwLUVkaXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+RWRpdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+RWRpdCB0aGlzIEZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudEZBUUVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudEZBUUVkaXQ7SXRlbUlEPSRRRGF0YXsiSXRlbUlEIn07U2NyZWVuVHlwZT1Qb3B1cDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwMjAtSGlzdG9yeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+SGlzdG9yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+SGlzdG9yeSBvZiB0aGlzIEZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudEZBUUhpc3Rvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudEZBUUhpc3Rvcnk7SXRlbUlEPSRRRGF0YXsiSXRlbUlEIn08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDMwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUU1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+UHJpbnQgdGhpcyBGQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRGQVFQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50RkFRUHJpbnQ7SXRlbUlEPSRRRGF0YXsiSXRlbUlEIn08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtQYXJhbSI+dGFyZ2V0PSJwcmludF9GQVEiPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzA0MC1MaW5rIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUU1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5MaW5rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5MaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRMaW5rT2JqZWN0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1GQVE7U291cmNlS2V5PSRRRGF0YXsiSXRlbUlEIn08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDUwLURlbGV0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+RGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5EZWxldGUgdGhpcyBGQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRGQVFEZWxldGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudEZBUURlbGV0ZTtJdGVtSUQ9JFFEYXRheyJJdGVtSUQifTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Db25maXJtYXRpb25EaWFsb2c8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVsZW1lbnRTZWxlY3RvciI+IyRRRGF0YXsiTWVudUlEIn08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZyI+QWN0aW9uPUFnZW50RkFRRGVsZXRlO0l0ZW1JRD0kUURhdGF7Ikl0ZW1JRCJ9PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maXJtZWRBY3Rpb25RdWVyeVN0cmluZyI+QWN0aW9uPUFnZW50RkFRRGVsZXRlO1N1YmFjdGlvbj1EZWxldGU7SXRlbUlEPSRRRGF0YXsiSXRlbUlEIn08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpYWxvZ1RpdGxlIj4kVGV4dHsiRGVsZXRlIn0gJENvbmZpZ3siRkFROjpGQVFIb29rIn0gJFFEYXRheyJOdW1iZXIifTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI0N1c3RvbWVyRkFRWm9vbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPFRpdGxlPjwvVGl0bGU+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+Q3VzdG9tZXIgRkFRLVpvb208L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5DdXN0b21lci5EZXRhaWwuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuQ3VzdG9tZXIuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5GQVFab29tLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkZBUS5DdXN0b21lci5GQVFab29tLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iQ3VzdG9tZXJGcm9udGVuZDo6TW9kdWxlIyMjQ3VzdG9tZXJGQVFTZWFyY2giIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5DdXN0b21lciBGQVEgc2VhcmNoPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT5TZWFyY2ggRkFRPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2VhcmNoPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlNlYXJjaDwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TdWJtZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+RkFRPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUN1c3RvbWVyRkFRU2VhcmNoPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxMaW5rT3B0aW9uPjwvTGlua09wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjc4MDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVyRkFRU2VhcmNoIyMjU2VhcmNoTGltaXQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3RkFRU2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsOH0kIj4yMDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckZBUVNlYXJjaCMjI1NlYXJjaFBhZ2VTaG93biIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3RkFRU2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsM30kIj40MDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVyRkFRU2VhcmNoIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3RkFRU2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJGQVFJRCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj5UaXRsZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRkFRSUQiPk51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPkNhdGVnb3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYW5ndWFnZSI+TGFndWFnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGUiPlN0YXRlPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckZBUVNlYXJjaCMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OlZpZXdGQVFTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IkRvd24iPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEb3duIj5Eb3duPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJVcCI+VXA8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudEZBUVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5GQVEgUHJpbnQ8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPlByaW50PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJDdXN0b21lckZyb250ZW5kOjpNb2R1bGUjIyNDdXN0b21lckZBUVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8VGl0bGU+PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5DdXN0b21lciBGQVEtUHJpbnQ8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlB1YmxpY0Zyb250ZW5kOjpNb2R1bGUjIyNQdWJsaWNGQVFTZWFyY2giIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlB1YmxpYyBGQVEgc2VhcmNoPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT5TZWFyY2ggRkFRPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RkFRLUFyZWE8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+U2VhcmNoIEZBUTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj48L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249UHVibGljRkFRU2VhcmNoPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxMaW5rT3B0aW9uPjwvTGlua09wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjYwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5DdXN0b21lci5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6UHVibGljRkFRU2VhcmNoIyMjU2VhcmNoTGltaXQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpQdWJsaWM6OlZpZXdGQVFTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw4fSQiPjIwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUVNlYXJjaCMjI1NlYXJjaFBhZ2VTaG93biIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpQdWJsaWM6OlZpZXdGQVFTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSwzfSQiPjQwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6UHVibGljRkFRU2VhcmNoIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpQdWJsaWM6OlZpZXdGQVFTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IkZBUUlEIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPlRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJGQVFJRCI+TnVtYmVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhbmd1YWdlIj5MYWd1YWdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZSI+U3RhdGU8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUVNlYXJjaCMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6Vmlld0ZBUVNlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRG93biI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iPkRvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVwIj5VcDwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHVibGljRnJvbnRlbmQ6Ok1vZHVsZSMjI1B1YmxpY0ZBUVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPFRpdGxlPjwvVGl0bGU+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+UHVibGljIEZBUS1ab29tPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuQ3VzdG9tZXIuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5DdXN0b21lci5EZXRhaWwuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuRkFRWm9vbS5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5GQVEuQ3VzdG9tZXIuRkFRWm9vbS5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlB1YmxpY0Zyb250ZW5kOjpNb2R1bGUjIyNQdWJsaWNGQVEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPFRpdGxlPjwvVGl0bGU+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+UHVibGljIEZBUS1ab29tPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQdWJsaWNGcm9udGVuZDo6TW9kdWxlIyMjUHVibGljRkFRUHJpbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPFRpdGxlPjwvVGl0bGU+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+UHVibGljIEZBUS1QcmludDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRSm91cm5hbCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwPmZhcTwvR3JvdXA+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5mYXE8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8VGl0bGU+RkFRPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEdyb3VwUm8+ZmFxPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZBUSBKb3VybmFsPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPkpvdXJuYWw8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50RkFRSm91cm5hbDwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5GQVE8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pmo8L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz45MzA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUUpvdXJuYWwjIyNTaG93Q29sdW1ucyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdGQVFKb3VybmFsPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUUpvdXJuYWwjIyNKb3VybmFsTGltaXQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdGQVFKb3VybmFsPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsOH0kIj4yMDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcmVmZXJlbmNlc0dyb3VwcyMjI0ZBUUpvdXJuYWxPdmVydmlld1NtYWxsUGFnZVNob3duIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlByZWZlcmVuY2VzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlByZWZlcmVuY2VzR2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29sdW1uIj5PdGhlciBTZXR0aW5nczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiIFRyYW5zbGF0YWJsZT0iMSI+RkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5IiBUcmFuc2xhdGFibGU9IjEiPkZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMTAiPjEwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjE1Ij4xNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIyMCI+MjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjUiPjI1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjMwIj4zMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzNSI+MzU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhU2VsZWN0ZWQiPjI1PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5Vc2VyRkFRSm91cm5hbE92ZXJ2aWV3U21hbGxQYWdlU2hvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjgwMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGl2ZSI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkpvdXJuYWxPdmVydmlldyMjI1NtYWxsIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUUpvdXJuYWxPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+U21hbGw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWVTaG9ydCI+UzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudEZBUUhpc3RvcnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+ZmFxPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPFRpdGxlPkhpc3Rvcnk8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudEZBUURlbGV0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwPmZhcTwvR3JvdXA+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+RkFRIERlbGV0ZTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGU+RGVsZXRlPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OlRpY2tldENvbXBvc2UjIyNJbmNsdWRlSW50ZXJuYWwiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlRpY2tldENvbXBvc2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OlRpY2tldENvbXBvc2UjIyNTaG93RmllbGROYW1lcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlRpY2tldENvbXBvc2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OlRpY2tldENvbXBvc2UjIyNTaG93SW5zZXJ0VGV4dEJ1dHRvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93ICJJbnNlcnQgRkFRIFRleHQiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpUaWNrZXRDb21wb3NlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpUaWNrZXRDb21wb3NlIyMjU2hvd0luc2VydExpbmtCdXR0b24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6VGlja2V0Q29tcG9zZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6VGlja2V0Q29tcG9zZSMjI1Nob3dJbnNlcnRUZXh0QW5kTGlua0J1dHRvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93ICJJbnNlcnQgRkFRIFRleHQgJmFtcDsgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlRpY2tldENvbXBvc2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6Ok11bHRpTGFuZ3VhZ2UiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkRlZmF1bHQ6Okxhbmd1YWdlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz5lbjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxvYWRlcjo6QWdlbnQ6OkNvbW1vbkNTUyMjIzIwMC1GQVEiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpXZWI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5GQVEuQWdlbnQuRGVmYXVsdC5jc3M8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTG9hZGVyOjpBZ2VudDo6Q29tbW9uSlMjIyMyMDAtRkFRIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpXZWI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5GQVEuQWdlbnQuVGlja2V0Q29tcG9zZS5qczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OlZvdGluZyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5FbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkNhY2hlVFRMIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4xNzI4MDA8L1N0cmluZz4gPCEtLSBkZWZhdWx0IDE3Miw4MDAgKDYwICogNjAgKiAyNCAqIDIpIC0tPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkRhc2hib2FyZEJhY2tlbmQjIyMwMzk4LUZBUS1MYXN0Q2hhbmdlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMIiBpbmRpY2F0ZXMgdGhlIGNhY2hlIGV4cGlyYXRpb24gcGVyaW9kIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpEYXNoYm9hcmQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6RGFzaGJvYXJkRkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+TGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5MYXN0Q2hhbmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+Q29udGVudFNtYWxsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+ZmFxPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYWNoZVRUTCI+NjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJEYXNoYm9hcmRCYWNrZW5kIyMjMDM5OS1GQVEtTGFzdENyZWF0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTCIgaW5kaWNhdGVzIHRoZSBjYWNoZSBleHBpcmF0aW9uIHBlcmlvZCBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RGFzaGJvYXJkPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZEZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPkxhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+TGFzdENyZWF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPkNvbnRlbnRTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPmZhcTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVmYXVsdCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2FjaGVUVEwiPjYwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgoKICAgIDxDb25maWdJdGVtIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlIyMjRkFROjpMYW5ndWFnZUxpc3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkdlbmVyaWNJbnRlcmZhY2U8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5MYW5ndWFnZUxpc3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkdlbmVyaWNJbnRlcmZhY2VPcGVyYXRpb25EZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGUjIyNGQVE6OlB1YmxpY0NhdGVnb3J5TGlzdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+R2VuZXJpY0ludGVyZmFjZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlB1YmxpY0NhdGVnb3J5TGlzdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZU9wZXJhdGlvbkRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI0ZBUTo6UHVibGljRkFRR2V0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5HZW5lcmljSW50ZXJmYWNlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHVibGljRkFRR2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlIyMjRkFROjpQdWJsaWNGQVFTZWFyY2giIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkdlbmVyaWNJbnRlcmZhY2U8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5QdWJsaWNGQVFTZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkdlbmVyaWNJbnRlcmZhY2VPcGVyYXRpb25EZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1pvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw0fSQiPjEwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50SFRNTEZpZWxkSGVpZ2h0TWF4IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1pvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw1fSQiPjI1MDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodERlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpGQVE6OlZpZXdab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsNH0kIj4xMDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodE1heCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OkZBUTo6Vmlld1pvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw1fSQiPjI1MDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+Cg==
CnJlcXVpcmUgNTsKcGFja2FnZSBYTUw6OlJTUzo6U2ltcGxlR2VuOwp1c2Ugc3RyaWN0Owp1c2UgQ2FycCAoKTsKcmVxdWlyZSBFeHBvcnRlcjsKdXNlIHZhcnMgcXcoCiAgQEVYUE9SVCAlRVhQT1JUX1RBR1MgQElTQSAkVkVSU0lPTgogICVFbnRpdGllcyAlV2luTGFtZUVudGl0aWVzICVDb21tb25FbnRzICRNSU1FX1R5cGUgCiAgJERURF91cmwgJERURF9wdWJpZCAkTmF0aXZpemVfbmV3bGluZXMgJERXSU0gQEhpZGllcyAkUlNTX29iagogICRTbGVlcHkgJUlzQmxvY2tNYXJrdXAgJE1heWJlSW5kZW50ICRNYXliZU5MICVQZXJpb2RBc1NlY29uZHMKICAkTkFNRVNQQUNFX1NZICRDSFVOS19NSU5VVEVTICVCYWRQb3J0cwogIEBSZXRyeV9kZWxheXMgJFVzZXJBZ2VudFN0cmluZwopOwoKJFZFUlNJT04gPSAnMTEuMTEnOwpCRUdJTiB7ICpERUJVRyA9IHN1YiAoKSB7MH0gdW5sZXNzIGRlZmluZWQgJkRFQlVHOyB9ICAgIyBzZXQgREVCVUcgbGV2ZWwKCkBJU0EgPSBxdyhFeHBvcnRlcik7CgojJERURF91cmwgICB8fD0gJ2h0dHA6Ly9teS5uZXRzY2FwZS5jb20vcHVibGlzaC9mb3JtYXRzL3Jzcy0wLjkxLmR0ZCc7CiMkRFREX3B1YmlkIHx8PSAnLS8vTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMvL0RURCBSU1MgMC45MS8vRU4nOwokTkFNRVNQQUNFX1NZIHx8PSAnaHR0cDovL3B1cmwub3JnL3Jzcy8xLjAvbW9kdWxlcy9zeW5kaWNhdGlvbi8nOwokQ0hVTktfTUlOVVRFUyA9IDEwOwoKJE5hdGl2aXplX25ld2xpbmVzID0gMSB1bmxlc3MgZGVmaW5lZCAkTmF0aXZpemVfbmV3bGluZXM7CiREV0lNID0gMSB1bmxlc3MgZGVmaW5lZCAkRFdJTTsKJFNsZWVweSA9CiAkRU5WeydNQUlMVE8nfSA/IDQgICMgdW5kZXIgY3JvbnRhYgogOiAoJEVOVnsnVEVSTSd9IHx8ICRFTlZ7J1JFUVVFU1RfTUVUSE9EJ30gfHwgJEVOVnsnQ09NU1BFQyd9ICkgPyAwCiAgICAjIGFsbW9zdCBkZWZpbml0ZWx5IG5vdCB1bmRlciBjcm9udGFiCiA6IDQgICB1bmxlc3MgZGVmaW5lZCAkU2xlZXB5OwpAUmV0cnlfZGVsYXlzID0gKDQsIDEwLCAyMCwgNDApOwokTWF5YmVJbmRlbnQgPSAnICAnOwokTWF5YmVOTCA9ICJcbiI7CiMkTWF5YmVOTCA9ICRNYXliZUluZGVudCA9ICcnOyAgIyB0ZXJzZXIsIG1vcmUgZ3JlcC13b3J0aHkKCmZvcmVhY2ggbXkgJHAgKCAgIyBwb3J0cyB3ZSdsbCByZWZ1c2UgdG8gZG8gSFRUUCBvbgpxdzwwIDEgNyA5IDExIDEzIDE1IDE3IDE5IDIwIDIxIDIyIDIzIDI1IDM3IDQyIDQzIDUzIDcwIDc5IDk1IDEwMSAxMDIgMTAzCiAgMTA0IDEwNyAxMDkgMTEwIDExMSAxMTMgMTE1IDExNyAxMTkgMTIzIDEzNSAxMzcgMTM4IDEzOSAxNDMgMzg5IDQ0MyA1MTIKICA1MTMgNTE0IDUxNSA1MTcgNTE4IDUyNiA1MzAgNTMxIDUzMiA1NDAgNTU2IDY2NjcKPikgeyAkQmFkUG9ydHN7JHB9ID0gMSB1bmxlc3MgZGVmaW5lZCAkQmFkUG9ydHN7JHB9OyB9CgokVXNlckFnZW50U3RyaW5nIHx8PSAiWG1sUnNzU2ltcGxlR2VuLyRWRVJTSU9OIjsKCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgpzdWIgX2hpZGUge3B1c2ggQEhpZGllcywgQF8gfTsKX2hpZGUgcXcoaW5pdCBpbXBvcnQpOwoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgoKPWhlYWQxIE5BTUUKClhNTDo6UlNTOjpTaW1wbGVHZW4gLSBmb3Igd3JpdGluZyBSU1MgZmlsZXMKCj1oZWFkMSBTWU5PUFNJUwoKICAjIEEgY29tcGxldGUgc2NyZWVuLXNjcmFwZXIgYW5kIFJTUyBnZW5lcmF0b3IgaGVyZToKICAKICB1c2Ugc3RyaWN0OwogIHVzZSBYTUw6OlJTUzo6U2ltcGxlR2VuOwogIG15ICR1cmwgPSBxPGh0dHA6Ly93d3cuZXhpbGUucnUvPjsKICAKICByc3NfbmV3KCAkdXJsLCAiZVhpbGUiLCAiTW9zY293LWJhc2VkIEFsdGVybmF0aXZlIE5ld3NwYXBlciIgKTsKICByc3NfbGFuZ3VhZ2UoICdlbicgKTsKICByc3Nfd2VibWFzdGVyKCAneHh4eHhAeW91cmRvbWFpbi5jb20nICk7CiAgcnNzX3R3aWNlX2RhaWx5KCk7CiAgCiAgZ2V0X3VybCggJHVybCApOwogIAogIHdoaWxlKAogICBtezxoND5ccyo8YSBocmVmPScvKC4qPyknLio/PiguKj8pPC9hPlxzKjwvaDQ+XHMqPHAuKj8+KC4qPyk8YSBocmVmPScvfXNnCiAgKSB7CiAgICByc3NfaXRlbSgiJHVybCQxIiwgJDIsICQzKTsKICB9CiAgCiAgZGllICJObyBpdGVtcyBpbiB0aGlzIGNvbnRlbnQ/ISB7e1xuJF9cbn19XG5BYm9ydGluZyIKICAgdW5sZXNzIHJzc19pdGVtX2NvdW50KCk7CiAgCiAgcnNzX3NhdmUoICdleGlsZS5yc3MnLCA0NSApOwogIGV4aXQ7Cgo9aGVhZDEgREVTQ1JJUFRJT04KClRoaXMgbW9kdWxlIGlzIGZvciB3cml0aW5nIFJTUyBmaWxlcywgc2ltcGx5LiBJdCB0cmFuc3BhcmVudGx5IGhhbmRsZXMKYWxsIHRoZSB1bnBsZWFzYW50IGRldGFpbHMgb2YgUlNTLCBsaWtlIHByb3BlciBYTUwgZXNjYXBpbmcsIGFuZCBhbHNvIGhhcwphIGdvb2QgbnVtYmVyIG9mIERvLVdoYXQtSS1NZWFuIGZlYXR1cmVzLCBsaWtlIG5vdCBjaGFuZ2luZyB0aGUgbW9kdGltZQpvbiBhIHdyaXR0ZW4tb3V0IFJTUyBmaWxlIGlmIHRoZSBmaWxlIGNvbnRlbnQgaGFzbid0IGNoYW5nZWQsIGFuZCBsaWtlCmF1dG9tYXRpY2FsbHkgcmVtb3ZpbmcgYW55IEhUTUwgdGFncyBmcm9tIGNvbnRlbnQgeW91IG1pZ2h0IHBhc3MgaW4uCgpUaGlzIG1vZHVsZSBpc24ndCBtZWFudCB0byBoYXZlIHRoZSBmdWxsIGV4cHJlc3NpdmUgcG93ZXIgb2YgUlNTOwppbnN0ZWFkLCBpdCBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9zdCBjb21tb25seSBuZWVkZWQgYnkKUlNTLXdyaXRpbmcgcHJvZ3JhbXMuCgo9aGVhZDEgSU5URVJGQUNFCgpUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3Igc3RhcnRpbmcgYW4gUlNTIGZlZWQgaW4KbWVtb3J5LCBwdXR0aW5nIGl0ZW1zIGludG8gaXQsIGFuZCBzYXZpbmcgaXQgdG8gZGlzayAob3IgcHJpbnRpbmcgaXQgYXMKYSBzdHJpbmcsIGFzIGluIGEgQ0dJKS4gSWYgeW91IHByZWZlciBhbiBvYmplY3Qtb3JpZW50ZWQgaW50ZXJmYWNlCihvYnZpb3VzbHkgbW9yZSB1c2VmdWwgaWYgeW91J3JlIGNvbXBvc2luZyBzZXZlcmFsIGZlZWRzIGF0IG9uY2UpLCB0aGVuCnlvdSBjYW4gdXNlIHRoaXMgbW9kdWxlIGFzIGEgY2xhc3Mgd2hvc2UgbWV0aG9kcyBhcmUgdGhlIHNhbWUgYXMgdGhlCmZ1bmN0aW9uIG5hbWVzIG1pbnVzICJyc3NfIi4gRXhjZXB0IGZvciB0aGlzIGRldGFpbCBvZiB0aGUgbmFtaW5nLCB0aGUKZnVuY3Rpb25zIGFuZCBtZXRob2RzIGFyZSB0aGUgc2FtZSwgYmVoYXZlIHRoZSBzYW1lLCBhbmQgdGFrZSB0aGUgc2FtZQphcmd1bWVudHMuCgpUaGF0IGlzLCB0aGlzIGZ1bmN0aW9uYWwgY29kZToKCiAgdXNlIFhNTDo6UlNTOjpTaW1wbGVHZW47CiAgbXkgJHVybCA9IHE8aHR0cDovL3d3dy5leGlsZS5ydS8+OwogIAogIHJzc19uZXcoICR1cmwsICJlWGlsZSIgKTsKICByc3NfbGFuZ3VhZ2UoICdlbicgKTsKICBnZXRfdXJsKCAkdXJsICk7CiAgLi4uCgpkb2VzIHRoZSBzYW1lIHdvcmsgYXMgdGhpcyBPTyBjb2RlOgoKICB1c2UgWE1MOjpSU1M6OlNpbXBsZUdlbiAoKTsKICBteSAkdXJsID0gcTxodHRwOi8vd3d3LmV4aWxlLnJ1Lz47CiAgbXkgJHJzcyA9IFhNTDo6UlNTOjpTaW1wbGVHZW4tPm5ldyggJHVybCwgImVYaWxlIik7CiAgJHJzcy0+bGFuZ3VhZ2UoICdlbicgKTsKICAkcnNzLT5nZXRfdXJsKCAkdXJsICk7CiAgLi4uCgooTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBDPGdldF91cmw+IGRvZXNuJ3QgaGF2ZSBhIGxlYWRpbmcgInJzc18iLApzbyBpdHMgbWV0aG9kIG5hbWUgaXMgdGhlIHNhbWUgYXMgaXRzIGZ1bmN0aW9uIG5hbWUuICBJdCdzIHRoZQpvbmUgZXhjZXB0aW9uLikKCklmIHRoaXMgdGFsayBvZiBvYmplY3RzIHB1enpsZXMgeW91LCBzZWUgCkw8SFRNTDo6VHJlZTo6QWJvdXRPYmplY3RzPiBpbiB0aGUgQzxIVE1MLVRyZWU+IGRpc3QsIGFuZC9vciBzZWUKdGhlIGNoYXB0ZXIgIlVzZXIncyBWaWV3IG9mIE9iamVjdC1PcmllbnRlZCBNb2R1bGVzIgppbiBteSBib29rIEk8UGVybCAmIExXUD4gKEw8aHR0cDovL3d3dy5hbWF6b24uY29tL2V4ZWMvb2JpZG9zL0FTSU4vMDU5NjAwMTc4OT4pLgooVGhlIGJvb2sgaXMgYWxzbyB1c2VmdWwgYXMgYW4gZXh0ZW5kZWQgZGlzY3Vzc2lvbiBvZiBzY3JlZW4tc2NyYXBpbmcuKQoKTm90ZTogaW4gdGhlIGNvZGUgYmVsb3csIEkgdXNlIHRoZSB3b3JkICJhY2Nlc3NvciIgYSBsb3QsIHRvIHJlZmVyCnRvIGEgZnVuY3Rpb24gb3IgbWV0aG9kIHRoYXQgeW91IGNhbiBjYWxsIHR3byBwb3NzaWJsZSB3YXlzOgoxKSBsaWtlIEM8Zm9vKEk8dmFsPik+IHRvIHNldCB0aGUgImZvbyIgYXR0cmlidXRlIHRvIHRoZSB2YWx1ZSBJPHZhbD4sCm9yIDIpIGxpa2UgQzxmb28oKT4gdG8gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgImZvbyIgYXR0cmlidXRlLgoKCj1oZWFkMSBGVU5DVElPTlMKCj1vdmVyCgo9aXRlbSBDPHJzc19uZXcoIEk8dXJsPiApOz4KCj1pdGVtIEM8cnNzX25ldyggSTx1cmwsIHRpdGxlPiApOz4KCj1pdGVtIEM8cnNzX25ldyggSTx1cmwsIHRpdGxlLCBkZXNjcmlwdGlvbj4gKTs+Cgo9aXRlbSBJPG9yOj4gQzw8ICRyc3MgPSBYTUw6OlJTUzo6U2ltcGxlR2VuLT5uZXcoLi4uKTsgPj4KClRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBSU1MgZmVlZCBpbiBtZW1vcnkuICBUaGlzIHNob3VsZCBiZSB0aGUgZmlyc3QKQzxyc3NfSTx3aGF0ZXZlcj4+IGZ1bmN0aW9uIHlvdSBjYWxsIGluIHlvdXIgcHJvZ3JhbS4gIElmIHlvdSBjYWxsIGl0CmFnYWluLCBpdCBlcmFzZXMgdGhlIGN1cnJlbnQgb2JqZWN0IChpZiBhbnkpIGFuZCBzZXRzIHVwIGEgbmV3IG9uZSBhY2NvcmRpbmcKdG8gd2hhdGV2ZXIgcGFyYW1ldGVycyB5b3UgcGFzcy4KClRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgZnVsbCBVUkwsIHRoZSB0aXRsZSwgYW5kIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKc2l0ZSAob3IgcGFnZSkgdGhhdCB5b3UncmUgcHJvdmlkaW5nIGFuIFJTUyBmZWVkIG9mLiBUaGUgZGVzY3JpcHRpb24gaXMKb3B0aW9uYWwsIGJ1dCB5b3Ugc2hvdWxkIHByb3ZpZGUgYXQgbGVhc3QgYSBVUkwgYW5kIHRpdGxlLgoKRXhhbXBsZXM6CgogIHJzc19uZXcoICR1cmwsICJlWGlsZSIsICJNb3Njb3ctYmFzZWQgQWx0ZXJuYXRpdmUgTmV3c3BhcGVyIiApOwoKICByc3NfbmV3KCAnaHR0cDovL3d3dy5teWJhem91a2kuY29tL25ld3MvJywgIkJhem91a2kgTmV3cyEiICk7CgooQXMgYSBtZXRob2QsIFhNTDo6UlNTOjpTaW1wbGVHZW4tPm5ldyBzaW1wbHkgcmV0dXJucyBhIG5ldwpSU1Mgb2JqZWN0LikKCj1jdXQKCnN1YiBuZXcgewogIG15ICRjbGFzcyA9IHNoaWZ0OwogICRjbGFzcyA9IHJlZigkY2xhc3MpIHx8ICRjbGFzczsKICBteSAkbmV3ID0gYmxlc3MgeyAnaXRlbXMnID0+IFtdIH0sICRjbGFzczsKICAkbmV3LT5pbml0KCk7CgogIEBfIGFuZCAkbmV3LT51cmwoc2hpZnQpOwogIEBfIGFuZCAkbmV3LT50aXRsZShzaGlmdCk7CiAgQF8gYW5kICRuZXctPmRlc2NyaXB0aW9uKHNoaWZ0KTsKCiAgJG5ldy0+aXRlbV9saW1pdCggMCApOwogICRuZXctPnJldGVudGlvbiggMzIgKiAyNCAqIDYwICogNjAgKTsgIyAzMiBkYXlzCgojICAoLWUgInJzcy5jc3MiKSA/ICRuZXctPmNzcygiLi9yc3MuY3NzIikKIyAgICA6ICRuZXctPmNzcygiaHR0cDovL3d3dy5pbnRlcmdsYWNpYWwuY29tL3Jzcy9yc3MuY3NzIik7CgojICAoLWUgImFib3V0X3Jzcy5odG1sIikgPyAkbmV3LT5kb2NzKCIuL2Fib3V0X3Jzcy5odG1sIikKIyAgICA6ICRuZXctPmRvY3MoImh0dHA6Ly93d3cuaW50ZXJnbGFjaWFsLmNvbS9yc3MvYWJvdXQuaHRtbCIpOwoKICByZXR1cm4gJG5ldzsKfQoKc3ViIGluaXQgeyByZXR1cm47IH0gICAjIG92ZXJyaWRlIGluIHN1YmNsYXNzIGFzIG5lY2Vzc2FyeQoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCl9fUEFDS0FHRV9fLT5fYWNjZXNzb3JpemUoCiBxdygKICB0aXRsZSBkZXNjcmlwdGlvbiB1cmwgbGFuZ3VhZ2UgY3NzIHhzbCB3ZWJNYXN0ZXIgZG9jcwogIGl0ZW1fbGltaXQgdHRsCiByZXRlbnRpb24KICBhbGxvd19kdXBsaWNhdGVzCiAgaW1hZ2VfdGl0bGUgaW1hZ2VfbGluayBpbWFnZV91cmwgaW1hZ2Vfd2lkdGggaW1hZ2VfaGVpZ2h0IGltYWdlX2Rlc2NyaXB0aW9uIAogKQopOwoKPWl0ZW0gdGhlIGFjY2Vzc29yIEM8cnNzX2xhbmd1YWdlKEk8bGFuZ3VhZ2VfdGFnPik+CgpUaGlzIGRlY2xhcmVzIHdoYXQgbGFuZ3VhZ2UgdGhpcyBSU1MgZmVlZCBpcyBpbi4gIEl0IG11c3QgYmUKYW4gUkZDMzA2Ni1zdHlsZSBsYW5ndWFnZSB0YWdzIGxpa2UgImVuIiwgb3IgImVuLVVTIiwgb3IgInpoLVRXIi4KKFNlZSBJPEkxOE46OkxhbmdUYWdzOjpMaXN0PiBmb3IgYSBsaXN0LikKSWYgeW91IGRvbid0IHNldCB0aGUgZmVlZCdzIGxhbmd1YWdlLCBpdCBkZWZhdWx0cyB0byAiZW4iLCBmb3IgZ2VuZXJpYyBFbmdsaXNoLgoKSWYgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRob3V0IGEgcGFyYW1ldGVyLCBpdCByZXR1cm5zCnRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBSU1MgZmVlZCdzIGxhbmd1YWdlLiAgRm9yIGV4YW1wbGU6CgogIHByaW50ICJJJ20gbWFraW5nIGFuIFJTUyBmZWVkIGZvciAiLCByc3NfbGFuZ3VhZ2UoKSwgIiFcbiI7CgpUaGUgc2FtZSBpcyB0cnVlIGZvciBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IEkgbGFiZWwgYXMgImFjY2Vzc29ycyIuCgoKPWl0ZW0gdGhlIGFjY2Vzc29yIEM8cnNzX2l0ZW1fbGltaXQoSTxudW1iZXI+KT4KClRoaXMgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCB0aGlzIGZlZWQgd2lsbCBzaG93LgoKVGhlIGRlZmF1bHQgdmFsdWUgaXMgMCwgbWVhbmluZyB0aGF0IHRoZXJlIGlzIG5vIG1heGltdW0uCgpJZiB5b3Ugc2V0IGl0IHRvIGEgcG9zaXRpdmUgbnVtYmVyIEk8Tj4sIHRoZW4gdGhlIGZlZWQgd2lsbCBzaG93IG9ubHkKdGhlIGZpcnN0IEk8Tj4gaXRlbXMgdGhhdCB5b3UgZGVjbGFyZSB3aXRoIEM8cnNzX2l0ZW0+LiAoT3IsIGlmIHlvdSBzZXQKQzxyc3NfaGlzdG9yeV9maWxlPiwgdGhlbiB0aGUgbmV3ZXN0IEk8Tj4gaXRlbXMgdGhhdCB5b3UgZGVjbGFyZQp3aXRoIEM8cnNzX2l0ZW0+LikKCklmIHlvdSBzZXQgaXQgdG8gYSBuZWdhdGl2ZSBudW1iZXIgSTwtTj4sIHRoZW4gdGhlIGZlZWQgd2lsbCBzaG93IG9ubHkKdGhlIGxhc3QgSTxOPiBpdGVtcyB0aGF0IHlvdSBkZWNsYXJlIHdpdGggQzxyc3NfaXRlbT4uIChPciwgaWYgeW91IHNldApDPHJzc19oaXN0b3J5X2ZpbGU+LCB0aGVuIHRoZSBvbGRlc3QgSTxOPiBpdGVtcyB5b3UgZGVjbGFyZSB3aXRoIEM8cnNzX2l0ZW0+LAp3aGljaCBpcyB1bmxpa2VseSB0byBiZSB1c2VmdWwhKQoKCj1pdGVtIHRoZSBhY2Nlc3NvciBDPHJzc193ZWJNYXN0ZXIoSTxlbWFpbC1hZGRyZXNzPik+CgpUaGlzIGRlY2xhcmVzIHdoYXQgZW1haWwgYWRkcmVzcyB5b3UsIHRoZSBSU1MgZ2VuZXJhdG9yIG1hbmFnZXIsIGNhbiBiZQpyZWFjaGVkIGF0LiAgRXhhbXBsZToKCiAgcnNzX3dlYk1hc3RlciggJ3NidXJrZUBiYXpvdWtpLW5ld3MuaW50JyApOwoKPWN1dAoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgo9aXRlbSBDPHJzc19oaXN0b3J5X2ZpbGUoIEk8ZmlsZW5hbWU+ICk+CgpUaGlzIGRlY2xhcmVzIHRoYXQgeW91IHdhbnQgdGhpcyBSU1MgZmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoYXQgaXRlbXMgYXJlCm5ldywgYW5kIHRvIGxpc3QgdGhlbSBmaXJzdCB3aGVuIHRoZSBSU1MgaXMgZW1pdHRlZC4gIFRvIGRvIHRoaXMsIHRoZSBSU1MKZ2VuZXJhdG9yIGhhcyB0byBzdG9yZSBpbmZvcm1hdGlvbiBpbiBhIGZpbGUsIHdoZXJlIGl0IHRyYWNrcyBpdHMgImhpc3RvcnkiLAppLmUuLCB3aGVuIHdhcyB0aGUgZmlyc3QgdGltZSBpdCBzYXcgZ2l2ZW4gVVJMcywgYW5kIHRoZSBtb3N0IHJlY2VudCB0aW1lCml0IHNhdyBnaXZlbiBVUkxzLgoKVHlwaWNhbCB1c2FnZSBpczoKCiAgcnNzX2hpc3RvcnlfZmlsZSggJ3RoaXNyc3NmZWVkLmRhdCcgKTsKCllvdSBzaG91bGQgY2FsbCBDPHJzc19oaXN0b3J5X2ZpbGU+IEk8YmVmb3JlPiB5b3UgbWFrZSBhbnkgY2FsbHMgdG8KQzxyc3NfaXRlbT4uCgpUaGUgaGlzdG9yeS1maWxlIGZlYXR1cmUgaXMgbWVhbnQgZm9yIGNhc2VzIHdoZXJlIHlvdXIgUlNTLWdlbmVyYXRvcgpwcm9ncmFtIGNhbGxzIEM8cnNzX2l0ZW0+IG9uIEk8ZXZlcnk+IGxpbmsgaXQgc2VlcywgYnV0IG9ubHkgd2FudHMgdGhlCkk8bmV3PiBsaW5rcyB0byBhcHBlYXIgaW4gdGhlIFJTUyBvdXRwdXQuIChUaGlzIGNhbiBiZSBhIGdvb2QgYXBwcm9hY2gKaWYgeW91J3JlIG1ha2luZyBhbiBSU1MgZmVlZCBvZiBhIHBhZ2UgbGlrZQpDPGh0dHA6Ly93d3cuZ3VhcmRpYW4uY28udWsvPiB3aGVyZSB0aGVyZSdzIHNvbWUgbmV3IGxpbmtzICh0byB0aGUKcmVjZW50bHkgYWRkZWQgc3RvcmllcyksIGJ1dCBhbHNvIGxpbmtzIHRvIHNvbWUgZGF5cy1vbGQgc3RvcmllcywgYW5kCkk8YWxzbz4gbGlua3MgdG8gc29tZSBhbHdheXMtdGhlcmUgdGhpbmdzIGxpa2UgIkFyY2hpdmUgU2VhcmNoIiBhbmQKIkNvbnRhY3QgVXMiIHBhZ2VzLgoKT25jZSB5b3UgY2FsbCByc3NfaGlzdG9yeV9maWxlLCB0aGUgc3BlY2lmaWVkIGZpbGUgaXMgcmVhZCBpbi4gIFRoZQppbi1tZW1vcnkgaGlzdG9yeSAoc3RvcmVkIGluIHRoZSBSU1Mgb2JqZWN0KSBpcyB1cGRhdGVkIGFzIHlvdQpjYWxsIEM8cnNzX2l0ZW0+LiAgQnV0IHRoZSBmaWxlIGlzbid0IHVwZGF0ZWQgdW50aWwgeW91IGNhbGwgcnNzX3NhdmUuCgooQSBkby13aGF0LUktbWVhbiBzaWRlIGVmZmVjdCBvZiBjYWxsaW5nIEM8cnNzX2hpc3RvcnlfZmlsZT4gaXMgdGhhdCBpdApzZXRzIHJzc19pdGVtX2xpbWl0IHRvIDI1IGlmIGl0IGlzIGN1cnJlbnRseSAwLikKCihJbmNpZGVudGFsbHksIGlmIHlvdSdyZSB1c2luZyByc3NfaGlzdG9yeV9maWxlIGFzIHBhcnQgb2YgYSBDR0kgdGhhdAplbWl0cyBSU1MgZGF0YSwgaW5zdGVhZCBvZiBhIHByb2dyYW0gdGhhdCBqdXN0IHNhdmVzIHRvIGFuIFJTUyBmaWxlLAp0aGVuIHRoaW5ncyB3aWxsIGdldCBjb21wbGljYXRlZC4gWW91J2xsIG5lZWQgdG8gY2FsbCBhbiBpbnRlcm5hbCBtZXRob2QKdG8gZXhwbGljaXRseSBjb21taXQgdGhlIGhpc3RvcnkgZmlsZSB0byBkaXNrLCBhbmQgeW91J2xsIG5lZWQgYQpzZW1hcGhvcmUgZmlsZSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMuIEVtYWlsIG1lIGZvciBmdWxsIGluZm8uKQoKPWN1dAoKc3ViIGhpc3RvcnlfZmlsZSB7CiAgbXkgJHNlbGYgPSBzaGlmdDsKICByZXR1cm4gJHNlbGYtPnsnaGlzdG9yeV9maWxlJ30gdW5sZXNzIEBfOyAgICMgcmVhZCBhY2Nlc3Npb24KICBteSAkZmlsZSA9ICRfWzBdOwogIAogIHVubGVzcyhkZWZpbmVkICRmaWxlICBhbmQgIGxlbmd0aCAkZmlsZSAgYW5kICAkZmlsZSA9fiBtL1xTLykgewogICAgREVCVUcgYW5kIHByaW50ICJLaWxsaW5nICRzZWxmICdzIG1lbW9yeS1oaXN0b3J5LlxuIjsKICAgICAjIEkgZG9uJ3Qga25vdyBpZiB0aGlzJ2QgYmUgYWN0dWFsbHkgdXNlZnVsIGZvciBhbnl0aGluZyB0aG8uCiAgICBkZWxldGUgJHNlbGYtPnsnaGlzdG9yeV9maWxlJ307CiAgICBkZWxldGUgJHNlbGYtPnsnX2ZpcnN0X3NlZW4nIH07CiAgICBkZWxldGUgJHNlbGYtPnsnX2xhc3Rfc2VlbicgIH07CiAgICByZXR1cm4gdW5kZWY7CiAgfQogIAogIERFQlVHIGFuZCBwcmludCAiQ29uc2lkZXJpbmcgJGZpbGUgYXMgJHNlbGYgJ3MgaGlzdG9yeS5cbiI7CiAgJHNlbGYtPnsnaGlzdG9yeV9maWxlJ30gPSAkZmlsZTsKICAkc2VsZi0+X3JlYWRfaGlzdG9yeV9maWxlOwogIAogICRzZWxmLT5pdGVtX2xpbWl0KCAyNSApIGlmICREV0lNIGFuZCAhJHNlbGYtPml0ZW1fbGltaXQoKTsKCiAgcmV0dXJuICRmaWxlOwp9CgojLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCgo9aXRlbSBDPHJzc19pdGVtKCBJPHVybD4gKTs+Cgo9aXRlbSBDPHJzc19pdGVtKCBJPHVybCwgdGl0bGU+ICk7PgoKPWl0ZW0gQzxyc3NfaXRlbSggSTx1cmwsIHRpdGxlLCBkZXNjcmlwdGlvbj4gKTs+CgpUaGlzIGFkZHMgYSBuZXcgaXRlbSB0byB0aGUgY3VycmVudCBmZWVkLiBZb3Ugd2lsbCBuZWVkIHRvIHNwZWNpZnkgdGhlClVSTCB0byBhZGQgKGFuZCBpdCBzaG91bGQgYmUgYSB2YWxpZC1sb29raW5nIFVSTCwgc3RhcnRpbmcgd2l0aAoiSTxzb21ldGhpbmc6PiIsIGFuZCBub3QgY29udGFpbmluZyBhbnkgc3BhY2VzKS4gWW91IG1heSBhbHNvIHNwZWNpZnkKdGhlIHRpdGxlLCBidXQgaXQncyBvcHRpb25hbC4gQW5kIGZpbmFsbHksIHlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEKZGVzY3JpcHRpb24uIChZb3UgY2FuIHJlbWVtYmVyIHRoaXMgYmVjYXVzZSBpdCBzdGFydHMgd2l0aCB0aGUgZXNzZW50aWFsCml0ZW0gZmlyc3QsIGFuZCBwcm9ncmVzc2VzIHRvd2FyZCB0aGUgbW9zdCBvcHRpb25hbC4pCgpMZWFkaW5nIGFuZCB0YWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZCBmcm9tIHdoaWNoZXZlciBvZiBJPHVybCwKdGl0bGUsPiBhbmQgSTxkZXNjcmlwdGlvbj4gYXJlIGRlZmluZWQgdmFsdWVzLCBhbmQgSFRNTCBpcyBwYXJzZWQgb3V0LgoKQSBzaW1wbGUgdXNhZ2U6CgogIHJzc19pdGVtKAogICAgImh0dHA6Ly93d3cuaGFycGVycy5vcmcvTW9zdFJlY2VudFdSLmh0bWwiLAogICAgIkhhcnBlcidzIE1hZ2F6aW5lJ3MgV2Vla2x5IFJldmlldyIKICApOwoKQWx0aG91Z2ggaW4gcHJhY3RpY2UsIGEgdHlwaWNhbCBjYWxsIHdvbid0IGhhdmUgc3RyaW5nIGNvbnN0YW50cywgYnV0CndpbGwgaW5zdGVhZCBiZSBsaWtlIHRoZSBleGFtcGxlIGluIHRoZSBMPFN5bm9wc2lzIHNlY3Rpb3N8LyJTWU5PUFNJUyI+LApuYW1lbHk6CgogIHJzc19pdGVtKCIkdXJsJDEiLCAkMiwgJDMpOwoKSW5jaWRlbnRhbGx5LCBhcyBhIGRvLXdoYXQtSS1tZWFuIGZlYXR1cmUsIGlmIHRoZSBmaXJzdCBwYXJhbWV0ZXIKZG9lc24ndCBsb29rIGxpa2UgYSBVUkwgYnV0IG9uZSBvZiB0aGUgb3RoZXJzIGRvZXMsIHRoZW4gdGhpcyBlcnJvciBpcwpzaWxlbnRseSBmb3JnaXZlbi4gIFRoaXMgaXMgc28geW91IGNhbiBvY2Nhc2lvbmFsbHkgc2xpcCB1cCBhbmQgZm9yZ2V0CnRoZSBvcmRlciBvZiB0aGUgcGFyYW1ldGVycy4KCihJbiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlcmUgeW91IEk8bmVlZD4gdG8gYXZvaWQgdGhlIEhUTUwtcmVtb3ZhbApmZWF0dXJlcywgeW91IGNhbiBkbyB0aGlzIGJ5IHBhc3Npbmcgc2NhbGFyLXJlZmVyZW5jZXMgaW5zdGVhZCBvZgpub3JtYWwgc3RyaW5ncywgbGlrZSBzbzogQzxyc3NfaXRlbSgkdXJsLCAkdGl0bGUsIFwkbm90X3RvX2JlX2VzY2FwZWQpPi4pCgo9Y3V0CgpzdWIgaXRlbSB7ICMgQWRkIGFuIGl0ZW06ICAodXJsLCB0aXRsZSwgZGVzY3JpcHRpb24pCiAgbXkoJHNlbGYsIEBwYXJhbXMpID0gQF87CiAgaWYoIGdyZXAgZGVmaW5lZCgkXykgJiYgbGVuZ3RoKCRfKSwgQHBhcmFtcyApIHsKICAgIHB1c2ggQHskc2VsZi0+eydpdGVtcyd9fSwKICAgICAgWwogICAgICAgICRzZWxmLT5fcHJvY2Vzc19pdGVtX3BhcmFtcyhAcGFyYW1zKSAgIyBEV0lNIHRoaW5ncyBoYXBwZW4gaGVyZQogICAgICBdCiAgICA7CiAgICBERUJVRyBhbmQgcHJpbnQgIkFkZGluZyBpdGVtICIsCiAgICAgam9pbigifCIsIEB7ICRzZWxmLT57J2l0ZW1zJ31bLTFdIH0pLCAiXG4iOwoKICAgICMgVXBkYXRlIGhpc3RvcnkuLi4KICAgIGlmKCAkc2VsZi0+eydfZmlyc3Rfc2Vlbid9ICkgewogICAgICBteSAkdXJsID0gJHNlbGYtPnsnaXRlbXMnfVstMV1bMF07CiAgICAgIG15ICRub3cgPQogICAgICAgICAgICAkc2VsZi0+eydfdmlyZ2luX2l0ZW1fdGltZXN0YW1wJ30KICAgICAgICA/IC0tJHNlbGYtPnsnX3Zpcmdpbl9pdGVtX3RpbWVzdGFtcCd9CiAgICAgICAgOiB0aW1lKCkKICAgICAgOwogICAgICAkc2VsZi0+eydfZmlyc3Rfc2Vlbid9eyR1cmx9IHx8PSAkbm93OwogICAgICAkc2VsZi0+eydfbGFzdF9zZWVuJyB9eyR1cmx9ICAgPSAkbm93OwogICAgfQoKICB9IGVsc2UgewogICAgREVCVUcgYW5kIHByaW50ICJOb3QgYWRkaW5nIGl0ZW0gLS0gZW1wdHkgcGFyYW1zXG4iOwogIH0KICByZXR1cm4gJHNlbGY7Cn0KCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKPWl0ZW0gQzxyc3NfaXRlbV9jb3VudCgpPgoKVGhpcyByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgeW91J3ZlIGRlY2xhcmVkLiAgSSBhbnRpY2lwYXRlIHRoYXQgaXRzCm1haW4gdXNhZ2Ugd2lsbCBiZSBzb21ldGhpbmcgbGlrZToKCiAgZGllICJXaGF0LCBubyBvYmplY3RzIGZvdW5kIGF0ICR1cmwgPyEiCiAgIHVubGVzcyByc3NfaXRlbV9jb3VudCgpOwoKb3IsIG1heWJlLi4uCgogIGV4aXQgdW5sZXNzIHJzc19pdGVtX2NvdW50KCk7CgouLi5kZXBlbmRpbmcgb24gaG93L3doZXRoZXIgeW91J2Qgd2FudCB0byByZWFjdCB0byBjYXNlcyB3aGVyZSB5b3UgZG9uJ3QKc2VlIGFueXRoaW5nIHRvIHB1dCBpbnRvIGFuIFJTUyBmZWVkLgoKTm90ZSB0aGF0IHRoZSBwYXJlbnMgYXJlIG9wdGlvbmFsLCBzaW5jZSB0aGlzIGNvbW1hbmQgdGFrZXMgbm8gb3B0aW9ucwooanVzdCBsaWtlIFBlcmwncyBDPHRpbWUoKT4gZnVuY3Rpb24pLgoKPWN1dAoKc3ViIGl0ZW1fY291bnQgIHsgc2NhbGFyIEB7ICRfWzBdLT57J2l0ZW1zJ30gfTsgfQpzdWIgaXRlbXNfY291bnQgeyBzaGlmdC0+aXRlbV9jb3VudCB9ICMgaGFybWxlc3MgYWxpYXMKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpzdWIgX3NvcnRfaXRlbXNfbmV3ZXN0X2ZpcnN0IHsKICBteSAkc2VsZiA9IHNoaWZ0OwogIG15ICRzZWVuID0gJHNlbGYtPnsnX2ZpcnN0X3NlZW4nfTsKCiAgJHNlZW4gb3IgQ2FycDo6Y29uZmVzcygKICAgIkNhbid0IHNvcnQgaXRlbXMgYnkgYWdlIHVubGVzcyB5b3UgZGVmaW5lIGEgaGlzdG9yeSBmaWxlISIpOwoKICBteSAkaXRlbXMgPSAkc2VsZi0+eydpdGVtcyd9IHx8IGRpZSAiTk8gSVRFTVMhPyI7CgogIGlmKCBERUJVRyApIHsKICAgIHByaW50ICJcblNvcnRpbmcgIiwgc2NhbGFyKEAkaXRlbXMpLCAiIGl0ZW1zLCBuZXdlc3QgZmlyc3QuICBBZ2UgZHVtcDpcbiI7CiAgICBmb3JlYWNoIG15ICRpIChAJGl0ZW1zKSB7CiAgICAgIGlmKCAkaS0+WzBdICkgewogICAgICAgIHByaW50ZiAiICAlcyA6ICVzICglcylcbiIsCiAgICAgICAgICRpLT5bMF0sICRzZWVuLT57JGktPlswXX0gfHwgMCwgc2NhbGFyIGxvY2FsdGltZSgKICAgICAgICAgICAgICAgICAgJHNlZW4tPnskaS0+WzBdfSB8fCAwKQogICAgICAgIDsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcmludCAiIE5PVVJMXG4iOwogICAgICB9CiAgICB9CiAgICBwcmludCAiIChubyBpdGVtcylcbiIgdW5sZXNzIEAkaXRlbXM7CiAgICBwcmludCAiKEVuZCBoaXN0b3J5IGR1bXAuKVxuXG4iOwogIH0KCiAgQCRpdGVtcyA9CiAgICBzb3J0IHsgKCRzZWVuLT57JGItPlswXSB8fCcnfSB8fDApCiAgICAgICA8PT4gKCRzZWVuLT57JGEtPlswXSB8fCcnfSB8fDApCiAgICAgICBvciAkYS0+WzBdIGNtcCAkYi0+WzBdICAjIFNvIGl0J3MgYXQgbGVhc3QgcHJlZGljdGFibGUKICAgIH0KICAgICAgQCRpdGVtczsKICByZXR1cm47Cn0KCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKPWl0ZW0gQzxyc3NfaW1hZ2UoIEk8dXJsLCBoLCB3PiApOz4KClRoaXMgZGVjbGFyZXMgdGhhdCB5b3Ugd2FudCB0byBkZWNsYXJlIGEgcGFydGljdWxhciBpbWFnZSBhcyB0aGUgbG9nbyBmb3IKdGhpcyBmZWVkLiAgTW9zdCBmZWVkcyBkb24ndCBoYXZlIHN1Y2ggYSB0aGluZywgYW5kIG1vc3QgcmVhZGVycyBqdXN0IGlnbm9yZQppdCBhbnl3YXksIGJ1dCBpZiB5b3Ugd2FudCB0byBkZWNsYXJlIGl0LCB0aGlzIGZ1bmN0aW9uIGlzIGhvdy4gIFRoZQp0aHJlZSBwYXJhbWV0ZXJzLCB3aGljaCBhcmUgYWxsIHJlcXVpcmVkLCBhcmU6IHRoZSBpbWFnZSdzIFVSTCwgaXRzCmhlaWdodCBpbiBwaXhlbHMsIGFuZCBpdHMgd2lkdGggaW4gcGl4ZWxzLgpBY2NvcmRpbmcgdG8gdmFyaW91cyBzcGVjcywgdGhlIHdpZHRoIHNob3VsZC9tdXN0IGJlIGJldHdlZW4gMSBhbmQgMTQ0LAphbiB0aGUgaGVpZ2h0IHNob3VsZC9tdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwLgoKQSB0eXBpY2FsIHVzYWdlOgoKICByc3NfaW1hZ2UoImh0dHA6Ly9pbnRlcmdsYWNpYWwuY29tL3Jzcy93ZWVibC5naWYiLCAxMDYsIDE0MCk7CgpCZSBjYXJlZnVsIG5vdCB0byBtaXggdXAgdGhlIGhlaWdodCBhbmQgd2lkdGguCgo9Y3V0CgoKc3ViIGltYWdlIHsKICBteSgkc2VsZiwgJHVybCwgJGgsICR3KSA9IHNwbGljZShAXywwLDQpOwogIENhcnA6OmNyb2FrICJVc2FnZTogXCRyc3MtPmltYWdlKFwkdXJsLCBcJGgsIFwkdykiCiAgIHVubGVzcyAkdXJsIGFuZCAkaCBhbmQgJHcKICAgICBhbmQgJGggPX4gbS9eXGR7MSwzfSQvcwogICAgIGFuZCAkdyA9fiBtL15cZHsxLDN9JC9zCiAgOwogICRzZWxmLT5pbWFnZV91cmwoJHVybCk7CiAgJHNlbGYtPmltYWdlX2hlaWdodCgkaCk7CiAgJHNlbGYtPmltYWdlX3dpZHRoKCAkdyk7CgogICAgIyAgd2lkdGggbXVzdCAoc2hvdWxkPykgYmUgYmV0d2VlbiAxIGFuZCAxNDQKICAgICMgaGVpZ2h0IG11c3QgKHNob3VsZD8pIGJlIGJldHdlZW4gMSBhbmQgNDAwCgogIEBfIGFuZCAkc2VsZi0+aW1hZ2VfbGluayggICAgICAgIHNoaWZ0KTsKICBAXyBhbmQgJHNlbGYtPmltYWdlX3RpdGxlKCAgICAgICBzaGlmdCk7CiAgQF8gYW5kICRzZWxmLT5pbWFnZV9kZXNjcmlwdGlvbiggc2hpZnQpOwogIHJldHVybjsKfQoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgo9aXRlbSBDPHJzc19zYXZlKCBJPGZpbGVuYW1lPiApOz4KCj1pdGVtIEM8cnNzX3NhdmUoIEk8ZmlsZW5hbWUsIG1heF9hZ2VfZGF5cz4gKTs+CgpUaGlzIHNhdmVzIHRoZSBSU1MgZGF0ZSB0byB0aGUgZmlsZSB5b3Ugc3BlY2lmeS4gIElmIHRoZSBSU1MgZGF0YSBoYXNuJ3QKY2hhbmdlZCwgdGhlIGZpbGUgKGFuZCBpdHMgbW9kdGltZSkgYXJlbid0IGFsdGVyZWQuICBUaGUgb3B0aW9uYWwgSTxtYXhfYWdlX2RheXM+CnBhcmFtZXRlciBtZWFucyB0aGF0IGlmIGV2ZXIgdGhlIGZpbGUgZXhpc3RzLCBhbmQgaXRzIGNvbnRlbnQgaGFzbid0IGNoYW5nZWQKZm9yIHRoYXQgbWFueSBkYXlzIG9yIGxvbmdlciwgdGhlbiB0aGUgcHJvZ3JhbSBzaG91bGQgZGllIHdpdGggYSB3YXJuaW5nCm1lc3NhZ2UuICBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgYSBzY3JlZW4tc2NyYXBlciBmb3IgYSBzaXRlIHRoYXQgd2UKa25vdyBzaG91bGQgKGluIHRoZW9yeSkgY2hhbmdlIGl0cyBjb250ZW50IGF0IGxlYXN0IHdlZWtseSwgd2UgbWlnaHQgc2F2ZQp0aGUgUlNTIGZpbGUgd2l0aDoKCiAgcnNzX3NhdmUoIndoYXRldmVyLnJzcyIsIDE3KTsKICAgIyBTY3JlYW0gaWYgdGhlIGZlZWQgaXMgdW5jaGFuZ2VkIGZvciAxNyBkYXlzLgoKVGhlIHNldmVudGVlbiB0aGVyZSBpcyBnb3R0ZW4gYnkgYXNzdW1pbmcgdGhhdCBqdXN0IG1heWJlIHRoZSBzaXRlCm1pZ2h0IHNraXAgdHdvIHdlZWtzIGZvciBhIHZhY2F0aW9uIG5vdyBhbmQgdGhlbiwgYW5kIG1pZ2h0IGV2ZW4gcHV0Cm91dCB0aGUgcHJlLXZhY2F0aW9uIGlzc3VlIGEgZmV3IGRheXMgZWFybHkgLS0gYnV0IHRoYXQgaWYgZXZlciB0aGUgcHJvZ3JhbQpub3RpY2VzIHRoYXQgdGhlIGRhdGEgaGFzbid0IGNoYW5nZWQgZm9yIDE3IGRheXMsIHRoZW4gaXQgc2hvdWxkIGVtaXQKZXJyb3IgbWVzc2FnZXMuICBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZSBvbiBhIG9uZS10aW1lIGJhc2lzLApqdXN0IGNoYW5nZSB0aGUgbW9kdGltZSAobGlrZSB2aWEgQzx0b3VjaD4pIG9uIHRoZSBGPHdoYXRldmVyLnJzcz4gZmlsZS4KCklmIHlvdSBkb24ndCBzcGVjaWZ5IGEgQzxtYXhfYWdlX2RheXM+IHZhbHVlLCB0aGVuIHRoaXMgd2hvbGUKY29tcGxhaW4taWYtaXQncy1vbGQgZmVhdHVyZSBpcyBkaXNhYmxlZC4KCj1jdXQKCnN1YiBzYXZlIHsKICBteSgkc2VsZiwgJGZpbGVuYW1lLCAkbWF4YWdlKSA9IEBfOwogIENhcnA6OmNyb2FrKCJJIG5lZWQgYSBmaWxlbmFtZSB0byBzYXZlIHRvIikKICAgdW5sZXNzIGRlZmluZWQgJGZpbGVuYW1lIGFuZCBsZW5ndGggJGZpbGVuYW1lOwoKICAkc2VsZi0+aGlzdG9yeV9maWxlIGFuZCAkc2VsZi0+X3NvcnRfaXRlbXNfbmV3ZXN0X2ZpcnN0OwogICRzZWxmLT5fd3JpdGVfaGlzdG9yeV9maWxlOwoKICBteSAkbmV3X2NvbnRlbnQgPSAkc2VsZi0+YXNfc3RyaW5nOwoKICBsb2NhbCAqUlNTOwogICMgU2VlIGlmIHdlIGNhbiBza2lwIHdyaXRpbmcgdG8gZGlzawogIGlmKC1lICRmaWxlbmFtZSBhbmQgLWYgXyBhbmQgLXIgXyBhbmQgLXMgXykgewogICAgREVCVUcgYW5kIHByaW50ICJDb21wYXJpbmcgdG8gJGZpbGVuYW1lLi4uXG4iOwogICAgb3BlbiBSU1MsICRmaWxlbmFtZQogICAgIG9yIENhcnA6OmNvbmZlc3MgIkNhbid0IHJlYWQtb3BlbiAkZmlsZW5hbWU6ICQhIjsgIyBpbnNhbml0eQogICAgbG9jYWwgJC87CiAgICBteSAkY29udGVudCA9IDxSU1M+OwogICAgY2xvc2UoUlNTKTsKICAgIAogICAgaWYoICRjb250ZW50IGVxICRuZXdfY29udGVudCApIHsKICAgICAgREVCVUcgYW5kIHByaW50ICIgJGZpbGVuYW1lXCdzIGNvbnRlbnQgaXMgdGhlIHNhbWUuXG4iOwogICAgICByZXR1cm4gJHNlbGYtPl9jaGVja19hZ2UoJGZpbGVuYW1lLCAkbWF4YWdlKTsKICAgIH0KICAgIAogICAgbXkgJG5ld19jb250ZW50X3dpdGhvdXRfYnVpbGRkYXRlID0gJG5ld19jb250ZW50OwogICAgZm9yZWFjaCBteSAkYyAoJG5ld19jb250ZW50X3dpdGhvdXRfYnVpbGRkYXRlLCAkY29udGVudCkgewogICAgICAkYyA9fiBzezxsYXN0W0JiXXVpbGRbRGRdYXRlPi4qPzwvbGFzdFtCYl11aWxkW0RkXWF0ZT59e307CiAgICAgICRjID1+IHN7PHB1YltEZF1hdGU+Lio/PC9wdWJbRGRdYXRlPn17fTsKICAgICAgJGMgPX4gdHJ7XG5ccn17fXM7ICAjIEFuZCBzbWFzaCBuZXdsaW5lcyB3aGlsZSB3ZSdyZSBhdCBpdC4uLgogICAgfQogICAgaWYoICRjb250ZW50IGVxICRuZXdfY29udGVudF93aXRob3V0X2J1aWxkZGF0ZSApIHsKICAgICAgREVCVUcgYW5kIHByaW50ICIgJGZpbGVuYW1lXCdzIGNvbnRlbnQgaXMgdGhlIHNhbWUsIGJhc2ljYWxseS5cbiI7CiAgICAgIHJldHVybiAkc2VsZi0+X2NoZWNrX2FnZSgkZmlsZW5hbWUsICRtYXhhZ2UpOwogICAgfQogICAgREVCVUcgYW5kIHByaW50ICIgJGZpbGVuYW1lXCdzIGNvbnRlbnQgaXMgc3RhbGUuICBPdmVyd3JpdGluZy5cbiI7CiAgfQogIERFQlVHIGFuZCBwcmludCAiV3JpdGluZyB0byAkZmlsZW5hbWUgLi4uXG4iOwogIAogICMgT0ssIHdlIGhhdmUgdG8gYWN0dWFsbHkgd3JpdGUgaXQuICBMZXQncyBkbyBpdCBmYXN0LgogIG9wZW4oUlNTLCAiPiRmaWxlbmFtZSIpCiAgIG9yIENhcnA6OmNvbmZlc3MgIkNhbid0IHdyaXRlLW9wZW4gJGZpbGVuYW1lOiAkIVxuQWJvcnRpbmciOwogIHByaW50IFJTUyAkbmV3X2NvbnRlbnQKICAgb3IgQ2FycDo6Y29uZmVzcyAiQ2FuJ3QgcHJpbnQgdG8gJGZpbGVuYW1lOiAkIVxuQWJvcnRpbmciOwogIGNsb3NlKFJTUykKICAgb3IgQ2FycDo6Y29uZmVzcyAiQ2FuJ3QgY2xvc2UgJGZpbGVuYW1lOiAkIVxuQWJvcnRpbmciOwogIGV2YWwgeyBjaG1vZCAwNjQ0LCAkZmlsZW5hbWUgfTsKICBERUJVRyBhbmQgcHJpbnQgIkRvbmUgd3JpdGluZyB0byAkZmlsZW5hbWVcbiI7CiAgcmV0dXJuIDE7Cn0KCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKPWl0ZW0gQzxyc3NfYXNfc3RyaW5nKCk7PgoKVGhpcyByZXR1cm5zIHRoZSBSU1MtWE1MIGRhdGEgYXMgYSBzdHJpbmcuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAppbnRlcm5hbGx5IGJ5IHRoZSByc3Nfc2F2ZSBmdW5jdGlvbjsgYnV0IHlvdSBtaWdodCB3YW50IHRvIGNhbGwgaXQKZXhwbGljaXRseSwgYXMgaW4gYSBDR0ksIHdoZXJlIHlvdXIgQ0dJIHdvdWxkIHByb2JhYmx5IGVuZCBsaWtlIHRoaXM6CgogIHByaW50ICJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3htbFxuXG4iLCByc3NfYXNfc3RyaW5nKCk7CiAgZXhpdDsKCj1jdXQKCgpzdWIgYXNfc3RyaW5nIHsKICBteSAkc2VsZiA9ICRfWzBdOwogIAogIG15ICRuYW1lc3BhY2VzID0gJHNlbGYtPl9uYW1lc3BhY2VzX2FzX3N0cmluZzsKICAKICByZXR1cm4gam9pbiAnJyA9PgogICAgcXF7PD94bWwgdmVyc2lvbj0iMS4wIj8+XG59LAogICAgKCREVERfcHViaWQgYW5kICREVERfdXJsKQogICAgID8gcXF7PCFET0NUWVBFIHJzcyBQVUJMSUMgIiREVERfcHViaWQiXG4gICIkRFREX3VybCI+XG59IDogKCksCgogICAgJHNlbGYtPmNzcyA/ICggIyBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtc3R5bGVzaGVldC8KICAgICAgcXF7PD94bWwtc3R5bGVzaGVldCB0aXRsZT0iQ1NTX2Zvcm1hdHRpbmciIHR5cGU9InRleHQvY3NzIiBocmVmPSJ9LAogICAgICAkc2VsZi0+eG1sZXNjKCRzZWxmLT5jc3MpLAogICAgICBxcXsiPz5cbn0KICAgICkgOiAoKSwKICAgICRzZWxmLT54c2wgPyAoCiAgICAgIHFxezw/eG1sLXN0eWxlc2hlZXQgdGl0bGU9IlhTTF9mb3JtYXR0aW5nIiB0eXBlPSJ0ZXh0L3htbCIgaHJlZj0ifSwgIyBUT0RPOiBiZXR0ZXIgbWltZSB0eXBlPwogICAgICAkc2VsZi0+eG1sZXNjKCRzZWxmLT54c2wpLAogICAgICBxcXsiPz5cbn0KICAgICkgOiAoKSwKICAgIHFxezxyc3MgdmVyc2lvbj0iMi4wIiRuYW1lc3BhY2VzPjxjaGFubmVsPn0sCiAgICAkc2VsZi0+X21vZHZlcnNpb25fY29tbWVudCwKICAgICRzZWxmLT5fdmFyaW91c19jb21tZW50cywKICAgICRzZWxmLT5fbWV0YWRhdGFfYXNfeG1sLAogICAgJHNlbGYtPl9pdGVtc19hc194bWwsCiAgICAiXG48L2NoYW5uZWw+PC9yc3M+XG4iLAogIDsKfQoKc3ViIF9uYW1lc3BhY2VzX2FzX3N0cmluZyB7CiAgbXkgJHNlbGYgPSAkX1swXTsKICBteSAkbnMgPSAkc2VsZi0+eydfbmFtZXNwYWNlcyd9OwogIHJldHVybiAnJyB1bmxlc3MgJG5zIGFuZCBrZXlzICUkbnM7CiAgcmV0dXJuCiAgICBqb2luICcnLCAiXG4iLAogICAgbWFwIHFxeyAgeG1sbnM6JF89IiQkbnN7JF99IlxufSwKICAgIHNvcnQga2V5cyAlJG5zCiAgOwp9CgojLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCnN1YiBfbWV0YWRhdGFfYXNfeG1sIHsKICBteSAkc2VsZiA9ICRfWzBdOwogIG15KCR1cmwsICR0aXRsZSwgJGRlc2NyaXB0aW9uKSA9ICgKICAgIG1hcCBkZWZpbmVkKCRfKSA/ICRfIDogJycsCiAgICAkc2VsZi0+dXJsLCAkc2VsZi0+dGl0bGUsICRzZWxmLT5kZXNjcmlwdGlvbiwKICApOwogIAogIGlmKCREV0lNKSB7CiAgICAjIHRvbGVyYXRlIHN3aXRjaGluZyB0aGUgZGVzY3JpcHRpb24vdGl0bGUgYW5kIHRoZSBVUkwKICAgIGlmKCR1cmwgIX4gbXteW2Etel0rW2EtejAtOV0qOlxTKyR9cykgewogICAgICBERUJVRyBhbmQgcHJpbnQgIlVSTCBcIiR1cmxcIiBsb29rcyBmaXNoeS4uLlxuIjsKICAgICAgaWYoICR0aXRsZSA9fiBte15bYS16XStbYS16MC05XSo6XFMrJH1zKSB7CiAgICAgICAgREVCVUcgYW5kIHByaW50ICJTd2FwcGluZyB3aXRoIHRpdGxlIFwiJHRpdGxlXCJcbiI7CiAgICAgICAgKCR1cmwsICR0aXRsZSkgPSAoJHRpdGxlLCAkdXJsKTsKICAgICAgICAkc2VsZi0+dXJsKCR1cmwpOwogICAgICAgICRzZWxmLT50aXRsZSgkdGl0bGUpOwogICAgICB9IGVsc2lmKCAkZGVzY3JpcHRpb24gPX4gbXteW2Etel0rW2EtejAtOV0qOlxTKyR9cykgewogICAgICAgIERFQlVHIGFuZCBwcmludCAiU3dhcHBpbmcgd2l0aCBkZXNjcmlwdGlvbiBcIiRkZXNjcmlwdGlvblwiXG4iOwogICAgICAgICgkdXJsLCAkZGVzY3JpcHRpb24pID0gKCRkZXNjcmlwdGlvbiwgJHVybCk7CiAgICAgICAgJHNlbGYtPnVybCgkdXJsKTsKICAgICAgICAkc2VsZi0+ZGVzY3JpcHRpb24oJGRlc2NyaXB0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBDYXJwOjpjcm9hayggIkludmFsaWQgVVJMIFwiJHVybFwiIGluIG1ldGFkYXRhICIKICAgICAgICAgLiAoJHRpdGxlfHwkZGVzY3JpcHRpb258fCI/Pz8iKSAuICJcbkFib3J0aW5nIgogICAgICAgICk7CiAgICAgIH0KICAgIH0KICB9CgogIG15ICRsYW5nID0gJHNlbGYtPmxhbmd1YWdlOwogICRsYW5nIGFuZCAkbGFuZyA9fiB0cltfXVtcLV07ICMgdG9sZXJhdGUgdW5kZXJzY29yZXMKICAkbGFuZyA9ICdlbicgdW5sZXNzIGRlZmluZWQgJGxhbmcKICAgIyBGcm9tIEkxOE46OkxhbmdUYWdzLi4uCiAgIGFuZCAkbGFuZyAhfiBtL15baUl4SV0kL3MKICAgYW5kICRsYW5nID1+CiAgICBtL14oPzogICMgRmlyc3Qgc3VidGFnCiAgICAgICAgIFt4aUlYXSB8IFthLXpBLVpdezIsM30KICAgICAgKQogICAgICAoPzogICMgU3VidGFncyB0aGVyZWFmdGVyCiAgICAgICAgIC0gICAgICAgICAgICMgc2VwYXJhdG9yCiAgICAgICAgIFtBLVphLXowLTldezEsOH0gICMgc3VidGFnICAKICAgICAgKSoKICAgICQveHMKICA7CgogIHJldHVybiBqb2luICcnLCBzcHJpbnRmKCBxcXsKPGxpbms+JXM8L2xpbms+Cjx0aXRsZT4lczwvdGl0bGU+CjxkZXNjcmlwdGlvbj4lczwvZGVzY3JpcHRpb24+CjxsYW5ndWFnZT4lczwvbGFuZ3VhZ2U+CjxsYXN0QnVpbGREYXRlPiVzPC9sYXN0QnVpbGREYXRlPgp9LAogICAgICBtYXAoICRzZWxmLT5odG1sMnRleHQoJF8pLAogICAgICAgICR1cmwgICAgICAgICB8fCAnISEhIUR1bW15VVJMISEhIScsCiAgICAgICAgJHRpdGxlICAgICAgIHx8ICRkZXNjcmlwdGlvbiB8fCAkdXJsIHx8ICchISEhRHVtbXlUaXRsZSEhISEnLAogICAgICAgICRkZXNjcmlwdGlvbiB8fCAkdGl0bGUgfHwgJHVybCB8fCAnISEhIUR1bW15RGVzY3JpcHRpb24hISEhJywKICAgICAgKSwKICAgICAgJGxhbmcsCiAgICAgICRzZWxmLT5fZGF0ZV9yZmM4MjIoKSwKICAgICksCiAgICBncmVwICRfLAogICAgCiAgICAkc2VsZi0+eyJza2lwSG91cnMifSwKICAgICRzZWxmLT57InNraXBEYXlzIn0sCiAgICAkc2VsZi0+X3N5X3VwZGF0ZV9hc194bWwsCiAgICAoKCRzZWxmLT57InR0bCJ9IHx8ICcnKSA9fiBtL14oXGQrKSQvcykgJiYgIjx0dGw+JDE8L3R0bD5cbiIsCiAgICAkc2VsZi0+d2ViTWFzdGVyICYmCiAgICAgKCI8d2ViTWFzdGVyPiIgLiAkc2VsZi0+aHRtbDJ0ZXh0KCRzZWxmLT53ZWJNYXN0ZXIpIC4gIjwvd2ViTWFzdGVyPlxuIiksCiAgICAKICAgICRzZWxmLT5kb2NzICYmCiAgICAgKCI8ZG9jcz4iIC4gJHNlbGYtPmh0bWwydGV4dCgkc2VsZi0+ZG9jcykgLiAiPC9kb2NzPlxuIiksCgogICAgJHNlbGYtPl9pbWFnZV9hc194bWwsCiAgICAkc2VsZi0+eydtb3JlX21ldGFkYXRhJ30sICMgYSBoYWNrIGZvciBzbmVha2luZyBpbiBtb3JlIHRoaW5ncwogIDsKCiMgLi4ud2l0aCBzYW5pdHktY2hlY2tlcnMKCn0KIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpzdWIgX3Byb2Nlc3NfaXRlbV9wYXJhbXMgewogIG15ICRzZWxmID0gc2hpZnQ7CiAgbXkoJHVybCwgJHRpdGxlLCAkZGVzY3JpcHRpb24pID0KICAgIG1hcCB7OyAoZGVmaW5lZCgkXykgJiYgbS9cUy8pID8gJF8gOiAnJyB9ICMgY29udGVudGZ1bG5lc3MgZmlsdGVyCiAgICBtYXAgJHNlbGYtPmh0bWwydGV4dCgkXyksICAjIGhlcmUncyB3aGVyZSB3ZSBkZS1odG1saWZ5IHRoaW5ncwogICAgQF87CiAgOwogIAogIGZvcigkdXJsLCAkdGl0bGUsICRkZXNjcmlwdGlvbikgewogICAgaWYocmVmICRfICAgICAgICkgeyB9ICAjIE9rYXkKICAgIGVsc2lmKGRlZmluZWQgJF8pIHsgcy9eXHMrLy9zOyBzL1xzKyQvL3MgfQogICAgZWxzZSAgICAgICAgICAgICAgeyAkXyA9ICcnIH0KICB9CiAgCiAgIyBUb2xlcmF0ZSBzd2l0Y2hpbmcgdGhlIGRlc2NyaXB0aW9uL3RpdGxlIGFuZCB0aGUgVVJMCiAgaWYoJERXSU0gYW5kICR1cmwgIX4gbXteW2Etel0rW2EtejAtOV0qOlxTKyR9cykgewogICAgREVCVUcgYW5kIHByaW50ICJVUkwgXCIkdXJsXCIgbG9va3MgZmlzaHkuLi5cbiI7CiAgICBpZiggJHRpdGxlID1+IG17XlthLXpdK1thLXowLTldKjpcUyskfXMpIHsKICAgICAgREVCVUcgYW5kIHByaW50ICJTd2FwcGluZyB3aXRoIHRpdGxlIFwiJHRpdGxlXCJcbiI7CiAgICAgICgkdXJsLCAkdGl0bGUpID0gKCR0aXRsZSwgJHVybCk7CiAgICB9IGVsc2lmKCAkZGVzY3JpcHRpb24gPX4gbXteW2Etel0rW2EtejAtOV0qOlxTKyR9cykgewogICAgICBERUJVRyBhbmQgcHJpbnQgIlN3YXBwaW5nIHdpdGggZGVzY3JpcHRpb24gXCIkZGVzY3JpcHRpb25cIlxuIjsKICAgICAgKCR1cmwsICRkZXNjcmlwdGlvbikgPSAoJHRpdGxlLCAkZGVzY3JpcHRpb24pOwogICAgfSBlbHNlIHsKICAgICAgQ2FycDo6Y29uZmVzcyggIkludmFsaWQgVVJMIFwiJHVybFwiIGluIGl0ZW0gIgogICAgICAgLiAoJHRpdGxlfHwkZGVzY3JpcHRpb258fCI/Pz8iKSAuICJcbkFib3J0aW5nIgogICAgICApOwogICAgfQogIH0KICByZXR1cm4gKCR1cmwsICR0aXRsZSwgJGRlc2NyaXB0aW9uKTsKfQoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpzdWIgX2l0ZW1zX2FzX3htbCB7CiAgbXkgJHNlbGYgPSAkX1swXTsKICBteSBAaXRlbXM7CiAgbXkgQHhtbF9vdXQgPSAoJE1heWJlTkwpOwoKICBpZiggJHNlbGYtPmFsbG93X2R1cGxpY2F0ZXMgKSB7CiAgICBAaXRlbXMgPSBAeyAkc2VsZi0+eydpdGVtcyd9IHx8IGRpZSAiTk8gSVRFTVMhPyE/IiB9OwogIH0gZWxzZSB7CiAgICBteSAlc2VlbjsKICAgIGZvcmVhY2ggbXkgJGkgKEB7ICRzZWxmLT57J2l0ZW1zJ30gfHwgZGllICJOTyBJVEVNUyE/IT8iIH0pIHsKICAgICAgaWYoICRzZWVueyAkaS0+WzBdIH0gKysgKSB7CiAgICAgICAgREVCVUcgYW5kIHByaW50ICJSZW1vdmluZyBkdXBsaWNhdGUgaXRlbSBAJGlcbiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaCBAaXRlbXMsICRpOwogICAgICB9CiAgICB9CiAgfQoKICBteSAkaXRlbV9saW1pdCA9IGludCggJHNlbGYtPml0ZW1fbGltaXQgfHwgMCApOwogIGlmKCRpdGVtX2xpbWl0KSB7CiAgICBpZihAaXRlbXMgPiBhYnMoJGl0ZW1fbGltaXQpKSB7CiAgICAgIGlmKCRpdGVtX2xpbWl0ID4gMCkgeyAjIGxpa2UgNCB0byBtZWFuIGp1c3QgdGhlIGZpcnN0IDQKICAgICAgICBERUJVRyBhbmQgcHJpbnQgIiBLaWxsaW5nIGFsbCBidXQgdGhlIGZpcnN0ICRpdGVtX2xpbWl0IGl0ZW1zLlxuIjsKICAgICAgICBzcGxpY2UgQGl0ZW1zLCAkaXRlbV9saW1pdDsKICAgICAgfSBlbHNlIHsgIyBsaWtlIC00IHRvIG1lYW4ganVzdCB0aGUgbGFzdCA0CiAgICAgICAgREVCVUcgYW5kIHByaW50ICIgS2lsbGluZyBhbGwgYnV0IHRoZSBsYXN0ICIsIDAtJGl0ZW1fbGltaXQsICIgaXRlbXMuXG4iOwogICAgICAgIHNwbGljZSBAaXRlbXMsIDAsIEBpdGVtcyArICRpdGVtX2xpbWl0OwogICAgICAgICAjIFNvIGlmIGl0ZW1fbGltaXQgaXMgLTMgYW5kIEBpdGVtcyBoYXMgMTAgZWxlbWVudHMsCiAgICAgICAgICMgIHRoZW4gdGhhdCBudW1iZXIgd2lsbCBiZSA3LCBpLmUuLCB0byBjaG9wIHRoZSBmaXJzdCA3CiAgICAgICAgICMgIGVsZW1lbnRzLCBsZWF2aW5nIHRoZSBsYXN0IDMuCiAgICAgIH0KICAgIH0KICB9CiAgREVCVUcgYW5kIHByaW50IHNjYWxhcihAaXRlbXMpLCAiIGl0ZW1zIGF0IGhhbmQ6XG4iOwogIAogIGZvcmVhY2ggbXkgJGkgKEBpdGVtcykgewogICAgbXkoJHVybCwgJHRpdGxlLCAkZGVzY3JpcHRpb24pID0gQCRpOwogICAgREVCVUcgPiAxIGFuZCBwcmludCAiSTogKHUgJHVybCkgKHQgJHRpdGxlKSAoZCAkZGVzY3JpcHRpb24pXG4iOwogICAgbmV4dCB1bmxlc3MgJHVybCBvciAkdGl0bGUgb3IgJGRlc2NyaXB0aW9uOwogICAgcHVzaCBAeG1sX291dCwgCiAgICAgIjxpdGVtPiRNYXliZU5MIiwKICAgICAobWFwICIkTWF5YmVJbmRlbnQkXyRNYXliZU5MIiwKICAgICAgIGxlbmd0aCgkdGl0bGUpICAgICAgID8gIjx0aXRsZT4kdGl0bGU8L3RpdGxlPiIgOiAoKSwKICAgICAgIGxlbmd0aCgkdXJsKSAgICAgICAgID8gIjxsaW5rPiR1cmw8L2xpbms+IiA6ICgpLAogICAgICAgbGVuZ3RoKCRkZXNjcmlwdGlvbikgPyAiPGRlc2NyaXB0aW9uPiRkZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+IiA6ICgpLAogICAgICksCiAgICAgIjwvaXRlbT4kTWF5YmVOTFxuIiwKICB9CiAgREVCVUcgYW5kIHByaW50ICJfaXRlbXNfYXNfeG1sIHJldHVybmluZyB7XG4iLCBqb2luKCcnLCBAeG1sX291dCksICJ9XG5cbiI7CiAgCiAgcmV0dXJuIGpvaW4gJycsIEB4bWxfb3V0Owp9CgojLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCnN1YiBfaW1hZ2VfYXNfeG1sIHsKICBteSAkc2VsZiA9IHNoaWZ0OwogIHJldHVybiAnJyB1bmxlc3MKICAgICRzZWxmLT5pbWFnZV91cmwgYW5kICRzZWxmLT5pbWFnZV9oZWlnaHQgYW5kICRzZWxmLT5pbWFnZV93aWR0aDsKCiAgIyA8IUVMRU1FTlQgaW1hZ2UgKHRpdGxlIHwgdXJsIHwgbGluayB8IHdpZHRoPyB8IGhlaWdodD8gfCBkZXNjcmlwdGlvbj8pKj4KCiAgcmV0dXJuIGpvaW4gJycsCiAgICAiPGltYWdlPlxuIiwKICAgIG1hcCgiICAkX1xuIiA9PgogICAgICAkc2VsZi0+eG1sZWxlbSggJ3RpdGxlJyAgPT4gJHNlbGYtPmltYWdlX3RpdGxlIHx8ICRzZWxmLT5odG1sMnRleHQoJHNlbGYtPnRpdGxlKSksCiAgICAgICRzZWxmLT54bWxlbGVtKCAndXJsJyAgICA9PiAkc2VsZi0+aW1hZ2VfdXJsKSwgIyB1cmwgb2YgdGhlIGltYWdlCiAgICAgICRzZWxmLT54bWxlbGVtKCAnbGluaycgICA9PiAkc2VsZi0+aW1hZ2VfbGluayAgfHwgJHNlbGYtPmh0bWwydGV4dCgkc2VsZi0+dXJsICApKSwKICAgICAgJHNlbGYtPnhtbGVsZW0oICd3aWR0aCcgID0+ICRzZWxmLT5pbWFnZV93aWR0aCksCiAgICAgICRzZWxmLT54bWxlbGVtKCAnaGVpZ2h0JyA9PiAkc2VsZi0+aW1hZ2VfaGVpZ2h0KSwKICAgICAgJHNlbGYtPnhtbGVsZW0oICdkZXNjcmlwdGlvbicKICAgICAgICAgICAgICAgICA9PiAkc2VsZi0+aW1hZ2VfZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICAgICB8fCAkc2VsZi0+aHRtbDJ0ZXh0KCRzZWxmLT5kZXNjcmlwdGlvbikpLAogICAgKSwKICAgICI8L2ltYWdlPlxuIiwKICA7Cn0KCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCj1pdGVtIEM8Z2V0X3VybCggSTx1cmw+ICk7PgoKPWl0ZW0gQzwkY29udGVudCA9IGdldF91cmwoIEk8dXJsPiApOz4KCj1pdGVtIEk8b3I6PiBDPDwgJGNvbnRlbnQgPSAkcnNzLT5nZXRfdXJsKC4uLik7ID4+Cgo9aXRlbSBJPG9yOj4gQzw8ICRjb250ZW50LT5nZXRfdXJsKC4uLik7ID4+CgpUaGlzIHRyaWVzIHRvIGdldCB0aGUgY29udGVudCBvZiB0aGUgZ2l2ZW4gdXJsLCBhbmQgcmV0dXJucyBpdC4KClRoaXMgaXMgcXVpdGUgbGlrZSBMPExXUDo6U2ltcGxlPidzIEM8Z2V0PiBmdW5jdGlvbiwgYnV0IHdpdGggc29tZQphZGRpdGlvbmFsIGZlYXR1cmVzOgoKPW92ZXIKCj1pdGVtICogSWYgaXQgY2FuJ3QKZ2V0IHRoZSBVUkwncyBjb250ZW50IGF0IGZpcnN0LCBpdCB3aWxsIHNsZWVwIGZvciBhIGZldyBzZWNvbmRzIGFuZCB0cnkKYWdhaW4sIHVwIHRvIGFib3V0IGZpdmUgdGltZXMuIChUaGlzIGlzIHRvIGF2b2lkIHRoZSBjYXNlIG9mIHRoZSBVUkwKYmVpbmcgdGVtcG9yYXJpbHkgaW5hY2Nlc3NpYmxlIHNpbXBseSBiZWNhdXNlIHRoZSBETlMgaXMgYSBiaXQgc2xvdywKb3IgYmVjYXVzZSB0aGUgc2VydmVyIGlzIHRvbyBidXN5LikKCj1pdGVtICogSWYgaXQgY2FuJ3QgZ2V0IHRoZSBjb250ZW50LCBldmVuIGFmdGVyIHNldmVyYWwgcmV0cmllcywKaXQgd2lsbCBhYm9ydCB0aGUgcHJvZ3JhbSAobGlrZSBhIEM8ZGllPikuICBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGlzCmJlaGF2aW9yLCB0aGVuIGNhbGwgaXQgYXMgQzxldmFsIHsgZ2V0X3VybCgkdXJsKSB9Oz4KCj1pdGVtICogSWYgeW91IGNhbGwgdGhlIGZ1bmN0aW9uIGluIHZvaWQgY29udGV4dCAoaS5lLiwgbm90IHVzaW5nIGl0cwpyZXR1cm4gdmFsdWUpLCB0aGVuIHRoZSBmdW5jdGlvbiBhc3NpZ25zIHRoZSBVUkwncyBjb250ZW50IHRvIEM8JF8+LgpUaGF0J3Mgc28geW91IGNhbiB3cml0ZSBuaWNlIGNvbmNpc2UgY29kZSBsaWtlIHRoaXM6CgogICAgICAgICAgIGdldF91cmwgJHRoYXRzaXRlOwogICAgICAgICAgIG0vVG9wIFN0b3JpZXMgVG9uaWdodC8gb3IgZGllICJXaGF0LCBubyB0b3Agc3Rvcmllcz8iOwogICAgICAgICAgIHdoaWxlKCBtezxhIGNsYXNzPSJ0b3AiIGhyZWY9IiguKj8pIj4oLio/KTwvYT59ZyApIHsKICAgICAgICAgICAgIHJzc19pdGVtKCIkdGhhdHNpdGUvJDEiLCAkMik7CiAgICAgICAgICAgfQoKPWl0ZW0gKiBUaGlzIHJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIFVSTCBub3QgZXhhY3RseSBhcy1pcywgYnV0IGFmdGVyCmNoYW5naW5nIGl0cyBuZXdsaW5lcyB0byBuYXRpdmUgZm9ybWF0LiAgVGhhdCBpcywgaWYgdGhlIGNvbnRlbnRzIG9mIHRoZQpVUkwgdXNlIENSLUxGIHBhaXJzIHRvIGV4cHJlc3MgbmV3bGluZXMsIHRoZW4gQzxnZXRfdXJsPiBjaGFuZ2VzIHRoZXNlCnRvIEM8XG4+J3MgYmVmb3JlIHJldHVybmluZyB0aGUgY29udGVudC4gIChTaW1pbGFybHkgZm9yIG9sZCBNYWNPUwpuZXdsaW5lIGZvcm1hdC4pICBDbGVhcmx5IHRoaXMgaXMgd3JvbmcgaW4geW91J3JlIGRlYWxpbmcgd2l0aCBiaW5hcnkKZGF0YTsgaW4gdGhhdCBjYXNlLCB1c2UgTFdQOjpTaW1wbGUncyBDPGdldD4gZGlyZWN0bHkuCgo9aXRlbSAqIEZpbmFsbHksIGFzIGEgcmVzb3VyY2UtY29udmVyc2F0aW9uIG1lYXN1cmUsIHRoaXMgZnVuY3Rpb24Kd2lsbCBhbHNvIHRyeSB0byBjYWxsIEM8c2xlZXA+IGEgZmV3IHRpbWVzIGlmIGl0IHNlZXMgc2V2ZXJhbCBxdWljawpjYWxscyB0byBpdHNlbGYgY29taW5nIGZyb20gYSBwcm9ncmFtIHRoYXQgc2VlbXMgdG8gYmUgcnVubmluZwp1bmRlciBjcm9udGFiLiAgQXMgbW9zdCBvZiBteSBSU1MtZ2VuZXJhdG9ycyBhcmUgY3JvbnRhYmJlZCwgSQpmaW5kIGl0IHZlcnkgdXNlZnVsIHRoYXQgSSBjYW4gaGF2ZSBob3dldmVyIG1hbnkgQzxnZXRfdXJsPidzIGluCm15IGNyb250YWJiZWQgcHJvZ3JhbXMgd2l0aG91dCB3b3JyeWluZyB0aGF0IHRoZXknbGwgdGFrZSBldmVuIGEKbm90aWNlYWJsZSBwYXJ0IG9mIHRoZSBzZXJ2ZXIncyBiYW5kd2lkdGguCgo9YmFjawoKPWN1dAoKbXkgJGxhc3RfdXJsX2dldF90aW1lOwoKc3ViIGdldF91cmwgKCQpIHsKICBteSAkc2VsZiA9IHNoaWZ0IGlmIEBfID4gMTsgIyB3b3JrIGFzIGEgZnVuY3Rpb24gb3IgbWV0aG9kCgogICMgIEdvIHdoaXAgdXAgYW4gb2JqZWN0IHVubGVzcyBvbmUgd2FzIGdpdmVuOgogICRzZWxmID0gKCRSU1Nfb2JqIHx8PSBYTUw6OlJTUzo6U2ltcGxlR2VuOjotPm5ldykgdW5sZXNzIGRlZmluZWQgJHNlbGY7CiAgJHNlbGYgPSAkc2VsZi0+bmV3IHVubGVzcyByZWYgJHNlbGY7CiAgCiAgbXkgJHVybCA9ICRfWzBdOwogIENhcnA6OmNyb2FrICJcIiR1cmxcIiBkb2Vzbid0IGxvb2sgbGlrZSBhIFVSTCFcbkFib3J0aW5nIgogICB1bmxlc3MgZGVmaW5lZCgkdXJsKSBhbmQgJHVybCA9fiBte15bYS16XStbYS16MC05XSo6XFMrJH1zOwogIAogIGlmKCRTbGVlcHkgYW5kICRsYXN0X3VybF9nZXRfdGltZSkgewogICAgbXkgJGRlbGF5ID0gJFNsZWVweSAtICh0aW1lKCkgLSAkbGFzdF91cmxfZ2V0X3RpbWUpOwogICAgaWYoICRkZWxheSA+IDAgKSB7CiAgICAgIERFQlVHIGFuZCBwcmludCAiTGFzdCBVUkxnZXQgd2FzIGF0ICRsYXN0X3VybF9nZXRfdGltZSwgc2xlZXAgJGRlbGF5XG4iOwogICAgICBzbGVlcCAkZGVsYXk7CiAgICB9IGVsc2UgewogICAgICBERUJVRyBhbmQgcHJpbnQgIkxhc3QgVVJMZ2V0IHdhcyBhdCAkbGFzdF91cmxfZ2V0X3RpbWUsIHNvIG5vIHNsZWVwLlxuIjsKICAgIH0KICB9CiAgCiAgbXkgJGNvbnRlbnQ7CiAgbXkgJGNvdW50ID0gMDsKICBmb3JlYWNoIG15ICRkZWxheSAoQFJldHJ5X2RlbGF5cywgMCkgewogICAgZGVsZXRlICRzZWxmLT57J19sb29wcyd9OwogICAgZGVsZXRlICRzZWxmLT57J19odHRwX2Fib3J0J307CgogICAgREVCVUcgYW5kIHByaW50ICJHZXR0aW5nICR1cmwgLi4uXG4iOwogICAgKyskY291bnQ7CiAgICBpZiggZGVmaW5lZCgKICAgICAgJGNvbnRlbnQgID0gICRzZWxmLT5fZ2V0KCR1cmwpCiAgICApKSB7CiAgICAgIERFQlVHIGFuZCBwcmludCAiT0ssIGdvdCBpdCAoIiwgbGVuZ3RoKCRjb250ZW50KSwgIiBieXRlcylcbiI7CiAgICAgIGxhc3Q7CiAgICB9CiAgICAKICAgIGlmKCAkc2VsZi0+eydfaHR0cF9hYm9ydCd9ICkgewogICAgICBERUJVRyBhbmQgcHJpbnQgIkNvdWxkbid0IGdldCBpdCBhbmQgd29uJ3QgcmV0cnkgKCIsIAogICAgICAgICRzZWxmLT57J19odHRwX2Fib3J0J30sICIpXG4iOwogICAgICBsYXN0OwogICAgfSBlbHNlIHsKICAgICAgREVCVUcgYW5kIHByaW50ICJPZGQsIGNvdWxkbid0IGdldCBpdC5cbiI7CiAgICB9CiAgICBpZigkZGVsYXkpIHsgREVCVUcgYW5kIHByaW50ICJTbGVlcGluZyAkZGVsYXkgc2VjLi4uXG4iOyBzbGVlcCAkZGVsYXk7IH0KICB9CiAgJGxhc3RfdXJsX2dldF90aW1lID0gdGltZSgpOwoKICB1bmxlc3MoIGRlZmluZWQgJGNvbnRlbnQgKSB7CiAgICBteSAkaGVhZGVycyA9ICRzZWxmLT57J19odHRwX2hlYWRlcnMnfTsKICAgIGlmKCAkaGVhZGVycyBhbmQgJGhlYWRlcnMgPX4gc3tefXsgIH1tZyApIHsKICAgICAgJGhlYWRlcnMgPSAiXG5SZXNwb25zZSBoZWFkZXJzOlxuJGhlYWRlcnMiOwogICAgfSBlbHNlIHsKICAgICAgJGhlYWRlcnMgPSAnJzsKICAgIH0KICAgICRjb3VudCAuPSAoJGNvdW50ID09IDEpID8gIiB0cnkiIDogIiB0cmllcyI7CiAgICBDYXJwOjpjcm9haygiQ291bGRuJ3QgZ2V0ICR1cmwgaW4gJGNvdW50JGhlYWRlcnNcblNvLCBhYm9ydGluZyIpCiAgfQogIAogIGlmKCROYXRpdml6ZV9uZXdsaW5lcykgewogICAgaWYoIlxuIiBlcSAiXGNqIikgeyAgICAgICAjIENSID0+IExGICAgIENSIExGTEYuLi4gPT4gTEYgICBMRiA9PiBMRgogICAgICAkY29udGVudCA9fiBzL1xjbVxjaiovXG4vZzsgIyBtb3N0IGVmZmljaWVudCwgSSBkYXJlIHNheQogICAgfSBlbHNpZigiXG4iIGVxICJcY20iKSB7ICAjIENSID0+IENSICAgIENSIExGTEYuLi4gPT4gQ1IgICBMRiA9PiBDUgogICAgICAkY29udGVudCA9fiBzLyg/Oig/OlxjbVxjaispfFxjaikvXG4vZzsKICAgIH0gZWxzZSB7CiAgICAgICRjb250ZW50ID1+IHMvKD86XG58XHJ8XG5ccikvXG4vZzsKICAgIH0KICB9CiAgCiAgJF8gPSAkY29udGVudCB1bmxlc3MgZGVmaW5lZCB3YW50YXJyYXk7CiAgcmV0dXJuICRjb250ZW50Owp9CgojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyAgVGhpbmdzIGJlbG93IGhlcmUgYXJlIGxlc3MgYW5kIGxlc3MgaW50ZXJlc3RpbmcgdG8gdGhlIGNhc3VhbCByZWFkZXIuCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKc3ViIF9nZXQgewogIG15ICRzZWxmID0gc2hpZnQ7CiAgaWYoCiAgICAhJExXUDo6U2ltcGxlOjpWRVJTSU9OCiAgICBhbmQgJF9bMF0gPX4gbXteaHR0cDovLyhbXiBcblxyXHQvOlxAXSspKD86OihcZCspKT8oL1xTKik/JH0KICApIHsKICAgIG15ICRob3N0ID0gJDE7CiAgICBteSAkcGF0aCA9ICQzOwogICAgbXkgJHBvcnQgPSAwICsgKCQyIHx8IDgwKTsKICAgIGlmKCAkQmFkUG9ydHN7JHBvcnR9ICkgewogICAgICBERUJVRyBhbmQgcHJpbnQgIldlIGRvbid0IGxpa2UgcG9ydCAkcG9ydCBmcm9tICRfWzBdXG4iOwogICAgICByZXR1cm4gdW5kZWY7CiAgICB9CiAgICAKICAgICRwYXRoID0gIi8iIHVubGVzcyBkZWZpbmVkKCRwYXRoKTsKICAgICRzZWxmID0gJHNlbGYtPm5ldyB1bmxlc3MgcmVmKCRzZWxmKTsgIyBuZWVkIHRvIGJlIGFuIG9iamVjdCBtZXRob2QKICAgIHJldHVybiAkc2VsZi0+X3RyaXZpYWxfaHR0cF9nZXQoJGhvc3QsICRwb3J0LCAkcGF0aCk7CiAgfSBlbHNlIHsKICAgIHJldHVybiAkc2VsZi0+X2x3cF9nZXQoQF8pOwogIH0KfQoKc3ViIF9sd3BfZ2V0IHsKICByZXF1aXJlIExXUDo6U2ltcGxlOwogIERFQlVHIGFuZCBwcmludCAiQ2FsbGluZyBMV1A6OlNpbXBsZSBvbiAkX1sxXVxuIjsKICByZXR1cm4gTFdQOjpTaW1wbGU6OmdldCgkX1sxXSk7Cn0KCnN1YiBfdHJpdmlhbF9odHRwX2dldCB7CiAgIG15KCRzZWxmLCAkaG9zdCwgJHBvcnQsICRwYXRoKSA9IEBfOwogICBERUJVRyA+IDEgYW5kIHByaW50ICJHZXR0aW5nIEhPU1Q9JGhvc3QsIFBPUlQ9JHBvcnQsIFBBVEg9JHBhdGhcbiI7CgogICAkc2VsZiA9ICRzZWxmLT5uZXcgdW5sZXNzIHJlZigkc2VsZik7ICMgbmVlZCB0byBiZSBhbiBvYmplY3QgbWV0aG9kCiAgIG15ICRzZWVuID0gKCAkc2VsZi0+eydfbG9vcHMnfSB8fD0ge30gKTsKCiAgIHJlcXVpcmUgSU86OlNvY2tldDsKICAgbG9jYWwoJF5XKSA9IDA7CiAgIG15ICRzb2NrID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFBlZXJBZGRyID0+ICRob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWVyUG9ydCA9PiAkcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG8gICAgPT4gJ3RjcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXQgID0+IDYwKSB8fCByZXR1cm4gdW5kZWY7CiAgICRzb2NrLT5hdXRvZmx1c2g7CiAgIG15ICRuZXRsb2MgPSAkaG9zdDsKICAgJG5ldGxvYyAuPSAiOiRwb3J0IiBpZiAkcG9ydCAhPSA4MDsKICAgcHJpbnQgJHNvY2sgam9pbigiXDAxNVwwMTIiID0+CiAgICAgICAgICAgICAgICAgICJHRVQgJHBhdGggSFRUUC8xLjAiLAogICAgICAgICAgICAgICAgICAiSG9zdDogJG5ldGxvYyIsCiAgICAgICAgICAgICAgICAgICJVc2VyLUFnZW50OiAkVXNlckFnZW50U3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIiIsICIiKTsKCiAgIG15ICRidWYgPSAiIjsKICAgbXkgJG47CiAgIHdoaWxlKCAkbiA9IHN5c3JlYWQoJHNvY2ssICRidWYsIDgqMTAyNCwgbGVuZ3RoKCRidWYpKSApIHsKICAgICBERUJVRyA+IDEwIGFuZCBwcmludCAiICAgIEdvdCAkbiBieXRlcy4uLlxuIjsKICAgICAxOwogICB9CiAgIHJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCgkbik7CgogICBpZiggJGJ1ZiA9fiBte15IVFRQL1xkK1wuXGQrXHMrKFxkKylbXlwwMTJdKlwwMTJ9ICkgewogICAgIG15ICRjb2RlID0gJDE7CiAgICAgREVCVUcgYW5kIHByaW50ICIgR290IEhUVFAgc3RhdHVzOiAkY29kZVxuIjsKICAgICBpZiggJGNvZGUgPX4gbS9eMzBbMTIzN10vcyBhbmQgJGJ1ZiA9fiBtL1wwMTJMb2NhdGlvbjpccyooXFMrKS8gKSB7CiAgICAgICAjIFJlZGlyZWN0aW9uCiAgICAgICBteSAkdXJsID0gJDE7CiAgICAgICBpZiggJHVybCA9fiBtL14oZmlsZXxtYWlsdG8pOi8gICMgcHJvdG9jb2xzIHdlIGhhdGUKICAgICAgICAgb3IgJHNlZW4tPnskdXJsfSsrCiAgICAgICAgIG9yIHNjYWxhcihrZXlzICUkc2VlbikgPiAyMAogICAgICAgKSB7CiAgICAgICAgIERFQlVHIGFuZCBwcmludCAiSSBkb24ndCBsaWtlIHRoZSByZWRpcmVjdGlvbiByZXNwb25zZSAkdXJsXG4iOwogICAgICAgICAkc2VsZi0+eydfaHR0cF9hYm9ydCd9ID0gIkJhZCBIVFRQLXJlZGlyZWN0aW9uIGxvb3AuIjsKICAgICAgICAgcmV0dXJuIHVuZGVmOwogICAgICAgfQogICAgICAgcmV0dXJuICRzZWxmLT5fZ2V0KCR1cmwpOyAgIyBSZWN1cnNlIQogICAgIH0KCiAgICAgJGJ1ZiA9fiBzLyguKz8pXDAxNT9cMDEyXDAxNT9cMDEyLy9zOyAgIyB6YXAgdGhlIGhlYWRlcgogICAgICggJHNlbGYtPnsnX2h0dHBfaGVhZGVycyd9ID0gJDEgKSAgID1+ICAgdHIvXDAxNVwwMTIvXG4vc2Q7CiAgICAgCiAgICAgREVCVUcgPiAxMCBhbmQgcHJpbnQgIkhlYWRlcnM6ICQkc2VsZnsnX2h0dHBfaGVhZGVycyd9XG4iOwogICAgIAogICAgICRzZWxmLT57J19odHRwX2Fib3J0J30gPSAiSFRUUCBzdGF0dXMgJGNvZGUiCiAgICAgIGlmICRjb2RlIGVxICc0MDQnIG9yICRjb2RlIGVxICc0MDMnOwogICAgIHJldHVybiB1bmRlZiB1bmxlc3MgJGNvZGUgPX4gbS9eMi87CiAgICAgCiAgICAgREVCVUcgYW5kIHByaW50ICJSZXR1cm5pbmcgIiwgbGVuZ3RoKCRidWYpLCAiIGJ5dGVzIG9mIGNvbnRlbnQuXG4iOwogICB9IGVsc2UgewogICAgIERFQlVHIGFuZCBwcmludCAiR290IGEgaGVhZGVybGVzcyByZXNwb25zZS4gIFJldHVybmluZy5cbiI7CiAgIH0KCiAgIHJldHVybiAkYnVmOwp9CgojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnN1YiBfcmVhZF9oaXN0b3J5X2ZpbGUgewogIG15ICRzZWxmID0gJF9bMF07CiAgbXkgJGhmID0gJHNlbGYtPmhpc3RvcnlfZmlsZTsKICB1bmxlc3MoZGVmaW5lZCAkaGYgYW5kIGxlbmd0aCAkaGYpIHsKICAgIERFQlVHIGFuZCBwcmludCAiTm8gaGlzdG9yeV9maWxlIGRlZmluZWQgZm9yICRzZWxmLlxuIjsKICAgIHJldHVybjsKICB9CiAgCiAgbXkoJWZpcnN0LCAlbGFzdCk7ICAjICJsYXN0IiBpbiB0aGUgc2Vuc2Ugb2YgIm1vc3QgcmVjZW50bHkiCiAgJHNlbGYtPnsnX2ZpcnN0X3NlZW4nfSA9IFwlZmlyc3Q7CiAgJHNlbGYtPnsnX2xhc3Rfc2VlbicgfSA9IFwlbGFzdCA7CgogIHVubGVzcyggLWUgJGhmIGFuZCAtcyBfICkgewogICAgJHNlbGYtPnsnX3Zpcmdpbl9pdGVtX3RpbWVzdGFtcCd9ID0gdGltZSgpIGlmICREV0lNOwogICAgcmV0dXJuIDA7CiAgfQoKICBteSAkbm93ID0gdGltZSgpOwogIG15ICRmb3JnZXRfYmVmb3JlOwogIAogIG15ICRpbjsKICB7CiAgICBsb2NhbCAqSU47CiAgICBvcGVuKElOLCAkaGYpIG9yIENhcnA6OmNvbmZlc3MgIkNhbid0IHJlYWQtb3BlbiAkaGY6ICQhIjsgICMgaW5zYW5lCiAgICAkaW4gPSAqSU57SU99OwogIH0KICBsb2NhbCAkXzsKICBteSBAZjsKICB3aGlsZSg8JGluPikgewogICAgdHIvXG5cci8vZDsKICAgIG5leHQgdW5sZXNzIEBmID0gc3BsaXQgIlx0IiwgJF8sIDMgYW5kIGRlZmluZWQoJGZbMF0pIGFuZCBsZW5ndGgoJGZbMF0pOwoKICAgICRsYXN0eyRmWzBdfSA9ICRmWzJdIGlmICRmWzJdOwoKICAgIGlmKCAkZlsxXSApIHsKICAgICAgJGZpcnN0eyRmWzBdfSA9ICRmWzFdOwogICAgICBERUJVRyA+IDMgYW5kIHByaW50ICIgTGVhcm5pbmcgJGZbMF0gZmlyc3Qgc2VlbiBhdCAkZlsxXVxuIjsKICAgIH0gZWxzZSB7CiAgICAgICRmaXJzdHskZlswXX0gPSAkbm93OwogICAgICBERUJVRyA+IDMgYW5kIHByaW50ICIgUHJlbGVhcm5pbmcgJGZbMF0gZmlyc3Qgc2VlbiBhdCAkZlsxXVxuIjsKICAgICAgICMgVE9ETzogaXMgdGhpcyB1c2VmdWw/CiAgICB9CiAgfQogIGNsb3NlKCRpbik7CgogIHJldHVybiAxOwp9CgojIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4KCnN1YiBfd3JpdGVfaGlzdG9yeV9maWxlIHsKICBteSAkc2VsZiA9ICRfWzBdOwogIG15ICRoZiA9ICRzZWxmLT5oaXN0b3J5X2ZpbGU7CiAgdW5sZXNzKGRlZmluZWQgJGhmIGFuZCBsZW5ndGggJGhmKSB7CiAgICBERUJVRyBhbmQgcHJpbnQgIk5vIGhpc3RvcnlfZmlsZSBkZWZpbmVkIGZvciAkc2VsZi5cbiI7CiAgICByZXR1cm47CiAgfQogIAogIG15ICRmaXJzdCA9ICRzZWxmLT57J19maXJzdF9zZWVuJ307CiAgbXkgJGxhc3QgID0gJHNlbGYtPnsnX2xhc3Rfc2VlbicgfTsKICBteSAkbm93ICAgPSB0aW1lKCk7CiAgCiAgbXkgJG91dDsKICBERUJVRyBhbmQgcHJpbnQgIlNhdmluZyB0byBoaXN0b3J5IGZpbGUgJGhmXG4iOwogIERFQlVHID4gMiBhbmQgcHJpbnRmICJUaW1lIG5vdzogJXMgPSAlc1xuIiwgdGltZSgpLCBzY2FsYXIobG9jYWx0aW1lKTsKICB7CiAgICBsb2NhbCAqSEY7CiAgICBvcGVuKEhGLCAiPiRoZiIpIG9yIENhcnA6OmNvbmZlc3MgIkNhbid0IHdyaXRlLW9wZW4gJGhmOiAkISI7ICAjIGluc2FuZQogICAgJG91dCA9ICpIRntJT307CiAgfQogIHsKICAgIG15KEBmLCBAeCk7CiAgICB7CiAgICAgIG15ICV4OwogICAgICBAeHtrZXlzICUkZmlyc3QsIGtleXMgJSRsYXN0fSA9ICgpOwogICAgICBAeCA9IHNvcnQga2V5cyAleDsKICAgIH0KCiAgICBteSAkZm9yZ2V0X2JlZm9yZTsKICAgIHsKICAgICAgbXkgJHIgPSAkc2VsZi0+cmV0ZW50aW9uOwogICAgICBpZiggJHIgYW5kICRyID4gMCApIHsgJGZvcmdldF9iZWZvcmUgPSB0aW1lKCkgLSAkciB9CiAgICB9CiAgICBmb3JlYWNoIG15ICRrZXkgKEB4KSB7CiAgICAgIG5leHQgaWYgJGtleSA9fiBtL1tcdFxuXHJdLzsKICAgICAgaWYoICRmb3JnZXRfYmVmb3JlIGFuZCAkbGFzdC0+eyRrZXl9IDwgJGZvcmdldF9iZWZvcmUgKSB7CiAgICAgICAgREVCVUcgYW5kIHByaW50ZigKICAgICAgICAgICIgRm9yZ2V0dGluZyAlcyBhcyBiZWluZyB0b28gb2xkIHNpbmNlIGxhc3Qtc2VlbiAoJXMgPSAlcylcbiIsCiAgICAgICAgICAka2V5LAogICAgICAgICAgJGxhc3QtPnska2V5fSwKICAgICAgICAgIHNjYWxhcihsb2NhbHRpbWUoJGxhc3QtPnska2V5fSkpLAogICAgICAgICk7CiAgICAgICAgbmV4dDsKICAgICAgfQogICAgICBwcmludCAkb3V0ICAgICAgJGtleSwgIlx0IiwKICAgICAgICAkZmlyc3QtPnska2V5fXx8JycsICJcdCIsCiAgICAgICAgICRsYXN0LT57JGtleX18fCcnLCAiXG4iLAogICAgICA7CiAgICAgIAogICAgICBpZihERUJVRyA+IDIpIHsKICAgICAgICBwcmludGYgIiAgS2V5ICVzXG4gICAgRmlyc3Qgc2VlbjogJXMgPSAlc1xuICAgIExhc3Qgc2VlbjogICVzID0gJXNcbiIsCiAgICAgICAgICAka2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpcnN0LT57JGtleX18fCctJywKICAgICAgICAgIHNjYWxhcihsb2NhbHRpbWUoICRmaXJzdC0+eyRrZXl9fHwwICApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdC0+eyRrZXl9fHwnLScsCiAgICAgICAgICBzY2FsYXIobG9jYWx0aW1lKCAgJGxhc3QtPnska2V5fXx8MCAgKSksCiAgICAgIH0KCiAgICB9CiAgICBjbG9zZSgkb3V0KTsKICB9CiAgREVCVUcgYW5kIHByaW50ICJEb25lIHNhdmluZyB0byAkaGZcbiI7CiAgcmV0dXJuIDE7Cn0KCiMtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXwoKCj1pdGVtIEM8cnNzX2hvdXJseT4gSTxvcj4gQzxyc3NfZGFpbHk+IEk8b3I+IEM8cnNzX3R3aWNlX2RhaWx5PgogSTxvcj4gQzxyc3NfdGhyaWNlX2RhaWx5PiBJPG9yPiBDPHJzc193ZWVrbHk+IEk8b3I+IEM8cnNzX2V2ZXJ5X290aGVyX2hvdXI+CgpDYWxsaW5nIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgZGVjbGFyZXMgdGhhdCB0aGlzIGZlZWQgaXMgdXN1YWxseQpnZW5lcmF0ZWQgYXQgdGhlIHNhbWUgdGltZShzKSBldmVyeSBkYXkgKG9yIGV2ZXJ5IHdlZWssIGluIHRoZSBjYXNlIG9mCkM8cnNzX3dlZWtseT4pLiBBbmQsIHdoZXJlIGl0J3Mgbm90IGp1c3Qgb25jZSBhIGRheS93ZWVrLCB0aGVzZSBtdWx0aXBsZQp0aW1lcyBhIGRheSBhcmUgZXZlbmx5IHNwYWNlZC4gIFRoZXNlIGZ1bmN0aW9ucyB0aGVuIHNldCB0aGUgZmVlZCdzCkM8dXBkYXRlUGVyaW9kPiwgQzx1cGRhdGVCYXNlPiwgQzx1cGRhdGVGcmVxdWVuY3k+LCBDPHNraXBIb3Vycz4sCkM8c2tpcERheXM+LCBhbmQgQzx0dGw+IGVsZW1lbnRzIGFwcHJvcHJpYXRlbHksIHNvIHRoYXQgUlNTIHJlYWRlcnMgY2FuIGtub3cgYXQKYXQgd2hhdCB0aW1lcyB0aGVyZSBjb3VsZCAob3IgY291bGRuJ3QpIGJlIG5ldyBjb250ZW50IGluIHRoaXMgZmVlZC4KCkluIG90aGVyIHdvcmRzOiB1c2UgQzxyc3NfdHdpY2VfZGFpbHk+IGlmIHRoaXMgZmVlZCBpcyB1cGRhdGVkIGF0IGFib3V0IHRoZQpzYW1lIHRpbWUgZXZlcnkgZGF5IGFuZCB0aGVuIGFnYWluIDEyIGhvdXJzIGxhdGVyLiAgVXNlIEM8cnNzX3RocmljZV9kYWlseT4KaWYgdGhpcyBmZWVkIGlzIHVwZGF0ZWQgYXQgdGhlIHNhbWUgdGltZSBkYWlseSwgYW5kIHRoZW4gOCBob3VycyBsYXRlciwgYW5kCnRoZW4gOCBob3VycyBsYXRlci4gIEFuZCB1c2UgQzxyc3NfZXZlcnlfb3RoZXJfaG91cj4gaWYgdGhlIGZlZWQgdXBkYXRlcwphdCBhYm91dCBJPG4+IG1pbnV0ZXMgcGFzdCBldmVyeSBldmVuIG51bWJlcmVkIGhvdXIsIG9yIGV2ZXJ5IG9kZC1udW1iZXJlZApob3VyLgoKQ2xlYXJseSBJIG1lYW4gdGhlc2UgZnVuY3Rpb25zIHRvIGJlIHVzZWQgaW4gcHJvZ3JhbXMgdGhhdCBhcmUgY3JvbnRhYmJlZAp0byBydW4gYXQgcGFydGljdWxhciBpbnRlcnZhbHMsIGFzIHdpdGggYSBjcm9udGFiIGxpbmUgbGlrZSBvbmUgb2YgdGhlc2U6CgogICAgICAgNTIgKiAqICogKiAgICAgICAgIH4vdGhpbmd5ICAgIyA9PiByc3NfaG91cmx5CiAgICAgICA1MiAyMyAqICogKiAgICAgICAgfi90aGluZ3kgICAjID0+IHJzc19kYWlseQogICAgICAgNTIgNCwxNiAqICogKiAgICAgIH4vdGhpbmd5ICAgIyA9PiByc3NfdHdpY2VfZGFpbHkKICAgICAgIDUyIDUsMTMsMjEgKiAqICogICB+L3RoaW5neSAgICMgPT4gcnNzX3RocmljZV9kYWlseQogICAgICAgNTIgMjMgKiAqIDMgICAgICAgIH4vdGhpbmd5ICAgIyA9PiByc3Nfd2Vla2x5CiAgICAgICA1MiAqLzIgKiAqICogICAgICAgfi90aGluZ3kgICAjID0+IHJzc19ldmVyeV9vdGhlcl9ob3VyCgpDbGVhcmx5IHRoZXJlIGFyZW4ndCBDPHJzc19JPGludGVydmFsPj4gZnVuY3Rpb25zIGZvciBhbGwgdGhlIHNjaGVkdWxpbmcKcG9zc2liaWxpdGllcyBwcm9ncmFtcyAtLSBpZiB5b3UgaGF2ZSBhIHByb2dyYW0gdGhhdCBoYXMgdG8gcnVuIGF0CjZhbSwgOGFtLCAxcG0sIGFuZCA0cG0sIHRoZXJlJ3Mgbm8gZnVuY3Rpb24gZm9yIHRoYXQuICBIb3dldmVyLCB0aGUgYWJvdmUKY3JvbnRhYiBsaW5lcyAob3Igd2l0aCBtaW5vciBjaGFuZ2VzLCBsaWtlIEM8MSw5LDE3PiBpbnN0ZWFkIG9mIEM8NSwxMywyMT4pCmFyZSBqdXN0IGZpbmUgZm9yIGFsbW9zdCBldmVyeSBSU1MgZmVlZCBJJ3ZlIHJ1bi4KCkFuIGFzaWRlOiBJIHJlY29tbWVuZCBydW5uaW5nIHRoZSBwcm9ncmFtcyBhdCBhYm91dCA1MiBtaW51dGVzIHBhc3QgdGhlIGhvdXIsCmdlbmVyYWxseSBpbiBzZXJpZXMsIGxpa2Ugc286CgogICAgICAgNTIgNSwxMywyMSAqICogKiAgIH4vdGhpbmd5IDsgfi9kb2RhZCA7IH4vbWFrZXRoaW5nIDsgfi9naXptbwoKSG93ZXZlciwgeW91ciBtaWxlYWdlIG1heSB2YXJ5LgoKSW5jaWRlbnRhbGx5LCB0aGVzZSBmdW5jdGlvbnMgdGFrZSBubyBhcmd1bWVudHMsIHNvIHRoZSBwYXJlbnRoZXNlcyBhcmUKb3B0aW9uYWwuICBUaGF0IGlzLCB0aGVzZSB0d28gbGluZXMgZG8gdGhlIHNhbWUgdGhpbmc6CgogICAgICAgcnNzX2hvdXJseTsKICAgICAgIHJzc19ob3VybHkoKTsKCj1jdXQKCiMjIFNvbWUgaGFuZHkgaWYgc29tZXdoYXQgYXJiaXRyYXJ5IHNob3J0Y3V0czoKIwpzdWIgaG91cmx5IHsKICBteSAkc2VsZiA9ICRfWzBdOwogICRzZWxmLT51cGRhdGVQZXJpb2QoJ2hvdXJseScpOwogICRzZWxmLT50dGwoJzYwJyk7CiAgcmV0dXJuOwp9CgpzdWIgZGFpbHkgewogIG15ICRzZWxmID0gJF9bMF07CiAgJHNlbGYtPnVwZGF0ZUhvdXJzKCk7CiAgJHNlbGYtPnVwZGF0ZVBlcmlvZCgnZGFpbHknKTsKICAkc2VsZi0+dHRsKCAyNCAqIDYwICk7CiAgcmV0dXJuOwp9CgpzdWIgdHdpY2VfZGFpbHkgIHsKICBteSAkc2VsZiA9ICRfWzBdOwogIG15ICRoID0gKGdtdGltZSggJHNlbGYtPl9ub3dfcm91bmRlZF91cCApKVsyXTsKICAkc2VsZi0+dXBkYXRlSG91cnMoICRoLCAgKCRoKzEyKSAlIDI0ICk7CiAgJHNlbGYtPnVwZGF0ZVBlcmlvZCgnZGFpbHknLDIpOwogICRzZWxmLT50dGwoIDEyICogNjAgKTsKICByZXR1cm47Cn0KCnN1YiB0aHJpY2VfZGFpbHkgIHsKICBteSAkc2VsZiA9ICRfWzBdOwogIG15ICRoID0gKGdtdGltZSggJHNlbGYtPl9ub3dfcm91bmRlZF91cCApKVsyXTsKICAkc2VsZi0+dXBkYXRlSG91cnMoICRoLCAgKCRoKyA4KSAlIDI0LCAgKCRoKzE2KSAlIDI0ICk7CiAgJHNlbGYtPnVwZGF0ZVBlcmlvZCgnZGFpbHknLDMpOwogICRzZWxmLT50dGwoIDggKiA2MCApOwogIHJldHVybjsKfQoKc3ViIHdlZWtseSB7CiAgbXkgJHNlbGYgPSAkX1swXTsKICAkc2VsZi0+dXBkYXRlSG91cnMoKTsKICAkc2VsZi0+dXBkYXRlRGF5cygpOwogICRzZWxmLT51cGRhdGVQZXJpb2QoJ3dlZWtseScsMSk7CiAgJHNlbGYtPnR0bCggNyAqIDI0ICogNjAgKTsKICByZXR1cm47Cn0KCnsKbXkoQG9kZHMsIEBldmVucyk7CmZvcigwIC4uIDIzKSB7IHB1c2ggQHsgICgkXyAmIDEpID8gXEBvZGRzIDogXEBldmVucyAgfSwgJF8gfQoKc3ViIGV2ZXJ5X290aGVyX2hvdXIgewogIG15ICRzZWxmID0gJF9bMF07CiAgbXkgJGggPSAoZ210aW1lKCAkc2VsZi0+X25vd19yb3VuZGVkX3VwICkpWzJdOwogICRzZWxmLT5za2lwSG91cnMoICgkaCAmIDEpID8gQGV2ZW5zIDogQG9kZHMpOyAKICAkc2VsZi0+dXBkYXRlUGVyaW9kKCdkYWlseScsMTIpOwogICRzZWxmLT50dGwoICcxMjAnICk7CiAgcmV0dXJuOwp9Cn0KIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpteSBAZGF5X25hbWVzID0gKAogIlN1bmRheSIsICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5IiwgCik7Cm15ICVpc19kYXlfbmFtZTsKQGlzX2RheV9uYW1le0BkYXlfbmFtZXN9ID0gQGRheV9uYW1lczsKCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKc3ViIF9ub3dfcm91bmRlZF91cCB7CiAgbXkgJHNlbGYgPSAkX1swXTsKICBteSAkbm93ID0gJF9bMF17J19mb3JjZV9ub3cnfSAgICMgdG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzCiAgICB8fCB0aW1lKCk7CiAgaWYoICRDSFVOS19NSU5VVEVTICkgewogICAgbXkgJHR3ZWFrID0gKCRDSFVOS19NSU5VVEVTICogNjApIC0gKCRub3cgJSAoJENIVU5LX01JTlVURVMgKiA2MCkpOwogICAgREVCVUcgYW5kIHByaW50ICJUd2Vha2luZyAkbm93ICgiLCBzY2FsYXIoZ210aW1lKCRub3cpKSwKICAgICAgIiBHTVQpIGJ5ICR0d2VhayBzZWNvbmRzXG4gc28gaXQnbGwgYmUgYW4gZXZlbiAkQ0hVTktfTUlOVVRFUyBtaW51dGVzOiAiOwogICAgJG5vdyArPSAkdHdlYWs7CiAgICBERUJVRyBhbmQgcHJpbnQgIiRub3cgKCIsIHNjYWxhcihnbXRpbWUoJG5vdykpLCAiIEdNVClcbiI7CiAgfSBlbHNlIHsKICAgICMgcHJvYmFibHkgbm90IGEgZ29vZCBpZGVhCiAgICBERUJVRyBhbmQgcHJpbnQgIkFyY2hvcmluZyB0aW1lYmFzZSB0byByaWdodCB0aGlzIG1vbWVudC5cbiI7CiAgfQogIHJldHVybiAkbm93Owp9CgpzdWIgX25vdyB7IHJldHVybiAkX1swXXsnX2ZvcmNlX25vdyd9IHx8IHRpbWUoKSB9CgojLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCj1iYWNrCgo9aGVhZDIgTUlOT1IgRlVOQ1RJT05TCgpUaGVzZSBhcmUgZnVuY3Rpb25zIHRoYXQgeW91IHByb2JhYmx5IHdvbid0IG5lZWQgb2Z0ZW4sIG9yIGF0IGFsbC4gIEkgaW5jbHVkZQp0aGVzZSBmb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzLCBhbmQgc28gdGhhdCBhZHZhbmNlZCB1c2VycyBtaWdodCBmaW5kIHRoZW0KdXNlZnVsIGluIHNvbWUgY2FzZXMuCgo9b3ZlcgoKPWl0ZW0gQzxyc3Nfc2tpcEhvdXJzKCBJPGdtdF9ob3VyX251bSwgZ210X2hvdXJfbnVtLCAuLi4+ICk7PgoKVGhpcyBmdW5jdGlvbiBkaXJlY3RseSBzZXRzIHRoZSBDPHNraXBIb3Vycz4gZWxlbWVudCdzIHZhbHVlcyB0byB0aGUKc3BlY2lmaWVkIEdNVCBob3VyIG51bWJlcnMuCgo9Y3V0CgpzdWIgc2tpcEhvdXJzIHsKICBteSgkc2VsZiwgQGluKSA9IEBfOwogIG15IEBza2lwaG91cnM7CiAgZm9yZWFjaCBteSAkaG91ciAoQGluKSB7CiAgICBuZXh0IHVubGVzcyBkZWZpbmVkICRob3VyOwogICAgQ2FycDo6Y3JvYWsgIlwiJGhvdXJcIiBpc24ndCBhIHZhbGlkIGhvdXIgbnVtYmVyIChtdXN0IGJlIDAtMjMpIgogICAgIHVubGVzcyAkaG91ciA8PSAyNCBhbmQgJGhvdXIgPj0gMDsKICAgIHB1c2ggQHNraXBob3VycywgKCRob3VyID09IDI0KSA/IDAgOiAoMCArICRob3VyKTsKICAgICAjIHRvbGVyYXRlICIyNCIgdG8gbWVhbiAwaC4KICB9CiAgREVCVUcgYW5kIHByaW50ICJTa2lwZGF5czogQHNraXBob3Vyc1xuIjsKICAkc2VsZi0+eydza2lwSG91cnMnfSA9IGpvaW4gJycsCiAgICAiPHNraXBIb3Vycz4iLCBtYXAoICI8aG91cj4kXzwvaG91cj4iLCBAc2tpcGhvdXJzKSwgIjwvc2tpcEhvdXJzPlxuIgogIDsKICByZXR1cm47Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKPWl0ZW0gQzxyc3NfdXBkYXRlSG91cnMoKTs+Cgo9aXRlbSBDPHJzc191cGRhdGVIb3VycyggSTxnbXRfaG91cl9udW0sIGdtdF9ob3VyX251bSwgLi4uPiApOz4KClRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGFyb3VuZCBDPHJzc19za2lwSG91cnM+IC0tIHlvdSBjYWxsCkM8cnNzX3VwZGF0ZUhvdXJzPiB3aXRoIGEgbGlzdCBvZiBHTVQgaG91ciBudW1iZXJzLCBhbmQgCkM8cnNzX3VwZGF0ZUhvdXJzPiB3aWxsIGNhbGwgQzxyc3Nfc2tpcEhvdXJzKDAgLi4gMjMpPiBleGNlcHQgSTx3aXRob3V0Pgp3aGF0ZXZlciBob3VyIG51bWJlcnMgeW91IHNwZWNpZmllZC4KCklmIHlvdSBjYWxsIHdpdGggYW4gZW1wdHkgbGlzdCAoaS5lLiwgQzxyc3NfdXBkYXRlSG91cnMoKTs+KSwgdGhlbgp3ZSB1c2VzIEM8Z210aW1lPiB0byBmaW5kIG91dCB0aGUgY3VycmVudCBob3VyIChhbmQgcm91bmRzIGl0IHVwCmlmIGl0J3MgYWZ0ZXIgNTAgbWludXRlcyBwYXN0KSwgYmFzaWNhbGx5IGp1c3QgYXMgaWYgeW91J2QgY2FsbGVkOgoKICAgICAgcnNzX3VwZGF0ZUhvdXJzKCAoZ210aW1lKDYwMCt0aW1lKCkpKVsyXSApOwoKPWN1dAoKc3ViIHVwZGF0ZUhvdXJzIHsgIyBKdXN0IHRoZSBjb21wbGVtZW50IG9mIHNraXBIb3Vycy4KICAjIEZlZWRpbmcgaXQgKCkgbWVhbnMgdXBkYXRlcyBvbmx5IGF0IHRoaXMgaG91ciBvZiBkYXkKICAjIChUaGlzIGlzIGZpbmUgc2luY2UgeW91J2QgbmV2ZXIgbWVhbiB0byBhY3R1YWxseSBkZWNsYXJlCiAgIyBhIGZlZWQgd2hvc2UgdXBkYXRlSG91cnMgaXMgbmV2ZXIsIGkuZS4gd2hvc2Ugc2tpcEhvdXJzCiAgIyBpcyBhbGwgb2YgMC0yMykKICBteSAkc2VsZiA9IHNoaWZ0OwogIG15ICVob3VyczsKICBAaG91cnN7ICBAXyAgPyAgKG1hcCAkXyswLCBAXykgIDoKICAgICggZ210aW1lKCAkc2VsZi0+X25vd19yb3VuZGVkX3VwICkgKVsyXSAgfSA9ICgpOwogICMgbWlnaHQgYXMgd2VsbCBjb3VudCAxMDo1NyBhcyAxMWgsIGV0YwogIERFQlVHIGFuZCBwcmludCAiSE9VUlMgVVBEQVRFWSA6Iiwgam9pbignICcsIHNvcnQga2V5cyAlaG91cnMpLCAiXG4iOwogICRzZWxmLT5za2lwSG91cnMoIGdyZXAgIWV4aXN0cygkaG91cnN7JF99KSwgMCAuLiAyMyApOwogIHJldHVybjsKfQoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgo9aXRlbSBDPHJzc19za2lwRGF5cygpOz4KCj1pdGVtIEM8cnNzX3NraXBEYXlzKCBJPGdtdF9kYXlfbnVtLCBnbXRfZGF5X251bSwgLi4uPiApOz4KCj1pdGVtIEM8cnNzX3NraXBEYXlzKCBJPGdtdF9kYXlfbmFtZSwgZ210X2RheV9uYW1lLCAuLi4+ICk7PgoKVGhpcyBmdW5jdGlvbiBkaXJlY3RseSBzZXRzIHRoZSBDPHNraXBEYXlzPiBlbGVtZW50J3MgdmFsdWVzIHRvIHRoZQpzcGVjaWZpZWQgd2Vla2RheXMuICBOb3RlIHRoYXQgdGhpcyBhY2NlcHRzIGVpdGhlciBpbnRlZ2VycyAobGlrZQo2IGZvciBTYXR1cmRheSwgU3VuZGF5IGJlaW5nIGVpdGhlciAwIG9yIDcpLCBvciB0aGVpciBleGFjdApFbmdsaXNoIG5hbWVzLgoKSWYgeW91IHVzZSB0aGUgQzxza2lwRGF5cz4gZmllbGQsIGNvbnNpZGVyIHRoYXQgaXQgcmVmZXJzIHRvIGRheXMKZmlndXJlZCBieSBHTVQsIG5vdCBsb2NhbCB0aW1lLiAgRm9yIGV4YW1wbGUsIGlmIEkgc2F5IHRvIHNraXAgU2F0dXJkYXlzLAp0aGF0IG1lYW5zIFNhdHVyZGF5cyBHTVQsIHdoaWNoIGluIG15IHRpbWV6b25lIChBbGFza2EpIHN0YXJ0cwppbiB0aGUgbWlkZGxlIG9mIEZyaWRheSBhZnRlcm5vb24uCgo9Y3V0CgpzdWIgc2tpcERheXMgewogIG15KCRzZWxmLEBpbikgPSBAXzsKICBteSBAc2tpcGRheXM7CiAgZm9yZWFjaCBteSAkZGF5IChAaW4pIHsKICAgIG5leHQgdW5sZXNzIGRlZmluZWQgJGRheTsKICAgIGlmKCRkYXkgPX4gbS9eWzAtN10kL3MpIHsgIyB0b2xlcmF0ZSBudW1lcmljIGRheSBzcGVjcwogICAgICAkZGF5ID0gMCBpZiAkZGF5ID09IDc7CiAgICAgICRkYXkgPSAkZGF5X25hbWVzWyRkYXldCiAgICAgICB8fCBDYXJwOjpjcm9hayAiRGF5IG51bWJlciBcIiRkYXlcIiBpcyBvdXQgb2YgcmFuZ2UgKDAtNikiOwogICAgfSBlbHNlIHsKICAgICAgQ2FycDo6Y3JvYWsgIlwiJGRheVwiIGlzbid0IGEgdmFsaWQgZGF5IG5hbWUgKHVzZSAwLTYgb3Igb25lIG9mOiBAZGF5X25hbWVzKSIKICAgICAgIHVubGVzcyAkaXNfZGF5X25hbWV7JGRheX07CiAgICB9CiAgICBwdXNoIEBza2lwZGF5cywgJGRheTsKICB9OwogIAogIERFQlVHIGFuZCBwcmludCAiU2tpcGRheXM6IEBza2lwZGF5c1xuIjsKICAkc2VsZi0+eydza2lwRGF5cyd9ID0gam9pbiAnJywKICAgICI8c2tpcERheXM+IiwgbWFwKCAiPGRheT4kXzwvZGF5PiIsIEBza2lwZGF5cyksICI8L3NraXBEYXlzPlxuIgogIDsKICByZXR1cm47Cn0KCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKPWl0ZW0gQzxyc3NfdXBkYXRlRGF5cygpOz4KCj1pdGVtIEM8cnNzX3VwZGF0ZURheXMoIEk8Z210X2RheV9udW0sIGdtdF9kYXlfbnVtLCAuLi4+ICk7PgoKPWl0ZW0gQzxyc3NfdXBkYXRlRGF5cyggSTxnbXRfZGF5X25hbWUsIGdtdF9kYXlfbmFtZSwgLi4uPiApOz4KClRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGFyb3VuZCBDPHJzc19za2lwRGF5cz4gLS0geW91IGNhbGwKQzxyc3NfdXBkYXRlRGF5cz4gd2l0aCBhIGxpc3Qgb2YgR01UIGRheSBuYW1lcy9udW1iZXJzLCBhbmQgCkM8cnNzX3VwZGF0ZURheXM+IHdpbGwgY2FsbCBDPHJzc19za2lwRGF5cygwIC4uIDYpPiBleGNlcHQgSTx3aXRob3V0Pgp3aGF0ZXZlciBkYXlzIHlvdSBzcGVjaWZpZWQuCgpJZiB5b3UgY2FsbCB3aXRoIGFuIGVtcHR5IGxpc3QgKGkuZS4sIEM8cnNzX3VwZGF0ZURheXMoKTs+KSwgdGhlbgp3ZSB1c2VzIEM8Z210aW1lPiB0byBmaW5kIG91dCB0aGUgY3VycmVudCBkYXkgKEdNVCEpLCBiYXNpY2FsbHkKanVzdCBhcyBpZiB5b3UnZCBjYWxsZWQ6CgogICAgICByc3NfdXBkYXRlRGF5cyggKGdtdGltZSg2MDArdGltZSgpKSlbNl0gKTsKCgo9Y3V0CgpzdWIgdXBkYXRlRGF5cyB7ICMganVzdCB0aGUgY29tcGxlbWVudCBvZiBza2lwRGF5cwogICMgRmVlZGluZyBpdCAoKSBtZWFucyB1cGRhdGVzIG9ubHkgYXQgdGhpcyBkYXkgb2YgdGhlIHdlZWsKICAjIChUaGlzIGlzIGZpbmUgc2luY2UgeW91J2QgbmV2ZXIgbWVhbiB0byBhY3R1YWxseSBkZWNsYXJlCiAgIyBhIGZlZWQgd2hvc2UgdXBkYXRlRGF5cyBpcyBuZXZlciwgaS5lLiwgd2hvc2UgdXBkYXRlRGF5cwogICMgaXMgYWxsIG9mIE1vbmRheSB0aHJ1IFN1bmRheSkKICBteSAkc2VsZiA9IHNoaWZ0OwogIG15ICVkYXlzOwogIEBkYXlzewogICAgbWFwIHs7CiAgICAgIG0vXlswLTddJC8gPyAkZGF5X25hbWVzWyAoJF8gPT0gNykgPyAwIDogJF8gXQogICAgICA6ICRpc19kYXlfbmFtZXskX30gPyAkXwogICAgICA6IENhcnA6OmNyb2FrICJcIiRfXCIgaXNuJ3QgYSB2YWxpZCBkYXkgbmFtZSAodXNlIDAtNiBvciBvbmUgb2Y6IEBkYXlfbmFtZXMpIgogICAgfQogICAgQF8gPyBAXyA6ICggZ210aW1lKCAkc2VsZi0+X25vd19yb3VuZGVkX3VwICkgKVs2XQogIH0gPSAoKTsKICBERUJVRyBhbmQgcHJpbnQgIkRBWVMgVVBEQVRFWSA6Iiwgam9pbignICcsIHNvcnQga2V5cyAlZGF5cyksICJcbiI7CiAgJHNlbGYtPnNraXBEYXlzKCBncmVwICFleGlzdHMoJGRheXN7JF99KSwgQGRheV9uYW1lcyApOwogIHJldHVybjsKfQoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKPWl0ZW0gQzxyc3NfdXBkYXRlUGVyaW9kKCBJPHBlcmlvZHN0cmluZz4gKTs+CgpUaGlzIGZ1bmN0aW9uIGRpcmVjdGx5IHNldHMgdGhlIEM8c3k6dXBkYXRlUGVyaW9kPiBlbGVtZW50J3MgdmFsdWUgdG8gdGhlCnBlcmlvZCBzcGVjaWZpZWQuICBZb3UgbXVzdCBzcGVjaWZ5IG9uZSBvZiB0aGUgc3RyaW5nczoKInllYXJseSIsICJtb250aGx5IiwgIndlZWtseSIsICJkYWlseSIsICJob3VybHkiLgpJIGFkdmlzZSB1c2luZyAid2Vla2x5IiBvbmx5IGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLCBhbmQKInllYXJseSIsICJtb250aGx5IiBvbmx5IGlmIHlvdSBJPHJlYWxseT4ga25vdyB3aGF0IHlvdSdyZSBkb2luZy4KCj1pdGVtIEM8cnNzX3VwZGF0ZVBlcmlvZCggSTxwZXJpb2RzdHJpbmc+LCBJPGludD4sIEk8YmFzZT4gKTs+CgpUaGlzIGlzIGEgc2hvcnRjdXQgZm9yCkM8PApyc3NfdXBkYXRlUGVyaW9kKEk8cGVyaW9kc3RyaW5nPik7IHJzc191cGRhdGVGcmVxdWVuY3koSTxpbnQ+KQo+PgoKPWl0ZW0gQzxyc3NfdXBkYXRlUGVyaW9kKCBJPHBlcmlvZHN0cmluZz4sIEk8aW50PiwgSTxiYXNlPiApOz4KClRoaXMgaXMgYSBzaG9ydGN1dCBmb3IKQzw8CnJzc191cGRhdGVQZXJpb2QoSTxwZXJpb2RzdHJpbmc+KTsgcnNzX3VwZGF0ZUZyZXF1ZW5jeShJPGludD4pOwpyc3NfdXBkYXRlQmFzZShJPGJhc2U+KQo+PgoKPWN1dAoKc3ViIHVwZGF0ZVBlcmlvZCB7CiAgcmV0dXJuICRfWzBdLT57J3VwZGF0ZVBlcmlvZCd9IGlmIEBfID09IDE7CiAgIyBFbHNlIHdlJ3JlIGEgd3JpdGUgYWNjZXNzb3I6CiAgCiAgbXkoJHNlbGYsICRwZXJpb2QpID0gQF87CiAgJHBlcmlvZCBvciBDYXJwOjpjb25mZXNzKAogICAiV2hhdCBwZXJpb2Q/IHllYXJseS9tb250aGx5L3dlZWtseS9kYWlseS9ob3VybHk/Iik7CgogIGlmKCRwZXJpb2QgPX4gbS9eKHllYXJseXxtb250aGx5fHdlZWtseXxkYWlseXxob3VybHkpJC9zKSB7CiAgICAkc2VsZi0+eyd1cGRhdGVQZXJpb2QnfSA9ICRwZXJpb2Q7CiAgICAkc2VsZi0+dXBkYXRlRnJlcXVlbmN5KCRfWzJdKSBpZiBAXyA+IDI7CQogICAgJHNlbGYtPnVwZGF0ZUJhc2UoJF9bM10pIGlmIEBfID4gMzsKICAgICRzZWxmLT57J19uYW1lc3BhY2VzJ317J3N5J30gPSAkTkFNRVNQQUNFX1NZOwogICAgcmV0dXJuICRwZXJpb2Q7CiAgfSBlbHNlIHsKICAgIENhcnA6OmNvbmZlc3MoCiAgICAgIldoYXQga2luZCBvZiBwZXJpb2QgaXMgXCIkcGVyaW9kXCI/ICBVc2Ugb25lIG9mOiB5ZWFybHl8bW9udGhseXx3ZWVrbHl8ZGFpbHl8aG91cmx5Iik7CiAgfQp9CgojIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KCj1pdGVtIEM8cnNzX3VwZGF0ZUJhc2UoIEk8aXNvX2RhdGVfc3RyaW5nPiApOz4KCj1pdGVtIEM8cnNzX3VwZGF0ZUJhc2UoIEk8ZXBvY2hfdGltZT4gKTs+CgpUaGlzIGZ1bmN0aW9uIGRpcmVjdGx5IHNldHMgdGhlIEM8c3k6dXBkYXRlQmFzZT4gZWxlbWVudCdzIHZhbHVlIHRvIHRoZQptb21lbnQgc3BlY2lmaWVkLiAgSWYgeW91IHBhc3MgaW4gYW4gZXBvY2ggdGltZSwgaXQgaXMgY29udmVydGVkIHRvCmFuIElTTyBkYXRlIHN0cmluZy4KCj1jdXQKCnN1YiB1cGRhdGVCYXNlIHsKICByZXR1cm4gJF9bMF0tPnsndXBkYXRlQmFzZSd9IGlmIEBfID09IDE7CiAgIyBFbHNlIHdlJ3JlIGEgd3JpdGUgYWNjZXNzb3I6CiAgCiAgbXkoJHNlbGYsICR0aGVuKSA9IEBfOwogIGlmKCAkdGhlbiA9fiBtL14tP1xkKyQvcyApIHsKICAgICRzZWxmLT57J3VwZGF0ZUJhc2UnfSA9ICRzZWxmLT5fZXBvY2gyaXNvZGF0ZSgkdGhlbik7CiAgfSBlbHNpZiAoICR0aGVuID1+ICAjIGJhc2ljYWxseSBJU084NjAxCiAgICAgIG08XgogICAgICAgIFxkXGRcZFxkCQkjIHllYXIKICAgICAgICAoPzoKICAgICAgICAgIC1cZFxkCQkJIyBtb250aAogICAgICAgICAgKD86CiAgICAgICAgICAgIC1cZFxkICAjIGRheQogICAgICAgICAgICAoPzoKICAgICAgICAgICAgICBUXGRcZDpcZFxkCSMgaGg6bW0KICAgICAgICAgICAgICAoPzoKICAgICAgICAgICAgICAgIDpcZFxkCQkjIHNlY29uZHMKICAgICAgICAgICAgICAgICg/OgogICAgICAgICAgICAgICAgICBcLlxkKwkJIyBmcmFjdGlvbnMgb2YgYSBzZWNvbmQKICAgICAgICAgICAgICAgICk/CiAgICAgICAgICAgICAgKT8KICAgICAgICAgICAgICAoPzoJCSMgVFogb2Zmc2V0CiAgICAgICAgICAgICAgICBaCQkjIFp1bHUKICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgKD86CQkjIG9yIGJ5IG9mZnNldDoKICAgICAgICAgICAgICAgICAgWy0rXQogICAgICAgICAgICAgICAgICBcZFxkOlxkXGQgICAgICMgaGg6bW0sIHdpdGggbGVhZGluZyAnKycgb3IgJy0nCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKT8KICAgICAgICAgICAgKT8KICAgICAgICAgICk/CiAgICAgICAgICAKICAgICAgICApPwogICAgICAgICAjIFRoZSBtb250aCB3YXMgb3B0aW9uYWwsIGJ1dCB0aGF0CiAgICAgICAgICMgIG1ha2VzICIxOTk0IiBhbWJpZ3VvdXMgLS0gYSB5ZWFyIG9yIGFuIGVwb2NoIHRpbWU/CiAgICAgICAgICMgSSBkb3VidCBhbnlvbmUgd2FudHMgdG8gd3JpdGUgPHVwZGF0ZUJhc2U+MjAwMDwvdXBkYXRlQmFzZT4sCiAgICAgICAgICMgIGVzcCBhcyB0aGUgZGVmYXVsdCBpcyBiYXNpY2FsbHkgPT0gPHVwZGF0ZUJhc2U+MTk3MDwvdXBkYXRlQmFzZT4uCiAgICAgICAgJAogICAgICA+c3gKICApIHsKICAgICRzZWxmLT57J3VwZGF0ZUJhc2UnfSA9ICR0aGVuOwogIH0gZWxzZSB7CiAgICBDYXJwOjpjb25mZXNzKCJXaGF0IGtpbmQgb2YgdXBkYXRlQmFzZSBpcyBcIiR0aGVuXCI/Iik7CiAgfQogIHJldHVybiAkc2VsZi0+eyd1cGRhdGVCYXNlJ307Cn0KCiMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQpzdWIgX2Vwb2NoMmlzb2RhdGUgewogIG15KCRzZWxmLCAkdGltZSkgPSBAXzsKICBteShAdGltZWxpc3QpID0gZ210aW1lKCR0aW1lKTsKICArKyR0aW1lbGlzdFs0XTsKICAkdGltZWxpc3RbNV0gKz0gMTkwMDsKICByZXR1cm4gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkKzAwOjAwIiwKICAgICAgIEB0aW1lbGlzdFsgNSwgICA0LCAgIDMgICwgMiAgICwxICBdKTsKICAgICAgIAp9CgojIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KJVBlcmlvZEFzU2Vjb25kcyA9ICgKICAnaG91cmx5JyA9PiA2MCAqIDYwLAogICdkYWlseScgID0+IDYwICogNjAgKiAyNCwKICAnd2Vla2x5JyA9PiA2MCAqIDYwICogMjQgKiA3LAopOwoKc3ViIF91cGRhdGVCYXNlX2luaXQgewogICMgV2hhdCB0byBkbz8gIFBlZyBpdCBvbiBub3cgcGx1cyBJbnRlcnZhbCwgcm91bmRlZCB1cCB0byBuZXh0IE0tbWludXRlIGludGVydmFsPwogIG15ICRzZWxmID0gJF9bMF07CiAgbXkgJG5vdyA9ICRzZWxmLT5fbm93X3JvdW5kZWRfdXA7CiAgCiAgbXkgJHBlcmlvZF90eXBlID0gJHNlbGYtPnVwZGF0ZVBlcmlvZDsKICBpZiggJHBlcmlvZF90eXBlIGVxICdtb250aGx5JyBvciAkcGVyaW9kX3R5cGUgZXEgJ3llYXJseScpIHsKICAgICRub3cgPSAkc2VsZi0+X2Vwb2NoMmlzb2RhdGUoICRub3cgKTsKICAgIGlmKCRwZXJpb2RfdHlwZSBlcSAneWVhcmx5JykgewogICAgICAkbm93ID1+ICAgICAgIHMvXi4uLi4tLzIwMDAtL3MgfHwgZGllICJTUE9SSzkzOTMxISI7ICMgc2FuaXR5CiAgICB9IGVsc2lmKCRwZXJpb2RfdHlwZSBlcSAnbW9udGhseScpIHsKICAgICAgJG5vdyA9fiBzL14uLi4uLS4uLS8yMDAwLTAxLS9zIHx8IGRpZSAiU1BPUkszNTI4NiEiOyAjIHNhbml0eQogICAgfSBlbHNlIHsKICAgICAgZGllICJTUE9SSyEhISEhOTQ4MjkwNDUiOyAjc2FuaXR5CiAgICB9CiAgICBERUJVRyA+IDFhbmQgcHJpbnQgIlVzaW5nICRub3cgYXMgdXBkYXRlQmFzZS5cbiI7CiAgfSBlbHNlIHsKICAgICMgSXQncyBhIHBsYWluIG9sJyBpbnRlcnZhbC4KICAgIERFQlVHID4gMSBhbmQgcHJpbnQgIlNsYXBwaW5nICRub3cgKCIsIGdtdGltZSgkbm93KS4gIiBpbnRvIDE5NzAuXG4iOwogICAgbXkgJGZyZXEgPSAkc2VsZi0+dXBkYXRlRnJlcXVlbmN5KCk7CiAgICBteSAkaW50ZXJ2YWxfYXNfc2Vjb25kcyA9IGludCgKICAgICAgKCRQZXJpb2RBc1NlY29uZHN7JHBlcmlvZF90eXBlfSB8fGRpZSAiU1BPUks4NDI1OCBvbiAnJHBlcmlvZF90eXBlJyEiKQogICAgICAvICRmcmVxKQogICAgOwogICAgREVCVUcgPiAxIGFuZCBwcmludAogICAgICJTbywgJGZyZXEgdGltZXMgJHBlcmlvZF90eXBlIGlzICRpbnRlcnZhbF9hc19zZWNvbmRzIHNlY29uZHMuLi5cbiI7CiAgICAkbm93ICU9ICRpbnRlcnZhbF9hc19zZWNvbmRzOwogICAgREVCVUcgPiAxIGFuZCBwcmludCAiVXNpbmcgJG5vdyAoIiwgZ210aW1lKCRub3cpLiAiIGFzIHVwZGF0ZUJhc2UuXG4iOwogIH0KICAkc2VsZi0+dXBkYXRlQmFzZSgkbm93KTsKICByZXR1cm47Cn0KCiMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKPWl0ZW0gdGhlIGFjY2Vzc29yIEM8cnNzX3VwZGF0ZUZyZXF1ZW5jeSggSTxpbnRlZ2VyPiApOz4KClRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgc2V0cyB0aGUgQzxzeTp1cGRhdGVGcmVxdWVuY3k+IGVsZW1lbnQncyB2YWx1ZSB0byB0aGUKdmFsdWUgc3BlY2lmaWVkLiAgVGhlIHZhbHVlIGhhcyB0byBiZSBhIG5vbnplcm8gcG9zaXRpdmUgaW50ZWdlci4KCkZvciBleGFtcGxlLCB0aGlzIG1lYW5zIHRoYXQgdGhpcyBmZWVkIHVwZGF0ZXMgYXQvYnkgdGhlIHN0YXJ0IG9mIGV2ZXJ5IGhvdXIKYW5kIDMwIG1pbnV0ZXMgcGFzdDoKCiAgcnNzX3VwZGF0ZUJhc2UoJzIwMDAtMDEtMDFUMDA6MDAtMDA6MDAnKTsKICByc3NfdXBkYXRlRnJlcXVlbmN5KDIpOwogIHJzc191cGRhdGVQZXJpb2QoJ2hvdXJseScpOyAgIyAyKmhvdXJseSBtZWFucyAidHdpY2UgYW4gaG91ciIKClJlY2FsbCB0aGF0IHRoaXMgY2FuIGFsc28gYmUgZG9uZSB3aXRoIHRoZQp0aGUgQzxyc3NfdXBkYXRlUGVyaW9kKCBJPHBlcj4sIEk8ZnJlcT4sIEk8YmFzZT4gKT4gc2hvcnRjdXQsIGxpa2Ugc286CgogIHJzc191cGRhdGVCYXNlKCdob3VybHknLCAyLCAnMjAwMC0wMS0wMVQwMDowMC0wMDowMCcpOwoKPWN1dAoKc3ViIHVwZGF0ZUZyZXF1ZW5jeSB7ICMgc2ltcGxlIGFjY2Vzc29yLCBwbHVzIHRoZSBpbnQoKSB0aGluZwogIGlmKEBfID4gMSkgewogICAgJF9bMF0tPnsndXBkYXRlRnJlcXVlbmN5J30gPSBpbnQoJF9bMV0pIHx8IDE7CiAgfSBlbHNlIHsKICAgICRfWzBdLT57J3VwZGF0ZUZyZXF1ZW5jeSd9CiAgfQp9CgpzdWIgX3VwZGF0ZUZyZXF1ZW5jeV9pbml0IHsgJF9bMF0tPnsndXBkYXRlRnJlcXVlbmN5J30gfHw9IDEgfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpzdWIgX3N5X3VwZGF0ZV9hc194bWwgewogIG15ICRzZWxmID0gJF9bMF07CiAgcmV0dXJuICcnIHVubGVzcyAkc2VsZi0+eyd1cGRhdGVQZXJpb2QnfTsKICAkc2VsZi0+X3VwZGF0ZUZyZXF1ZW5jeV9pbml0KCk7CiAgJHNlbGYtPl91cGRhdGVCYXNlX2luaXQoKTsKICByZXR1cm4gc3ByaW50ZigKCnF7PHN5OnVwZGF0ZUZyZXF1ZW5jeT4lczwvc3k6dXBkYXRlRnJlcXVlbmN5Pgo8c3k6dXBkYXRlUGVyaW9kPiVzPC9zeTp1cGRhdGVQZXJpb2Q+CjxzeTp1cGRhdGVCYXNlPiVzPC9zeTp1cGRhdGVCYXNlPgp9LAogICAgJHNlbGYtPnVwZGF0ZUZyZXF1ZW5jeSwKICAgICRzZWxmLT51cGRhdGVQZXJpb2QsCiAgICAkc2VsZi0+dXBkYXRlQmFzZSwKICApOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgQWxpYXNlczoKc3ViIHNraXBfaG91cnMgICAgICAge3NoaWZ0LT5za2lwSG91cnMoICAgICAgIEBfKX0Kc3ViIHNraXBfZGF5cyAgICAgICAge3NoaWZ0LT5za2lwRGF5cyggICAgICAgIEBfKX0Kc3ViIHVwZGF0ZV9kYXlzICAgICAge3NoaWZ0LT51cGRhdGVEYXlzKCAgICAgIEBfKX0Kc3ViIHVwZGF0ZV9ob3VycyAgICAge3NoaWZ0LT51cGRhdGVIb3VycyggICAgIEBfKX0Kc3ViIHVwZGF0ZV9wZXJpb2QgICAge3NoaWZ0LT51cGRhdGVQZXJpb2QoICAgIEBfKX0Kc3ViIHVwZGF0ZV9iYXNlICAgICAge3NoaWZ0LT51cGRhdGVCYXNlKCAgICAgIEBfKX0Kc3ViIHVwZGF0ZV9mcmVxdWVuY3kge3NoaWZ0LT51cGRhdGVGcmVxdWVuY3koIEBfKX0Kc3ViIHdlYm1hc3RlciAgICAgICAge3NoaWZ0LT53ZWJNYXN0ZXIoICAgICAgIEBfKX0KCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCj1pdGVtIHRoZSBhY2Nlc3NvciBDPHJzc19yZXRlbnRpb24oSTxudW1iZXI+KT4KCklmIHlvdSBhcmUgdXNpbmcgYW4gQzxyc3NfaGlzdG9yeV9maWxlKEk8ZmlsZT4pPiwgdGhlIGhpc3RvcnkgZmlsZSB3aWxsCmFjY3JldGUgYSBsaXN0IG9mIGFsbCBVUkxzIGl0IGhhcyBzZWVuLiAgQnV0IHRvIGtlZXAgdGhpcyBmaWxlIGZyb20gcG90ZW50aWFsbHkKZ2V0dGluZyBpbW1lbnNlLCBpdGVtcyB0aGF0IGhhdmVuJ3QgYmVlbiBzZWVuIGZvciBhIHdoaWxlIGFyZSB0aHJvd24gb3V0LgpUaGUgcGVyaW9kIG9mIHRpbWUgYSBmZWVkJ3MgaXRlbXMgZ28gdW5zZWVuIGJlZm9yZSBlYWNoIGlzIGZvcmdvdHRlbiBpcwpjYWxsZWQgdGhhdCBmZWVkJ3MgQjxyZXRlbnRpb24+LCBhbmQgaXMgZXhwcmVzc2VkIGluIHNlY29uZHMuCgpUaGUgZGVmYXVsdCByZXRlbnRpb24gdmFsdWUgaXMgMzIgZGF5cyAoaS5lLiwgMzIqMjQqNjAqNjAsIHRoZSBudW1iZXIKb2Ygc2Vjb25kcyBpbiAzMiBkYXlzKS4gIElmIHlvdSB3YW50ZWQgdG8gY2hhbmdlIGl0IHRvIGp1c3QgYSB3ZWVrLAp5b3Ugd291bGQgZG8gdGhpcyB3aXRoIEM8cnNzX3JldGVudGlvbig3KjI0KjYwKjYwKT4uCgpBcyBhIHNwZWNpYWwgY2FzZSwgYSB6ZXJvIG9yIG5lZ2F0aXZlIHZhbHVlIGZvciB0aGUgcmV0ZW50aW9uIG1lYW5zCnRvIG5ldmVyIGNsZWFyIGFueXRoaW5nIGZyb20gdGhlIGhpc3RvcnkgZmlsZSwgbm8gbWF0dGVyIGhvdyBsb25nCml0IGhhcyBnb25lIHVuc2Vlbi4KCj1jdXQKCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKPWl0ZW0gQzxyc3NfYWRkX2NvbW1lbnQoIEk8c3RyaW5ncz4gKTs+CgpDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8gYWRkIGV4dHJhIFhNTCBjb21tZW50cyB0byB0aGlzIFJTUyBmaWxlLgpGb3IgZXhhbXBsZSwgaWYgeW91IGNhbGwgdGhpczoKCiAgICAgICAgcnNzX2FkZF9jb21tZW50KAogICAgICAgICAgIk91ciB0ZXJtcyBvZiB1c2U6IGh0dHA6Ly93aGVyZXZlci5pbnQvcnNzdG91Lmh0bWwiLAogICAgICAgICAgIkFueSBxdWVzdGlvbnM/IEFzayBqaW1teUB3aGVyZXZlci5pbnQiLAogICAgICAgICk7CgouLi50aGVuIHRoaXMgUlNTIGZlZWQgd2lsbCBjb250YWluIHRoaXMgWE1MIGZhaXJseSBlYXJseSBvbiBpbiB0aGUgZmlsZToKCiAgICAgICAgPCEtLSBPdXIgdGVybXMgb2YgdXNlOiBodHRwOi8vd2hlcmV2ZXIuaW50L3Jzc3RvdS5odG1sIC0tPgogICAgICAgIDwhLS0gQW55IHF1ZXN0aW9ucz8gQXNrIGppbW15QHdoZXJldmVyLmludCAtLT4KCj1jdXQKCnN1YiBhZGRfY29tbWVudCB7CiAgbXkgJHNlbGYgPSBzaGlmdDsKICBmb3JlYWNoIG15ICRjIChAXykgewogICAgcHVzaCBAeyAkc2VsZi0+eydfY29tbWVudHMnfSB9LCAkYwogICAgIGlmIGRlZmluZWQgJGMgYW5kIGxlbmd0aCAkYyBhbmQgJGMgPX4gbS9cUy87CiAgICAgICMgbm8gcG9pbnQgaW4gaGF2aW5nIGNvbnRlbnRsZXNzIGNvbW1lbnRzCiAgfQogIHJldHVybjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgo9aXRlbSB0aGUgYWNjZXNzb3IgQzxyc3NfY3NzKCBJPHVybD4gKT4KClRoaXMgZGVmaW5lcyB0aGUgZ2l2ZW4gVVJMIGFzIGJlaW5nIHRoZSBYTUwtQ1NTIHN0eWxlc2hlZXQgZm9yIHRoaXMgUlNTCmZlZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiLi9yc3MuY3NzIiBpZiBDPC1lICJyc3MuY3NzIj4gaXMgdHJ1ZSwgb3RoZXJ3aXNlCmlzIHRoZSB2YWx1ZSBodHRwOi8vd3d3LmludGVyZ2xhY2lhbC5jb20vcnNzL3Jzcy5jc3MKCj1pdGVtIHRoZSBhY2Nlc3NvciBDPHJzc194c2woIEk8dXJsPiApPgoKVGhpcyBkZWZpbmVzIHRoZSBnaXZlbiBVUkwgYXMgYmVpbmcgdGhlIFhNTC1YU0wgc3R5bGVzaGVldCBmb3IgdGhpcyBSU1MKZmVlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5vbmUuCgo9aXRlbSBUaGUgYWNjZXNzb3JzCkM8PApyc3NfdXJsKCBJPHN0cmluZz4gKSwgcnNzX3RpdGxlKCBJPHN0cmluZz4gKSwgcnNzX2Rlc2NyaXB0aW9uKCBJPHN0cmluZz4gKQo+PgoKVGhlc2UgZGVmaW5lIHRoaXMgZmVlZCdzIFVSTCwgdGl0bGUsIGFuZCBkZXNjcmlwdGlvbi4gIFRoZXNlIGZ1bmN0aW9ucwphcmUganVzdCBmb3IgY29tcGxldGVuZXNzLCBzaW5jZSBpdCdzIHNpbXBsZXIgdG8ganVzdCBzcGVjaWZ5IGFueS9hbGwgb2YKdGhlc2UgcGFyYW1ldGVycyBpbiB0aGUgY2FsbCB0byBDPHJzc19uZXc+LgoKPWl0ZW0gdGhlIGFjY2Vzc29yIEM8cnNzX3R0bCggSTxudW1iZXI+ICk+CgpUaGlzIHNldHMgdGhlIHBhcmFtZXRlciBvZiB0aGlzIFJTUyBmZWVkJ3MgQzx0dGw+IGVsZW1lbnQsIHdoaWNoCnN1Z2dlc3RzIGhvdyBsb25nIChpbiBtaW51dGVzLCBub3Qgc2Vjb25kcyEpIGFuIFJTUyByZWFkZXIgc2hvdWxkIHdhaXQgYWZ0ZXIgaXQgcG9sbHMKYSBmZWVkIHVudGlsIGl0IHBvbGxzIGl0IGFnYWluLiAgRm9yIGV4YW1wbGUsIEM8cnNzX3R0bCg5MCk+IHdvdWxkIHN1Z2dlc3QKdGhhdCBhIHJlYWRlciBzaG91bGQgbm90IHBvbGwgdGhpcyBmZWVkIG1vcmUgb2Z0ZW4gdGhhbiBldmVyeSA5MCBtaW51dGVzLgoKKFRoaXMgZWxlbWVudCBpcyBzb21ld2hhdCBvYnNvbGVzY2VudCBuZXh0IHRvIHRoZSBuZXdlciBhbmQgbW9yZQppbmZvcm1hdGl2ZSBDPHN5OnVwZGF0ZSo+IGVsZW1lbnRzLCBidXQgaXMgaW5jbHVkZWQgZm9yIGJhY2t3YXJkCmNvbXBhdGFiaWxpdHkuKQoKPWl0ZW0gdGhlIGFjY2Vzc29yIEM8cnNzX2FsbG93X2R1cGxpY2F0ZXMoIEk8Ym9vbGVhbj4gKT4KClRoaXMgY29udHJvbHMgd2hldGhlciBvciBub3QgZHVwbGljYXRlIGl0ZW1zIGFyZSBmaWx0ZXJlZCBvdXQgb3V0IHRoZQpmZWVkLiAgQnkgZGVmYXVsdCB0aGlzIGlzIEk8b24+LiAgTm90ZSB0aGF0IGR1cGxpY2F0ZXMgYXJlIGRldGVjdGVkIG9ubHkKYnkgdGhlaXIgVVJMLCBzbyBpZiB5b3UgY2FsbCB0aGlzOgoKICAgICAgICByc3NfaXRlbSgnaHR0cDovL2Zvby5pbnQvZG9uYXRlJywgIkdpdmUhIik7CiAgICAgICAgcnNzX2l0ZW0oJ2h0dHA6Ly9mb28uaW50L2RvbmF0ZScsICJXZSBuZWVkIG1vbmV5ISIpOwogICAgICAgIHJzc19zYXZlKCdiZWdnaW5nLnJzcycpOwoKLi4udGhlbiBvbmx5IHRoZSBmaXJzdCB3aWxsIGFwcGVhciBpbiB0aGUgZmVlZCwgc2luY2UgdGhlIHNlY29uZCBpdGVtCmhhcyBhIFVSTCB0aGF0IGlzIGFscmVhZHkgYmVpbmcgc2F2ZWQgaW4gdGhpcyBmZWVkLiAgKEhvd2V2ZXIsCkM8cnNzX2l0ZW1fY291bnQ+IGlzIHN0aWxsIDIsIGJlY2F1c2UgZmlsdGVyaW5nIG91dCBkdXBsaWNhdGVzIGlzCnNvbWV0aGluZyB0aGF0IG9ubHkgaGFwcGVucyBhcyB0aGUgZmVlZCBpcyBzYXZlZC4pCgo9aXRlbSB0aGUgYWNjZXNzb3IgQzxyc3NfZG9jcyggSTx1cmw+ICk+CgpUaGlzIHNldHMgdGhlIHZhbHVlIG9mIHRoZSBub3QtZ2VuZXJhbGx5LXVzZWZ1bCBDPGRvYz4gUlNTIGVsZW1lbnQuClRoZSBkZWZhdWx0IHZhbHVlIGlzICIuL2Fib3V0X3Jzcy5odG1sIiBpZiBDPC1lICJhYm91dF9yc3MuaHRtbCI+IGlzCnRydWUsIG90aGVyd2lzZSAiaHR0cDovL3d3dy5pbnRlcmdsYWNpYWwuY29tL3Jzcy9hYm91dC5odG1sIi4KCj1pdGVtIHRoZSBhY2Nlc3NvcnMKQzw8CnJzc19pbWFnZV91cmwoSTx1cmw+KSwgcnNzX2ltYWdlX3dpZHRoKEk8bnVtYmVyPiksCnJzc19pbWFnZV9oZWlnaHQoSTxudW1iZXI+KSwKcnNzX2ltYWdlX3RpdGxlKEk8dGV4dD4pLCByc3NfaW1hZ2VfbGluayhJPHVybD4pLApyc3NfaW1hZ2VfZGVzY3JpcHRpb24oSTx0ZXh0PikKPj4KClRoZXNlIGFyZSBmb3IgbWFudWFsbHkgc2V0dGluZyB0aGUgdmFsdWVzIG9mIHRoaXMgZmVlZCdzIGltYWdlIGVsZW1lbnQncwpzdWJlbGVtZW50czoKCiAgPGltYWdlPgogICAgICAgICAgICAgIDx1cmw+IChyc3NfaW1hZ2VfdXJsKSAgICAgICAgIDwvdXJsPgogICAgICAgICAgICA8d2lkdGg+IChyc3NfaW1hZ2Vfd2lkdGgpICAgICAgIDwvd2lkdGg+CiAgICAgICAgICAgPGhlaWdodD4gKHJzc19pbWFnZV9oZWlnaHQpICAgICAgPC9oZWlnaHQ+CiAgICAgICAgICAgIDx0aXRsZT4gKHJzc19pbWFnZV90aXRsZSkgICAgICAgPC90aXRsZT4KICAgICAgICAgICAgIDxsaW5rPiAocnNzX2ltYWdlX2xpbmspICAgICAgICA8L2xpbms+CiAgICAgIDxkZXNjcmlwdGlvbj4gKHJzc19pbWFnZV9kZXNjcmlwdGlvbikgPC9kZXNjcmlwdGlvbj4KICA8L2ltYWdlPgoKWW91IHJhcmVseSBuZWVkIHRvIGNhbGwgYW55IG9mIHRoZXNlIEM8cnNzX2ltYWdlX0k8d2hhdGV2ZXI+PiBmdW5jdGlvbnMgLS0KdXN1YWxseSBqdXN0IGNhbGxpbmcgQzxyc3NfaW1hZ2UoIEk8dXJsLCBoLCB3PiApOz4gaXMgZW5vdWdoLgoKPWN1dAoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpteSBARG9XICAgPSBxdyhTdW4gTW9uIFR1ZSBXZWQgVGh1IEZyaSBTYXQpOwpteSBATW9udGggPSBxdyhKYW4gRmViIE1hciBBcHIgTWF5IEp1biBKdWwgQXVnIFNlcCBPY3QgTm92IERlYyk7CgpzdWIgX2RhdGVfcmZjODIyIHsKICBteSAkc2VsZiA9IHNoaWZ0OwogIG15IEB0aW1lbGlzdCA9IChAXyA9PSAwKSA/IGdtdGltZSA6IChAXyA9PSAxKSA/IGdtdGltZSgkX1swXSkgOiBAXzsKICAkdGltZWxpc3RbNV0gKz0gMTkwMDsKCiAgcmV0dXJuIHNwcmludGYoCiAgICAgIiVzLCAlMDJkICVzICUwNGQgJTAyZDolMDJkOiUwMmQgR01UIiwKICAgICAgJERvV1skdGltZWxpc3RbNl1dLAogICAgICAgICAgJHRpbWVsaXN0WzNdLAogICAgICAgICAgICAgICAkTW9udGhbJHRpbWVsaXN0WzRdXSwKICAgICAgICAgICAgICAgICAgICAgICBAdGltZWxpc3RbNSwgMiwxLDBdLAogICk7Cn0KCnN1YiBfY2hlY2tfYWdlIHsKICBteSgkc2VsZiwgJGZpbGVuYW1lLCAkbWF4YWdlKSA9IEBfOwogIG15ICRhZ2U7CiAgaWYoJGZpbGVuYW1lIGFuZCAkbWF4YWdlIGFuZCAkbWF4YWdlIDwgKCRhZ2UgPSAtTSAkZmlsZW5hbWUpKSB7CiAgICBDYXJwOjpjYXJwKAogICAgICBzcHJpbnRmICIlcyB3YXJuaW5nIC0gJXMgaXMgZ2V0dGluZyBvbGQgLS0gaXQgaGFzbid0IGNoYW5nZWQgaW4gJTAuMWYgZGF5cyEiLAogICAgICAgIHJlZigkc2VsZikgfHwgJHNlbGYsCiAgICAgICAgJGZpbGVuYW1lLAogICAgICAgICRhZ2UsCiAgICApOwogIH0KICByZXR1cm4gMDsKfQoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCnN1YiBfdmFyaW91c19jb21tZW50cyB7CiAgbXkgJHNlbGYgPSAkX1swXTsKICBteSAkeDsKICByZXR1cm4KICAgIGpvaW4gJycsCiAgICBtYXAgezsgJHggPSAkXzsgJHggPX4gcy8tLS9fXy9nOyAiPCEtLSAkeCAtLT5cbiI7IH0KICAgIEB7ICRzZWxmLT57J19jb21tZW50cyd9IHx8IFtdIH0KICA7Cn0KCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKc3ViIF9tb2R2ZXJzaW9uX2NvbW1lbnQgewogIG15ICRzZWxmID0gJF9bMF07CiAgbXkgJHNlbGZjbGFzcyA9IHJlZigkc2VsZik7CiAgbXkgJHYgPSBldmFsIHsgJHNlbGZjbGFzcy0+VkVSU0lPTiB9IHx8ICRWRVJTSU9OOwogIHJldHVybiAiXG48IS0tIEdlbmVyYXRlZCB3aXRoIFBlcmwncyAkc2VsZmNsYXNzIHYkdiAtLT5cbiI7Cn0KCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKc3ViIF9hY2Nlc3Nvcml6ZSB7ICAjIEEgc2ltcGxlLW1pbmRlZCBtZXRob2QtbWFrZXIKICBubyBzdHJpY3QgJ3JlZnMnOwogIGZvcmVhY2ggbXkgJGF0dHJuYW1lIChAXykgewogICAgbmV4dCBpZiAkYXR0cm5hbWUgPX4gbS86Oi87ICMgYSBoYWNrCiAgICAqe2NhbGxlcigpIC4gJzo6JyAuICRhdHRybmFtZX0gPSBzdWIgewogICAgICB1c2Ugc3RyaWN0OwogICAgICB1bmxlc3MoKEBfID09IDEgb3IgQF8gPT0gMikgYW5kIHJlZiAkX1swXSApIHsKICAgICAgICAkQ2FycDo6Q2FycExldmVsID0gMTsKICAgICAgICBDYXJwOjpjcm9haygKICAgICAgICAgIkFjY2Vzc29yIHVzYWdlOiBcJG9iai0+JGF0dHJuYW1lKCkgb3IgXCRvYmotPiRhdHRybmFtZShcJG5ld192YWx1ZSkiCiAgICAgICAgKTsKICAgICAgfQogICAgICAoQF8gPT0gMSkgPyAgJF9bMF0tPnskYXR0cm5hbWV9CiAgICAgICAgICAgICAgICA6ICgkX1swXS0+eyRhdHRybmFtZX0gPSAkX1sxXSk7CiAgICB9OwogIH0KICAjIFlhIGtub3csIHRoZXkgc2F5IGFjY2Vzc29yaWVzIG1ha2UgdGhlIGVuc2VtYmxlIQogIHJldHVybjsKfQoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpzdWIgeG1sZXNjIHsKICBteSAkc2VsZiA9IHNoaWZ0OwogIG15ICRvdXQgPSBqb2luICcnLCBAXzsKICAkb3V0ID1+IHM8KFteXHgyMFx4MjFceDIzXHgyNFx4MjVceDI3LVx4M2JceDNkXHgzZi1ceDdlXSk+CiAgICAgICAgICAgPCRDb21tb25FbnRzeyQxfSB8fCAoJyYjJy4ob3JkKCQxKSkuJzsnKSA+c2VnOwogIHJldHVybiAkb3V0Owp9CgpzdWIgeG1sZWxlbSB7CiAgbXkgJHNlbGYgPSBzaGlmdDsKICBteSAkZ2kgICA9IHNoaWZ0OwogIHJldHVybiAiPCRnaT4iIC4gJHNlbGYtPnhtbGVzYyhAXykgLiAiPC8kZ2k+IjsKfQoKIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpzdWIgaHRtbDJ0ZXh0IHsKCiAgIyBBIHJ1ZGltZW50YXJ5IEhUTUwgdG9rZW5pemVyLCBhZGFwdGVkIGFuZCBzaW1wbGlmaWVkCiAgIyBmcm9tIEdpc2xlIEFhcydzIEhUTUw6OlBhcnNlciB2Mi4yNS4uLgoKICBsb2NhbCAkXzsKICBteSgkc2VsZiwgQG91dCk7CiAgKCRzZWxmLCAkXykgPSBAXzsKCiAgcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRfOwogIHJldHVybiAkJF8gICBpZiByZWYoJF8pIGVxICdTQ0FMQVInOyAgIyBQYXNzIGEgc2NhbGFyIHJlZiB0byBieXBhc3MhCiAgcmV0dXJuICcnICAgIHVubGVzcyBsZW5ndGggICRfOwoKICBpZiggbS9eW1x4MDAtXHg3ZV0rJC9zIGFuZCAhIG0vWzw+Jl0vcykgewogICAgIyBNb3N0IGNvbW1vbiBjYXNlOiBhIHNpbXBsZSBzdHJpbmcgbmVlZGluZyBubyBIVE1MIHBhcnNpbmcuCiAgICAjIFNvIGp1c3QgY29tcGFjdCBhbmQgdHJpbSB3aGl0ZXNwYWNlLCBhbmQgbW92ZSBvbi4KICAgIHRyL1xuXHJcZlx0IC8gL3M7CiAgICBzLyAkLy9zOwogICAgcy9eIC8vczsKICAgIHJldHVybiAkXzsKICB9CiAgCiAgd2hpbGUoIGxlbmd0aCgkXykgKSB7CiAgICBpZiAoIHNAXihbXiY8XSspQEBzKSB7ICAjIEFueSBwbGFpbnRleHQKICAgICAgREVCVUcgPiA1IGFuZCBwcmludCAiOjogUGxhaW50ZXh0IHskMX1cbiI7CiAgICAgIHB1c2ggQG91dCwgJDE7CiAgICB9IGVsc2lmICggc0BeCiAgICAgICgKICAgICAgICAmXCMKICAgICAgICAoPzoKICAgICAgICAgICg/OiAjIGRlYwogICAgICAgICAgICAoWzAtOV17MSw3fSkKICAgICAgICAgICl8KD86ICMgb3IgaGV4CiAgICAgICAgICAgW3hYXShbMC05YS1mQS1GXXsxLDd9KQogICAgICAgICAgKQogICAgICAgICkKICAgICAgKQogICAgICBcYgogICAgICA7PwogICAgICBAQHN4CiAgICApIHsKICAgICAgREVCVUcgPiA1IGFuZCBwcmludCAiOjogTnVtZXJpYyBlbnQgeyQxfSIsCiAgICAgICAgIGRlZmluZWQoJDIpID8gIiAoZGVjICQyKSIgCiAgICAgICA6IGRlZmluZWQoJDMpID8gIiAoaGV4ICQzKSIgCiAgICAgICA6ICIgKHdlaXJkISkiLAogICAgICAgIlxuIjsKCiAgICAgIGlmKCAgICAgIGRlZmluZWQgJDMgYW5kIGV4aXN0cyAkV2luTGFtZUVudGl0aWVze2hleCgkMyl9ICkgewogICAgICAgICMgaXQncyBhIHdpbmxhbWUgZW50LCBpbiBoZXgKICAgICAgICBERUJVRyA+IDYgYW5kIHByaW50ICIgQ29ycmVjdGluZyB0aGF0IHRvICYjJFdpbkxhbWVFbnRpdGllc3toZXgoJDMpfTtcbiI7CiAgICAgICAgcHVzaCBAb3V0LCBcIiYjJFdpbkxhbWVFbnRpdGllc3toZXgoJDMpfTsiIDsKICAgICAgfSBlbHNpZiggZGVmaW5lZCAkMiBhbmQgZXhpc3RzICRXaW5MYW1lRW50aXRpZXN7MCArICQyfSApIHsKICAgICAgICAjIGl0J3MgYSB3aW5sYW1lIGVudCwgaW4gZGVjaW1hbAogICAgICAgIERFQlVHID4gNiBhbmQgcHJpbnQgIiBDb3JyZWN0aW5nIHRoYXQgdG8gJiMkV2luTGFtZUVudGl0aWVzezAgKyAkMn07XG4iOwogICAgICAgIHB1c2ggQG91dCwgXCImIyRXaW5MYW1lRW50aXRpZXN7MCArICQyfTsiICA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgIyBpdCdzIGEgbm9ybWFsIGVudGl0eQogICAgICAgIERFQlVHID4gNiBhbmQgcHJpbnQgIiBQYXNzaW5nIGl0IHRocnUgYXMgXCIkMTtcIlxuIjsKICAgICAgICBwdXNoIEBvdXQsIFwiJDE7IjsKICAgICAgfQogICAgICAKCiAgICB9IGVsc2lmICggc0BeJihbQS1aYS16XVtBLVphLXowLTldezAsMTB9KVxiKDs/KUBAcykgewoKICAgICAgREVCVUcgPiA1IGFuZCBwcmludCAiOjogTmFtZWQgZW50aXR5IHskMX1cbiI7CiAgICAgIGlmKGV4aXN0cyAkRW50aXRpZXN7JDF9KSB7CiAgICAgICAgcHVzaCBAb3V0LCBcICRFbnRpdGllc3skMX07CiAgICAgIH0gZWxzaWYoZXhpc3RzICRFbnRpdGllc3sgdWNmaXJzdChsYygkMSkpIH0pIHsKICAgICAgICBERUJVRyA+IDYgYW5kIHByaW50ICI6OjogVHJlYXRpbmcgYXMgaWYgaXQgd2VyZSAmIiwKICAgICAgICAgIHVjZmlyc3QobGMoJDEpKSwgIjtcbiI7CiAgICAgICAgcHVzaCBAb3V0LCBcICRFbnRpdGllc3sgdWNmaXJzdChsYygkMSkpIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgREVCVUcgPiA2IGFuZCBwcmludCAiOjo6IFVucmVzb2x2YWJsZSEgIFRyZWF0aW5nIGFzIHBsYWludGV4dFxuIjsKICAgICAgICBwdXNoIEBvdXQsICImJDEiIC4gKCQyIHx8ICcnKTsKICAgICAgfQoKCiAgICAjIFRoaW5ncyB3ZSBqdXN0IGlnbm9yZToKICAgIH0gZWxzaWYoIHNAXig8IVxzKi0tLio/LS1ccyo+KUBAcyApIHsgICMgIk5ldHNjYXBlIiBjb21tZW50cwogICAgICBERUJVRyA+IDUgYW5kIHByaW50ICI6OiBTaW1wbGUgY29tbWVudCB7JDF9XG4iOwogICAgfSBlbHNpZiggc0BeKDxbIT9dW14+XSo+KUBAcyApIHsgIyBkb2N0eXBlLCBQSSwgb3IgYSB3ZWlyZCBjb21tZW50CiAgICAgIERFQlVHID4gNSBhbmQgcHJpbnQgIjo6IERpcmVjdGl2ZS9QSSB7JDF9XG4iOwogICAgfSBlbHNpZiggc0BePC8/KFthLXpBLVpdW2EtekEtWjAtOVwuXDpcX1wtXXswLDcyfSlccyovPz5AQCApIHsKICAgICAgIyBFbmQtdGFnLCBvciBhIHNpbXBsZSBzdGFydC10YWcKICAgICAgcHVzaCBAb3V0LCAnICcgaWYgJElzQmxvY2tNYXJrdXB7bGMgJDF9OwogICAgICBERUJVRyA+IDUgYW5kIHByaW50ICI6OiBTaW1wbGUgdGFnIHskMX0iLAogICAgICAgICRJc0Jsb2NrTWFya3Vwe2xjICQxfSA/ICIgK2JyZWFreSI6ICgpLCAiXG4iOwoKICAgIH0gZWxzaWYgKCAgICAjIGNvbXBsZXggc3RhcnQtdGFnCiAgICAgIHNACiAgICAgICBeCiAgICAgICAoCiAgICAgICAgPAogICAgICAgIChbYS16QS1aXVthLXpBLVowLTlcLlw6XF9cLV17MCw3Mn0pICAjIHRoZSBHLkkuCiAgICAgICAgKD86CiAgICAgICAgICBccysKICAgICAgICAgIFthLXpBLVpdW2EtekEtWjAtOVwuXDpcX1wtXXswLDcyfQogICAgICAgICAgKD86ICAjIEF0dHJpYnV0ZXMgY2FuIGJlIHZhbHVlbGVzcyEKICAgICAgICAgICAgXHMqCiAgICAgICAgICAgID0KICAgICAgICAgICAgXHMqCiAgICAgICAgICAgICg/OiAgICAgICAgICAgICAjIEF0dHJpYnV0ZSB2YWx1ZS4uLgogICAgICAgICAgICAgICg/OgogICAgICAgICAgICAgICAgIlteIl0qIiAgICAgICAjICJmb28gYmFyIgogICAgICAgICAgICAgICl8KD86CiAgICAgICAgICAgICAgICAnW14nXSonICAgICAgICMgJ2ZvbyBiYXInCiAgICAgICAgICAgICAgKXwoPzoKICAgICAgICAgICAgICAgIFtePD5cblxyXHQgXXswLDkwfSAjIGZvb2JhcmJhegogICAgICAgICAgICAgICAgICAjIDkwIGlzIG15IHNhbmUgbGVuZ3RoLWxpbWl0IG9uIHVucXVvdGVkIGF0dHJ2YWx1ZXMKICAgICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICAgICk/CiAgICAgICAgKSogICAjIGFueSBudWJtZXIgb2YgYXR0cmlicwogICAgICAgIFxzKiAgIyBvcHRpb25hbCBlbmRpbmcgd2hpdGVzcGFjZQogICAgICAgIC8/ICAgIyBvcHRpb25hbCBlbXB0aW5lc3MgZmxhZwogICAgICAgID4KICAgICAgICkKICAgICAgIEBAeAogICAgKSB7CiAgICAgIHB1c2ggQG91dCwgJyAnIGlmICRJc0Jsb2NrTWFya3Vwe2xjICQyfTsKICAgICAgREVCVUcgPiA1IGFuZCBwcmludCAiOjogQ29tcGxleCBzdGFydC10YWcgeyQyfSIsCiAgICAgICAgICAkSXNCbG9ja01hcmt1cHtsYyAkMn0gPyAiICticmVha3kiOiAoKSwgIlxuIjsKICAgICAgCiAgICAjIEdldHMgY2FsbGVkIG9ubHkgb24gYWJlcnJhbnQgaW5wdXQsIEkgdGhpbms6CiAgICB9IGVsc2lmKCBzQF4oLilAQHMgKSB7CiAgICAgIERFQlVHID4gNSBhbmQgcHJpbnQgIjo6IExhc3QtcmVzb3J0IHNpbmdsZSBjaGFyYWN0ZXIgeyQxfVxuIjsKICAgICAgcHVzaCBAb3V0LCAkMTsKICAgIAogICAgfSBlbHNlIHsKICAgICAgZGllICJJTVBPU1NJQkxFIHskX31cbiAhISEgIjsgIyBzYW5pdHktY2hlY2sKICAgIH0KICB9CiAgCiAgZm9yZWFjaCBteSAkeCAoQG91dCkgewogICAgaWYoIHJlZiAkeCApIHsKICAgICAgJHggPSAkJHg7CiAgICB9IGVsc2UgeyAgIyBkbyBuZWNlc3NhcnkgZXNjYXBpbmcKICAgICAgJHggPX4gdHIvXG5cclxmXHQgLyAvczsgIyBzbWFzaCB3aGl0ZXNwYWNlCiAgICAgICR4ID0gJHNlbGYtPnhtbGVzYygkeCkgdW5sZXNzICR4ID1+IG0vXlthLXpBLVowLTlfJyIsXC4gXSokL3MKICAgICAgICMgRG9kZ2UgY2FsbGluZyBvbiB0aGUgbW9zdCBjb21tb24gY2FzZSwgaS5lLiwgdGV4dAogICAgICAgIyAgdGhhdCByZWFsbHkgZG9lc24ndCBuZWVkIGFueSBleGN1c2UgYXQgYWxsLgogICAgfQogIH0KCiAgcmV0dXJuIGpvaW4gJycsIEBvdXQ7Cn0KCiMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKJE1JTUVfVHlwZSA9ICdhcHBsaWNhdGlvbi9yc3MreG1sJzsKCiVXaW5MYW1lRW50aXRpZXMgPSAoCiBkbyB7OwogICBteSAkYyA9IDB4ODA7CiAgIG1hcCB7OyAkYysrID0+IChoZXgoJF8pIHx8IDB4MDA3ZSkgfQogICBxdygKMjBhYyAwMDAwIDIwMWEgMDE5MiAyMDFlIDIwMjYgMjAyMCAyMDIxIDAyYzYgMjAzMCAwMTYwIDIwMzkgMDE1MiAwMCAwMTdkIDAwMDAKMDAwMCAyMDE4IDIwMTkgMjAxYyAyMDFkIDIwMjIgMjAxMyAyMDE0IDAyZGMgMjEyMiAwMTYxIDIwM2EgMDE1MyAwMCAwMTdlIDAxNzgKKSMgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICB8Cn0pOwoKX2luaXRfY29tbW9uX2VudHMoKTsKCnN1YiBfaW5pdF9jb21tb25fZW50cyB7CiAgJUNvbW1vbkVudHMgPSAoCiAgICAnJicgPT4gJyZhbXA7JywKICAgICc8JyA9PiAnJmx0OycsCiAgICAnPicgPT4gJyZndDsnLAogICAgJyInID0+ICcmcXVvdDsnLAogICAgKCBtYXAgezsgY2hyKCRfKSA9PiAiICIgfSAwIC4uIDMxICksCiAgICAoIG1hcCB7OyBjaHIoJF8pID0+ICImIyRXaW5MYW1lRW50aXRpZXN7JF99OyIgfSBrZXlzICVXaW5MYW1lRW50aXRpZXMgKSwKICApOwogIHJldHVybjsKfQoKJUVudGl0aWVzID0gKAogIyBIVE1MIGVudGl0aWVzIGdvdHRlbiBmcm9tIHRoZSBIVE1MIERURHMKIAogJ0FhY3V0ZScgPT4gJyYjeGMxOycsICAgICdhYWN1dGUnID0+ICcmI3hlMTsnLCAgICdBY2lyYycgPT4gJyYjeGMyOycsCiAnYWNpcmMnID0+ICcmI3hlMjsnLCAgICAgJ2FjdXRlJyA9PiAnJiN4YjQ7JywgICAgJ0FFbGlnJyA9PiAnJiN4YzY7JywKICdhZWxpZycgPT4gJyYjeGU2OycsICAgICAnQWdyYXZlJyA9PiAnJiN4YzA7JywgICAnYWdyYXZlJyA9PiAnJiN4ZTA7JywKICdhbGVmc3ltJyA9PiAnJiN4MjEzNTsnLCAnQWxwaGEnID0+ICcmI3gzOTE7JywgICAnYWxwaGEnID0+ICcmI3gzYjE7JywKICdhbXAnID0+ICcmI3gyNjsnLCAgICAgICAnYW5kJyA9PiAnJiN4MjIyNzsnLCAgICAnYW5nJyA9PiAnJiN4MjIyMDsnLAogJ2Fwb3MnID0+ICcmI3gyNzsnLCAgICAgICdBcmluZycgPT4gJyYjeGM1OycsICAgICdhcmluZycgPT4gJyYjeGU1OycsCiAnYXN5bXAnID0+ICcmI3gyMjQ4OycsICAgJ0F0aWxkZScgPT4gJyYjeGMzOycsICAgJ2F0aWxkZScgPT4gJyYjeGUzOycsCiAnQXVtbCcgPT4gJyYjeGM0OycsICAgICAgJ2F1bWwnID0+ICcmI3hlNDsnLCAgICAgJ2JkcXVvJyA9PiAnJiN4MjAxZTsnLAogJ0JldGEnID0+ICcmI3gzOTI7JywgICAgICdiZXRhJyA9PiAnJiN4M2IyOycsICAgICdicnZiYXInID0+ICcmI3hhNjsnLAogJ2J1bGwnID0+ICcmI3gyMDIyOycsICAgICdjYXAnID0+ICcmI3gyMjI5OycsICAgICdDY2VkaWwnID0+ICcmI3hjNzsnLAogJ2NjZWRpbCcgPT4gJyYjeGU3OycsICAgICdjZWRpbCcgPT4gJyYjeGI4OycsICAgICdjZW50JyA9PiAnJiN4YTI7JywKICdDaGknID0+ICcmI3gzYTc7JywgICAgICAnY2hpJyA9PiAnJiN4M2M3OycsICAgICAnY2lyYycgPT4gJyYjeDJjNjsnLAogJ2NsdWJzJyA9PiAnJiN4MjY2MzsnLCAgICdjb25nJyA9PiAnJiN4MjI0NTsnLCAgICdjb3B5JyA9PiAnJiN4YTk7JywKICdjcmFycicgPT4gJyYjeDIxYjU7JywgICAnY3VwJyA9PiAnJiN4MjIyYTsnLCAgICAnY3VycmVuJyA9PiAnJiN4YTQ7JywKICdkYWdnZXInID0+ICcmI3gyMDIwOycsICAnRGFnZ2VyJyA9PiAnJiN4MjAyMTsnLCAnZGFycicgPT4gJyYjeDIxOTM7JywKICdkQXJyJyA9PiAnJiN4MjFkMzsnLCAgICAnZGVnJyA9PiAnJiN4YjA7JywgICAgICAnRGVsdGEnID0+ICcmI3gzOTQ7JywKICdkZWx0YScgPT4gJyYjeDNiNDsnLCAgICAnZGlhbXMnID0+ICcmI3gyNjY2OycsICAnZGl2aWRlJyA9PiAnJiN4Zjc7JywKICdFYWN1dGUnID0+ICcmI3hjOTsnLCAgICAnZWFjdXRlJyA9PiAnJiN4ZTk7JywgICAnRWNpcmMnID0+ICcmI3hjYTsnLAogJ2VjaXJjJyA9PiAnJiN4ZWE7JywgICAgICdFZ3JhdmUnID0+ICcmI3hjODsnLCAgICdlZ3JhdmUnID0+ICcmI3hlODsnLAogJ2VtcHR5JyA9PiAnJiN4MjIwNTsnLCAgICdlbXNwJyA9PiAnJiN4MjAwMzsnLCAgICdlbnNwJyA9PiAnJiN4MjAwMjsnLAogJ0Vwc2lsb24nID0+ICcmI3gzOTU7JywgICdlcHNpbG9uJyA9PiAnJiN4M2I1OycsICdlcXVpdicgPT4gJyYjeDIyNjE7JywKICdFdGEnID0+ICcmI3gzOTc7JywgICAgICAnZXRhJyA9PiAnJiN4M2I3OycsICAgICAnRVRIJyA9PiAnJiN4ZDA7JywKICdldGgnID0+ICcmI3hmMDsnLCAgICAgICAnRXVtbCcgPT4gJyYjeGNiOycsICAgICAnZXVtbCcgPT4gJyYjeGViOycsCiAnZXVybycgPT4gJyYjeDIwYWM7JywgICAgJ2V4aXN0JyA9PiAnJiN4MjIwMzsnLCAgJ2Zub2YnID0+ICcmI3gxOTI7JywKICdmb3JhbGwnID0+ICcmI3gyMjAwOycsICAnZnJhYzEyJyA9PiAnJiN4YmQ7JywgICAnZnJhYzE0JyA9PiAnJiN4YmM7JywKICdmcmFjMzQnID0+ICcmI3hiZTsnLCAgICAnZnJhc2wnID0+ICcmI3gyMDQ0OycsICAnR2FtbWEnID0+ICcmI3gzOTM7JywKICdnYW1tYScgPT4gJyYjeDNiMzsnLCAgICAnZ2UnID0+ICcmI3gyMjY1OycsICAgICAnZ3QnID0+ICcmI3gzZTsnLAogJ2hhcnInID0+ICcmI3gyMTk0OycsICAgICdoQXJyJyA9PiAnJiN4MjFkNDsnLCAgICdoZWFydHMnID0+ICcmI3gyNjY1OycsCiAnaGVsbGlwJyA9PiAnJiN4MjAyNjsnLCAgJ0lhY3V0ZScgPT4gJyYjeGNkOycsICAgJ2lhY3V0ZScgPT4gJyYjeGVkOycsCiAnSWNpcmMnID0+ICcmI3hjZTsnLCAgICAgJ2ljaXJjJyA9PiAnJiN4ZWU7JywgICAgJ2lleGNsJyA9PiAnJiN4YTE7JywKICdJZ3JhdmUnID0+ICcmI3hjYzsnLCAgICAnaWdyYXZlJyA9PiAnJiN4ZWM7JywgICAnaW1hZ2UnID0+ICcmI3gyMTExOycsCiAnaW5maW4nID0+ICcmI3gyMjFlOycsICAgJ2ludCcgPT4gJyYjeDIyMmI7JywgICAgJ0lvdGEnID0+ICcmI3gzOTk7JywKICdpb3RhJyA9PiAnJiN4M2I5OycsICAgICAnaXF1ZXN0JyA9PiAnJiN4YmY7JywgICAnaXNpbicgPT4gJyYjeDIyMDg7JywKICdJdW1sJyA9PiAnJiN4Y2Y7JywgICAgICAnaXVtbCcgPT4gJyYjeGVmOycsICAgICAnS2FwcGEnID0+ICcmI3gzOWE7JywKICdrYXBwYScgPT4gJyYjeDNiYTsnLCAgICAnTGFtYmRhJyA9PiAnJiN4MzliOycsICAnbGFtYmRhJyA9PiAnJiN4M2JiOycsCiAnbGFuZycgPT4gJyYjeDIzMjk7JywgICAgJ2xhcXVvJyA9PiAnJiN4YWI7JywgICAgJ2xhcnInID0+ICcmI3gyMTkwOycsCiAnbEFycicgPT4gJyYjeDIxZDA7JywgICAgJ2xjZWlsJyA9PiAnJiN4MjMwODsnLCAgJ2xkcXVvJyA9PiAnJiN4MjAxYzsnLAogJ2xlJyA9PiAnJiN4MjI2NDsnLCAgICAgICdsZmxvb3InID0+ICcmI3gyMzBhOycsICdsb3dhc3QnID0+ICcmI3gyMjE3OycsCiAnbG96JyA9PiAnJiN4MjVjYTsnLCAgICAgJ2xybScgPT4gJyYjeDIwMGU7JywgICAgJ2xzYXF1bycgPT4gJyYjeDIwMzk7JywKICdsc3F1bycgPT4gJyYjeDIwMTg7JywgICAnbHQnID0+ICcmI3gzYzsnLCAgICAgICAnbWFjcicgPT4gJyYjeGFmOycsCiAnbWRhc2gnID0+ICcmI3gyMDE0OycsICAgJ21pY3JvJyA9PiAnJiN4YjU7JywgICAgJ21pZGRvdCcgPT4gJyYjeGI3OycsCiAnbWludXMnID0+ICcmI3gyMjEyOycsICAgJ011JyA9PiAnJiN4MzljOycsICAgICAgJ211JyA9PiAnJiN4M2JjOycsCiAnbmFibGEnID0+ICcmI3gyMjA3OycsICAgJ25ic3AnID0+ICcmI3hhMDsnLCAgICAgJ25kYXNoJyA9PiAnJiN4MjAxMzsnLAogJ25lJyA9PiAnJiN4MjI2MDsnLCAgICAgICduaScgPT4gJyYjeDIyMGI7JywgICAgICdub3QnID0+ICcmI3hhYzsnLAogJ25vdGluJyA9PiAnJiN4MjIwOTsnLCAgICduc3ViJyA9PiAnJiN4MjI4NDsnLCAgICdOdGlsZGUnID0+ICcmI3hkMTsnLAogJ250aWxkZScgPT4gJyYjeGYxOycsICAgICdOdScgPT4gJyYjeDM5ZDsnLCAgICAgICdudScgPT4gJyYjeDNiZDsnLAogJ09hY3V0ZScgPT4gJyYjeGQzOycsICAgICdvYWN1dGUnID0+ICcmI3hmMzsnLCAgICdPY2lyYycgPT4gJyYjeGQ0OycsCiAnb2NpcmMnID0+ICcmI3hmNDsnLCAgICAgJ09FbGlnJyA9PiAnJiN4MTUyOycsICAgJ29lbGlnJyA9PiAnJiN4MTUzOycsCiAnT2dyYXZlJyA9PiAnJiN4ZDI7JywgICAgJ29ncmF2ZScgPT4gJyYjeGYyOycsICAgJ29saW5lJyA9PiAnJiN4MjAzZTsnLAogJ09tZWdhJyA9PiAnJiN4M2E5OycsICAgICdvbWVnYScgPT4gJyYjeDNjOTsnLCAgICdPbWljcm9uJyA9PiAnJiN4MzlmOycsCiAnb21pY3JvbicgPT4gJyYjeDNiZjsnLCAgJ29wbHVzJyA9PiAnJiN4MjI5NTsnLCAgJ29yJyA9PiAnJiN4MjIyODsnLAogJ29yZGYnID0+ICcmI3hhYTsnLCAgICAgICdvcmRtJyA9PiAnJiN4YmE7JywgICAgICdPc2xhc2gnID0+ICcmI3hkODsnLAogJ29zbGFzaCcgPT4gJyYjeGY4OycsICAgICdPdGlsZGUnID0+ICcmI3hkNTsnLCAgICdvdGlsZGUnID0+ICcmI3hmNTsnLAogJ290aW1lcycgPT4gJyYjeDIyOTc7JywgICdPdW1sJyA9PiAnJiN4ZDY7JywgICAgICdvdW1sJyA9PiAnJiN4ZjY7JywKICdwYXJhJyA9PiAnJiN4YjY7JywgICAgICAncGFydCcgPT4gJyYjeDIyMDI7JywgICAncGVybWlsJyA9PiAnJiN4MjAzMDsnLAogJ3BlcnAnID0+ICcmI3gyMmE1OycsICAgICdQaGknID0+ICcmI3gzYTY7JywgICAgICdwaGknID0+ICcmI3gzYzY7JywKICdQaScgPT4gJyYjeDNhMDsnLCAgICAgICAncGknID0+ICcmI3gzYzA7JywgICAgICAncGl2JyA9PiAnJiN4M2Q2OycsCiAncGx1c21uJyA9PiAnJiN4YjE7JywgICAgJ3BvdW5kJyA9PiAnJiN4YTM7JywgICAgJ3ByaW1lJyA9PiAnJiN4MjAzMjsnLAogJ1ByaW1lJyA9PiAnJiN4MjAzMzsnLCAgICdwcm9kJyA9PiAnJiN4MjIwZjsnLCAgICdwcm9wJyA9PiAnJiN4MjIxZDsnLAogJ1BzaScgPT4gJyYjeDNhODsnLCAgICAgICdwc2knID0+ICcmI3gzYzg7JywgICAgICdxdW90JyA9PiAnJiN4MjI7JywKICdyYWRpYycgPT4gJyYjeDIyMWE7JywgICAncmFuZycgPT4gJyYjeDIzMmE7JywgICAncmFxdW8nID0+ICcmI3hiYjsnLAogJ3JhcnInID0+ICcmI3gyMTkyOycsICAgICdyQXJyJyA9PiAnJiN4MjFkMjsnLCAgICdyY2VpbCcgPT4gJyYjeDIzMDk7JywKICdyZHF1bycgPT4gJyYjeDIwMWQ7JywgICAncmVhbCcgPT4gJyYjeDIxMWM7JywgICAncmVnJyA9PiAnJiN4YWU7JywKICdyZmxvb3InID0+ICcmI3gyMzBiOycsICAnUmhvJyA9PiAnJiN4M2ExOycsICAgICAncmhvJyA9PiAnJiN4M2MxOycsCiAncmxtJyA9PiAnJiN4MjAwZjsnLCAgICAgJ3JzYXF1bycgPT4gJyYjeDIwM2E7JywgJ3JzcXVvJyA9PiAnJiN4MjAxOTsnLAogJ3NicXVvJyA9PiAnJiN4MjAxYTsnLCAgICdTY2Fyb24nID0+ICcmI3gxNjA7JywgICdzY2Fyb24nID0+ICcmI3gxNjE7JywKICdzZG90JyA9PiAnJiN4MjJjNTsnLCAgICAnc2VjdCcgPT4gJyYjeGE3OycsICAgICAnc2h5JyA9PiAnJiN4YWQ7JywKICdTaWdtYScgPT4gJyYjeDNhMzsnLCAgICAnc2lnbWEnID0+ICcmI3gzYzM7JywgICAnc2lnbWFmJyA9PiAnJiN4M2MyOycsCiAnc2ltJyA9PiAnJiN4MjIzYzsnLCAgICAgJ3NwYWRlcycgPT4gJyYjeDI2NjA7JywgJ3N1YicgPT4gJyYjeDIyODI7JywKICdzdWJlJyA9PiAnJiN4MjI4NjsnLCAgICAnc3VtJyA9PiAnJiN4MjIxMTsnLCAgICAnc3VwJyA9PiAnJiN4MjI4MzsnLAogJ3N1cDEnID0+ICcmI3hiOTsnLCAgICAgICdzdXAyJyA9PiAnJiN4YjI7JywgICAgICdzdXAzJyA9PiAnJiN4YjM7JywKICdzdXBlJyA9PiAnJiN4MjI4NzsnLCAgICAnc3psaWcnID0+ICcmI3hkZjsnLCAgICAnVGF1JyA9PiAnJiN4M2E0OycsCiAndGF1JyA9PiAnJiN4M2M0OycsICAgICAgJ3RoZXJlNCcgPT4gJyYjeDIyMzQ7JywgJ1RoZXRhJyA9PiAnJiN4Mzk4OycsCiAndGhldGEnID0+ICcmI3gzYjg7JywgICAgJ3RoZXRhc3ltJyA9PiAnJiN4M2QxOycsJ3RoaW5zcCcgPT4gJyYjeDIwMDk7JywKICdUSE9STicgPT4gJyYjeGRlOycsICAgICAndGhvcm4nID0+ICcmI3hmZTsnLCAgICAndGlsZGUnID0+ICcmI3gyZGM7JywKICd0aW1lcycgPT4gJyYjeGQ3OycsICAgICAndHJhZGUnID0+ICcmI3gyMTIyOycsICAnVWFjdXRlJyA9PiAnJiN4ZGE7JywKICd1YWN1dGUnID0+ICcmI3hmYTsnLCAgICAndWFycicgPT4gJyYjeDIxOTE7JywgICAndUFycicgPT4gJyYjeDIxZDE7JywKICdVY2lyYycgPT4gJyYjeGRiOycsICAgICAndWNpcmMnID0+ICcmI3hmYjsnLCAgICAnVWdyYXZlJyA9PiAnJiN4ZDk7JywKICd1Z3JhdmUnID0+ICcmI3hmOTsnLCAgICAndW1sJyA9PiAnJiN4YTg7JywgICAgICAndXBzaWgnID0+ICcmI3gzZDI7JywKICdVcHNpbG9uJyA9PiAnJiN4M2E1OycsICAndXBzaWxvbicgPT4gJyYjeDNjNTsnLCAnVXVtbCcgPT4gJyYjeGRjOycsCiAndXVtbCcgPT4gJyYjeGZjOycsICAgICAgJ3dlaWVycCcgPT4gJyYjeDIxMTg7JywgJ1hpJyA9PiAnJiN4MzllOycsCiAneGknID0+ICcmI3gzYmU7JywgICAgICAgJ1lhY3V0ZScgPT4gJyYjeGRkOycsICAgJ3lhY3V0ZScgPT4gJyYjeGZkOycsCiAneWVuJyA9PiAnJiN4YTU7JywgICAgICAgJ3l1bWwnID0+ICcmI3hmZjsnLCAgICAgJ1l1bWwnID0+ICcmI3gxNzg7JywKICdaZXRhJyA9PiAnJiN4Mzk2OycsICAgICAnemV0YScgPT4gJyYjeDNiNjsnLCAgICAnendqJyA9PiAnJiN4MjAwZDsnLAogJ3p3bmonID0+ICcmI3gyMDBjOycsCik7Cgpmb3JlYWNoIG15ICR0YWduYW1lICggcXd7CiBicgogYWRkcmVzcyBhcHBsZXQgYXJlYSBiYXNlIGJnc291bmQgYmxvY2txdW90ZSBib2R5IGJ1dHRvbiBjYXB0aW9uIGNlbnRlciBjb2wKIGNvbGdyb3VwIGRkIGRlbCBkaXIgZGl2IGRsIGR0IGZpZWxkc2V0IGZvcm0gZnJhbWUgZnJhbWVzZXQgaDEgaDIgaDMgaDQgaDUKIGg2IGhlYWQgaHIgaHRtbCBpZnJhbWUgaWxheWVyIGlucHV0IGlucyBpc2luZGV4IGxhYmVsIGxheWVyIGxlZ2VuZCBsaSBsaW5rCiBsaXN0aW5nIG1hcCBtZW51IG1ldGEgbXVsdGljb2wgbm9mcmFtZXMgbm9sYXllciBub3NjcmlwdCBvYmplY3Qgb2wKIG9wdGdyb3VwIG9wdGlvbiBwIHBhcmFtIHBsYWludGV4dCBwcmUgc2NyaXB0IHNlbGVjdCBzdHlsZSB0YWJsZSB0Ym9keSB0ZAogdGV4dGFyZWEgdGZvb3QgdGggdGhlYWQgdGl0bGUgdHIgdWwgeG1wCn0pIHsgJElzQmxvY2tNYXJrdXB7JHRhZ25hbWV9ID0gMSB1bmxlc3MgZXhpc3RzICRJc0Jsb2NrTWFya3VweyR0YWduYW1lfSB9CgojLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIyBOb3cgdGhlIGZ1bmN0aW9uIGdlbmVyYXRvcnM6CkBFWFBPUlQgPSAoICdnZXRfdXJsJyApOwoKJEVYUE9SVF9UQUdTeydmdW5jdGlvbnMnfSA9IFxARVhQT1JUOyAgIyBqdXN0IGZvciBteSBvd24gYmFja3dhcmQgY29tcGF0Cgpmb3JlYWNoIG15ICRtZXRob2QgKAogIGRvIHsKICAgIG5vIHN0cmljdCAncmVmcyc7CiAgICBteSAldG9faGlkZTsKICAgIEB0b19oaWRle0BIaWRpZXN9ID0gKCk7CiAgICBzb3J0CiAgICAgIGdyZXAgIWV4aXN0cyAkdG9faGlkZXskX30gJiYgIW0vXnJzc18vcwogICAgICAgICYmIG0vXlthLXpdW19BLVphLXowLTldKyQvcyAmJiBkZWZpbmVkICZ7IlhNTDo6UlNTOjpTaW1wbGVHZW46OiRfIn0sCiAgICAgICAga2V5cyAlWE1MOjpSU1M6OlNpbXBsZUdlbjo6CiAgfQopIHsKICBteSAkZnVuY3Rpb24gPSAicnNzXyRtZXRob2QiOwogIERFQlVHID4gMjAgYW5kIHByaW50ICIkbWV0aG9kID0+ICRmdW5jdGlvblxuIjsKICBwdXNoIEBFWFBPUlQsICRmdW5jdGlvbjsKICBubyBzdHJpY3QgJ3JlZnMnOwogIHVubGVzcyggZGVmaW5lZCAmeyRmdW5jdGlvbn0gKSB7CiAgICBERUJVRyA+IDIwIGFuZCBwcmludCAiIERlZmluaW5nICRmdW5jdGlvbiA9PiAkZnVuY3Rpb25cbiI7CiAgICAqeyRmdW5jdGlvbn0gPSBzdWIgewogICAgICB1c2Ugc3RyaWN0ICdyZWZzJzsKICAgICAgdW5zaGlmdCBAXywgKCRSU1Nfb2JqIHx8PSBYTUw6OlJTUzo6U2ltcGxlR2VuOjotPm5ldyk7CiAgICAgIGdvdG8gJnsKICAgICAgICAkX1swXS0+Y2FuKCRtZXRob2QpCiAgICAgICAgfHwgZGllICJXaGVyZSdzICRtZXRob2QgZm9yICRfWzBdPyEiCiAgICAgICAgICAjIGluc2FuZSBlcnJvciwgc2hvdWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzIHNvbWVib2R5CiAgICAgICAgICAjIGdvZXMgdW5kZWZpbmluZyBleGlzdGluZyBtZXRob2RzIQogICAgICB9OwogICAgfTsKICB9Cn0KCnN1YiByc3NfbmV3IHsgJFJTU19vYmogPSBYTUw6OlJTUzo6U2ltcGxlR2VuLT5uZXcoQF8pIH0KREVCVUcgPiAyMCBhbmQgcHJpbnQgIkRvbmUgY29tcGlsaW5nICIsIF9fUEFDS0FHRV9fLCAiLlxuIjsKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoxOwpfX0VORF9fCgo9YmFjawoKPWhlYWQxIFJTUyBWRVJTSU9OCgpSU1MgZmVlZHMgZW1pdHRlZCBieSB0aGlzIG1vZHVsZSBhcmUgYmFzaWNhbGx5IGFjY29yZGluZyB0byB2MC45MiBSU1MsCndpdGggYSB2ZXJ5IGZldyBleHRlbnNpb25zIGZyb20gdjIuMCBSU1MuICBUaGV5IGFyZSBub3QgUkRGIGZpbGVzLgoKPWhlYWQxIFNFRSBBTFNPCgpMPFhNTDo6UlNTPgoKTDxodHRwOi8vbXkubmV0c2NhcGUuY29tL3B1Ymxpc2gvZm9ybWF0cy9yc3MtMC45MS5kdGQ+CgpMPGh0dHA6Ly9ibG9ncy5sYXcuaGFydmFyZC5lZHUvdGVjaC9yc3M+CgpMPGh0dHA6Ly9kaXJlY3RvcnkuZ29vZ2xlLmNvbS9Ub3AvUmVmZXJlbmNlL0xpYnJhcmllcy9MaWJyYXJ5X2FuZF9JbmZvcm1hdGlvbl9TY2llbmNlL1RlY2huaWNhbF9TZXJ2aWNlcy9DYXRhbG9ndWluZy9NZXRhZGF0YS9SREYvQXBwbGljYXRpb25zL1JTUy9TcGVjaWZpY2F0aW9ucy8+CgpMPGh0dHA6Ly9mZWVkdmFsaWRhdG9yLm9yZy8+CgpZb3UgbWlnaHQgYWxzbyBsaWtlIG15IGJvb2sgSTxQZXJsIGFuZCBMV1A+LCB3aGljaCBkaXNjdXNzZXMgdGhlIG1hbnkKc2NyZWVuLXNjcmFwaW5nIHRlY2huaXF1ZXMgdGhhdCB5b3Ugd291bGQgdXNlIGZvciBleHRyYWN0aW5nIGRhdGEgZnJvbQpIVE1MIHRvIG1ha2UgaW50byBSU1MgZmVlZHM6Cgo9b3ZlcgoKPWl0ZW0gTDxodHRwOi8vd3d3Lm9yZWlsbHkuY29tL2NhdGFsb2cvcGVybGx3cC8+Cgo9aXRlbSBMPGh0dHA6Ly93d3cuYW1hem9uLmNvbS9leGVjL29iaWRvcy9BU0lOLzA1OTYwMDE3ODkvPgoKPWl0ZW0gTDxodHRwOi8vd3d3LmFtYXpvbi5jby51ay9leGVjL29iaWRvcy9BU0lOLzA1OTYwMDE3ODkvdD4KCj1pdGVtIEw8aHR0cDovL2ludGVyZ2xhY2lhbC5jb20vZC9zY3JhcGVycz4gLS0gZXhhbXBsZXMgb2YgUGVybApwcm9ncmFtcyB0aGF0IHByb2R1Y2UgUlNTJ3MgKHdoaWNoIGFyZSB2aXNpYmxlIGF0Ckw8aHR0cDovL2ludGVyZ2xhY2lhbC5jb20vcnNzLz4gKQoKPWJhY2sKCgoKPWhlYWQxIENPUFlSSUdIVCBBTkQgRElTQ0xBSU1FUlMKCkNvcHlyaWdodCAoYykgMjAwMyw0IFNlYW4gTS4gQnVya2UuICBBbGwgcmlnaHRzIHJlc2VydmVkLgoKVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCgpUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CndpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgoKUG9ydGlvbnMgb2YgdGhlIGRhdGEgdGFibGVzIGluIHRoaXMgbW9kdWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlCmVudGl0eSBkZWNsYXJhdGlvbnMgaW4gdGhlIFczQyBYSFRNTCBzcGVjaWZpY2F0aW9uLgoKQ3VycmVudGx5IChKYW51YXJ5IDIwMDQpLCB0aGF0J3MgdGhlc2UgdGhyZWU6CgogICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbC1sYXQxLmVudAogICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbC1zcGVjaWFsLmVudAogICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbC1zeW1ib2wuZW50CgpQb3J0aW9ucyBvZiB0aGUgY29kZSBpbiB0aGlzIG1vZHVsZSB3ZXJlIGFkYXB0ZWQgZnJvbSBwYXJ0cyBvZgpHaXNsZSBBYXMncyBMPExXUDo6U2ltcGxlPiBhbmQgdGhlIG9sZCAodjIueCkgdmVyc2lvbiBvZiBoaXMKTDxIVE1MOjpQYXJzZXI+LgoKPWhlYWQxIEFVVEhPUgoKU2VhbiBNLiBCdXJrZSBDPHNidXJrZUBjcGFuLm9yZz4KCj1jdXQKCiogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoKT24gQmFiYmFnZSdzIERpc2Vhc2U6CgpDaGFybGVzIEJhYmJhZ2UsIGFzIChuZWNlc3NhcmlseSkgdGhlIGZpcnN0IHBlcnNvbiB0byB3b3JrIHdpdGggbWFjaGluZXMKdGhhdCBjYW4gYXR0YWNrIHByb2JsZW1zIGF0IGFyYml0cmFyeSBsZXZlbHMgb2YgYWJzdHJhY3Rpb24sIGZlbGwgaW50byBhCnRyYXAgZmFtaWxpYXIgdG8gdG9vbHNtaXRocyBzaW5jZSwgYXMgZGVzY3JpYmVkIGhlcmUgYnkgdGhlIEVuZ2xpc2gKZXRoaWNpc3QsIExvcmQgTW91bHRvbjoKCiJPbmUgb2YgdGhlIHNhZCBtZW1vcmllcyBvZiBteSBsaWZlIGlzIGEgdmlzaXQgdG8gdGhlIGNlbGVicmF0ZWQKbWF0aGVtYXRpY2lhbiBhbmQgaW52ZW50b3IsIE1yIEJhYmJhZ2UuIEhlIHdhcyBmYXIgYWR2YW5jZWQgaW4gYWdlLCBidXQKaGlzIG1pbmQgd2FzIHN0aWxsIGFzIHZpZ29yb3VzIGFzIGV2ZXIuIEhlIHRvb2sgbWUgdGhyb3VnaCBoaXMKd29yay1yb29tcy4gSW4gdGhlIGZpcnN0IHJvb20gSSBzYXcgcGFydHMgb2YgdGhlIG9yaWdpbmFsIENhbGN1bGF0aW5nCk1hY2hpbmUsIHdoaWNoIGhhZCBiZWVuIHNob3duIGluIGFuIGluY29tcGxldGUgc3RhdGUgbWFueSB5ZWFycyBiZWZvcmUKYW5kIGhhZCBldmVuIGJlZW4gcHV0IHRvIHNvbWUgdXNlLiBJIGFza2VkIGhpbSBhYm91dCBpdHMgcHJlc2VudCBmb3JtLgonSSBoYXZlIG5vdCBmaW5pc2hlZCBpdCBiZWNhdXNlIGluIHdvcmtpbmcgYXQgaXQgSSBjYW1lIG9uIHRoZSBpZGVhIG9mCm15IEFuYWx5dGljYWwgTWFjaGluZSwgd2hpY2ggd291bGQgZG8gYWxsIHRoYXQgaXQgd2FzIGNhcGFibGUgb2YgZG9pbmcKYW5kIG11Y2ggbW9yZS4gSW5kZWVkLCB0aGUgaWRlYSB3YXMgc28gbXVjaCBzaW1wbGVyIHRoYXQgaXQgd291bGQgaGF2ZQp0YWtlbiBtb3JlIHdvcmsgdG8gY29tcGxldGUgdGhlIENhbGN1bGF0aW5nIE1hY2hpbmUgdGhhbiB0byBkZXNpZ24gYW5kCmNvbnN0cnVjdCB0aGUgb3RoZXIgaW4gaXRzIGVudGlyZXR5LCBzbyBJIHR1cm5lZCBteSBhdHRlbnRpb24gdG8gdGhlCkFuYWx5dGljYWwgTWFjaGluZS4nIgoKIkFmdGVyIGEgZmV3IG1pbnV0ZXMnIHRhbGssIHdlIHdlbnQgaW50byB0aGUgbmV4dCB3b3JrLXJvb20sIHdoZXJlIGhlCnNob3dlZCBhbmQgZXhwbGFpbmVkIHRvIG1lIHRoZSB3b3JraW5nIG9mIHRoZSBlbGVtZW50cyBvZiB0aGUgQW5hbHl0aWNhbApNYWNoaW5lLiBJIGFza2VkIGlmIEkgY291bGQgc2VlIGl0LiAnSSBoYXZlIG5ldmVyIGNvbXBsZXRlZCBpdCwnIGhlCnNhaWQsICdiZWNhdXNlIEkgaGl0IHVwb24gYW4gaWRlYSBvZiBkb2luZyB0aGUgc2FtZSB0aGluZyBieSBhIGRpZmZlcmVudAphbmQgZmFyIG1vcmUgZWZmZWN0aXZlIG1ldGhvZCwgYW5kIHRoaXMgcmVuZGVyZWQgaXQgdXNlbGVzcyB0byBwcm9jZWVkCm9uIHRoZSBvbGQgbGluZXMuJyBUaGVuIHdlIHdlbnQgaW50byB0aGUgdGhpcmQgcm9vbS4gVGhlcmUgbGF5IHNjYXR0ZXJlZApiaXRzIG9mIG1lY2hhbmlzbSwgYnV0IEkgc2F3IG5vIHRyYWNlIG9mIGFueSB3b3JraW5nIG1hY2hpbmUuIFZlcnkKY2F1dGlvdXNseSBJIGFwcHJvYWNoZWQgdGhlIHN1YmplY3QsIGFuZCByZWNlaXZlZCB0aGUgZHJlYWRlZCBhbnN3ZXIsCidJdCBpcyBub3QgY29uc3RydWN0ZWQgeWV0LCBidXQgSSBhbSB3b3JraW5nIG9uIGl0LCBhbmQgaXQgd2lsbCB0YWtlCmxlc3MgdGltZSB0byBjb25zdHJ1Y3QgaXQgYWx0b2dldGhlciB0aGFuIGl0IHdvdWxkIGhhdmUgdG9rZW4gdG8KY29tcGxldGUgdGhlIEFuYWx5dGljYWwgTWFjaGluZSBmcm9tIHRoZSBzdGFnZSBpbiB3aGljaCBJIGxlZnQgaXQuJyBJCnRvb2sgbGVhdmUgb2YgdGhlIG9sZCBtYW4gd2l0aCBhIGhlYXZ5IGhlYXJ0LiIKCiJXaGVuIGhlIGRpZWQgYSBmZXcgeWVhcnMgbGF0ZXIsIG5vdCBvbmx5IGhhZCBoZSBjb25zdHJ1Y3RlZCBubyBtYWNoaW5lLApidXQgdGhlIHZlcmRpY3Qgb2YgYSBqdXJ5IG9mIGtpbmQgYW5kIHN5bXBhdGhldGljIHNjaWVudGlmaWMgbWVuIHdobwp3ZXJlIGRlcHV0ZWQgdG8gcHJvbm91bmNlIHVwb24gd2hhdCBoZSBoYWQgbGVmdCBiZWhpbmQgaGltLCBlaXRoZXIgaW4KcGFwZXJzIG9yIGluIG1lY2hhbmlzbSwgd2FzIHRoYXQgZXZlcnl0aGluZyB3YXMgdG9vIGluY29tcGxldGUgb2YgYmUKY2FwYWJsZSBvZiBiZWluZyBwdXQgdG8gYW55IHVzZWZ1bCBwdXJwb3NlLiIKCltMb3JkIE1vdWx0b24sICJUaGUgaW52ZW50aW9uIG9mIGFsZ29yaXRobXMsIGl0cyBnZW5lc2lzLCBhbmQgZ3Jvd3RoIiwKaW4gRy4gQy4gS25vdHQsIGVkLiwgIk5hcGllciB0ZXJjZW50ZW5hcnkgbWVtb3JpYWwgdm9sdW1lIiAoTG9uZG9uLAoxOTE1KSwgcC4gMS0yNDsgcXVvdGVkIGluIENoYXJsZXMgQmFiYmFnZSAiUGFzc2FnZSBmcm9tIHRoZSBMaWZlIG9mIGEKUGhpbG9zb3BoZXIiLCBNYXJ0aW4gQ2FtcGJlbGwtS2VsbHksIGVkLiAoUnV0Z2VycyBVLiBQcmVzcyBhbmQgSUVFRQpQcmVzcywgMTk5NCksIHAuIDM0XS4KCiAtKi0KCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGFfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ1NpZHN0IMOmbmRyZWRlIGFydGlrbGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ055ZXN0ZSBhcnRpa2xlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnVG9wIDEwIGFydGlrbGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAnVW5kZXJrYXRlZ29yaSBhZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ0luZ2VuIHJhdGUgdmFsZ3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAnU3RhcnQgZGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnU3RhcnQgbcOlbmVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IHllYXInfSA9ICdTdGFydCDDpXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIGRheSd9ID0gJ1NsdXQgZGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBtb250aCd9ID0gJ1NsdXQgbcOlbmVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB5ZWFyJ30gPSAnU2x1dCDDpXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnVGFrIGZvciBkaW4gc3RlbW1lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ0R1IGhhciBhbGxlcmVkZSBzdGVtdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnR29ka2VuZHQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ1ZpbCBibGl2ZSB2aXN0IHNvbSBrb21tZW50YXIgaSBFeHBsb3JlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVpY2sgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yaWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1N0ZW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCB1cGRhdGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3JkJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUUZ1bGx0ZXh0J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyAlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRRXhwbG9yZXIKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRWm9vbQoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHlvdXIgb3duIGxvZyB0ZXh0IGZvciBQR1AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbSB0ZXh0IGZvciB0aGUgcGFnZSBzaG93biB0byBjdXN0b21lcnMgdGhhdCBoYXZlIG5vIHRpY2tldHMgeWV0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBmcm9udC1lbmQgKEhUTUwpIHRoZW1lIHRvIGJlIHVzZWQgYnkgdGhlIGFnZW50cyBhbmQgY3VzdG9tZXJzLiBUaGUgZGVmYXVsdCB0aGVtZXMgYXJlIFN0YW5kYXJkIGFuZCBMaXRlLiBJZiB5b3UgbGlrZSwgeW91IGNhbiBhZGQgeW91ciBvd24gdGhlbWUuIFBsZWFzZSByZWZlciB0aGUgYWRtaW5pc3RyYXRvciBtYW51YWwgbG9jYXRlZCBhdCBodHRwOi8vZG9jLm90cnMub3JnLy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEgZm9yIGFydGljbGVzIHRvIGFkZCBhIG5ldyBhcnRpY2xlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEwIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTEgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEzIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTQgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE2IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMiBmb3IgYXJ0aWNsZXMgdG8gYWRkIGEgbmV3IGFydGljbGUgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMgZm9yIGFydGljbGVzIHRvIGFkZCBhIG5ldyBhcnRpY2xlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDYgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA3IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDkgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1vZHVsZSB1c2VkIHRvIHN0b3JlIHRoZSBzZXNzaW9uIGRhdGEuIFdpdGggIkRCIiB0aGUgZnJvbnRlbmQgc2VydmVyIGNhbiBiZSBzcGxpdHRlZCBmcm9tIHRoZSBkYiBzZXJ2ZXIuICJGUyIgaXMgZmFzdGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgcGF0aCBzZXBhcmF0b3IuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2tzZWFyY2ggc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2VrZXkgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZSAqX0ZBUS5wbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICdOeSBGQVEgQXJ0aWtlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoaXMgdG8geWVzIGlmIHlvdSB0cnVzdCBpbiBhbGwgeW91ciBwdWJsaWMgYW5kIHByaXZhdGUgcGdwIGtleXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGNlcnRpZmllZCB3aXRoIGEgdHJ1c3RlZCBzaWduYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwgb2YgdGhlIGFkbWluaXN0cmF0b3IuIERlcGVuZGluZyBvbiB0aGUgY29uZmlnIGxldmVsLCBzb21lIHN5c2NvbmZpZyBvcHRpb25zIHdpbGwgYmUgbm90IHNob3duLiBUaGUgY29uZmlnIGxldmVscyBhcmUgaW4gaW4gYXNjZW5kaW5nIG9yZGVyOiBFeHBlcnQsIEFkdmFuY2VkLCBCZWdpbm5lci4gVGhlIGhpZ2hlciB0aGUgY29uZmlnIGxldmVsIGlzIChlLmcuIEJlZ2lubmVyIGlzIHRoZSBoaWdoZXN0KSwgdGhlIGxlc3MgbGlrZWx5IGlzIGl0IHRoYXQgdGhlIHVzZXIgY2FuIGFjY2lkZW50YWxseSBjb25maWd1cmUgdGhlIHN5c3RlbSBpbiBhIHdheSB0aGF0IGl0IGlzIG5vdCB1c2FibGUgYW55IG1vcmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgV1lTSVdZRyBlZGl0b3IgaW4gYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGltZSB1c2UgY29tcGxldGUgZGVzY3JpcHRpb24gKGRheXMsIGhvdXJzLCBtaW51dGVzKSwgaWYgc2V0IHRvICJZZXMiOyBvciBqdXN0IGZpcnN0IGxldHRlciAoZCwgaCwgbSksIGlmIHNldCB0byAiTm8iLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgbmVlZHMgbWluLiBvbmUgcGVybWlzc2lvbiBncm91cCEnfSA9ICdFbiBrYXRlZ29yaSBiZWjDuHZlciBtaW5kc3QgZW4gcmV0dGlnaGVkc2dydXBwZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHdoaWNoIGNhbiBhY2Nlc3MgdGhpcyBjYXRlZ29yeS4nfSA9ICdBZ2VudGdydXBwZXIgc29tIGthbiB0aWxnw6UgZGVubmUga2F0ZWdvcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3JpZXMnfSA9ICdLYXRlZ29yaWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbFNlYXJjaCd9ID0gJ0RldGFsamVyZXQgc8O4Z25pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5J30gPSAnRkFRIEthdGVnb3JpZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE5ld3MgKFRvcCAxMCknfSA9ICdGQVEgTnloZWRlciAoVG9wIDEwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTmV3cyAobmV3IGNyZWF0ZWQpJ30gPSAnRkFRIE55aGVkZXIgKG55b3ByZXR0ZXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOZXdzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJ0ZBUSBOeWhlZGVyIChzaWRzdCDDpm5kcmVkZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY2F0ZWdvcnkgYWNjZXNzaWJsZS4gVG8gY3JlYXRlIGFuIGFydGljbGUgeW91IG5lZWQgYWNjZXNzIHRvIGF0IGxlYXN0IG9uZSBjYXRlZ29yeS4gUGxlYXNlIGNoZWNrIHlvdXIgZ3JvdXAvY2F0ZWdvcnkgcGVybWlzc2lvbiB1bmRlciAtY2F0ZWdvcnkgbWVudS0hJ30gPSAnRGVyIGVyIGlra2UgdmFsZ3Qga2F0ZWdvcmkuIEZvciBhdCBvcHJldHRlIGVuIG55IGFydGlrZWwgc2thbCBkdSBoYXZlIGFkZ2FuZyB0aWwgbWluZHN0IGVuIGthdGVnb3JpLiBUamVrIGRpbmUgR3J1cHBlL0thdGVnb3JpIHJldHRpZ2hlZGVyIHVuZGVyIC1LYXRlZ29yaSBtZW51ZW4tISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWlja1NlYXJjaCd9ID0gJ1PDuGduaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YkNhdGVnb3JpZXMnfSA9ICdVbmRlcmthdGVnb3JpZXInOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnaW50ZXJuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ8O2ZmZlbnRsaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsJ30gPSAnZXh0ZXJuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdGQVEtTnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ1p1bGV0enQgZ2XDpG5kZXJ0ZSBGQVEtQXJ0aWtlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdadWxldHp0IGVyc3RlbGx0ZSBGQVEtQXJ0aWtlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnVG9wIDEwIEZBUS1BcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAnVW50ZXJrYXRlZ29yaWUgdm9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnS2VpbmUgQmV3ZXJ0dW5nIGF1c2dld8OkaGx0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICfDtmZmZW50bGljaCAoQWxsZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ2V4dGVybiAoS3VuZGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICdpbnRlcm4gKEFnZW50KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdTdGFydCBUYWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdTdGFydCBNb25hdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnU3RhcnQgSmFocic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAnRW5kIFRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdFbmQgTW9uYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICdFbmQgSmFocic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICdWaWVsZW4gRGFuayBmw7xyIElocmUgQmV3ZXJ0dW5nISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ1NpZSBoYWJlbiBiZXJlaXRzIGFiZ2VzdGltbXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnRkFRLUFydGlrZWwtQXVzZHJ1Y2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnRkFRLUFydGlrZWwgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdGQVEtQXJ0aWtlbCAobmV1IGVyc3RlbGx0ZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJ0ZBUS1BcnRpa2VsIChha3R1YWxpc2llcnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdGQVEtS2F0ZWdvcmllIGFrdHVhbGlzaWVydCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJ0ZBUS1LYXRlZ29yaWUgaGluenVnZWbDvGd0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICdFaW5lIEthdGVnb3JpZSBiZW7DtnRpZ3QgZWluZW4gTmFtZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICdEaWVzZSBLYXRlZ29yaWUgZXhpc3RpZXJ0IGJlcmVpdHMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdGQVEtU3ByYWNoZSBoaW56dWdlZsO8Z3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ0ZBUS1TcHJhY2hlIGFrdHVhbGlzaWVydCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnRGVyIE5hbWUgaXN0IGVyZm9yZGVybGljaCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdEaWVzZSBTcHJhY2hlIGV4aXN0aWVydCBiZXJlaXRzISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ0ZBUS1BcnRpa2VsIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnRWluZSBLYXRlZ29yaWUgaXN0IGVyZm9yZGVybGljaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdGcmVpZ2FiZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdGQVEtS2F0ZWdvcmllbi1WZXJ3YWx0dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJ0thdGVnb3JpZSBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdLYXRlZ29yaWUgbMO2c2NoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdLYXRlZ29yaWUgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ0thdGVnb3JpZSBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICdXaXJkIGltIEV4cGxvcmVyIGFscyBLb21tZW50YXIgYW5nZXplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1fDpGhsZW4gU2llIG1pbmRlc3RlbnMgZWluZSBCZXJlY2h0aWd1bmdzZ3J1cHBlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnQWdlbnRlbi1HcnVwcGVuLCBkaWUgYmVyZWNodGlndCBzaW5kLCBhdWYgRkFRLUFydGlrZWwgaW4gZGllc2VyIEthdGVnb3JpZSB6dXp1Z3JlaWZlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ1dvbGxlbiBTaWUgZGllc2UgS2F0ZWdvcmllIHdpcmtsaWNoIGzDtnNjaGVuPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9ICdTaWUga8O2bm5lbiBkaWVzZSBLYXRlZ29yaWUgbmljaHQgbMO2c2NoZW4uIFNpZSB3aXJkIGluIG1pbmRlc3RlbnMgZWluZW0gRkFRLUFydGlrZWwgdmVyd2VuZGV0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ0RpZXNlIEthdGVnb3JpZSB3aXJkIGluIGRlbiBmb2xnZW5kZW4gRkFRLUFydGlrZWxuIHZlcndlbmRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdEaWVzZSBLYXRlZ29yaWUgaXN0IGVpbmUgRWx0ZXJuLUthdGVnb3JpZSBmw7xyIGZvbGdlbmRlIEthdGVnb3JpZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnV29sbGVuIFNpZSBkaWVzZW4gRkFRLUFydGlrZWwgd2lya2xpY2ggbMO2c2NoZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRkFRLUV4cGxvcmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ1NjaG5lbGxzdWNoZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICdFcndlaXRlcnRlIFN1Y2hlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdVbnRlcmthdGVnb3JpZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnRkFRLUFydGlrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICdLZWluZSBVbnRlcmthdGVnb3JpZW4gZ2VmdW5kZW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJ0tlaW5lIEZBUS1Kb3VybmFsZGF0ZW4gZ2VmdW5kZW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0ZBUS1TcHJhY2hlbi1WZXJ3YWx0dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0gJ1ZlcndlbmRlbiBTaWUgZGllc2VzIEZlYXR1cmUgd2VubiBTaWUgbWl0IHZlcnNjaGllZGVuZW4gU3ByYWNoZW4gYXJiZWl0ZW4gd29sbGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICdTcHJhY2hlIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSd9ID0gJ1NwcmFjaGUgTMO2c2NoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnU3ByYWNoZSBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnU3ByYWNoZSBCZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nfSA9ICdXb2xsZW4gU2llIGRpZXNlIFNwcmFjaGUgd2lya2xpY2ggbMO2c2NoZW4/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9ICdTaWUga8O2bm5lbiBkaWVzZSBTcHJhY2hlIG5pY2h0IGzDtnNjaGVuLiBTaWUgd2lyZCBpbiBtaW5kZXN0ZW5zIGVpbmVtIEZBUS1BcnRpa2VsIHZlcndlbmRldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdEaWVzZSBTcHJhY2hlIHdpcmQgaW4gZGVuIGZvbGdlbmRlbiBGQVEtQXJ0aWtlbG4gdmVyd2VuZGV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnS29udGV4dC1FaW5zdGVsbHVuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ0ZBUS1BcnRpa2VsIHBybyBTZWl0ZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgZGF0YSBmb3VuZC4nfSA9ICdLZWluZSBGQVEtRGF0ZW4gZ2VmdW5kZW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtSW5mbyd9ID0gJ0ZBUSBJbmZvcm1hdGlvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnQmV3ZXJ0dW5nZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ0ZBUS1Wb2xsdGV4dCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdGQVEgU3VjaGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnRkFRLUluZm9ybWF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ0Jld2VydHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcgJSd9ID0gJ0Jld2VydHVuZyAlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAndm9uIDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnS2VpbmUgQmV3ZXJ0dW5nZW4gZ2VmdW5kZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdLZWluZSBCZXdlcnR1bmdlbiBnZWZ1bmRlbiEgU2VpZW4gU2llIGRlciBlcnN0ZSBkZXIgZGllc2VuIEZBUS1BcnRpa2VsIGJld2VydGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnQXR0YWNobWVudCBIZXJ1bnRlcmxhZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0gJ1dpZSBoaWxmcmVpY2ggd2FyIGRpZXNlciBBcnRpa2VsPyBCaXR0ZSBnZWJlbiBTaWUgSWhyZSBCZXdlcnR1bmcgYWIgdW5kIGhlbGZlbiBTaWUgbWl0IGRpZSBRdWFsaXTDpHQgZGVyIEZBUS1EYXRlbmJhbmsgenUgdmVyYmVzc2Vybi4gVmllbGVuIERhbmshJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnbmljaHQgaGlsZnJlaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ3NlaHIgaGlsZnJlaWNoJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnRkFRLVRleHQgZWluZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0ZBUS1MaW5rIGVpbmbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnRkFRLVRleHQgJiBMaW5rIGVpbmbDvGdlbic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ0tlaW5lIEZBUS1BcnRpa2VsIGdlZnVuZGVuLic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ1ZvbGx0ZXh0LVN1Y2hlIGluIEZBUS1BcnRpa2VsbiAoei4gQi4gIkpvaG4qbiIgb3IgIldpbGwqIiknOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhaWxzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnU3VjaGUgbmFjaCBBcnRpa2VsbiBtaXQgU2NobMO8c3NlbHfDtnJ0ZXJuJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFFeHBsb3JlcgoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICfDlmZmZW50bGljaCc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVpvb20KCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJ0VpbiBGaWx0ZXIgenVyIGF1dG9tYXRpc2NoZW4gR2VuZXJpZXJ1bmcgdm9uIEZBUS1MaW5rcywgd2VubiBlaW4gSGlud2VpcyBhdWYgZWluZW4gRkFRLUFydGlrZWwgaWRlbnRpZml6aWVydCB3aXJkLiBEYXMgRWxlbWVudCBJbWFnZSBlcmxhdWJ0IHp3ZWkgRWluZ2FiZWZvcm1lbjogRXJzdGVucyBkZXIgTmFtZSBlaW5lcyBJY29ucyAoei4gQi4gZmFxLnBuZykuIEluIGRpZXNlbSBGYWxsIHdpcmQgYXVmIGRhcyBHcmFmaWstVmVyemVpY2huaXMgZGVzIE9UUlMgenVnZWdyaWZmZW4uIEFscyB6d2VpdGUgTcO2Z2xpY2hrZWl0IGthbm4gbWFuIGFiZXIgYXVjaCBkZW4gZGlyZWt0ZW4gTGluayB6dXIgR3JhZmlrIGFuZ2ViZW4gKHouIEIuIGh0dHA6Ly9vdHJzLm9yZy9mYXEucG5nKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDU1MtRmFyYmUgZsO8ciBkYXMgQmV3ZXJ0dW5ncy1FcmdlYm5pcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0thdGVnb3JpZW4tVmVyd2FsdHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdEZXppbWFsc3RlbGxlbiBkZXMgRXJnZWJuaXNzZXMgZGVyIEFydGlrZWxiZXdlcnR1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICdSb290LUthdGVnb3JpZS1OYW1lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnU3RhbmRhcmQtU3ByYWNoZSBmw7xyIEZBUS1BcnRpa2VsIGltIEVpbnplbC1TcHJhY2gtTW9kdXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdTdGFuZGFyZC1Qcmlvcml0w6R0IHZvbiBUaWNrZXRzIGbDvHIgZGllIEZyZWlnYWJlIHZvbiBGQVEtQXJ0aWtlbG4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICdTdGFuZGFyZCBTdGF0dXMgZWluZXMgRkFRLUVpbnRyYWdzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnU3RhbmRhcmQtU3RhdHVzIHZvbiBUaWNrZXRzIGbDvHIgZGllIEZyZWlnYWJlIHZvbiBGQVEtQXJ0aWtlbG4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAnU3RhbmRhcmR3ZXJ0IGRlcyBBY3Rpb24tUGFyYW1ldGVycyBmw7xyIGRlbiDDtmZmZW50bGljaGVuIEZBUS1CZXJlaWNoLiBEZXIgQWN0aW9uLVBhcmFtZXRlciB3aXJkIHZvbiBkZW4gU2tyaXB0ZW4gZGVzIFN5c3RlbXMgYmVudXR6dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0gJ0RlZmluaWVydCBlaW4gw5xiZXJzaWNodHMtTW9kdWwgdW0gZGllIFNtYWxsLUFuc2ljaHQgaW0gRkFRLUpvdXJuYWwgYW56dXplaWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0gJ0RlZmluaWVydCBlaW4gw5xiZXJzaWNodHMtTW9kdWwgdW0gZGllIFNtYWxsLUFuc2ljaHQgZWluZXIgRkFRLUxpc3RlIGFuenV6ZWlnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnRGVmaW5pZXJ0IGRhcyBTdGFuZGFyZC1GQVEtQXR0cmlidXQgZsO8ciBkaWUgU29ydGllcnVuZyBkZXIgRkFRLVN1Y2hlIGltIEFnZW50ZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0RlZmluaWVydCBkYXMgU3RhbmRhcmQtRkFRLUF0dHJpYnV0IGbDvHIgZGllIFNvcnRpZXJ1bmcgZGVzIEZBUS1TdWNoZSBpbSBLdW5kZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdEZWZpbmllcnQgZGFzIFN0YW5kYXJkLUZBUS1BdHRyaWJ1dCBmw7xyIGRpZSBTb3J0aWVydW5nIGRlcyBGQVEtU3VjaGUgaW0gUHVibGljLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5pZXJ0IGRpZSBTdGFuZGFyZC1Tb3J0aWVydW5nIGRlciBGQVEtU3VjaGUgaW0gQWdlbnRlbi1JbnRlcmZhY2UuIEF1Zjogw4RsdGVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uIEFiOiBOZXVlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5pZXJ0IGRpZSBTdGFuZGFyZC1Tb3J0aWVydW5nIGRlciBGQVEtU3VjaGUgaW0gS3VuZGVuLUludGVyZmFjZS4gQXVmOiDDhGx0ZXN0ZXIgRkFRLUFydGlrZWwgb2Jlbi4gQWI6IE5ldWVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5pZXJ0IGRpZSBTdGFuZGFyZC1Tb3J0aWVydW5nIGRlciBGQVEtU3VjaGUgaW0gUHVibGljLUludGVyZmFjZS4gQXVmOiDDhGx0ZXN0ZXIgRkFRLUFydGlrZWwgb2Jlbi4gQWI6IE5ldWVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdEZWZpbmVydCBkaWUgYW5nZXplaWd0ZW4gU3BhbHRlbiBpbSBGQVEtRXhwbG9yZXIuIERpZXNlIE9wdGlvbiBoYXQga2VpbmUgQXVzd2lya3VuZyBhdWYgZGllIFBvc2l0aW9uIGRlciBTcGFsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdEZWZpbmVydCBkaWUgYW5nZXplaWd0ZW4gU3BhbHRlbiBpbSBGQVEtSm91cm5hbC4gRGllc2UgT3B0aW9uIGhhdCBrZWluZSBBdXN3aXJrdW5nIGF1ZiBkaWUgUG9zaXRpb24gZGVyIFNwYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5lcnQgZGllIGFuZ2V6ZWlndGVuIFNwYWx0ZW4gaW4gZGVyIEZBUS1TdWNoZS4gRGllc2UgT3B0aW9uIGhhdCBrZWluZSBBdXN3aXJrdW5nIGF1ZiBkaWUgUG9zaXRpb24gZGVyIFNwYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuIE5vdGU6IEFnZW50VGlja2V0QWN0aW9uQ29tbW9uIGluY2x1ZGVzIEFnZW50VGlja2V0Tm90ZSwgQWdlbnRUaWNrZXRDbG9zZSwgQWdlbnRUaWNrZXRGcmVlVGV4dCwgQWdlbnRUaWNrZXRPd25lciwgQWdlbnRUaWNrZXRQZW5kaW5nLCBBZ2VudFRpY2tldFByaW9yaXR5IGFuZCBBZ2VudFRpY2tldFJlc3BvbnNpYmxlLid9ID0gJ0RlZmluaWVydCB3byBkZXIgXCdGQVEgRWluZsO8Z2VuXCcgbGluayBhbmdlemVpZ3Qgd2lyZC4gSGlud2VpczogQWdlbnRUaWNrZXRBY3Rpb25Db21tb24gYmVpbmhhbHRldCBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSB1bmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pdGlvbiBkZXIgZnJlaWVuIFRleHRmZWxkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ0RpZXNlIEZBUSBsw7ZzY2hlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0ZBUSBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICdNdWx0aXBsZSBTcHJhY2hlbiBpbSBGQVEtTW9kdWwgYWt0aXZpZXJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdCZXdlcnR1bmdzLU1lY2hhbmlzbXVzIGltIEZBUS1Nb2R1bCBha3RpdmllcmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ0ZBUSBKb3VybmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdGQVEtSm91cm5hbCBBbnphaWdlLUxpbWl0IGbDvHIgZGllIFNtYWxsLUFuc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdGQVEtw5xiZXJzaWNodCBBbnplaWdlLUxpbWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0ZBUSBsaW1pdCBwcm8gU2VpdGUgZsO8ciBkYXMgRkFRLUpvdXJuYWwgaW4gZGVyIFNtYWxsLUFuc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdGQVEgbGltaXQgcHJvIFNlaXRlIGbDvHIgZGllIFNtYWxsLUFuc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBwYXRoIHNlcGFyYXRvci4nfSA9ICdUcmVubnplaWNoZW4gaW0gRkFRIFBmYWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdTdWNoLUJhY2tlbmQtUm91dGVyIGbDvHIgZGllIEZBUS1TdWNoZSBpbSBBZ2VudGVuLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICdGQVEtQmVyZWljaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdGcm9udGVuZC1Nb2R1bC1SZWdpc3RyaWVydW5nIGbDvHIgZGFzIFB1YmxpYy1JbnRlcmZhY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnR3J1cHBlIGbDvHIgZGllIEZyZWlnYWJlIHZvbiBGQVEtQXJ0aWtlbG4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICdGQVEtSGlzdG9yaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJ0ludGVybmUgRkFRLUZlbGRlciBpbiBlaW5lbSBGQVEtYmFzaWVydGVuVGlja2V0IHZlcndlbmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdEZW4gTmFtZW4gamVkZXMgRkFRLUZlbGRlcyBlaW5lbSBGQVEtYmFzaWVydGVuIFRpY2tldCB2ZXJ3ZW5kZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICdJbnRlcmZhY2VzIGluIGRlbmVuIGRhcyBRdWlja1NlYXJjaCBGZWF0dXJlIGFuZ2V6ZWlndCB3aXJkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnSm91cm5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnU3ByYWNoZW4tVmVyd2FsdHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZWtleSB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBsYW5ndWFnZSBmaWxlICpfRkFRLnBtLid9ID0gJ0xhbmd1YWdlS2V5IGbDvHIgZGllIEZyYWdlIGJlaSBkZXIgQXJ0aWtlbGJld2VydHVuZy4gV2lyZCBpbiBkZW4gU3ByYWNoZmlsZXMgZGVmaW5pZXJ0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICdEaWVzZSBGQVEgbWl0IGVpbmVtIGFuZGVyZW4gT2JqZWt0IHZlcmtuw7xwZmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01heGltYWxlIEFuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbSBGQVEtSm91cm5hbCBpbSBBZ2VudGVuLUludGVyZmFjZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNYXhpbWFsZSBBbnphaGwgdm9uIEZBUS1BcnRpa2VsbiBkaWUgaW4gZGVyIEZBUS1TdWNoZSBpbSBBZ2VudGVuLUludGVyZmFjZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdNYXhpbWFsZSBBbnphaGwgdm9uIEZBUS1BcnRpa2VsbiBkaWUgaW4gZGVyIEZBUS1TdWNoZSBpbSBLdW5kZW4tSW50ZXJmYWNlIGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdNYXhpbWFsZSBBbnphaGwgdm9uIEZBUS1BcnRpa2VsbiBkaWUgaW4gZGVyIEZBUS1TdWNoZSBpbSBQdWJsaWMtSW50ZXJmYWNlIGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9ICdNb2R1bCB6dW0gR2VuZXJpZXJlbiBkZXMgSFRNTCAiT3BlblNlYXJjaCIgUHJvZmlscyB6dXIgRkFRLVN1Y2hlIMO8YmVyIGRhcyBCcm93c2VyLVN1Y2hmZWxkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICdOZXVlciBGQVEtQXJ0aWtlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICdOZXVlIEZBUS1BcnRpa2VsIGJlbsO2dGlnZW4gZWluZSBGcmVpZ2FiZSB2b3IgZGVyIFZlcsO2ZmZlbnRsaWNodW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICdBbnphaGwgZGVyIHp1IGFuemVpZ2VuZGVuIEFydGlrZWwgaW4gbGV0enRlbiDDhG5kZXJ1bmdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdBbnphaGwgZGVyIGFuenV6ZWlnZW5kZW4gQXJ0aWtlbCBpbiB6dWxldHp0IGVyc3RlbGx0ZSBBcnRpa2VsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJ0FuemFobCBkZXIgYW56dXplaWdlbmRlbiBBcnRpa2VsIGltIFRvcCAxMCBGZWF0dXJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPSAnUGFyYW1ldGVyIGbDvHIgZGllIFNlaXRlbiAoaW4gZGVuZW4gRkFRLUFydGlrZWwgYW5nZXplaWd0IHdlcmRlbikgZsO8ciBkaWUgU21hbGwtQW5zaWNodCBkZXMgRkFRLUpvdXJuYWxzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0gJ1BhcmFtZXRlciBmw7xyIGRpZSBTZWl0ZW4gKGluIGRlbmVuIEZBUS1BcnRpa2VsIGFuZ2V6ZWlndCB3ZXJkZW4pIGbDvHIgZGllIFNtYWxsLUFuc2ljaHQgZGVzIEZBUS1PdmVyaWV3cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdGQVEgZHJ1Y2tlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdRdWV1ZSBmw7xyIGRpZSBGcmVpZ2FiZSB2b24gRkFRLUFydGlrZWxuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJ0dld2ljaHR1bmcgZsO8ciBkaWUgQmV3ZXJ0dW5nLiBEZXIgS2V5IG11c3MgaW4gUHJvemVudCBhbmdlZ2ViZW4gd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnRkFRIGR1cmNoc3VjaGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC4nfSA9ICdIVE1MIERhcnN0ZWxsdW5nIGRlciBGQVEtQXJ0aWtlbCBlaW5zY2hhbHRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnRkFRIFBmYWQgYW56ZWlnZW4gamEvbmVpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBXWVNJV1lHIGVkaXRvciBpbiBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnQW56ZWlnZSBlaW5lcyBXWVNJV1lHIEVkaXRvcnMgaW0gQWdlbnRlbi1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICdBcnRpa2VsIGF1cyBTdWJrYXRlZ29yaWVuIGFuemVpZ2VuIGphL25laW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ0ludGVyZmFjZXMgaW4gZGVuZW4gZGFzIExhc3RDaGFuZ2UgRmVhdHVyZSBhbmdlemVpZ3Qgd2VyZGVuIHNvbGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdJbnRlcmZhY2VzIGluIGRlbmVuIGRhcyBMYXN0Q3JlYXRlIEZlYXR1cmUgYW5nZXplaWd0IHdlcmRlbiBzb2xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnSW50ZXJmYWNlcyBpbiBkZW5lbiBkYXMgVG9wIDEwIEZlYXR1cmUgYW5nZXplaWd0IHdlcmRlbiBzb2xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnSW50ZXJmYWNlcyBpbiBkZW5lbiBkYXMgVm90aW5nIEZlYXR1cmUgYW5nZXplaWd0IHdlcmRlbiBzb2xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdaZWlndCBlaW5lbiBMaW5rIGluIGRlciBNZW51LUxlaXN0ZSBpbiBkZXIgWm9vbS1BbnNpY2h0IGltIEFnZW50ZW4tSW50ZXJmYWNlIGFuLCBkZXIgZXMgZXJtw7ZnbGljaHQgZWluZW4gRkFRLUFydGlrZWwgbWl0IGFuZGVyZW4gT2JqZWt0ZW4genUgdmVya27DvHBmZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1plaWd0IGVpbmVuIExpbmsgaW4gZGVyIE1lbnUtTGVpc3RlIGluIGRlciBab29tLUFuc2ljaHQgaW0gQWdlbnRlbi1JbnRlcmZhY2UgYW4sIGRlciBlcyBlcm3DtmdsaWNodCBlaW5lbiBGQVEtQXJ0aWtlbCB6dSBsw7ZzY2hlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnWmVpZ3QgZWluZW4gTGluayBpbiBkZXIgTWVudS1MZWlzdGUgaW4gZGVyIFpvb20tQW5zaWNodCBpbSBBZ2VudGVuLUludGVyZmFjZSBhbiwgdW0gZGllIEhpc3RvcmllIGVpbmVzIEZBUS1BcnRpa2VscyBhbnp1emVpZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1plaWd0IGVpbmVuIExpbmsgaW4gZGVyIE1lbnUtTGVpc3RlIGluIGRlciBab29tLUFuc2ljaHQgaW0gQWdlbnRlbi1JbnRlcmZhY2UgYW4sIGRlciBlcyBlcm3DtmdsaWNodCBlaW5lbiBGQVEtQXJ0aWtlbCB6dSBiZWFyYmVpdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1plaWd0IGVpbmVuIExpbmsgaW4gZGVyIE1lbnUtTGVpc3RlIGluIGRlciBab29tLUFuc2ljaHQgaW0gQWdlbnRlbi1JbnRlcmZhY2UgYW4sIGRlciBlcyBlcm3DtmdsaWNodCB6dXIgdm9yaGVyaWdlbiBTZWl0ZSB6dXLDvGNrIHp1IGdlaGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdaZWlndCBlaW5lbiBMaW5rIGluIGRlciBNZW51LUxlaXN0ZSBpbiBkZXIgWm9vbS1BbnNpY2h0IGltIEFnZW50ZW4tSW50ZXJmYWNlIGFuLCBkZXIgZXMgZXJtw7ZnbGljaHQgZWluZW4gRkFRLUFydGlrZWwgenUgZHJ1Y2tlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0gJ0RlciBJZGVudGlmaWthdG9yIGbDvHIgZWluZW4gRkFRLUFydGlrZWwsIHouIEIuIEZBUSMsIEtCIywgTXlGQVEjLiBEZXIgU3RhbmRhcmR3ZXJ0IGlzdCBGQVEjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0ZBUVwnLU9iamVrdGUgbWl0IGRlbSBMaW5rdHlwIFwnTm9ybWFsXCcgbWl0IGFuZGVyZW4gXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0ZBUVwnLU9iamVrdGUgbWl0IGRlbSBMaW5rdHlwIFwnUGFyZW50Q2hpbGRcJyBtaXQgYW5kZXJlbiBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0ZBUVwnLU9iamVrdGUgbWl0IGRlbSBMaW5rdHlwIFwnTm9ybWFsXCcgbWl0IGFuZGVyZW4gXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0ZBUVwnLU9iamVrdGUgbWl0IGRlbSBMaW5rdHlwIFwnUGFyZW50Q2hpbGRcJyBtaXQgYW5kZXJlbiBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnQm9keSBkZXMgVGlja2V0cyB6dXIgRnJlaWdhYmUgZWluZXMgRkFRLUFydGlrZWxzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnQmV0cmVmZiBkZXMgVGlja2V0cyB6dXIgRnJlaWdhYmUgZWluZXMgRkFRLUFydGlrZWxzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdEZWZpbmllcnQgZGFzIFN0YW5kYXJkLUZBUS1BdHRyaWJ1dCBmw7xyIGRpZSBTb3J0aWVydW5nIGRlcyBGQVEtRXhwbG9yZXJzIGltIEFnZW50ZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBleHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0RlZmluaWVydCBkYXMgU3RhbmRhcmQtRkFRLUF0dHJpYnV0IGbDvHIgZGllIFNvcnRpZXJ1bmcgZGVzIEZBUS1FeHBsb3JlcnMgaW0gS3VuZGVuLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnRGVmaW5pZXJ0IGRhcyBTdGFuZGFyZC1GQVEtQXR0cmlidXQgZsO8ciBkaWUgU29ydGllcnVuZyBkZXMgRkFRLUV4cGxvcmVycyBpbSBQdWJsaWMtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5pZXJ0IGRpZSBTdGFuZGFyZC1Tb3J0aWVydW5nIGRlcyBGQVEtRXhwbG9yZXJzIGltIEt1bmRlbi1JbnRlcmZhY2UuIEF1Zjogw4RsdGVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uIEFiOiBOZXVlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluaWVydCBkaWUgU3RhbmRhcmQtU29ydGllcnVuZyBkZXMgRkFRLUV4cGxvcmVycyBpbSBQdWJsaWMtSW50ZXJmYWNlLiBBdWY6IMOEbHRlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLiBBYjogTmV1ZXN0ZXIgRkFRLUFydGlrZWwgb2Jlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBFeHBsb3JlciByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5pZXJ0IGRpZSBTdGFuZGFyZC1Tb3J0aWVydW5nIGRlcyBGQVEtRXhwbG9yZXJzIGltIEFnZW50ZW4tSW50ZXJmYWNlLiBBdWY6IMOEbHRlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLiBBYjogTmV1ZXN0ZXIgRkFRLUFydGlrZWwgb2Jlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlOiAnfSA9ICdMw7ZzY2hlbjogJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTWF4aW1hbGUgQW56YWhsIHZvbiBGQVEtQXJ0aWtlbG4gZGllIGltIEZBUS1FeHBsb3JlciBpbSBLdW5kZW4tSW50ZXJmYWNlIGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ01heGltYWxlIEFuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbSBGQVEtRXhwbG9yZXIgaW0gUHVibGljLUludGVyZmFjZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01heGltYWxlIEFuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbSBGQVEtRXhwbG9yZXIgaW0gQWdlbnRlbi1JbnRlcmZhY2UgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0FuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbiBkZXIgRkFRLVN1Y2hlIGltIEt1bmRlbi1JbnRlcmZhY2UgcHJvIFNlaXRlIGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnQW56YWhsIHZvbiBGQVEtQXJ0aWtlbG4gZGllIGluIGRlciBGQVEtU3VjaGUgaW0gUHVibGljLUludGVyZmFjZSBwcm8gU2VpdGUgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnQW56YWhsIHZvbiBGQVEtQXJ0aWtlbG4gZGllIGltIEZBUS1FeHBsb3JlciBpbSBLdW5kZW4tSW50ZXJmYWNlIGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdBbnphaGwgdm9uIEZBUS1BcnRpa2VsbiBkaWUgaW0gRkFRLUV4cGxvcmVyIGltIFB1YmxpYy1JbnRlcmZhY2UgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICdaZWlnZSAiTGluayBFaW5mw7xnZW4iLUJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmw7xyIMO2ZmZlbnRsaWNoZSBGQVEtQXJ0aWtlbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnWmVpZ2UgIlRleHQgJiBMaW5rIEVpbmbDvGdlbiItQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGbDvHIgw7ZmZmVudGxpY2hlIEZBUS1BcnRpa2VsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJ1plaWdlICJUZXh0IEVpbmbDvGdlbiItQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGbDvHIgw7ZmZmVudGxpY2hlIEZBUS1BcnRpa2VsLic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTMgRW5yaXF1ZSBNYXTDrWFzIFPDoW5jaGV6IDxxdWlxdWVAdW5pemFyLmVzPgojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19GQVE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUZBUQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwnfSA9ICdpbnRlcm5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ3DDumJsaWNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsJ30gPSAnZXh0ZXJubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnTsO6bWVybyBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAnVWx0aW1vcyBhcnTDrWN1bG9zIG1vZGlmaWNhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ1VsdGltb3MgYXJ0w61jdWxvcyBjcmVhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICdUb3AgMTAgZGUgYXJ0w61jdWxvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ1N1YmNhdGVnb3LDrWEgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICfCoU5vIHNlIGhhIHNlbGVjY2lvbmFkbyBuaW5ndW5hIHB1bnR1YWNpw7NuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdww7pibGljbyAodG9kb3MpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdleHRlcm5vIChjbGllbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnaW50ZXJubyAoYWdlbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdEw61hIGRlIGluaWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBtb250aCd9ID0gJ01lcyBkZSBpbmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ0HDsW8gZGUgaW5pY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdEw61hIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTWVzIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICdBw7FvIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnwqFHcmFjaWFzIHBvciBzdSB2b3RvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ8KhVXN0ZWQgeWEgaGEgdm90YWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJ0ltcHJpbWlyIGVsIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnQXJ0w61jdWxvcyBGQVEgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnTDrWN1bG9zIEZBUSAobnVldm9zKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0w61jdWxvcyBGQVEgKG1vZGlmaWNhZG9zIHJlY2llbnRlbWVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0FjdHVhbGl6YWRhIGNhdGVnb3LDrWEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdBw7FhZGlkYSBjYXRlZ29yw61hIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfCoUxhcyBjYXRlZ29yw61hcyBkZWJlIHRlbmVyIG5vbWJyZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ0VzdGEgY2F0ZWdvcsOtYSB5YSBleGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJ0HDsWFkaWRvIGlkaW9tYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnQWN0dWFsaXphZG8gaWRpb21hIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnRWwgbm9tYnJlIGVzIGltcHJlc2NpbmRpYmxlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0VzdGUgaWRpb21hIHlhIGV4aXN0ZS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdBw7FhZGlyIGFydMOtY3VsbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnU2UgcmVxdWllcmUgdW5hIGNhdGVnb3LDrWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnQXByb2JhY2nDs24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnR2VzdGnDs24gZGUgY2F0ZWdvcsOtYXMgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJ0HDsWFkaXIgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdCb3JyYXIgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ0FjZXB0YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnQcOxYWRpciBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdFZGl0YXIgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnU2UgbW9zdHJhcsOhIGNvbW8gY29tZW50YXJpbyBlbiBlbCBleHBsb3JhZG9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1BvciBmYXZvciwgc2VsZWNjaW9uZSBhbCBtZW5vcyB1biBncnVwbyBkZSBwZXJtaXNvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnR3J1cG9zIGRlIGFnZW50ZXMgcXVlIHB1ZWRlbiBhY2NlZGVyIGEgbG9zIGFydMOtY3Vsb3MgZGUgZXN0YSBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICfCv1NlZ3VybyBxdWUgZGVzZWEgYm9ycmFyIGVzdGEgY2F0ZWdvcsOtYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAnTm8gcHVlZGUgYm9ycmFyIGVzdGEgY2F0ZWdvcsOtYS4gRXN0w6Egc2llbmRvIHVzYWRhIHBvciBhbCBtZW5vcyB1biBhcnTDrWN1bG8gRkFRIHkvbyBlcyBwYWRyZSBkZSBhbCBtZW5vcyBvdHJhIGNhdGVnb3LDrWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICdFc3RhIGNhdGVnb3LDrWEgZXN0w6Egc2llbmRvIHVzYWRhIHBvciBsb3Mgc2lndWllbnRlcyBhcnTDrWN1bG9zIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdFc3RhIGNhdGVnb3LDrWEgZXMgcGFkcmUgZGUgbGFzIHNpZ3VpZW50ZXMgc3ViY2F0ZWdvcsOtYXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnwr9TZWd1cm8gcXVlIGRlc2VhIGJvcnJhciBlc3RlIGFydMOtY3VsbyBGQVE/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRXhwbG9yYWRvciBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVpY2sgU2VhcmNoJ30gPSAnQsO6c3F1ZWRhIFLDoXBpZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnQsO6c3F1ZWRhIEF2YW56YWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdTdWJjYXRlZ29yw61hcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdBcnTDrWN1bG9zIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ05vIHNlIGVuY29udHJhcm9uIHN1YmNhdGVnb3LDrWFzLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBkYXRvcyBlbiBsYSBCaXTDoWNvcmEgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7NuIGRlIElkaW9tYXMgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0gJ1V0aWxpY2UgZXN0YSBmdW5jaW9uYWxpZGFkIHNpIGRlc2VhIHRyYWJhamFyIGNvbiBtw7psdGlwbGVzIGlkaW9tYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ0HDsWFkaXIgSWRpb21hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSd9ID0gJ0JvcnJhciBJZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnQcOxYWRpciBJZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ0VkaXRhciBJZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ8K/U2VndXJvIHF1ZSBkZXNlYSBib3JyYXIgZXN0ZSBpZGlvbWE/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9ICdObyBwdWVkZSBib3JyYXIgZXN0ZSBpZGlvbWEuIEVzdMOhIHNpZW5kbyB1c2FkbyBwb3IgYWwgbWVub3MgdW4gYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJ0VzdGUgaWRpb21hIGVzdGEgc2llbmRvIHVzYWRvIHBvciBsb3Mgc2lndWllbnRlcyBBcnTDrWN1bG9zIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0FqdXN0ZXMgZGUgQ29udGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnQXJ0w61jdWxvcyBGQVEgcG9yIHDDoWdpbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnTm8gc2UgZW5jb250cmFyb24gZGF0b3MgZGUgRkFRLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUluZm8nfSA9ICdJbmZvcm1hY2nDs24tRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnVm90b3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ1RleHRvIGNvbXBsZXRvIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdCw7pzcXVlZGEgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnUHVudHVhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICdQdW50dWFjacOzbiAlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnZGUgNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICfCoU5vIHNlIGVuY29udHLDsyBuaW5nw7puIHZvdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdObyBzZSBlbmNvbnRyw7MgbmluZ8O6biB2b3RvLiBTZWEgZWwgcHJpbWVybyBlbiB2YWxvcmFyIGVzdGUgYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnRGVzY2FyZ2FyIEFkanVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPSAnwr9Dw7NtbyBkZSDDunRpbCBmdWUgZXN0ZSBhcnTDrWN1bG8/IFBvciBmYXZvciwgZMOpbm9zIHN1IHB1bnR1YWNpw7NuIHkgYXl1ZGUgYSBtZWpvcmFyIGxhIGJhc2UgZGUgZGF0b3MgZGUgRkFRLiBHcmFjaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ3BvY28gw7p0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAnbXV5IMO6dGlsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnSW5zZXJ0YXIgVGV4dG8gZGUgbGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0luc2VydGFyIEVubGFjZSBhIGxhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnSW5zZXJ0YXIgdGV4dG8geSBFbmxhY2UgYSBsYSBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBhcnTDrWN1bG9zIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ0LDunNxdWVkYSBkZSB0ZXh0byBjb21wbGV0byBlbiBhcnTDrWN1bG9zIEZBUSAoZWo6ICJKb2huKm4iIG8gIldpbGwqIiknOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhbGxlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ0J1c2NhciBhcnTDrWN1bG9zIGNvbiBsYSBwYWxhYnJhIGNsYXZlJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFFeHBsb3JlcgoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICdQw7pibGljbyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVpvb20KCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJ0ZpbHRybyBwYXJhIGVsIEhUTUwgcmVzdWx0YW50ZSBwYXJhIGHDsWFkaXIgZW5sYWNlcyBhIHVuYSBjYWRlbmEgZGV0ZXJtaW5hZGEuIEVsIGVsZW1lbnRvIEltYWdlbiBjb250ZW1wbGEgZG9zIHRpcG9zIGRlIHJlZ2lzdHJvcy4gRWwgcHJpbWVybyBlcyBlbCBub21icmUgZGUgdW5hIGltYWdlbiAocG9yIGVqZW1wbG8gZmFxLnBuZykuIEVuIGVzdGUgY2FzbyBzZSB1dGlsaXphcsOhIGxhIHJ1dGEgZGUgaW3DoWdlbmVzIGRlIE9UUlMuIExhIHNlZ3VuZGEgcG9zaWJpbGlkYWQgZXMgaW5zZXJ0YXIgZWwgZW5sYWNlIGEgbGEgaW1hZ2VuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDb2xvciBDU1MgcGFyYSBlbCByZXN1bHRhZG8gZGUgbGEgdm90YWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnR2VzdGnDs24gZGUgbGFzIENhdGVnb3LDrWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ07Dum1lcm8gZGUgZGVjaW1hbGVzIHBhcmEgZWwgcmVzdWx0YWRvIGRlIGxhIHZvdGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAnTm9tYnJlIHByZWRldGVybWluYWRvIGRlIGxhIGNhdGVnb3LDrWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJ0lkaW9tYSBwb3Igb21pc2nDs24gcGFyYSBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gbW9kbyBpZGlvbWEgw7puaWNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdQcmlvcmlkYWQgcG9yIG9taXNpw7NuIGRlIGxvcyB0aWNrZXRzIHBhcmEgYXByb2JhY2nDs24gZGUgbG9zIGFydMOtY3Vsb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAnRXN0YWRvIHBvciBvbWlzacOzbiBwYXJhIGxvcyBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0VzdGFkbyBwb3Igb21pc2nDs24gZGUgbG9zIHRpY2tldHMgcGFyYSBhcHJvYmFjacOzbiBkZSBsb3MgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAnVmFsb3IgcG9yIG9taXNpw7NuIHBhcmEgZWwgcGFyw6FtZXRybyAiQWN0aW9uIiBwYXJhIGxhIGludGVyZmF6IHDDumJsaWNhLiBFbCBwYXLDoW1ldHJvICJBY3Rpb24iIHNlIHVzYSBlbiBsb3MgInNjcmlwdHMiIGRlbCBzaXN0ZW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPSAnRGVmaW5lIHVuIG3Ds2R1bG8gZGUgdmlzdGEgZ2VuZXJhbCBwYXJhIG1vc3RyYXIgbGEgdmlzdGEgcGVxdWXDsWEgZGUgbGEgYml0w6Fjb3JhIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPSAnRGVmaW5lIHVuIG3Ds2R1bG8gZGUgdmlzdGEgcHJldmlhIHBhcmEgbW9zdHJhciBsYSB2aXN0YSBwZXF1ZcOxYSBkZSB1biBsaXN0YWRvIGRlIEZBUXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gdW5hIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gdW5hIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBlbCBhdHJpYnV0byBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxvcyBhcnTDrWN1bG9zIEZBUSBlbiB1bmEgYsO6c3F1ZWRhIGRlIEZBUSBlbiBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnRGVmaW5lIGVsIGF0cmlidXRvIHBvciBvbWlzacOzbiBwYXJhIG9yZGVuYXIgbG9zIGFydMOtY3Vsb3MgRkFRIGVuIGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0RFZmluZSBlbCBhdHJpYnV0byBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxhcyBGQVEgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gZGUgRkFRIHF1ZSBzZSB1c2Fyw6EgcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsYXMgRkFRIGVuIGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxhcyBGQVEgZW4gbG9zIHJlc3VsdGFkb3MgZGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBMb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBlbCBvcmRlbiBwb3Igb21pc2nDs24gZGUgbGFzIEZBUSBlbiBsb3MgcmVzdWx0YWRvcyBkZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3MgbcOhcyByZWNpZW50ZXMgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxhcyBGQVEgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogcMO6YmxpY2EuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3MgbcOhcyByZWNpZW50ZXMgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYWNlIGRlbCBjbGllbnRlLiBBcnJpYmE6IGxvcyBtw6FzIGFudGlndW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLiBBYmFqbzogbG9zIMO6bHRpbW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBlbCBvcmRlbiBwb3Igb21pc2nDs24gZGUgbG9zIHJlc3VsdGFkb3MgZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZhY2UgcMO6YmxpY2EuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdEZWZpbmUgbGFzIGNvbHVtbmFzIHF1ZSBzZSBtb3N0cmFyw6FuIGVuIGVsIEV4cGxvcmFkb3IgZGUgRkFRLiBFc3RhIG9wY2nDs24gbm8gdGllbmUgZWZlY3RvcyBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIGNvbHVtbmFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdEZWZpbmUgbGFzIGNvbHVtbmFzIHF1ZSBzZSBtb3N0cmFyw6FuIGVuIGxhIGJpdMOhY29yYSBkZSBGQVEuIEVzdGEgb3BjacOzbiBubyB0aWVuZSBlZmVjdG9zIGVuIGxhIHBvc2ljacOzbiBkZSBsYXMgY29sdW1uYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5lIGxhcyBjb2x1bW5hcyBxdWUgc2UgbW9zdHJhcsOhbiBlbiBsYSBiw7pzcXVlZGEgZGUgRkFRLiBFc3RhIG9wY2nDs24gbm8gdGllbmUgZWZlY3RvcyBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIGNvbHVtbmFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICdEZWZpbmUgZMOzbmRlIHNlIG1vc3RyYXLDoSBlbCBlbmxhY2UgwqtJbnNlcnRhciBGQVHCuy4gTm90YTogQWdlbnRUaWNrZXRBY3Rpb25Db21tb24gaW5jbHV5ZSBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSB5IEFnZW50VGlja2V0UmVzcG9uc2libGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ0RlZmluaWNpw7NuIGRlbCBjYW1wbyDCq3RleHRvIGxpYnJlwrsgcGFyYSBsb3MgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ0JvcnJhciBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0VkaXRhciBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ0hhYmlsaXRhciBtw7psdGlwbGVzIGlkaW9tYXMgZW4gZWwgbcOzZHVsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdIYWJpbGl0YXIgZWwgbWVjYW5pc21vIGRlIHZvdGFjacOzbiBlbiBlbCBtw7NkdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ0JpdMOhY29yYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0zDrW1pdGUgcGFyYSBsYSB2aXN0YSBnZW5lcmFsIMKrcGVxdWXDsWHCuyBkZSBsYSBCaXTDoWNvcmEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTMOtbWl0ZSBwYXJhIGxhIHZpc3RhIGdlbmVyYWwgwqtwZXF1ZcOxYcK7IGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdMw61taXRlIGRlIEZBUSBwb3IgcMOhZ2luYSBwYXJhIGxhIHZpc3RhIGdlbmVyYWwgwqtwZXF1ZcOxYcK7IGRlIGxhIEJpdMOhY29yYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0zDrW1pdGUgZGUgRkFRIHBvciBww6FnaW5hIHBhcmEgbGEgdmlzdGEgZ2VuZXJhbCDCq3BlcXVlw7FhwrsgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBwYXRoIHNlcGFyYXRvci4nfSA9ICdTZXBhcmFkb3IgZGUgbGEgcnV0YSBkZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdFbmNhbWluYWRvciBwYXJhIGxhIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICfDgXJlYS1GQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnUmVnaXN0cm8gZGUgbcOzZHVsbyAiRnJvbnRlbmQiIGVuIGxhIGludGVyZmF6IHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdHcnVwbyBwYXJhIGxhIGFwcm9iYWNpw7NuIGRlIGxvcyBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJ0hpc3RvcmlhIGRlIGVzdGUgYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnSW5jbHVpciBjYW1wb3MgaW50ZXJub3MgZW4gbG9zIHRpY2tldHMgYmFzYWRvcyBlbiB1biBhcnTDrWN1bG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnSW5jbHVpciBlbCBub21icmUgZGUgY2FkYSBjYW1wbyBlbiBsb3MgdGlja2V0cyBiYXNhZG9zIGVuIHVuIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2tzZWFyY2ggc2hvdWxkIGJlIHNob3duLid9ID0gJ0ludGVyZmFjZXMgZW4gbGFzIHF1ZSBzZSBkZWJlIG1vc3RyYXIgbGEgYnVzcXVlZGEgcsOhcGlkYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0JpdMOhY29yYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnR2VzdGnDs24gZGUgSWRpb21hcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZWtleSB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBsYW5ndWFnZSBmaWxlICpfRkFRLnBtLid9ID0gJ0NsYXZlIGRlIGlkaW9tYSBkZWZpbmlkYSBlbiBlbCBmaWNoZXJvIGRlIGlkaW9tYSAqX0ZBUS5wbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnRW5sYXphciBvdHJvIG9iamVjdG8gYSBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gbG9zIHJlc3VsdGFkb3MgZGVsIGV4cGxvcmFkb3IgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGxvcyByZXN1bHRhZG9zIGRlbCBleHBsb3JhZG9yIEZBUSBkZSBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGxvcyByZXN1bHRhZG9zIGRlbCBleHBsb3JhZG9yIEZBUSBkZSBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGxhIGJpdMOhY29yYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBjb21vIHJlc3VsdGFkbyBkZSB1bmEgYsO6c3F1ZWRhIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgY29tbyByZXN1bHRhZG8gZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgY29tbyByZXN1bHRhZG8gZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0gJ03Ds2R1bG8gcGFyYSBnZW5lcmFyIGVsIHBlcmZpbCBodG1sICJPcGVuU2VhcmNoIiBwYXJhIGLDunNxdWVkYXMgY29ydGFzIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAnTnVldm8gYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICdMb3MgbnVldm9zIGFydMOtY3Vsb3MgRkFRIHJlcXVpZXJlbiBhcHJvYmFjacOzbiBhbnRlcyBkZSBwdWJsaWNhcnNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBlbiBjYWRhIHDDoWdpbmEgZGUgbG9zIHJlc3VsdGFkb3MgZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBlbiBjYWRhIHDDoWdpbmEgZGUgbG9zIHJlc3VsdGFkb3MgZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICdOw7ptZXJvIGRlIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gw7psdGltb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdOw7ptZXJvIGRlIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gw7psdGltb3MgY3JlYWRvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICdOw7ptZXJvIGRlIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gZWwgVG9wIDEwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPSAnUGFyw6FtZXRyb3MgZGUgbGFzIHDDoWdpbmFzIChlbiBsYXMgcXVlIHNlIG11ZXN0cmFuIGxvcyBlbGVtZW50b3MgRkFRKSBkZSBsYSB2aXN0YSBnZW5lcmFsIHBlcXVlw7FhIGRlIGxhIGJpdMOhY29yYSBkZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPSAnUGFyw6FtZXRyb3MgZGUgbGFzIHDDoWdpbmFzIChlbiBsYXMgcXVlIHNlIG11ZXN0cmFuIGxvcyBlbGVtZW50b3MgRkFRKSBkZSBsYSB2aXN0YSBnZW5lcmFsIGRlIEZBUSBwZXF1ZcOxYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdJbXByaW1pciBlc3RhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdDb2xhIHBhcmEgbGEgYXByb2JhY2nDs24gZGUgbG9zIGFydMOtY3Vsb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJ1BvbmRlcmFjacOzbiBwYXJhIGxhIHZvdGFjacOzbi4gTGEgY2xhdmUgZGViZSBleHByZXNhcnNlIGVuIHBvcmNlbnRhamUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICdCw7pzcXVlZGEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ01vc3RyYXIgYm90w7NuIMKrSW5zZXJ0YXIgZW5sYWNlIGEgRkFRwrsgZW4gQWdlbnRGQVFab29tU21hbGwgcGFyYSBsb3MgYXJ0w61jdWxvcyBGQVEgcMO6YmxpY29zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnTW9zdHJhciBib3TDs24gwqtJbnNlcnRhciB0ZXh0byB5IGVubGFjZSBkZSBsYSBGQVHCuyBlbiBBZ2VudEZBUVpvb21TbWFsbCBwYXJhIGxvcyBhcnTDrWN1bG9zIEZBUSBww7pibGljb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJ01vc3RyYXIgYm90w7NuIMKrSW5zZXJ0YXIgdGV4dG8gZGUgbGEgRkFRwrsgZW4gQWdlbnRGQVFab29tU21hbGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ8K/TW9zdHJhciBjb250ZW5pZG8gSFRNTCBlbiBsb3MgYXJ0w61jdWxvcyBGQVE/Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICfCv01vc3RyYXIgbGEgcnV0YSBkZSBsYSBGQVE/IHPDrS9uby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBXWVNJV1lHIGVkaXRvciBpbiBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhciBlbCBlZGl0b3IgV1lTSVdZRyBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnwr9Nb3N0cmFyIGxvcyBlbGVtZW50b3MgZGUgbGFzIHN1YmNhdGVnb3LDrWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIGxvcyDDumx0aW1vcyBhcnTDrWN1bG9zIGFjdHVhbGl6YWRvcyBlbiBsYXMgaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIGxvcyDDumx0aW1vcyBhcnTDrWN1bG9zIGNyZWFkb3MgZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBsb3MgYXJ0w61jdWxvcyBUb3AgMTAgZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBsYSB2b3RhY2nDs24gZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBxdWUgcGVybWl0ZSBlbmxhemFyIGEgdW4gYXJ0w61jdWxvIEZBUSBjb24gb3RybyBvYmpldG8gZW4gc3UgdmlzdGEgYW1wbGlhZGEgZGUgZXNhIEZBUSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBxdWUgcGVybWl0ZSBib3JyYXIgdW4gYXJ0w61jdWxvIEZBUSBlbiBsYSB2aXN0YSBhbXBsaWFkYSBkZSBlc2EgRkFRIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgYWNjZWRlciBhbCBoaXN0b3JpYWwgZGUgdW4gYXJ0w61jdWxvIEZBUSBlbiBzdSB2aXN0YSBhbXBsaWFkYSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgZWRpdGFyIHVuIGFydMOtY3VsbyBGQVEgZW4gc3UgdmlzdGEgYW1wbGlhZGEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBwYXJhIHJldHJvY2VkZXIgZW4gbGEgdmlzdGEgYW1wbGlhZGEgZGUgRkFRIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgaW1wcmltaXIgdW4gYXJ0w61jdWxvIEZBUSBlbiBzdSB2aXN0YSBhbXBsaWFkYSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPSAnRWwgaWRlbnRpZmljYWRvciBwYXJhIHVuYSBGQVEsIHBvciBlamVtcGxvIEZBUSMsIEtCIywgTWlGQVEjLiBGQVEjIGVzIGxhIG9wY2nDs24gcG9yIG9taXNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICdFc3RlIGFqdXN0ZSBkZWZpbmUgcXVlIHVuIG9iamV0byDCq0ZBUcK7IHB1ZWRlIGVubGF6YXJzZSBjb24gb3Ryb3Mgb2JqZXRvcyDCq0ZBUcK7IHV0aWxpemFuZG8gZWwgdGlwbyBkZSBlbmxhY2UgwqtOb3JtYWzCuy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnRXN0ZSBhanVzdGUgZGVmaW5lIHF1ZSB1biBvYmpldG8gwqtGQVHCuyBwdWVkZSBlbmxhemFyc2UgY29uIG90cm9zIG9iamV0b3MgwqtGQVHCuyB1dGlsaXphbmRvIGVsIHRpcG8gZGUgZW5sYWNlIMKrUGFyZW50Q2hpbGTCuy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJ0VzdGUgYWp1c3RlIGRlZmluZSBxdWUgdW4gb2JqZXRvIMKrRkFRwrsgcHVlZGUgZW5sYXphcnNlIGNvbiBvdHJvcyBvYmpldG9zIMKrVGlja2V0wrsgdXRpbGl6YW5kbyBlbCB0aXBvIGRlIGVubGFjZSDCq05vcm1hbMK7Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICdFc3RlIGFqdXN0ZSBkZWZpbmUgcXVlIHVuIG9iamV0byDCq0ZBUcK7IHB1ZWRlIGVubGF6YXJzZSBjb24gb3Ryb3Mgb2JqZXRvcyDCq1RpY2tldMK7IHV0aWxpemFuZG8gZWwgdGlwbyBkZSBlbmxhY2UgwqtQYXJlbnRDaGlsZMK7Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnQ3VlcnBvIGRlbCB0aWNrZXQgcGFyYSBhcHJvYmFjacOzbiBkZSBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0FzdW50byBkZWwgdGlja2V0IHBhcmEgYXByb2JhY2nDs24gZGUgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICdFc3RhYmxlY2VyIGxhIGFsdHVyYSBwcmVkZXRlcm1pbmFkYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEFnZW50RkFRWm9vbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnRXN0YWJsZWNlciBsYSBhbHR1cmEgbcOheGltYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEFnZW50RkFRWm9vbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICdFc3RhYmxlY2VyIGxhIGFsdHVyYSBwcmVkZXRlcm1pbmFkYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEN1c3RvbWVyRkFRWm9vbSAoeSBQdWJsaWNGQVFab29tKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnRXN0YWJsZWNlciBsYSBhbHR1cmEgbcOheGltYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEN1c3RvbWVyRkFRWm9vbSAoeSBQdWJsaWNGQVFab29tKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgVGltZSBUbyBMZWF2ZSBmb3IgRkFRIGl0ZW1zLid9ID0gJ1RpZW1wbyBkZSB2aWRhIGRlIGxhIGNhY2jDqSBwYXJhIGxvcyBlbGVtZW50b3MgRkFRLic7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IG5lZWRzIGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwISd9ID0gJ1VuYSBjYXRlZ29yw61hIGRlYmUgdGVuZXIgYWwgbWVub3MgdW4gZ3J1cG8gZGUgcGVybWlzb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIGNvbW1lbnQhJ30gPSAnVW5hIGNhdGVnb3LDrWEgZGViZSB0ZW5lciB1biBjb21lbnRhcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgd2hpY2ggY2FuIGFjY2VzcyB0aGlzIGNhdGVnb3J5Lid9ID0gJ0xvcyBncnVwb3MgYWdlbnRlcyBwdWVkZW4gYWNjZWRlciBhIGVzdGEgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlcyd9ID0gJ0FydMOtY3Vsb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcmllcyd9ID0gJ0NhdGVnb3JpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBlbCBhdHJpYnV0byBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxvcyBhcnTDrWN1bG9zIEZBUSBlbiBlbCBFeHBsb3JhZG9yIEZBUSBlbiBsYSBpbnRlcmZhY2UgZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5lIGVsIHNlbnRpZG8gZGVsIG9yZGVuIHBvciBvbWlzacOzbiBlbiBlbCByZXN1bHRhZG8gZGVsIEV4cGxvcmFkb3IgRkFRIGVuIGxhIGludGVyZmFjZSBkZWwgY2xpZW50ZS4gQXJyaWJhOiBsb3MgbcOhcyBhbnRpZ3VvcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4gQWJham86IGxvcyDDumx0aW1vcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgc2VudGlkbyBkZWwgb3JkZW4gcG9yIG9taXNpw7NuIGVuIGVsIHJlc3VsdGFkbyBkZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIHDDumJsaWNhLiBBcnJpYmE6IGxvcyBtw6FzIGFudGlndW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLiBBYmFqbzogbG9zIMO6bHRpbW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIEV4cGxvcmVyIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgc2VudGlkbyBkZWwgb3JkZW4gcG9yIG9taXNpw7NuIGVuIGVsIHJlc3VsdGFkbyBkZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnRGVmaW5lIGTDs25kZSBlcyBxdWUgbGEgbGlnYSBcJ0luc2VydGFyIEZBUVwnIHNlcsOhIGRlc3BsZWdhZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZTogJ30gPSAnQm9ycmFyOiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsU2VhcmNoJ30gPSAnQnVzcXVlZGEgZGV0YWxsYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBDYXRlZ29yeT8nfSA9ICfCv0VzdMOhIHNlZ3VybyBkZSBxdWVyZXIgYm9ycmFyIGVzdGEgQ2F0ZWdvcsOtYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIExhbmd1YWdlPyd9ID0gJ8K/RXN0w6Egc2VndXJvIGRlIHF1ZXJlciBib3JyYXIgZXN0ZSBJZGlvbWE/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSd9ID0gJ0NhdGVnb3LDrWEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgc2VyIG1vc3RyYWRvcyBkZW50cm8gZGVsIGV4cGxvcmFkb3IgZW4gbGEgaW50ZXJmYWNlIGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBzZXIgbW9zdHJhZG9zIGRlbnRybyBkZWwgZXhwbG9yYWRvciBlbiBsYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgc2VyIG1vc3RyYWRvcyBjb21vIHJlc3VsdGFkbyBkZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNhdGVnb3J5IGFjY2Vzc2libGUuIFRvIGNyZWF0ZSBhbiBhcnRpY2xlIHlvdSBuZWVkIGFjY2VzcyB0byBhdCBsZWFzdCBvbmUgY2F0ZWdvcnkuIFBsZWFzZSBjaGVjayB5b3VyIGdyb3VwL2NhdGVnb3J5IHBlcm1pc3Npb24gdW5kZXIgLWNhdGVnb3J5IG1lbnUtISd9ID0gJ05vIHNlIHB1ZWRlIGFjY2VkZXIgYSBuaW5ndW5hIGNhdGVnb3LDrWEuIFBhcmEgY3JlYXIgdW4gYXJ0aWN1bG8gdXN0ZWQgZGViZSB0ZW5lciBhY2Nlc28gYSBtw61uaW1vIHVuYSBjYXRlZ29yw61hLiBQb3IgZmF2b3IgcmV2aXNlIHN1cyBwZXJtaXNvcyBkZSBncnVwby9jYXRlZ29yw61hIGVuIGVsIC1tZW7DuiBjYXRlZ29yw61hLSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gZGUgYXJ0w61jdWxvcyBGQVEgYSBzZXIgbW9zdHJhZG9zIHBvciBjYWRhIHDDoWdpbmEgY29tbyByZXN1bHRhZG8gZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZhY2UgZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIHNlciBtb3N0cmFkb3MgcG9yIGNhZGEgcMOhZ2luYSBjb21vIHJlc3VsdGFkbyBkZSB1bmEgYsO6c3F1ZWRhIGVuIGxhIGludGVyZmFjZSBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIHNlciBtb3N0cmFkb3MgZGVudHJvIGRlbCBleHBsb3JhZG9yIGVuIGxhIGludGVyZmFjZSBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gZGUgYXJ0w61jdWxvcyBGQVEgYSBzZXIgbW9zdHJhZG9zIGRlbnRybyBkZWwgZXhwbG9yYWRvciBlbiBsYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrU2VhcmNoJ30gPSAnQnVzcXVlZGEgcsOhcGlkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ01vc3RyYXIgZWwgQm90w7NuICJJbnNlcnRhciBWw61uY3VsbyIgZW4gQWdlbnRGQVFab29tU21hbGwgcGFyYSBhcnTDrWN1bG9zIEZBUSBww7pibGljb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnTW9zdHJhciBlbCBCb3TDs24gIkluc2VydGFyIFRleHRvICYgVsOtbmN1bG8iIGVuIEFnZW50RkFRWm9vbVNtYWxsIHBhcmEgYXJ0w61jdWxvcyBGQVEgcMO6YmxpY29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnTW9zdHJhciBlbCBCb3TDs24gIkluc2VydGFyIFRleHRvIiBlbiBBZ2VudEZBUVpvb21TbWFsbCBwYXJhIGFydMOtY3Vsb3MgRkFRIHDDumJsaWNvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSd9ID0gJ011ZXN0cmEgdW4gbGlnYSBlbiBlbCBtZW7DuiBwYXJhIGFjY2VkZXIgYWwgaGlzdG9yaWFsIGRlIHVuIGFydMOtY3VsbyBGQVEgZW4gc3UgdmlzdGEgZGUgZGV0YWxsZXMgZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YkNhdGVnb3JpZXMnfSA9ICdTdWJjYXRlZ29yaWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0aXRsZSBpcyByZXF1aXJlZC4nfSA9ICdFbCB0w610dWxvIGVzIHJlcXVlcmlkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBDYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBTdWJDYXRlZ29yaWVzJ30gPSAnRXN0YSBDYXRlZ29yw61hIGVzIHBhZHJlIGRlIGxhcyBzaWd1aWVudGVzIFN1YkNhdGVnb3LDrWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQ2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2UocyknfSA9ICdFc3RhIENhdGVnb3LDrWEgZXN0YSBzaWVuZG8gdXNhZGEgcG9yIGxvcyBzaWd1aWVudGVzIEFydMOtY3Vsb3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgTGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnRXN0ZSBJZGlvbWEgZXN0YSBzaWVuZG8gdXNhZG8gcG9yIGxvcyBzaWd1aWVudGVzIEFydMOtY3Vsb3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMhJ30gPSAnRXN0YSBjYXRlZ29yw61hIHlhIGV4aXN0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVcGRhdGVkJ30gPSAnQWN0dWFsaXphZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgQ2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBBcnRpY2xlISBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IGFub3RoZXIgQ2F0ZWdvcnknfSA9ICdObyBwdWVkZSBib3JyYXIgZXN0YSBDYXRlZ29yw61hLiBFc3TDoSBzaWVuZG8gdXNhZGEgcG9yIGFsIG1lbm9zIHVuIEFydMOtY3VsbyBGQVEgeS9vIGVzIHBhZHJlIGRlIGFsIG1lbm9zIG90cmEgQ2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBMYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIEFydGljbGUhJ30gPSAnTm8gcHVlZGUgYm9ycmFyIGVzdGUgSWRpb21hLiBFc3TDoSBzaWVuZG8gdXNhZG8gcG9yIGFsIG1lbm9zIHVuIEFydMOtY3VsbyBGQVEnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTMgRW5yaXF1ZSBNYXTDrWFzIFPDoW5jaGV6IDxxdWlxdWVAdW5pemFyLmVzPgojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19NWF9GQVE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUZBUQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwnfSA9ICdpbnRlcm5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ3DDumJsaWNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsJ30gPSAnZXh0ZXJubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnTsO6bWVybyBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAnVWx0aW1vcyBhcnTDrWN1bG9zIG1vZGlmaWNhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ1VsdGltb3MgYXJ0w61jdWxvcyBjcmVhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICdUb3AgMTAgZGUgYXJ0w61jdWxvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ1N1YmNhdGVnb3LDrWEgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICfCoU5vIHNlIGhhIHNlbGVjY2lvbmFkbyBuaW5ndW5hIHB1bnR1YWNpw7NuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdww7pibGljbyAodG9kb3MpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdleHRlcm5vIChjbGllbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnaW50ZXJubyAoYWdlbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdEw61hIGRlIGluaWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBtb250aCd9ID0gJ01lcyBkZSBpbmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ0HDsW8gZGUgaW5pY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdEw61hIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTWVzIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICdBw7FvIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnwqFHcmFjaWFzIHBvciBzdSB2b3RvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ8KhVXN0ZWQgeWEgaGEgdm90YWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJ0ltcHJpbWlyIGVsIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnQXJ0w61jdWxvcyBGQVEgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnTDrWN1bG9zIEZBUSAobnVldm9zKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0w61jdWxvcyBGQVEgKG1vZGlmaWNhZG9zIHJlY2llbnRlbWVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0FjdHVhbGl6YWRhIGNhdGVnb3LDrWEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdBw7FhZGlkYSBjYXRlZ29yw61hIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfCoUxhcyBjYXRlZ29yw61hcyBkZWJlIHRlbmVyIG5vbWJyZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ0VzdGEgY2F0ZWdvcsOtYSB5YSBleGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJ0HDsWFkaWRvIGlkaW9tYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnQWN0dWFsaXphZG8gaWRpb21hIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnRWwgbm9tYnJlIGVzIGltcHJlc2NpbmRpYmxlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0VzdGUgaWRpb21hIHlhIGV4aXN0ZS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdBw7FhZGlyIGFydMOtY3VsbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnU2UgcmVxdWllcmUgdW5hIGNhdGVnb3LDrWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnQXByb2JhY2nDs24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnR2VzdGnDs24gZGUgY2F0ZWdvcsOtYXMgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJ0HDsWFkaXIgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdCb3JyYXIgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ0FjZXB0YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnQcOxYWRpciBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdFZGl0YXIgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnU2UgbW9zdHJhcsOhIGNvbW8gY29tZW50YXJpbyBlbiBlbCBleHBsb3JhZG9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1BvciBmYXZvciwgc2VsZWNjaW9uZSBhbCBtZW5vcyB1biBncnVwbyBkZSBwZXJtaXNvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnR3J1cG9zIGRlIGFnZW50ZXMgcXVlIHB1ZWRlbiBhY2NlZGVyIGEgbG9zIGFydMOtY3Vsb3MgZGUgZXN0YSBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICfCv1NlZ3VybyBxdWUgZGVzZWEgYm9ycmFyIGVzdGEgY2F0ZWdvcsOtYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAnTm8gcHVlZGUgYm9ycmFyIGVzdGEgY2F0ZWdvcsOtYS4gRXN0w6Egc2llbmRvIHVzYWRhIHBvciBhbCBtZW5vcyB1biBhcnTDrWN1bG8gRkFRIHkvbyBlcyBwYWRyZSBkZSBhbCBtZW5vcyBvdHJhIGNhdGVnb3LDrWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICdFc3RhIGNhdGVnb3LDrWEgZXN0w6Egc2llbmRvIHVzYWRhIHBvciBsb3Mgc2lndWllbnRlcyBhcnTDrWN1bG9zIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdFc3RhIGNhdGVnb3LDrWEgZXMgcGFkcmUgZGUgbGFzIHNpZ3VpZW50ZXMgc3ViY2F0ZWdvcsOtYXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnwr9TZWd1cm8gcXVlIGRlc2VhIGJvcnJhciBlc3RlIGFydMOtY3VsbyBGQVE/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRXhwbG9yYWRvciBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVpY2sgU2VhcmNoJ30gPSAnQsO6c3F1ZWRhIFLDoXBpZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnQsO6c3F1ZWRhIEF2YW56YWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdTdWJjYXRlZ29yw61hcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdBcnTDrWN1bG9zIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ05vIHNlIGVuY29udHJhcm9uIHN1YmNhdGVnb3LDrWFzLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBkYXRvcyBlbiBsYSBCaXTDoWNvcmEgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7NuIGRlIElkaW9tYXMgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0gJ1V0aWxpY2UgZXN0YSBmdW5jaW9uYWxpZGFkIHNpIGRlc2VhIHRyYWJhamFyIGNvbiBtw7psdGlwbGVzIGlkaW9tYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ0HDsWFkaXIgSWRpb21hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSd9ID0gJ0JvcnJhciBJZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnQcOxYWRpciBJZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ0VkaXRhciBJZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ8K/U2VndXJvIHF1ZSBkZXNlYSBib3JyYXIgZXN0ZSBpZGlvbWE/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9ICdObyBwdWVkZSBib3JyYXIgZXN0ZSBpZGlvbWEuIEVzdMOhIHNpZW5kbyB1c2FkbyBwb3IgYWwgbWVub3MgdW4gYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJ0VzdGUgaWRpb21hIGVzdGEgc2llbmRvIHVzYWRvIHBvciBsb3Mgc2lndWllbnRlcyBBcnTDrWN1bG9zIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0FqdXN0ZXMgZGUgQ29udGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnQXJ0w61jdWxvcyBGQVEgcG9yIHDDoWdpbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnTm8gc2UgZW5jb250cmFyb24gZGF0b3MgZGUgRkFRLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUluZm8nfSA9ICdJbmZvcm1hY2nDs24tRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnVm90b3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ1RleHRvIGNvbXBsZXRvIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdCw7pzcXVlZGEgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnUHVudHVhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICdQdW50dWFjacOzbiAlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnZGUgNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICfCoU5vIHNlIGVuY29udHLDsyBuaW5nw7puIHZvdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdObyBzZSBlbmNvbnRyw7MgbmluZ8O6biB2b3RvLiBTZWEgZWwgcHJpbWVybyBlbiB2YWxvcmFyIGVzdGUgYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnRGVzY2FyZ2FyIEFkanVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPSAnwr9Dw7NtbyBkZSDDunRpbCBmdWUgZXN0ZSBhcnTDrWN1bG8/IFBvciBmYXZvciwgZMOpbm9zIHN1IHB1bnR1YWNpw7NuIHkgYXl1ZGUgYSBtZWpvcmFyIGxhIGJhc2UgZGUgZGF0b3MgZGUgRkFRLiBHcmFjaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ3BvY28gw7p0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAnbXV5IMO6dGlsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnSW5zZXJ0YXIgVGV4dG8gZGUgbGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0luc2VydGFyIEVubGFjZSBhIGxhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnSW5zZXJ0YXIgdGV4dG8geSBFbmxhY2UgYSBsYSBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBhcnTDrWN1bG9zIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ0LDunNxdWVkYSBkZSB0ZXh0byBjb21wbGV0byBlbiBhcnTDrWN1bG9zIEZBUSAoZWo6ICJKb2huKm4iIG8gIldpbGwqIiknOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhbGxlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ0J1c2NhciBhcnTDrWN1bG9zIGNvbiBsYSBwYWxhYnJhIGNsYXZlJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFFeHBsb3JlcgoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICdQw7pibGljbyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVpvb20KCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJ0ZpbHRybyBwYXJhIGVsIEhUTUwgcmVzdWx0YW50ZSBwYXJhIGHDsWFkaXIgZW5sYWNlcyBhIHVuYSBjYWRlbmEgZGV0ZXJtaW5hZGEuIEVsIGVsZW1lbnRvIEltYWdlbiBjb250ZW1wbGEgZG9zIHRpcG9zIGRlIHJlZ2lzdHJvcy4gRWwgcHJpbWVybyBlcyBlbCBub21icmUgZGUgdW5hIGltYWdlbiAocG9yIGVqZW1wbG8gZmFxLnBuZykuIEVuIGVzdGUgY2FzbyBzZSB1dGlsaXphcsOhIGxhIHJ1dGEgZGUgaW3DoWdlbmVzIGRlIE9UUlMuIExhIHNlZ3VuZGEgcG9zaWJpbGlkYWQgZXMgaW5zZXJ0YXIgZWwgZW5sYWNlIGEgbGEgaW1hZ2VuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDb2xvciBDU1MgcGFyYSBlbCByZXN1bHRhZG8gZGUgbGEgdm90YWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnR2VzdGnDs24gZGUgbGFzIENhdGVnb3LDrWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ07Dum1lcm8gZGUgZGVjaW1hbGVzIHBhcmEgZWwgcmVzdWx0YWRvIGRlIGxhIHZvdGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAnTm9tYnJlIHByZWRldGVybWluYWRvIGRlIGxhIGNhdGVnb3LDrWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJ0lkaW9tYSBwb3Igb21pc2nDs24gcGFyYSBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gbW9kbyBpZGlvbWEgw7puaWNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdQcmlvcmlkYWQgcG9yIG9taXNpw7NuIGRlIGxvcyB0aWNrZXRzIHBhcmEgYXByb2JhY2nDs24gZGUgbG9zIGFydMOtY3Vsb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAnRXN0YWRvIHBvciBvbWlzacOzbiBwYXJhIGxvcyBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0VzdGFkbyBwb3Igb21pc2nDs24gZGUgbG9zIHRpY2tldHMgcGFyYSBhcHJvYmFjacOzbiBkZSBsb3MgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAnVmFsb3IgcG9yIG9taXNpw7NuIHBhcmEgZWwgcGFyw6FtZXRybyAiQWN0aW9uIiBwYXJhIGxhIGludGVyZmF6IHDDumJsaWNhLiBFbCBwYXLDoW1ldHJvICJBY3Rpb24iIHNlIHVzYSBlbiBsb3MgInNjcmlwdHMiIGRlbCBzaXN0ZW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPSAnRGVmaW5lIHVuIG3Ds2R1bG8gZGUgdmlzdGEgZ2VuZXJhbCBwYXJhIG1vc3RyYXIgbGEgdmlzdGEgcGVxdWXDsWEgZGUgbGEgYml0w6Fjb3JhIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPSAnRGVmaW5lIHVuIG3Ds2R1bG8gZGUgdmlzdGEgcHJldmlhIHBhcmEgbW9zdHJhciBsYSB2aXN0YSBwZXF1ZcOxYSBkZSB1biBsaXN0YWRvIGRlIEZBUXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gdW5hIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gdW5hIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBlbCBhdHJpYnV0byBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxvcyBhcnTDrWN1bG9zIEZBUSBlbiB1bmEgYsO6c3F1ZWRhIGRlIEZBUSBlbiBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnRGVmaW5lIGVsIGF0cmlidXRvIHBvciBvbWlzacOzbiBwYXJhIG9yZGVuYXIgbG9zIGFydMOtY3Vsb3MgRkFRIGVuIGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0RFZmluZSBlbCBhdHJpYnV0byBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxhcyBGQVEgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gZGUgRkFRIHF1ZSBzZSB1c2Fyw6EgcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsYXMgRkFRIGVuIGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxhcyBGQVEgZW4gbG9zIHJlc3VsdGFkb3MgZGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBMb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBlbCBvcmRlbiBwb3Igb21pc2nDs24gZGUgbGFzIEZBUSBlbiBsb3MgcmVzdWx0YWRvcyBkZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3MgbcOhcyByZWNpZW50ZXMgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxhcyBGQVEgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogcMO6YmxpY2EuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3MgbcOhcyByZWNpZW50ZXMgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYWNlIGRlbCBjbGllbnRlLiBBcnJpYmE6IGxvcyBtw6FzIGFudGlndW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLiBBYmFqbzogbG9zIMO6bHRpbW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBlbCBvcmRlbiBwb3Igb21pc2nDs24gZGUgbG9zIHJlc3VsdGFkb3MgZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZhY2UgcMO6YmxpY2EuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdEZWZpbmUgbGFzIGNvbHVtbmFzIHF1ZSBzZSBtb3N0cmFyw6FuIGVuIGVsIEV4cGxvcmFkb3IgZGUgRkFRLiBFc3RhIG9wY2nDs24gbm8gdGllbmUgZWZlY3RvcyBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIGNvbHVtbmFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdEZWZpbmUgbGFzIGNvbHVtbmFzIHF1ZSBzZSBtb3N0cmFyw6FuIGVuIGxhIGJpdMOhY29yYSBkZSBGQVEuIEVzdGEgb3BjacOzbiBubyB0aWVuZSBlZmVjdG9zIGVuIGxhIHBvc2ljacOzbiBkZSBsYXMgY29sdW1uYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5lIGxhcyBjb2x1bW5hcyBxdWUgc2UgbW9zdHJhcsOhbiBlbiBsYSBiw7pzcXVlZGEgZGUgRkFRLiBFc3RhIG9wY2nDs24gbm8gdGllbmUgZWZlY3RvcyBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIGNvbHVtbmFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICdEZWZpbmUgZMOzbmRlIHNlIG1vc3RyYXLDoSBlbCBlbmxhY2UgwqtJbnNlcnRhciBGQVHCuy4gTm90YTogQWdlbnRUaWNrZXRBY3Rpb25Db21tb24gaW5jbHV5ZSBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSB5IEFnZW50VGlja2V0UmVzcG9uc2libGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ0RlZmluaWNpw7NuIGRlbCBjYW1wbyDCq3RleHRvIGxpYnJlwrsgcGFyYSBsb3MgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ0JvcnJhciBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0VkaXRhciBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ0hhYmlsaXRhciBtw7psdGlwbGVzIGlkaW9tYXMgZW4gZWwgbcOzZHVsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdIYWJpbGl0YXIgZWwgbWVjYW5pc21vIGRlIHZvdGFjacOzbiBlbiBlbCBtw7NkdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ0JpdMOhY29yYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0zDrW1pdGUgcGFyYSBsYSB2aXN0YSBnZW5lcmFsIMKrcGVxdWXDsWHCuyBkZSBsYSBCaXTDoWNvcmEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTMOtbWl0ZSBwYXJhIGxhIHZpc3RhIGdlbmVyYWwgwqtwZXF1ZcOxYcK7IGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdMw61taXRlIGRlIEZBUSBwb3IgcMOhZ2luYSBwYXJhIGxhIHZpc3RhIGdlbmVyYWwgwqtwZXF1ZcOxYcK7IGRlIGxhIEJpdMOhY29yYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0zDrW1pdGUgZGUgRkFRIHBvciBww6FnaW5hIHBhcmEgbGEgdmlzdGEgZ2VuZXJhbCDCq3BlcXVlw7FhwrsgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBwYXRoIHNlcGFyYXRvci4nfSA9ICdTZXBhcmFkb3IgZGUgbGEgcnV0YSBkZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdFbmNhbWluYWRvciBwYXJhIGxhIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICfDgXJlYS1GQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnUmVnaXN0cm8gZGUgbcOzZHVsbyAiRnJvbnRlbmQiIGVuIGxhIGludGVyZmF6IHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdHcnVwbyBwYXJhIGxhIGFwcm9iYWNpw7NuIGRlIGxvcyBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJ0hpc3RvcmlhIGRlIGVzdGUgYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnSW5jbHVpciBjYW1wb3MgaW50ZXJub3MgZW4gbG9zIHRpY2tldHMgYmFzYWRvcyBlbiB1biBhcnTDrWN1bG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnSW5jbHVpciBlbCBub21icmUgZGUgY2FkYSBjYW1wbyBlbiBsb3MgdGlja2V0cyBiYXNhZG9zIGVuIHVuIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2tzZWFyY2ggc2hvdWxkIGJlIHNob3duLid9ID0gJ0ludGVyZmFjZXMgZW4gbGFzIHF1ZSBzZSBkZWJlIG1vc3RyYXIgbGEgYnVzcXVlZGEgcsOhcGlkYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0JpdMOhY29yYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnR2VzdGnDs24gZGUgSWRpb21hcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZWtleSB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBsYW5ndWFnZSBmaWxlICpfRkFRLnBtLid9ID0gJ0NsYXZlIGRlIGlkaW9tYSBkZWZpbmlkYSBlbiBlbCBmaWNoZXJvIGRlIGlkaW9tYSAqX0ZBUS5wbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnRW5sYXphciBvdHJvIG9iamVjdG8gYSBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gbG9zIHJlc3VsdGFkb3MgZGVsIGV4cGxvcmFkb3IgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGxvcyByZXN1bHRhZG9zIGRlbCBleHBsb3JhZG9yIEZBUSBkZSBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGxvcyByZXN1bHRhZG9zIGRlbCBleHBsb3JhZG9yIEZBUSBkZSBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGxhIGJpdMOhY29yYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBjb21vIHJlc3VsdGFkbyBkZSB1bmEgYsO6c3F1ZWRhIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgY29tbyByZXN1bHRhZG8gZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgY29tbyByZXN1bHRhZG8gZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0gJ03Ds2R1bG8gcGFyYSBnZW5lcmFyIGVsIHBlcmZpbCBodG1sICJPcGVuU2VhcmNoIiBwYXJhIGLDunNxdWVkYXMgY29ydGFzIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAnTnVldm8gYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICdMb3MgbnVldm9zIGFydMOtY3Vsb3MgRkFRIHJlcXVpZXJlbiBhcHJvYmFjacOzbiBhbnRlcyBkZSBwdWJsaWNhcnNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBlbiBjYWRhIHDDoWdpbmEgZGUgbG9zIHJlc3VsdGFkb3MgZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBlbiBjYWRhIHDDoWdpbmEgZGUgbG9zIHJlc3VsdGFkb3MgZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICdOw7ptZXJvIGRlIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gw7psdGltb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdOw7ptZXJvIGRlIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gw7psdGltb3MgY3JlYWRvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICdOw7ptZXJvIGRlIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gZWwgVG9wIDEwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPSAnUGFyw6FtZXRyb3MgZGUgbGFzIHDDoWdpbmFzIChlbiBsYXMgcXVlIHNlIG11ZXN0cmFuIGxvcyBlbGVtZW50b3MgRkFRKSBkZSBsYSB2aXN0YSBnZW5lcmFsIHBlcXVlw7FhIGRlIGxhIGJpdMOhY29yYSBkZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPSAnUGFyw6FtZXRyb3MgZGUgbGFzIHDDoWdpbmFzIChlbiBsYXMgcXVlIHNlIG11ZXN0cmFuIGxvcyBlbGVtZW50b3MgRkFRKSBkZSBsYSB2aXN0YSBnZW5lcmFsIGRlIEZBUSBwZXF1ZcOxYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdJbXByaW1pciBlc3RhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdGaWxhIHBhcmEgbGEgYXByb2JhY2nDs24gZGUgbG9zIGFydMOtY3Vsb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJ1BvbmRlcmFjacOzbiBwYXJhIGxhIHZvdGFjacOzbi4gTGEgY2xhdmUgZGViZSBleHByZXNhcnNlIGVuIHBvcmNlbnRhamUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICdCw7pzcXVlZGEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ01vc3RyYXIgYm90w7NuIMKrSW5zZXJ0YXIgZW5sYWNlIGEgRkFRwrsgZW4gQWdlbnRGQVFab29tU21hbGwgcGFyYSBsb3MgYXJ0w61jdWxvcyBGQVEgcMO6YmxpY29zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnTW9zdHJhciBib3TDs24gwqtJbnNlcnRhciB0ZXh0byB5IGVubGFjZSBkZSBsYSBGQVHCuyBlbiBBZ2VudEZBUVpvb21TbWFsbCBwYXJhIGxvcyBhcnTDrWN1bG9zIEZBUSBww7pibGljb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJ01vc3RyYXIgYm90w7NuIMKrSW5zZXJ0YXIgdGV4dG8gZGUgbGEgRkFRwrsgZW4gQWdlbnRGQVFab29tU21hbGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ8K/TW9zdHJhciBjb250ZW5pZG8gSFRNTCBlbiBsb3MgYXJ0w61jdWxvcyBGQVE/Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICfCv01vc3RyYXIgbGEgcnV0YSBkZSBsYSBGQVE/IHPDrS9uby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBXWVNJV1lHIGVkaXRvciBpbiBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhciBlbCBlZGl0b3IgV1lTSVdZRyBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnwr9Nb3N0cmFyIGxvcyBlbGVtZW50b3MgZGUgbGFzIHN1YmNhdGVnb3LDrWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIGxvcyDDumx0aW1vcyBhcnTDrWN1bG9zIGFjdHVhbGl6YWRvcyBlbiBsYXMgaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIGxvcyDDumx0aW1vcyBhcnTDrWN1bG9zIGNyZWFkb3MgZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBsb3MgYXJ0w61jdWxvcyBUb3AgMTAgZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBsYSB2b3RhY2nDs24gZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBxdWUgcGVybWl0ZSBlbmxhemFyIGEgdW4gYXJ0w61jdWxvIEZBUSBjb24gb3RybyBvYmpldG8gZW4gc3UgdmlzdGEgYW1wbGlhZGEgZGUgZXNhIEZBUSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBxdWUgcGVybWl0ZSBib3JyYXIgdW4gYXJ0w61jdWxvIEZBUSBlbiBsYSB2aXN0YSBhbXBsaWFkYSBkZSBlc2EgRkFRIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgYWNjZWRlciBhbCBoaXN0b3JpYWwgZGUgdW4gYXJ0w61jdWxvIEZBUSBlbiBzdSB2aXN0YSBhbXBsaWFkYSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgZWRpdGFyIHVuIGFydMOtY3VsbyBGQVEgZW4gc3UgdmlzdGEgYW1wbGlhZGEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBwYXJhIHJldHJvY2VkZXIgZW4gbGEgdmlzdGEgYW1wbGlhZGEgZGUgRkFRIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgaW1wcmltaXIgdW4gYXJ0w61jdWxvIEZBUSBlbiBzdSB2aXN0YSBhbXBsaWFkYSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPSAnRWwgaWRlbnRpZmljYWRvciBwYXJhIHVuYSBGQVEsIHBvciBlamVtcGxvIEZBUSMsIEtCIywgTWlGQVEjLiBGQVEjIGVzIGxhIG9wY2nDs24gcG9yIG9taXNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICdFc3RlIGFqdXN0ZSBkZWZpbmUgcXVlIHVuIG9iamV0byDCq0ZBUcK7IHB1ZWRlIGVubGF6YXJzZSBjb24gb3Ryb3Mgb2JqZXRvcyDCq0ZBUcK7IHV0aWxpemFuZG8gZWwgdGlwbyBkZSBlbmxhY2UgwqtOb3JtYWzCuy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnRXN0ZSBhanVzdGUgZGVmaW5lIHF1ZSB1biBvYmpldG8gwqtGQVHCuyBwdWVkZSBlbmxhemFyc2UgY29uIG90cm9zIG9iamV0b3MgwqtGQVHCuyB1dGlsaXphbmRvIGVsIHRpcG8gZGUgZW5sYWNlIMKrUGFyZW50Q2hpbGTCuy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJ0VzdGUgYWp1c3RlIGRlZmluZSBxdWUgdW4gb2JqZXRvIMKrRkFRwrsgcHVlZGUgZW5sYXphcnNlIGNvbiBvdHJvcyBvYmpldG9zIMKrVGlja2V0wrsgdXRpbGl6YW5kbyBlbCB0aXBvIGRlIGVubGFjZSDCq05vcm1hbMK7Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICdFc3RlIGFqdXN0ZSBkZWZpbmUgcXVlIHVuIG9iamV0byDCq0ZBUcK7IHB1ZWRlIGVubGF6YXJzZSBjb24gb3Ryb3Mgb2JqZXRvcyDCq1RpY2tldMK7IHV0aWxpemFuZG8gZWwgdGlwbyBkZSBlbmxhY2UgwqtQYXJlbnRDaGlsZMK7Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnQ3VlcnBvIGRlbCB0aWNrZXQgcGFyYSBhcHJvYmFjacOzbiBkZSBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0FzdW50byBkZWwgdGlja2V0IHBhcmEgYXByb2JhY2nDs24gZGUgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICdFc3RhYmxlY2VyIGxhIGFsdHVyYSBwcmVkZXRlcm1pbmFkYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEFnZW50RkFRWm9vbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnRXN0YWJsZWNlciBsYSBhbHR1cmEgbcOheGltYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEFnZW50RkFRWm9vbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICdFc3RhYmxlY2VyIGxhIGFsdHVyYSBwcmVkZXRlcm1pbmFkYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEN1c3RvbWVyRkFRWm9vbSAoeSBQdWJsaWNGQVFab29tKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnRXN0YWJsZWNlciBsYSBhbHR1cmEgbcOheGltYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEN1c3RvbWVyRkFRWm9vbSAoeSBQdWJsaWNGQVFab29tKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgVGltZSBUbyBMZWF2ZSBmb3IgRkFRIGl0ZW1zLid9ID0gJ1RpZW1wbyBkZSB2aWRhIGRlIGxhIGNhY2jDqSBwYXJhIGxvcyBlbGVtZW50b3MgRkFRLic7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IG5lZWRzIGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwISd9ID0gJ1VuYSBjYXRlZ29yw61hIGRlYmUgdGVuZXIgYWwgbWVub3MgdW4gZ3J1cG8gZGUgcGVybWlzb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIGNvbW1lbnQhJ30gPSAnVW5hIGNhdGVnb3LDrWEgZGViZSB0ZW5lciB1biBjb21lbnRhcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgd2hpY2ggY2FuIGFjY2VzcyB0aGlzIGNhdGVnb3J5Lid9ID0gJ0xvcyBncnVwb3MgYWdlbnRlcyBwdWVkZW4gYWNjZWRlciBhIGVzdGEgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlcyd9ID0gJ0FydMOtY3Vsb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcmllcyd9ID0gJ0NhdGVnb3JpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBlbCBhdHJpYnV0byBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxvcyBhcnTDrWN1bG9zIEZBUSBlbiBlbCBFeHBsb3JhZG9yIEZBUSBlbiBsYSBpbnRlcmZhY2UgZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5lIGVsIHNlbnRpZG8gZGVsIG9yZGVuIHBvciBvbWlzacOzbiBlbiBlbCByZXN1bHRhZG8gZGVsIEV4cGxvcmFkb3IgRkFRIGVuIGxhIGludGVyZmFjZSBkZWwgY2xpZW50ZS4gQXJyaWJhOiBsb3MgbcOhcyBhbnRpZ3VvcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4gQWJham86IGxvcyDDumx0aW1vcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgc2VudGlkbyBkZWwgb3JkZW4gcG9yIG9taXNpw7NuIGVuIGVsIHJlc3VsdGFkbyBkZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIHDDumJsaWNhLiBBcnJpYmE6IGxvcyBtw6FzIGFudGlndW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLiBBYmFqbzogbG9zIMO6bHRpbW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIEV4cGxvcmVyIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgZWwgc2VudGlkbyBkZWwgb3JkZW4gcG9yIG9taXNpw7NuIGVuIGVsIHJlc3VsdGFkbyBkZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnRGVmaW5lIGTDs25kZSBlcyBxdWUgbGEgbGlnYSBcJ0luc2VydGFyIEZBUVwnIHNlcsOhIGRlc3BsZWdhZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZTogJ30gPSAnQm9ycmFyOiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsU2VhcmNoJ30gPSAnQnVzcXVlZGEgZGV0YWxsYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBDYXRlZ29yeT8nfSA9ICfCv0VzdMOhIHNlZ3VybyBkZSBxdWVyZXIgYm9ycmFyIGVzdGEgQ2F0ZWdvcsOtYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIExhbmd1YWdlPyd9ID0gJ8K/RXN0w6Egc2VndXJvIGRlIHF1ZXJlciBib3JyYXIgZXN0ZSBJZGlvbWE/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSd9ID0gJ0NhdGVnb3LDrWEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgc2VyIG1vc3RyYWRvcyBkZW50cm8gZGVsIGV4cGxvcmFkb3IgZW4gbGEgaW50ZXJmYWNlIGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBzZXIgbW9zdHJhZG9zIGRlbnRybyBkZWwgZXhwbG9yYWRvciBlbiBsYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgc2VyIG1vc3RyYWRvcyBjb21vIHJlc3VsdGFkbyBkZWwgRXhwbG9yYWRvciBGQVEgZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNhdGVnb3J5IGFjY2Vzc2libGUuIFRvIGNyZWF0ZSBhbiBhcnRpY2xlIHlvdSBuZWVkIGFjY2VzcyB0byBhdCBsZWFzdCBvbmUgY2F0ZWdvcnkuIFBsZWFzZSBjaGVjayB5b3VyIGdyb3VwL2NhdGVnb3J5IHBlcm1pc3Npb24gdW5kZXIgLWNhdGVnb3J5IG1lbnUtISd9ID0gJ05vIHNlIHB1ZWRlIGFjY2VkZXIgYSBuaW5ndW5hIGNhdGVnb3LDrWEuIFBhcmEgY3JlYXIgdW4gYXJ0aWN1bG8gdXN0ZWQgZGViZSB0ZW5lciBhY2Nlc28gYSBtw61uaW1vIHVuYSBjYXRlZ29yw61hLiBQb3IgZmF2b3IgcmV2aXNlIHN1cyBwZXJtaXNvcyBkZSBncnVwby9jYXRlZ29yw61hIGVuIGVsIC1tZW7DuiBjYXRlZ29yw61hLSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gZGUgYXJ0w61jdWxvcyBGQVEgYSBzZXIgbW9zdHJhZG9zIHBvciBjYWRhIHDDoWdpbmEgY29tbyByZXN1bHRhZG8gZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZhY2UgZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIHNlciBtb3N0cmFkb3MgcG9yIGNhZGEgcMOhZ2luYSBjb21vIHJlc3VsdGFkbyBkZSB1bmEgYsO6c3F1ZWRhIGVuIGxhIGludGVyZmFjZSBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIHNlciBtb3N0cmFkb3MgZGVudHJvIGRlbCBleHBsb3JhZG9yIGVuIGxhIGludGVyZmFjZSBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gZGUgYXJ0w61jdWxvcyBGQVEgYSBzZXIgbW9zdHJhZG9zIGRlbnRybyBkZWwgZXhwbG9yYWRvciBlbiBsYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrU2VhcmNoJ30gPSAnQnVzcXVlZGEgcsOhcGlkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ01vc3RyYXIgZWwgQm90w7NuICJJbnNlcnRhciBWw61uY3VsbyIgZW4gQWdlbnRGQVFab29tU21hbGwgcGFyYSBhcnTDrWN1bG9zIEZBUSBww7pibGljb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnTW9zdHJhciBlbCBCb3TDs24gIkluc2VydGFyIFRleHRvICYgVsOtbmN1bG8iIGVuIEFnZW50RkFRWm9vbVNtYWxsIHBhcmEgYXJ0w61jdWxvcyBGQVEgcMO6YmxpY29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnTW9zdHJhciBlbCBCb3TDs24gIkluc2VydGFyIFRleHRvIiBlbiBBZ2VudEZBUVpvb21TbWFsbCBwYXJhIGFydMOtY3Vsb3MgRkFRIHDDumJsaWNvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSd9ID0gJ011ZXN0cmEgdW4gbGlnYSBlbiBlbCBtZW7DuiBwYXJhIGFjY2VkZXIgYWwgaGlzdG9yaWFsIGRlIHVuIGFydMOtY3VsbyBGQVEgZW4gc3UgdmlzdGEgZGUgZGV0YWxsZXMgZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YkNhdGVnb3JpZXMnfSA9ICdTdWJjYXRlZ29yaWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0aXRsZSBpcyByZXF1aXJlZC4nfSA9ICdFbCB0w610dWxvIGVzIHJlcXVlcmlkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBDYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBTdWJDYXRlZ29yaWVzJ30gPSAnRXN0YSBDYXRlZ29yw61hIGVzIHBhZHJlIGRlIGxhcyBzaWd1aWVudGVzIFN1YkNhdGVnb3LDrWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQ2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2UocyknfSA9ICdFc3RhIENhdGVnb3LDrWEgZXN0YSBzaWVuZG8gdXNhZGEgcG9yIGxvcyBzaWd1aWVudGVzIEFydMOtY3Vsb3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgTGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnRXN0ZSBJZGlvbWEgZXN0YSBzaWVuZG8gdXNhZG8gcG9yIGxvcyBzaWd1aWVudGVzIEFydMOtY3Vsb3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMhJ30gPSAnRXN0YSBjYXRlZ29yw61hIHlhIGV4aXN0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVcGRhdGVkJ30gPSAnQWN0dWFsaXphZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgQ2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBBcnRpY2xlISBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IGFub3RoZXIgQ2F0ZWdvcnknfSA9ICdObyBwdWVkZSBib3JyYXIgZXN0YSBDYXRlZ29yw61hLiBFc3TDoSBzaWVuZG8gdXNhZGEgcG9yIGFsIG1lbm9zIHVuIEFydMOtY3VsbyBGQVEgeS9vIGVzIHBhZHJlIGRlIGFsIG1lbm9zIG90cmEgQ2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBMYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIEFydGljbGUhJ30gPSAnTm8gcHVlZGUgYm9ycmFyIGVzdGUgSWRpb21hLiBFc3TDoSBzaWVuZG8gdXNhZG8gcG9yIGFsIG1lbm9zIHVuIEFydMOtY3VsbyBGQVEnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZmFfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ9ii2K7YsduM2YYg2KfZgtmE2KfZhSDYqti52LHbjNmBINi02K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICfYotiu2LHbjNmGINin2YLZhNin2YUg2KfbjNis2KfYryDYtNiv2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ9io2KfZhNin2KrYsduM2YYg27HbsCDZgtmE2YUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICfYstuM2LEg2YXYrNmF2YjYudmH4oCM24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICfYp9mF2KrbjNin2LIg2LHYpyDYp9mG2KrYrtin2Kgg2Ybaqdix2K/Zh+KAjNin24zYryEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICfYsdmI2LIg2KLYutin2LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICfZhdin2Ycg2KLYutin2LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ9iz2KfZhCDYoti62KfYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAn2LHZiNiyINm+2KfbjNin2YYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAn2YXYp9mHINm+2KfbjNin2YYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICfYs9in2YQg2b7Yp9uM2KfZhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICfYp9iyINix2KfbjCDYtNmF2Kcg2LPZvtin2LPar9iy2KfYsduM2YUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJ30gPSAn2LTZhdinINmC2KjZhNinINix2KfbjCDYr9in2K/Zh+KAjNin24zYryEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAn2KfYrtio2KfYsSBGQVEgKNux27Ag2KrYp9uMINio2LHYqtixKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJ9in2K7YqNin2LEgRkFRICjYrNiv24zYr9inINin24zYrNin2K8g2LTYr9mHKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAn2KfYrtio2KfYsSBGQVEgKNis2K/bjNiv2Kcg2KrYutuM24zYsSDbjNin2YHYqtmHKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICfYqtin24zbjNivJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUNhdGVnb3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICfYr9ixIEV4cGxvcmVyINio2Ycg2LXZiNix2Kog24zaqSDZhdiq2YYg2KrZiNi224zYrduMINmG2YXYp9uM2LQg2K/Yp9iv2Ycg2K7ZiNin2YfZhtivINi02K8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgTGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBsYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgZGF0YSBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAn2KLYsdinJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgU2VhcmNoJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbgoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFFeHBsb3JlcgoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFab29tCgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b20gdGV4dCBmb3IgdGhlIHBhZ2Ugc2hvd24gdG8gY3VzdG9tZXJzIHRoYXQgaGF2ZSBubyB0aWNrZXRzIHlldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuIE5vdGU6IEFnZW50VGlja2V0QWN0aW9uQ29tbW9uIGluY2x1ZGVzIEFnZW50VGlja2V0Tm90ZSwgQWdlbnRUaWNrZXRDbG9zZSwgQWdlbnRUaWNrZXRGcmVlVGV4dCwgQWdlbnRUaWNrZXRPd25lciwgQWdlbnRUaWNrZXRQZW5kaW5nLCBBZ2VudFRpY2tldFByaW9yaXR5IGFuZCBBZ2VudFRpY2tldFJlc3BvbnNpYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uIG9mIEZBUSBpdGVtIGZyZWUgdGV4dCBmaWVsZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBwYXRoIHNlcGFyYXRvci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWlja3NlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZWtleSB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBsYW5ndWFnZSBmaWxlICpfRkFRLnBtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ9mG2YjYtNiq2Ycg2KzYr9uM2K8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZXMgZm9yIHZvdGluZy4gS2V5IG11c3QgYmUgaW4gcGVyY2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFdZU0lXWUcgZWRpdG9yIGluIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdm90aW5nIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgdXNlIGNvbXBsZXRlIGRlc2NyaXB0aW9uIChkYXlzLCBob3VycywgbWludXRlcyksIGlmIHNldCB0byAiWWVzIjsgb3IganVzdCBmaXJzdCBsZXR0ZXIgKGQsIGgsIG0pLCBpZiBzZXQgdG8gIk5vIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgVGltZSBUbyBMZWF2ZSBmb3IgRkFRIGl0ZW1zLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgd2hpY2ggY2FuIGFjY2VzcyB0aGlzIGNhdGVnb3J5Lid9ID0gJ9qv2LHZiNmH4oCM2YfYp9uMINqp2KfYsdi02YbYp9iz24wg2qnZhyDYqNmHINin24zZhiDYr9iz2KrZh+KAjNio2YbYr9uMINiv2LPYqtix2LPbjCDYr9in2LHZhtivLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yaWVzJ30gPSAn2K/Ys9iq2YfigIzYqNmG2K/bjOKAjNmH2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsU2VhcmNoJ30gPSAn2KzYs9iq2KzZiNuMINio2Kcg2KzYstuM24zYp9iqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSd9ID0gJ9iv2LPYqtmHIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjYXRlZ29yeSBhY2Nlc3NpYmxlLiBUbyBjcmVhdGUgYW4gYXJ0aWNsZSB5b3UgbmVlZCBhY2Nlc3MgdG8gYXQgbGVhc3Qgb25lIGNhdGVnb3J5LiBQbGVhc2UgY2hlY2sgeW91ciBncm91cC9jYXRlZ29yeSBwZXJtaXNzaW9uIHVuZGVyIC1jYXRlZ29yeSBtZW51LSEnfSA9ICfYr9iz2KrYsdiz24wg2KjZhyDZh9uM2oYg2qnYr9in2YUg2KfYsiDYr9iz2KrZh+KAjNio2YbYr9uM4oCM2YfYpyDZhdmC2K/ZiNixINmG24zYs9iqLiDYqNix2KfbjCDYp9uM2KzYp9ivINuM2qkg2YbZiNi02KrZhyDYrNiv24zYryDYp9mC2YTYpyDYqNmHINuM2qkg2K/Ys9iq2YfigIzYqNmG2K/bjCDYqNin24zYryDYr9iz2KrYsdiz24wg2K/Yp9i02KrZhyDYqNin2LTbjNivLiDZhNi32YHYpyDYp9iyINi32LHbjNmCINmF2YbZiNuMIGNhdGVnb3J5INiv2LPYqtix2LPbjOKAjNmH2KfbjCDar9ix2YjZhy/Yr9iz2KrZhyDYsdinINio2LHYsdiz24wg2YHYsdmF2KfbjNuM2K8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrU2VhcmNoJ30gPSAn2KzYs9iq2KzZiNuMINiz2LHbjNi5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YkNhdGVnb3JpZXMnfSA9ICfYstuM2LEg2K/Ys9iq2YfigIzZh9inJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZmlfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnc2lzw6RpbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ2p1bGtpbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsJ30gPSAndWxrb2luZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ0ZBUS1udW1lcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAnVmlpbWVrc2kgcMOkaXZpdGV0eXQgYXJ0aWtrZWxpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdWaWltZWtzaSBqdWxrYWlzdHV0IGFydGlra2VsaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ1RvcCAxMCBhcnRpa2tlbGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAnQWxha2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnRWkgdmFsaXR0dWEgYXJ2aW90YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdqdWxraW5lbiAoa2Fpa2tpKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAndWxrb2luZW4gKGFzaWFra2FhdCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJ3Npc8OkaW5lbiAoYWdlbnRpdCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAnQWxvaXR1c3DDpGl2w6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdBbG9pdHVzIGt1dWthdXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IHllYXInfSA9ICdBbG9pdHVzdnVvc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIGRheSd9ID0gJ0xvcHB1cMOkaXbDpCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdMb3BwdWt1dWthdXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB5ZWFyJ30gPSAnTG9wcHV2dW9zaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICdLaWl0b3MgYXJ2b3N0ZWx1c3Rhc2khJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJ30gPSAnT2xldCBqbyBhcnZvc3RlbGx1dCB0w6Rtw6RuIGFydGlra2VsaW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnVHVsb3N0YSBhcnRpa2tlbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnQXJ0aWtrZWxpdCAoVG9wIDEwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJ0FydGlra2VsaSAodXVkZXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdBcnRpa2tlbGkgKHDDpGl2aXRldHR5IMOkc2tldHTDpGluKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdLYXRlZ29yaWEgcMOkaXZpdGV0dHkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdLYXRlZ29yaWEgbGlzw6R0dHkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0thdGVnb3JpYWxsYSB0dWxlZSBvbGxhIG5pbWkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICdUw6Rtw6Qga2F0ZWdvcmlhIG9uIGpvIG9sZW1hc3NhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdLaWVsaSBsaXPDpHR0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICdLaWVsaSBww6Rpdml0ZXR0eSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmltaSBvbiBwYWtvbGxpbmVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ1TDpG3DpCBraWVsaSBvbiBqbyBvbGVtYXNzYSEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdMaXPDpMOkIEZBUSBhcnRpa2tlbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICdLYXRlZ29yaWEgb24gcGFrb2xsaW5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdIeXbDpGtzeW50w6QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnRkFROm4gS2F0ZWdvcmlvaWRlbiBoYWxsaW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdMaXPDpMOkIGthdGVnb3JpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdQb2lzdGEga2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnTGlzw6TDpCBrYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ011b2trYWEga2F0ZWdvcmlhYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnTsOkeXRldMOkw6RuIGtvbW1lbnR0aW5hIFNlbGFpbWVzc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAnVmFsaXRzZSBhaW5ha2luIHlrc2kgb2lrZXVzcnlobcOkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnQWdlbnR0aXJ5aG3DpHQsIGpvaWxsYSBvbiBww6TDpHN5IGFydGlra2VsZWloaW4gdMOkc3PDpCBrYXRlZ29yaWFzc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ0hhbHVhdGtvIHZhcm1hc3RpIHBvaXN0YWEgdMOkbcOkbiBrYXRlZ29yaWFuPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9ICdFdCB2b2kgcG9pc3RhYSB0w6R0w6Qga2F0ZWdvcmlhYSEgU2Ugc2lzw6RsdMOkw6Qgam9rbyBhcnRpa2tlbGVpdGEgdGFpIHNlIG9uIHRvaXNlbiBrYXRlZ29yaWFuIGlzw6RudMOka2F0ZWdvcmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ1NldXJhYXZhdCBhcnRpa2tlbGl0IGt1dWx1dmF0IHTDpGjDpG4ga2F0ZWdvcmlhYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnTsOkbcOkIGthdGVnb3JpYXQgb3ZhdCB0w6Rtw6RuIGthdGVnb3JpYW4gYWxha2F0ZWdvcmlvaXRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJ0hhbHVhdGtvIHZhcm1hc3RpIHBvaXN0YWEgdMOkbcOkbiBhcnRpa2tlbGluPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICdGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ1NlbGFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdQaWthaGFrdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICdNb25pcHVvbGluZW4gaGFrdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yaWVzJ30gPSAnQWxha2F0ZWdvcmlhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdBcnRpa2tlbGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnRWkgYWxha2F0ZWdvcmlvaXRhLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnRkFROm4ga2llbHRlbiBoYWxsaW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9ICdLw6R5dMOkIHTDpHTDpCBvbWluYWlzdXV0dGEsIGpvcyBoYWx1YXQga8OkeXR0w6TDpCB1c2VhbXBhYSBraWVsdMOkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICdMaXPDpMOkIGtpZWxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSd9ID0gJ1BvaXN0YSBraWVsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICdMaXPDpMOkIGtpZWxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICdNdW9ra2FhIGtpZWx0w6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ0hhbHVhdGtvIHZhcm1hc3RpIHBvaXN0YWEgdMOkbcOkbiBraWVsZW4/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9ICdFdCB2b2kgcG9pc3RhYSB0w6R0w6Qga2llbHTDpC4gQWluYWtpbiB5a3NpIGFydGlra2VsaSBrw6R5dHTDpMOkIHTDpHTDpCBraWVsdMOkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJ1NldXJhYXZhdCBhcnRpa2tlbGl0IGvDpHl0dMOkdsOkdCB0w6R0w6Qga2llbHTDpCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICdBcnRpa2tlbGVpdGEgcGVyIHNpdnUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnWWh0w6TDpG4gYXJ0aWtrZWxpYSBlaSBsw7Z5dHlueXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1JbmZvJ30gPSAnRkFRIHRpZWRvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ8OEw6RuZXN0eWtzZXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdGQVEgaGFrdSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdGQVEtaW5mb3JtYWF0aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnQXJ2b3N0ZWx1dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcgJSd9ID0gJ0Fydm9zdGVsdSAlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnLyA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ0VpIMOkw6RuacOkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnRWkgYW5uZXR0dWphIMOkw6RuacOkISDDhMOkbmVzdMOkIHTDpHTDpCBhcnRpa2tlbGlhIGVuc2ltbcOkaXNlbsOkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnTGF0YWEgbGlpdGV0aWVkb3N0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9ICdLdWlua2EgaHnDtmR5bGxpbmVuIHTDpG3DpCBhcnRpa2tlbGkgb2xpPyBBcnZvc3RlbGUgYXJ0aWtrZWxpLCBqb3R0YSB2b2ltbWUga2VoaXR0w6TDpCBGQVEtdGlldG9rYW50YWFtbWUuIEtpaXRvcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICdoecO2ZHl0w7ZuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ2h5w7ZkeWxsaW5lbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCd9ID0gJ0xpc8Okw6QgRkFRLXRla3N0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICdMaXPDpMOkIEZBUS1saW5ra2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJ0xpc8Okw6QgRkFRLXRla3N0aSBqYSAtbGlua2tpJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnWWh0w6TDpG4gYXJ0aWtrZWxpYSBlaSBsw7Z5dHlueXQuJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpJ30gPSAnSGFlIGFydGlra2VsZWlzdGEgKGVzaW0uICJNYXR0aSoiIHRhaSAiTWVpaypuZW4iKSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJ0RldGFpbHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUUV4cGxvcmVyCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ0p1bGtpbmVuJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRWm9vbQoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdLYXRlZ29yaWFoYWxsaW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4gTm90ZTogQWdlbnRUaWNrZXRBY3Rpb25Db21tb24gaW5jbHVkZXMgQWdlbnRUaWNrZXROb3RlLCBBZ2VudFRpY2tldENsb3NlLCBBZ2VudFRpY2tldEZyZWVUZXh0LCBBZ2VudFRpY2tldE93bmVyLCBBZ2VudFRpY2tldFBlbmRpbmcsIEFnZW50VGlja2V0UHJpb3JpdHkgYW5kIEFnZW50VGlja2V0UmVzcG9uc2libGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgbXVsdGlwbGUgbGFuZ3VhZ2VzIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHBhdGggc2VwYXJhdG9yLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnS2llbHRlbiBoYWxsaW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZWtleSB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBsYW5ndWFnZSBmaWxlICpfRkFRLnBtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBXWVNJV1lHIGVkaXRvciBpbiBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZnJfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnaW50ZXJuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICdwdWJsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ2V4dGVybmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ051bcOpcm8gZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ0Rlcm5pw6hyZXMgcXVlc3Rpb25zIG1vZGlmacOpZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAnRGVybmnDqHJlcyBxdWVzdGlvbnMgY3LDqcOpZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ1RvcCAxMCBkZXMgcXVlc3Rpb25zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAnU291cyBjYXTDqWdvcmllIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnUGFzIGRlIHPDqWxlY3Rpb24gISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdwdWJsaWMgKHRvdXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdleHRlcm5lIChjbGllbnQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICdpbnRlcm5lIChvcMOpcmF0ZXVyKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdKb3VyIGRlIGTDqXBhcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdNb2lzIGRlIGTDqXBhcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ0FubsOpZSBkZSBEw6lwYXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdKb3VyIGRlIEZpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdNb2lzIGRlIEZpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ0FubsOpZSBkZSBGaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnTWVyY2kgcG91ciB2b3RyZSB2b3RlICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdWb3VzIGF2ZXogZMOpasOgIHZvdMOpICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdJbXByaW1lciBBcnRpY2xlIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICdBcnRpY2xlcyBkZSBGQVEgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnRpY2xlcyBkZSBGQVEgKG5vdXZlbGxlcyBxdWVzdGlvbnMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdBcnRpY2xlcyBkZSBGQVEgKGRlcm5pZXJzIGNoYW5nZW1lbnRzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdDYXTDqWdvcmllIGRlIEZBUSBtaXNlIMOgIGpvdXIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdDYXTDqWdvcmllIGRlIEZBUSBham91dMOpZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnVW5lIGNhdMOpZ29yaWUgZGV2cmFpdCBhdm9pciB1biBub20hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICdDZXR0ZSBjYXTDqWdvcmllIGV4aXN0ZSBkw6lqw6AhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdMYW5ndWUgZGUgRkFRIGFqb3V0w6khJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ0xhbmd1ZSBkZSBGQVEgbWlzZSDDoCBqb3VyISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICdMZSBub20gZXN0IHJlcXVpcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdDZXR0ZSBsYW5ndWUgZXhpc3RlIGTDqWrDoCEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdBam91dGVyIEFydGljbGUgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnVW5lIGNhdMOpZ29yaWUgZXN0IHJlcXVpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdBdXRvcmlzYXRpb24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnR2VzdGlvbiBDYXTDqWdvcmllcyBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAnQWpvdXQgQ2F0w6lnb3JpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdFZmZhY2VyIENhdMOpZ29yaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdBam91dCBDYXTDqWdvcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdFZGl0ZXIgQ2F0w6lnb3JpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnU2VyYSBhZmZpY2jDqSBjb21tZSB1biBjb21tZW50YWlyZSBkYW5zIGxcJ0V4cGxvcmVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ01lcmNpIGRlIFPDqWxlY3Rpb25uZXIgYXUgbW9pbnMgdW4gZ3JvdXBlIGRlIHBlcm1pc3Npb24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICdHcm91cGVzIGRcJ2FnZW50cyBwb3V2YW50IGFjY8OpZGVyIGF1eCBhcnRpY2xlcyBkZSBjZXR0ZSBjYXTDqWdvcmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAnVm91bGV6LXZvdXMgdnJhaW1lbnQgZWZmYWNlciBjZXR0ZSBjYXTDqWdvcmllPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9ICdJbXBvc3NpYmxlIGRcJ2VmZmFjZXIgY2V0dGUgY2F0w6lnb3JpZS4gRWxsZSBlc3QgdXRpbGlzw6llIGRhbnMgYXUgbW9pbnMgdW4gYXJ0aWNsZSBkZSBGQVEgZXQvb3UgZXN0IHBhcmVudGUgZFwnYXUgbW9pbnMgdW5lIGF1dHJlIGNhdMOpZ29yaWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnQ2V0dGUgY2F0w6lnb3JpZSBlc3QgdXRpbGlzw6llIGRhbnMgbGVzIGFydGljbGVzIGRlIEZBUSBzdWl2YW50cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdDZXR0ZSBjYXTDqWdvcmllIGVzdCBwYXJlbnRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJ1ZvdWxlei12b3VzIHZyYWltZW50IGVmZmFjZXIgY2V0IGFydGljbGUgZGUgRkFRPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ05hdmlnYXRldXIgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ1JlY2hlcmNoZSByYXBpZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnUmVjaGVyY2hlIEF2YW5jw6llJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdTb3VzLWNhdMOpZ29yaWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ0FydGljbGVzIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ1BhcyBkZSBzb3VzLWNhdMOpZ29yaWUgdHJvdXbDqWUuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJ1BhcyBkZSBqb3VybmFsIGRlIGRvbm7DqWVzIEZBUSB0cm91dsOpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb24gTGFuZ3VlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9ICdVdGlsaXNlciBjZXR0ZSBmb25jdGlvbiBhZmluIGRlIHRyYXZhaWxsZXIgYXZlYyBkZSBtdWx0aXBsZXMgbGFuZ3Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICdBam91dGVyIHVuZSBsYW5ndWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlJ30gPSAnRWZmYWNlciB1bmUgbGFuZ3VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ0Fqb3V0ZXIgdW5lIGxhbmd1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnRWRpdGVyIGxhIGxhbmd1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnVm91bGV6LXZvdXMgdnJhaW1lbnQgZWZmYWNlciBjZXR0ZSBsYW5ndWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0gJ0ltcG9zc2libGUgZFwnZWZmYWNlciBjZXR0ZSBsYW5ndWUuIEVsbGUgZXN0IHV0aWxpc8OpZSBkYW5zIGF1IG1vaW5zIHVuIGFydGljbGUgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnQ2V0dGUgbGFuZ3VlIGVzdCB1dGlsaXPDqWUgZGFucyBsZXMgYXJ0aWNsZXMgRkFRIHN1aXZhbnRzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnUsOpZ2xhZ2VzIGRlIENvbnRleHRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ0FydGljbGVzIEZBUSBwYXIgcGFnZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgZGF0YSBmb3VuZC4nfSA9ICdwYXMgZGUgZG9ubsOpZXMgRkFRIHRyb3V2w6llcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUluZm8nfSA9ICdGQVEtSW5mbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1ZvdGVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICdUZXh0ZSBJbnTDqWdyYWwgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXRpb24gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ0NvdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICclIGRlIENvdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICdzdXIgNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICdBdWN1biB2b3RlIHRyb3V2w6khJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdTb3lleiBsZSBwcmVtaWVyIMOgIG5vdGVyIGNldGUgYXJ0aWNsZSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJ1TDqWzDqWNoYXJnZXIgRmljaGllciBKb2ludCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9ICdDZXQgQXJ0aWNsZSDDqXRhaXQtaWwgdXRpbGU/IE1lcmNpIGRlIGRvbm5lciB1bmUgbm90ZSBldCBkZSBwYXJ0aWNpcGVyIMOgIGxcJ2Ftw6lsaW9yYXRpb24gZGUgbGEgYmFzZSBkZSBkb25uw6llcy4gTWVyY2khJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAncGV1IHV0aWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ3Ryw6hzIHV0aWxlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnSW5zw6lyZXIgVGV4dGUgZGFucyBsYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBMaW5rJ30gPSAnSW5zw6lyZXIgTGllbiBkYW5zIGxhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnSW5zw6lyZXIgVGV4dGUgJiBMaWVuIGRhbnMgbGEgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnUGFzIGRcJ2FydGljbGUgZGUgRkFRIHRyb3V2w6kuJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpJ30gPSAnUmVjaGVyY2hlIHRleHRlIGludMOpZ3JhbGUgZGFucyBsZXMgYXJ0aWNsZXMgRkFRIChleC4gIkVtaWxpZSoiKSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJ0TDqXRhaWxzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnUmVjaGVyY2hlIGRlcyBBcnRpY2xlcyBhdmVjIG1vdCBjbMOpJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFFeHBsb3JlcgoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICdQdWJsaWMnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFab29tCgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb24gZGVzIGNhdMOpZ29yaWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAnTm9tIGRlIGNhdMOpZ29yaWUgcGFyIGTDqWZhdXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuIE5vdGU6IEFnZW50VGlja2V0QWN0aW9uQ29tbW9uIGluY2x1ZGVzIEFnZW50VGlja2V0Tm90ZSwgQWdlbnRUaWNrZXRDbG9zZSwgQWdlbnRUaWNrZXRGcmVlVGV4dCwgQWdlbnRUaWNrZXRPd25lciwgQWdlbnRUaWNrZXRQZW5kaW5nLCBBZ2VudFRpY2tldFByaW9yaXR5IGFuZCBBZ2VudFRpY2tldFJlc3BvbnNpYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uIG9mIEZBUSBpdGVtIGZyZWUgdGV4dCBmaWVsZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnU3VwcHJpbWVyIGNldHRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnTW9kaWZpZXIgY2V0dGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgcGF0aCBzZXBhcmF0b3IuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnSGlzdG9yaXF1ZSBkZSBjZXR0ZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWlja3NlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb24gZGVzIGxhbmd1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2VrZXkgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZSAqX0ZBUS5wbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdJbXByaW1lciBjZXR0ZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICdSZWNoZXJjaGUgZGFucyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBXWVNJV1lHIGVkaXRvciBpbiBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICdBZmZpY2hlciBsZXMgw6lsw6ltZW50cyBkZXMgc291cy1jYXTDqWdvcmllcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdm90aW5nIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHdoaWNoIGNhbiBhY2Nlc3MgdGhpcyBjYXRlZ29yeS4nfSA9ICdHcm91cGVzIGRcJ0FnZW50cyBwb3V2YW50IGFjY8OpZGVyIMOgIGNldHRlIGNhdMOpZ29yaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcmllcyd9ID0gJ0NhdMOpZ29yaWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbFNlYXJjaCd9ID0gJ0TDqXRhaWxzIGRlIGxhIHJlY2hlcmNoZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjYXRlZ29yeSBhY2Nlc3NpYmxlLiBUbyBjcmVhdGUgYW4gYXJ0aWNsZSB5b3UgbmVlZCBhY2Nlc3MgdG8gYXQgbGVhc3Qgb25lIGNhdGVnb3J5LiBQbGVhc2UgY2hlY2sgeW91ciBncm91cC9jYXRlZ29yeSBwZXJtaXNzaW9uIHVuZGVyIC1jYXRlZ29yeSBtZW51LSEnfSA9ICdBdWN1biBjYXTDqWdvcmllIGFjY2Vzc2libGUuIFBvdXIgY3LDqWVyIHVuZSBxdWVzdGlvbiwgdm91cyBkZXZleiBhdm9pciBhY2PDqHMgw6AgYXUgbW9pbnMgdW5lIGNhdMOpZ29yaWUuIFNWUCB2w6lyaWZpZXogbGVzIHBlcm1pc3Npb25zIGRlIHZvdHJlIGdyb3VwZS9jYXTDqWdvcmllIHZpYSBsZSBtZW51IC1jYXTDqWdvcmllLSAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrU2VhcmNoJ30gPSAnUmVjaGVyY2hlIHJhcGlkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJDYXRlZ29yaWVzJ30gPSAnU291cy1jYXTDqWdvcmllcyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aHVfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnYmVsc8WRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ3B1Ymxpa3VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsJ30gPSAna8O8bHPFkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnRkFRLXNvcnN6w6FtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ0xlZ3V0w7NiYiB2w6FsdG96b3R0IGVsZW1layc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdMZWd1dMOzYmIgbMOpdHJlaG96b3R0IGVsZW1layc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnVG9wIDEwIGVsZW1layc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ0Fsa2F0ZWfDs3Jpw6FqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ05pbmNzIMOpcnTDqWtlbMOpcyBraXbDoWxhc3p0dmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ255aWx2w6Fub3MgKMO2c3N6ZXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdrw7xsc8WRICjDvGd5ZsOpbCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJ2JlbHPFkSAow7xneWludMOpesWRKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdLZXpkxZEgbmFwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnS2V6ZMWRIGjDs25hcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnS2V6ZMWRIMOpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAnWsOhcsOzIG5hcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdaw6Fyw7MgaMOzbmFwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB5ZWFyJ30gPSAnWsOhcsOzIMOpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICdTemF2YXphdMOhdCBrw7ZzesO2bmrDvGshJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJ30gPSAnTcOhciBzemF2YXpvdHQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnRkFRIGNpa2sgbnlvbXRhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICdGQVEgY2lrayAoVG9wIDEwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJ0ZBUSBjaWtrICjDumopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdGQVEgY2lrayAodsOhbHRvem90dCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJ30gPSAnRkFRIGthdGVnw7NyaWEgbcOzZG9zdWx0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgYWRkZWQhJ30gPSAnRkFRIGthdGVnw7NyaWEgaG96esOhYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnU3rDvGtzw6lnZXMsIGhvZ3kgYSBrYXRlZ8OzcmnDoXQgZWxuZXZlenplISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAnQSBrYXRlZ8OzcmlhIG3DoXIgbMOpdGV6aWshJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdGQVEgbnllbHYgaG96esOhYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnRkFRIG55ZWx2IG3Ds2Rvc3VsdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnQSBuw6l2IHN6w7xrc8OpZ2VzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0EgbnllbHYgbcOhciBsw6l0ZXppayEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdGQVEgY2lrayBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICdBIGthdGVnw7NyaWEgc3rDvGtzw6lnZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnSsOzdsOhaGFnecOhcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdGQVEga2F0ZWfDs3JpYSBrZXplbMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdLYXRlZ8OzcmlhIGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdLYXRlZ8OzcmlhIHTDtnJsw6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ0thdGVnw7NyaWEgaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdLYXRlZ8OzcmlhIHN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ0EgYsO2bmfDqXN6xZFiZW4gbWVnamVneXrDqXNrw6ludCBmb2cgbWVnamVsZW5uaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBncm91cC4nfSA9ICdLw6lyZW0sIHbDoWxhc3N6b24gbGVnYWzDoWJiIGVneSBqb2dvc3VsdHPDoWcgY3NvcG9ydG90Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnw5xneWludMOpesWRIGNzb3BvcnQsIGFtZWx5aWsgaG96esOhZsOpciBhIGNpa2tla2hleiBlYmJlbiBhIGthdGVnw7NyacOhYmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAnVmFsw7NiYW4gdMO2csO2bG5pIGFrYXJqYSBhIGthdGVnw7NyacOhdD8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAnQSBrYXRlZ8OzcmlhIG5lbSB0w7Zyw7ZsaGV0xZEuIEZBUSBjaWtrIGhhc3puw6FsamEgdmFneSBtw6FzIGthdGVnw7NyaWEgc3rDvGzFkWplISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ0Ega2F0ZWfDs3JpYSBhIGvDtnZldGtlesWRIEZBUSBjaWtrZWtuw6lsIGhhc3puw6FsdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdBIGthdGVnw7NyaWEgYSBrw7Z2ZXRrZXrFkSBrYXRlZ8OzcmnDoWsgc3rDvGzFkWplJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJ1ZhbMOzYmFuIHTDtnLDtmxuaSBha2FyamEgZXp0IGEgRkFRIGNpa2tldD8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdGQVEtQsO2bmfDqXN6xZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVpY2sgU2VhcmNoJ30gPSAnR3lvcnNrZXJlc8Opcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICfDlnNzemV0ZXR0IGtlcmVzw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdBbGthdGVnw7NyaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnRkFRIGNpa2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICdOaW5jcyBhbGthdGVnw7NyaWEuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJ05pbmNzIEZBUS1Kb3VybmFsIGFkYXQuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0ZBUSBueWVsdiBrZXplbMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9ICdIYXN6bsOhbGphIGV6dCBhIHN6b2xnw6FsdGF0w6FzdCwgaGEgdMO2YmIgbnllbHZ2ZWwgc3plcmV0bmUgZG9sZ296bmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ055ZWx2IGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgTGFuZ3VhZ2UnfSA9ICdOeWVsdiB0w7ZybMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnTnllbHYgaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICdOeWVsdiBzemVya2VzenTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nfSA9ICdWYWzDs2JhbiB0w7Zyw7Zsbmkgc3plcmV0bsOpIGV6dCBhIG55ZWx2ZXQ/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9ICdBIG55ZWx2IG5lbSB0w7Zyw7ZsaGV0xZEsIGxlZ2Fsw6FiYiBlZ3kgRkFRIGNpa2sgaGFzem7DoWxqYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdFeiBhIG55ZWx2IGhhc3puw6FsYXRiYW4gdmFuIGEga8O2dmV0a2V6xZEgRkFRIGNpa2tuw6lsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnVGFydGFsb20gYmXDoWxsw610w6Fzb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnRkFRIGNpa2tlayBvbGRhbGFua8OpbnQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnTmluY3MgRkFRIGFkYXQuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtSW5mbyd9ID0gJ0ZBUS1pbmbDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1N6YXZhemF0b2snOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ0ZBUSB0ZWxqZXMgc3rDtnZlZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdGQVEga2VyZXPDqXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnRkFRIGluZm9ybcOhY2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcnfSA9ICfDiXJ0w6lrZWzDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICfDiXJ0w6lrZWzDqXMgJSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvdXQgb2YgNSd9ID0gJzUtYsWRbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICdOaW5jcyBzemF2YXphdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ05pbmNzIHN6YXZhemF0ISBMZWd5ZW4gYXogZWxzxZEsIGFraSDDqXJ0w6lrZWxpIGEgRkFRIGNpa2tldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJ01lbGzDqWtsZXQgbGV0w7ZsdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPSAnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnbmVtIHNlZ8OtdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICduYWd5b24gc2Vnw610JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnRkFRIHN6w7Z2ZWcgYmXDrXLDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0ZBUSBsaW5rIGJlw61yw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnRkFRIHN6w7Z2ZWcgw6lzIGxpbmsgYmXDrXLDoXNhJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnTmVtIHRhbMOhbGhhdMOzIEZBUSBjaWtrLic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ1RlbGplcyBzesO2dmVnZXMga2VyZXPDqXMgYSBGQVEgY2lra2VrYmVuIChwbC4gIkoqbm9zIiBvciAiS292KiIpJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbgoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnUsOpc3psZXRlayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ0Npa2tlayBrZXJlc8Opc2Uga3VsY3NzemF2YWtrYWwnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUUV4cGxvcmVyCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ055aWx2w6Fub3MnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFab29tCgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICdFZ3kgc3rFsXLFkSBhIEhUTUwga2ltZW5ldGhleiwgaG9neSBob3p6w6FhZGpvbiBsaW5rZWtldCBhIGRlZmluacOhbHQgc3rDtnZlZ2VraGV6LiBBeiBJbWFnZSBlbGVtIGvDqXRmw6lsZSBiZW1lbmV0ZXQgZW5nZWQuIEEga8OpcCBuZXZlIGF6IGVsc8WRIChwbC4gZmFxLnBuZykuIEViYmVuIGF6IGVzZXRiZW4gYXogT1RSUyBrw6lwZWsgw7p0dm9uYWxhIGtlcsO8bCBmZWxoYXN6bsOhbMOhc3JhLiBBIG3DoXNvZGlrIGxlaGV0xZFzw6lnIGEga8OpcHJlIG11dGF0w7MgbGluayBiZWxpbGxlc3p0w6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDU1Mgc3ppbmVrIGEgc3phdmF6w6FzIGVyZWRtw6luecOpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnS2F0ZWfDs3JpYWtlemVsw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ0Egc3phdmF6w6FzaSBlcmVkbcOpbnkgdGl6ZWRlc2plZ3llaW5layBzesOhbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICdBbGFww6lydGVsbWV6ZXR0IGthdGVnw7NyaWEgbmV2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJ0VneW55ZWx2xbEgbcOzZCBlc2V0w6luIGEgRkFRIGNpa2tlayBhbGFww6lydGVsbWV6ZXR0IG55ZWx2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0ZBUSBjaWtrZWsgasOzdsOhaGFnecOhc8OhaG96IGEgamVneWVrIGFsYXDDqXJ0ZWxtZXpldHQgcHJpb3JpdMOhc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICdBIEZBUSBjaWtrIGFsYXDDqXJ0ZWxtZXpldHQgw6FsbGFwb3RhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnRkFRIGNpa2tlayBqw7N2w6FoYWd5w6Fzw6Fob3ogYSBqZWd5ZWsgYWxhcMOpcnRlbG1lemV0dCDDoWxsYXBvdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAnQSBwdWJsaWMgZnJvbnRlbmQgQWN0aW9uIHBhcmFtZXRlcsOpbmVrIGFsYXDDqXJ0ZWxtZXpldHQgw6lydMOpa2UuIEF6IEFjdGlvbiBwYXJhbWV0ZXIgYSByZW5kc3plciBzY2lwcnQtamVpYmVuIGtlcsO8bCBmZWxoYXN6bsOhbMOhc3JhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPSAnRWd5IMOhdHRla2ludMWRIG1vZHVsdCBkZWZpbmnDoWwgYSBGQVEgam91cm5hbCBraWNzaSBuw6l6ZXTDqW5layBtZWdtdXRhdMOhc8OhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPSAnRWd5IMOhdHRla2ludMWRIG1vZHVsdCBkZWZpbmnDoWwgYSBGQVEgbGlzdGEga2ljc2kgbsOpemV0w6luZWsgbWVnbXV0YXTDoXPDoWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdBeiBhbGFww6lydGVsbWV6ZXR0IEZBUSBhdHRyaWLDunR1bW9rYXQgZGVmaW5pw6FsamEgYSBGQVEgcmVuZGV6w6lzaGV6IGF6IMO8Z3lpbnTDqXrFkSBmZWzDvGxldMOpbiBhIEZBUSBrZXJlc8Opc27DqWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnQXogYWxhcMOpcnRlbG1lemV0dCBGQVEgYXR0cmliw7p0dW1va2F0IGRlZmluacOhbGphIGEgRkFRIHJlbmRlesOpc2hleiBheiDDvGd5ZsOpbCBmZWzDvGxldMOpbiBhIEZBUSBrZXJlc8Opc27DqWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0F6IGFsYXDDqXJ0ZWxtZXpldHQgRkFRIGF0dHJpYsO6dHVtb2thdCBkZWZpbmnDoWxqYSBhIEZBUSByZW5kZXrDqXNoZXogYSBueWlsdsOhbm9zIGZlbMO8bGV0ZW4gYSBGQVEga2VyZXPDqXNuw6lsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdBeiBhbGFww6lydGVsbWV6ZXR0IEZBUSBhdHRyaWLDunR1bW9rYXQgZGVmaW5pw6FsamEgYSBGQVEgcmVuZGV6w6lzaGV6IGF6IMO8Z3lpbnTDqXrFkSBmZWzDvGxldMOpbiBhIEZBUSBiw7ZuZ8Opc3rFkW7DqWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0F6IGFsYXDDqXJ0ZWxtZXpldHQgRkFRIGF0dHJpYsO6dHVtb2thdCBkZWZpbmnDoWxqYSBhIEZBUSByZW5kZXrDqXNoZXogYXogw7xneWbDqWwgZmVsw7xsZXTDqW4gYSBGQVEgYsO2bmfDqXN6xZFuw6lsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnQXogYWxhcMOpcnRlbG1lemV0dCBGQVEgYXR0cmliw7p0dW1va2F0IGRlZmluacOhbGphIGEgRkFRIHJlbmRlesOpc2hleiBhIG55aWx2w6Fub3MgZmVsw7xsZXRlbiBhIEZBUSBiw7ZuZ8Opc3rFkW7DqWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0F6IGFsYXDDqXJ0ZWxtZXpldHQgRkFRIHNvcnJlbmRldCBkZWZpbmnDoWxqYSBhIEZBUSBiw7ZuZ8Opc3rFkWJlbiBheiDDvGd5aW50w6l6xZEgZmVsw7xsZXTDqW4uIFVwOiByw6lnZWJiaWVrIGZlbMO8bCwgRG93bjogbGVnZnJpc3NlYmIgZmVsw7xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdBeiBhbGFww6lydGVsbWV6ZXR0IEZBUSBzb3JyZW5kZXQgZGVmaW5pw6FsamEgYSBGQVEgYsO2bmfDqXN6xZFiZW4gYXogw7xneWbDqWwgZmVsw7xsZXTDqW4uIFVwOiByw6lnZWJiaWVrIGZlbMO8bCwgRG93bjogbGVnZnJpc3NlYmIgZmVsw7xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnQXogYWxhcMOpcnRlbG1lemV0dCBGQVEgc29ycmVuZGV0IGRlZmluacOhbGphIGEgRkFRIGLDtm5nw6lzesWRYmVuIGEgbnlpbHbDoW5vcyBmZWzDvGxldGVuLiBVcDogcsOpZ2ViYmllayBmZWzDvGwsIERvd246IGxlZ2ZyaXNzZWJiIGZlbMO8bC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0F6IGFsYXDDqXJ0ZWxtZXpldHQgRkFRIHNvcnJlbmRldCBkZWZpbmnDoWxqYSBhIGtlcmVzw6lzbsOpbCBheiDDvGd5aW50w6l6xZEgZmVsw7xsZXTDqW4uIFVwOiByw6lnZWJiaWVrIGZlbMO8bCwgRG93bjogbGVnZnJpc3NlYmIgZmVsw7xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnQXogYWxhcMOpcnRlbG1lemV0dCBGQVEgc29ycmVuZGV0IGRlZmluacOhbGphIGEga2VyZXPDqXNuw6lsIGF6IMO8Z3lmw6lsIGZlbMO8bGV0w6luLiBVcDogcsOpZ2ViYmllayBmZWzDvGwsIERvd246IGxlZ2ZyaXNzZWJiIGZlbMO8bC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdBeiBhbGFww6lydGVsbWV6ZXR0IEZBUSBzb3JyZW5kZXQgZGVmaW5pw6FsamEgYSBrZXJlc8Opc27DqWwgYSBueWlsdsOhbm9zIGZlbMO8bGV0ZW4uIFVwOiByw6lnZWJiaWVrIGZlbMO8bCwgRG93bjogbGVnZnJpc2VzYmIgZmVsw7xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnQSBGQVEgYsO2bmfDqXN6xZFiZW4gbMOhdGhhdMOzIG9zemxvcG9rYXQgZGVmaW5pw6FsamEuIEEgcGFyYW3DqXRlciBuaW5jcyBoYXTDoXNzYWwgYXogb3N6bG9wIHBvesOtY2nDs2rDoXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdBIEZBUSBqb3VybmFsLWJhbiBsw6F0aGF0w7Mgb3N6bG9wb2thdCBkZWZpbmnDoWxqYS4gQSBwYXJhbcOpdGVyIG5pbmNzIGhhdMOhc3NhbCBheiBvc3psb3AgcG96w61jacOzasOhcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnQSBGQVEga2VyZXPDqXNuw6lsIGzDoXRoYXTDsyBvc3psb3Bva2F0IGRlZmluacOhbGphLiBBIHBhcmFtw6l0ZXIgbmluY3MgaGF0w6Fzc2FsIGF6IG9zemxvcCBwb3rDrWNpw7Nqw6FyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4gTm90ZTogQWdlbnRUaWNrZXRBY3Rpb25Db21tb24gaW5jbHVkZXMgQWdlbnRUaWNrZXROb3RlLCBBZ2VudFRpY2tldENsb3NlLCBBZ2VudFRpY2tldEZyZWVUZXh0LCBBZ2VudFRpY2tldE93bmVyLCBBZ2VudFRpY2tldFBlbmRpbmcsIEFnZW50VGlja2V0UHJpb3JpdHkgYW5kIEFnZW50VGlja2V0UmVzcG9uc2libGUuJ30gPSAnRGVmaW5pw6FsamEsIGhvZ3kgYSBcJ0luc2VydCBGQVFcJyBsaW5rIGhvbCBsw6F0aGF0w7MuIE1lZ2plZ3l6w6lzOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiB0YXJ0YWxtYXp6YSBheiBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSDDqXMgIEFnZW50VGlja2V0UmVzcG9uc2libGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ0EgRkFRIGNpa2sgc3phYmFkLXN6w7Z2ZWdlcyBtZXrFkWrDqXQgZGVmaW5pw6FsamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ1TDtnLDtmxkIGV6dCBhIEZBUS10JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICdTemVya2VzemQgZXp0IGEgRkFRLXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ1TDtmJiIG55ZWx2IGhhc3puw6FsYXTDoXQgZW5nZWTDqWx5ZXppIGEgRkFRIG1vZHVsYmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJ0Egc3phdmF6w6FzIGVuZ2Vkw6lseWV6w6lzZSBhIEZBUSBtb2R1bGJhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdGQVEgSm91cm5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnRkFRIEpvdXJuYWwgw6F0dGVraW50xZEgImtpY3NpIG7DqXpldCIgbGltaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdGQVEgw6F0dGVraW50xZEgIktpY3NpIG7DqXpldCIgbGltaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnRkFRIGxpbWl0IG9sZGFsYW5rw6ludCBhIEZBUSBKb3VybmFsIMOhdHRla2ludMWRICJraWNzaSBuw6l6ZXTDqWhleiInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0ZBUSBsaW1pdCBvbGRhbGFua8OpbnQgYSBGQVEgIMOhdHRla2ludMWRICJraWNzaSBuw6l6ZXTDqWhleiInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHBhdGggc2VwYXJhdG9yLid9ID0gJ0ZBUSDDunR2b25hbCBlbHbDoWxhc3p0w7MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnRkFRLXRlcsO8bGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0EgbnlpbHbDoW5vcyBpbnRlcmZhY2UgZnJvbnRlbmQgbW9kdWxlIHJlZ2lzenRyw6FjacOzamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0Nzb3BvcnQgYSBGQVEgY2lrayBqw7N2w6FoYWd5w6FzaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnRkFRIHTDtnJ0w6luZXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdCZWxzxZEgbWV6xZFrZXQgdGFydGFsbWF6IGEgRkFRIGFsYXDDuiBqZWd5ZWtoZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnTWluZGVuIG1lesWRIG5ldsOpdCB0YXJ0YWxtYXp6YSBhIEZBUSBhbGFww7ogamVneWVrYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWlja3NlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnRmVsw7xsZXQsIGFob2wgYSBneW9yc2tlcmVzw6lzIGzDoXRoYXTDsy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0pvdXJuYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ055ZWx2ZWsga2V6ZWzDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdla2V5IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGUgKl9GQVEucG0uJ30gPSAnQSAqX0ZBUS5wbSBmw6FqbGJhbiBkZWZpbmnDoWx0IG55ZWx2IGt1bGNzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnQSBGQVEgZWxlbWJlbiBtw6FzIG9iamVrdHVtcmEgdmFsw7MgaGl2YXRrb3rDoXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdBIG1lZ2plbGVuxZEgRkFRIGNpa2tlayBtYXhpbcOhbGlzIHN6w6FtYSBhIEZBUSBiw7ZuZ8Opc3rFkSDDvGd5aW50w6l6xZEgZmVsw7xsZXTDqW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdBIG1lZ2plbGVuxZEgRkFRIGNpa2tlayBtYXhpbcOhbGlzIHN6w6FtYSBhIEZBUSBiw7ZuZ8Opc3rFkSDDvGd5ZsOpbCBmZWzDvGxldMOpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdBIG1lZ2plbGVuxZEgRkFRIGNpa2tlayBtYXhpbcOhbGlzIHN6w6FtYSBhIEZBUSBiw7ZuZ8Opc3rFkSBueWlsdsOhbm9zIGZlbMO8bGV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0EgbWVnamVsZW7FkSBGQVEgY2lra2VrIG1heGltw6FsaXMgc3rDoW1hIGEgRkFRIGpvdXJuYWwgw7xneWludMOpesWRIGZlbMO8bGV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdBIG1lZ2plbGVuxZEgRkFRIGNpa2tlayBtYXhpbcOhbGlzIHN6w6FtYSBhIGtlcmVzw6lzbsOpbCBheiDDvGd5aW50w6l6xZEgZmVsw7xsZXTDqW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0EgbWVnamVsZW7FkSBGQVEgY2lra2VrIG1heGltw6FsaXMgc3rDoW1hIGEga2VyZXPDqXNuw6lsIGF6IMO8Z3lmw6lsIGZlbMO8bGV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnQSBtZWdqZWxlbsWRIEZBUSBjaWtrZWsgbWF4aW3DoWxpcyBzesOhbWEgYSBrZXJlc8Opc27DqWwgYSBueWlsdsOhbm9zIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9ICdNb2R1bCBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBsw6l0cmVob3rDoXPDoWhveiByw7Z2aWQgRkFRIGtlcmVzw6lzbsOpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAnw5pqIEZBUSBjaWtrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJ0F6IMO6aiBGQVEgY2lrayBqw7N2w6FoYWd5w6FzYSBzesO8a3PDqWdlcyBhIHB1Ymxpa8OhbMOhcyBlbMWRdHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdBIG1lZ2plbGVuxZEgRkFRIGNpa2tlayBzesOhbWEgYSBGQVEgYsO2bmfDqXN6xZEgw7xneWludMOpesWRIGZlbMO8bGV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0EgbWVnamVsZW7FkSBGQVEgY2lra2VrIHN6w6FtYSBhIEZBUSBiw7ZuZ8Opc3rFkSBueWlsdsOhbm9zIGZlbMO8bGV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnQSBtZWdqZWxlbsWRIEZBUSBjaWtrZWsgc3rDoW1hIG1pbmRlbiBsYXBvbiBhIGtlcmVzw6lzbsOpbCBheiDDvGd5ZsOpbCBmZWzDvGxldMOpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdBIG1lZ2plbGVuxZEgRkFRIGNpa2tlayBzesOhbWEgbWluZGVuIGxhcG9uIGEga2VyZXPDqXNuw6lsIGEgbnlpbHbDoW5vcyBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjaGFuZ2VzLid9ID0gJ0EgbWVnamVsZW7FkSBlbGVtZWsgc3rDoW1hIGF6IHV0b2xzw7MgIG3Ds2Rvc3VsdGFrbsOhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdBIG1lZ2plbGVuxZEgZWxlbWVrIHN6w6FtYSBheiB1dG9sc8OzIGzDqXRyZWhvem90dGFrbsOhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICdBIG1lZ2plbGVuxZEgZWxlbWVrIHN6w6FtYSBhIFRPUDEwLW7DqWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9ICdQYXJhbcOpdGVyZWsgYSBsYXBva2hveiAoYW1lbHlla2VuIGEgRkFRIGVsZW1layBtZWdqZWxlbm5laykgYSBraWNzaSBGQVEgam91cm5hbCDDoXR0ZWtpbnTDqXPDqW7DqWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPSAnUGFyYW3DqXRlcmVrIGEgbGFwb2tob3ogKGFtZWx5ZWtlbiBhIEZBUSBlbGVtZWsgbWVnamVsZW5uZWspIGEga2ljc2kgRkFRIMOhdHRla2ludMOpc8OpbsOpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdOeW9tdGFzZCBlenQgYSBGQVEtdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdWw6Fyw7NsaXN0YSBhIEZBUSBjaWtrZWsgasOzdsOhaGFnecOhc8OhaG96JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnw4lydMOpa2VrIGEgc3phdmF6w6FzaG96LiBBIGt1bGNzIHN6w6F6YWzDqWsga2VsbCBsZWd5ZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICdGQVEga2VyZXPDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnTWVnbXV0YXRqYSBhICJGQVEgbGluayBiZXN6w7pyw6FzIiBnb21ib3QgYXogQWdlbnRGQVFab29tU21hbGwgYSBueWlsdsOhbm9zIEZBUSBjaWtrZWtoZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICdNZWdtdXRhdGphIGEgIkZBUSBsaW5rIMOpcyBzesO2dmVnIGJlc3rDunLDoXMiIGdvbWJvdCBheiBBZ2VudEZBUVpvb21TbWFsbCBhIG55aWx2w6Fub3MgRkFRIGNpa2tla2hlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnTWVnbXV0YXRqYSBhICJGQVEgc3rDtnZlZyBiZXN6w7pyw6FzIiBnb21ib3QgYXogQWdlbnRGQVFab29tU21hbGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ0ZBUSBjaWtrIG1lZ2plbGVuw610w6lzZSBIVE1MLWJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICdGQVEgw7p0dm9uYWwgbWVnamVsZW7DrXTDqXNlIGlnZW4vbmVtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFdZU0lXWUcgZWRpdG9yIGluIGFnZW50IGludGVyZmFjZS4nfSA9ICdXWVNJV1lHIGVkaXRvciBtZWdqZWxlbsOtdMOpc2UgYXogw7xneWludMOpesWRIGZlbMO8bGV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnQXogYWxrYXRlZ8OzcmlhIGVsZW1laW5layBtZWdqZWxlbsOtdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnQXogdXRvbHPDsyBtw7Nkb3PDrXRvdHQgZWxlbWVrIG1lZ2plbGVuw610w6lzZSBhIGRlZmluacOhbHQgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ0F6IHV0b2xzw7MgbMOpdHJlaG96b3R0IGVsZW1layBtZWdqZWxlbsOtdMOpc2UgYSBkZWZpbmnDoWx0IGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdBIFRPUCAxMCBlbGVtZWsgbWVnamVsZW7DrXTDqXNlIGEgZGVmaW5pw6FsdCBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnU3phdmF6w6FzIG1lZ2plbGVuw610w6lzZSBhIGRlZmluacOhbHQgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTGluayBtZWdqZWxlbsOtdMOpc2UgYSBtZW7DvGJlbiBhbWkgZW5nZWRpIGEgRkFRIGxpbmtlbMOpc8OpdCBtw6FzIG9iamVrdHVtb2trYWwgYSBGQVEgcsOpc3psZXRlaW7DqWwgYXogw7xneWludMOpesWRIGZlbMO8bGV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdMaW5rIG1lZ2plbGVuw610w6lzZSBhIG1lbsO8YmVuIGFtaSBlbmdlZGkgYSBGQVEgdMO2cmzDqXPDqXQgYSBGQVEgcsOpc3psZXRlaW7DqWwgYXogw7xneWludMOpesWRIGZlbMO8bGV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdMaW5rIG1lZ2plbGVuw610w6lzZSBhIG1lbsO8YmVuIGFtaSBlbMOpcmkgYSBGQVEgdMO2cnTDqW5ldMOpdCBhIEZBUSByw6lzemxldGVpbsOpbCBheiDDvGd5aW50w6l6xZEgZmVsw7xsZXTDqW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTGluayBtZWdqZWxlbsOtdMOpc2UgYSBtZW7DvGJlbiBhbWkgZW5nZWRpIGEgRkFRIHN6ZXJrZXN6dMOpc8OpdCBhIEZBUSByw6lzemxldGVpbsOpbCBheiDDvGd5aW50w6l6xZEgZmVsw7xsZXTDqW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTGluayBtZWdqZWxlbsOtdMOpc2UgYSBtZW7DvGJlbiBhbWkgZW5nZWRpIGEgdmlzc3phbMOpcMOpc3QgYSBGQVEgcsOpc3psZXRlaW7DqWwgYXogw7xneWludMOpesWRIGZlbMO8bGV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdMaW5rIG1lZ2plbGVuw610w6lzZSBhIG1lbsO8YmVuIGFtaSBlbmdlZGkgYSBGQVEgbnlvbXRhdMOhc8OhdCBhIEZBUSByw6lzemxldGVpbsOpbCBheiDDvGd5aW50w6l6xZEgZmVsw7xsZXTDqW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9ICdBIEZBUSBhem9ub3PDrXTDs2phLCBwbC4gRkFRIywgS0IjLCBNeUZBUSMuIEF6IGFsYXDDqXJ0ZWxtZXpldHQ6IEZBUSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICdFeiBhIGJlw6FsbMOtdMOhcyBkZWZpbmnDoWxqYSwgaG9neSBhIFwnRkFRXCcgb2JqZWt0dW0gw7Zzc3pla2FwY3NvbGhhdMOzIG3DoXMgXCdGQVFcJyBvYmpla3R1bW1hbCBcJ05vcm1hbFwnIGxpbmsgdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnRXogYSBiZcOhbGzDrXTDoXMgZGVmaW5pw6FsamEsIGhvZ3kgYSBcJ0ZBUVwnIG9iamVrdHVtIMO2c3N6ZWthcGNzb2xoYXTDsyBtw6FzIFwnRkFRXCcgb2JqZWt0dW1tYWwgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJ0V6IGEgYmXDoWxsw610w6FzIGRlZmluacOhbGphLCBob2d5IGEgXCdGQVFcJyBvYmpla3R1bSDDtnNzemVrYXBjc29saGF0w7MgbcOhcyBcJ0plZ3lcJyBvYmpla3R1bW1hbCBcJ05vcm1hbFwnIGxpbmsgdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnRXogYSBiZcOhbGzDrXTDoXMgZGVmaW5pw6FsamEsIGhvZ3kgYSBcJ0ZBUVwnIG9iamVrdHVtIMO2c3N6ZWthcGNzb2xoYXTDsyBtw6FzIFwnSmVneVwnIG9iamVrdHVtbWFsIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHTDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdKZWd5IHTDtnJ6c2UgYSBGQVEgY2lrayBqw7N2w6FoYWd5w6Fzw6Fob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdKZWd5IHTDoXJneWEgYSBGQVEgY2lrayBqw7N2w6FoYWd5w6Fzw6Fob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0RlZmluaWVydCBkYXMgU3RhbmRhcmQtRkFRLUF0dHJpYnV0IGbDvHIgZGllIFNvcnRpZXJ1bmcgZGVzIEZBUS1FeHBsb3JlcnMgaW0gQWdlbnRlbi1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnRGVmaW5pZXJ0IGRhcyBTdGFuZGFyZC1GQVEtQXR0cmlidXQgZsO8ciBkaWUgU29ydGllcnVuZyBkZXMgRkFRLUV4cGxvcmVycyBpbSBLdW5kZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdEZWZpbmllcnQgZGFzIFN0YW5kYXJkLUZBUS1BdHRyaWJ1dCBmw7xyIGRpZSBTb3J0aWVydW5nIGRlcyBGQVEtRXhwbG9yZXJzIGltIFB1YmxpYy1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBleHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmllcnQgZGllIFN0YW5kYXJkLVNvcnRpZXJ1bmcgZGVzIEZBUS1FeHBsb3JlcnMgaW0gS3VuZGVuLUludGVyZmFjZS4gQXVmOiDDhGx0ZXN0ZXIgRkFRLUFydGlrZWwgb2Jlbi4gQWI6IE5ldWVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5pZXJ0IGRpZSBTdGFuZGFyZC1Tb3J0aWVydW5nIGRlcyBGQVEtRXhwbG9yZXJzIGltIFB1YmxpYy1JbnRlcmZhY2UuIEF1Zjogw4RsdGVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uIEFiOiBOZXVlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIEV4cGxvcmVyIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmllcnQgZGllIFN0YW5kYXJkLVNvcnRpZXJ1bmcgZGVzIEZBUS1FeHBsb3JlcnMgaW0gQWdlbnRlbi1JbnRlcmZhY2UuIEF1Zjogw4RsdGVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uIEFiOiBOZXVlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGU6ICd9ID0gJ0zDtnNjaGVuOiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdNYXhpbWFsZSBBbnphaGwgdm9uIEZBUS1BcnRpa2VsbiBkaWUgaW0gRkFRLUV4cGxvcmVyIGltIEt1bmRlbi1JbnRlcmZhY2UgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTWF4aW1hbGUgQW56YWhsIHZvbiBGQVEtQXJ0aWtlbG4gZGllIGltIEZBUS1FeHBsb3JlciBpbSBQdWJsaWMtSW50ZXJmYWNlIGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTWF4aW1hbGUgQW56YWhsIHZvbiBGQVEtQXJ0aWtlbG4gZGllIGltIEZBUS1FeHBsb3JlciBpbSBBZ2VudGVuLUludGVyZmFjZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnQW56YWhsIHZvbiBGQVEtQXJ0aWtlbG4gZGllIGluIGRlciBGQVEtU3VjaGUgaW0gS3VuZGVuLUludGVyZmFjZSBwcm8gU2VpdGUgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdBbnphaGwgdm9uIEZBUS1BcnRpa2VsbiBkaWUgaW4gZGVyIEZBUS1TdWNoZSBpbSBQdWJsaWMtSW50ZXJmYWNlIHBybyBTZWl0ZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdBbnphaGwgdm9uIEZBUS1BcnRpa2VsbiBkaWUgaW0gRkFRLUV4cGxvcmVyIGltIEt1bmRlbi1JbnRlcmZhY2UgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0FuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbSBGQVEtRXhwbG9yZXIgaW0gUHVibGljLUludGVyZmFjZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ1plaWdlICJMaW5rIEVpbmbDvGdlbiItQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGbDvHIgw7ZmZmVudGxpY2hlIEZBUS1BcnRpa2VsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgVGV4dCAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICdaZWlnZSAiVGV4dCAmIExpbmsgRWluZsO8Z2VuIi1CdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZsO8ciDDtmZmZW50bGljaGUgRkFRLUFydGlrZWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnWmVpZ2UgIlRleHQgRWluZsO8Z2VuIi1CdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZsO8ciDDtmZmZW50bGljaGUgRkFRLUFydGlrZWwuJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTEvMTIvMDggS2FvcnUgSGF5YW1hIFRJUyBJbmMuCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX0ZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ+WGhemDqOWQkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICflhazplosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICflpJbpg6jlkJEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ0ZBUeODiuODs+ODkOODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3RDaGFuZ2VkSXRlbXMnfSA9ICfmnIDov5HlpInmm7TjgZXjgozjgZ/jgqLjgqTjg4bjg6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0Q3JlYXRlZEl0ZW1zJ30gPSAn5pyA6L+R5L2c5oiQ44GV44KM44Gf44Ki44Kk44OG44OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcDEwSXRlbXMnfSA9ICfjg4jjg4Pjg5cxMOOCouOCr+OCu+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJDYXRlZ29yeU9mJ30gfHw9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICfoqZXkvqHjgYzpgbjmip7jgZXjgozjgabjgYTjgb7jgZvjgpPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAn5YWs6ZaLICjlhajlk6EpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICflpJbpg6ggKOmhp+WuoiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJ+WGhemDqCAo5ouF5b2T6ICFKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydERheSd9ID0gJ+mWi+Wni+aXpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydE1vbnRoJ30gPSAn6ZaL5aeL5pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0WWVhcid9ID0gJ+mWi+Wni+W5tCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmREYXknfSA9ICfntYLkuobml6UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kTW9udGgnfSA9ICfntYLkuobmnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kWWVhcid9ID0gJ+e1guS6huW5tCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICfoqZXkvqHjgpLjgYTjgZ/jgaDjgY3jgYLjgorjgYzjgajjgYbjgZTjgZbjgYTjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICfjgYLjgarjgZ/jga/jgZnjgafjgavoqZXkvqHmuIjjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICfoqJjkuovljbDliLcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAn5LiK5L2NMTDku7bjga7oqJjkuosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICfmlrDnnYDoqJjkuosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJ+acgOi/keabtOaWsOOBleOCjOOBn+iomOS6iyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICfjgqvjg4bjgrTjg6rjgYzmm7TmlrDjgZXjgozjgb7jgZfjgZ/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJ+aWsOOBl+OBhOOCq+ODhuOCtOODquOBjOi/veWKoOOBleOCjOOBvuOBl+OBn+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfjgIzlkI3liY3jgI3jga/lv4XpoIjpoIXnm67jgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ+OBk+OBruOCq+ODhuOCtOODquOBr+OBmeOBp+OBq+WtmOWcqOOBl+OBpuOBhOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAn6KiA6Kqe44GM6L+95Yqg44GV44KM44G+44GX44Gf44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ+iogOiqnuOBjOabtOaWsOOBleOCjOOBvuOBl+OBn+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICfjgIzlkI3liY3jgI3jga/lv4XpoIjpoIXnm67jgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICfjgZPjga7oqIDoqp7jga/oqK3lrprmuIjjgafjgZnjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdGQVHjga7mlrDopo/ov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICfjgqvjg4bjgrTjg6rjga/lv4XpoIjpoIXnm67jgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICfmib/oqo0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ltcHRvbSd9ID0gJ+eXh+eKtic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9ibGVtJ30gPSAn5ZWP6aGMJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUNhdGVnb3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0ZBUSDjgqvjg4bjgrTjg6rnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAn44Kr44OG44K044Oq44KS6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ+OCq+ODhuOCtOODquOCkui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICfjgqvjg4bjgrTjg6rjgpLliYrpmaQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICfjga/jgYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAn44Kr44OG44K044Oq44KS6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICfjgqvjg4bjgrTjg6rjgpLnt6jpm4YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ+S4gOimp+OBp+OCs+ODoeODs+ODiOOBqOOBl+OBpuihqOekuuOBleOCjOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ+OBsuOBqOOBpOS7peS4iuOBruaoqemZkOOBruOCsOODq+ODvOODl+OCkumBuOaKnuOBl+OBpuOBj+OBoOOBleOBhOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAn44GT44Gu44Kr44OG44K044Oq44Gn6KiY5LqL44Gr44Ki44Kv44K744K544Gn44GN44KL44Ko44O844K444Kn44Oz44OI44Gu44Kw44Or44O844OX44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICfjgZPjga7jgqvjg4bjgrTjg6rjgpLliYrpmaTjgZfjgabjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAn44GT44Gu44Kr44OG44K044Oq44KS5YmK6Zmk44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CC5LiA44Gk5Lul5LiK44GuRkFR6KiY5LqL44Gn5L2/55So44GV44KM44Gm44GE44KL44GL44CB44G+44Gf44Gv5LuW44Gu44Kr44OG44K044Oq44Gu6Kaq44Kr44OG44K044Oq44Gr44Gq44Gj44Gm44GE44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAn44GT44Gu44Kr44OG44K044Oq44Gv5Lul5LiL44Gu6KiY5LqL44Gn5L2/55So44GV44KM44Gm44GE44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJ+OBk+OBruOCq+ODhuOCtOODquOBr+S7peS4i+OBruOCq+ODhuOCtOODquOBruimquOCq+ODhuOCtOODquOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJDYXRlZ29yeU9mJ30gPSAn6Kaq44Kr44OG44K044OqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICfkuIDopqfjgafjgrPjg6Hjg7Pjg4jjgajjgZfjgabooajnpLrjgZXjgozjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJ+OBk+OBruOCq+ODhuOCtOODquOBp+mgheebruOBq+OCouOCr+OCu+OCueOBp+OBjeOCi+OCqOODvOOCuOOCp+ODs+ODiOOCsOODq+ODvOODlyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICfjgZPjga7oqJjkuovjgpLliYrpmaTjgZfjgabjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gfHw9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ0ZBUeS4gOimpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICfmpJzntKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAn6auY5qmf6IO95qSc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICfjgrXjg5bjgqvjg4bjgrTjg6onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnRkFR6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAn5a2Q44Kr44OG44K044Oq44Gv44GC44KK44G+44Gb44KT44CCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJ+OCuOODo+ODvOODiuODq+OBruaDheWgseOBjOOBguOCiuOBvuOBm+OCk+OAgic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdGQVEg6KiA6Kqe566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0gJ+WkmuiogOiqnuOBp+S9nOalreOCkuOBl+OBn+OBhOWgtOWQiOOAgeOBk+OBrumgheebruOCkuioreWumuOBl+OBpuOBj+OBoOOBleOBhOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICfoqIDoqp7jgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlJ30gPSAn6KiA6Kqe44KS5YmK6ZmkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ+iogOiqnuOCkui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAn6KiA6Kqe44KS57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nfSA9ICfjgZPjga7oqIDoqp7jgpLliYrpmaTjgZfjgabjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0gJ+OBk+OBruiogOiqnuOCkuWJiumZpOOBmeOCi+OBk+OBqOOBr+OBp+OBjeOBvuOBm+OCk+OAguS4gOOBpOS7peS4iuOBrkZBUeOBp+S9v+eUqOOBleOCjOOBpuOBhOOBvuOBme+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJ+OBk+OBruiogOiqnuOBr+OAgeS7peS4i+OBrkZBUeOBp+S9v+eUqOOBleOCjOOBpuOBhOOBvuOBmeOAgic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ+OCs+ODs+ODhuOCreOCueODiOOBruioreWumic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICfjg5rjg7zjgrjmr47jga7oqJjkuovmlbAnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnRkFR44OH44O844K/44Gv44GC44KK44G+44Gb44KT44CCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtSW5mbyd9ID0gJ0ZBUeaDheWgsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1ZvdGVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICdGQVHlhajmlocnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdGQVHmg4XloLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAn44Os44O844OG44Kj44Oz44KwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyAlJ30gPSAn44Os44O844OG44Kj44Oz44Kw77yI77yF77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnNeOBpOaYn+OBruOBhuOBoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICfmipXnpajjga/jgYLjgorjgb7jgZvjgpPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ+aKleelqOOBr+OBguOCiuOBvuOBm+OCk+OAguOBk+OBruiomOS6i+OBq+Wni+OCgeOBpuipleS+oeOCkuaKleelqOOBl+OBvuOBl+OCh+OBhuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAn5re75LuY44OV44Kh44Kk44Or44KS44OA44Km44Oz44Ot44O844OJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGVWb3RpbmdRdWVzdGlvbid9IHx8PSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAn44GC44G+44KK5b2544Gr56uL44Gf44Gq44GL44Gj44GfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ+OBqOOBpuOCguW9ueOBq+eri+OBo+OBnyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCd9ID0gJ+iomOS6i+OCkuaMv+WFpeOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICfjg6rjg7Pjgq/jgpLmjL/lhaXjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJ+iomOS6i+OBqOODquODs+OCr+OCkuaMv+WFpeOBmeOCiyc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ+ipsuW9k+OBmeOCi+iomOS6i+OBr+OBguOCiuOBvuOBm+OCk+OAgic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ0ZBUeWFqOaWh+aknOe0ou+8iOS+i++8miJKb2huKm4i44CBIldpbGwqIu+8iSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJ+ips+e0sCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ+iomOS6i+OBruOCreODvOODr+ODvOODieaknOe0oic7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRRXhwbG9yZXIKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljJ30gfHw9ICflhazplosnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFab29tCgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICfoqZXkvqHjga7ntZDmnpzooajnpLrjgojjgYbjga7jgqvjg6njg7zvvIjjgrnjgr/jgqTjg6vjgrfjg7zjg4jvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ+OCq+ODhuOCtOODquODvOeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICfmipXnpajjga7ntZDmnpzjga7lsI/mlbDngrnku6XkuIvjga7moYHmlbAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJ+aXouWumuOBruOCq+ODhuOCtOODqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAn6KaP5a6a44Gu6KiA6Kqe77yI5Y2Y5LiA6KiA6Kqe44Oi44O844OJ44Gn6YGL55So5pmC77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdGQVHjgbjjga7lj5bjgorovrzjgb/jgpLooYzjgYbjg4HjgrHjg4Pjg4jjga7lhKrlhYjpoIbkvY3jga7ml6LlrprlgKQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJ+iomOS6i+OCqOODs+ODiOODquODvOaZguOBruimj+WumuOBruOCueODhuODvOOCv+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnRkFR44G444Gu5Y+W44KK6L6844G/44KS6KGM44GG44OB44Kx44OD44OI44Gu5YSq5YWI6aCG5L2N44Gu5pei5a6a5YCkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAn5YWs6ZaL55S76Z2i55So44OR44Op44Oh44O844K/44Gu44OH44OV44Kp44Or44OI5YCk44CC44OR44Op44Oh44O844K/77yIQWN0aW9uPVhYWFhYWO+8ieOBr+OAgeOCueOCr+ODquODl+ODiOOBp+S9v+eUqOOBleOCjOOBpuOBhOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPSAn57Ch5piT54mIRkFR44K444Oj44O844OK44Or6KGo56S655So44Oi44K444Ol44O844Or44Gu5qaC6KaB44KS5a6a576pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgbGlzdC4nfSA9ICfnsKHmmJPniYhGQVHkuIDopqfooajnpLrnlKjjg6Ljgrjjg6Xjg7zjg6vjga7mpoLopoHjgpLlrprnvqknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICfjgqjjg7zjgrjjgqfjg7Pjg4jnlKjnlLvpnaLjgavjgYrjgZHjgovjgIFGQVHmpJzntKLntZDmnpzkuKbjgbPmm7/jgYjjgavliKnnlKjjgZnjgovlsZ7mgKfpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICfpoaflrqLnlKjnlLvpnaLjgavjgYrjgZHjgovjgIFGQVHmpJzntKLntZDmnpzkuKbjgbPmm7/jgYjjgavliKnnlKjjgZnjgovlsZ7mgKfpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAn5YWs6ZaL55S76Z2i44Gr44GK44GR44KL44CBRkFR5qSc57Si57WQ5p6c5Lim44Gz5pu/44GI44Gr5Yip55So44GZ44KL5bGe5oCn6aCG44Gu5pei5a6a5YCk44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ+OCqOODvOOCuOOCp+ODs+ODiOeUqOeUu+mdou+8iEZBUeS4gOimp++8ieOBq+OBiuOBkeOCi+OAgUZBUeaknOe0oue1kOaenOS4puOBs+abv+OBiOOBq+WIqeeUqOOBmeOCi+WxnuaAp+mghuOBruaXouWumuWApOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICfpoaflrqLnlKjnlLvpnaLvvIhGQVHkuIDopqfvvInjgavjgYrjgZHjgovjgIFGQVHmpJzntKLntZDmnpzkuKbjgbPmm7/jgYjjgavliKnnlKjjgZnjgovlsZ7mgKfpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ+WFrOmWi+eUu+mdou+8iEZBUeS4gOimp++8ieOBq+OBiuOBkeOCi+OAgUZBUeaknOe0oue1kOaenOS4puOBs+abv+OBiOOBq+WIqeeUqOOBmeOCi+WxnuaAp+mghuOBruaXouWumuWApOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICfjgqjjg7zjgrjjgqfjg7Pjg4jnlKjnlLvpnaLjgavjgYrjgZHjgovjgIFGQVHkuIDopqfjga7ooajnpLrpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIJcJ1VwXCfihpLlj6TjgYTpoIYgLyBcJ0Rvd25cJ+KGkuaWsOOBl+OBhOmghic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICfpoaflrqLnlKjnlLvpnaLjgavjgYrjgZHjgovjgIFGQVHkuIDopqfjga7ooajnpLrpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIJcJ1VwXCfihpLlj6TjgYTpoIYgLyBcJ0Rvd25cJ+KGkuaWsOOBl+OBhOmghic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAn5YWs6ZaL55S76Z2i44Gr44GK44GR44KL44CBRkFR5LiA6Kan44Gu6KGo56S66aCG44Gu5pei5a6a5YCk44KS5a6a576p44GX44G+44GZ44CCXCdVcFwn4oaS5Y+k44GE6aCGIC8gXCdEb3duXCfihpLmlrDjgZfjgYTpoIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ+OCqOODvOOCuOOCp+ODs+ODiOeUqOeUu+mdou+8iEZBUeS4gOimp++8ieOBq+OBiuOBkeOCi+OAgUZBUeaknOe0oue1kOaenOS4puOBs+mghuOBruaXouWumuWApOOCkuWumue+qeOBl+OBvuOBmeOAglwnVXBcJ+KGkuWPpOOBhOmghiAvIFwnRG93blwn4oaS5paw44GX44GE6aCGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICfpoaflrqLnlKjnlLvpnaLjgavjgYrjgZHjgovjgIFGQVHmpJzntKLntZDmnpzkuKbjgbPpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIJcJ1VwXCfihpLlj6TjgYTpoIYgLyBcJ0Rvd25cJ+KGkuaWsOOBl+OBhOmghic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ+WFrOmWi+eUu+mdouOBq+OBiuOBkeOCi+OAgUZBUeaknOe0oue1kOaenOS4puOBs+mghuOBruaXouWumuWApOOCkuWumue+qeOBl+OBvuOBmeOAglwnVXBcJ+KGkuWPpOOBhOmghiAvIFwnRG93blwn4oaS5paw44GX44GE6aCGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICfjgqjjg7zjgrjjgqfjg7Pjg4jnlKjnlLvpnaLjgavjgYrjgZHjgovjgIFGQVHkuIDopqfjgafjga7ooajnpLrpoIXnm67jga7oqK3lrprjgILjgZPjga7oqK3lrprjgavjgojjgaPjgabpoIXnm67jga7kuKbjgbPpoIbjgpLliLblvqHjgZnjgovjgZPjgajjga/jgafjgY3jgb7jgZvjgpPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAn6aGn5a6i55So55S76Z2i44Gr44GK44GR44KL44CBRkFR5LiA6Kan44Gn44Gu6KGo56S66aCF55uu44Gu6Kit5a6a44CC44GT44Gu6Kit5a6a44Gr44KI44Gj44Gm6aCF55uu44Gu5Lim44Gz6aCG44KS5Yi25b6h44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAn5YWs6ZaL55S76Z2i44Gr44GK44GR44KL44CBRkFR5LiA6Kan44Gn44Gu6KGo56S66aCF55uu44Gu6Kit5a6a44CC44GT44Gu6Kit5a6a44Gr44KI44Gj44Gm6aCF55uu44Gu5Lim44Gz6aCG44KS5Yi25b6h44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuIE5vdGU6IEFnZW50VGlja2V0QWN0aW9uQ29tbW9uIGluY2x1ZGVzIEFnZW50VGlja2V0Tm90ZSwgQWdlbnRUaWNrZXRDbG9zZSwgQWdlbnRUaWNrZXRGcmVlVGV4dCwgQWdlbnRUaWNrZXRPd25lciwgQWdlbnRUaWNrZXRQZW5kaW5nLCBBZ2VudFRpY2tldFByaW9yaXR5IGFuZCBBZ2VudFRpY2tldFJlc3BvbnNpYmxlLid9ID0gJ+Wumue+qea4iOOBruimgee0oOOBq+ODquODs+OCr+OCkuS7mOWKoOOBmeOCi+ODouOCuOODpeODvOODq+OBp+OBmeOAgueUu+WDj+imgee0oOOBq+OBpOOBhOOBpuOBrzLpgJrjgorjga7lhaXlipvmlrnms5XjgYzjgYLjgorjgb7jgZnjgILjgbLjgajjgaTjga/jgIxmYXEucG5n44CN44Gu44KI44GG44Gr55S75YOP44Gu44OV44Kh44Kk44Or5ZCN44KS5oyH5a6a44GZ44KL5pa55rOV44CC44GT44Gu44Kx44O844K544Gn44GvT1RSU+OBruOCpOODoeODvOOCuOODkeOCueOBjOS9v+eUqOOBleOCjOOBvuOBmeOAguOCguOBhuOBsuOBqOOBpOOBr1VSTOOCkuaMh+WumuOBmeOCi+aWueazleOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uIG9mIEZBUSBpdGVtIGZyZWUgdGV4dCBmaWVsZC4nfSA9ICdGQVHjga7jg5Xjg6rjg7zjg4bjgq3jgrnjg4jjg5XjgqPjg7zjg6vjg4njga7lrprnvqnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAn44GT44Gu6KiY5LqL44KS5YmK6ZmkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICfjgZPjga7oqJjkuovjgpLnt6jpm4YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ+WkmuiogOiqnuOCkuacieWKueOBq+OBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJ+ipleS+oeOBruapn+iDveOCkuacieWKueOBq+OBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ0ZBUSDjgrjjg6Pjg7zjg4rjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0ZBUeOCuOODo+ODvOODiuODq+S4gOimpyhTKeOBruihqOekuuaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0ZBUeS4gOimpyhTKeOBruihqOekuuaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdGQVHjgrjjg6Pjg7zjg4rjg6vkuIDopqcoUynjga4x44Oa44O844K45q+O44Gu6KGo56S65pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdGQVHkuIDopqcoUynjga4x44Oa44O844K45q+O44Gu6KGo56S65pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBwYXRoIHNlcGFyYXRvci4nfSA9ICfjg5HjgrnjgqTjg7Pjg5XjgqnjgpLkvb/nlKjjgZnjgovpmpvjga7jgrvjg5Hjg6zjg7zjgr/mloflrZfvvIjkvovvvJpcJy9cJ++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAn44Ko44O844K444Kn44Oz44OI55So55S76Z2i44Gr44GK44GR44KL44CBRkFR5qSc57Si44Gu44OQ44OD44Kv44Ko44Oz44OJ44Or44O844K/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ+WFrOmWi+eUu+mdouOBruODleODreODs+ODiOOCqOODs+ODieODouOCuOODpeODvOODq+OBruWumue+qSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdGQVHjga7oqJjkuovjga7mib/oqo3jga7jgZ/jgoHjga7jgrDjg6vjg7zjg5cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJ+OBk+OBruiomOS6i+OBruWxpeattCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnRkFR55Sx5p2l44Gu44OB44Kx44OD44OI44Gr5ZCr44G+44KM44KL5YaF6YOo6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnRkFR55Sx5p2l44Gu44OB44Kx44OD44OI44Gr5ZCr44G+44KM44KL5YaF6YOo6aCF55uu44GZ44G544Gm44Gu5ZCN56ewJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICfmpJzntKLnqpPjgpLooajnpLrjgZnjgovnlLvpnaLjgpLoqK3lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ+OCuOODo+ODvOODiuODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAn6KiA6Kqe566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdla2V5IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGUgKl9GQVEucG0uJ30gPSAn6KiA6Kqe44OV44Kh44Kk44Or77yIKl9GQVEucG3vvInjgaflrprnvqnjgZXjgozjgabjgYTjgotMYW5ndWFnZWtleSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICfjgZPjga7oqJjkuovjgYvjgonku5bjga7oqJjkuovjgbjjga7jg6rjg7Pjgq8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ+OCqOODvOOCuOOCp+ODs+ODiOeUu+mdouOBrkZBUeS4gOimp+OBp+ihqOekuuOBmeOCi+iomOS6i+OBruacgOWkp+aVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAn6aGn5a6i55So55S76Z2i44GuRkFR5LiA6Kan44Gn6KGo56S644GZ44KL6KiY5LqL44Gu5pyA5aSn5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAn5YWs6ZaL55S76Z2i44GuRkFR5LiA6Kan44Gn6KGo56S644GZ44KL6KiY5LqL44Gu5pyA5aSn5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAn44Ko44O844K444Kn44Oz44OI55S76Z2i44GuRkFR44K444Oj44O844OK44Or44Gn6KGo56S644GZ44KL6KiY5LqL44Gu5pyA5aSn5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9IHx8PSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9IHx8PSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSB8fD0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gfHw9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gfHw9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9IHx8PSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gfHw9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9IHx8PSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gfHw9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICfjgIzmnIDov5Hjga7lpInmm7TjgI3jgavkvZXku7bjgb7jgafooajnpLrjgZnjgovjgYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICfjgIzmnIDmlrDjga7mlrDopo/kvZzmiJDjgI3jgavkvZXku7bjgb7jgafooajnpLrjgZnjgovjgYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICfjgIzjg4jjg4Pjg5cxMOiomOS6i+OAjeOBq+S9leS7tuOBvuOBp+ihqOekuuOBmeOCi+OBiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPSAn57Ch5piT54mIRkFR44K444Oj44O844OK44Or5LiA6Kan44Gu44Oa44O844K45oyH5a6a55So44Gu44OR44Op44Oh44O844K/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPSAn57Ch5piT54mIRkFR5qaC6KaB44Gu44Oa44O844K45oyH5a6a55So44Gu44OR44Op44Oh44O844K/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAn44GT44Gu6KiY5LqL44KS5Y2w5Yi3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ+iomOS6i+aJv+iqjeOCreODpeODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJ+ipleS+oeeOh+OAguOCreODvOOBr+OAgeODkeODvOOCu+ODs+ODiOOBp+aMh+WumuOBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnRkFR44KS5qSc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ1wnQWdlbnRGQVFab29tU21hbGxcJ+OBruioreWumuOAguWFrOmWi+eUu+mdouOBq+OBiuOBhOOBpuOAjOODquODs+OCr+OCkuaMv+WFpeOBmeOCi+OAjeODnOOCv+ODs+OCkuihqOekuuOBmeOCiy/ooajnpLrjgZfjgarjgYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ1wnQWdlbnRGQVFab29tU21hbGxcJ+OBruioreWumuOAguWFrOmWi+eUu+mdouOBq+OBiuOBhOOBpuOAjOODhuOCreOCueODiOOBqOODquODs+OCr+OCkuaMv+WFpeOBmeOCi+OAjeODnOOCv+ODs+OCkuihqOekuuOBmeOCiy/ooajnpLrjgZfjgarjgYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnXCdBZ2VudEZBUVpvb21TbWFsbFwn44Gu6Kit5a6a44CC44CM44OG44Kt44K544OI44KS5oy/5YWl44GZ44KL44CN44Oc44K/44Oz44KS6KGo56S644GZ44KLL+ihqOekuuOBl+OBquOBhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC4nfSA9ICfoqJjkuovjgadIVE1M44K/44Kw44KS6KGo56S644GZ44KLL+ihqOekuuOBl+OBquOBhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICfoqJjkuovjga7jg5HjgrnjgpLooajnpLrjgZnjgosv6KGo56S644GX44Gq44GEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgV1lTSVdZRyBlZGl0b3IgaW4gYWdlbnQgaW50ZXJmYWNlLid9ID0gJ+OCqOODvOOCuOOCp+ODs+ODiOeUu+mdouOBq+OBiuOBhOOBpldZU0lXWUfjgqjjg4fjgqPjgr/jgpLooajnpLrjgZnjgosv6KGo56S644GX44Gq44GEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICfjgrXjg5bjgqvjg4bjgrTjg6rjg7zjga7jg4jjg5Tjg4Pjgq/jgpLooajnpLrjgZnjgosv6KGo56S644GX44Gq44GEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ+acgOaWsOOBruWkieabtOOCkuihqOekuuOBmeOCi+eUu+mdou+8iOOCqOODvOOCuOOCp+ODs+ODiOeUqC/poaflrqLnlKgv5YWs6ZaL77yJ44KS5a6a576pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICfmnIDmlrDjga7mlrDopo/kvZzmiJDjgpLooajnpLrjgZnjgovnlLvpnaLvvIjjgqjjg7zjgrjjgqfjg7Pjg4jnlKgv6aGn5a6i55SoL+WFrOmWi++8ieOCkuWumue+qSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn44OI44OD44OXMTDjgpLooajnpLrjgZnjgovnlLvpnaLvvIjjgqjjg7zjgrjjgqfjg7Pjg4jnlKgv6aGn5a6i55SoL+WFrOmWi++8ieOCkuWumue+qSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn6KmV5L6h44KS6KGo56S644GZ44KL55S76Z2i77yI44Ko44O844K444Kn44Oz44OI55SoL+mhp+WuoueUqC/lhazplovvvInjgpLlrprnvqknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gfHw9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gfHw9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gfHw9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSB8fD0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9IHx8PSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9IHx8PSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSB8fD0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAn4oCYTm9ybWFs4oCZ44Oq44Oz44Kv44O744K/44Kk44OX44KS5L2/55So44GX44Gm44CB4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44GM5LuW44Gu4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44GV44KM44KL44KI44GG44Gr44CB5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJ+KAmFBhcmVudENoaWxk4oCZ44Oq44Oz44Kv44O744K/44Kk44OX44KS5L2/55So44GX44Gm44CB4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44GM5LuW44Gu4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44GV44KM44KL44KI44GG44Gr44CB5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICfigJhOb3JtYWzigJnjg6rjg7Pjgq/jg7vjgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHigJhGQVHigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzku5bjga7igJhUaWNrZXTigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAn4oCYUGFyZW50Q2hpbGTigJnjg6rjg7Pjgq/jg7vjgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHigJhGQVHigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzku5bjga7igJhUaWNrZXTigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9IHx8PSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSB8fD0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB3aGljaCBjYW4gYWNjZXNzIHRoaXMgY2F0ZWdvcnkuJ30gPSAn44GT44Gu44Kr44OG44K044Oq44Gr44Ki44Kv44K744K55Y+v6IO944Gq44Ko44O844K444Kn44Oz44OI44Kw44Or44O844OXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3JpZXMnfSA9ICfjgqvjg4bjgrTjg6onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsU2VhcmNoJ30gPSAn6Kmz57Sw5qSc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAn5LiA6KanJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNhdGVnb3J5IGFjY2Vzc2libGUuIFRvIGNyZWF0ZSBhbiBhcnRpY2xlIHlvdSBuZWVkIGFjY2VzcyB0byBhdCBsZWFzdCBvbmUgY2F0ZWdvcnkuIFBsZWFzZSBjaGVjayB5b3VyIGdyb3VwL2NhdGVnb3J5IHBlcm1pc3Npb24gdW5kZXIgLWNhdGVnb3J5IG1lbnUtISd9ID0gJ+OCq+ODhuOCtOODquOBq+OCouOCr+OCu+OCueOBp+OBjeOBvuOBm+OCk+OAguiomOS6i+OCkuS9nOaIkOOBmeOCi+OBq+OBr+OAgTHjgaTku6XkuIrjga7jgqvjg4bjgrTjg6rjgavjgqLjgq/jgrvjgrnjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgILjgqvjg4bjgrTjg6rjga7jg6Hjg4vjg6Xjg7zjgavjgYrjgYTjgabjgIHjgYLjgarjgZ/jga7jgrDjg6vjg7zjg5cv44Kr44OG44K044Oq44Gr5qip6ZmQ44KS5LiO44GI44Gm44GP44Gg44GV44GE44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrU2VhcmNoJ30gPSAn5qSc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YkNhdGVnb3JpZXMnfSB8fD0gJyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bXNfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnZGFsYW1hbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICd1bXVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsJ30gPSAnbHVhcmFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdOb21ib3IgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ0tlbWFza2luaSBBcnRpa2VsIEZBUSB0ZXJiYXJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ01lbmNpcHRhIGFyaXRrZWwgRkFRIHRlcmJhcnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ0FyaXRrZWwgRkFRIDEwIHRlcmJhaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICdTdWIta2F0ZWdvcmkgZGFyaXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICdUaWFkYSBrYWRhciBkaXBpbGloISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdVbXVtIChTZW11YSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ2x1YXJhbiAocGVsYW5nZ2FuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnZGFsYW1hbiAoZWplbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAnSGFyaSBtdWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnQnVsYW4gbXVsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnVGFodW4gbXVsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAnSGFyaSBha2hpcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdCdWxhbiBha2hpcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ1RhaHVuIGFraGlyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rcyBmb3IgeW91ciB2b3RlISd9ID0gJ1RlcmltYSBrYXNpaCB1bnR1ayB1bmRpYW4gYW5kYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdBbmQgc3VkYWggbWVuZ3VuZGkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnQXJ0aWtlbCBGQVEgZGljZXRhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICdBcnRpa2VsIEZBUSAoMTAgdGVyYmFpayknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnRpa2VsIEZBUSAoYmFydSBkaWNpcHRhKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0aWtlbCBGQVEgKGJhcnUgZGl1YmFoKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdLYXRlZ29yaSBGQVEgZGlrZW1hc2tpbmkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdrYXRlZ29yaSBGQVEgZGl0YW1iYWghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0thdGVnb3JpIHBlcmx1IG1lbXB1bnlhaSBuYW1hISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAna2F0ZWdvcmkgaW5pIHN1ZGFoIHd1anVkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAnQmFoYXNhIEZBUSBkaXRhbWJhaCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnQmFoYXNhIEZBUSBkaWtlbWFza2luaSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmFtYSBkaXBlcmx1a2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0JhaGFzYSBpbmkgc3VkYWggd3VqdWQhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnVGFtYmFoIGFydGlrZWwgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnS2F0ZWdvcmkgZGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdQZW5nZXNhaGFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUNhdGVnb3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ1Blbmd1cnVzYW4gS2F0ZWdvcmkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJ1RhbWJhaCBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdQYWRhbSBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ1RhbWJhaCBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAnQXVkaXQgS2F0ZWdvcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ0FrYW4gZGlwYXBhcmthbiBzZWJhZ2FpIGtvbWVuIGRhbGFtIEV4cGxvcmVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1NpbGEgcGlsaWggc2VrdXJhbmcta3VyYW5nbnlhIHNhdHUgcGVybWludGFhbiBrdW1wdWxhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJ0t1bXB1bGFuIGVqZW4gYm9sZWggbWVuZ2Frc2VzIGFydGlrZWwgZGFsYW0ga2F0ZWdvcmkgaW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAnQWRha2FoIGFuZGEgaW5naW4gbWVtYWRhbSBrYXRlZ29yaSBpbmk/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0gJ0FuZGEgdGlkYWsgYm9sZWggbWVtYWRhbSBrYXRlZ29yaSBpbmkuIElhIGRpZ3VuYWthbiBkYWxhbSBzZWt1cmFuZy1rdXJhbmdueWEgc2F0dSBhdGlrZWwgRkFRIGRhbi9hdGF1IGFkYWxhaCBpYnViYXBhIGtlcGFkYSBzZWt1cmFuZy1rdXJhbmdueWEgc2F0dSBrYXRlZ29yaSBsYWluISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ0thdGVnb3JpIGluaSBkaWd1bmFrYW4gZGFsYW0gYXRpa2V0IEZBUSBiZXJpa3V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJ0thdGVnb3JpIGluaSBhZGFsYWggaWJ1YmFwYSBrZXBhZGEgc3ViLWthdGVnb3JpIGJlcmlrdXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnQWRha2FoIGFuZGEgaW5naW4gbWVtYWRhbSBhcnRpa2VsIEZBUSBpbmk/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRkFRLUV4cGxvcmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ0NhcmlhbiBQYW50YXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnQ2FyaWFuIFRlcnBlcmluY2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ1N1Yi1rYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdBcnRpa2V0IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ1RpYWRhIHN1Yi1rYXRlZ29yaSBkaXRlbXVpLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdUaWFkYSBkYXRhIEp1cm5hbCBGQVEgZGl0ZW11aS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnUGVuZ3VydXNhbiBCYWhhc2EgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0gJ0d1bmEga2FlZGFoIGluaSBqaWthIGFuZGEgaW5naW4gYmVrZXJqYSBkZW5nYW4gcGVsYmFnYWkgYmFoYXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICdUYW1iYWggYmFoYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSd9ID0gJ1BhZGFtIGJhaGFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICdUYW1iYWggYmFoYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICdBdWRpdCBiYWhhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ0FkYWthaCBhbmRhIGluZ2luIG1lbWFkYW1rYW4gYmFoYXNhIGluaT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0gJ0FuZGEgdGlkYWsgYm9sZWggbWVtYWRhbSBiYWhhc2EgaW5pLiBJYSBkaWd1bmFrYW4gc2VrdXJhbmcta3VyYW5nbnlhIHNhdHUgYXJ0aWtlbCBGQVEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnQmFoYXNhIGluaSBkaWd1bmFrYW4gZGFsYW0gQXJ0aWtlbCBGQVEgeWFuZyBiZXJpa3V0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnQXR1cmFuIGtvbnRla3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnQXJ0aWtlbCBGQVEgcGVyIG11a2Egc3VyYXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnVGlhZGEgZGF0YSBGQVEgZGl0ZW11aS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1JbmZvJ30gPSAnSW5mb3JtYXNpIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1VuZGlhbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUUZ1bGx0ZXh0J30gPSAnRkFRVGVrc1BlbnVoJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJ0NhcmlhbiBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXNpIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcnfSA9ICdNZW5pbGFpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyAlJ30gPSAnTWVuaWxhaSAlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnZGFyaXBhZGEgNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICdUaWFkYSB1bmRpYW4gZGl0ZW11aSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ1RpYWRhIHVuZGlhbiBkaXRlbXVpISBKYWRpbGFoIG9yYW5nIHBlcnRhbWEgbWVuaWxhaSBhcml0bCBGQVEgaW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnTXVhdCB0dXJ1biBsYW1waXJhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9ICdCZXJhcGEgYmFueWFrIGFyaWtlbCBpbmkgbWVtYmFudHU/IFNpbGEgYmVyaSBrYW1pIHBlbmlsYWlhbiBhbmRhIGRhbiBiYW50dSB1bnR1ayBtZW5pbmdrYXRrYW4gcGFuZ2thbGFuIGRhdGEgRkFRLiBUZXJpbWEgS2FzaWghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnVGlkYWsgbWVtYmFudHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAnU2FuZ2F0IG1lbWJhbnR1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnTWFzdWsgVGVrcyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBMaW5rJ30gPSAnTWFzdWsgcGF1dGFuIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnTWFzdWsgVGVrcyBGQVEgJiBQYXV0YW4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICdUaWFkYSBhcnRpa2VsIEZBUSBkaWp1bXBhaS4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICdDYXJpYW4gVGVrcyBwZW51aCBkYWxhbSBhcnRpa2VsIEZBUSAoY29udG9oLiAiSm9obipuIiBvciAiV2lsbCoiKSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJ0J1dGlyYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICdDYXJpYW4gdW50dWsgYXJ0aWtlbCBkZW5nYW4ga2VrdW5jaSBwZXJrYXRhYW4nOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUUV4cGxvcmVyCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ1VtdW0nOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFab29tCgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICdBc2luZ2FuIHVudHVrIGhhc2lsIGtlbHVhcmFuIHVudHVrIG1lbmFtYmFoIHBhdXRhbiBkaWJlbGFrYW5nIGphcmluZ2FuIHN0cmluZy4gRWxlbWVuIGdhbWJhciBkaWJlbmFya2FuIGR1YSBpbnB1dC4gcGVydGFtYSBuYW1hIGdhbWJhciB0ZXJzZWJ1dCAoZmFxLnBuZykuIERhbGFtIGtlcyBpbmksIGphbGFuIGdhbWJhciBPVFJTIGFrYW4gZGlndW5ha2FuLiBrZWR1YW55YSBrZW11bmdraW5hbiBhZGFsYWggdW50dWsgbWVtYXN1a2thbiBwYXV0YW4gcGFkYSBnYW1iYXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnV2FybmEgQ1NTIHVudHVrIGtlcHV0dXNhbiB1bmRpYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdQZW5ndXJ1c2FuIGthdGVnb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ1RpdGlrIHBlcnB1bHVoYW4gZGFyaXBhZGEga2VwdXR1c2FuIHVuZGlhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJ0thdGVnb3JpIG5hbWEgc2VkaWEgYWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnQmFoYXNhIHNlZGlhIGFkYSB1bnR1ayBhcnRpa2VsIEZBUSBwYWRhIHNhdHUgbW9kIGJhaGFzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0tldXRhbWFhbiBzZWRpYSBhZGEgdGlrZXQgdW50dWsgcGVuZ2VzYWhhbiBhcnRpa2VsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJ0tlYWRhYW4gc2VkaWEgYWRhIHVudHVrIGtlbWFzdWthbiBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdLZWFkYWFuIHNlZGlhIGFkYSB0aWtldCB1bnR1ayBwZW5nZXNhaGFuIGRhcmlwYWRhIGFydGlrZWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0gJ05pbGFpIHNlZGlhIGFkYSB1bnR1ayB0aW5kYWthbiBwYXJhbWV0ZXIga2VwYWRhIGRlcGFuYWtoaXIgdW11bS4gVGluZGFrYW4gcGFyYW1ldGVyIGRpZ3VuYWthbiBkYWxhbSBza3JpcCBzaXN0ZW0gdGVyc2VidXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9ICdLZW5hbHBhc3RpIGxpaGF0IHNlbXVsYSBtb2R1bCB1bnR1ayBwYXBhciBwYXBhcmFuIGtlY2lsIGRhcmkgSnVybmFsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0gJ0tlbmFscGFzdGkgbGloYXQgc2VtdWxhIG1vZHVsIHVudHVrIHBhcGFyIHBhcGFyYW4ga2VjaWwgZGFyaSBzZW5hcmFpIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdLZW5hbHBhc3RpIHNpZmF0IHNlZGlhIGFkYSBGQVEgbWVueXVzdW4gZGFsYW0gY2FyaWFuIEZBUSBkYXJpcGFkYSBpbnRlcmZhY2UgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdLZW5hbHBhc3RpIHNpZmF0IHNlZGlhIGFkYSBGQVEgbWVueXVzdW4gZGFsYW0gY2FyaWFuIEZBUSBkYXJpcGFkYSBpbnRlcmZhY2UgcGVsYW5nZ2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdLZW5hbHBhc3RpIHNpZmF0IHNlZGlhIGFkYSBGQVEgbWVueXVzdW4gZGFsYW0gY2FyaWFuIEZBUSBkYXJpcGFkYSBpbnRlcmZhY2UgdW11bS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnS2VuYWxwYXN0aSBzaWZhdCBzZWRpYSBhZGEgRkFRIG1lbnl1c3VuIGRhbGFtIGNhcmlhbiBGQVEgZGFyaXBhZGEgZWplbiBpbnRlcmZhY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdNZW50YWtyaWZrYW4gcGVyaW50YWggbGFsYWkgRkFRIGhhc2lsIGNhcmlhbiBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLiBBdGFzOiB0ZXJ0dWEgZGkgYXRhcy4gQmF3YWg6IHRlcmJhcnUgZGkgYXRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ01lbnRha3JpZmthbiBwZXJpbnRhaCBsYWxhaSBGQVEgaGFzaWwgY2FyaWFuIGRhbGFtIGFudGFyYSBtdWthIHBlbGFuZ2dhbi4gQXRhczogdGVydHVhIGRpIGF0YXMuIEJhd2FoOiB0ZXJiYXJ1IGRpIGF0YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnTWVudGFrcmlma2FuIHBlcmludGFoIGxhbGFpIEZBUSBoYXNpbCBjYXJpYW4gZGFsYW0gYW50YXJhIG11a2EgYXdhbS4gQXRhczogdGVydHVhIGRpIGF0YXMuIEJhd2FoOiB0ZXJiYXJ1IGRpIGF0YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdNZW50YWtyaWZrYW4gbGFqdXIgbWVudW5qdWtrYW4gZGkgRXhwbG9yZXIgRkFRLiBQaWxpaGFuIGluaSB0aWRhayBtZW1wdW55YWkga2VzYW4ga2UgYXRhcyBrZWR1ZHVrYW4gdGlhbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJ01lbnRha3JpZmthbiBydWFuZ2FuIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0ganVybmFsIEZBUS4gUGlsaWhhbiBpbmkgdGlkYWsgbWVtcHVueWFpIGtlc2FuIGtlIGF0YXMga2VkdWR1a2FuIHRpYW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJ01lbnRha3JpZmthbiBydWFuZ2FuIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0gY2FyaWFuIEZBUS4gUGlsaWhhbiBpbmkgdGlkYWsgbWVtcHVueWFpIGtlc2FuIGtlIGF0YXMga2VkdWR1a2FuIHRpYW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICdNZW50YWtyaWZrYW4gbWFuYSBwYXV0YW4gXCdNYXN1a2thbiBGQVEgXCcgYWthbiBkaXBhcGFya2FuLiBOb3RhOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiB0ZXJtYXN1ayBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBkYW4gQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pc2kgaXRlbSBGQVEgcGVyY3VtYSBiaWRhbmcgdGVrcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnUGFkYW0gRkFRIGluaSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0F1ZGl0IEZBUSBpbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ0FrdGlma2FuIHBlbGJhZ2FpIGJhaGFzYSBwYWRhIG1vZHVsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdBa3RpZmthbiB1bmRpYW4gbWVrYW5pc21hIHBhZGEgbW9kdWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ2p1cm5hbCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0p1cm5hbCBGQVEgbGloYXQgc2VtdWxhICJLZWNpbCIgaGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTGloYXQgc2VtdWxhIEZBUSBoYWQgImtlY2lsIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdTb2FsYW4gTGF6aW0gaGFkIGJhZ2kgc2V0aWFwIGhhbGFtYW4gdW50dWsgVGluamF1YW4gSnVybmFsIEZBUSAiS2VjaWwiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnSGFkIEZBUSBzZXRpYXAgaGFsYW1hbiB1bnR1ayBUaW5qYXVhbiBGQVEgIktlY2lsIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHBhdGggc2VwYXJhdG9yLid9ID0gJ0xhbHVhbiBwZW1pc2FoIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0NhcmlhbiBTb2FsYW4gTGF6aW0gYmFja2VuZCByb3V0ZXIgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJ0thd2FzYW4gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIGFudGFyYSBtdWthIGF3YW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0t1bXB1bGFuIGJhZ2kga2VsdWx1c2FuIGFydGlrZWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnU2VqYXJhaCBGQVEgaW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdUZXJtYXN1ayBiaWRhbmcgZGFsYW1hbiBUaWtldCBiZXJhc2Fza2FuIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdUZXJtYXN1ayBuYW1hIHNldGlhcCBiaWRhbmcgZGFsYW0gVGlrZXQgYmVyYXNhc2thbiBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICdBbnRhcmFtdWthIG1hbmEgZGVuZ2FuIFBhbnRhcyBoZW5kYWtsYWggZGl0dW5qdWtrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICdKdXJuYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ1Blbmd1cnVzYW4gQmFoYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdla2V5IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGUgKl9GQVEucG0uJ30gPSAnS3VuY2kgYmFoYXNhIHlhbmcgZGl0YWtyaWZrYW4gZGFsYW0gZmFpbCBiYWhhc2EgKiBfRkFRLnBtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICdGQVEgcGF1dGFuIGluaSBrZXBhZGEgb2JqZWsgbGFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnQmlsYW5nYW4gbWFrc2ltdW0gYXJ0aWtlbCBGQVEgYWthbiBkaXBhcGFya2FuIGRhbGFtIGhhc2lsIEZBUSBFeHBsb3JlciBtdWthIGVqZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0JpbGFuZ2FuIG1ha3NpbXVtIGFydGlrZWwgRkFRIGFrYW4gZGlwYXBhcmthbiBkYWxhbSBoYXNpbCBGQVEgRXhwbG9yZXIgbXVrYSBwZWxhbmdnYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdCaWxhbmdhbiBtYWtzaW11bSBGQVEgYXJ0aWtlbCB1bnR1ayBkaXBhcGFya2FuIGRhbGFtIGp1cm5hbCBGQVEgZGkgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdCaWxhbmdhbiBtYWtzaW11bSBhcnRpa2VsIEZBUSB1bnR1ayBkaXBhcGFya2FuIGRhbGFtIGhhc2lsIGNhcmlhbiBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdCaWxhbmdhbiBtYWtzaW11bSBhcnRpa2VsIEZBUSB1bnR1ayBkaXBhcGFya2FuIGRhbGFtIGhhc2lsIGNhcmlhbiBkYWxhbSBhbnRhcmEgbXVrYSBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdCaWxhbmdhbiBtYWtzaW11bSBhcnRpa2VsIEZBUSB1bnR1ayBkaXBhcGFya2FuIGRhbGFtIGhhc2lsIGNhcmlhbiBkYWxhbSBhbnRhcmEgbXVrYSBhd2FtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPSAnTW9kdWwgdW50dWsgbWVuamFuYSBodG1sIHByb2ZpbCBvcGVuc2VhcmNoIHVudHVrIGNhcmlhbiBmYXEgcmluZ2thcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAnUGVya2FyYSBCYXJ1IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICdBcnRpa2VsIGJhcnUgRkFRIHBlcmx1IGtlbHVsdXNhbiBzZWJlbHVtIG1lcmVrYSBtZW5kYXBhdCBkaXRlcmJpdGthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0JpbGFuZ2FuIGFydGlrZWwgRkFRIHVudHVrIGRpcGFwYXJrYW4gZGFsYW0gRXhwbG9yZXIgRkFRIGFudGFyYSBtdWthIHBlbGFuZ2dhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0JpbGFuZ2FuIGFydGlrZWwgRkFRIHVudHVrIGRpcGFwYXJrYW4gZGFsYW0gRXhwbG9yZXIgRkFRIGFudGFyYSBtdWthIGF3YW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0JpbGFuZ2FuIGFydGlrZWwgRkFRIHVudHVrIGRpcGFwYXJrYW4gcGFkYSBzZXRpYXAgaGFsYW1hbiBoYXNpbCBjYXJpYW4gZGFsYW0gYW50YXJhIG11a2EgcGVsYW5nZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnQmlsYW5nYW4gYXJ0aWtlbCBGQVEgYWthbiBkaXBhcGFya2FuIHBhZGEgc2V0aWFwIGhhbGFtYW4gaGFzaWwgY2FyaWFuIGRhbGFtIGFudGFyYSBtdWthIGF3YW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnQmlsYW5nYW4gaXRlbSB5YW5nIGRpdHVuanVra2FuIGRhbGFtIHBlcnViYWhhbiB0ZXJha2hpci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdCaWxhbmdhbiBpdGVtIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0gdGVyYWtoaXIgZGljaXB0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICdCaWxhbmdhbiBpdGVtIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0gMTAgdGVyYXRhcyBjaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPSAnUGFyYW1ldGVyIHVudHVrIG11a2Egc3VyYXQgKGRpIG1hbmEgaXRlbSBGQVEgZGl0dW5qdWtrYW4pIGdhbWJhcmFuIGtlY2lsIGp1cm5hbCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPSAnUGFyYW1ldGVyIHVudHVrIG11a2Egc3VyYXQgKGRpIG1hbmEgaXRlbSBGQVEgZGl0dW5qdWtrYW4pIGdhbWJhcmFuIGtlc2VsdXJ1aGFuIEZBUSBrZWNpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdDZXRhayBoYWxhbWFuIEZBUSBpbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnQmVyYXR1ciB1bnR1ayBrZWx1bHVzYW4gYXJ0aWtlbCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnS2FkYXIgdW50dWsgbWVuZ3VuZGkuIEt1bmNpIG1lc3RpbGFoIGRhbGFtIHBlcmF0dXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICdDYXJpYW4gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ1R1bmp1a2thbiAiU2lzaXBhbiBGQVEgTGluayIgQnV0YW5nIGRpIEFnZW50RkFRWm9vbVNtYWxsIHVudHVrIGF3YW0gRkFRIEFydGlrZWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICdQYXBhciAiU2lzaXBhbiBGQVEgVGVrcyAmIExpbmsiIEJ1dHRvbiBkaSBBZ2VudEZBUVpvb21TbWFsbCB1bnR1ayBBcnRpa2VsIEZBUSBhd2FtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9ICdQYXBhciAiU2lzaXBhbiBGQVEgVGVrcyIgQnV0dG9uIGRhbGFtIEFnZW50RkFRWm9vbVNtYWxsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC4nfSA9ICdQYXBhciBGQVEgUGVya2FyYSBkZW5nYW4gSFRNTC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnUGFwYXIgRkFRIGphbGFuIHlhIC8gdGlkYWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgV1lTSVdZRyBlZGl0b3IgaW4gYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1BhcGFyIGVkaXRvciBXWVNJV1lHIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICdQYXBhciBpdGVtIHN1YmthdGVnb3JpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNZW51bmp1a2thbiBpdGVtIHBlcnViYWhhbiB0ZXJha2hpciBkYWxhbSBhbnRhcmEgbXVrYSB5YW5nIGRpdGFrcmlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnVHVuanVra2FuIGFraGlyIG1lbmNpcHRhIGl0ZW0gZGFsYW0gYW50YXJhIG11a2EgeWFuZyBkaXRha3JpZmthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ1BhcGFyIHRvcCAxMCBpdGVtIGRhbGFtIGFudGFyYSBtdWthIHlhbmcgZGl0YWtyaWZrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdm90aW5nIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdQYXBhciBtZW5ndW5kaSBkYWxhbSBhbnRhcmEgbXVrYSB5YW5nIGRpdGFrcmlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNZW51bmp1a2thbiBwYXV0YW4gZGFsYW0gbWVudSB5YW5nIG1lbWJvbGVoa2FuIG1lbmdodWJ1bmdrYW4gRkFRIGRlbmdhbiBvYmplayBsYWluIGRhbGFtIHBhbmRhbmdhbiB6b29tIEZBUSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01lbnVuanVra2FuIHBhdXRhbiBkaSBiYXIgbWVudSBkYWxhbSBwYW5kYW5nYW4gZGl6dW0gZGFsYW0gYW50YXJhIG11a2EgcGVsYW5nZ2FuIHlhbmcgbWVtYm9sZWhrYW4gdW50dWsgbWVtYWRhbSBhcnRpa2VsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTWVudW5qdWtrYW4gcGF1dGFuIGRpIGJhciBtZW51IGRhbGFtIHBhbmRhbmdhbiBkaXp1bSBkYWxhbSBlamVuIHVudHVrIG1lbGloYXQgc2VqYXJhaCBhcnRpa2VsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNZW51bmp1a2thbiBwYXV0YW4gZGkgYmFyIG1lbnUgZGFsYW0gcGFuZGFuZ2FuIGRpenVtIGRhbGFtIGFudGFyYSBtdWthIHBlbGFuZ2dhbiB5YW5nIG1lbWJvbGVoa2FuIHVudHVrIG1lbmdlZGl0IGFydGlrZWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01lbnVuanVra2FuIHBhdXRhbiBkaSBiYXIgbWVudSBkYWxhbSBwYW5kYW5nYW4gZGl6dW0gZGFsYW0gYW50YXJhIG11a2EgcGVsYW5nZ2FuIHlhbmcgbWVtYm9sZWhrYW4gdW50dWsga2VtYmFsaSBrZSBoYWxhbWFuIHNlYmVsdW1ueWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01lbnVuanVra2FuIHBhdXRhbiBkaSBiYXIgbWVudSBkYWxhbSBwYW5kYW5nYW4gZGl6dW0gZGFsYW0gYW50YXJhIG11a2EgZWplbiwgeWFuZyBtZW1ib2xlaGthbiB1bnR1ayBtZW5jZXRhayBhcnRpa2VsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0gJ1BlbmdlY2FtIHVudHVrIGl0ZW0gRkFRLCBzZXBlcnRpIEZBUSAjLCAjIEtCLCBNeUZBUSAjLiBOaWxhaSBsYWxhaSBhZGFsYWggIyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJ2xpbmsgdHlwZS4nfSA9ICdNZW50YWtyaWZrYW4gYmFoYXdhIFwnRkFRXCdvYmplayBkZW5nYW4gamVuaXMgcGF1dGFuIFwnYmlhc2EgXCdsYWluIFwnRkFRXCdvYmplayBib2xlaCBkaWthaXRrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYW4gXCdGQVFcJ29iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJ29iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJ2xpbmsgdHlwZS4nfSA9ICdNZW50YWtyaWZrYW4gYmFoYXdhIFwnRkFRXCdvYmplayBkZW5nYW4gamVuaXMgcGF1dGFuIFwnSWJ1IEJhcGEgS2FuYWsta2FuYWsgXCdsYWluIFwnRkFRXCdvYmplayBpdHUgYm9sZWggZGlrYWl0a2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnTWVudGFrcmlma2FuIGJhaGF3YSBcJyBGQVFcJyBvYmplayBkZW5nYW4gamVuaXMgcGF1dGFuIFwnYmlhc2FcJyBsYWluIFwnVGlrZXRcJyBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIG9iamVrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGFuIFwnRkFRXCdvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCdvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCdsaW5rIHR5cGUuJ30gPSAnTWVudGFrcmlma2FuIGJhaGF3YSBcJ0ZBUVwnb2JqZWsgZGVuZ2FuIGplbmlzIHBhdXRhbiBcJ0lidSBCYXBhIEthbmFrLWthbmFrIFwnbGFpbiBcJ1Rpa2V0IFwnYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBvYmplay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0JhZGFuIHRpa2V0IHVudHVrIG1lbGVwYXNrYW4gYXJ0aWtlbCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdUZXJ0YWtsdWsga2VwYWRhIHRpa2V0IHVudHVrIG1lbGVwYXNrYW4gYXJ0aWtlbCBGQVEuJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNZW50YWtyaWZrYW4gc2lmYXQgbGFsYWkgRkFRIHVudHVrIG1lbnl1c3VuIEV4cGxvcmVyIEZBUSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBleHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ01lbnRha3JpZmthbiBzaWZhdCBsYWxhaSBGQVEgdW50dWsgbWVueXVzdW4gRXhwbG9yZXIgRkFRIGRhbGFtIGFudGFyYSBtdWthIHBlbGFuZ2dhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTWVudGFrcmlma2FuIHNpZmF0IGxhbGFpIEZBUSB1bnR1ayBtZW55dXN1biBFeHBsb3JlciBGQVEgZGFsYW0gYW50YXJhbXVrYSBBd2FtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnTWVudGFrcmlma2FuIHNvcnRpbmcgbGFsYWkgRXhwbG9yZXIgRkFRIGRhbGFtIGFudGFyYSBtdWthIHBlbGFuZ2dhbi4gSW46IEVsZGVyIEZBUSBhcnRpa2VsIGRpIGF0YXMuIEZyb206IEFydGlrZWwgRkFRIE5ld2VzdCBhdGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ01lbnRha3JpZmthbiBzb3J0aW5nIGxhbGFpIEV4cGxvcmVyIEZBUSBtdWthIEF3YW0uIEluOiBFbGRlciBGQVEgYXJ0aWtlbCBkaSBhdGFzLiBGcm9tOiBBcnRpa2VsIEZBUSBOZXdlc3QgYXRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBFeHBsb3JlciByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnTWVudGFrcmlma2FuIHNvcnRpbmcgbGFsYWkgRXhwbG9yZXIgRkFRIGRpIGFudGFyYSBtdWthIHBlbGFuZ2dhbi4gSW46IEVsZGVyIEZBUSBhcnRpa2VsIGRpIGF0YXMuIEZyb206IEFydGlrZWwgRkFRIHRlcmJhcnUgYXRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlOiAnfSA9ICdQYWRhbTogJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnQmlsYW5nYW4gbWFrc2ltdW0gRkFRIGFydGlrZWwgeWFuZyBtdW5jdWwgZGkgRXhwbG9yZXIgRkFRIGRhbGFtIGFudGFyYSBtdWthIHBlbGFuZ2dhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnQmlsYW5nYW4gbWFrc2ltdW0gRkFRIGFydGlrZWwgeWFuZyBtdW5jdWwgZGkgRXhwbG9yZXIgRkFRIGRpIE11a2EgQXdhbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgRXhwbG9yZXIgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdCaWxhbmdhbiBtYWtzaW11bSBhcnRpa2VsIEZBUSB5YW5nIG11bmN1bCBkYWxhbSBFeHBsb3JlciBGQVEgZGkgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0JpbGFuZ2FuIGFydGlrZWwgRkFRIHlhbmcgbXVuY3VsIGRhbGFtIGNhcmlhbiBGQVEgZGFsYW0gYW50YXJhIG11a2EgcGVsYW5nZ2FuIHNldGlhcCBoYWxhbWFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0JpbGFuZ2FuIGFydGlrZWwgRkFRIHlhbmcgbXVuY3VsIGRhbGFtIGNhcmlhbiBGQVEgZGFsYW0gYW50YXJhIG11a2EgQXdhbSBwZXIgaGFsYW1hbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnQmlsYW5nYW4gYXJ0aWtlbCBGQVEgeWFuZyBtdW5jdWwgZGFsYW0gRXhwbG9yZXIgRkFRIGRhbGFtIGFudGFyYSBtdWthIHBlbGFuZ2dhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0JpbGFuZ2FuIGFydGlrZWwgRkFRIHlhbmcgbXVuY3VsIGRhbGFtIEV4cGxvcmVyIEZBUSBkaSBNdWthIEF3YW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnTGloYXQgIk1hc3Vra2FuIFBhdXRhbiIgYnV0YW5nIGRpIEFnZW50RkFRWm9vbVNtYWxsIHVudHVrIGFydGlrZWwgRkFRIGF3YW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBUZXh0ICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ0xpaGF0ICJUZWtzICYgUGFzdGUgTGluayIgYnV0YW5nIGRpIEFnZW50RkFRWm9vbVNtYWxsIHVudHVrIGFydGlrZWwgRkFRIGF3YW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnTGloYXQgIk1hc3Vra2FuIHRla3MiIGJ1dGFuZyBkaSBBZ2VudEZBUVpvb21TbWFsbCB1bnR1ayBhcnRpa2VsIEZBUSBhd2FtLic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmJfTk9fRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnaW50ZXJudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICdwdWJsaXNlcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsJ30gPSAnZWtzdGVybnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ09TUy1udW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAnU2lzdCBvcHBkYXRlcnRlIE9TUy1hcnRpa2xlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdTaXN0IG9wcHJldHRlZGUgT1NTLWFydGlrbGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICdUb3BwIDEwIE9TUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ0luZ2VuIHJhdGluZyB2YWxndCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdvZmZlbnRsaWcgKGFsbGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdrdW4gdGlsIGt1bmRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAna3VuIGludGVybnQgKGFnZW50ZXIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IGRheSd9ID0gJ1N0YXJ0ZGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnTcOlbmVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IHllYXInfSA9ICfDhXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIGRheSd9ID0gJ1NsdXR0ZGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBtb250aCd9ID0gJ03DpW5lZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ8OFcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICdUYWtrIGZvciBkaW4gc3RlbW1lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ0R1IGhhciBhbGxlcmVkZSBzdGVtdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJ1V0c2tyaWZ0IGF2IE9TUy1hcnRpa2tlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICdPU1MtYXJ0aWtsZXIgKFRvcHAgMTApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAnT1NTLWFydGlrbGVyIChueWxpZyBvcHByZXR0ZXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdPU1MtYXJ0aWtsZXIgKG55bGlnIGVuZHJldCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJ30gPSAnT1NTLWthdGVnb3JpIG9wcGRhdGVydCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJ09TUy1rYXRlZ29yaSBsYWd0IHRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICdFbiBrYXRlZ29yaSBtw6UgaGEgZXQgbmF2biEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ0Rlbm5lIGthdGVnb3JpZW4gZWtzaXN0ZXJlciBhbGxlcmVkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAnT1NTLXNwcsOlayBsYWd0IHRpbCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnT1NTLXNwcsOlayBvcHBkYXRlcnQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ05hdm4gZXIgcMOla3JldmQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJ30gPSAnRGV0dGUgc3Byw6VrZXQgZmlubmVzIGFsbGVyZWRlISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ0xlZ2cgdGlsIE9TUy1hcnRpa2tlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ0thdGVnb3JpIGVyIG9ibGlnYXRvcmlzay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdHb2RramVubmluZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdLYXRlZ29yaW9wcHNldHQgZm9yIE9TUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdMZWdnIHRpbCBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdTbGV0dCBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ0xlZ2cgdGlsIGthdGVnb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdFbmRyZSBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnVmlsIHZpc2VzIHNvbSBrb21tZW50YXIgaSB1dGZvcnNrZXJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnU2Frc2JlaGFuZGxlcmdydXBwZXIgc29tIGhhciB0aWxnYW5nIHRpbCBhcnRpa2xlciBpIGRlbm5lIGthdGVnb3JpZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ1ZpbCBkdSB2aXJrZWxpZyBzbGV0dGUgZGVubmUga2F0ZWdvcmllbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAnRHUga2FuIGlra2Ugc2xldHRlIGRlbm5lIGthdGVnb3JpZW4sIGZvcmRpIGRlbiBlciBicnVrdCBpIG1pbnN0IGVuIE9TUy1hcnRpa2tlbCBvZy9lbGxlciBmb3JlbGRyZSB0aWwgbWluc3QgZW4gYW5uZW4ga2F0ZWdvcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICdEZW5uZSBrYXRlZ29yaWVuIGVyIGJydWt0IGkgZsO4bGdlbmRlIE9TUy1hcnRpa2xlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdEZW5uZSBrYXRlZ29yaWVuIGVyIGZvcmVsZHJlIHRpbCBmw7hsZ2VuZGUgdW5kZXJrYXRlZ29yaWVyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJ1ZpbCBkdSB2aXJrZWxpZyBzbGV0dGUgZGVubmUgYXJ0aWtrZWxlbj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ1V0Zm9yc2tlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdIdXJ0aWdzw7hrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJ0F2YW5zZXJ0IHPDuGsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ1VuZGVya2F0ZWdvcmllcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdPZnRlIFN0aWx0ZSBTcMO4cnNtw6VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnSW5nZW4gdW5kZXJrYXRlZ29yaWVyIGZ1bm5ldCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnU3Byw6Vrb3Bwc2V0dCBmb3IgT1NTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICdMZWdnIHRpbCBzcHLDpWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlJ30gPSAnU2xldHQgc3Byw6VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ0xlZ2cgdGlsIHNwcsOlayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnRW5kcmUgc3Byw6VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnSW5nZW4gYXJ0aWtsZXIgZnVubmV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1N0ZW1tZXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdPU1Mtc8O4ayc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdJbmZvIG9tIE9TUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcnfSA9ICdSYXRpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICdSYXRpbmcgJSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvdXQgb2YgNSd9ID0gJ2F2IDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnSW5nZW4gc3RlbW1lciBmdW5uZXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdJbmdlbiBzdGVtbWVyIGF2Z2l0dCEgQmxpIGRlbiBmw7hyc3RlIHRpbCDDpSBzdGVtbWUgcMOlIGRlbm5lIGFydGlra2VsZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdMYXN0IG5lZCB2ZWRsZWdnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0gJ1ZhciBkZW5uZSBhcnRpa2tlbGVuIHRpbCBoamVscD8gVsOmciBzbmlsbCBvZyBnaSBvc3MgZGluIHN0ZW1tZSwgc2xpayBhdCB2aSBrYW4gZm9yYmVkcmUgZGF0YWJhc2VuLiBUdXNlbiB0YWtrISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ2lra2UgdGlsIGhqZWxwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ3ZlbGRpZyBueXR0aWcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdTZXR0IGlubiBPU1MtdGVrc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBMaW5rJ30gPSAnU2V0dCBpbm4gT1NTLWxlbmtlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCAmIExpbmsnfSA9ICdTZXR0IGlubiBPU1MtdGVrc3Qgb2cgLWxlbmtlJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnSW5nZW4gT1NTLWFydGlrbGVyIGJsZSBmdW5uZXQnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICdGdWxsdGVrc3Rzw7hrIGkgT1NTLWFydGlrbGVyIChmLmVrcy4gIk9sKiIgZWxsZXIgIkFuZHJlYXMqbiInOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhbGplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ1PDuGsgZXR0ZXIgYXJ0aWtsZXIgbWVkIG7DuGtrZWxvcmQnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUUV4cGxvcmVyCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVpvb20KCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDU1MgY29sb3IgZm9yIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ0NTUy1mYXJnZSBmb3IgYXZzdGVtbmluZ3NyZXN1bHRhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnS2F0ZWdvcmlvcHBzZXR0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ0FudGFsbCBkZXNpbWFsZXIgZm9yIGF2c3RlbW5pbmdzcmVzdWx0YXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJ0ZvcnZhbGd0IGthdGVnb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ1N0YW5kYXJkIHByaW9yaXRldCBmb3Igc2FrZXIgZm9yIGdvZGtqZW5uaW5nIGF2IE9TUy1hcnRpa2xlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJ1N0YW5kYXJkIHN0YXR1cyBmb3IgZXQgT1NTLW9iamVrdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ1N0YW5kYXJkIHN0YXR1cyBmb3Igc2FrZXIgZm9yIGdvZGtqZW5uaW5nIGF2IE9TUy1hcnRpa2xlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pc2pvbiBhdiBmcml0ZWtzdGZlbHQgZm9yIE9TUy1hcnRpa2xlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICdTbGV0dCBkZW5uZSBhcnRpa2tlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICdFbmRyZSBkZW5uZSBhcnRpa2tlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdPU1Mtam91cm5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBwYXRoIHNlcGFyYXRvci4nfSA9ICdTZXBhcmF0b3IgZm9yIE9TUy1zdGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJ09TUy1vbXLDpWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ01vZHVscmVnaXN0cmVyaW5nIGZvciBkZW4gb2ZmZW50bGlnZSBkZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdHcnVwcGUgc29tIHNrYWwgZ29ka2plbm5lIE9TUy1hcnRpa2xlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJ0hpc3RvcmlrayBvdmVyIGRlbm5lIGFydGlra2VsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWlja3NlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnR3JlbnNlc25pdHQgZGVyIGh1cnRpZ3PDuGtldCBza2FsIHZpc2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdTcHLDpWtvcHBzZXR0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdla2V5IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGUgKl9GQVEucG0uJ30gPSAnTGFuZ3VhZ2VLZXkgZGVmaW5lcnQgaSBzcHLDpWtmaWxlbiAqX0ZBUS5wbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICdMZW5rIG9wcCBldCBhbm5ldCBvYmpla3QgdGlsIGRlbm5lIGFydGlra2VsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ055IE9TUy1hcnRpa2tlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICdOeWUgYXJ0aWtsZXIgdHJlbmdlciBnb2RramVubmluZyBmw7hyIGRlIGthbiBwdWJsaXNlcmVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICdBbnRhbGwgb2JqZWt0ZXIgdmlzdCBpIHNpc3RlIGVuZHJpbmdlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdBbnRhbGwgdmlzdGUgb2JqZWt0ZXIgdW5kZXIgc2lzdCBvcHByZXR0ZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnQW50YWxsIHZpc3RlIGFydGlrbGVyIGkgIlRvcHAgMTAiLWZ1bmtzam9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ1Nrcml2IHV0IGRlbm5lIGFydGlra2VsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnS8O4IGZvciBnb2RramVubmluZyBhdiBPU1MtYXJ0aWtsZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnUmF0ZXIgZm9yIGF2c3RlbW1pbmcuIE7DuGtrZWwgbcOlIHbDpnJlIGkgcHJvc2VudC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ1ZpcyBIVE1MIGkgT1NTLWFydGlra2VsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICdWaXMgT1NTLXN0aSAoamEvbmVpKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFdZU0lXWUcgZWRpdG9yIGluIGFnZW50IGludGVyZmFjZS4nfSA9ICdWaXMgV1lTSVdZRy1yZWRpZ2VyZXIgaSBhZ2VudC1kZWxlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLid9ID0gJ1ZpcyBpbm5ob2xkIGkgdW5kZXJrYXRlZ29yaWVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdWaXMgc2lzdCBlbmRyZWRlIGFydGlrbGVyIGkgZGVmaW5lcnRlIGdyZW5zZXNuaXR0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnVmlzIHNpc3Qgb3BwcmV0dGVkZSBhcnRpa2xlciBpIGRlZmluZXJ0ZSBncmVuc2Vzbml0dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnVmlzICJUb3BwIDEwIiBpIGRlZmluZXJ0ZSBncmVuc2Vzbml0dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ1ZpcyBhdnN0ZW1taW5nIGkgZGVmaW5lcnRlIGdyZW5zZW5zbml0dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGltZSB1c2UgY29tcGxldGUgZGVzY3JpcHRpb24gKGRheXMsIGhvdXJzLCBtaW51dGVzKSwgaWYgc2V0IHRvICJZZXMiOyBvciBqdXN0IGZpcnN0IGxldHRlciAoZCwgaCwgbSksIGlmIHNldCB0byAiTm8iLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPSAnSWRlbnRpZmlrYXRvciBmb3IgZW4gT1NTLWFydGlra2VsLCBmLmVrcy4gRkFRIywgS0IjLCBPU1MjLCBNaW5PU1MjLiBTdGFuZGFyZCBlciBGQVEjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnRGVubmUgaW5uc3RpbGxpbmdlbiBkZWZpbmVyZXIgYXQgZW4gT1NTLWFydGlra2VsIGthbiBsZW5rZXMgdGlsIGFuZHJlIE9TUy1hcnRpa2xlciBtZWQgIk5vcm1hbCIgbGVua2V0eXBlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICdEZW5uZSBpbm5zdGlsbGluZ2VuIGRlZmluZXJlciBhdCBlbiBPU1MtYXJ0aWtrZWwga2FuIGxlbmtlcyB0aWwgYW5kcmUgT1NTLWFydGlrbGVyIG1lZCAiRm9yZWxkcmUvQmFybiItbGVua2V0eXBlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnRGVubmUgaW5uc3RpbGxpbmdlbiBkZWZpbmVyZXIgYXQgZW4gT1NTLWFydGlra2VsIGthbiBsZW5rZXMgdGlsIGFuZHJlIHNha2VyIG1lZCAiTm9ybWFsIiBsZW5rZXR5cGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJ0Rlbm5lIGlubnN0aWxsaW5nZW4gZGVmaW5lcmVyIGF0IGVuIE9TUy1hcnRpa2tlbCBrYW4gbGVua2VzIHRpbCBhbmRyZSBzYWtlciBtZWQgIkZvcmVsZHJlL0Jhcm4iLWxlbmtldHlwZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ1Nha3Npbm5ob2xkIGZvciBnb2RramVubmluZyBhdiBPU1MtYXJ0aWtsZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdTYWtzZW1uZSBmb3IgZ29ka2plbm5pbmcgYXYgT1NTLWFydGlrbGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgbmVlZHMgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAhJ30gPSAnRW4ga2F0ZWdvcmkgdHJlbmdlciBtaW5zdCDDqW4gdGlsZ2FuZ3NncnVwcGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIGNvbW1lbnQhJ30gPSAnRW4ga2F0ZWdvcmkgbcOlIGhhIGVuIGtvbW1lbnRhciEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHdoaWNoIGNhbiBhY2Nlc3MgdGhpcyBjYXRlZ29yeS4nfSA9ICdBZ2VudC1ncnVwcGVyIHNvbSBoYXIgdGlsZ2FuZyB0aWwgZGVubmUga2F0ZWdvcmllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yaWVzJ30gPSAnS2F0ZWdvcmllcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJ0RlZmluZXJlciBodm9yICJTZXR0IGlubiBPU1MiLWxlbmtlbiBza2FsIHZpc2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxTZWFyY2gnfSA9ICdEZXRhbGpzw7hrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBDYXRlZ29yeT8nfSA9ICdWaWwgZHUgdmlya2VsaWcgc2xldHRlIGRlbm5lIGthdGdvcmllbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIExhbmd1YWdlPyd9ID0gJ1ZpbCBkdSB2aXJrZWxpZyBzbGV0dGUgZGV0dGUgc3Byw6VrZXQ/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSd9ID0gJ09TUy1rYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjYXRlZ29yeSBhY2Nlc3NpYmxlLiBUbyBjcmVhdGUgYW4gYXJ0aWNsZSB5b3UgbmVlZCBhY2Nlc3MgdG8gYXQgbGVhc3Qgb25lIGNhdGVnb3J5LiBQbGVhc2UgY2hlY2sgeW91ciBncm91cC9jYXRlZ29yeSBwZXJtaXNzaW9uIHVuZGVyIC1jYXRlZ29yeSBtZW51LSEnfSA9ICdJbmdlbiB0aWxnYW5nIHRpbCBrYXRlZ29yaS4gRm9yIMOlIG9wcHJldHRlIGVuIGFydGlra2VsIG3DpSBkdSBoYSB0aWxnYW5nIHRpbCBtaW5zdCDDqW4ga2F0ZWdvcmkuIFZlbm5saWdzdCBzamVrayBkaW5lIGdydXBwZS0va2F0ZWdvcmktdGlsZ2FuZ2VyIHVuZGVyIC1rYXRlZ29yaW1lbnktJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrU2VhcmNoJ30gPSAnSHVydGlnc8O4ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJDYXRlZ29yaWVzJ30gPSAnVW5kZXJrYXRlZ29yaWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0aXRsZSBpcyByZXF1aXJlZC4nfSA9ICdFbW5lIGVyIG9ibGlnYXRvcmlzay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBDYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBTdWJDYXRlZ29yaWVzJ30gPSAnRGVubmUga2F0ZWdvcmllbiBlciBmb3JlbGRlciB0aWwgZsO4bGdlbmRlIHVuZGVya2F0ZWdvcmllcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIENhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNlKHMpJ30gPSAnRGVubmUga2F0ZWdvcmllbiBicnVrZXMgaSBmw7hsZ2VuZGUgT1NTLWFydGlrbGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgTGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnRGV0dGUgc3Byw6VrZXQgZXIgaSBicnVrIHDDpSBmw7hsZ2VuZGUgYXJ0aWtsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdEZW5uZSBrYXRlZ29yaWVuIGZpbm5lcyBhbGxlcmVkZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXBkYXRlZCd9ID0gJ09wcGRhdGVydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBDYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIEFydGljbGUhIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3QgYW5vdGhlciBDYXRlZ29yeSd9ID0gJ0R1IGthbiBpa2tlIHNsZXR0ZSBkZW5uZSBrYXRlZ29yaWVuLiBEZW4gYnJ1a2VzIGF2IG1pbnN0IMOpbiBhcnRpa2tlbCBvZy9lbGxlciBhdiBtaW5zdCDDqW4gdW5kZXJrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBMYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIEFydGljbGUhJ30gPSAnRHUga2FuIGlra2Ugc2xldHRlIGRldHRlIHNwcsOla2V0LCBkZXQgZXIgaSBicnVrIHDDpSBtaW5zdCDDqW4gYXJ0aWtrZWwuJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmxfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnaW50ZXJuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ3B1YmxpZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICdleHRlcm4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ0ZBUSBudW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAnTGFhdHN0IGdld2lqemlnZGUgYXJ0aWtlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ0xhYXRzdCBhYW5nZW1hYWt0ZSBhcnRpa2VsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ1BvcHVsYWlyc3RlIGFydGlrZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ1N1YmNhdGVnb3JpZSB2YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICdHZWVuIHdhYXJkZXJpbmcgZ2VzZWxlY3RlZXJkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdwdWJsaWVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdleHRlcm4gKGtsYW50ZW4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICdpbnRlcm4gKGdlYnJ1aWtlcnMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IGRheSd9ID0gJ0VlcnN0ZSBkYWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdFZXJzdGUgbWFhbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ0VlcnN0ZSBqYWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdMYWF0c3RlIGRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdMYWF0c3RlIG1hYW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB5ZWFyJ30gPSAnTGFhdHN0ZSBqYWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rcyBmb3IgeW91ciB2b3RlISd9ID0gJ0JlZGFua3Qgdm9vciB1dyBzdGVtISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ1UgaGVlZnQgYWwgZ2VzdGVtZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdBcnRpa2VsIGFmZHJ1a2tlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICdBcnRpa2VsZW4gKHRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnRpa2VsZW4gKG5pZXV3IGFhbmdlbWFha3QpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdBcnRpa2VsZW4gKGxhYXRzdCBnZXdpanppZ2QpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0ZBUSBjYXRlZ29yaWUgYmlqZ2V3ZXJrdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJ0ZBUSBjYXRlZ29yaWUgdG9lZ2V2b2VnZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnR2VlZiBlZW4gbmFhbSBvcCB2b29yIGRlIGNhdGVnb3JpZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ0RlemUgY2F0ZWdvcmllIGJlc3RhYXQgYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJ1RhYWwgdG9lZ2V2b2VnZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnVGFhbCBiaWpnZXdlcmt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ0RlIG5hYW0gaXMgdmVycGxpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0RlemUgdGFhbCBiZXN0YWF0IGFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBsb3Jlcid9ID0gJ092ZXJ6aWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBsb3Jlcid9ID0gJ092ZXJ6aWNodCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ0FydGlrZWwgdG9ldm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnS2llcyBlZW4gY2F0ZWdvcmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZhbCd9ID0gJ0dvZWRrZXVyaW5nJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUNhdGVnb3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0ZBUSBjYXRlZ29yaWViZWhlZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAnQ2F0ZWdvcmllIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdDYXRlZ29yaWUgdmVyd2lqZGVyZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdDYXRlZ29yaWUgdG9ldm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdDYXRlZ29yaWUgYmV3ZXJrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ1dvcmR0IGluIHdlYmludGVyZmFjZSBnZXRvb25kLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1NlbGVjdGVlciB0ZW5taW5zdGUgw6nDqW4gcGVybWlzc2llZ3JvZXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICdHZWJydWlrZXJzIG1ldCByZWNodGVuIG9wIGFydGlrZWxlbiBpbiBkZXplIGNhdGVnb3JpZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ1dpbHQgdSBkZXplIGNhdGVnb3JpZSB2ZXJ3aWpkZXJlbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAnVSBrdW50IGRlemUgY2F0ZWdvcmllIG5pZXQgdmVyd2lqZGVyZW4uIEhpaiB3b3JkdCBnZWJydWlrdCBpbiBlZW4gb2YgbWVlciBhcnRpa2VsZW4gZW4vb2YgaGVlZnQgb25kZXJsaWdnZW5kZSBjYXRlZ29yacOrbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICdEZXplIGNhdGVnb3JpZSB3b3JkdCBnZWJydWlrdCBkb29yIGRlIHZvbGdlbmRlIGFydGlrZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdEZXplIGNhdGVnb3JpZSBoZWVmdCBkZSB2b2xnZW5kZSBzdWJjYXRlZ29yacOrbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdXaWx0IHUgZGl0IGFydGlrZWwgdmVyd2lqZGVyZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRkFRIHZlcmtlbm5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdab2VrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnVWl0Z2VicmVpZCB6b2VrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ1N1YmNhdGVnb3Jpw6tuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ0FydGlrZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ0dlZW4gc3ViY2F0ZWdvcmnDq24gZ2V2b25kZW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJ0dlZW4gZGF0YSBnZXZvbmRlbi4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnQmVoZWVyIHRhbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0gJ0dlYnJ1aWsgZGV6ZSBmZWF0dXJlIGFscyB1IG1ldCBtZWVyZGVyZSB0YWxlbiB3aWx0IHdlcmtlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnVGFhbCB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlJ30gPSAnVGFhbCB2ZXJ3aWpkZXJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICdUYWFsIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnVGFhbCBiZXdlcmtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnV2lsdCB1IGRlemUgdGFhbCB2ZXJ3aWpkZXJlbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0gJ1Uga3VudCBkZXplIHRhYWwgbmlldCB2ZXJ3aWpkZXJlbiwgaGlqIHdvcmR0IGdlYnJ1aWt0IGRvb3IgZWVuIG9mIG1lZXIgYXJ0aWtlbGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJ0RlemUgdGFhbCBpcyBnZWJydWlrdCB2b29yIGRlIHZvbGdlbmRlIGFydGlrZWxlbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnQWFudGFsIGFydGlrZWxlbiBwZXIgcGFnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ0dlZW4gRkFRIGRhdGEgZ2V2b25kZW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtSW5mbyd9ID0gJ0ZBUSBJbmZvcm1hdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnU3RlbW1lbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUUZ1bGx0ZXh0J30gPSAnWm9la2VuIGluIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdGQVEgem9la2VuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnQmVvb3JkZWxpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICdCZW9vcmRlbGluZyAlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAndmFuIDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnR2VlbiBzdGVtbWVuIGdldm9uZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdHZWVuIHN0ZW1tZW4gZ2V2b25kZW4uIFdlZXMgZGUgZWVyc3RlIG9tIGRpdCBhcnRpa2VsIHRlIGJlb29yZGVsZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdTbGEgYmlqbGFnZSBvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9ICdIaWVscCBkaXQgYXJ0aWtlbCBiaWogaGV0IGJlYW50d29vcmRlbiB2YW4gdXcgdnJhYWc/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnaGVsZW1hYWwgbmlldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICdoZWVsIGVyZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCd9ID0gJ1ZvZWcgRkFRIHRla3N0IGluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ1ZvZWcgbGluayBuYWFyIEZBUSBpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnVm9lZyBGQVEgdGVrc3QgZW4gbGluayBpbic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ0dlZW4gYXJ0aWtlbGVuIGdldm9uZGVuLic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ1pvZWtlbiBpbiB0ZWtzdCB2YW4gYXJ0aWtlbGVuIChiaWp2LiAiSmFucyplbiIgb2YgIlByaW50KiIpJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbgoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnRGV0YWlscyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ1pvZWsgb3AgYXJ0aWtlbGVuIG1ldCB0cmVmd29vcmQnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUUV4cGxvcmVyCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ09wZW5iYWFyJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRWm9vbQoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdCZWhlZXIgY2F0ZWdvcmnDq24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICdTdGFuZGFhcmQgY2F0ZWdvcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ1ZlcndpamRlciBkaXQgYXJ0aWtlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnQmV3ZXJrIGRpdCBhcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdGQVEgam91cm5hYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgcGF0aCBzZXBhcmF0b3IuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICdLbm93bGVkZ2UgQmFzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICdHZXNjaGllZGVuaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWlja3NlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICdMb2dib2VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdCZWhlZXIgdGFsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2VrZXkgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZSAqX0ZBUS5wbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnS29wcGVsIGVlbiBhbmRlciBvYmplY3QgYWFuIGRpdCBhcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICdOaWV1dyBhcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ0FydGlrZWwgYWZkcnVra2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnWm9la2VuIGluIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJ1Rvb24gRkFRIHBhZCBqYS9uZWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBXWVNJV1lHIGVkaXRvciBpbiBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnVG9vbiBzdGVtLWZlYXR1cmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBJbmZvcm1hdHlrYSBCb2d1c2xhd3NraSBzcC4geiBvLm8uIHNwLmsuLCBodHRwOi8vd3d3LmliLnBsLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwbF9GQVE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUZBUQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwnfSA9ICd3ZXduxJl0cnpuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICdwdWJsaWN6bmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICd6ZXduxJl0cnpuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnTnVtZXIgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ29zdGF0bmlvIHptaWVuaW9uZSBhcnR5a3XFgnkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ29zdGF0bmlvIHV0d29yem9uZSBhcnR5a3XFgnkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICcxMCBuYWpsZXBzenljaCBhcnR5a3XFgsOzdyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICdQb2RrYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICdOaWUgd3licmHFgmXFmyBvY2VueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAncHVibGljem5lICh3c3p5c2N5KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAnemV3bsSZdHJ6bmUgKGtsaWVuY2kpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICd3ZXduxJl0cnpuZSAoYWdlbmNpKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdEemllxYQgcG9jesSFdGtvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdNaWVzacSFYyBwb2N6xIV0a293eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnUm9rIHBvY3rEhXRrb3d5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdEemllxYQga2/FhGNvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTWllc2nEhWMga2/FhGNvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICdSb2sga2/FhGNvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnRHppxJlrdWplbXkgemEgb2RkYW5pZSBnxYJvc3UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJ30gPSAnSnXFvCByYXogZ8WCb3Nvd2HFgmXFmyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdEcnVrdWogYXJ0eWt1xYIgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJ0FydHlrdcWCeSBGQVEgKDEwIG5hamxlcHN6eWNoKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJ0FydHlrdcWCeSBGQVEgKG5vd2UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdBcnR5a3XFgnkgRkFRIChvc3RhdG5pbyB6bWllbmlvbmUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0thdGVnb3JpYSBGQVEgemFrdHVhbGl6b3dhbmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdLYXRlZ29yaWEgRkFRIGRvZGFuYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnS2F0ZWdvcmlhIHBvd2lubmEgcG9zaWFkYcSHIG5henfEmSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ1RhIGthdGVnb3JpYSBqdcW8IGlzdG5pZWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdKxJl6eWsgRkFRIGRvZGFueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnSsSZenlrIEZBUSB6YWt0dWFsaXpvd2FueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmF6d2EgamVzdCB3eW1hZ2FuYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdUZW4gasSZenlrIGp1xbwgaXN0bmllamUhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnRG9kYWogYXJ0eWt1xYIgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnS2F0ZWdvcmlhIGplc3Qgd3ltYWdhbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnWmF0d2llcmR6ZW5pZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdaYXJ6xIVkemFuaWUga2F0ZWdvcmlhbWkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJ0RvZGFqIGthdGVnb3JpxJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnVXN1xYQga2F0ZWdvcmnEmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ0RvZGFqIGthdGVnb3JpxJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ0VkeXR1aiBrYXRlZ29yacSZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICdab3N0YW5pZSBwb2themFueSBqYWtvIGtvbWVudGFyeiB3IGVrc3Bsb3JlcnplLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1phem5hY3ogcHJ6eW5ham1uaWVqIGplZG7EhSBncnVwxJkgdXByYXduaWXFhC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJ0dydXB5IGFnbmV0w7N3LCBrdMOzcmUgbWFqxIUgZG9zdMSZcCBkbyB0ZWoga2F0ZWdvcmlpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAnQ3p5IG5hIHBld25vIGNoY2VzeiB1c3VuxIXEhyB0xJkga2F0ZWdvcmnEmT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAnTmllIG1vxbxlc3ogdXN1bsSFxIcgdGVqIGthdGVnb3JpaS4gSmVzdCBvbmEgdcW8eXdhbmEgcHJ6ZXogcHJ6eW5ham1uaWVqIGplZGVuIGFydHlrdcWCIEZBUSBsdWIvaSBqZXN0IHJvZHppY2VtIHByem5ham1uaWVqIGplZG5laiBpbm5laiBrYXRlZ29yaWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICdUYSBrYXRlZ29yaWEgamVzdCB1xbx5d2FuYSB3IG5hc3TEmXB1asSFY3ljaCBhcnR5a3XFgmFjaCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnVGEga2F0ZWdvcmlhIGplc3Qgcm9kemljZW0gbmFzdMSZcHVqxIVjeWNoIHBvZGthdGVnb3JpaSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdDenkgbmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIHRlbiBhcnR5a3XFgiBGQVE/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRWtzcGxvcmVyIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdTenlia2llIHd5c3p1a2l3YW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICdXeXN6dWtpd2FuaWUgemFhd2Fuc293YW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdQb2RrYXRlZ29yaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnQXJ0eWt1xYJ5IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ0JyYWsgcG9ka2F0ZWdvcmlpLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdCcmFrIGRhbnljaCB3IGR6aWVubmlrdSBGQVEuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ1phcnrEhWR6YW5pZSBqxJl6eWthbWkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0gJ1XFvHlqIHRlaiBmdW5rY2ppIGplxZtsaSBjaGNlc3ogcHJhY293YcSHIHogd2llbG9tYSBqxJl6eWthbWkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ0RvZGFqIGrEmXp5ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgTGFuZ3VhZ2UnfSA9ICdVc3XFhCBqxJl6eWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnRG9kYWogasSZenlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICdFZHl0dWogasSZenlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nfSA9ICdDenkgbmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIHRlbiBqxJl6eWs/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9ICdOaWUgbW/FvGVzeiB1c3VuxIXEhyB0ZWdvIGrEmXp5a2EuIEplc3Qgb24gdcW8eXdhbnkgdyBwcnp5bmFqbW5pZWogamVkbnltIGFydHlrdWxlIEZBUSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdUZW4gasSZenlrIGplc3QgdcW8eXdhbnkgdyBuYXN0xJlwdWrEhWN5Y2ggYXJ0dWt1xYJhY2ggRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnVXN0YXdpZW5pYSBrb250ZWtzdG93ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICdMaWN6YmEgYXJ0eWt1xYLDs3cgRkFRIG5hIHN0cm9uxJknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnQnJhayBkYW55Y2ggRkFRLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUluZm8nfSA9ICdJbmZvLUZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ0fFgm9zeSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUUZ1bGx0ZXh0J30gPSAnRkFRIHBlxYJub3Rla3N0b3dvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJ1d5c3p1a2l3YW5pZSBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNqZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnT2NlbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICdPY2VuYSAlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAneiA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ0JyYWsgZ8WCb3PDs3chJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdCcmFrIGfFgm9zw7N3ISBCxIVkxbogcGllcndzenkgaSBvY2XFhCB0ZW4gYXJ0eWt1xYIgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnUG9iaWVyeiB6YcWCxIVjem5payc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9ICdKYWsgcG9tb2NueSBiecWCIHRlbiBhcnR5a3XFgj8gUHJvc2lteSBvIHR3b2rEhSBvY2VuxJkgaSBwb21vYyBwcnp5IHVkb3Nrb25hbGFuaXUgYmF6eSBGQVEuIER6acSZa3VqZW15ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ25pZXByenlkYXRuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICdwb21vY25lJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnV3N0YXcgdGVrc3QgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ1dzdGF3IG9kbm/Fm25payBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJ1dzdGF3IHRla3N0IGkgb2Rub8WbbmlrIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ05pZSB6bmFsZXppb25vIGFydHlrdcWCw7N3IEZBUS4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICdXeXN6dWtpd2FuaWUgcGXFgm5vdGVrc3Rvd2UgdyBhcnR5a3XFgmFjaCBGQVEgKG5wLiAiTmFqKnBzenkiIGx1YiAiS293YWxzayoiKSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJ1N6Y3plZ8OzxYJ5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnU3p1a2FqIGFydHlrdcWCw7N3IHphIHBvbW9jxIUgc8WCb3dhIGtsdWN6b3dlZ28nOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUUV4cGxvcmVyCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ1BvYmxpY3puZSc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVpvb20KCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnS29sb3IgQ1NTIGRsYSB3eW5pa8OzdyBnxYJvc293YW5pYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ1phcnrEhWR6YW5pZSBrYXRlZ29yaWFtaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgeW91ciBvd24gbG9nIHRleHQgZm9yIFBHUC4nfSA9ICdTa29uZmlndXJ1aiBzd8OzaiB3xYJhc255IHRla3N0IGxvZ2EgZGxhIFBHUC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tIHRleHQgZm9yIHRoZSBwYWdlIHNob3duIHRvIGN1c3RvbWVycyB0aGF0IGhhdmUgbm8gdGlja2V0cyB5ZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ01pZWpzY2EgcG8gcG90cnplY2lua3UgdyB3eW5pa2FjaCBnxYJvc293YW5pYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJ0RvbXnFm2xuYSBuYXp3YSBrYXRlZ29yaWkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS4nfSA9ICdEb215xZtsbnkgasSZenlrIGRsYSBhcnR5a3XFgsOzdyBGQVEgdyB0cnliaWUgcG9qZWR5bmN6ZWdvIGrEmXp5a2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdEb215xZtsbnkgcHJpb3J5dGV0IHpnxYJvc3plxYQgZGxhIHphdHdpZXJkemXFhCBhcnR5a3XFgsOzdyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICdEb215xZtsbnkgc3RhbiBkbGEgcG96eWNqaSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pY2phIHBvbGEgZnJlZSB0ZXh0IHBvenljamkgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICdVc3XFhCB0byBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0VkeXR1aiB0byBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ1fFgsSFY3ogd2llbGUgasSZenlrw7N3IHcgbW9kdWxlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdXxYLEhWN6IG1lY2hhbml6bSBnxYJvc293YW5pYSB3IG1vZHVsZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnRHppZW5uaWsgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMaW1pdCBGQVEgdyBwcnplZ2zEhWR6aWUgZHppZW5uaWthIHcgdHJ5YmllICJNYcWCZSInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMaW1pdCBGQVEgdyBwcnplZ2zEhWR6aWUgdyB0cnliaWUgIk1hxYJlIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdMaW1pdCBGQVEgbmEgc3Ryb27EmSB3IHByemVnbMSFZHppZSBkemllbm5pa2EgdyB0cnliaWUgIk1hxYJlIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnTGltaXQgRkFRIG5hIHN0cm9uxJkgdyBwcnplZ2zEhWR6aWUgdyB0cnliaWUgIk1hxYJlIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgcGF0aCBzZXBhcmF0b3IuJ30gPSAnU2VwYXJhdG9yIMWbY2llxbxraSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJ0ZBUTogY3rEmXN0byB6YWRhd2FuZSBweXRhbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdHcnVwYWEgZGxhIGFrY2VwdGFjamkgYXJ0eWt1xYLDs3cgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnSGlzdG9yaWEgdGVnbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWdub3JlIGFydGljbGUgd2l0aCBzeXN0ZW0gc2VuZGVyIHR5cGUgZm9yIG5ldyBhcnRpY2xlIGZlYXR1cmUgKGUuIGcuIGF1dG8gcmVzcG9uc2VzIG9yIGVtYWlsIG5vdGlmaWNhdGlvbnMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0R6aWVubmlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdaYXJ6xIVkemFuaWUgasSZenlrYW1pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdla2V5IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGUgKl9GQVEucG0uJ30gPSAnTGFuZ3VhZ2VrZXksIGt0w7NlIGplc3QgemRlZmluaW93YW5lIHcgcGxpa3UgasSZenlrYSAqX0ZBUS5wbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnUG/FgsSFY3ogaW5ueSBvYmlla3QgeiB0eW0gZWxlbWVudGVtIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAnTm93eSBhcnR5a3XFgiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAnTm93ZSBhcnR5a3XFgnkgRkFRIHd5bWFnYWrEhSB6YXR3aWVyZHplbmlhIHByemVkIHB1Ymxpa2FjasSFLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ1d5ZHJ1a3VqIHRvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdLb2xlamthIGRsYSB6YXR3aWVyZHplxYQgYWFydHlrdcWCw7N3IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZXMgZm9yIHZvdGluZy4gS2V5IG11c3QgYmUgaW4gcGVyY2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJ1N6dWthaiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoaXMgdG8geWVzIGlmIHlvdSB0cnVzdCBpbiBhbGwgeW91ciBwdWJsaWMgYW5kIHByaXZhdGUgcGdwIGtleXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGNlcnRpZmllZCB3aXRoIGEgdHJ1c3RlZCBzaWduYXR1cmUuJ30gPSAnVXN0YXcgbmEgdGFrIGplxZtsaSB1ZmFzeiB3c3pzeXRraW0gc3dvaW0gcHVibGljem55bSBpIHByeXdhdG55bSBrbHVjem9tIFBHUCwgbmF3ZXQgamXFm2xpIG5pZSBzxIUgb25lIGNlcnR5Zmlrb3dhbmUgemF1ZmFueW0gcG9kcGlzZW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgV1lTSVdZRyBlZGl0b3IgaW4gYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGltZSB1c2UgY29tcGxldGUgZGVzY3JpcHRpb24gKGRheXMsIGhvdXJzLCBtaW51dGVzKSwgaWYgc2V0IHRvICJZZXMiOyBvciBqdXN0IGZpcnN0IGxldHRlciAoZCwgaCwgbSksIGlmIHNldCB0byAiTm8iLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG1lc3NhZ2Ugc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuIE5PVEUuIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgdGhlc2UgZmllbGRzIGFsc28gaW4gdGhlIHRpY2tldCB6b29tIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UsIHlvdSBoYXZlIHRvIGVuYWJsZSB0aGVtIGluIEN1c3RvbWVyVGlja2V0Wm9vbSMjI0F0dHJpYnV0ZXNWaWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHdoaWNoIGNhbiBhY2Nlc3MgdGhpcyBjYXRlZ29yeS4nfSA9ICdHcnVweSBhZ2VudMOzdywga3TDs3JlIG1hasSFIGRvc3TEmXAgZG8gdGVqIGthdGVnb3JpaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yaWVzJ30gPSAnS2F0ZWdvcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbFNlYXJjaCd9ID0gJ0Rva8WCYWRuZSB3eXN6dWtpd2FuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5J30gPSAnS2F0ZWdvcmlhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjYXRlZ29yeSBhY2Nlc3NpYmxlLiBUbyBjcmVhdGUgYW4gYXJ0aWNsZSB5b3UgbmVlZCBhY2Nlc3MgdG8gYXQgbGVhc3Qgb25lIGNhdGVnb3J5LiBQbGVhc2UgY2hlY2sgeW91ciBncm91cC9jYXRlZ29yeSBwZXJtaXNzaW9uIHVuZGVyIC1jYXRlZ29yeSBtZW51LSEnfSA9ICdCcmFrIHpkZWZpbmlvd2FueWNoIGthdGVnb3JpaS4gQWJ1IHV0d29yennEhyBhcnR5a3XFgiBtdXNpIGlzdG5pZcSHIGNvIG5ham1uaWVqIGplZG5hIGthdGVnb3JpYS4gU3ByYXdkxbogcHJvc3rEmSBzd29qZSB1cHJhd25pZW5pYSB3IG1lbnUgS2F0ZWdvcmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWlja1NlYXJjaCd9ID0gJ1N6eWJraWUgd3lzenVraXdhbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YkNhdGVnb3JpZXMnfSA9ICdQb2RrYXRlZ29yaWUnOwoKICAgICMKICAgICMgT1RIRVIKICAgICMKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBsb3Jlcid9ID0gJ0Vrc3Bsb3Jlcic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfQlJfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnaW50ZXJubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICdww7pibGljbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ2V4dGVybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ07Dum1lcm8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ0FydGlnb3MgbW9kaWZpY2Fkb3MgcmVjZW50ZW1lbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ8OabHRpbW9zIGFydGlnb3MgYWRpY2lvbmFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ09zIDEwIGFydGlnb3MgbWFpcyBhY2Vzc2Fkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICdTdWJjYXRlZ29yaWEgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICdTZWxlY2lvbmUgYSBwb250dWHDp8OjbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAncMO6YmxpY28gKHRvZG9zKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAnZXh0ZXJubyAoY2xpZW50ZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJ2ludGVybm8gKGF0ZW5kZW50ZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAnRGlhIGRlIGluw61jaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdNw6pzIGRlIGluw61jaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ0FubyBkZSBpbsOtY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdEaWEgZGUgdMOpcm1pbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTcOqcyBkZSB0w6lybWlubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ0FubyBkZSB0w6lybWlubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICdPYnJpZ2FkbyBwb3Igc2V1IFZvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdWb2PDqiBqw6Egdm90b3UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnSW1wcmltaXIgQXJ0aWdvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICdBcnRpZ29zIEZBUSAoVG9wIDEwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJ0FydGlnb3MgRkFRIChjcmlhZG8gbm92byknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJ0FydGlnb3MgRkFRIChhbHRlcmFkb3MgcmVjZW50ZW1lbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdDYXRlZ29yaWEgRkFRIGF0dWFsaXphZGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdDYXRlZ29yaWEgRkFRIGFkaWNpb25hZGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ1VtYSBjYXRlZ29yaWEgcHJlY2lzYSB0ZXIgdW0gbm9tZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ0VzdGEgY2F0ZWdvcmlhIGrDoSBleGlzdGUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdJZGlvbWEgRkFRIGFkaWNpb25hZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ0lkaW9tYSBGQVEgIGF0dWFsaXphZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ08gbm9tZSDDqSBvYnJpZ2F0w7NyaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJ30gPSAnRXNzZSBpZGlvbWEgasOhIGV4aXN0ZSEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdBZGljaW9uYXIgQXJ0aWdvIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ0EgY2F0ZWdvcmlhIMOpIG5lY2Vzc8OhcmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZhbCd9ID0gJ0Fwcm92YcOnw6NvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUNhdGVnb3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0dlcmVuY2lhbWVudG8gZGUgQ2F0ZWdvcmlhIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdBZGljaW9uYXIgY2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDYXRlZ29yeSd9ID0gJ0V4Y2x1aXIgQ2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnQWRpY2lvbmFyIENhdGVnb3JpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAnQWx0ZXJhciBDYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ1NlcsOhIGV4aWJpZG8gY29tbyBjb21lbnTDoXJpbyBubyBFeHBsb3JlcmFkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBncm91cC4nfSA9ICdQb3IgZmF2b3IsIHNlbGVjaW9uZSBwZWxvIG1lbm9zIHVtIGdydXBvIGRlIHBlcm1pc3PDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICdHcnVwb3MgZGUgYXRlbmRlbnRlcyBxdWUgcG9kZW0gYWNlc3NhciBhcnRpZ29zIG5lc3RhIGNhdGVnb3JpYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ1ZvY8OqIHJlYWxtZW50ZSBxdWVyIGFwYWdhciBlc3RhIGNhdGVnb3JpYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpZ28gYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9ICdWb2PDqiBuw6NvIHBvZGUgZXhjbHVpciBlc3RhIGNhdGVnb3JpYS4gRWxhIMOpIHVzYWRhIGVtIHBlbG8gbWVub3MgdW0gYXJ0aWdvIEZBUSBlL291IMOpIHBhaSBkZSBwZWxvIG1lbm9zIHVtYSBvdXRyYSBjYXRlZ29yaWEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnRXN0YSBjYXRlZ29yaWEgw6kgdXRpbGl6YWRhIG5vKHMpIHNlZ3VpbnRlKHMpIGFydGlnbyhzKSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnRXN0YSBjYXRlZ29yaWEgw6kgcGFpIGRhcyBzZWd1aW50ZXMgc3ViY2F0ZWdvcmlhcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdWb2PDqiByZWFsbWVudGUgcXVlciBleGNsdWlyIGVzdGUgYXJ0aWdvIEZBUT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdFeHBsb3JlcmFkb3IgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ0J1c2NhIFLDoXBpZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnUGVzcXVpc2EgQXZhbsOnYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdTdWJjYXRlZ29yaWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ0FydGlnb3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnU3ViY2F0ZWdvcmlhcyBuw6NvIGVuY29udHJhZGFzLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdOw6NvIGZvcmFtIGVuY29udHJhZG9zIGRhZG9zIGRlIEpvcm5hbCBGQVEuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlcmVuY2lhbWVudG8gZGUgSWRpb21hcyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPSAnVXNlIGVzc2UgcmVjdXJzbyBzZSB2b2PDqiBkZXNlamEgdHJhYmFsaGFyIGNvbSBtw7psdGlwbG9zIGlkaW9tYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ0FkaWNpb25hciBpZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlJ30gPSAnRXhjbHVpciBpZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnQWRpY2lvbmFyIGlkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnRWRpdGFyIGlkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnVm9jw6ogcmVhbG1lbnRlIHF1ZXIgZXhjbHVpciBlc3RlIGlkaW9tYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0gJ1ZvY8OqIG7Do28gcG9kZSBleGNsdWlyIGVzdGUgaWRpb21hLiBFbGUgw6kgdXNhZG8gZW0gcGVsbyBtZW5vcyB1bSBhcnRpZ28gRkFRISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJ0VzdGUgaWRpb21hIMOpIHVzYWRvIG5vcyBzZWd1aW50ZXMgYXJ0aWdvKHMpIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0NvbmZpZ3VyYcOnw7VlcyBkZSBDb250ZXh0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICdBcnRpZ29zIEZBUSBwb3IgcMOhZ2luYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgZGF0YSBmb3VuZC4nfSA9ICdOw6NvIGZvcmFtIGVuY29udHJhZG9zIGRhZG9zIGRlIEZBUS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1JbmZvJ30gPSAnRkFRIEluZm9ybWHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1ZvdG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICdGQVEtVGV4dG9Db21wbGV0byc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdCdXNjYSBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcnfSA9ICdOb3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyAlJ30gPSAnTm90YSAlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAncmVkdXppZG8gZGUgNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICdOZW5odW0gdm90byBlbmNvbnRyYWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnTmVuaHVtIHZvdG8gZW5jb250cmFkbyEgU2VqYSBvIHByaW1laXJvIGEgYXZhbGlhciBlc3RlIGFydGlnbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdCYWl4YXIgYW5leG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0gJ0VzdGUgYXJ0aWdvIHRlIGFqdWRvdT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICduw6NvIGFqdWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ211aXRvIMO6dGlsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnRkFRIEluc2VyaXIgVGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBMaW5rJ30gPSAnRkFRIEluc2VyaXIgTGluayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnRkFRIEluc2VyaXIgVGV4dG8gZSBMaW5rJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnTmVuaHVtIGFydGlnbyBGQVEgZW5jb250cmFkby4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICdQZXNxdWlzYSBjb21wbGV0YSBkZSB0ZXh0b3MgZW0gYXJ0aWdvcyBGQVEgKHBvciBleGVtcGxvLCAiSm8qbyIgb3IgIldpbGwqIiknOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhdGhlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ1Byb2N1cmUgcG9yIGFydGlnb3MgY29tIHBhbGF2cmFzLWNoYXZlJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFFeHBsb3JlcgoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICdQw7pibGljbyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVpvb20KCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJ1VtIGZpbHRybyBkZSBzYcOtZGEgSFRNTCBwYXJhIGFkaWNpb25hciBsaW5rcyBwYXJhIHRyw6FzIHVtYSBzZXHDvMOqbmNpYSBkZWZpbmlkYS4gTyBlbGVtZW50byBkZSBpbWFnZW0gcGVybWl0ZSBkb2lzIHRpcG9zIGRlIGVudHJhZGEuIFByaW1laXJvLCBvIG5vbWUgZGUgdW1hIGltYWdlbSAoZmFxLnBuZywgcG9yIGV4ZW1wbG8pLiBOZXN0ZSBjYXNvLCBvIGNhbWluaG8gZGEgaW1hZ2VtIE9UUlMgc2Vyw6EgdXNhZG8uIEEgc2VndW5kYSBwb3NzaWJpbGlkYWRlIMOpIGluc2VyaXIgbyBsaW5rIHBhcmEgYSBpbWFnZW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ1NTIGNvciBwYXJhIG8gcmVzdWx0YWRvIGRhIHZvdGHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0dlcmVuY2lhbWVudG8gZGUgQ2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ0Nhc2FzIGRlY2ltYWlzIGRvIHJlc3VsdGFkbyBkYSB2b3Rhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICdOb21lIHBhZHLDo28gZGEgY2F0ZWdvcmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnSWRpb21hIHBhZHLDo28gcGFyYSBvcyBhcnRpZ29zIEZBUSBubyBtb2RvIGRlIGlkaW9tYSDDum5pY28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdQcmlvcmlkYWRlIHBhZHLDo28gZGUgY2hhbWFkb3MgcGFyYSBhIGFwcm92YcOnw6NvIGRvcyBhcnRpZ29zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJ0VzdGFkbyBwYWRyw6NvIGRlIGVudHJhZGEgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnRXN0YWRvIHBhZHLDo28gZGUgY2hhbWFkb3MgcGFyYSBhIGFwcm92YcOnw6NvIGRvcyBhcnRpZ29zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9ICdWYWxvciBwYWRyw6NvIHBhcmEgbyBwYXLDom1ldHJvIGRlIFJlY3Vyc28gcGFyYSBhIGludGVyZmFjZSBww7pibGljYS4gTyBwYXLDom1ldHJvIGRlIGHDp8OjbyDDqSB1c2FkbyBub3Mgc2NyaXB0cyBkbyBzaXN0ZW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPSAnRGVmaW5lIHVtIG3Ds2R1bG8gZGUgcmVzdW1vIHBhcmEgbW9zdHJhciBhIHZpc3VhbGl6YcOnw6NvIHBlcXVlbmEgZGUgdW0gam9ybmFsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0gJ0RlZmluZSB1bSBtw7NkdWxvIGRlIHJlc3VtbyBwYXJhIG1vc3RyYXIgYSB2aXN1YWxpemFyIGRlIHVtYSBwZXF1ZW5hIGxpc3RhIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdEZWZpbmUgbyBhdHJpYnV0byBwYWRyw6NvIEZBUSBwYXJhIGNsYXNzaWZpY2FyIG8gRkFRIGVtIHVtYSBwZXNxdWlzYSBGQVEgZGEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgbyBhdHJpYnV0byBwYWRyw6NvIEZBUSBwYXJhIGNsYXNzaWZpY2FyIG8gRkFRIGVtIHVtYSBwZXNxdWlzYSBGQVEgZGEgaW50ZXJmYWNlIGRvIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBvIGF0cmlidXRvIHBhZHLDo28gRkFRIHBhcmEgY2xhc3NpZmljYXIgbyBGQVEgZW0gdW1hIHBlc3F1aXNhIEZBUSBkYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBvIGF0cmlidXRvIHBhZHLDo28gRkFRIHBhcmEgY2xhc3NpZmljYXIgbyBGQVEgbm8gR2VyZW5jaWFkb3IgRkFRIGRhIGludGVyZmFjZSBkbyBhdGVuZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnRGVmaW5lIG8gYXRyaWJ1dG8gcGFkcsOjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBvIEZBUSBubyBHZXJlbmNpYWRvciBGQVEgZGEgaW50ZXJmYWNlIGRvIGNsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBvIGF0cmlidXRvIHBhZHLDo28gRkFRIHBhcmEgY2xhc3NpZmljYXIgbyBGQVEgbm8gR2VyZW5jaWFkb3IgRkFRIGRhIGludGVyZmFjZSBww7pibGljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgYSBvcmRlbSBwYWRyw6NvIGRlIEZBUSBubyByZXN1bHRhZG8gZG8gR2VyZW5jaWFkb3IgRkFRIGRhIGludGVyZmFjZSBkbyBhdGVuZGVudGUuIEFjaW1hOiBBIG1haXMgYW50aWdhIG5vIHRvcG8uIEFiYWl4bzogbWFpcyByZWNlbnRlcyBubyB0b3BvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgYSBvcmRlbSBwYWRyw6NvIGRlIEZBUSBubyByZXN1bHRhZG8gZG8gR2VyZW5jaWFkb3IgRkFRIGRhIGludGVyZmFjZSBkbyBjbGllbnRlLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBhIG9yZGVtIHBhZHLDo28gZGUgRkFRIG5vIHJlc3VsdGFkbyBkbyBHZXJlbmNpYWRvciBGQVEgZGEgaW50ZXJmYWNlIHDDumJsaWNhLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBhIG9yZGVtIHBhZHLDo28gZGUgRkFRIG5vIHJlc3VsdGFkbyBkYSBwZXNxdWlzYSBuYSBpbnRlcmZhY2UgZG8gYXRlbmRlbnRlLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBhIG9yZGVtIHBhZHLDo28gZGUgRkFRIG5vIHJlc3VsdGFkbyBkYSBwZXNxdWlzYSBuYSBpbnRlcmZhY2UgZG8gY2xpZW50ZS4gQWNpbWE6IEEgbWFpcyBhbnRpZ2Egbm8gdG9wby4gQWJhaXhvOiBtYWlzIHJlY2VudGVzIG5vIHRvcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5lIGEgb3JkZW0gcGFkcsOjbyBkZSBGQVEgbm8gcmVzdWx0YWRvIGRhIHBlc3F1aXNhIG5hIGludGVyZmFjZSBww7pibGljYS4gQWNpbWE6IEEgbWFpcyBhbnRpZ2Egbm8gdG9wby4gQWJhaXhvOiBtYWlzIHJlY2VudGVzIG5vIHRvcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdEZWZpbmUgYXMgY29sdW5hcyBtb3N0cmFkYXMgbm8gR2VyZW5jaWFkb3IgRkFRLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5lIGFzIGNvbHVuYXMgbW9zdHJhZGFzIG5vIGpvcm5hbCBGQVEuIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYWRhcyBuYSBwZXNxdWlzYSBGQVEuIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICdEZWZpbmUgb25kZSBvIGxpbmsgXCdJbnNlcmlyIEZBUVwnIHNlcsOhIGV4aWJpZG8uIE5vdGE6IE9zIFJlY3Vyc28gY29tdW0gZG8gQXRlbmRlbnRlIGluY2x1aSBBYnJpciBDaGFtYWRvLCBGZWNoYXIgQ2hhbWFkbywgQ2hhbWFkbyBkZSBUZXh0byBMaXZyZSwgQ2hhbWFkbyBkbyBwcm9wcmlldMOhcmlvLCBDaGFtYWRvIHBlbmRlbnRlLCBDaGFtYWRvIHByaW9yaXTDoXJpbyBlIFJlc3BvbnPDoXZlbCBwZWxvIENoYW1hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ0RlZmluacOnw6NvIGRlIGNhbXBvcyBkZSB0ZXh0byBsaXZyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnRXhjbHVpciBlc3RlIEZBUSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0VkaXRhciBlc3RlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgbXVsdGlwbGUgbGFuZ3VhZ2VzIG9uIEZBUSBtb2R1bGUuJ30gPSAnUGVybWl0aXIgdsOhcmlvcyBpZGlvbWFzIG5vIG3Ds2R1bG8gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJ1Blcm1pdGlyIG1lY2FuaXNtbyBkZSBBdmFsaWHDp8OjbyBubyBtw7NkdWxvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdKb3JuYWwgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMaW1pdGUgZGEgVmlzw6NvIEdlcmFsICJQZXF1ZW5vIiBkbyBKb3JuYWwgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTGltaXRlIGRhIFZpc8OjbyBHZXJhbCBGQVEgIlBlcXVlbm8iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0xpbWl0ZSBkZSBGQVFzIHBvciBww6FnaW5hIGRhIFZpc8OjbyBHZXJhbCAiUGVxdWVubyIgZG8gSm9ybmFsIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnTGltaXRlIGRlIEZBUXMgcG9yIHDDoWdpbmEgZGEgVmlzw6NvIEdlcmFsICJQZXF1ZW5vIiBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHBhdGggc2VwYXJhdG9yLid9ID0gJ0RlbGltaXRhZG9yIGRlIGNhbWluaG8gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnRkFRIGJ1c2NhIHNlcnZpZG9yIHJvdGVhZG9yIGRhIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnw4FyZWEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0Zyb250ZW5kIGRlIHJlZ2lzdG8gZG8gbcOzZHVsbyBwYXJhIGEgaW50ZXJmYWNlIHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdHcnVwbyBwYXJhIGEgYXByb3Zhw6fDo28gZG9zIGFydGlnb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnSGlzdMOzcmljbyBkZXN0ZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJ0luY2x1aXIgY2FtcG9zIGludGVybm9zIGRlIHVtIENoYW1hZG8gYmFzZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnSW5jbHVpciBvIG5vbWUgZGUgY2FkYSBjYW1wbyBlbSB1bSBDaGFtYWRvIGJhc2UgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWlja3NlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnSW50ZXJmYWNlcyBvbmRlIGEgYnVzY2EgcsOhcGlkYSBkZXZlIHNlciBkZW1vbnN0cmFkYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0pvcm5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnR2VzdMOjbyBkZSBpZGlvbWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdla2V5IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGUgKl9GQVEucG0uJ30gPSAnSWRpb21hIGNoYXZlIHF1ZSBlc3TDoSBkZWZpbmlkbyBubyBhcnF1aXZvIGRlIGlkaW9tYSAqX0ZBUS5wbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnTGluayBkZSBvdXRybyBhcnRpZ28gcGFyYSBlc3RlIGl0ZW0gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSBwYXJhIHNlciBleGliaWRvIG5vIHJlc3VsdGFkbyBkbyBHZXJlbmNpYWRvciBGQVEgZGEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ08gbsO6bWVybyBtw6F4aW1vIGRlIGFydGlnb3MgRkFRIHBhcmEgc2VyIGV4aWJpZG8gbm8gcmVzdWx0YWRvIGRvIEdlcmVuY2lhZG9yIEZBUSBkYSBpbnRlcmZhY2UgZG8gY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSBwYXJhIHNlciBleGliaWRvIG5vIHJlc3VsdGFkbyBkbyBHZXJlbmNpYWRvciBGQVEgZGEgaW50ZXJmYWNlIHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ08gbsO6bWVybyBtw6F4aW1vIGRlIGFydGlnb3MgRkFRIHBhcmEgc2VyIGV4aWJpZG8gbm8gam9ybmFsIEZBUSBkYSBpbnRlcmZhY2UgZG8gYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSBwYXJhIHNlciBleGliaWRvIG5vIHJlc3VsdGFkbyBkZSB1bWEgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTyBuw7ptZXJvIG3DoXhpbW8gZGUgYXJ0aWdvcyBGQVEgcGFyYSBzZXIgZXhpYmlkbyBubyByZXN1bHRhZG8gZGUgdW1hIHBlc3F1aXNhIG5hIGludGVyZmFjZSBkbyBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTyBuw7ptZXJvIG3DoXhpbW8gZGUgYXJ0aWdvcyBGQVEgcGFyYSBzZXIgZXhpYmlkbyBubyByZXN1bHRhZG8gZGUgdW1hIHBlc3F1aXNhIG5hIGludGVyZmFjZSBwdWJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPSAnTcOzZHVsbyBwYXJhIGdlcmFyIGh0bWwgIk9wZW5TZWFyY2giIHBlcmZpbCBkZSBwZXNxdWlzYSBmYXEgY3VydGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ05vdm8gYXJ0aWdvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICdOb3ZvcyBhcnRpZ29zIEZBUSBwcmVjaXNhbSBkZSBhcHJvdmHDp8OjbyBhbnRlcyBkZSBzZXIgcHVibGljYWRvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gZGUgYXJ0aWdvcyBGQVEgcGFyYSBzZXIgZXhpYmlkbyBubyBHZXJlbmNpYWRvciBGQVEgZG8gaW50ZXJmYWNlIGRvIGNsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydGlnb3MgRkFRIHBhcmEgc2VyIGV4aWJpZG8gbm8gR2VyZW5jaWFkb3IgRkFRIGRvIGludGVyZmFjZSBwdWJsaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydGlnb3MgRkFRIHBhcmEgc2VyIGV4aWJpZG8gZW0gY2FkYSBww6FnaW5hIGRlIHVtIHJlc3VsdGFkbyBkZSBwZXNxdWlzYSBuYSBpbnRlcmZhY2UgZG8gY2xpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gZGUgYXJ0aWdvcyBGQVEgcGFyYSBzZXIgZXhpYmlkbyBlbSBjYWRhIHDDoWdpbmEgZGUgdW0gcmVzdWx0YWRvIGRlIHBlc3F1aXNhIG5hIGludGVyZmFjZSBwdWJsaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnTsO6bWVybyBkZSBpdGVucyBtb3N0cmFkb3MgZW0gw7psdGltYXMgYWx0ZXJhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjcmVhdGVkLid9ID0gJ07Dum1lcm8gZGUgaXRlbnMgbW9zdHJhZG9zIGVtIMO6bHRpbWFzIGNyaWHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnTsO6bWVybyBkZSBpdGVucyBtb3N0cmFkb3Mgbm8gcmVjdXJzbyB0b3AgMTAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9ICdQYXLDom1ldHJvcyBkZSBww6FnaW5hcyAobmFzIHF1YWlzIG9zIGl0ZW5zIEZBUSBzw6NvIG1vc3RyYWRvcykgZGEgdmlzw6NvIGdlcmFsIHBlcXVlbmEgZG8gam9ybmFsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9ICdQYXLDom1ldHJvcyBkZSBww6FnaW5hcyAobmFzIHF1YWlzIG9zIGl0ZW5zIEZBUSBzw6NvIG1vc3RyYWRvcykgZGEgdmlzw6NvIGdlcmFsIHBlcXVlbmEgZGUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ0ltcHJpbWlyIGVzdGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0ZpbGEgcGFyYSBhIGFwcm92YcOnw6NvIGRvcyBhcnRpZ29zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZXMgZm9yIHZvdGluZy4gS2V5IG11c3QgYmUgaW4gcGVyY2VudC4nfSA9ICdDb25kacOnw6NvIHBhcmEgYSBhdmFsaWHDp8Ojby4gQ2hhdmUgZGV2ZSBzZXIgZW0gcGVyY2VudHVhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJ1Blc3F1aXNhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICdNb3N0cmEgYm90w6NvICJJbnNlcmlyIExpbmsgRkFRIiBlbSBBbXBsaWHDp8OjbyBwZXF1ZW5hIHBhcmEgbyBhcnRpZ29zIEZBUSBww7pibGljb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ01vc3RyYSBib3TDo28gIkluc2VyaXIgdGV4dG8gZSBMaW5rIEZBUSIgZW0gQW1wbGlhw6fDo28gcGVxdWVuYSBwYXJhIG8gYXJ0aWdvcyBGQVEgcMO6YmxpY29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJ01vc3RyYXIgYm90w6NvICJJbnNlcmlyIEZBUSBUZXh0byIgY29tIHBlcXVlbmEgYW1wbGlhw6fDo28gcGFyYSBvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnTW9zdHJhciBhcnRpZ28gRkFRIGNvbSBIVE1MLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICdNb3N0cmFyIGNhbWluaG8gRkFRIHNpbSAvIG7Do28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgV1lTSVdZRyBlZGl0b3IgaW4gYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYXIgZWRpdG9yIFdZU0lXWUcgbmEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLid9ID0gJ01vc3RyYXIgaXRlbnMgZGUgc3ViY2F0ZWdvcmlhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBhcyDDumx0aW1hcyBhbHRlcmHDp8O1ZXMgZGUgaXRlbnMgZW0gaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIG9zIMO6bHRpbW9zIGl0ZW5zIGNyaWFkb3MgZW0gaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIG9zIDEwIGl0ZW5zIHN1cGVyaW9yIGVtIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciB2b3Rhw6fDo28gZW0gaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcXVlIHBlcm1pdGUgbGlnYXIgdW0gRkFRIGNvbSBvdXRybyBvYmpldG8gbm8gbW9kbyBkZSBleGliacOnw6NvIGFtcGxpYWRhIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcXVlIHBlcm1pdGUgZXhjbHVpciB1bSBGQVEgbm8gbW9kbyBkZSBleGliacOnw6NvIGFtcGxpYWRhIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBhY2Vzc2FyIG8gaGlzdMOzcmljbyBkZSB1bSBGQVEgbm8gbW9kbyBkZSBleGliacOnw6NvIGFtcGxpYWRhIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGVkaXRhciB1bSBGQVEgbm8gbW9kbyBkZSBleGliacOnw6NvIGFtcGxpYWRhIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIHZvbHRhciB1bSBGQVEgbm8gbW9kbyBkZSBleGliacOnw6NvIGFtcGxpYWRhIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBpbXByaW1pciB1bSBGQVEgbm8gbW9kbyBkZSBleGliacOnw6NvIGFtcGxpYWRhIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9ICdPIGlkZW50aWZpY2Fkb3IgcGFyYSB1bSBGQVEsIGV4ZW1wbG8gRkFRICMgS0IgIyAjIE15RkFRLiBPIHBhZHLDo28gw6kgRkFRICMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnRkFRXCcgcG9kZSBzZXIgcmVsYWNpb25hZG8gY29tIG91dHJvcyBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIG8gdGlwbyBkZSB2w61uY3VsbyBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdGQVFcJyBwb2RlIHNlciByZWxhY2lvbmFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIHbDrW5jdWxvIFwnUGFpIGUgZmlsaG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0ZBUVwnIHBvZGUgc2VyIHJlbGFjaW9uYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIHbDrW5jdWxvIFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0ZBUVwnIHBvZGUgc2VyIHJlbGFjaW9uYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIHbDrW5jdWxvIFwnUGFpIGUgZmlsaG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnQ29ycG8gZG8gY2hhbWFkbyBwYXJhIGFwcm92YcOnw6NvIGRlIHVtIGFydGlnbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdPIGFzc3VudG8gZG8gY2hhbWFkbyBwYXJhIGFwcm92YcOnw6NvIGRlIHVtIGFydGlnbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBleHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIEV4cGxvcmVyIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlOiAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTIgRkNDTiAtIFJ1aSBGcmFuY2lzY28gPHJ1aS5mcmFuY2lzY29AZmNjbi5wdD4KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfUFRfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnaW50ZXJubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICdww7pibGljbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ2V4dGVybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ07Dum1lcm8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdENoYW5nZWRJdGVtcyd9ID0gJ0FydGlnb3MgbW9kaWZpY2Fkb3MgcmVjZW50ZW1lbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdENyZWF0ZWRJdGVtcyd9ID0gJ8OabHRpbW9zIGFydGlnb3MgYWRpY2lvbmFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wMTBJdGVtcyd9ID0gJ09zIDEwIGFydGlnb3MgbWFpcyBhY2VkaWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJDYXRlZ29yeU9mJ30gPSAnU3ViY2F0ZWdvcmlhIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnU2VsZWNpb25lIGEgcG9udHVhw6fDo28hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ3DDumJsaWNvICh0b2RvcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ2V4dGVybm8gKGNsaWVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICdpbnRlcm5vIChhZ2VudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0RGF5J30gPSAnRGlhIGRlIGluw61jaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnRNb250aCd9ID0gJ03DqnMgZGUgaW7DrWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydFllYXInfSA9ICdBbm8gZGUgaW7DrWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmREYXknfSA9ICdEaWEgZGUgZmltJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZE1vbnRoJ30gPSAnTcOqcyBkZSBmaW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kWWVhcid9ID0gJ0FubyBkZSBmaW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnT2JyaWdhZG8gcGVsYSBzdWEgY29sYWJvcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ0rDoSBwYXJ0aWNpcG91ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJ0ltcHJpbWlyIEFydGlnbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnQXJ0aWdvcyBGQVEgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnRpZ29zIEZBUSAoY3JpYWRvIG5vdm8pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdBcnRpZ29zIEZBUSAoYWx0ZXJhZG9zIHJlY2VudGVtZW50ZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJ30gPSAnQ2F0ZWdvcmlhIEZBUSBhdHVhbGl6YWRhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgYWRkZWQhJ30gPSAnQ2F0ZWdvcmlhIEZBUSBhZGljaW9uYWRhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICdBIGNhdGVnb3JpYSBwcmVjaXNhIHRlciB1bSBub21lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAnRXN0YSBjYXRlZ29yaWEgasOhIGV4aXN0ZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJ0lkaW9tYSBGQVEgYWRpY2lvbmFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnSWRpb21hIEZBUSAgYXR1YWxpemFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTyBub21lIMOpIG9icmlnYXTDs3JpbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdPIGlkaW9tYSBqw6EgZXhpc3RlISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ0FkaWNpb25hciBBcnRpZ28gZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnQSBjYXRlZ29yaWEgw6kgb2JyaWdhdMOzcmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZhbCd9ID0gJ0Fwcm92YcOnw6NvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUNhdGVnb3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0dlc3TDo28gZGUgQ2F0ZWdvcmlhIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdBZGljaW9uYXIgY2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDYXRlZ29yeSd9ID0gJ0FwYWdhciBDYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdBZGljaW9uYXIgY2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdBbHRlcmFyIGNhdGVnb3JpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnU2Vyw6EgZXhpYmlkbyBjb21vIGNvbWVudMOhcmlvIG5vIGJyb3dzZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBncm91cC4nfSA9ICdQb3IgZmF2b3IsIHNlbGVjaW9uZSBwZWxvIG1lbm9zIHVtIGdydXBvIGRlIHBlcm1pc3PDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICdHcnVwb3MgZGUgYWdlbnRlcyBxdWUgcG9kZW0gYWNlZGVyIGFvcyBhcnRpZ29zIG5lc3RhIGNhdGVnb3JpYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ0Rlc2VqYSBhcGFnYXIgZXN0YSBjYXRlZ29yaWE/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWdvIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAnTsOjbyBwb2RlIGFwYWdhciBlc3RhIGNhdGVnb3JpYS4gw4kgdXNhZGEgZW0gcGVsbyBtZW5vcyB1bSBhcnRpZ28gRkFRIGUvb3Ugw6kgcGFpIGRlIHBlbG8gbWVub3MgdW1hIG91dHJhIGNhdGVnb3JpYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICdFc3RhIGNhdGVnb3JpYSDDqSB1dGlsaXphZGEgbm8ocykgc2VndWludGUocykgYXJ0aWdvKHMpIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdFc3RhIGNhdGVnb3JpYSDDqSBwYWkgZGFzIHNlZ3VpbnRlcyBzdWItY2F0ZWdvcmlhcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdEZXNlamEgYXBhZ2FyIGVzdGUgYXJ0aWdvIEZBUT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdFeHBsb3JhZG9yIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdQZXNxdWlzYSBSw6FwaWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJ1Blc3F1aXNhIEF2YW7Dp2FkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yaWVzJ30gPSAnU3ViLWNhdGVnb3JpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnQXJ0aWdvcyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICdTdWJjYXRlZ29yaWFzIG7Do28gZW5jb250cmFkYXMuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJ07Do28gZm9yYW0gZW5jb250cmFkb3MgZGFkb3MgZGUgSm9ybmFsIEZBUS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnR2VzdMOjbyBkZSBJZGlvbWFzIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9ICdVdGlsaXplIGVzdGEgZnVuY2lvbmFsQW50aWd1aWRhZGUgY2FzZW8gZGVzZWphIHRyYWJhbGhhciBjb20gbcO6bHRpcGxvcyBpZGlvbWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICdBZGljaW9uYXIgaWRpb21hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSd9ID0gJ0FwYWdhciBpZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnQWRpY2lvbmFyIGlkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnRWRpdGFyIGlkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnRGVzZWphIGFwYWdhciBlc3RlIGlkaW9tYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0gJ07Do28gcG9kZSBhcGFnYXIgZXN0ZSBpZGlvbWEuIMOJIHVzYWRvIGVtIHBlbG8gbWVub3MgdW0gYXJ0aWdvIEZBUSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdFc3RlIGlkaW9tYSDDqSB1c2FkbyBub3Mgc2VndWludGVzIGFydGlnbyhzKSBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdDb25maWd1cmHDp8O1ZXMgZGUgQ29udGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnQXJ0aWdvcyBGQVEgcG9yIHDDoWdpbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnTsOjbyBmb3JhbSBlbmNvbnRyYWRvcyBkYWRvcyBkZSBGQVEuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtSW5mbyd9ID0gJ0ZBUSBJbmZvcm1hw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZXMnfSA9ICdWb3Rvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUUZ1bGx0ZXh0J30gPSAnRkFRLVRleHRvQ29tcGxldG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgU2VhcmNoJ30gPSAnUGVzcXVpc2EgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnTm90YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcgJSd9ID0gJ05vdGEgJSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvdXQgb2YgNSd9ID0gJ3JlZHV6aWRvIGRlIDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnTmVuaHVtIHZvdG8gZW5jb250cmFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ05lbmh1bSB2b3RvIGVuY29udHJhZG8hIFNlamEgbyBwcmltZWlybyBhIGF2YWxpYXIgZXN0ZSBhcnRpZ28gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnRGVzY2FycmVnYXIgYW5leG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGVWb3RpbmdRdWVzdGlvbid9ID0gJ0VzdGUgYXJ0aWdvIGZvaSDDunRpbCA/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnbsOjbyBhanVkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICdtdWl0byDDunRpbCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCd9ID0gJ0ZBUSBJbnNlcmlyIFRleHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0ZBUSBJbnNlcmlyIExpbmsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJ0ZBUSBJbnNlcmlyIFRleHRvIGUgTGluayc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ05lbmh1bSBhcnRpZ28gRkFRIGVuY29udHJhZG8uJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpJ30gPSAnUGVzcXVpc2EgY29tcGxldGEgZGUgdGV4dG9zIGVtIGFydGlnb3MgRkFRIChwb3IgZXhlbXBsbywgIkpvKm8iIG9yICJXaWxsKiIpJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbgoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnRGV0YWxoZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICdQZXNxdWlzZSBwb3IgYXJ0aWdvcyBjb20gcGFsYXZyYXMtY2hhdmUnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUUV4cGxvcmVyCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ1DDumJsaWNvJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRWm9vbQoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPSAnVW0gZmlsdHJvIGRlIHNhw61kYSBIVE1MIHBhcmEgYWRpY2lvbmFyIGxpbmtzIHBhcmEgYXRyw6FzIHVtYSBzZXHDvMOqbmNpYSBkZWZpbmlkYS4gTyBlbGVtZW50byBkZSBpbWFnZW0gcGVybWl0ZSBkb2lzIHRpcG9zIGRlIGVudHJhZGEuIFByaW1laXJvLCBvIG5vbWUgZGEgaW1hZ2VtIChleDpmYXEucG5nKS4gTmVzdGUgY2FzbywgbyBjYW1pbmhvIGRhIGltYWdlbSBPVFJTIHNlcsOhIHV0aWxpemFkby4gQSBzZWd1bmRhIHBlcm1pdGUgaW5zZXJpciBvIGxpbmsgcGFyYSBhIGltYWdlbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDw7RyIENTUyBwYXJhIG8gcmVzdWx0YWRvIGRhIHZvdGHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0dlc3TDo28gZGUgQ2F0ZWdvcmlhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDYXNhcyBkZWNpbWFpcyBkbyByZXN1bHRhZG8gZGEgdm90YcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAnTm9tZSBwb3Igb21pc3PDo28gZGUgY2F0ZWdvcmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnSWRpb21hIHBvciBvbWlzc8OjbyBwYXJhIG9zIGFydGlnb3MgRkFRIG5vIG1vZG8gZGUgaWRpb21hIMO6bmljby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ1ByaW9yaWRhZGUgcG9yIG9taXNzw6NvIGRlIHRpY2tldHMgcGFyYSBhcHJvdmHDp8OjbyBkb3MgYXJ0aWdvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICdFc3RhZG8gcG9yIG9taXNzw6NvIGRlIGVudHJhZGEgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnRXN0YWRvIHBvciBvbWlzc8OjbyBkZSB0aWNrZXRzIHBhcmEgYXByb3Zhw6fDo28gZG9zIGFydGlnb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0gJ1ZhbG9yIHBvciBvbWlzc8OjbyBwYXJhIG8gcGFyw6JtZXRybyBkZSBSZWN1cnNvIG5hIGludGVyZmFjZSBww7pibGljYS4gTyBwYXLDom1ldHJvIGRlIGHDp8OjbyDDqSB1dGlsaXphZG8gbm9zIHNjcmlwdHMgZG8gc2lzdGVtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0gJ0RlZmluZSB1bSBtw7NkdWxvIGRlIHJlc3VtbyBwYXJhIG1vc3RyYXIgYSB2aXN0YSBwZXF1ZW5hIGRlIHVtIGpvcm5hbCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgbGlzdC4nfSA9ICdEZWZpbmUgdW0gbcOzZHVsbyBkZSByZXN1bW8gcGFyYSBtb3N0cmFyIGEgdmlzdWFsaXphciBkZSB1bWEgcGVxdWVuYSBsaXN0YSBkZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnRGVmaW5lIG8gYXRyaWJ1dG8gcG9yIG9taXNzw6NvIEZBUSBwYXJhIGNsYXNzaWZpY2FyIGEgRkFRIG51bWEgcGVzcXVpc2EgRkFRIG5vIGludGVyZmFjZSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnRGVmaW5lIG8gYXRyaWJ1dG8gcG9yIG9taXNzw6NvIEZBUSBwYXJhIGNsYXNzaWZpY2FyIGEgRkFRIG51bWEgcGVzcXVpc2EgRkFRIG5vIGludGVyZmFjZSBkbyBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgbyBhdHJpYnV0byBwb3Igb21pc3PDo28gRkFRIHBhcmEgY2xhc3NpZmljYXIgYSBGQVEgZW0gdW1hIHBlc3F1aXNhIEZBUSBuYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBvIGF0cmlidXRvIHBvciBvbWlzc8OjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBvIEZBUSBuYSBnZXN0w6NvIEZBUSBkYSBpbnRlcmZhY2UgZG8gYWdlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBvIGF0cmlidXRvIHBvciBvbWlzc8OjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBvIEZBUSBubyBHZXJlbmNpYWRvciBGQVEgZGEgaW50ZXJmYWNlIGRvIGNsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBvIGF0cmlidXRvIHBvciBvbWlzc8OjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBvIEZBUSBuYSBnZXN0w6NvIEZBUSBkYSBpbnRlcmZhY2UgcMO6YmxpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5lIGEgb3JkZW0gcG9yIG9taXNzw6NvIGRlIEZBUSBubyByZXN1bHRhZG8gZGEgZ2VzdMOjbyBGQVEgZGEgaW50ZXJmYWNlIGRvIGFnZW50ZS4gQWNpbWE6IEEgbWFpcyBhbnRpZ2Egbm8gdG9wby4gQWJhaXhvOiBtYWlzIHJlY2VudGVzIG5vIHRvcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBhIG9yZGVtIHBvciBvbWlzc8OjbyBkZSBGQVEgbm8gcmVzdWx0YWRvIG5hIGdlc3TDo28gRkFRIGRhIGludGVyZmFjZSBkbyBjbGllbnRlLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBhIG9yZGVtIHBvciBvbWlzc8OjbyBkZSBGQVEgbm8gcmVzdWx0YWRvIG5hIGdlc3TDo28gRkFRIGRhIGludGVyZmFjZSBww7pibGljYS4gQWNpbWE6IEEgbWFpcyBhbnRpZ2Egbm8gdG9wby4gQWJhaXhvOiBtYWlzIHJlY2VudGVzIG5vIHRvcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgYSBvcmRlbSBwb3Igb21pc3PDo28gZGUgRkFRIG5vIHJlc3VsdGFkbyBkYSBwZXNxdWlzYSBuYSBpbnRlcmZhY2UgZG8gYWdlbnRlLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBhIG9yZGVtIHBvciBvbWlzc8OjbyBkZSBGQVEgbm8gcmVzdWx0YWRvIGRhIHBlc3F1aXNhIG5hIGludGVyZmFjZSBkbyBjbGllbnRlLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgYSBvcmRlbSBwb3Igb21pc3PDo28gZGUgRkFRIG5vIHJlc3VsdGFkbyBkYSBwZXNxdWlzYSBuYSBpbnRlcmZhY2UgcMO6YmxpY2EuIEFjaW1hOiBBIG1haXMgYW50aWdhIG5vIHRvcG8uIEFiYWl4bzogbWFpcyByZWNlbnRlcyBubyB0b3BvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5lIGFzIGNvbHVuYXMgbW9zdHJhZGFzIG5hIGdlc3TDo28gRkFRLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5lIGFzIGNvbHVuYXMgbW9zdHJhZGFzIG5vIGpvcm5hbCBGQVEuIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYWRhcyBuYSBwZXNxdWlzYSBGQVEuIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICdEZWZpbmUgb25kZSBvIGxpbmsgXCdJbnNlcmlyIEZBUVwnIHNlcsOhIGV4aWJpZG8uIE5vdGE6IE9zIFJlY3Vyc28gY29tdW1zIGRvIGFnZW50ZSBpbmNsdWVtIEFicmlyIHRpY2tldCwgRmVjaGFyIHRpY2tldCwgdGlja2V0IGRlIFRleHRvIExpdnJlLCBwcm9wcmlldMOhcmlvIGRvIHRpY2tldCwgdGlja2V0IHBlbmRlbnRlLCBQcmlvcmlkYWRlIGUgcmVzcG9uc8OhdmVsIGRvIHRpY2tldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pw6fDo28gZGUgY2FtcG9zIGRlIHRleHRvIGxpdnJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICdBcGFnYXIgZXN0YSBGQVEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICdFZGl0YXIgZXN0YSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ1Blcm1pdGlyIHbDoXJpb3MgaWRpb21hcyBubyBtw7NkdWxvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdQZXJtaXRpciBtZWNhbmlzbW8gZGUgQXZhbGlhw6fDo28gbm8gbcOzZHVsbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnSm9ybmFsIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTGltaXRlIGRhIHZpc3RhICJQZXF1ZW5hIiBkbyBKb3JuYWwgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTGltaXRlIGRhIHZpc3RhICBGQVEgIlBlcXVlbm8iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0xpbWl0ZSBkZSBGQVFzIHBvciBww6FnaW5hIG5hIHZpc3RhICJQZXF1ZW5vIiBkbyBKb3JuYWwgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdMaW1pdGUgZGUgRkFRcyBwb3IgcMOhZ2luYSBuYSB2aXN0YSAiUGVxdWVuYSIgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBwYXRoIHNlcGFyYXRvci4nfSA9ICdEZWxpbWl0YWRvciBkZSBjYW1pbmhvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1JvdXRlciBkZSBwZXNxdWlzYSBGQVEgbmEgaW50ZXJmYWNlIGRvIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICfDgXJlYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnRnJvbnRlbmQgZGUgcmVnaXN0byBkbyBtw7NkdWxvIHBhcmEgYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0dydXBvIHBhcmEgYSBhcHJvdmHDp8OjbyBkb3MgYXJ0aWdvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICdIaXN0w7NyaWNvIGRhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnSW5jbHVpciBjYW1wb3MgaW50ZXJub3MgZGUgdW0gdGlja2V0IGJhc2VhZG8gZW0gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJ0luY2x1aXIgbyBub21lIGRlIGNhZGEgY2FtcG8gbnVtIHRpY2tldCBiYXNlYWRvIGVtIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2tzZWFyY2ggc2hvdWxkIGJlIHNob3duLid9ID0gJ0ludGVyZmFjZXMgb25kZSBhIGJ1c2NhIHLDoXBpZGEgZGV2ZSBzZXIgdmlzdWFsaXphZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICdKb3JuYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3TDo28gZGUgaWRpb21hcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZWtleSB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBsYW5ndWFnZSBmaWxlICpfRkFRLnBtLid9ID0gJ0lkaW9tYSBjaGF2ZSBxdWUgZXN0w6EgZGVmaW5pZG8gbm8gYXJxdWl2byBkZSBpZGlvbWEgKl9GQVEucG0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJ0xpbmsgZGUgb3V0cm8gYXJ0aWdvIHBhcmEgZXN0YSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ08gbsO6bWVybyBtw6F4aW1vIGRlIGFydGlnb3MgRkFRIHZpc3VhbGl6YWRvIG5hIGdlc3TDo28gRkFRIGRhIGludGVyZmFjZSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSB2aXN1YWxpemFkbyBuYSBnZXN0w6NvIEdlcmVuY2lhZG9yIEZBUSBkYSBpbnRlcmZhY2UgZG8gY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSB2aXN1YWxpemFkbyBuYSBnZXN0w6NvIEZBUSBkYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTyBuw7ptZXJvIG3DoXhpbW8gZGUgYXJ0aWdvcyBGQVEgdmlzdWFsaXphZG8gbm8gam9ybmFsIEZBUSBkYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSB2aXN1YWxpemFkbyBubyByZXN1dGxhZG8gZGUgdW1hIHBlc3F1aXNhIG5vIGludGVyZmFjZSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ08gbsO6bWVybyBtw6F4aW1vIGRlIGFydGlnb3MgRkFRIHZpc3VhbGl6YWRvIG5vIHJlc3VsdGFkbyBkZSB1bWEgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIGRvIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSB2aXN1YWxpemFkbyBvIG5vIHJlc3VsdGFkbyBkZSB1bWEgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIHB1YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9ICdNw7NkdWxvIHBhcmEgZ2VyYXIgaHRtbCAiT3BlblNlYXJjaCJkZSBwZXNxdWlzYSBmYXEgY3VydGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ05vdm8gYXJ0aWdvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICdOb3ZvcyBhcnRpZ29zIEZBUSBwcmVjaXNhbSBkZSBhcHJvdmHDp8OjbyBhbnRlcyBkZSBzZXIgcHVibGljYWRvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ07Dum1lcm8gZGUgYXJ0aWdvcyBGQVEgdmlzdWFsaXphZG8gbmEgZ2VzdMOjbyBGQVEgZG8gaW50ZXJmYWNlIGRvIGNsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydGlnb3MgRkFRIHZpc3VhbGl6YWRvIG5hIGdlc3TDo28gRkFRIGRvIGludGVyZmFjZSBwdWJsaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydGlnb3MgRkFRIHZpc3VhbGl6YWRvIHBvciBww6FnaW5hIGRlIHJlc3VsdGFkb3MgZGUgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIGRvIGNsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydGlnb3MgRkFRIHZpc3VhbGl6YWRvIHBvciBww6FnaW5hIGRlIHJlc3VsdGFkb3MgZGUgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIHB1YmxpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICdOw7ptZXJvIGRlIGl0ZW5zIHZpc3VhbGl6YWRvcyBuYXMgw7psdGltYXMgYWx0ZXJhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjcmVhdGVkLid9ID0gJ07Dum1lcm8gZGUgaXRlbnMgdmlzdWFsaXphZG9zIG5hcyDDumx0aW1hcyBjcmlhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJ07Dum1lcm8gZGUgaXRlbnMgdmlzdWFsaXphZG9zIGVtIHRvcCAxMC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0gJ1BhcsOibWV0cm9zIGRlIHDDoWdpbmFzIChuYXMgcXVhaXMgb3MgaXRlbnMgRkFRIHPDo28gdmlzdWFsaXphZG9zKSBkYSB2aXN0YSBwZXF1ZW5hIGRvIGpvcm5hbCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPSAnUGFyw6JtZXRyb3MgZGUgcMOhZ2luYXMgKG5hcyBxdWFpcyBvcyBpdGVucyBGQVEgc8OjbyB2aXN1YWxpemFkb3MpIGRhIHZpc3RhIHBlcXVlbmEgZGUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ0ltcHJpbWlyIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdGaWxhIHBhcmEgYXByb3Zhw6fDo28gZG9zIGFydGlnb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJ0NvbmRpw6fDo28gcGFyYSBhIGF2YWxpYcOnw6NvLiBDaGF2ZSBlbSBwZXJjZW50YWdlbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJ1Blc3F1aXNhciBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnTW9zdHJhciBib3TDo28gIkluc2VyaXIgTGluayBGQVEiIG5hIHZpc3RhIHBlcXVlbmEgZGUgYXJ0aWdvcyBGQVEgcMO6YmxpY29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICdNb3N0cmEgYm90w6NvICJJbnNlcmlyIHRleHRvIGUgTGluayBGQVEiIG5hIHZpc3RhIHBlcXVlbmEgZGUgYXJ0aWdvcyBGQVEgcMO6YmxpY29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJ01vc3RyYXIgYm90w6NvICJJbnNlcmlyIEZBUSBUZXh0byIgbmEgdmlzdGEgcGFyYSBvIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnTW9zdHJhciBhcnRpZ28gRkFRIGNvbSBIVE1MLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICdNb3N0cmFyIGNhbWluaG8gRkFRIHNpbSAvIG7Do28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgV1lTSVdZRyBlZGl0b3IgaW4gYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYXIgZWRpdG9yIFdZU0lXWUcgbmEgaW50ZXJmYWNlIGRvIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLid9ID0gJ01vc3RyYXIgc3ViY2F0ZWdvcmlhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBhcyDDumx0aW1hcyBhbHRlcmHDp8O1ZXMgZGUgaXRlbnMgZW0gaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIG9zIMO6bHRpbW9zIGl0ZW5zIGNyaWFkb3MgZW0gaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIGFzIDEwIG1haXMgdmlzdWFsaXphZGFzIGVtIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciB2b3Rhw6fDo28gZW0gaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcXVlIHBlcm1pdGUgbGlnYXIgYSBGQVEgY29tIG91dHJvIG9iamV0byBuYSB2aXN0YSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcXVlIHBlcm1pdGUgZXhjbHVpciB1bSBGQVEgbmEgdmlzdGEgbmEgaW50ZXJmYWNlIGRvIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGFjZWRlciBhbyBoaXN0w7NyaWNvIGRhIEZBUSBuYSB2aXN0YSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGVkaXRhciB1bWEgRkFRIG5hIHZpc3RhIGRhIGludGVyZmFjZSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIHZvbHRhciB1bWEgRkFRIG5hIHZpc3RhIGRhIGludGVyZmFjZSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBpbXByaW1pciB1bWEgRkFRIG5hIHZpc3RhIGRhIGludGVyZmFjZSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9ICdPIGlkZW50aWZpY2Fkb3IgcGFyYSBGQVEsIGV4ZW1wbG8gRkFRICMgS0IgIyAjIE15RkFRLiBPIHZhbG9yIHBvciBvbWlzc8OjbyDDqSBGQVEgIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdGQVFcJyBwb2RlIHNlciByZWxhY2lvbmFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdGQVFcJyBjb20gbGlnYcOnw6NvIFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0ZBUVwnIHBvZGUgc2VyIHJlbGFjaW9uYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdQYWkgZSBmaWxob1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnRkFRXCcgcG9kZSBzZXIgcmVsYWNpb25hZG8gY29tIG91dHJvcyBvYmpldG9zIFwnVGlja2V0XCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdGQVFcJyBwb2RlIHNlciByZWxhY2lvbmFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnUGFpIGUgZmlsaG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnQ29ycG8gZG8gdGlja2V0IHBhcmEgYXByb3Zhw6fDo28gZGUgdW0gYXJ0aWdvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ08gYXNzdW50byBkbyB0aWNrZXQgcGFyYSBhcHJvdmHDp8OjbyBkZSB1bSBhcnRpZ28gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBleHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBFeHBsb3JlciByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZTogJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBleHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBUZXh0ICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAxMSBBbGV4IFNhdnZpbiA8c2F2dmluIGF0IG1haWwucnU+CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9GQVE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUZBUQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwnfSA9ICfRgdC70YPQttC10LHQvdC+0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAn0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdC+0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICfQvtGC0LrRgNGL0YLQvtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICfQndC+0LzQtdGAIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICfQn9C+0YHQu9C10LTQvdC40LUg0L7QsdC90L7QstC70LXQvdC40Y8g0YHRgtCw0YLQtdC5IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICfQndC+0LLRi9C1INGB0YLQsNGC0YzQuCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ1RvcCAxMCDRgdGC0LDRgtC10LkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAn0J/QvtC00YDQsNC30LTQtdC7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAn0J7RhtC10L3QutCwINC+0YLRgdGD0YLRgdGC0LLRg9C10YIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ9C+0LHRidC10LTQvtGB0YLRg9C/0L3QvtC1ICjQstGB0LXQvCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ9C+0YLQutGA0YvRgtC+0LUgKNC60LvQuNC10L3RgtCw0LwpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICfRgdC70YPQttC10LHQvdC+0LUgKNCw0LPQtdC90YLQsNC8KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICfQndCw0YfQsNC70L4g0LTQvdGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAn0J3QsNGH0LDQu9CwINC80LXRgdGP0YbQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAn0J3QsNGH0LDQu9C+INCz0L7QtNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICfQmtC+0L3QtdGGINC00L3Rjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICfQmtC+0L3QtdGGINC80LXRgdGP0YbQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ9Ca0L7QvdC10YYg0LPQvtC00LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAn0KHQv9Cw0YHQuNCx0L4g0LfQsCDQstCw0YjRgyDQvtGG0LXQvdC60YMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJ30gPSAn0JLRiyDRg9C20LUg0L/QvtGB0YLQsNCy0LjQu9C4INC+0YbQtdC90LrRgyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICfQn9C10YfQsNGC0Ywg0YHRgtCw0YLRjNC4IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICfQodGC0LDRgtGM0LggRkFRIChUb3AgMTApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAn0KHRgtCw0YLRjNC4IEZBUSAo0L3QvtCy0YvQtSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJ9Ch0YLQsNGC0YzQuCBGQVEgKNC+0LHQvdC+0LLQu9GR0L3QvdGL0LUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ9Ca0LDRgtC10LPQvtGA0LjRjyBGQVEg0LjQt9C80LXQvdC10L3QsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJ9Ca0LDRgtC10LPQvtGA0LjRjyBGQVEg0LTQvtCx0LDQstC70LXQvdCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfQoyDQutCw0YLQtdCz0L7RgNC40Lgg0LTQvtC70LbQvdC+INCx0YvRgtGMINC90LDQt9Cy0LDQvdC40LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICfQotCw0LrQsNGPINC60LDRgtC10LPQvtGA0LjRjyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICfQr9C30YvQuiDQtNC70Y8gRkFRINC00L7QsdCw0LLQu9C10L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ9Cv0LfRi9C6INC00LvRjyBGQVEg0LjQt9C80LXQvdGR0L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ9Cd0LXQvtCx0YXQvtC00LjQvNC+INC30LDQtNCw0YLRjCDQvdCw0LfQstCw0L3QuNC1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ9Ci0LDQutC+0Lkg0Y/Qt9GL0Log0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0YHRgtCw0YLRjNGOIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ9Cd0YPQttC90L4g0LLRi9Cx0YDQsNGC0Ywg0LrQsNGC0LXQs9C+0YDQuNGOLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZhbCd9ID0gJ9Ce0LTQvtCx0YDQtdC90L4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0LrQsNGC0LXQs9C+0YDQuNGP0LzQuCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAn0JTQvtCx0LDQstC40YLRjCDQutCw0YLQtdCz0L7RgNC40Y4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAn0KPQtNCw0LvQuNGC0Ywg0LrQsNGC0LXQs9C+0YDQuNGOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAn0JTQvtCx0LDQstC40YLRjCDQutCw0YLQtdCz0L7RgNC40Y4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ9Cj0LTQsNC70LjRgtGMINC60LDRgtC10LPQvtGA0LjRjic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAn0JHRg9C00LXRgiDQv9C+0LrQsNC30LDQvdC+INCyIEV4cGxvcmVyINC60LDQuiDQutC+0LzQvNC10L3RgtCw0YDQuNC5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ9Cj0LrQsNC20LjRgtC1INGF0L7RgtGPINCx0Ysg0L7QtNC90YMg0LPRgNGD0L/Qv9GDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAn0JPRgNGD0L/Qv9GLINCw0LPQtdC90YLQvtCyLCDQuNC80LXRjtGJ0LjRhSDQtNC+0YHRgtGD0L8g0Log0YHRgtCw0YLRjNGP0Lwg0Y3RgtC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAn0J/QvtC00YLQstC10YDQtNC40YLQtSDRg9C00LDQu9C10L3QuNC1INGN0YLQvtC5INC60LDRgtC10LPQvtGA0LjQuCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPSAn0K3RgtGDINC60LDRgtC10LPQvtGA0LjRjiDRg9C00LDQu9GP0YLRjCDQvdC10LvRjNC30Y8hINCSINC90LXQuSDRgdC+0LTQtdGA0LbQuNGC0YHRjyDQutCw0Log0LzQuNC90LjQvNGD0Lwg0L7QtNC90LAg0YHRgtCw0YLRjNGPIEZBUSDQuC/QuNC70Lgg0L7QvdCwINGP0LLQu9GP0LXRgtGB0Y8g0YDQvtC00LjRgtC10LvRjNGB0LrQvtC5INC00LvRjyDQtNGA0YPQs9C40YUg0LrQsNGC0LXQs9C+0YDQuNC5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAn0JIg0Y3RgtC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4INC40LzQtdGO0YLRgdGPINGB0LvQtdC00YPRjtGJ0LjQtSDRgdGC0LDRgtGM0LggRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJ9Ct0YLQsCDQutCw0YLQtdCz0L7RgNC40Y8g0Y/QstC70Y/QtdGC0YHRjyDRgNC+0LTQuNGC0LXQu9GM0YHQutC+0Lkg0LTQu9GPINGB0LvQtdC00YPRjtGJ0LjRhSDQv9C+0LTRgNCw0LfQtNC10LvQvtCyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJ9Cf0L7QtNGC0LLQtdGA0LTQuNGC0LUg0YPQtNCw0LvQtdC90LjQtSDRjdGC0L7QuSDRgdGC0LDRgtGM0LggRkFRISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICdGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ0ZBUSBFeHBsb3Jlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICfQkdGL0YHRgtGA0YvQuSDQv9C+0LjRgdC6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJ9Cg0LDRgdGI0LjRgNC10L3QvdGL0Lkg0L/QvtC40YHQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yaWVzJ30gPSAn0J/QvtC00YDQsNC30LTQtdC70YsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAn0KHRgtCw0YLRjNC4IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ9Cf0L7QtNGA0LDQt9C00LXQu9GLINC90LUg0L3QsNC50LTQtdC90YsuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJ9CU0LDQvdC90YvRhSDQttGD0YDQvdCw0LvQsCBGQVEg0L3QtdGCLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDRj9C30YvQutCw0LzQuCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPSAn0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDRjdGC0YMg0YTRg9C90LrRhtC40Y4g0L/RgNC4INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4INGA0LDQsdC+0YLRiyDRgSDQvdC10YHQutC+0LvRjNC60LjQvNC4INGP0LfRi9C60LDQvNC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICfQlNC+0LHQsNCy0LjRgtGMINGP0LfRi9C6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSd9ID0gJ9Cj0LTQsNC70LjRgtGMINGP0LfRi9C6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0Y/Qt9GL0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ9CY0LfQvNC10L3QuNGC0Ywg0Y/Qt9GL0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ9Cf0L7QtNGC0LLQtdGA0LTQuNGC0LUg0YPQtNCw0LvQtdC90LjQtSDRjdGC0L7Qs9C+INGP0LfRi9C60LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9ICfQrdGC0L7RgiDRj9C30YvQuiDRg9C00LDQu9GP0YLRjCDQvdC10LvRjNC30Y8uINCd0LAg0L3RkdC8INC90LDQv9C40YHQsNC90LAg0LrQsNC6INC80LjQvdC40LzRg9C8INC+0LTQvdCwINGB0YLQsNGC0YzRjyBGQVEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAn0K3RgtC+0YIg0Y/Qt9GL0Log0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvSDQsiDRgdC70LXQtNGD0Y7RidC40YUg0YHRgtCw0YLRjNGP0YUgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn0J3QsNGB0YLRgNC+0LnQutCwINC60L7QvdGC0LXQutGB0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICfQmtC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10Lkg0L3QsCDRgdGC0YDQsNC90LjRhtGDJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ9CU0LDQvdC90YvQtSBGQVEg0L3QtSDQvdCw0LnQtNC10L3Riy4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1JbmZvJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAn0JPQvtC70L7RgdCwJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgU2VhcmNoJ30gPSAn0J/QvtC40YHQuiDQsiBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ9Ce0YbQtdC90LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcgJSd9ID0gJ9Ce0YbQtdC90LrQsCAlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAn0LjQtyA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ9Ce0YbQtdC90L7QuiDQvdC1INC90LDQudC00LXQvdC+ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAn0J7RhtC10L3QvtC6INC90LUg0L3QsNC50LTQtdC90L4hINCe0YbQtdC90LjRgtC1INGN0YLRgyDRgdGC0LDRgtGM0Y4gRkFRINC/0LXRgNCy0YvQvC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJ9Ch0LrQsNGH0LDRgtGMINCy0LvQvtC20LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPSAn0J3QsNGB0LrQvtC70YzQutC+INCx0YvQu9CwINC/0L7Qu9C10LfQvdCwINGN0YLQsCDRgdGC0LDRgtGM0Y8/INCf0L7QttCw0LvRg9C50YHRgtCwLCDQvtGG0LXQvdC40YLQtSDQtdGRLCDRh9GC0L7QsdGLINC80Ysg0LzQvtCz0LvQuCDRg9C70YPRh9GI0LjRgtGMINCx0LDQt9GDIEZBUS4g0KHQv9Cw0YHQuNCx0L4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAn0LHQtdGB0L/QvtC70LXQt9C90LDRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICfQvtGH0LXQvdGMINC/0L7Qu9C10LfQvdCw0Y8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICfQktGB0YLQsNCy0LjRgtGMINGC0LXQutGB0YIgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ9CS0YHRgtCw0LLQuNGC0Ywg0YHRgdGL0LvQutGDINC90LAgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCAmIExpbmsnfSA9ICfQktGB0YLQsNCy0LjRgtGMINGC0LXQutGB0YIgRkFRINC4INGB0YHRi9C70LrRgyc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ9Ch0YLQsNGC0YzQuCBGQVEg0L3QtSDQvdCw0LnQtNC10L3Riy4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICfQn9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C5INC/0L7QuNGB0Log0LIg0YHRgtCw0YLRjNGP0YUgRkFRICjQvdCw0L/RgNC40LzQtdGALCAi0LDQstGC0L7QvCrQutC4IiDQuNC70LggItCc0L7RgdC6KiIpJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbgoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAn0J/QvtC00YDQvtCx0L3QtdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAn0J/QvtC40YHQuiDRgdGC0LDRgtC10Lkg0L/QviDQutC70Y7Rh9C10LLQvtC80YMg0YHQu9C+0LLRgyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRRXhwbG9yZXIKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljJ30gPSAn0J7QsdGJ0LXQtNC+0YHRgtGD0L/QvdC+0LUnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFab29tCgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICdFaW4gRmlsdGVyIHp1ciBhdXRvbWF0aXNjaGVuIEdlbmVyaWVydW5nIHZvbiBGQVEtTGlua3MsIHdlbm4gZWluIEhpbndlaXMgYXVmIGVpbmVuIEZBUS1BcnRpa2VsIGlkZW50aWZpemllcnQgd2lyZC4gRGFzIEVsZW1lbnQgSW1hZ2UgZXJsYXVidCB6d2VpIEVpbmdhYmVmb3JtZW46IEVyc3RlbnMgZGVyIE5hbWUgZWluZXMgSWNvbnMgKHouIEIuIGZhcS5wbmcpLiBJbiBkaWVzZW0gRmFsbCB3aXJkIGF1ZiBkYXMgR3JhZmlrLVZlcnplaWNobmlzIGRlcyBPVFJTIHp1Z2VncmlmZmVuLiBBbHMgendlaXRlIE3RhmdsaWNoa2VpdCBrYW5uIG1hbiBhYmVyIGF1Y2ggZGVuIGRpcmVrdGVuIExpbmsgenVyIEdyYWZpayBhbmdlYmVuICh6LiBCLiBodHRwOi8vb3Rycy5vcmcvZmFxLnBuZykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ1NTLUZhcmJlIGbRjHIgZGFzIEJld2VydHVuZ3MtRXJnZWJuaXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQutCw0YLQtdCz0L7RgNC40Y/QvNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAn0J3QsNC30LLQsNC90LjQtSDQutCw0YLQtdCz0L7RgNC40Lgg0L/Qvi3Rg9C80L7Qu9GH0LDQvdC40Y4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS4nfSA9ICfQr9C30YvQuiDRgdGC0LDRgtC10LkgRkFRINC/0L4t0YPQvNC+0LvRh9Cw0L3QuNGOINCyINC+0LTQvdC+0Y/Qt9GL0YfQvdC+0Lwg0YDQtdC20LjQvNC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAn0J/RgNC40L7RgNC40YLQtdGCINC30LDRj9Cy0L7QuiDQvdCwINC+0LTQvtCx0YDQtdC90LjQtSDRgdGC0LDRgtC10LkgRkFRINC/0L4t0YPQvNC+0LvRh9Cw0L3QuNGOLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAn0KHRgtCw0YLRg9GBINC30LDQv9C40YHQuCBGQVEg0L/Qvi3Rg9C80L7Qu9GH0LDQvdC40Y4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICfQodGC0LDRgtGD0YEg0LfQsNGP0LLQvtC6INC90LAg0L7QtNC+0LHRgNC10L3QuNC1INGB0YLQsNGC0LXQuSBGQVEg0L/Qvi3Rg9C80L7Qu9GH0LDQvdC40Y4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAn0JfQvdCw0YfQtdC90LjQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQv9Cw0YDQsNC80LXRgtGA0LAgQWN0aW9uINC00LvRjyDQvtCx0YnQtdC00L7RgdGC0YPQv9C90L7Qs9C+INGE0YDQvtC90YLQtdC90LTQsC4g0J/QsNGA0LDQvNC10YLRgCBBY3Rpb24g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINCyINGB0LrRgNC40L/RgtCw0YUg0YHQuNGB0YLQtdC80YsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ9Cj0LrQsNC20LjRgtC1INGB0YLQsNC90LTQsNGA0YLQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQsNGC0YDQuNCx0YPRgtCwIEZBUSDQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60Lgg0YDQtdC30YPQu9GM0YLQsNGC0L7QsiDQv9C+0LjRgdC60LAg0LIgRkFRINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICfQo9C60LDQttC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LDRgtGA0LjQsdGD0YLQsCBGQVEg0LTQu9GPINGB0L7RgNGC0LjRgNC+0LLQutC4INGA0LXQt9GD0LvRjNGC0LDRgtC+0LIg0L/QvtC40YHQutCwINCyIEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQutC70LjQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAn0KPQutCw0LbQuNGC0LUg0YHRgtCw0L3QtNCw0YDRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1INCw0YLRgNC40LHRg9GC0LAg0YHQvtGA0YLQuNGA0L7QstC60Lgg0YDQtdC30YPQu9GM0YLQsNGC0LAg0L/QvtC40YHQutCwINCyINC+0LHRidC10LTQvtGB0YLRg9C/0L3QvtC8INC40L3RgtC10YDRhNC10LnRgdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICfQo9C60LDQttC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LDRgtGA0LjQsdGD0YLQsCDRgdC+0YDRgtC40YDQvtCy0LrQuCDQsiBGQVEgRXhwbG9yZXJlINC40L3RgtC10YDRhNC10LnRgdCwINCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAn0KPQutCw0LbQuNGC0LUg0YHRgtCw0L3QtNCw0YDRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1INCw0YLRgNC40LHRg9GC0LAg0YHQvtGA0YLQuNGA0L7QstC60Lgg0LIgRkFRIEV4cGxvcmVyZSDQuNC90YLQtdGA0YTQtdC50YHQsCDQutC70LjQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ9Cj0LrQsNC20LjRgtC1INGB0YLQsNC90LTQsNGA0YLQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQsNGC0YDQuNCx0YPRgtCwINGB0L7RgNGC0LjRgNC+0LLQutC4INCyIEZBUSBFeHBsb3JlcmUg0LIg0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdC+0LwgINC40L3RgtC10YDRhNC10LnRgdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICfQo9C60LDQttC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgNGP0LTQvtC6INCyINGA0LXQt9GD0LvRjNGC0LDRgtCw0YUgRkFRIEV4cGxvcmVyINC40L3RgtC10YDRhNC10LnRgdCwINCw0LPQtdC90YLQsC4gVXA6INC/0L7Qt9C00L3QtdC1INC90LDQstC10YDRhdGDLiBEb3duOiDQvdC+0LLQvtC1INC90LDQstC10YDRhdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICfQo9C60LDQttC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgNGP0LTQvtC6INCyINGA0LXQt9GD0LvRjNGC0LDRgtCw0YUgRkFRIEV4cGxvcmVyINC40L3RgtC10YDRhNC10LnRgdCwINC60LvQuNC10L3RgtCwLiBVcDog0L/QvtC30LTQvdC10LUg0L3QsNCy0LXRgNGF0YMuIERvd246INC90L7QstC+0LUg0L3QsNCy0LXRgNGF0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICfQo9C60LDQttC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgNGP0LTQvtC6INCyINGA0LXQt9GD0LvRjNGC0LDRgtCw0YUgRkFRIEV4cGxvcmVyINCyINC+0LHRidC10LTQvtGB0YLRg9C/0L3QvtC8INC40L3RgtC10YDRhNC10LnRgdC1LiBVcDog0L/QvtC30LTQvdC10LUg0L3QsNCy0LXRgNGF0YMuIERvd246INC90L7QstC+0LUg0L3QsNCy0LXRgNGF0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ9Cj0LTQsNC70LjRgtGMINGN0YLQvtGCIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAn0JjQt9C80LXQvdC40YLRjCDRjdGC0L7RgiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ9Cg0LDQt9GA0LXRiNC40YLRjCDQvNC90L7Qs9C+0Y/Qt9GL0YfQvdC+0YHRgtGMINCyINC80L7QtNGD0LvQtSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAn0KDQsNC30YDQtdGI0LjRgtGMINGE0YPQvdC60YbQuNGOINC+0YbQtdC90LrQuCDQsiDQvNC+0LTRg9C70LUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ9CW0YPRgNC90LDQuyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgcGF0aCBzZXBhcmF0b3IuJ30gPSAn0KDQsNC30LTQtdC70LjRgtC10LvRjCDQv9GD0YLQuCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ9CT0YDRg9C/0L/QsCDQtNC70Y8g0L7QtNC+0LHRgNC10L3QuNGPINGB0YLQsNGC0LXQuSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICfQmNGB0YLQvtGA0LjRjyDRjdGC0L7Qs9C+IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICfQmNC90YLQtdGA0YTQtdC50YHRiywg0LIg0LrQvtGC0L7RgNGL0YUg0L/QvtC60LDQt9GL0LLQsNC10YLRgdGPINCx0YvRgdGC0YDRi9C5INC/0L7QuNGB0LouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICfQltGD0YDQvdCw0LsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INGP0LfRi9C60LDQvNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdla2V5IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGUgKl9GQVEucG0uJ30gPSAn0JrQu9GO0Ycg0Y/Qt9GL0LrQsCwg0YPQutCw0LfQsNC90L3Ri9C5INCyINGP0LfRi9C60L7QstC+0Lwg0YTQsNC50LvQtSAqX0ZBUS5wbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAn0J/RgNC40LLRj9C30LDRgtGMINC00YDRg9Cz0L7QuSDQvtCx0YrQtdC60YIg0Log0Y3RgtC+0LzRgyDRjdC70LXQvNC10L3RgtGDIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAn0JzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0LLRi9Cy0L7QtNC40LzQvtC1INCyIEZBUSBFeHBsb3JlciDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICfQnNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtCw0YLQtdC5LCDQstGL0LLQvtC00LjQvNC+0LUg0LIgRkFRIEV4cGxvcmVyINCyINC40L3RgtC10YDRhNC10LnRgdC1INC60LvQuNC10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10LksINCy0YvQstC+0LTQuNC80L7QtSDQsiBGQVEgRXhwbG9yZXIg0LIg0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdC+0Lwg0LjQvdGC0LXRgNGE0LXQudGB0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAn0JzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0LLRi9Cy0L7QtNC40LzRi9GFINCyINC20YPRgNC90LDQu9C1IEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10LksINCy0YvQstC+0LTQuNC80YvRhSDQsiDRgNC10LfRg9C70YzRgtCw0YLQtSDQv9C+0LjRgdC60LAg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICfQnNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtCw0YLQtdC5LCDQstGL0LLQvtC00LjQvNGL0YUg0LIg0YDQtdC30YPQu9GM0YLQsNGC0LUg0L/QvtC40YHQutCwINCyINC40L3RgtC10YDRhNC10LnRgdC1INC60LvQuNC10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAn0JzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0LLRi9Cy0L7QtNC40LzRi9GFINCyINGA0LXQt9GD0LvRjNGC0LDRgtC1INC/0L7QuNGB0LrQsCDQsiDQvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QvCDQuNC90YLQtdGA0YTQtdC50YHQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICfQndC+0LLQsNGPINGB0YLQsNGC0YzRjyDQsiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAn0J3QvtCy0LDRjyDRgdGC0LDRgtGM0Y8gRkFRINC/0LXRgNC10LQg0L/Rg9Cx0LvQuNC60LDRhtC40LXQuSDRgtGA0LXQsdGD0LXRgiDQvtC00L7QsdGA0LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICfQmtC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10LksINCy0YvQstC+0LTQuNC80YvRhSDQsiBGQVEgRXhwbG9yZXIg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LrQu9C40LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAn0JrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtCw0YLQtdC5LCDQstGL0LLQvtC00LjQvNGL0YUg0LIgRkFRIEV4cGxvcmVyINCyINC+0LHRidC10LTQvtGB0YLRg9C/0L3QvtC8INC40L3RgtC10YDRhNC10LnRgdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAn0JrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtCw0YLQtdC5LCDQstGL0LLQvtC00LjQvNGL0YUg0L3QsCDQutCw0LbQtNC+0Lkg0YHRgtGA0LDQvdC40YbQtSDRgNC10LfRg9C70YzRgtCw0YLQsCDQv9C+0LjRgdC60LAg0LIgINC40L3RgtC10YDRhNC10LnRgdC1INC60LvQuNC10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0LLRi9Cy0L7QtNC40LzRi9GFINC90LAg0LrQsNC20LTQvtC5INGB0YLRgNCw0L3QuNGG0LUg0YDQtdC30YPQu9GM0YLQsNGC0LAg0L/QvtC40YHQutCwINCyINC+0LHRidC10LTQvtGB0YLRg9C/0L3QvtC8INC40L3RgtC10YDRhNC10LnRgdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjaGFuZ2VzLid9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INC+0YLQvtCx0YDQsNC20LDQtdC80YvRhSDQv9C+0LfQuNGG0LjQuSDQsiDQv9C+0YHQu9C10LTQvdC40YUg0LjQt9C80LXQvdC10L3QuNGP0YUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAn0JrQvtC70LjRh9C10YHRgtCy0L4g0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINC/0L7Qt9C40YbQuNC5INCyINC90L7QstGL0YUg0YHRgtCw0YLRjNGP0YUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAn0JrQvtC70LjRh9C10YHRgtCy0L4g0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINC/0L7Qt9C40YbQuNC5INCyINGE0YPQvdC60YbQuNC4IFRvcCAxMC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ9Cf0LXRh9Cw0YLRjCDRjdGC0L7Qs9C+IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICfQntGH0LXRgNC10LTRjCDQvdCwINC+0LTQvtCx0YDQtdC90LjQtSDRgdGC0LDRgtC10LkgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAn0J/QvtC40YHQuiDQsiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ9Cf0L7QutCw0LfRi9Cy0LDRgtGMINGB0YLQsNGC0YzRjiBGQVEg0LIgSFRNTC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAn0J/QvtC60LDQt9GL0LLQsNGC0Ywg0L/Rg9GC0YwgRkFRINC00LAv0L3QtdGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFdZU0lXWUcgZWRpdG9yIGluIGFnZW50IGludGVyZmFjZS4nfSA9ICfQn9C+0LrQsNC30YvQstCw0YLRjCBXWVNJV1lHINGA0LXQtNCw0LrRgtC+0YAg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAn0J/QvtC60LDQt9GL0LLQsNGC0Ywg0YHQvtC00LXRgNC20LjQvNC+0LUg0L/QvtC00YDQsNC30LTQtdC70L7Qsi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn0J/QvtC60LDQt9GL0LLQsNGC0Ywg0L/QvtGB0LvQtdC00L3QuNC1INC40LfQvNC10L3QtdC90LjRjyDQsiDRg9C60LDQt9Cw0L3Ri9GFINC40L3RgtC10YDRhNC10LnRgdCw0YUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICfQn9C+0LrQsNC30YvQstCw0YLRjCDQvdC+0LLRi9C1INC/0YPQvdC60YLRiyDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0LjQvdGC0LXRgNGE0LXQudGB0LDRhS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ9Cf0L7QutCw0LfRi9Cy0LDRgtGMIFRvcCAxMCDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0LjQvdGC0LXRgNGE0LXQudGB0LDRhS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ9Cf0L7QutCw0LfRi9Cy0LDRgtGMINC+0YbQtdC90LrRgyDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0LjQvdGC0LXRgNGE0LXQudGB0LDRhS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9ICfQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCBGQVEsINC90LDQv9GA0LjQvNC10YAsIEZBUSMsIEtCIywgTXlGQVEjLiDQn9C+INGD0LzQvtC70YfQsNC90LjRjiAtIEZBUSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICfQotC10LvQviDQt9Cw0Y/QstC60Lgg0L3QsCDQvtC00L7QsdGA0LXQvdC40LUg0YHRgtCw0YLRjNC4IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ9Ci0LXQvNCwINC30LDRj9Cy0LrQuCDQvdCwINC+0LTQvtCx0YDQtdC90LjQtSDRgdGC0LDRgtGM0LggRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBleHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBFeHBsb3JlciByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZTogJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBleHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBUZXh0ICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgVGV4dCIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6dWtfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ9Ce0YHRgtCw0L3QvdGPINC30LzRltC90LXQvdCwINGB0YLQsNGC0YLRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICfQntGB0YLQsNC90L3RjyDRgdGC0LLQvtGA0LXQvdCwINGB0YLQsNGC0YLRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAn0KLQvtC/IDEwINGB0YLQsNGC0YLQtdC5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAn0J/RltC00LrQsNGC0LXQs9C+0YDRltGXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAn0J3QtdC80LDRlCDQvtCx0YDQsNC90L7RlyDQutCw0YLQtdCz0L7RgNGW0ZchJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAn0J/QvtGH0LDRgtC+0Log0LTQvtCx0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICfQn9C+0YfQsNGC0L7QuiDQvNGW0YHRj9GG0Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ9Cf0L7Rh9Cw0YLQvtC6INGA0L7QutGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICfQmtGW0L3QtdGG0Ywg0LTQvdGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBtb250aCd9ID0gJ9Ca0ZbQvdC10YbRjCDQvNGW0YHRj9GG0Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICfQmtGW0L3QtdGG0Ywg0YDQvtC60YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAn0JTRj9C60YPRlNC80L4sINC30LAg0YLQtSwg0YnQviDQv9GA0L7Qs9C+0LvQvtGB0YPQstCw0LvQuCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICfQktC4INCy0LbQtSDQs9C+0LvQvtGB0YPQstCw0LvQuCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAn0KPRgtC+0YfQvdC40YLRjCDRgdC80YvRgdC7INC4INC40LfQvNC10L3QuNGC0YwoQXBwcm92YWwpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUNhdGVnb3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICfQkdGD0LTQtSDQv9C+0LrQsNC30LDQvdC+LCDRj9C6INC60L7QvNC10L3RgtCw0YAg0YMg0J/RgNC+0LLRltC00L3QuNC60YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBncm91cC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ9CR0LDQt9CwINC30L3QsNC90YwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgTGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBsYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgZGF0YSBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAn0JPQvtC70L7RgdGW0LInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcgJSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvdXQgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBMaW5rJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCAmIExpbmsnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUUV4cGxvcmVyCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRUHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVpvb20KCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHlvdXIgb3duIGxvZyB0ZXh0IGZvciBQR1AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbSB0ZXh0IGZvciB0aGUgcGFnZSBzaG93biB0byBjdXN0b21lcnMgdGhhdCBoYXZlIG5vIHRpY2tldHMgeWV0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4gTm90ZTogQWdlbnRUaWNrZXRBY3Rpb25Db21tb24gaW5jbHVkZXMgQWdlbnRUaWNrZXROb3RlLCBBZ2VudFRpY2tldENsb3NlLCBBZ2VudFRpY2tldEZyZWVUZXh0LCBBZ2VudFRpY2tldE93bmVyLCBBZ2VudFRpY2tldFBlbmRpbmcsIEFnZW50VGlja2V0UHJpb3JpdHkgYW5kIEFnZW50VGlja2V0UmVzcG9uc2libGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgbXVsdGlwbGUgbGFuZ3VhZ2VzIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHBhdGggc2VwYXJhdG9yLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAn0JHQsNC30LAg0LfQvdCw0L3RjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWdub3JlIGFydGljbGUgd2l0aCBzeXN0ZW0gc2VuZGVyIHR5cGUgZm9yIG5ldyBhcnRpY2xlIGZlYXR1cmUgKGUuIGcuIGF1dG8gcmVzcG9uc2VzIG9yIGVtYWlsIG5vdGlmaWNhdGlvbnMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdla2V5IHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGUgKl9GQVEucG0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAn0L3QvtCy0LAg0YHRgtCw0YLRgtGPINCR0JcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjcmVhdGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGlzIHRvIHllcyBpZiB5b3UgdHJ1c3QgaW4gYWxsIHlvdXIgcHVibGljIGFuZCBwcml2YXRlIHBncCBrZXlzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBjZXJ0aWZpZWQgd2l0aCBhIHRydXN0ZWQgc2lnbmF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFdZU0lXWUcgZWRpdG9yIGluIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdm90aW5nIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgdXNlIGNvbXBsZXRlIGRlc2NyaXB0aW9uIChkYXlzLCBob3VycywgbWludXRlcyksIGlmIHNldCB0byAiWWVzIjsgb3IganVzdCBmaXJzdCBsZXR0ZXIgKGQsIGgsIG0pLCBpZiBzZXQgdG8gIk5vIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG1lc3NhZ2Ugc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuIE5PVEUuIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgdGhlc2UgZmllbGRzIGFsc28gaW4gdGhlIHRpY2tldCB6b29tIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UsIHlvdSBoYXZlIHRvIGVuYWJsZSB0aGVtIGluIEN1c3RvbWVyVGlja2V0Wm9vbSMjI0F0dHJpYnV0ZXNWaWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB3aGljaCBjYW4gYWNjZXNzIHRoaXMgY2F0ZWdvcnkuJ30gPSAn0JLQuNC00ZbQu9GW0YLRjCDQs9GA0YPQv9C4LCDRj9C60LjRliDQvNC+0LbRg9GC0Ywg0L7RgtGA0LjQvNCw0YLQuCDQtNC+0YHRgtGD0L8g0LTQviDQutCw0YLQtdCz0L7RgNGW0ZcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcmllcyd9ID0gJ9Ca0LDRgtC10LPQvtGA0ZbRlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxTZWFyY2gnfSA9ICfQlNC10YLQsNC70ZbQt9C+0LLQsNC90LjQuSDQv9C+0YjRg9C6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAn0J/RgNC+0LLRltC00L3QuNC6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSd9ID0gJ9Ca0LDRgtC10LPQvtGA0ZbRlyDQkdCXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOZXdzIChUb3AgMTApJ30gPSAn0J3QvtCy0LjQvdC4INCR0Jco0KLQntCfIDEwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTmV3cyAobmV3IGNyZWF0ZWQpJ30gPSAn0J3QvtCy0LjQvdC4INCR0Jco0L3QvtCy0ZYg0YHRgtCw0YLRgtGWKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTmV3cyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICfQndC+0LLQuNC90Lgg0JHQlyjQvdC10LTQsNCy0L3QviDQt9C80ZbQvdC10L3RliknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY2F0ZWdvcnkgYWNjZXNzaWJsZS4gVG8gY3JlYXRlIGFuIGFydGljbGUgeW91IG5lZWQgYWNjZXNzIHRvIGF0IGxlYXN0IG9uZSBjYXRlZ29yeS4gUGxlYXNlIGNoZWNrIHlvdXIgZ3JvdXAvY2F0ZWdvcnkgcGVybWlzc2lvbiB1bmRlciAtY2F0ZWdvcnkgbWVudS0hJ30gPSAn0J3QtdC80LDRlCDQtNC+0YHRgtGD0L/QvdC40YUg0LrQsNGC0LXQs9C+0YDRltC5LiDQqdC+0LEg0YHRgtCy0L7RgNC40YLQuCDRgdGC0LDRgtGC0Y4g0LLQsNC8INC90LXQvtCx0YXRltC00L3QviDQvtC00LXRgNC20LDRgtC4INC00L7RgdGC0YPQvywg0L/RgNC40L3QsNC50LzQvdGWINC00L4g0L7QtNC90ZbQuSDQutCw0YLQtdCz0L7RgNGW0ZcuINCR0YPQtNGMINC70LDRgdC60LAsINC/0LXRgNC10LLRltGA0YLQtSDQstCw0YjRgyDQs9GA0YPQv9GDL9C60LDRgtC10LPQvtGA0ZbRjiDQtNC+0YHRgtGD0L/RgyDQtNC70Y8gLdC60LDRgtC10LPQvtGA0ZbRlyDQvNC10L3Rji0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrU2VhcmNoJ30gPSAn0KjQstC40LTQutC40Lkg0L/QvtGI0YPQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJDYXRlZ29yaWVzJ30gPSAn0J/RltC00LrQsNGC0LXQs9C+0YDRltGXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J9CX0LTRgNCw0YHRgtGD0LnRgtC1J30gPSAn0JLRltGC0LDRlNC80L4nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfQ05fRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAn5YaF6YOoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ+WFrOW8gCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ+WklumDqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ+acgOi/keS/ruaUueeahOaWh+eroCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICfmnIDmlrDliJvlu7rnmoTmlofnq6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ+acgOW4uOeUqOeahOaWh+eroCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ+WtkOebruW9leS6jic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ+ayoeaciemAieaLqeivhOWIhiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICflvIDlp4vml6XmnJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICflvIDlp4vmnIjku70nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ+W8gOWni+W5tOS7vSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAn57uT5p2f5pel5pyfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBtb250aCd9ID0gJ+W8gOWni+aciOS7vSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ+e7k+adn+W5tOS7vSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICfmhJ/osKLmgqjnmoTor4TliIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICfmgqjlt7Lnu4/or4TliIYhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJ0ZBUSDmm7TmlrAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdGQVEg5pu05pawKOaWsOWIm+W7uiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJ0ZBUSDmm7TmlrAo5pyA6L+R5pu05pS5KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdGQVEg55uu5b2V5bey5pu05pawISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgYWRkZWQhJ30gPSAnRkFRIOebruW9leW3suWinuWKoCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAn55uu5b2V5bqU6K+l6KaB5pyJ5LiA5Liq5ZCN56ewISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdGQVEg6K+t6KiA5bey57uP5aKe5YqgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICdGQVEg6K+t6KiA5bey57uP5pu05pawISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICflv4XpobvopoHmnInkuIDkuKror63oqIDlkI3np7AhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJ30gPSAn6K+l6K+t6KiA5bey57uP5a2Y5ZyoISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ+WinuWKoCBGQVEg5paH56ugJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAn55uu5b2V5piv5b+F6aG755qELic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZhbCd9ID0gJ+iupOWPr+W6pic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdGQVEg55uu5b2V566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICfliKDpmaTnm67lvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAn5aKe5Yqg55uu5b2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICfnvJbovpHnm67lvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ+azqOmHiuWwhua1j+iniOaXtuaYvuekui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBncm91cC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAn55yf55qE6KaB5Yig6Zmk6K+lIEZBUSDmlofnq6DlkJc/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRkFRIOa1j+iniOWZqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICflrZDnm67lvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAn5rKh5pyJ5om+5Yiw5a2Q55uu5b2VLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnRkFRIOivreiogOeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSd9ID0gJ+WIoOmZpOivreiogCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICflop7liqDor63oqIAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ+e8lui+keivreiogCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ+ayoeacieaJvuWIsCBGQVEg5pWw5o2uLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZXMnfSA9ICfor4TliIYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludAoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnRkFRIOivpue7huS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcnfSA9ICfor4TliIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICfotoXov4fkupTmmJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAn5rKh5pyJ5om+5Yiw6K+E5YiGISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAn5rKh5pyJ5om+5Yiw6K+E5YiGISDov5nlsIbmmK/or6UgRkFRIOaWh+eroOeahOesrOS4gOS4quivhOWIhi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICfmsqHmnInluK7liqknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAn5b6I5pyJ5biu5YqpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbgoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFNob3J0CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAn6K+m57uGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFFeHBsb3JlcgoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFab29tCgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG1lc3NhZ2Ugc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuIE5PVEUuIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgdGhlc2UgZmllbGRzIGFsc28gaW4gdGhlIHRpY2tldCB6b29tIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UsIHlvdSBoYXZlIHRvIGVuYWJsZSB0aGVtIGluIEN1c3RvbWVyVGlja2V0Wm9vbSMjI0F0dHJpYnV0ZXNWaWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDU1MgY29sb3IgZm9yIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZSB5b3VyIG93biBsb2cgdGV4dCBmb3IgUEdQLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b20gdGV4dCBmb3IgdGhlIHBhZ2Ugc2hvd24gdG8gY3VzdG9tZXJzIHRoYXQgaGF2ZSBubyB0aWNrZXRzIHlldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAn5Lul5Y2B5YiG5Yi25pi+56S66K+E5YiG57uT5p6cLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAn6buY6K6k55qE55uu5b2V5ZCNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdGQVEg5paH56ug5om55YeG6K+35rGC55qEIFRpY2tldCDnmoTkvJjlhYjnuqcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICfpu5jorqTnmoQgRkFRIOe7n+iuoeadoeebri4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0ZBUSDmlofnq6Dmibnlh4bor7fmsYLnmoQgVGlja2V0IOeahOm7mOiupOeKtuaAgS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLiBOb3RlOiBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBpbmNsdWRlcyBBZ2VudFRpY2tldE5vdGUsIEFnZW50VGlja2V0Q2xvc2UsIEFnZW50VGlja2V0RnJlZVRleHQsIEFnZW50VGlja2V0T3duZXIsIEFnZW50VGlja2V0UGVuZGluZywgQWdlbnRUaWNrZXRQcmlvcml0eSBhbmQgQWdlbnRUaWNrZXRSZXNwb25zaWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAn5a6a5LmJIEZBUSDpobnnm67nmoTkuI3lj5fpmZDmloflrZflrZfmrrUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ+WIoOmZpCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAn57yW6L6RJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdGQVEg5pel5b+XJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHBhdGggc2VwYXJhdG9yLid9ID0gJ0ZBUSDot6/lvoTliIbpmpTnrKYuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ+aJueWHhiBGQVEg5paH56ug6K+35rGC55qE576k57uELic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAn5Y6G5Y+yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lnbm9yZSBhcnRpY2xlIHdpdGggc3lzdGVtIHNlbmRlciB0eXBlIGZvciBuZXcgYXJ0aWNsZSBmZWF0dXJlIChlLiBnLiBhdXRvIHJlc3BvbnNlcyBvciBlbWFpbCBub3RpZmljYXRpb25zKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWlja3NlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAn5Zyo5LuL6Z2i55qE6YKj6YeM5pi+56S65b+r6YCf5pCc57SiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2VrZXkgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZSAqX0ZBUS5wbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAn6ZO+5o6lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICfmt7vliqDmlrDmlofnq6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAn5paw55qEIEZBUSDmlofnq6DlnKjlj5HluIPliY3pnIDopoHmibnlh4YuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjaGFuZ2VzLid9ID0gJ+aYvuekuuacgOi/keabtOaUuemhueebrueahOaVsOmHjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICfmmL7npLrmnIDmlrDliJvlu7rpobnnm67nmoTmlbDph48uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAn5pi+56S654K55Ye76YeP5YmN5Y2B5L2N6aG555uu55qE5pWw6YePLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAn5omT5Y2wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ+aJueWHhiBGQVEg5paH56ug6K+35rGC55qE6Zif5YiXLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJ+WlveivhOeOhywg6ZSu5YC85b+F6aG75Zyo55m+5YiG5q+U5Lul5YaFLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGlzIHRvIHllcyBpZiB5b3UgdHJ1c3QgaW4gYWxsIHlvdXIgcHVibGljIGFuZCBwcml2YXRlIHBncCBrZXlzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBjZXJ0aWZpZWQgd2l0aCBhIHRydXN0ZWQgc2lnbmF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJ+aYry/lkKbmmL7npLogRkFRIOi3r+W+hC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBXWVNJV1lHIGVkaXRvciBpbiBhZ2VudCBpbnRlcmZhY2UuJ30gPSAn5Zyo5pyN5Yqh5Lq65ZGY5LuL6Z2i5pi+56S6IFdZU0lXWUco5omA6KeB5Y2z5omA5b6XKee8lui+keWZqC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLid9ID0gJ+aYvuekuuWtkOebruW9leeahOaVsOmHjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn5Zyo5LuL6Z2i5LiK5pi+56S65pyA6L+R5pu05pS555qE6aG555uuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn5Zyo5LuL6Z2i5LiK5pi+56S65pyA5paw5Yib5bu655qE6aG555uuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn5Zyo5LuL6Z2i5LiK5pi+56S654K55Ye76YeP5YmN5Y2B5L2NLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn5a6a5LmJ5pi+56S66K+E5YiG55qE5LuL6Z2iLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGltZSB1c2UgY29tcGxldGUgZGVzY3JpcHRpb24gKGRheXMsIGhvdXJzLCBtaW51dGVzKSwgaWYgc2V0IHRvICJZZXMiOyBvciBqdXN0IGZpcnN0IGxldHRlciAoZCwgaCwgbSksIGlmIHNldCB0byAiTm8iLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPSAnRkFRIOeahOagh+ivhuespiwg5L6L5aaCICjluLjop4Hpl67popgpRkFRIywgKOefpeivhuW6kylLQiMsIOm7mOiupOS4uiBGQVEjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdGQVEg5paH56ug5om55YeG6K+35rGC55qEIFRpY2tldCDlhoXlrrkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG1lc3NhZ2Ugc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuIE5PVEUuIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgdGhlc2UgZmllbGRzIGFsc28gaW4gdGhlIHRpY2tldCB6b29tIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UsIHlvdSBoYXZlIHRvIGVuYWJsZSB0aGVtIGluIEN1c3RvbWVyVGlja2V0Wm9vbSMjI0F0dHJpYnV0ZXNWaWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0ZBUSDmlofnq6Dmibnlh4bor7fmsYLnmoQgVGlja2V0IOS4u+mimC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgVGltZSBUbyBMZWF2ZSBmb3IgRkFRIGl0ZW1zLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IG5lZWRzIGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwISd9ID0gJ+iHs+WwkeimgeaMh+WumuS4gOS4que+pOe7hOWvueivpeebruW9leaLpeacieadg+mZkCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIGNvbW1lbnQhJ30gPSAn55uu5b2V5bqU6K+l6KaB5pyJ5LiA5Liq5rOo6YeKISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgd2hpY2ggY2FuIGFjY2VzcyB0aGlzIGNhdGVnb3J5Lid9ID0gJ+WTquS4gOS4que+pOe7hOWPr+S7peiuv+mXruatpOebruW9lS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZXMnfSA9ICfmlofnq6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIGZsYWcuJ30gPSAn6K+E5YiG5qCH6K6w55qEIENTUyDpopzoibIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3JpZXMnfSA9ICfnm67lvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsU2VhcmNoJ30gPSAn6auY57qn5pCc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBDYXRlZ29yeT8nfSA9ICfnnJ/nmoTopoHliKDpmaTor6Xnm67lvZXlkJc/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBMYW5ndWFnZT8nfSA9ICfnnJ/nmoTopoHliKDpmaTor6Xor63oqIDlkJc/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAn5rWP6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSd9ID0gJ0ZBUSDnm67lvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY2F0ZWdvcnkgYWNjZXNzaWJsZS4gVG8gY3JlYXRlIGFuIGFydGljbGUgeW91IG5lZWQgYWNjZXNzIHRvIGF0IGxlYXN0IG9uZSBjYXRlZ29yeS4gUGxlYXNlIGNoZWNrIHlvdXIgZ3JvdXAvY2F0ZWdvcnkgcGVybWlzc2lvbiB1bmRlciAtY2F0ZWdvcnkgbWVudS0hJ30gPSAn5rKh5pyJ5b2S57G75Yiw55uu5b2VLiDopoHliJvlu7rkuIDnr4fmlofnq6DpnIDopoHlvZLnsbvliLDnm67lvZXph4wsIOivt+WcqCAt55uu5b2V6I+c5Y2VLSDph4zpgInmi6nmgqjmnInmnYPpmZDliJvlu7rmlofnq6DnmoTnm67lvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViQ2F0ZWdvcmllcyd9ID0gJ+WtkOebruW9lSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGl0bGUgaXMgcmVxdWlyZWQuJ30gPSAn5qCH6aKY5piv5b+F6aG755qELic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIENhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIFN1YkNhdGVnb3JpZXMnfSA9ICfor6Xnm67lvZXmmK/ku6XkuIvlrZDnm67lvZXnmoTniLbnm67lvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBDYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljZShzKSd9ID0gJ+ivpeebruW9leato+iiq+S7peS4i+eahCBGQVEg5paH56ug5omA5L2/55SoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgTGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAn6K+l6K+t6KiA5q2j6KKr5Lul5LiL55qEIEZBUSDmlofnq6DmiYDkvb/nlKgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyEnfSA9ICfor6Xnm67lvZXlt7Lnu4/lnKjlrZjlnKghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VwZGF0ZWQnfSA9ICfmm7TmlrAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgQ2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBBcnRpY2xlISBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IGFub3RoZXIgQ2F0ZWdvcnknfSA9ICfkuI3og73liKDpmaTor6Xnm67lvZUuIOWug+iHs+Wwkei/mOiiq+S4gOevhyBGQVEg5paH56ug5omA5L2/55SoIOW5ti/miJYg5a6D5piv5YW25Lit55uu5b2V55qE54i255uu5b2VISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBMYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIEFydGljbGUhJ30gPSAn5LiN6IO95Yig6Zmk6K+l6K+t6KiALiDlroPoh7PlsJHov5jooqvkuIDnr4cgRkFRIOaWh+eroOaJgOS9v+eUqCEnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUFkZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwp1c2UgS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQ7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgYWxsIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IENvbmZpZ09iamVjdCBMb2dPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntVcGxvYWRDYWNoZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1ZhbGlkT2JqZWN0fSAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpWYWxpZC0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpIHx8ICcnOwoKICAgICMgZ2V0IGZvcm0gaWQKICAgICRTZWxmLT57Rm9ybUlEfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1JRCcgKTsKCiAgICAjIGNyZWF0ZSBmb3JtIGlkCiAgICBpZiAoICEkU2VsZi0+e0Zvcm1JRH0gKSB7CiAgICAgICAgJFNlbGYtPntGb3JtSUR9ID0gJFNlbGYtPntVcGxvYWRDYWNoZU9iamVjdH0tPkZvcm1JRENyZWF0ZSgpOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICAkU2VsZi0+e0ludGVyZmFjZX0gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2ludGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QWdlbnQ6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSd30gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBydyBwZXJtaXNzaW9uIScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbWV0ZXJzCiAgICBteSAlR2V0UGFyYW07CiAgICBmb3IgbXkgJFBhcmFtTmFtZSAoCiAgICAgICAgcXcoVGl0bGUgQ2F0ZWdvcnlJRCBTdGF0ZUlEIExhbmd1YWdlSUQgVmFsaWRJRCBLZXl3b3JkcyBBcHByb3ZlZCBGaWVsZDEgRmllbGQyIEZpZWxkMyBGaWVsZDQgRmllbGQ1IEZpZWxkNiApCiAgICAgICAgKQogICAgewogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgZ2V0IGNhdGVnb3JpZXMgKHdpdGggY2F0ZWdvcnkgbG9uZyBuYW1lcykgd2hlcmUgdXNlciBoYXMgcmlnaHRzCiAgICBteSAkVXNlckNhdGVnb3JpZXNMb25nTmFtZXMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkdldFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGhhdCB0aGVyZSBhcmUgY2F0ZWdvcmllcyBhdmFpbGFibGUgZm9yIHRoaXMgdXNlcgogICAgaWYgKAogICAgICAgICEkVXNlckNhdGVnb3JpZXNMb25nTmFtZXMKICAgICAgICB8fCByZWYgJFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzIG5lICdIQVNIJwogICAgICAgIHx8ICEleyRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lc30KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIGNhdGVnb3JpZXMgZm91bmQgd2hlcmUgdXNlciBoYXMgcmVhZC93cml0ZSBwZXJtaXNzaW9ucyEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2hvdyB0aGUgZmFxIGFkZCBzY3JlZW4KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggISRTZWxmLT57U3ViYWN0aW9ufSApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgVXNlckNhdGVnb3JpZXNMb25nTmFtZXMgPT4gJFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzLAoKICAgICAgICAgICAgIyBsYXN0IHZpZXdlZCBjYXRlZ29yeSBmcm9tIHNlc3Npb24gKHdyaXR0ZW4gYnkgZmFxIGV4cGxvcmVyKQogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRTZWxmLT57TGFzdFZpZXdlZENhdGVnb3J5fSwKICAgICAgICApOwoKICAgICAgICAjIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzYXZlIHRoZSBmYXEKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTYXZlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgY2hlY2sgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgICAgIG15ICVFcnJvcjsKICAgICAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoVGl0bGUgQ2F0ZWdvcnlJRCkpIHsKCiAgICAgICAgICAgICMgaWYgcmVxdWlyZWQgZmllbGQgaXMgbm90IGdpdmVuLCBhZGQgc2VydmVyIGVycm9yIGNsYXNzCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsgJFBhcmFtTmFtZSAuICdTZXJ2ZXJFcnJvcicgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgYW4gYXR0YWNobWVudCBtdXN0IGJlIGRlbGV0ZWQKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkTnVtYmVyICggMSAuLiAzMiApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIGRlbGV0ZSBidXR0b24gd2FzIHByZXNzZWQgZm9yIHRoaXMgYXR0YWNobWVudAogICAgICAgICAgICBteSAkRGVsZXRlID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiQXR0YWNobWVudERlbGV0ZSROdW1iZXIiICk7CgogICAgICAgICAgICAjIGNoZWNrIG5leHQgYXR0YWNobWVudCBpZiBpdCB3YXMgbm90IHByZXNzZWQKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkRGVsZXRlOwoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IHdlIG5lZWQgdG8gc2hvdyB0aGUgcGFnZSBhZ2FpbgogICAgICAgICAgICAkRXJyb3J7QXR0YWNobWVudH0gPSAxOwoKICAgICAgICAgICAgIyByZW1vdmUgdGhlIGF0dGFjaG1lbnQgZnJvbSB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgICAgICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9LT5Gb3JtSURSZW1vdmVGaWxlKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEZpbGVJRCA9PiAkTnVtYmVyLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiB0aGVyZSB3YXMgYW4gYXR0YWNobWVudCB1cGxvYWQKICAgICAgICBpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0F0dGFjaG1lbnRVcGxvYWQnICkgKSB7CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgd2UgbmVlZCB0byBzaG93IHRoZSBwYWdlIGFnYWluCiAgICAgICAgICAgICRFcnJvcntBdHRhY2htZW50fSA9IDE7CgogICAgICAgICAgICAjIGdldCB0aGUgdXBsb2FkZWQgYXR0YWNobWVudAogICAgICAgICAgICBteSAlVXBsb2FkU3R1ZmYgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICAgICAgUGFyYW0gID0+ICdGaWxlVXBsb2FkJywKICAgICAgICAgICAgICAgIFNvdXJjZSA9PiAnc3RyaW5nJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkU2VsZi0+e1VwbG9hZENhY2hlT2JqZWN0fS0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAlVXBsb2FkU3R1ZmYsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgc2VydmVyIGVycm9yIGlmIGFueSByZXF1aXJlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZwogICAgICAgICMgb3IgYW4gYXR0YWNobWVudCB3YXMgZGVsZXRlZCBvciB1cGxvYWRlZAogICAgICAgIGlmICglRXJyb3IpIHsKCiAgICAgICAgICAgICMgaWYgdGhlcmUgd2FzIGFuIGF0dGFjaG1lbnQgZGVsZXRlIG9yIHVwbG9hZAogICAgICAgICAgICAjIHdlIGRvIG5vdCB3YW50IHRvIHNob3cgdmFsaWRhdGlvbiBlcnJvcnMgZm9yIG90aGVyIGZpZWxkcwogICAgICAgICAgICBpZiAoICRFcnJvcntBdHRhY2htZW50fSApIHsKICAgICAgICAgICAgICAgICVFcnJvciA9ICgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgICAgIFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzID0+ICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcywKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzICAgICAgICAgICAgID0+IFxAQXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAlRXJyb3IsCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmb290ZXIKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAjIGFkZCB0aGUgbmV3IGZhcSBhcnRpY2xlCiAgICAgICAgbXkgJEZBUUlEID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFBZGQoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZXJyb3IgaWYgZmFxIGNvdWxkIG5vdCBiZSBhZGRlZAogICAgICAgIGlmICggISRGQVFJRCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBmcm9tIHVwbG9hZCBjYWNoZQogICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9LT5Gb3JtSURHZXRBbGxGaWxlc0RhdGEoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyB3cml0ZSBhdHRhY2htZW50cwogICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgYXR0YWNobWVudCBpcyBhbiBpbmxpbmUgYXR0YWNobWVudAogICAgICAgICAgICBteSAkSW5saW5lID0gMDsKICAgICAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gKSB7CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IGl0IGlzIGlubGluZQogICAgICAgICAgICAgICAgJElubGluZSA9IDE7CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciBpZiB0aGlzIGlubGluZSBhdHRhY2htZW50IGlzIHVzZWQgaW4gYW55IGZhcSBhcnRpY2xlCiAgICAgICAgICAgICAgICBteSAkQ29udGVudElERm91bmQ7CgogICAgICAgICAgICAgICAgIyBjaGVjayBhbGwgZmllbGRzIGZvciBjb250ZW50IGlkCiAgICAgICAgICAgICAgICBGSUVMRDoKICAgICAgICAgICAgICAgIGZvciBteSAkTnVtYmVyICggMSAuLiA2ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCBmYXEgZmllbGQKICAgICAgICAgICAgICAgICAgICBteSAkRmllbGQgPSAkR2V0UGFyYW17ICdGaWVsZCcgLiAkTnVtYmVyIH07CgogICAgICAgICAgICAgICAgICAgICMgc2tpcCBlbXB0eSBmaWVsZHMKICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEIGlmICEkRmllbGQ7CgogICAgICAgICAgICAgICAgICAgICMgc2tpcCBmaWVsZHMgdGhhdCBkbyBub3QgY29udGFpbiB0aGUgY29udGVudCBpZAogICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQgaWYgJEZpZWxkICF+IG17ICRBdHRhY2htZW50LT57Q29udGVudElEfSB9eG1zOwoKICAgICAgICAgICAgICAgICAgICAjIGZvdW5kIHRoZSBjb250ZW50IGlkCiAgICAgICAgICAgICAgICAgICAgJENvbnRlbnRJREZvdW5kID0gMTsKCiAgICAgICAgICAgICAgICAgICAgIyB3ZSBkbyBub3QgbmVlZCB0byBzZWFyY2ggZnVydGhlcgogICAgICAgICAgICAgICAgICAgIGxhc3QgRklFTEQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyB3ZSBkbyBub3Qgd2FudCB0byBrZWVwIHRoaXMgYXR0YWNobWVudCwKICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCB3YXMgZGVsZXRlZCBpbiB0aGUgcmljaHQgdGV4dCBlZGl0b3IKICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJENvbnRlbnRJREZvdW5kOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICRGaWxlSUQgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkF0dGFjaG1lbnRBZGQoCiAgICAgICAgICAgICAgICAleyRBdHRhY2htZW50fSwKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICBJbmxpbmUgPT4gJElubGluZSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgIGlmICggISRGaWxlSUQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJElubGluZTsKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkU2VsZi0+e0xheW91dE9iamVjdH0tPntCcm93c2VyUmljaFRleHR9OwoKICAgICAgICAgICAgIyByZXdyaXRlIHRoZSBVUkxzIG9mIHRoZSBpbmxpbmUgaW1hZ2VzIGZvciB0aGUgdXBsb2FkZWQgcGljdHVyZXMKICAgICAgICAgICAgbXkgJE9rID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFJbmxpbmVBdHRhY2htZW50VVJMVXBkYXRlKAogICAgICAgICAgICAgICAgQXR0YWNobWVudCA9PiAkQXR0YWNobWVudCwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICBGaWxlSUQgICAgID0+ICRGaWxlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgaWYgKCAhJE9rICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IHVwZGF0ZSB0aGUgaW5saW5lIGltYWdlIFVSTHMgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJmb3IgRkFRIEl0ZW0jICckRkFRSUQnISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgJFNlbGYtPntVcGxvYWRDYWNoZU9iamVjdH0tPkZvcm1JRFJlbW92ZSggRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSApOwoKICAgICAgICAjIHJlZGlyZWN0IHRvIEZBUSB6b29tCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICdBY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0nIC4gJEZBUUlEICk7CiAgICB9Cn0KCnN1YiBfTWFza05ldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgICAgICAgID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgpOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgbXkgJURhdGE7CgogICAgIyBidWlsZCB2YWxpZCBzZWxlY3Rpb24KICAgICREYXRhe1ZhbGlkT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICApOwoKICAgICMgc2V0IG5vIHNlcnZlciBlcnJvciBjbGFzcyBhcyBkZWZhdWx0CiAgICAkUGFyYW17Q2F0ZWdvcnlJRFNlcnZlckVycm9yfSB8fD0gJyc7CgogICAgIyBidWlsZCBjYXRlZ29yeSBzZWxlY3Rpb24KICAgICREYXRhe0NhdGVnb3J5T3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRQYXJhbXtVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lc30sCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdDYXRlZ29yeUlEJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIENsYXNzICAgICAgICA9PiAnVmFsaWRhdGVfUmVxdWlyZWQgJyAuICRQYXJhbXtDYXRlZ29yeUlEU2VydmVyRXJyb3J9LAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGFuZ3VhZ2UgbGlzdAogICAgbXkgJUxhbmd1YWdlcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBzZWxlY3RlZCBsYW5ndWFnZQogICAgbXkgJFNlbGVjdGVkTGFuZ3VhZ2U7CiAgICBpZiAoICRQYXJhbXtMYW5ndWFnZUlEfSAmJiAkTGFuZ3VhZ2VzeyAkUGFyYW17TGFuZ3VhZ2VJRH0gfSApIHsKCiAgICAgICAgIyBnZXQgbGFuZ3VhZ2UgZnJvbSBnaXZlbiBsYW5ndWFnZSBpZAogICAgICAgICRTZWxlY3RlZExhbmd1YWdlID0gJExhbmd1YWdlc3sgJFBhcmFte0xhbmd1YWdlSUR9IH07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyB1c2UgdGhlIHVzZXIgbGFuZ3VhZ2UsIG9yIGlmIG5vdCBmb3VuZCAnZW4nCiAgICAgICAgJFNlbGVjdGVkTGFuZ3VhZ2UgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntVc2VyTGFuZ3VhZ2V9IHx8ICdlbic7CgogICAgICAgICMgZ2V0IHVzZXIgbGFuZ3VhZ2UgSUQKICAgICAgICBteSAkU2VsZWN0ZWRMYW5ndWFnZUlEID0gJFNlbGYtPntGQVFPYmplY3R9LT5MYW5ndWFnZUxvb2t1cCggTmFtZSA9PiAkU2VsZWN0ZWRMYW5ndWFnZSApOwoKICAgICAgICAjIGNoZWNrIGlmIExhbmR1YWdlSUQgZG9lcyBub3QgZXhzaXRzCiAgICAgICAgaWYgKCAhJFNlbGVjdGVkTGFuZ3VhZ2VJRCApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBsb3dlc3QgbGFuZ3VhZ2UgSUQKICAgICAgICAgICAgbXkgQExhbmd1YWdlSURzID0gc29ydCBrZXlzICVMYW5ndWFnZXM7CiAgICAgICAgICAgICRTZWxlY3RlZExhbmd1YWdlSUQgPSAkTGFuZ3VhZ2VJRHNbMF07CgogICAgICAgICAgICAjIHNldCB0aGUgbGFuZ3VhZ2Ugd2l0aCBsb3dlc3QgbGFuZ3VhZ2UgSUQgYXMgc2VsZWN0ZWQgbGFuZ3VhZ2UKICAgICAgICAgICAgJFNlbGVjdGVkTGFuZ3VhZ2UgPSAkTGFuZ3VhZ2VzeyRTZWxlY3RlZExhbmd1YWdlSUR9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIHRoZSBsYW5ndWFnZSBzZWxlY3Rpb24KICAgICREYXRhe0xhbmd1YWdlT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJUxhbmd1YWdlcywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdMYW5ndWFnZUlEJywKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRTZWxlY3RlZExhbmd1YWdlLAogICAgICAgIFRyYW5zbGF0aW9uICAgPT4gMCwKICAgICk7CgogICAgIyBnZXQgdGhlIHN0YXRlcyBsaXN0CiAgICBteSAlU3RhdGVzID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdGhlIHNlbGVjdGVkIHN0YXRlCiAgICBteSAkU2VsZWN0ZWRTdGF0ZTsKICAgIGlmICggJFBhcmFte1N0YXRlSUR9ICYmICRTdGF0ZXN7ICRQYXJhbXtTdGF0ZUlEfSB9ICkgewoKICAgICAgICAjIGdldCBzdGF0ZSBmcm9tIGdpdmVuIHN0YXRlIGlkCiAgICAgICAgJFNlbGVjdGVkU3RhdGUgPSAkU3RhdGVzeyAkUGFyYW17U3RhdGVJRH0gfTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGdldCBkZWZhdWx0IHN0YXRlCiAgICAgICAgJFNlbGVjdGVkU3RhdGUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpEZWZhdWx0OjpTdGF0ZScpIHx8ICdpbnRlcm5hbCAoYWdlbnQpJzsKICAgIH0KCiAgICAjIGJ1aWxkIHRoZSBzdGF0ZSBzZWxlY3Rpb24KICAgICREYXRhe1N0YXRlT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVN0YXRlcywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRTZWxlY3RlZFN0YXRlLAogICAgICAgIFRyYW5zbGF0aW9uICAgPT4gMSwKICAgICk7CgogICAgIyBzaG93IGZhcSBhZGQgc2NyZWVuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZBUUFkZCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzaG93IGxhbmd1YWdlcyBmaWVsZAogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IGRlZmF1bHQgbGFuZ3VhZ2UKICAgICAgICBteSAkRGVmYXVsdExhbmd1YWdlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RGVmYXVsdDo6TGFuZ3VhZ2UnKSB8fCAnZW4nOwoKICAgICAgICAjIGdldCBkZWZhdWx0IGxhbmd1YWdlIElECiAgICAgICAgbXkgJExhbmd1YWdlSUQgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlTG9va3VwKAogICAgICAgICAgICBOYW1lID0+ICREZWZhdWx0TGFuZ3VhZ2UsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgZGVmYXVsdCBsYW5ndWFnZSBpZiBpdCB3YXMgZGVsZXRlZCBvciBkb2VzIG5vdCBleGlzdHMKICAgICAgICBpZiAoICEkTGFuZ3VhZ2VJRCApIHsKICAgICAgICAgICAgbXkgJEluc2VydExhbmd1YWdlID0gJFNlbGYtPntGQVFPYmplY3R9LT5MYW5ndWFnZUFkZCgKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkRGVmYXVsdExhbmd1YWdlLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkSW5zZXJ0TGFuZ3VhZ2UgKSB7CgogICAgICAgICAgICAgICAgIyByZXR1cm4gd2l0aCBlcnJvciBzY3JlZW4KICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIk5vIGRlZmF1bHQgbGFuZ3VhZ2UgZm91bmQgYW5kIGNhbid0IGNyZWF0ZSBhIG5ldyBvbmUuIiwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGRlZmF1bHQgbGFuZ3VhZ2UgSUQKICAgICAgICAgICAgJExhbmd1YWdlSUQgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlTG9va3VwKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkRGVmYXVsdExhbmd1YWdlLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFBhcmFte0xhbmd1YWdlSUR9ID0gJExhbmd1YWdlSUQ7CgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vTGFuZ3VhZ2UnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGFwcHJvdmFsIGZpZWxkCiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkFwcHJvdmFsUmVxdWlyZWQnKSApIHsKCiAgICAgICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICAgICAgbXkgJUdyb3VwcyA9IHJldmVyc2UgJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgVHlwZSAgID0+ICdybycsCiAgICAgICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGhlIGZhcSBhcHByb3ZhbCBncm91cCBmcm9tIGNvbmZpZwogICAgICAgIG15ICRBcHByb3ZhbEdyb3VwID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QXBwcm92YWxHcm91cCcpIHx8ICcnOwoKICAgICAgICAjIGJ1aWxkIHRoZSBhcHByb3ZhbCBzZWxlY3Rpb24gaWYgdXNlciBpcyBpbiB0aGUgYXBwcm92YWwgZ3JvdXAKICAgICAgICBpZiAoICRHcm91cHN7JEFwcHJvdmFsR3JvdXB9ICkgewoKICAgICAgICAgICAgJERhdGF7QXBwcm92YWxPcHRpb259ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FwcHJvdmVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIDAgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAxID0+ICdZZXMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0FwcHJvdmVkfSB8fCAwLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQXBwcm92YWwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JURhdGF9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgdGhlIGF0dGFjaG1lbnQgdXBsb2FkIGJ1dHRvbgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50VXBsb2FkJywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIHNob3cgYXR0YWNobWVudHMKICAgIEFUVEFDSE1FTlQ6CiAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCBAeyAkUGFyYW17QXR0YWNobWVudHN9IH0gKSB7CgogICAgICAgICMgZG8gbm90IHNob3cgaW5saW5lIGltYWdlcyBhcyBhdHRhY2htZW50cwogICAgICAgICMgKHRoZXkgaGF2ZSBhIGNvbnRlbnQgaWQpCiAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gJiYgJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UOwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudCcsCiAgICAgICAgICAgIERhdGEgPT4gJEF0dGFjaG1lbnQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yIGphdmFzY3JpcHQKICAgICMgb25seSBpZiBhY3RpdmF0ZWQgYW5kIHRoZSBicm93c2VyIGNhbiBoYW5kbGUgaXQKICAgICMgb3RoZXJ3aXNlIGp1c3QgYSB0ZXh0YXJlYSBpcyBzaG93bgogICAgaWYgKCAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1JpY2hUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBGQVEgQ29udGVudAogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFDb250ZW50U2hvdygKICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJFNlbGYtPntGQVFPYmplY3R9LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgRkFRRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUFkZCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUNhdGVnb3J5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQ7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBvYmplY3RzCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gICA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSd30gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBydyBwZXJtaXNzaW9uIScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbWV0ZXJzCiAgICBteSAlR2V0UGFyYW07CiAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoQ2F0ZWdvcnlJRCBOYW1lIFBhcmVudElEIENvbW1lbnQgVmFsaWRJRCkpIHsKICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IGNhdGVnb3J5IGlkCiAgICAkR2V0UGFyYW17Q2F0ZWdvcnlJRH0gfHw9IDA7CgogICAgIyBzZXQgZGVmYXVsdCBwYXJlbnQgaWQKICAgICRHZXRQYXJhbXtQYXJlbnRJRH0gfHw9IDA7CgogICAgIyBnZXQgYXJyYXkgcGFyYW1ldGVycwogICAgQHsgJEdldFBhcmFte1Blcm1pc3Npb25Hcm91cHN9IH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICdQZXJtaXNzaW9uR3JvdXBzJyApOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2hhbmdlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgaWYgKCAhJEdldFBhcmFte0NhdGVnb3J5SUR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gJ05lZWQgQ2F0ZWdvcnlJRCEnICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBjYXRlZ29yeSBkYXRhCiAgICAgICAgbXkgJUNhdGVnb3J5RGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2F0ZWdvcnlHZXQoCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJEdldFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBwZXJtaXNzaW9uIGdyb3VwcwogICAgICAgICRDYXRlZ29yeURhdGF7UGVybWlzc2lvbkdyb3Vwc30gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNhdGVnb3J5R3JvdXBHZXQoCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJEdldFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgJUNhdGVnb3J5RGF0YSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNoYW5nZSBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2VBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFBhcmVudElEIFZhbGlkSUQpKSB7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiTmVlZCAkUGFyYW1OYW1lISIgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgbXkgJUVycm9yOwogICAgICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhOYW1lIENvbW1lbnQgUGVybWlzc2lvbkdyb3VwcykpIHsKCiAgICAgICAgICAgICMgaWYgcmVxdWlyZWQgZmllbGQgaXMgbm90IGdpdmVuCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskUGFyYW1OYW1lfSApIHsKCiAgICAgICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgICAgICRFcnJvcnsgJFBhcmFtTmFtZSAuICdTZXJ2ZXJFcnJvcicgfSA9ICdTZXJ2ZXJFcnJvcic7CgogICAgICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIHN0cmluZyBmb3IgY2F0ZWdvcnkgbmFtZSBmaWVsZAogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW1OYW1lIGVxICdOYW1lJyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPSAnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZW5kIHNlcnZlciBlcnJvciBpZiBhbnkgcmVxdWlyZWQgcGFyYW1ldGVyIGlzIG1pc3NpbmcKICAgICAgICBpZiAoJUVycm9yKSB7CgogICAgICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVFcnJvciwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBmb3IgZHVwbGljYXRlIGNhdGVnb3J5IG5hbWUgd2l0aCB0aGUgc2FtZSBwYXJlbnQgY2F0ZWdvcnkKICAgICAgICBteSAkQ2F0ZWdvcnlFeGlzdHNBbHJlYWR5ID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeUR1cGxpY2F0ZUNoZWNrKAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRHZXRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkR2V0UGFyYW17TmFtZX0sCiAgICAgICAgICAgIFBhcmVudElEICAgPT4gJEdldFBhcmFte1BhcmVudElEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IHRoZSBlZGl0IHNjcmVlbiBhZ2FpbgogICAgICAgIGlmICgkQ2F0ZWdvcnlFeGlzdHNBbHJlYWR5KSB7CgogICAgICAgICAgICAjIHNldCBzZXJ2ZXIgZXJyb3JzCiAgICAgICAgICAgICRHZXRQYXJhbXtOYW1lU2VydmVyRXJyb3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRHZXRQYXJhbXtOYW1lU2VydmVyRXJyb3JNZXNzYWdlfSA9ICdUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJzsKCiAgICAgICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICdDaGFuZ2UnLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUNhdGVnb3J5JywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmb290ZXIKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBjYXRlZ29yeQogICAgICAgIG15ICRDYXRlZ29yeVVwZGF0ZVN1Y2Nlc3NmdWwgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNhdGVnb3J5VXBkYXRlKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRDYXRlZ29yeVVwZGF0ZVN1Y2Nlc3NmdWwgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBjYXRlZ29yeSBncm91cAogICAgICAgICRTZWxmLT57RkFRT2JqZWN0fS0+U2V0Q2F0ZWdvcnlHcm91cCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkR2V0UGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgIEdyb3VwSURzICAgPT4gJEdldFBhcmFte1Blcm1pc3Npb25Hcm91cHN9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgbm90aWZpY2F0aW9uCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSggSW5mbyA9PiAnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJyApOwoKICAgICAgICAjIHNob3cgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUNhdGVnb3J5JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYWRkCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkJyApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0FkZCcsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZCBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFBhcmVudElEIFZhbGlkSUQpKSB7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiTmVlZCAkUGFyYW1OYW1lISIgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgbXkgJUVycm9yOwogICAgICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhOYW1lIENvbW1lbnQgUGVybWlzc2lvbkdyb3VwcykpIHsKCiAgICAgICAgICAgICMgaWYgcmVxdWlyZWQgZmllbGQgaXMgbm90IGdpdmVuCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskUGFyYW1OYW1lfSApIHsKCiAgICAgICAgICAgICAgICAjIGFkZCB2YWxpZGF0aW9uIGNsYXNzIGFuZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgICAgIGlmICggJFBhcmFtTmFtZSBlcSAnUGVybWlzc2lvbkdyb3VwcycgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yeyAkUGFyYW1OYW1lIC4gJ1NlcnZlckVycm9yJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3Igc3RyaW5nIGZvciBjYXRlZ29yeSBuYW1lIGZpZWxkCiAgICAgICAgICAgICAgICBpZiAoICRQYXJhbU5hbWUgZXEgJ05hbWUnICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcntOYW1lU2VydmVyRXJyb3JNZXNzYWdlfSA9ICdBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgc2VydmVyIGVycm9yIGlmIGFueSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBtaXNzaW5nCiAgICAgICAgaWYgKCVFcnJvcikgewoKICAgICAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gJ0FkZCcsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAlRXJyb3IsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRQ2F0ZWdvcnknLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZvb3RlcgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIGR1cGxpY2F0ZSBjYXRlZ29yeSBuYW1lIHdpdGggdGhlIHNhbWUgcGFyZW50IGNhdGVnb3J5CiAgICAgICAgbXkgJENhdGVnb3J5RXhpc3RzQWxyZWFkeSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2F0ZWdvcnlEdXBsaWNhdGVDaGVjaygKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkR2V0UGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJEdldFBhcmFte05hbWV9LAogICAgICAgICAgICBQYXJlbnRJRCAgID0+ICRHZXRQYXJhbXtQYXJlbnRJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyB0aGUgZWRpdCBzY3JlZW4gYWdhaW4KICAgICAgICBpZiAoJENhdGVnb3J5RXhpc3RzQWxyZWFkeSkgewoKICAgICAgICAgICAgIyBzZXQgc2VydmVyIGVycm9ycwogICAgICAgICAgICAkR2V0UGFyYW17TmFtZVNlcnZlckVycm9yfSAgICAgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkR2V0UGFyYW17TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPSAnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyEnOwoKICAgICAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gJ0FkZCcsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRQ2F0ZWdvcnknLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZvb3RlcgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CgogICAgICAgICMgYWRkIG5ldyBjYXRlZ29yeQogICAgICAgIG15ICRDYXRlZ29yeUlEID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeUFkZCgKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICBpZiAoICEkQ2F0ZWdvcnlJRCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgICMgc2V0IGNhdGVnb3J5IGdyb3VwCiAgICAgICAgJFNlbGYtPntGQVFPYmplY3R9LT5TZXRDYXRlZ29yeUdyb3VwKAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBHcm91cElEcyAgID0+ICRHZXRQYXJhbXtQZXJtaXNzaW9uR3JvdXBzfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IG5vdGlmaWNhdGlvbgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoIEluZm8gPT4gJ0ZBUSBjYXRlZ29yeSBhZGRlZCEnICk7CgogICAgICAgICMgc2hvdyBvdmVydmlldwogICAgICAgICRTZWxmLT5fT3ZlcnZpZXcoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRQ2F0ZWdvcnknLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWxldGUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWxldGUnICkgewoKICAgICAgICAjIGdldCB0aGUgQ2F0ZWdvcnlJRAogICAgICAgIG15ICRDYXRlZ29yeUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2F0ZWdvcnlJRCcgKSB8fCAnJzsKCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgaWYgKCAhJENhdGVnb3J5SUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gQ2F0ZWdvcnlJRCBpcyBnaXZlbiEnLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGNhdGVnb3J5IGRhdGEKICAgICAgICBteSAlQ2F0ZWdvcnlEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJUNhdGVnb3J5RGF0YSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGFsbCBhZmZlY3RlZCBGQVEgYXJ0aWNsZXMKICAgICAgICBteSBAQWZmZWN0ZWRJdGVtcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRU2VhcmNoKAogICAgICAgICAgICBDYXRlZ29yeUlEcyA9PiBbJENhdGVnb3J5SURdLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGFsbCBhZmZlY3RlZCBTdWJDY2F0ZWdvcmllcwogICAgICAgIG15ICRBZmZlY3RlZFN1YkNhdGVnb3JpZXMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNhdGVnb3J5U3ViQ2F0ZWdvcnlJRExpc3QoCiAgICAgICAgICAgIFBhcmVudElEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBNb2RlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgY2FsbCBEZWxldGUgYmxvY2sKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEZWxldGUnLAogICAgICAgICAgICBEYXRhID0+IHslQ2F0ZWdvcnlEYXRhfSwKICAgICAgICApOwoKICAgICAgICAjIHNldCB0aGUgZGlhbG9nIHR5cGUuIEFzIGRlZmF1bHQsIHRoZSBkaWFsb2cgd2lsbCBoYXZlIDIgYnV0dG9uczogWWVzIGFuZCBObwogICAgICAgIG15ICREaWFsb2dUeXBlID0gJ0NvbmZpcm1hdGlvbic7CgogICAgICAgICMgZGlzcGxheSBsaXN0IG9mIGFmZmVjdGVkIEZBUSBhcnRpY2xlcyBvciBTdWJDYXRlZ29yaWVzCiAgICAgICAgaWYgKCBAQWZmZWN0ZWRJdGVtcyB8fCBAeyRBZmZlY3RlZFN1YkNhdGVnb3JpZXN9ICkgewoKICAgICAgICAgICAgIyBzZXQgdGhlIGRpYWxvZyB0eXBlIHRvIGhhdmUgb25seSAxIGJ1dHRvbjogT2sKICAgICAgICAgICAgJERpYWxvZ1R5cGUgPSAnTWVzc2FnZSc7CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQWZmZWN0ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZGlzcGxheSBBZmZlY3RlZCBGQVEgYXJ0aWNsZXMKICAgICAgICAgICAgaWYgKEBBZmZlY3RlZEl0ZW1zKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBZmZlY3RlZEl0ZW1zJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBJVEVNSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEl0ZW1JRCAoQEFmZmVjdGVkSXRlbXMpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgZmFxIGFydGljbGUKICAgICAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBmYXEgYXJ0aWNsZQogICAgICAgICAgICAgICAgICAgIG5leHQgSVRFTUlEIGlmICElRkFRRGF0YTsKCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQWZmZWN0ZWRJdGVtc1JvdycsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBkaXNwbGF5IEFmZmVjdGVkIFN1YmNhdGVnb3JpZXMKICAgICAgICAgICAgaWYgKCBAeyRBZmZlY3RlZFN1YkNhdGVnb3JpZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGNhdGVnb2llcyBsb25nIG5hbWVzCiAgICAgICAgICAgICAgICBteSAkQ2F0ZWdvcnlMb25nTmFtZXMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkdldFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgICAgICAgICAgICAgIFR5cGUgICA9PiAncm8nLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQWZmZWN0ZWRTdWJDYXRlZ29yaWVzJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIENBVEVHT1JZSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBAeyRBZmZlY3RlZFN1YkNhdGVnb3JpZXN9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCBjYXRlZ29yeQogICAgICAgICAgICAgICAgICAgIG15ICVDYXRlZ29yeURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNhdGVnb3J5R2V0KAogICAgICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHNldCBjYXRlZ29yeSBsb25nIG5hbWUKICAgICAgICAgICAgICAgICAgICAkQ2F0ZWdvcnlEYXRhe0xvbmdOYW1lfSA9ICRDYXRlZ29yeUxvbmdOYW1lcy0+eyRDYXRlZ29yeUlEfTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjYXRlZ29yeQogICAgICAgICAgICAgICAgICAgIG5leHQgQ0FURUdPUllJRCBpZiAhJUNhdGVnb3J5RGF0YTsKCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQWZmZWN0ZWRTdWJDYXRlZ29yaWVzUm93JywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlQ2F0ZWdvcnlEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9BZmZlY3RlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslQ2F0ZWdvcnlEYXRhfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGNvbnRlbnQKICAgICAgICBteSAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRQ2F0ZWdvcnknLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4ge30sCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCB0aGUgcmV0dXJuZWQgZGF0YSBzdHJ1Y3R1cmUKICAgICAgICBteSAlRGF0YSA9ICgKICAgICAgICAgICAgSFRNTCAgICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBEaWFsb2dUeXBlID0+ICREaWFsb2dUeXBlLAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIEpTT04tU3RyaW5nIGJlY2F1c2Ugb2YgQUpBWC1Nb2RlCiAgICAgICAgbXkgJE91dHB1dEpTT04gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkpTT05FbmNvZGUoIERhdGEgPT4gXCVEYXRhICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntDaGFyc2V0fSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWxldGUgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVsZXRlQWN0aW9uJyApIHsKCiAgICAgICAgIyBnZXQgdGhlIENhdGVnb3J5SUQKICAgICAgICBteSAkQ2F0ZWdvcnlJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NhdGVnb3J5SUQnICkgfHwgJyc7CgogICAgICAgICMgY2hlY2sgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgICAgIGlmICggISRDYXRlZ29yeUlEICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIENhdGVnb3J5SUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBjYXRlZ29yeSBkYXRhCiAgICAgICAgbXkgJUNhdGVnb3J5RGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2F0ZWdvcnlHZXQoCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISVDYXRlZ29yeURhdGEgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0aGUgY2F0ZWdvcnkKICAgICAgICBteSAkQ291bGREZWxldGVDYXRlZ29yeSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2F0ZWdvcnlEZWxldGUoCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkQ291bGREZWxldGVDYXRlZ29yeSkgewoKICAgICAgICAgICAgIyByZWRpcmVjdCB0byBleHBsb3Jlciwgd2hlbiB0aGUgZGVsZXRpb24gd2FzIHN1Y2Nlc3NmdWwKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50RkFRQ2F0ZWdvcnkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlLCB3aGVuIGRlbGV0ZSBmYWlsZWQKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjYXRlZ29yeSAkQ2F0ZWdvcnlJRCEiLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJFNlbGYtPl9PdmVydmlldygpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgX0VkaXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNob3cgb3ZlcnZpZXcKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgIyBvdXRwdXQgb3ZlcnZpZXcgYmxvY2tzCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgIyBnZXQgdGhlIHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgICAgICAgID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgpOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgbXkgJURhdGE7CgogICAgIyBidWlsZCB0aGUgdmFsaWQgc2VsZWN0aW9uCiAgICAkRGF0YXtWYWxpZE9wdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17VmFsaWRJRH0gfHwgJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgKTsKCiAgICAjIGdldCBhbGwgdmFsaWQgZ3JvdXBzCiAgICBteSAlR3JvdXBzID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTGlzdCggVmFsaWQgPT4gMSApOwoKICAgICMgc2V0IG5vIHNlcnZlciBlcnJvciBjbGFzcyBhcyBkZWZhdWx0CiAgICAkUGFyYW17UGVybWlzc2lvbkdyb3Vwc1NlcnZlckVycm9yfSB8fD0gJyc7CgogICAgIyBidWlsZCB0aGUgZ3JvdXAgc2VsZWN0aW9uCiAgICAkRGF0YXtHcm91cE9wdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVHcm91cHMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnUGVybWlzc2lvbkdyb3VwcycsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIENsYXNzICAgICAgPT4gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgLiAkUGFyYW17UGVybWlzc2lvbkdyb3Vwc1NlcnZlckVycm9yfSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtQZXJtaXNzaW9uR3JvdXBzfSwKICAgICk7CgogICAgIyBnZXQgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGVpciBsb25nIG5hbWVzCiAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgYnVpbGQgdGhlIGNhdG9nb3J5IHNlbGVjdGlvbgogICAgJERhdGF7Q2F0ZWdvcnlPcHRpb259ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgICA9PiAkQ2F0ZWdvcnlUcmVlLAogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdQYXJlbnRJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgICAgPT4gJFBhcmFte1BhcmVudElEfSwKICAgICAgICBQb3NzaWJsZU5vbmUgICA9PiAxLAogICAgICAgIERpc2FibGVkQnJhbmNoID0+ICRDYXRlZ29yeVRyZWUtPnsgJFBhcmFte0NhdGVnb3J5SUR9IH0gfHwgJycsCiAgICAgICAgVHJhbnNsYXRpb24gICAgPT4gMCwKICAgICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1VwZGF0ZScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzaG93IGhlYWRlcgogICAgaWYgKCAkUGFyYW17QWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0JyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnSGVhZGVyQWRkJyApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX092ZXJ2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dCA9ICcnOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3IGJsb2NrcwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnT3ZlcnZpZXcnICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnICk7CgogICAgIyBnZXQgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGVpciBsb25nIG5hbWVzCiAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgaWYgdGhlcmUgYXJlIGFueSBjYXRlZ29yaWVzLCB0aGV5IGFyZSBzaG93bgogICAgaWYgKCAkQ2F0ZWdvcnlUcmVlICYmIHJlZiAkQ2F0ZWdvcnlUcmVlIGVxICdIQVNIJyAmJiAleyRDYXRlZ29yeVRyZWV9ICkgewoKICAgICAgICAjIGdldCB0aGUgdmFsaWQgbGlzdAogICAgICAgIG15ICVWYWxpZExpc3QgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CgogICAgICAgICMgc29ydCB0aGUgY2F0ZWdvcnkgaWRzIGJ5IHRoZSBsb25nIGNhdGVnb3J5IG5hbWUKICAgICAgICBteSBAQ2F0ZWdvcnlJRHNTb3J0ZWQgPSBzb3J0IHsgJENhdGVnb3J5VHJlZS0+eyRhfSBjbXAgJENhdGVnb3J5VHJlZS0+eyRifSB9IGtleXMgJXskQ2F0ZWdvcnlUcmVlfTsKCiAgICAgICAgIyBzaG93IGFsbCBjYXRlZ29yaWVzCiAgICAgICAgZm9yIG15ICRDYXRlZ29yeUlEIChAQ2F0ZWdvcnlJRHNTb3J0ZWQpIHsKCiAgICAgICAgICAgICMgZ2V0IGNhdGVnb3J5IGRhdGEKICAgICAgICAgICAgbXkgJUNhdGVnb3J5RGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2F0ZWdvcnlHZXQoCiAgICAgICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCB2YWxpZCBzdHJpbmcgYmFzZWQgb24gVmFsaWRJRAogICAgICAgICAgICAkQ2F0ZWdvcnlEYXRhe1ZhbGlkfSA9ICRWYWxpZExpc3R7ICRDYXRlZ29yeURhdGF7VmFsaWRJRH0gfTsKCiAgICAgICAgICAgICMgb3ZlcndyaXRlIHRoZSBuYW1lIHdpdGggdGhlIGxvbmcgbmFtZQogICAgICAgICAgICAkQ2F0ZWdvcnlEYXRhe05hbWV9ID0gJENhdGVnb3J5VHJlZS0+eyRDYXRlZ29yeUlEfTsKCiAgICAgICAgICAgICMgb3V0cHV0IHRoZSBjYXRlZ29yeSBkYXRhCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslQ2F0ZWdvcnlEYXRhfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgKTsKICAgIH0KfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUURlbGV0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAoCiAgICAgICAgcXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QgVXNlck9iamVjdCBHcm91cE9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntGQVFPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICBpZiAoICEkU2VsZi0+e0FjY2Vzc1JvfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBuZWVkIHJvIHBlcm1pc3Npb24hJywKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgICMgZ2V0IG5lZWRlZCBJdGVtIGlkCiAgICAkR2V0UGFyYW17SXRlbUlEfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0l0ZW1JRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJEdldFBhcmFte0l0ZW1JRH0gKSB7CgogICAgICAgICMgZXJyb3IgcGFnZQogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBJdGVtSUQgaXMgZ2l2ZW4hIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEZBUSBpdGVtIGRhdGEKICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJUZBUURhdGEgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgIH0KCiAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgbXkgJFBlcm1pc3Npb24gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNoZWNrQ2F0ZWdvcnlVc2VyUGVybWlzc2lvbigKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBDYXRlZ29yeUlEID0+ICRGQVFEYXRhe0NhdGVnb3J5SUR9LAogICAgKTsKCiAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgaWYgKCAhJFBlcm1pc3Npb24gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgaGF2ZSBubyBwZXJtaXNzaW9uIGZvciB0aGlzIGNhdGVnb3J5IScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVsZXRlJyApIHsKCiAgICAgICAgIyBkZWxldGUgdGhlIEZBUSBhcnRpY2xlCiAgICAgICAgbXkgJENvdWxkRGVsZXRlSXRlbSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRRGVsZXRlKAogICAgICAgICAgICBJdGVtSUQgPT4gJEZBUURhdGF7SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJENvdWxkRGVsZXRlSXRlbSkgewoKICAgICAgICAgICAgIyByZWRpcmVjdCB0byBleHBsb3Jlciwgd2hlbiB0aGUgZGVsZXRpb24gd2FzIHN1Y2Nlc3NmdWwKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50RkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD0kRkFRRGF0YXtDYXRlZ29yeUlEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gZGVsZXRlIGZhaWxlZAogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIldhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIEZBUSBhcnRpY2xlICRGQVFEYXRhe0l0ZW1JRH0hIiwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IHRoZSBkaWFsb2cgdHlwZS4gQXMgZGVmYXVsdCwgdGhlIGRpYWxvZyB3aWxsIGhhdmUgMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICBteSAkRGlhbG9nVHlwZSA9ICdDb25maXJtYXRpb24nOwoKICAgICMgb3V0cHV0IGNvbnRlbnQKICAgIG15ICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUURlbGV0ZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGJ1aWxkIHRoZSByZXR1cm5lZCBkYXRhIHN0cnVjdHVyZQogICAgbXkgJURhdGEgPSAoCiAgICAgICAgSFRNTCAgICAgICA9PiAkT3V0cHV0LAogICAgICAgIERpYWxvZ1R5cGUgPT4gJERpYWxvZ1R5cGUsCiAgICApOwoKICAgICMgcmV0dXJuIEpTT04tU3RyaW5nIGJlY2F1c2Ugb2YgQUpBWC1Nb2RlCiAgICBteSAkT3V0cHV0SlNPTiA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SlNPTkVuY29kZSggRGF0YSA9PiBcJURhdGEgKTsKCiAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAogICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntDaGFyc2V0fSwKICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0SlNPTiwKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUVkaXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhbGlkOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIGFsbCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBDb25maWdPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBuZWVkZWQgb2JqZWN0cwogICAgJFNlbGYtPntGQVFPYmplY3R9ICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJGQVE6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKSB8fCAnJzsKCiAgICAjIGdldCBmb3JtIGlkCiAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtSUQnICk7CgogICAgIyBjcmVhdGUgZm9ybSBpZAogICAgaWYgKCAhJFNlbGYtPntGb3JtSUR9ICkgewogICAgICAgICRTZWxmLT57Rm9ybUlEfSA9ICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9LT5Gb3JtSURDcmVhdGUoKTsKICAgIH0KCiAgICAjIGdldCBzY3JlZW4gdHlwZQogICAgJFNlbGYtPntTY3JlZW5UeXBlfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NjcmVlblR5cGUnICkgfHwgJyc7CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgICRTZWxmLT57SW50ZXJmYWNlfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlR2V0KAogICAgICAgIE5hbWUgICA9PiAnaW50ZXJuYWwnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpBZ2VudDo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICBpZiAoICEkU2VsZi0+e0FjY2Vzc1J3fSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBuZWVkIHJ3IHBlcm1pc3Npb24hJywKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHBhcmFtZXRlcnMKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkUGFyYW1OYW1lICgKICAgICAgICBxdyhJdGVtSUQgVGl0bGUgQ2F0ZWdvcnlJRCBTdGF0ZUlEIExhbmd1YWdlSUQgVmFsaWRJRCBLZXl3b3JkcyBBcHByb3ZlZCBGaWVsZDEgRmllbGQyIEZpZWxkMyBGaWVsZDQgRmllbGQ1IEZpZWxkNiApCiAgICAgICAgKQogICAgewogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkR2V0UGFyYW17SXRlbUlEfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gSXRlbUlEIGlzIGdpdmVuIScsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbi4nLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgRkFRIGl0ZW0gZGF0YQogICAgbXkgJUZBUURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJUZBUURhdGEgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgIH0KCiAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgbXkgJFBlcm1pc3Npb24gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNoZWNrQ2F0ZWdvcnlVc2VyUGVybWlzc2lvbigKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBDYXRlZ29yeUlEID0+ICRGQVFEYXRhe0NhdGVnb3J5SUR9LAogICAgKTsKCiAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgaWYgKCAhJFBlcm1pc3Npb24gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgaGF2ZSBubyBwZXJtaXNzaW9uIGZvciB0aGlzIGNhdGVnb3J5IScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNob3cgdGhlIGZhcSBlZGl0IHNjcmVlbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAhJFNlbGYtPntTdWJhY3Rpb259ICkgewoKICAgICAgICBteSAkT3V0cHV0OwoKICAgICAgICAjIHNob3cgYSBwb3B1cCBzY3JlZW4KICAgICAgICBpZiAoICRTZWxmLT57U2NyZWVuVHlwZX0gZXEgJ1BvcHVwJyApIHsKCiAgICAgICAgICAgICMgc2hvdyB0aGUgc21hbGwgcG9wdXAgc2NyZWVuIGhlYWRlcgogICAgICAgICAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YXJ0U21hbGwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGEgbm9ybWFsIHdpbmRvdwogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzaG93IHRoZSBub3JtYWwgc2NyZWVuIGhlYWRlciB3aXRoIG5hdmlnYXRpb24gYmFyCiAgICAgICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YXJ0Tm9ybWFsJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGFsbCBleGlzdGluZyBhdHRhY2htZW50cyAod2l0aG91dCBpbmxpbmUgYXR0YWNobWVudHMpCiAgICAgICAgbXkgQEV4aXN0aW5nQXR0YWNobWVudHMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgU2hvd0lubGluZSA9PiAwLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNvcHkgYWxsIGV4aXN0aW5nIGF0dGFjaG1lbnRzIHRvIHVwbG9hZCBjYWNoZQogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBleGlzdGluZyBhdHRhY2htZW50IGRhdGEKICAgICAgICAgICAgbXkgJUZpbGUgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBGaWxlSUQgPT4gJEF0dGFjaG1lbnQtPntGaWxlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGNvbnRlbnQgZGlzcG9zaXRpb24gKGlmIGl0cyBhbiBpbmxpbmUgYXR0YWNobWVudCkKICAgICAgICAgICAgbXkgJERpc3Bvc2l0aW9uID0gJEF0dGFjaG1lbnQtPntJbmxpbmV9ID8gJ2lubGluZScgOiAnJzsKCiAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkU2VsZi0+e1VwbG9hZENhY2hlT2JqZWN0fS0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxle0ZpbGVuYW1lfSwKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRGaWxle0NvbnRlbnR9LAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJEZpbGV7Q29udGVudFR5cGV9LAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJERpc3Bvc2l0aW9uLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YSBmcm9tIHVwbG9hZCBjYWNoZQogICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXdyaXRlIG9sZCBzdHlsZSBpbmxpbmUgaW1hZ2UgVVJMcwogICAgICAgIEZJRUxEOgogICAgICAgIGZvciBteSAkRmllbGQgKHF3KEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNCBGaWVsZDUgRmllbGQ2KSkgewoKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZBUURhdGF7JEZpZWxkfTsKCiAgICAgICAgICAgICMgcmV3cml0ZSBoYW5kbGUgYW5kIGFjdGlvbiwgdGFrZSBjYXJlIG9mIG9sZCBzdHlsZSBiZWZvcmUgRkFRIDIuMC54CiAgICAgICAgICAgICRGQVFEYXRheyRGaWVsZH0gPX4gc3sKICAgICAgICAgICAgICAgIEFjdGlvbj1BZ2VudEZBUSBbJl0oYW1wOyk/IFN1YmFjdGlvbj1Eb3dubG9hZCBbJl0oYW1wOyk/CiAgICAgICAgICAgIH17QWN0aW9uPUFnZW50RkFRWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O31neG1zOwogICAgICAgIH0KCiAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrTmV3KAogICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgQXR0YWNobWVudHMgPT4gXEBBdHRhY2htZW50cywKICAgICAgICAgICAgU2NyZWVuVHlwZSAgPT4gJFNlbGYtPntTY3JlZW5UeXBlfSwKICAgICAgICAgICAgRm9ybUlEICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBhIHBvcHVwIHNjcmVlbiBmb290ZXIKICAgICAgICBpZiAoICRTZWxmLT57U2NyZWVuVHlwZX0gZXEgJ1BvcHVwJyApIHsKCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdFbmRTbWFsbCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CgogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGEgbm9ybWFsIGZvb3RlcgogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0VuZE5vcm1hbCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzYXZlIHRoZSBmYXEKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTYXZlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAkT3V0cHV0OwoKICAgICAgICAjIHNob3cgYSBwb3B1cCBzY3JlZW4KICAgICAgICBpZiAoICRTZWxmLT57U2NyZWVuVHlwZX0gZXEgJ1BvcHVwJyApIHsKCiAgICAgICAgICAgICMgc2hvdyB0aGUgc21hbGwgcG9wdXAgc2NyZWVuIGhlYWRlcgogICAgICAgICAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YXJ0U21hbGwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGEgbm9ybWFsIHdpbmRvdwogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzaG93IHRoZSBub3JtYWwgc2NyZWVuIGhlYWRlciB3aXRoIG5hdmlnYXRpb24gYmFyCiAgICAgICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YXJ0Tm9ybWFsJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgICAgIG15ICVFcnJvcjsKICAgICAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoVGl0bGUgQ2F0ZWdvcnlJRCkpIHsKCiAgICAgICAgICAgICMgaWYgcmVxdWlyZWQgZmllbGQgaXMgbm90IGdpdmVuLCBhZGQgc2VydmVyIGVycm9yIGNsYXNzCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsgJFBhcmFtTmFtZSAuICdTZXJ2ZXJFcnJvcicgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgYW4gYXR0YWNobWVudCBtdXN0IGJlIGRlbGV0ZWQKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkTnVtYmVyICggMSAuLiAzMiApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIGRlbGV0ZSBidXR0b24gd2FzIHByZXNzZWQgZm9yIHRoaXMgYXR0YWNobWVudAogICAgICAgICAgICBteSAkRGVsZXRlID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiQXR0YWNobWVudERlbGV0ZSROdW1iZXIiICk7CgogICAgICAgICAgICAjIGNoZWNrIG5leHQgYXR0YWNobWVudCBpZiBpdCB3YXMgbm90IHByZXNzZWQKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkRGVsZXRlOwoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IHdlIG5lZWQgdG8gc2hvdyB0aGUgcGFnZSBhZ2FpbgogICAgICAgICAgICAkRXJyb3J7QXR0YWNobWVudH0gPSAxOwoKICAgICAgICAgICAgIyByZW1vdmUgdGhlIGF0dGFjaG1lbnQgZnJvbSB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgICAgICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9LT5Gb3JtSURSZW1vdmVGaWxlKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEZpbGVJRCA9PiAkTnVtYmVyLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiB0aGVyZSB3YXMgYW4gYXR0YWNobWVudCB1cGxvYWQKICAgICAgICBpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0F0dGFjaG1lbnRVcGxvYWQnICkgKSB7CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgd2UgbmVlZCB0byBzaG93IHRoZSBwYWdlIGFnYWluCiAgICAgICAgICAgICRFcnJvcntBdHRhY2htZW50fSA9IDE7CgogICAgICAgICAgICAjIGdldCB0aGUgdXBsb2FkZWQgYXR0YWNobWVudAogICAgICAgICAgICBteSAlVXBsb2FkU3R1ZmYgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICAgICAgUGFyYW0gID0+ICdGaWxlVXBsb2FkJywKICAgICAgICAgICAgICAgIFNvdXJjZSA9PiAnc3RyaW5nJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkU2VsZi0+e1VwbG9hZENhY2hlT2JqZWN0fS0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAlVXBsb2FkU3R1ZmYsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgc2VydmVyIGVycm9yIGlmIGFueSByZXF1aXJlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZwogICAgICAgICMgb3IgYW4gYXR0YWNobWVudCB3YXMgZGVsZXRlZCBvciB1cGxvYWRlZAogICAgICAgIGlmICglRXJyb3IpIHsKCiAgICAgICAgICAgICMgaWYgdGhlcmUgd2FzIGFuIGF0dGFjaG1lbnQgZGVsZXRlIG9yIHVwbG9hZAogICAgICAgICAgICAjIHdlIGRvIG5vdCB3YW50IHRvIHNob3cgdmFsaWRhdGlvbiBlcnJvcnMgZm9yIG90aGVyIGZpZWxkcwogICAgICAgICAgICBpZiAoICRFcnJvcntBdHRhY2htZW50fSApIHsKICAgICAgICAgICAgICAgICVFcnJvciA9ICgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzID0+IFxAQXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAlRXJyb3IsCiAgICAgICAgICAgICAgICBTY3JlZW5UeXBlID0+ICRTZWxmLT57U2NyZWVuVHlwZX0sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBhIHBvcHVwIHNjcmVlbiBmb290ZXIKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1NjcmVlblR5cGV9IGVxICdQb3B1cCcgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdFbmRTbWFsbCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CgogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNob3cgYSBub3JtYWwgZm9vdGVyCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRW5kTm9ybWFsJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIG5ldyBmYXEgYXJ0aWNsZQogICAgICAgIG15ICRVcGRhdGVTdWNjZXNzID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFVcGRhdGUoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZXJyb3IgaWYgZmFxIGNvdWxkIG5vdCBiZSB1cGRhdGVkCiAgICAgICAgaWYgKCAhJFVwZGF0ZVN1Y2Nlc3MgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgZnJvbSB1cGxvYWQgY2FjaGUKICAgICAgICBteSBAQXR0YWNobWVudHMgPSAkU2VsZi0+e1VwbG9hZENhY2hlT2JqZWN0fS0+Rm9ybUlER2V0QWxsRmlsZXNEYXRhKAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgYSBsb29rdXAgbG9va3VwIGhhc2ggb2YgdGhlIG5ldyBhdHRhY2htZW50cwogICAgICAgIG15ICVOZXdBdHRhY2htZW50OwogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAjIHRoZSBrZXkgaXMgdGhlIGZpbGVuYW1lICsgZmlsZXNpemUgKyBjb250ZW50IHR5cGUKICAgICAgICAgICAgbXkgJEtleSA9ICRBdHRhY2htZW50LT57RmlsZW5hbWV9CiAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57RmlsZXNpemV9CiAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9OwoKICAgICAgICAgICAgIyBhcHBlbmQgY29udGVudCBpZCBpZiBhdmFpbGFibGUgKGZvciBuZXcgaW5saW5lIGltYWdlcykKICAgICAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gKSB7CiAgICAgICAgICAgICAgICAkS2V5IC49ICRBdHRhY2htZW50LT57Q29udGVudElEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzdG9yZSBhbGwgb2YgdGhlIG5ldyBhdHRhY2htZW50IGRhdGEKICAgICAgICAgICAgJE5ld0F0dGFjaG1lbnR7JEtleX0gPSAkQXR0YWNobWVudDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGFsbCBleGlzdGluZyBhdHRhY2htZW50cywgd2l0aG91dCBpbmxpbmUgYXR0YWNobWVudHMKICAgICAgICBteSBARXhpc3RpbmdBdHRhY2htZW50cyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+QXR0YWNobWVudEluZGV4KAogICAgICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBTaG93SW5saW5lID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgdGhlIGV4aXN0aW5nIGF0dGFjaG1lbnRzCiAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBFeGlzdGluZ0F0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAjIHRoZSBrZXkgaXMgdGhlIGZpbGVuYW1lICsgZmlsZXNpemUgKyBjb250ZW50IHR5cGUKICAgICAgICAgICAgIyAobm8gY29udGVudCBpZCwgYXMgZXhpc3RpbmcgYXR0YWNobWVudHMgZG9uJ3QgaGF2ZSBpdCkKICAgICAgICAgICAgbXkgJEtleSA9ICRBdHRhY2htZW50LT57RmlsZW5hbWV9CiAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57RmlsZXNpemV9CiAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9OwoKICAgICAgICAgICAgIyBhdHRhY2htZW50IGlzIGFscmVhZHkgZXhpc3RpbmcsIHdlIGNhbiBkZWxldGUgaXQgZnJvbSB0aGUgbmV3IGF0dGFjaG1lbnQgaGFzaAogICAgICAgICAgICBpZiAoICROZXdBdHRhY2htZW50eyRLZXl9ICkgewogICAgICAgICAgICAgICAgZGVsZXRlICROZXdBdHRhY2htZW50eyRLZXl9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGV4aXN0aW5nIGF0dGFjaG1lbnQgaXMgbm8gbG9uZ2VyIGluIG5ldyBhdHRhY2htZW50cyBoYXNoCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSBleGlzdGluZyBhdHRhY2htZW50CiAgICAgICAgICAgICAgICBteSAkRGVsZXRlU3VjY2Vzc2Z1bCA9ICRTZWxmLT57RkFRT2JqZWN0fS0+QXR0YWNobWVudERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgRmlsZUlEID0+ICRBdHRhY2htZW50LT57RmlsZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICBpZiAoICEkRGVsZXRlU3VjY2Vzc2Z1bCApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgd3JpdGUgdGhlIG5ldyBhdHRhY2htZW50cwogICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgZm9yIG15ICRBdHRhY2htZW50ICggdmFsdWVzICVOZXdBdHRhY2htZW50ICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiBhdHRhY2htZW50IGlzIGFuIGlubGluZSBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICRJbmxpbmUgPSAwOwogICAgICAgICAgICBpZiAoICRBdHRhY2htZW50LT57Q29udGVudElEfSApIHsKCiAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgaXQgaXMgaW5saW5lCiAgICAgICAgICAgICAgICAkSW5saW5lID0gMTsKCiAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIGlmIHRoaXMgaW5saW5lIGF0dGFjaG1lbnQgaXMgdXNlZCBpbiBhbnkgZmFxIGFydGljbGUKICAgICAgICAgICAgICAgIG15ICRDb250ZW50SURGb3VuZDsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGFsbCBmaWVsZHMgZm9yIGNvbnRlbnQgaWQKICAgICAgICAgICAgICAgIEZJRUxEOgogICAgICAgICAgICAgICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDYgKSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IGZhcSBmaWVsZAogICAgICAgICAgICAgICAgICAgIG15ICRGaWVsZCA9ICRHZXRQYXJhbXsgJ0ZpZWxkJyAuICROdW1iZXIgfTsKCiAgICAgICAgICAgICAgICAgICAgIyBza2lwIGVtcHR5IGZpZWxkcwogICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQgaWYgISRGaWVsZDsKCiAgICAgICAgICAgICAgICAgICAgIyBza2lwIGZpZWxkcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBjb250ZW50IGlkCiAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgIX4gbXsgJEF0dGFjaG1lbnQtPntDb250ZW50SUR9IH14bXM7CgogICAgICAgICAgICAgICAgICAgICMgZm91bmQgdGhlIGNvbnRlbnQgaWQKICAgICAgICAgICAgICAgICAgICAkQ29udGVudElERm91bmQgPSAxOwoKICAgICAgICAgICAgICAgICAgICAjIHdlIGRvIG5vdCBuZWVkIHRvIHNlYXJjaCBmdXJ0aGVyCiAgICAgICAgICAgICAgICAgICAgbGFzdCBGSUVMRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHdlIGRvIG5vdCB3YW50IHRvIGtlZXAgdGhpcyBhdHRhY2htZW50LAogICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0IHdhcyBkZWxldGVkIGluIHRoZSByaWNodCB0ZXh0IGVkaXRvcgogICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkQ29udGVudElERm91bmQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQKICAgICAgICAgICAgbXkgJEZpbGVJRCA9ICRTZWxmLT57RkFRT2JqZWN0fS0+QXR0YWNobWVudEFkZCgKICAgICAgICAgICAgICAgICV7JEF0dGFjaG1lbnR9LAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgSW5saW5lID0+ICRJbmxpbmUsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICBpZiAoICEkRmlsZUlEICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRJbmxpbmU7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QnJvd3NlclJpY2hUZXh0fTsKCiAgICAgICAgICAgICMgcmV3cml0ZSB0aGUgVVJMcyBvZiB0aGUgaW5saW5lIGltYWdlcyBmb3IgdGhlIHVwbG9hZGVkIHBpY3R1cmVzCiAgICAgICAgICAgIG15ICRPayA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRSW5saW5lQXR0YWNobWVudFVSTFVwZGF0ZSgKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gJEF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBGaWxlSUQgICAgID0+ICRGaWxlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgaWYgKCAhJE9rICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IHVwZGF0ZSB0aGUgaW5saW5lIGltYWdlIFVSTHMgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJmb3IgRkFRIEl0ZW0jICckR2V0UGFyYW17SXRlbUlEfSchIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAkU2VsZi0+e1VwbG9hZENhY2hlT2JqZWN0fS0+Rm9ybUlEUmVtb3ZlKCBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9ICk7CgogICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaWYgd2UgbmVlZCB0byBjbG9zZSBhIHBvcHVwIHNjcmVlbiBvciBub3QKICAgICAgICBpZiAoICRTZWxmLT57U2NyZWVuVHlwZX0gZXEgJ1BvcHVwJyApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UG9wdXBDbG9zZSgKICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9JEdldFBhcmFte0l0ZW1JRH0iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9JEdldFBhcmFte0l0ZW1JRH0iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQoKc3ViIF9NYXNrTmV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICBteSAlRGF0YTsKCiAgICAjIGJ1aWxkIHZhbGlkIHNlbGVjdGlvbgogICAgJERhdGF7VmFsaWRPcHRpb259ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1ZhbGlkSUR9IHx8ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICk7CgogICAgIyBnZXQgY2F0ZWdvcmllcyAod2l0aCBjYXRlZ29yeSBsb25nIG5hbWVzKSB3aGVyZSB1c2VyIGhhcyByaWdodHMKICAgIG15ICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+R2V0VXNlckNhdGVnb3JpZXNMb25nTmFtZXMoCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBzZXQgbm8gc2VydmVyIGVycm9yIGNsYXNzIGFzIGRlZmF1bHQKICAgICRQYXJhbXtDYXRlZ29yeUlEU2VydmVyRXJyb3J9IHx8PSAnJzsKCiAgICAjIGJ1aWxkIGNhdGVnb3J5IHNlbGVjdGlvbgogICAgJERhdGF7Q2F0ZWdvcnlPcHRpb259ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnQ2F0ZWdvcnlJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgLiAkUGFyYW17Q2F0ZWdvcnlJRFNlcnZlckVycm9yfSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICk7CgogICAgIyBnZXQgdGhlIGxhbmd1YWdlIGxpc3QKICAgIG15ICVMYW5ndWFnZXMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UKICAgIG15ICRTZWxlY3RlZExhbmd1YWdlOwogICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2VJRH0gJiYgJExhbmd1YWdlc3sgJFBhcmFte0xhbmd1YWdlSUR9IH0gKSB7CgogICAgICAgICMgZ2V0IGxhbmd1YWdlIGZyb20gZ2l2ZW4gbGFuZ3VhZ2UgaWQKICAgICAgICAkU2VsZWN0ZWRMYW5ndWFnZSA9ICRMYW5ndWFnZXN7ICRQYXJhbXtMYW5ndWFnZUlEfSB9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgdXNlIHRoZSB1c2VyIGxhbmd1YWdlLCBvciBpZiBub3QgZm91bmQgJ2VuJwogICAgICAgICRTZWxlY3RlZExhbmd1YWdlID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckxhbmd1YWdlfSB8fCAnZW4nOwoKICAgICAgICAjIGdldCB1c2VyIGxhbmd1YWdlIElECiAgICAgICAgbXkgJFNlbGVjdGVkTGFuZ3VhZ2VJRCA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VMb29rdXAoIE5hbWUgPT4gJFNlbGVjdGVkTGFuZ3VhZ2UgKTsKCiAgICAgICAgIyBjaGVjayBpZiBMYW5kdWFnZUlEIGRvZXMgbm90IGV4c2l0cwogICAgICAgIGlmICggISRTZWxlY3RlZExhbmd1YWdlSUQgKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgbG93ZXN0IGxhbmd1YWdlIElECiAgICAgICAgICAgIG15IEBMYW5ndWFnZUlEcyA9IHNvcnQga2V5cyAlTGFuZ3VhZ2VzOwogICAgICAgICAgICAkU2VsZWN0ZWRMYW5ndWFnZUlEID0gJExhbmd1YWdlSURzWzBdOwoKICAgICAgICAgICAgIyBzZXQgdGhlIGxhbmd1YWdlIHdpdGggbG93ZXN0IGxhbmd1YWdlIElEIGFzIHNlbGVjdGVkIGxhbmd1YWdlCiAgICAgICAgICAgICRTZWxlY3RlZExhbmd1YWdlID0gJExhbmd1YWdlc3skU2VsZWN0ZWRMYW5ndWFnZUlEfTsKICAgICAgICB9CiAgICB9CgogICAgIyBidWlsZCB0aGUgbGFuZ3VhZ2Ugc2VsZWN0aW9uCiAgICAkRGF0YXtMYW5ndWFnZU9wdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVMYW5ndWFnZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnTGFuZ3VhZ2VJRCcsCiAgICAgICAgU2VsZWN0ZWRWYWx1ZSA9PiAkU2VsZWN0ZWRMYW5ndWFnZSwKICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDAsCiAgICApOwoKICAgICMgZ2V0IHRoZSBzdGF0ZXMgbGlzdAogICAgbXkgJVN0YXRlcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBzZWxlY3RlZCBzdGF0ZQogICAgbXkgJFNlbGVjdGVkU3RhdGU7CiAgICBpZiAoICRQYXJhbXtTdGF0ZUlEfSAmJiAkU3RhdGVzeyAkUGFyYW17U3RhdGVJRH0gfSApIHsKCiAgICAgICAgIyBnZXQgc3RhdGUgZnJvbSBnaXZlbiBzdGF0ZSBpZAogICAgICAgICRTZWxlY3RlZFN0YXRlID0gJFN0YXRlc3sgJFBhcmFte1N0YXRlSUR9IH07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgZGVmYXVsdCBzdGF0ZQogICAgICAgICRTZWxlY3RlZFN0YXRlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RGVmYXVsdDo6U3RhdGUnKSB8fCAnaW50ZXJuYWwgKGFnZW50KSc7CiAgICB9CgogICAgIyBidWlsZCB0aGUgc3RhdGUgc2VsZWN0aW9uCiAgICAkRGF0YXtTdGF0ZU9wdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVTdGF0ZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgU2VsZWN0ZWRWYWx1ZSA9PiAkU2VsZWN0ZWRTdGF0ZSwKICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDEsCiAgICApOwoKICAgICMgc2hvdyBmYXEgZWRpdCBzY3JlZW4KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnRkFRRWRpdCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzaG93IGxhbmd1YWdlcyBmaWVsZAogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9MYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgYXBwcm92YWwgZmllbGQKICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QXBwcm92YWxSZXF1aXJlZCcpICkgewoKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgICAgICBteSAlR3JvdXBzID0gcmV2ZXJzZSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgZmFxIGFwcHJvdmFsIGdyb3VwIGZyb20gY29uZmlnCiAgICAgICAgbXkgJEFwcHJvdmFsR3JvdXAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpBcHByb3ZhbEdyb3VwJykgfHwgJyc7CgogICAgICAgICMgYnVpbGQgdGhlIGFwcHJvdmFsIHNlbGVjdGlvbiBpZiB1c2VyIGlzIGluIHRoZSBhcHByb3ZhbCBncm91cAogICAgICAgIGlmICggJEdyb3Vwc3skQXBwcm92YWxHcm91cH0gKSB7CgogICAgICAgICAgICAkRGF0YXtBcHByb3ZhbE9wdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQXBwcm92ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgMCA9PiAnTm8nLAogICAgICAgICAgICAgICAgICAgIDEgPT4gJ1llcycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17QXBwcm92ZWR9IHx8IDAsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBcHByb3ZhbCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslRGF0YX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyB0aGUgYXR0YWNobWVudCB1cGxvYWQgYnV0dG9uCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRVcGxvYWQnLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgc2hvdyBhdHRhY2htZW50cwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkQXR0YWNobWVudCAoIEB7ICRQYXJhbXtBdHRhY2htZW50c30gfSApIHsKCiAgICAgICAgIyBkbyBub3Qgc2hvdyBpbmxpbmUgaW1hZ2VzIGFzIGF0dGFjaG1lbnRzCiAgICAgICAgIyAodGhleSBoYXZlIGEgY29udGVudCBpZCkKICAgICAgICBpZiAoICRBdHRhY2htZW50LT57Q29udGVudElEfSAmJiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQ7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50JywKICAgICAgICAgICAgRGF0YSA9PiAkQXR0YWNobWVudCwKICAgICAgICApOwogICAgfQoKICAgICMgYWRkIHJpY2ggdGV4dCBlZGl0b3IgamF2YXNjcmlwdAogICAgIyBvbmx5IGlmIGFjdGl2YXRlZCBhbmQgdGhlIGJyb3dzZXIgY2FuIGhhbmRsZSBpdAogICAgIyBvdGhlcndpc2UganVzdCBhIHRleHRhcmVhIGlzIHNob3duCiAgICBpZiAoICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUmljaFRleHQnLAogICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IEZBUSBDb250ZW50CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZBUUNvbnRlbnRTaG93KAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkU2VsZi0+e0ZBUU9iamVjdH0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBGQVFEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRRWRpdCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUV4cGxvcmVyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCBVc2VyT2JqZWN0IEdyb3VwT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBvYmplY3RzCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiRkFROjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgICRTZWxmLT57SW50ZXJmYWNlfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlR2V0KAogICAgICAgIE5hbWUgICA9PiAnaW50ZXJuYWwnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpBZ2VudDo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSb30gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBybyBwZXJtaXNzaW9uIScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgZGF0YQogICAgJFNlbGYtPntTdGFydEhpdH0gPSBpbnQoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0SGl0JyApIHx8IDEgKTsKICAgICRTZWxmLT57U2VhcmNoTGltaXR9ID0gJFNlbGYtPntDb25maWd9LT57U2VhcmNoTGltaXR9IHx8IDUwMDsKICAgICRTZWxmLT57RmlsdGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnJzsKICAgICRTZWxmLT57Vmlld30gICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZpZXcnICkgICB8fCAnJzsKICAgICRTZWxmLT57U29ydEJ5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdGQVFJRCc7CiAgICAkU2VsZi0+e09yZGVyQnl9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0Rvd24nOwoKICAgICMgZ2V0IGNhdGVnb3J5IGlkCiAgICBteSAkQ2F0ZWdvcnlJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NhdGVnb3J5SUQnICkgfHwgMDsKCiAgICAjIGNoZWNrIGZvciBub24gbnVtZXJpYyBDYXRlZ29yeUlECiAgICBpZiAoICRDYXRlZ29yeUlEICF+IC9cZCsvICkgewogICAgICAgICRDYXRlZ29yeUlEID0gMDsKICAgIH0KCiAgICAjIGdldCBjYXRlZ29yeSBieSBuYW1lCiAgICBteSAkQ2F0ZWdvcnkgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDYXRlZ29yeScgKSB8fCAnJzsKCiAgICAjIHRyeSB0byBnZXQgdGhlIENhdGVnb3J5IElEIGZyb20gY2F0ZWdvcnkgbmFtZSBpZiBubyBDYXRlZ29yeSBJRAogICAgaWYgKCAkQ2F0ZWdvcnkgJiYgISRDYXRlZ29yeUlEICkgewoKICAgICAgICAjIGdldCB0aGUgY2F0ZWdvcnkgdHJlZQogICAgICAgIG15ICRDYXRlZ29yeVRyZWUgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNhdGVnb3J5VHJlZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXZlcnNlIHRoZSBoYXMgZm9yIGVhc3kgbG9va3VwCiAgICAgICAgbXkgJVJldmVyc2VDYXRlZ29yeVRyZWUgPSByZXZlcnNlICV7JENhdGVnb3J5VHJlZX07CgogICAgICAgICRDYXRlZ29yeUlEID0gJFJldmVyc2VDYXRlZ29yeVRyZWV7JENhdGVnb3J5fSB8fCAwOwogICAgfQoKICAgICMgZ2V0IG5hdmlnYXRpb24gYmFyIG9wdGlvbgogICAgbXkgJE5hdiA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ05hdicgKSB8fCAnJzsKCiAgICAjIHNhdmUgY2F0ZWdvcnkgaWQgdG8gc2Vzc2lvbiwgdG8gYmUgdXNlZCBpbiBGQVEgYWRkIHNjcmVlbgogICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0Vmlld2VkQ2F0ZWdvcnknLAogICAgICAgIFZhbHVlICAgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICk7CgogICAgIyBzdG9yZSBsYXN0IG92ZXJ2aWV3IHNjcmVlbiAoZm9yIGJhY2sgbWVudSBhY3Rpb24pCiAgICAjIGJ1dCBvbmx5IGlmIHRoZSBGQVEgZXhwbG9yZXIgaXMgbm90IHNob3duIGFzIG92ZXJsYXkKICAgIGlmICggISROYXYgfHwgJE5hdiBuZSAnTm9uZScgKSB7CgogICAgICAgIG15ICRVUkwgPSAiQWN0aW9uPUFnZW50RkFRRXhwbG9yZXI7U29ydEJ5PSRTZWxmLT57U29ydEJ5fSIKICAgICAgICAgICAgLiAiO0NhdGVnb3J5SUQ9JENhdGVnb3J5SUQ7TmF2PSROYXYiCiAgICAgICAgICAgIC4gIjtPcmRlckJ5PSRTZWxmLT57T3JkZXJCeX07U3RhcnRIaXQ9JFNlbGYtPntTdGFydEhpdH0iOwogICAgICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuT3ZlcnZpZXcnLAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFVSTCwKICAgICAgICApOwogICAgICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CiAgICB9CgogICAgIyB0cnkgdG8gZ2V0IHRoZSBjYXRlZ29yeSBkYXRhCiAgICBteSAlQ2F0ZWdvcnlEYXRhOwogICAgaWYgKCRDYXRlZ29yeUlEKSB7CgogICAgICAgICMgZ2V0IGNhdGVnb3J5IGRhdGEKICAgICAgICAlQ2F0ZWdvcnlEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICElQ2F0ZWdvcnlEYXRhICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlRoZSBDYXRlZ29yeUlEICRDYXRlZ29yeUlEIGlzIGludmFsaWQuIiwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbi4nLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB1c2VyIHBlcm1pc3Npb24KICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2hlY2tDYXRlZ29yeVVzZXJQZXJtaXNzaW9uKAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgICAgIGlmICggISRQZXJtaXNzaW9uICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgaGF2ZSBubyBwZXJtaXNzaW9uIGZvciB0aGlzIGNhdGVnb3J5IScsCiAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkT3V0cHV0OwogICAgaWYgKCAkTmF2ICYmICROYXYgZXEgJ05vbmUnICkgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgc21hbGwgYW5kIG5vIE5hdmJhcgogICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVHlwZSA9PiAnU21hbGwnICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZpZ2F0aW9uIGJhcgogICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICB9CgogICAgIyBzaG93IEZBUSBwYXRoCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZBUVBhdGhTaG93KAogICAgICAgIEZBUU9iamVjdCAgPT4gJFNlbGYtPntGQVFPYmplY3R9LAogICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgTmF2ICAgICAgICA9PiAkTmF2LAogICAgKTsKCiAgICAjIGdldCBhbGwgZGlyZWN0IHN1YmNhdGVnb3JpZXMgb2YgdGhlIHNlbGVjdGVkIGNhdGVnb3J5CiAgICBteSAkQ2F0ZWdvcnlJRHNSZWYgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkFnZW50Q2F0ZWdvcnlTZWFyY2goCiAgICAgICAgUGFyZW50SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgc3ViY2F0ZWdvcmllcyBsaXN0CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdTdWJjYXRlZ29yaWVzJyApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnICk7CgogICAgIyBjaGVjayBpZiB0aGVyZSBhcmUgc3ViY2F0ZWdvcmllcwogICAgaWYgKCAkQ2F0ZWdvcnlJRHNSZWYgJiYgcmVmICRDYXRlZ29yeUlEc1JlZiBlcSAnQVJSQVknICYmIEB7JENhdGVnb3J5SURzUmVmfSApIHsKCiAgICAgICAgIyBzaG93IGRhdGEgZm9yIGVhY2ggc3ViY2F0ZWdvcnkKICAgICAgICBmb3IgbXkgJFN1YkNhdGVnb3J5SUQgKCBAeyRDYXRlZ29yeUlEc1JlZn0gKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgY2F0ZWdvcnkgZGF0YQogICAgICAgICAgICBteSAlU3ViQ2F0ZWdvcnlEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJFN1YkNhdGVnb3J5SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBudW1iZXIgb2Ygc3ViY2F0ZWdvcmllcyBvZiB0aGlzIHN1YmNhdGVnb3J5CiAgICAgICAgICAgICRTdWJDYXRlZ29yeURhdGF7U3ViQ2F0ZWdvcnlDb3VudH0gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNhdGVnb3J5Q291bnQoCiAgICAgICAgICAgICAgICBQYXJlbnRJRHMgPT4gWyRTdWJDYXRlZ29yeUlEXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCB0aGUgbnVtYmVyIG9mIGZhcSBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5CiAgICAgICAgICAgICRTdWJDYXRlZ29yeURhdGF7QXJ0aWNsZUNvdW50fSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRQ291bnQoCiAgICAgICAgICAgICAgICBDYXRlZ29yeUlEcyAgPT4gWyRTdWJDYXRlZ29yeUlEXSwKICAgICAgICAgICAgICAgIEl0ZW1TdGF0ZXMgICA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgICAgICAgICBPbmx5QXBwcm92ZWQgPT4gMCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCB0aGUgY2F0ZWdvcnkgZGF0YQogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHRSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmF2ID0+ICROYXYsCiAgICAgICAgICAgICAgICAgICAgJVN1YkNhdGVnb3J5RGF0YSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlzIGRpc3BsYXllZAogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZWFyY2ggYWxsIEZBUSBhcnRpY2xlcyB3aXRoaW4gdGhlIGdpdmVuIGNhdGVnb3J5CiAgICBteSBAVmlld2FibGVGQVFJRHMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUVNlYXJjaCgKICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFsgJFNlbGYtPntTb3J0Qnl9IF0sCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbICRTZWxmLT57T3JkZXJCeX0gXSwKICAgICAgICBMaW1pdCAgICAgICAgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFN0YXRlcyAgICAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgIEludGVyZmFjZSAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgIENhdGVnb3J5SURzICAgICAgPT4gWyRDYXRlZ29yeUlEXSwKICAgICk7CgogICAgIyBidWlsZCBuZWNjZXNzYXJ5IHN0dWZmIGZvciB0aGUgRkFRIGFydGljbGUgbGlzdAogICAgbXkgJExpbmtQYWdlID0gJ0ZpbHRlcj0nCiAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnO05hdj0nIC4gJE5hdgogICAgICAgIC4gJztTb3J0Qnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntTb3J0Qnl9ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e09yZGVyQnl9ICkKICAgICAgICAuICc7Q2F0ZWdvcnlJRD0nIC4gJENhdGVnb3J5SUQKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rU29ydCA9ICdGaWx0ZXI9JwogICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztWaWV3PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJztOYXY9JyAuICROYXYKICAgICAgICAuICc7Q2F0ZWdvcnlJRD0nIC4gJENhdGVnb3J5SUQKICAgICAgICAuICc7JzsKICAgIG15ICRGaWx0ZXJMaW5rID0gJ1NvcnRCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e1NvcnRCeX0gKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57T3JkZXJCeX0gKQogICAgICAgIC4gJztWaWV3PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJztOYXY9JyAuICROYXYKICAgICAgICAuICc7Q2F0ZWdvcnlJRD0nIC4gJENhdGVnb3J5SUQKICAgICAgICAuICc7JzsKCiAgICAjIGZpbmQgb3V0IHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHNob3duCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSApIHsKCiAgICAgICAgIyBnZXQgYWxsIHBvc3NpYmxlIGNvbHVtbnMgZnJvbSBjb25maWcKICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgIyBnZXQgdGhlIGNvbHVtbiBuYW1lcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgICAgIENPTFVNTk5BTUU6CiAgICAgICAgZm9yIG15ICROYW1lICggc29ydCBrZXlzICVQb3NzaWJsZUNvbHVtbiApIHsKICAgICAgICAgICAgbmV4dCBDT0xVTU5OQU1FIGlmICEkUG9zc2libGVDb2x1bW57JE5hbWV9OwogICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJE5hbWU7CiAgICAgICAgfQoKICAgICAgICAjIGVuZm9yY2UgRkFRIG51bWJlciBjb2x1bW4gc2luY2UgaXMgdGhlIGxpbmsgTWFzdGVyQWN0aW9uIGhvb2sKICAgICAgICBpZiAoICEkUG9zc2libGVDb2x1bW57J051bWJlcid9ICkgewogICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJ051bWJlcic7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgdGhlIHRpdGxlIHZhbHVlIChvbiB0b3Agb2YgdGhlIGFydGljbGUgbGlzdCkKICAgIG15ICRUaXRsZSA9ICRDYXRlZ29yeURhdGF7TmFtZX0KICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpEZWZhdWx0OjpSb290Q2F0ZWdvcnlOYW1lJykKICAgICAgICB8fCAnJzsKCiAgICAjIGJ1aWxkIHRoZSBodG1sIGZvciB0aGUgbGlzdCBvZiBGQVEgYXJ0aWNsZXMgaW4gdGhlIGdpdmVuIGNhdGVnb3J5CiAgICBteSAkRkFRSXRlbUxpc3RIVE1MID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFMaXN0U2hvdygKICAgICAgICBGQVFJRHMgICAgID0+IFxAVmlld2FibGVGQVFJRHMsCiAgICAgICAgVG90YWwgICAgICA9PiBzY2FsYXIgQFZpZXdhYmxlRkFRSURzLAogICAgICAgIFZpZXcgICAgICAgPT4gJFNlbGYtPntWaWV3fSwKICAgICAgICBFbnYgICAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlICAgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ICAgPT4gJExpbmtTb3J0LAogICAgICAgIExpbmtGaWx0ZXIgPT4gJEZpbHRlckxpbmssCgogICAgICAgIFRpdGxlTmFtZSAgPT4gJ0ZBUSBBcnRpY2xlcycsCiAgICAgICAgVGl0bGVWYWx1ZSA9PiAkVGl0bGUsCgogICAgICAgIExpbWl0ICAgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgIEZpbHRlciAgICAgID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBGaWx0ZXJMaW5rICA9PiAkRmlsdGVyTGluaywKICAgICAgICBPcmRlckJ5ICAgICA9PiAkU2VsZi0+e09yZGVyQnl9LAogICAgICAgIFNvcnRCeSAgICAgID0+ICRTZWxmLT57U29ydEJ5fSwKICAgICAgICBTaG93Q29sdW1ucyA9PiBcQFNob3dDb2x1bW5zLAogICAgICAgIE91dHB1dCAgICAgID0+IDEsCiAgICAgICAgTmF2ICAgICAgICAgPT4gJE5hdiwKICAgICk7CgogICAgIyBzaG93IHRoZSBGQVEgYXJ0aWNsZSBsaXN0CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZBUUl0ZW1MaXN0JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgRkFRSXRlbUxpc3RIVE1MID0+ICRGQVFJdGVtTGlzdEhUTUwsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzZXQgUXVpY2tTZWFyY2ggbW9kZQogICAgbXkgJE1vZGUgPSAnQWdlbnQnOwogICAgaWYgKCAkTmF2IGVxICdOb25lJyApIHsKICAgICAgICAkTW9kZSA9ICdBZ2VudFNtYWxsJzsKICAgIH0KCiAgICAjIHNob3cgUXVpY2tTZWFyY2gKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RkFRU2hvd1F1aWNrU2VhcmNoKAogICAgICAgIE1vZGUgICAgICAgICAgICA9PiAkTW9kZSwKICAgICAgICBJbnRlcmZhY2UgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBOYXYgICAgICAgICAgICAgPT4gJE5hdiwKICAgICk7CgogICAgbXkgJUluZm9Cb3hSZXN1bHRzOwoKICAgICMgc2hvdyBsYXN0IGFkZGVkIGFuZCBsYXN0IHVwZGF0ZWQgYXJ0aWNsZXMKICAgIGZvciBteSAkVHlwZSAocXcoTGFzdENyZWF0ZSBMYXN0Q2hhbmdlKSkgewoKICAgICAgICBteSAkU2hvd09rID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFTaG93TGF0ZXN0TmV3c0JveCgKICAgICAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRTZWxmLT57RkFRT2JqZWN0fSwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICRUeXBlLAogICAgICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgICAgID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBOYXYgICAgICAgICAgICAgPT4gJE5hdiwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJFNob3dPayApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgdGhlIE5ld3NCb3hSZXN1bHQKICAgICAgICAkSW5mb0JveFJlc3VsdHN7JFR5cGV9ID0gJFNob3dPazsKCiAgICB9CgogICAgIyBzaG93IHRvcCB0ZW4gYXJ0aWNsZXMKICAgIG15ICRTaG93T2sgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZBUVNob3dUb3AxMCgKICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJFNlbGYtPntGQVFPYmplY3R9LAogICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnQWdlbnQnLAogICAgICAgIENhdGVnb3J5SUQgICAgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICBJbnRlcmZhY2UgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBOYXYgICAgICAgICAgICAgPT4gJE5hdiwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJFNob3dPayApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpOwogICAgfQoKICAgICMgc3RvcmUgdGhlIE5ld3NCb3hSZXN1bHQKICAgICRJbmZvQm94UmVzdWx0c3tUb3AxMH0gPSAkU2hvd09rOwoKICAgICMgc2V0IHRoZSBTaWRlYmFyIHdpZHRoCiAgICBteSAkU2lkZWJhckNsYXNzID0gJ0xhcmdlJzsKCiAgICAjIGNoZWNrIGlmIGFsbCBJbmZvQm94ZXMgYXJlIGVtcHR5IGFuZCBoaWRlIHRoZSBTaWRlYmFyCiAgICBpZiAoCiAgICAgICAgJEluZm9Cb3hSZXN1bHRze0xhc3RDcmVhdGV9IGVxIC0xCiAgICAgICAgJiYgJEluZm9Cb3hSZXN1bHRze0xhc3RDaGFuZ2V9IGVxIC0xCiAgICAgICAgJiYgJEluZm9Cb3hSZXN1bHRze1RvcDEwfSBlcSAtMQogICAgICAgICkKICAgIHsKICAgICAgICAkU2lkZWJhckNsYXNzID0gJ0hpZGRlbic7CiAgICB9CgogICAgaWYgKCAkTmF2ICYmICROYXYgZXEgJ05vbmUnICkgewogICAgICAgICRTaWRlYmFyQ2xhc3MgPSAnTWVkaXVtJzsKICAgIH0KCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRRXhwbG9yZXInLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBTaWRlYmFyQ2xhc3MgPT4gJFNpZGViYXJDbGFzcywKICAgICAgICAgICAgJUNhdGVnb3J5RGF0YSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgIGlmICggJE5hdiAmJiAkTmF2IGVxICdOb25lJyApIHsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgIH0KCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUhpc3Rvcnk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgVXNlck9iamVjdCBHcm91cE9iamVjdCBDb25maWdPYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBhZGRpdGlvbmFsIG9iamVjdHMKICAgICRTZWxmLT57RkFRT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSb30gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBybyBwZXJtaXNzaW9uIScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGdldCBuZWVkZWQgSXRlbSBpZAogICAgJEdldFBhcmFte0l0ZW1JRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJdGVtSUQnICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRHZXRQYXJhbXtJdGVtSUR9ICkgewoKICAgICAgICAjIGVycm9yIHBhZ2UKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ2FuJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBJdGVtSUQgaXMgZ2l2ZW4hIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEZBUSBpdGVtIGRhdGEKICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJUZBUURhdGEgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgIH0KCiAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgbXkgJFBlcm1pc3Npb24gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNoZWNrQ2F0ZWdvcnlVc2VyUGVybWlzc2lvbigKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBDYXRlZ29yeUlEID0+ICRGQVFEYXRhe0NhdGVnb3J5SUR9LAogICAgKTsKCiAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgaWYgKCAhJFBlcm1pc3Npb24gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgaGF2ZSBubyBwZXJtaXNzaW9uIGZvciB0aGlzIGNhdGVnb3J5IScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgYXJ0aWNsZSBoaXN0b3J5CiAgICBteSAkSGlzdG9yeSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRSGlzdG9yeUdldCgKICAgICAgICBJdGVtSUQgPT4gJEZBUURhdGF7SXRlbUlEfSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBmb3IgbXkgJEhpc3RvcnlFbnRyeSAoIEB7JEhpc3Rvcnl9ICkgewoKICAgICAgICAjIHJlcGxhY2UgSUQgdG8gZnVsbCB1c2VyIG5hbWUgb24gQ3JlYXRlZEJ5IGtleQogICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkSGlzdG9yeUVudHJ5LT57Q3JlYXRlZEJ5fSwKICAgICAgICAgICAgQ2FjaGVkID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkSGlzdG9yeUVudHJ5LT57Q3JlYXRlZEJ5fSA9ICIkVXNlcntVc2VyTG9naW59ICgkVXNlcntVc2VyRmlyc3RuYW1lfSAkVXNlcntVc2VyTGFzdG5hbWV9KSI7CgogICAgICAgICMgY2FsbCBSb3cgYmxvY2sKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICV7JEhpc3RvcnlFbnRyeX0sCiAgICAgICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigKICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgICAgIFRpdGxlID0+ICdGQVFIaXN0b3J5JywKICAgICk7CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUhpc3RvcnknLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKAogICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUpvdXJuYWw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0IE1haW5PYmplY3QgRW5jb2RlT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBvYmplY3RzCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCBjb25maWcgZm9yIGZyb250ZW5kCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiRkFROjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIGRhdGEKICAgICRTZWxmLT57U3RhcnRIaXR9ID0gaW50KCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxICk7CiAgICAkU2VsZi0+e0pvdXJuYWxMaW1pdH0gPSAkU2VsZi0+e0NvbmZpZ30tPntKb3VybmFsTGltaXR9IHx8IDUwMDsKCiAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgIGlmICggISRTZWxmLT57QWNjZXNzUm99ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgcm8gcGVybWlzc2lvbiEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgSm91cm5hbCBlbnRyaWVzCiAgICBteSAkSm91cm5hbCA9ICRTZWxmLT57RkFRT2JqZWN0fS0+SGlzdG9yeUdldCggVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSApOwoKICAgICMgZmluZCBvdXQgd2hpY2ggY29sdW1ucyBzaG91bGQgYmUgc2hvd24KICAgIG15IEBTaG93Q29sdW1uczsKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9ICkgewoKICAgICAgICAjIGdldCBhbGwgcG9zc2libGUgY29sdW1ucyBmcm9tIGNvbmZpZwogICAgICAgIG15ICVQb3NzaWJsZUNvbHVtbiA9ICV7ICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSB9OwoKICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgQ09MVU1OTkFNRToKICAgICAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJVBvc3NpYmxlQ29sdW1uICkgewogICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkTmFtZTsKICAgICAgICB9CgogICAgICAgICMgZW5mb3JjZSBGQVEgbnVtYmVyIGNvbHVtbiBzaW5jZSBpcyB0aGUgbGluayBNYXN0ZXJBY3Rpb24gaG9vawogICAgICAgIGlmICggISRQb3NzaWJsZUNvbHVtbnsnTnVtYmVyJ30gKSB7CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAnTnVtYmVyJzsKICAgICAgICB9CiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVmFsdWUgPT4gJ0ZBUSBKb3VybmFsJywKICAgICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgb3V0b3V0IEpvdXJuYWwKICAgICRPdXRwdXQgLj0gJFNlbGYtPl9GQVFKb3VybmFsU2hvdygKICAgICAgICBKb3VybmFsICAgICA9PiAkSm91cm5hbCwKICAgICAgICBUb3RhbCAgICAgICA9PiBzY2FsYXIgQHskSm91cm5hbH0sCiAgICAgICAgVGl0bGVOYW1lICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0ZBUSBKb3VybmFsJyksCiAgICAgICAgTGltaXQgICAgICAgPT4gJFNlbGYtPntKb3VybmFsTGltaXR9LAogICAgICAgIFNob3dDb2x1bW5zID0+IFxAU2hvd0NvbHVtbnMsCiAgICApOwoKICAgICMgYnVpbGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBfRkFRSm91cm5hbFNob3cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGxvb2t1cCBsYXRlc3QgdXNlZCB2aWV3IG1vZGUKICAgIGlmICggISRQYXJhbXtWaWV3fSAmJiAkU2VsZi0+eyAnVXNlckZBUUpvdXJuYWxPdmVydmlldycgLiAkU2VsZi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAkUGFyYW17Vmlld30gPSAkU2VsZi0+eyAnVXNlckZBUUpvdXJuYWxPdmVydmlldycgLiAkU2VsZi0+e0FjdGlvbn0gfTsKICAgIH0KCiAgICAjIHNldCBmcm9udGVuZAogICAgbXkgJEZyb250ZW5kID0gJ0FnZW50JzsKCiAgICAjIHNldCBkZWZhdXQgdmlldyBtb2RlIHRvICdzbWFsbCcKICAgIG15ICRWaWV3ID0gJFBhcmFte1ZpZXd9IHx8ICdTbWFsbCc7CgogICAgIyBzdG9yZSBsYXRlc3QgdmlldyBtb2RlCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJGQVFKb3VybmFsT3ZlcnZpZXcnIC4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFZhbHVlICAgICA9PiAkVmlldywKICAgICk7CgogICAgIyBnZXQgYmFja2VuZCBmcm9tIGNvbmZpZwogICAgbXkgJEJhY2tlbmRzID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RnJvbnRlbmQ6OkpvdXJuYWxPdmVydmlldycpOwogICAgaWYgKCAhJEJhY2tlbmRzICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05lZWQgY29uZmlnIG9wdGlvbiBGQVE6OkZyb250ZW5kOjpPdmVydmlldycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBoYXNoLXJlZgogICAgaWYgKCByZWYgJEJhY2tlbmRzIG5lICdIQVNIJyApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICdDb25maWcgb3B0aW9uIEZBUTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3IG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGNvbmZpZyBrZXkKICAgIGlmICggISRCYWNrZW5kcy0+eyRWaWV3fSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBjb25maWcgb3B0aW9uIGZvdW5kIGZvciB0aGUgdmlldyAnJFZpZXcnISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG5hdiBiYXIKICAgIG15ICRTdGFydEhpdCA9IGludCggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnRIaXQnICkgfHwgMSApOwoKICAgICMgZ2V0IHBlcnNvbmFsIHBhZ2Ugc2hvd24gY291bnQKICAgIG15ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSA9ICdVc2VyRkFRSm91cm5hbE92ZXJ2aWV3JyAuICRWaWV3IC4gJ1BhZ2VTaG93bic7CiAgICBteSAkUGFnZVNob3duICAgICAgICAgICAgICAgPSAkU2VsZi0+eyRQYWdlU2hvd25QcmVmZXJlbmNlc0tleX0gfHwgMTA7CiAgICBteSAkR3JvdXAgICAgICAgICAgICAgICAgICAgPSAnRkFRSm91cm5hbE92ZXJ2aWV3JyAuICRWaWV3IC4gJ1BhZ2VTaG93bic7CgogICAgIyBjaGVjayBzdGFydCBvcHRpb24sIGlmIGhpZ2hlciB0aGVuIGVsZW1lbnRzIGF2YWlsYWJsZSwgc2V0CiAgICAjIGl0IHRvIHRoZSBsYXN0IG92ZXJ2aWV3IHBhZ2UgKFRoYW5rcyB0byBTdGVmYW4gU2NobWlkdCEpCiAgICBpZiAoICRTdGFydEhpdCA+ICRQYXJhbXtUb3RhbH0gKSB7CiAgICAgICAgbXkgJFBhZ2VzID0gaW50KCAoICRQYXJhbXtUb3RhbH0gLyAkUGFnZVNob3duICkgKyAwLjk5OTk5ICk7CiAgICAgICAgJFN0YXJ0SGl0ID0gKCAoICRQYWdlcyAtIDEgKSAqICRQYWdlU2hvd24gKSArIDE7CiAgICB9CgogICAgIyBnZXQgZGF0YSBzZWxlY3Rpb24KICAgIG15ICVEYXRhOwogICAgbXkgJENvbmZpZyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQcmVmZXJlbmNlc0dyb3VwcycpOwogICAgaWYgKCAkQ29uZmlnICYmICRDb25maWctPnskR3JvdXB9ICYmICRDb25maWctPnskR3JvdXB9LT57RGF0YX0gKSB7CiAgICAgICAgJURhdGEgPSAleyAkQ29uZmlnLT57JEdyb3VwfS0+e0RhdGF9IH07CiAgICB9CgogICAgIyBzZXQgcGFnZSBsaW1pdCBhbmQgYnVpbGQgcGFnZSBuYXYKICAgIG15ICRMaW1pdCA9ICRQYXJhbXtMaW1pdH0gfHwgMjBfMDAwOwogICAgbXkgJVBhZ2VOYXYgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgQWN0aW9uICAgID0+ICdBY3Rpb249JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0FjdGlvbn0sCiAgICAgICAgTGluayAgICAgID0+ICRQYXJhbXtMaW5rUGFnZX0sCiAgICApOwoKICAgICMgYnVpbGQgc2hvd24gZmFxIGFydGljbGVzIG9uIGEgcGFnZQogICAgJFBhcmFte1JlcXVlc3RlZFVSTH0gICAgPSAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSI7CiAgICAkUGFyYW17R3JvdXB9ICAgICAgICAgICA9ICRHcm91cDsKICAgICRQYXJhbXtQcmVmZXJlbmNlc0tleX0gID0gJFBhZ2VTaG93blByZWZlcmVuY2VzS2V5OwogICAgJFBhcmFte1BhZ2VTaG93blN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIE5hbWUgICAgICAgPT4gJFBhZ2VTaG93blByZWZlcmVuY2VzS2V5LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhZ2VTaG93biwKICAgICAgICBEYXRhICAgICAgID0+IFwlRGF0YSwKICAgICk7CgogICAgIyBzdG9yZSBsYXN0IG92ZXJ2aWV3IHNjcmVlbiAoZm9yIGJhY2sgbWVudSBhY3Rpb24pCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgVmFsdWUgICAgID0+ICRQYXJhbXtSZXF1ZXN0ZWRVUkx9LAogICAgKTsKICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkUGFyYW17UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgIyBidWlsZCBuYXZiYXIgY29udGVudAogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIGxvb3Agb3ZlciBjb25maWd1cmVkIGJhY2tlbmRzCiAgICBmb3IgbXkgJEJhY2tlbmQgKCBzb3J0IGtleXMgJXskQmFja2VuZHN9ICkgewoKICAgICAgICAjIGJ1aWxkIG5hdmJhciB2aWV3IG1vZGUKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGN1cnJlbnQgdmlldyBpcyBjb25maWd1cmVkIGluIGJhY2tlbmQKICAgICAgICBpZiAoICRWaWV3IGVxICRCYWNrZW5kICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHBhZ2UgbmF2IGlzIGF2YWlsYWJsZQogICAgaWYgKCVQYWdlTmF2KSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhZ2VOYXYsCiAgICAgICAgKTsKCiAgICAgICAgIyBkb24ndCBzaG93IGNvbnRleHQgc2V0dGluZ3MgaW4gQUpBWCBjYXNlIChlLiBnLiBpbiBjdXN0b21lciBGQVEgaGlzdG9yeSksCiAgICAgICAgIyBiZWNhdXNlIHRoZSBzdWJtaXQgd2l0aCBwYWdlIHJlbG9hZCB3aWxsIG5vdCB3b3JrIHRoZXJlCiAgICAgICAgaWYgKCAhJFBhcmFte0FKQVh9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ29udGV4dFNldHRpbmdzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgaHRtbCBjb250ZW50CiAgICBteSAkT3V0cHV0TmF2QmFyID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgY3JlYXRlIG91dHB1dAogICAgbXkgJE91dHB1dFJhdyAuPSAkT3V0cHV0TmF2QmFyOwoKICAgICMgbG9hZCBtb2R1bGUKICAgIGlmICggISRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0gKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICB9CgogICAgIyBjaGVjayBmb3IgYmFja2VuZCBvYmplY3QKICAgIG15ICRPYmplY3QgPSAkQmFja2VuZHMtPnskVmlld30tPntNb2R1bGV9LT5uZXcoICV7JFNlbGZ9ICk7CiAgICByZXR1cm4gaWYgISRPYmplY3Q7CgogICAgIyBydW4gbW9kdWxlCiAgICBteSAkT3V0cHV0ID0gJE9iamVjdC0+UnVuKAogICAgICAgICVQYXJhbSwKICAgICAgICBMaW1pdCAgICAgPT4gJExpbWl0LAogICAgICAgIFN0YXJ0SGl0ICA9PiAkU3RhcnRIaXQsCiAgICAgICAgUGFnZVNob3duID0+ICRQYWdlU2hvd24sCiAgICAgICAgQWxsSGl0cyAgID0+ICRQYXJhbXtUb3RhbH0gfHwgMCwKICAgICAgICBGcm9udGVuZCAgPT4gJEZyb250ZW5kLAogICAgKTsKCiAgICAkT3V0cHV0UmF3IC49ICRPdXRwdXQ7CgogICAgIyBjcmVhdGUgb3ZlcnZpZXcgbmF2IGJhcgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyByZXR1cm4gY29udGVudCBpZiBhdmFpbGFibGUKICAgIHJldHVybiAkT3V0cHV0UmF3Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUxhbmd1YWdlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBvYmplY3RzCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKCiAgICAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSd30gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBydyBwZXJtaXNzaW9uIScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlR2V0UGFyYW07CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjaGFuZ2UKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2UnICYmICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CgogICAgICAgICMgZ2V0IHRoZSBMYW5ndWFnZUlECiAgICAgICAgbXkgJExhbmd1YWdlSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdMYW5ndWFnZUlEJyApIHx8ICcnOwoKICAgICAgICAjIGNoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMKICAgICAgICBpZiAoICEkTGFuZ3VhZ2VJRCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdObyBMYW5ndWFnZUlEIGlzIGdpdmVuIScsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbGFuZ3VhZ2UgZGF0YQogICAgICAgIG15ICVMYW5ndWFnZURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlR2V0KAogICAgICAgICAgICBMYW5ndWFnZUlEID0+ICRMYW5ndWFnZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgb3V0cHV0IGNoYW5nZSBsYW5ndWFnZSBzY3JlZW4KICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgJUxhbmd1YWdlRGF0YSwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUxhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjaGFuZ2UgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlQWN0aW9uJyAmJiAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayBmb3IgbmFtZSBhbmQgbGFuZ3VhZ2UgaWQKICAgICAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoTGFuZ3VhZ2VJRCBOYW1lKSkgewoKICAgICAgICAgICAgIyBzdG9yZSBuZWVkZWQgcGFyYW1ldGVycyBpbiAlR2V0UGFyYW0gdG8gbWFrZSBpdCByZWxvYWRhYmxlCiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwoKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewoKICAgICAgICAgICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAgICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgID0+ICdDaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgIE5hbWVTZXJ2ZXJFcnJvciAgICAgICAgPT4gJ1NlcnZlckVycm9yJywKICAgICAgICAgICAgICAgICAgICBOYW1lU2VydmVyRXJyb3JNZXNzYWdlID0+ICdUaGUgbmFtZSBpcyByZXF1aXJlZCEnLAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFMYW5ndWFnZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZm9vdGVyCiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIGR1cGxpY2F0ZSBsYW5ndWFnZSBuYW1lCiAgICAgICAgbXkgJExhbmd1YWdlRXhpc3RzQWxyZWFkeSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VEdXBsaWNhdGVDaGVjaygKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkR2V0UGFyYW17TmFtZX0sCiAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJEdldFBhcmFte0xhbmd1YWdlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgdGhlIGVkaXQgc2NyZWVuIGFnYWluCiAgICAgICAgaWYgKCRMYW5ndWFnZUV4aXN0c0FscmVhZHkpIHsKCiAgICAgICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgICA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgICAgIE5hbWVTZXJ2ZXJFcnJvciAgICAgICAgPT4gJ1NlcnZlckVycm9yJywKICAgICAgICAgICAgICAgIE5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UgPT4gJ1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJywKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFMYW5ndWFnZScsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIGxhbmd1YWdlCiAgICAgICAgbXkgJExhbmd1YWdlVXBkYXRlU3VjY2Vzc2Z1bCA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VVcGRhdGUoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJExhbmd1YWdlVXBkYXRlU3VjY2Vzc2Z1bCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBvdmVydmlldwogICAgICAgICRTZWxmLT5fT3ZlcnZpZXcoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICBJbmZvID0+ICdGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUxhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYWRkCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkJyAmJiAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewoKICAgICAgICAjIGdldCB0aGUgbmV3IG5hbWUKICAgICAgICAkR2V0UGFyYW17TmFtZX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQWRkJywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUxhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkQWN0aW9uJyAmJiAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBnZXQgdGhlIG5hbWUKICAgICAgICAkR2V0UGFyYW17TmFtZX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwoKICAgICAgICAjIGNoZWNrIGZvciBuYW1lCiAgICAgICAgaWYgKCAhJEdldFBhcmFte05hbWV9ICkgewoKICAgICAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgID0+ICdBZGQnLAogICAgICAgICAgICAgICAgTmFtZVNlcnZlckVycm9yICAgICAgICA9PiAnU2VydmVyRXJyb3InLAogICAgICAgICAgICAgICAgTmFtZVNlcnZlckVycm9yTWVzc2FnZSA9PiAnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJywKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFMYW5ndWFnZScsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBmb3IgZHVwbGljYXRlIGxhbmd1YWdlIG5hbWUKICAgICAgICBteSAkTGFuZ3VhZ2VFeGlzdHNBbHJlYWR5ID0gJFNlbGYtPntGQVFPYmplY3R9LT5MYW5ndWFnZUR1cGxpY2F0ZUNoZWNrKAogICAgICAgICAgICBOYW1lICAgPT4gJEdldFBhcmFte05hbWV9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyB0aGUgZWRpdCBzY3JlZW4gYWdhaW4KICAgICAgICBpZiAoJExhbmd1YWdlRXhpc3RzQWxyZWFkeSkgewogICAgICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgID0+ICdBZGQnLAogICAgICAgICAgICAgICAgTmFtZVNlcnZlckVycm9yICAgICAgICA9PiAnU2VydmVyRXJyb3InLAogICAgICAgICAgICAgICAgTmFtZVNlcnZlckVycm9yTWVzc2FnZSA9PiAiVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEiLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUxhbmd1YWdlJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmb290ZXIKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAjIGFkZCB0aGUgbmV3IGxhbmd1YWdlCiAgICAgICAgbXkgJExhbmd1YWdlQWRkU3VjY2Vzc2Z1bCA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VBZGQoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJExhbmd1YWdlQWRkU3VjY2Vzc2Z1bCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBvdmVydmlldwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgIEluZm8gPT4gJ0ZBUSBsYW5ndWFnZSBhZGRlZCEnLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPl9PdmVydmlldygpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZGVsZXRlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVsZXRlJyAmJiAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewoKICAgICAgICAjIGdldCB0aGUgTGFuZ3VhZ2VJRAogICAgICAgIG15ICRMYW5ndWFnZUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnTGFuZ3VhZ2VJRCcgKSB8fCAnJzsKCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgaWYgKCAhJExhbmd1YWdlSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gTGFuZ3VhZ2VJRCBpcyBnaXZlbiEnLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGxhbmd1YWdlIGRhdGEKICAgICAgICBteSAlTGFuZ3VhZ2VEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5MYW5ndWFnZUdldCgKICAgICAgICAgICAgTGFuZ3VhZ2VJRCA9PiAkTGFuZ3VhZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJUxhbmd1YWdlRGF0YSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgIG15IEBBZmZlY3RlZEl0ZW1zID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFTZWFyY2goCiAgICAgICAgICAgIExhbmd1YWdlSURzID0+IFskTGFuZ3VhZ2VJRF0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjYWxsIERlbGV0ZSBibG9jawogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0RlbGV0ZScsCiAgICAgICAgICAgIERhdGEgPT4geyVMYW5ndWFnZURhdGF9LAogICAgICAgICk7CgogICAgICAgICMgc2V0IHRoZSBkaWFsb2cgdHlwZS4gQXMgZGVmYXVsdCwgdGhlIGRpYWxvZyB3aWxsIGhhdmUgMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICAgICAgbXkgJERpYWxvZ1R5cGUgPSAnQ29uZmlybWF0aW9uJzsKCiAgICAgICAgIyBkaXNwbGF5IGxpc3Qgb2YgYWZmZWN0ZWQgRkFRIGFydGljbGVzCiAgICAgICAgaWYgKEBBZmZlY3RlZEl0ZW1zKSB7CgogICAgICAgICAgICAjIHNldCB0aGUgZGlhbG9nIHR5cGUgdG8gaGF2ZSBvbmx5IDEgYnV0dG9uOiBPawogICAgICAgICAgICAkRGlhbG9nVHlwZSA9ICdNZXNzYWdlJzsKCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBZmZlY3RlZEl0ZW1zJywKICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkSXRlbUlEIChAQWZmZWN0ZWRJdGVtcykgewoKICAgICAgICAgICAgICAgICMgZ2V0IGZhcSBhcnRpY2xlCiAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEl0ZW1JRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgZmFxIGFydGljbGUKICAgICAgICAgICAgICAgIG5leHQgSVRFTUlEIGlmICElRkFRRGF0YTsKCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FmZmVjdGVkSXRlbXNSb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9BZmZlY3RlZEl0ZW1zJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVMYW5ndWFnZURhdGF9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgY29udGVudAogICAgICAgIG15ICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7fSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHRoZSByZXR1cm5lZCBkYXRhIHN0cnVjdHVyZQogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICBIVE1MICAgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIERpYWxvZ1R5cGUgPT4gJERpYWxvZ1R5cGUsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXR1cm4gSlNPTi1TdHJpbmcgYmVjYXVzZSBvZiBBSkFYLU1vZGUKICAgICAgICBteSAkT3V0cHV0SlNPTiA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SlNPTkVuY29kZSggRGF0YSA9PiBcJURhdGEgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0SlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGRlbGV0ZSBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWxldGVBY3Rpb24nICYmICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CgogICAgICAgICMgZ2V0IHRoZSBMYW5ndWFnZUlECiAgICAgICAgbXkgJExhbmd1YWdlSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdMYW5ndWFnZUlEJyApIHx8ICcnOwoKICAgICAgICAjIGNoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMKICAgICAgICBpZiAoICEkTGFuZ3VhZ2VJRCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdObyBMYW5ndWFnZUlEIGlzIGdpdmVuIScsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbGFuZ3VhZ2UgZGF0YQogICAgICAgIG15ICVMYW5ndWFnZURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlR2V0KAogICAgICAgICAgICBMYW5ndWFnZUlEID0+ICRMYW5ndWFnZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICElTGFuZ3VhZ2VEYXRhICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgdGhlIGxhbmd1YWdlCiAgICAgICAgbXkgJENvdWxkRGVsZXRlTGFuZ3VhZ2UgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlRGVsZXRlKAogICAgICAgICAgICBMYW5ndWFnZUlEID0+ICRMYW5ndWFnZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJENvdWxkRGVsZXRlTGFuZ3VhZ2UpIHsKCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gZXhwbG9yZXIsIHdoZW4gdGhlIGRlbGV0aW9uIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudEZBUUxhbmd1YWdlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZSwgd2hlbiBkZWxldGUgZmFpbGVkCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgbGFuZ3VhZ2UgJExhbmd1YWdlSUQhIiwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICRTZWxmLT5fT3ZlcnZpZXcoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRTGFuZ3VhZ2UnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9FZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1VwZGF0ZScsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIHNob3dzIGhlYWRlcgogICAgaWYgKCAkUGFyYW17QWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0JyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnSGVhZGVyQWRkJyApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX092ZXJ2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dCA9ICcnOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3IGJsb2NrcwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnT3ZlcnZpZXcnICk7CgogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0JyApOwoKICAgICAgICAjIGdldCBsYW5ndWFnZXMgbGlzdAogICAgICAgIG15ICVMYW5ndWFnZXMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZXJlIGFyZSBhbnkgbGFuZ3VhZ2VzLCB0aGV5IGFyZSBzaG93bgogICAgICAgIGlmICglTGFuZ3VhZ2VzKSB7CiAgICAgICAgICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIHNvcnQgeyAkTGFuZ3VhZ2VzeyRhfSBjbXAgJExhbmd1YWdlc3skYn0gfSBrZXlzICVMYW5ndWFnZXMgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgbGFuZ3VhZ2VzIHJlc3VsdAogICAgICAgICAgICAgICAgbXkgJUxhbmd1YWdlRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VHZXQoCiAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2VJRCA9PiAkTGFuZ3VhZ2VJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgI291dHB1dCByZXN1bHRzCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHslTGFuZ3VhZ2VEYXRhfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtc2cgaXMgZGlzcGxheWVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJyApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0Rpc2FibGVkJyApOwogICAgfQp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUVByaW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHM7CnVzZSBLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpQREY7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAoCiAgICAgICAgcXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBRdWV1ZU9iamVjdCBDb25maWdPYmplY3QgVXNlck9iamVjdCBNYWluT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYWRpdGlvbmFsIG9iamVjdHMKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntMaW5rT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntQREZPYmplY3R9ICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlBERi0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgJFNlbGYtPntJbnRlcmZhY2V9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgTmFtZSAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkFnZW50OjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgZGVmYXVsdCBvcHRpb25zCiAgICAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwogICAgJFNlbGYtPntWb3Rpbmd9ICAgICAgICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OlZvdGluZycpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSb30gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBybyBwZXJtaXNzaW9uIScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkT3V0cHV0OwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwogICAgJEdldFBhcmFte0l0ZW1JRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJdGVtSUQnICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRHZXRQYXJhbXtJdGVtSUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBJdGVtSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgaXRlbSBkYXRhCiAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICggISVGQVFEYXRhICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICB9CgogICAgIyBjaGVjayB1c2VyIHBlcm1pc3Npb24KICAgIG15ICRQZXJtaXNzaW9uID0gJFNlbGYtPntGQVFPYmplY3R9LT5DaGVja0NhdGVnb3J5VXNlclBlcm1pc3Npb24oCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICk7CgogICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgIGlmICggISRQZXJtaXNzaW9uICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IGhhdmUgbm8gcGVybWlzc2lvbiBmb3IgdGhpcyBjYXRlZ29yeSEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbGlua2VkIG9iamVjdHMKICAgIG15ICRMaW5rTGlzdFdpdGhEYXRhID0gJFNlbGYtPntMaW5rT2JqZWN0fS0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICBPYmplY3QgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxpbmsgdHlwZSBsaXN0CiAgICBteSAlTGlua1R5cGVMaXN0ID0gJFNlbGYtPntMaW5rT2JqZWN0fS0+VHlwZUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGxpbmsgZGF0YQogICAgbXkgJUxpbmtEYXRhOwogICAgaWYgKCAkTGlua0xpc3RXaXRoRGF0YSAmJiByZWYgJExpbmtMaXN0V2l0aERhdGEgZXEgJ0hBU0gnICYmICV7JExpbmtMaXN0V2l0aERhdGF9ICkgewogICAgICAgICVMaW5rRGF0YSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua09iamVjdFRhYmxlQ3JlYXRlKAogICAgICAgICAgICBMaW5rTGlzdFdpdGhEYXRhID0+ICRMaW5rTGlzdFdpdGhEYXRhLAogICAgICAgICAgICBWaWV3TW9kZSAgICAgICAgID0+ICdTaW1wbGVSYXcnLAogICAgICAgICk7CiAgICB9CgogICAgIyBwcmVwYXJlIGZpZWxkcyBkYXRhCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKHF3KEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNCBGaWVsZDUgRmllbGQ2KSkgewogICAgICAgIG5leHQgRklFTEQgaWYgISRGQVFEYXRheyRGaWVsZH07CgogICAgICAgICMgbm8gcXVvdGluZyBpZiBodG1sIHZpZXcgaXMgZW5hYmxlZAogICAgICAgIG5leHQgRklFTEQgaWYgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpOwoKICAgICAgICAjIGh0bWwgcXVvdGluZwogICAgICAgICRGQVFEYXRheyRGaWVsZH0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIE5ld0xpbmUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRGQVFEYXRheyRGaWVsZH0sCiAgICAgICAgICAgIFZNYXggICAgICAgICAgID0+IDUwMDAsCiAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgIExpbmtGZWF0dXJlICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB1c2VyIGluZm8gKENyZWF0ZWRCeSkKICAgIG15ICVVc2VySW5mbyA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkRkFRRGF0YXtDcmVhdGVkQnl9CiAgICApOwogICAgJFBhcmFte0NyZWF0ZWRCeUxvZ2lufSA9ICRVc2VySW5mb3tVc2VyTG9naW59OwoKICAgICMgZ2V0IHVzZXIgaW5mbyAoQ2hhbmdlZEJ5KQogICAgJVVzZXJJbmZvID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRGQVFEYXRhe0NoYW5nZWRCeX0KICAgICk7CiAgICAkUGFyYW17Q2hhbmdlZEJ5TG9naW59ID0gJFVzZXJJbmZve1VzZXJMb2dpbn07CgogICAgIyBnZW5lcmF0ZSBwZGYgb3V0cHV0CiAgICBpZiAoICRTZWxmLT57UERGT2JqZWN0fSApIHsKICAgICAgICBteSAkUHJpbnRlZEJ5ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ3ByaW50ZWQgYnknKTsKICAgICAgICBteSAkVGltZSAgICAgID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoIFRlbXBsYXRlID0+ICckRW52eyJUaW1lIn0nICk7CiAgICAgICAgbXkgJFVybCAgICAgICA9ICcgJzsKICAgICAgICBpZiAoICRFTlZ7UkVRVUVTVF9VUkl9ICkgewogICAgICAgICAgICAkVXJsID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0h0dHBUeXBlJykgLiAnOi8vJwogICAgICAgICAgICAgICAgLiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRlFETicpCiAgICAgICAgICAgICAgICAuICRFTlZ7UkVRVUVTVF9VUkl9OwogICAgICAgIH0KICAgICAgICBteSAlUGFnZTsKCiAgICAgICAgIyBnZXQgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKICAgICAgICAkUGFnZXtNYXhQYWdlc30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUERGOjpNYXhQYWdlcycpOwogICAgICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgICAgICRQYWdle01heFBhZ2VzfSA9IDEwMDsKICAgICAgICB9CiAgICAgICAgbXkgJEhlYWRlclJpZ2h0ICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkZBUUhvb2snKSAuICRGQVFEYXRhe051bWJlcn07CiAgICAgICAgbXkgJEhlYWRsaW5lTGVmdCA9ICRIZWFkZXJSaWdodDsKICAgICAgICBteSAkVGl0bGUgICAgICAgID0gJEhlYWRlclJpZ2h0OwogICAgICAgIGlmICggJEZBUURhdGF7VGl0bGV9ICkgewogICAgICAgICAgICAkSGVhZGxpbmVMZWZ0ID0gJEZBUURhdGF7VGl0bGV9OwogICAgICAgICAgICAkVGl0bGUgLj0gJyAvICcgLiAkRkFRRGF0YXtUaXRsZX07CiAgICAgICAgfQoKICAgICAgICAkUGFnZXtNYXJnaW5Ub3B9ICAgICA9IDMwOwogICAgICAgICRQYWdle01hcmdpblJpZ2h0fSAgID0gNDA7CiAgICAgICAgJFBhZ2V7TWFyZ2luQm90dG9tfSAgPSA0MDsKICAgICAgICAkUGFnZXtNYXJnaW5MZWZ0fSAgICA9IDQwOwogICAgICAgICRQYWdle0hlYWRlclJpZ2h0fSAgID0gJEhlYWRlclJpZ2h0OwogICAgICAgICRQYWdle0hlYWRsaW5lTGVmdH0gID0gJEhlYWRsaW5lTGVmdDsKICAgICAgICAkUGFnZXtIZWFkbGluZVJpZ2h0fSA9ICRQcmludGVkQnkgLiAnICcKICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJGaXJzdG5hbWV9IC4gJyAnCiAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyTGFzdG5hbWV9IC4gJyAoJwogICAgICAgICAgICAuICRTZWxmLT57VXNlckVtYWlsfSAuICcpICcKICAgICAgICAgICAgLiAkVGltZTsKICAgICAgICAkUGFnZXtGb290ZXJMZWZ0fSA9ICRVcmw7CiAgICAgICAgJFBhZ2V7UGFnZVRleHR9ICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnUGFnZScpOwogICAgICAgICRQYWdle1BhZ2VDb3VudH0gID0gMTsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHBkZiBkb2N1bWVudAogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+RG9jdW1lbnROZXcoCiAgICAgICAgICAgIFRpdGxlICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRUaXRsZSwKICAgICAgICAgICAgRW5jb2RlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1VzZXJDaGFyc2V0fSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBmaXJzdCBwZGYgcGFnZQogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgKTsKICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgICAgICMgdHlwZSBvZiBwcmludCB0YWcKICAgICAgICBteSAkUHJpbnRUYWcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnRkFRIEFydGljbGUgUHJpbnQnKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgICAgIFRleHQgICAgID0+ICRQcmludFRhZywKICAgICAgICAgICAgSGVpZ2h0ICAgPT4gOSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkJywKICAgICAgICAgICAgQWxpZ24gICAgPT4gJ3JpZ2h0JywKICAgICAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICBZICAgID0+IC02LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGZhcSBpbmZvcm1hdGlvbgogICAgICAgICRTZWxmLT5fUERGT3V0cHV0RkFRSGVhZGVySW5mbygKICAgICAgICAgICAgUGFnZURhdGEgPT4gXCVQYWdlLAogICAgICAgICAgICBGQVFEYXRhICA9PiBcJUZBUURhdGEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkRkFRRGF0YXtLZXl3b3Jkc30gKSB7CiAgICAgICAgICAgICRTZWxmLT5fUERGT3V0cHV0S2V5d29yZHMoCiAgICAgICAgICAgICAgICBQYWdlRGF0YSA9PiBcJVBhZ2UsCiAgICAgICAgICAgICAgICBGQVFEYXRhICA9PiBcJUZBUURhdGEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+X1BERk91cHV0RkFRQ29udGVudCgKICAgICAgICAgICAgUGFnZURhdGEgPT4gXCVQYWdlLAogICAgICAgICAgICBGQVFEYXRhICA9PiBcJUZBUURhdGEsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgbGlua2VkIG9iamVjdHMKICAgICAgICBpZiAoJUxpbmtEYXRhKSB7CiAgICAgICAgICAgICRTZWxmLT5fUERGT3V0cHV0TGlua2VkT2JqZWN0cygKICAgICAgICAgICAgICAgIFBhZ2VEYXRhICAgICA9PiBcJVBhZ2UsCiAgICAgICAgICAgICAgICBMaW5rRGF0YSAgICAgPT4gXCVMaW5rRGF0YSwKICAgICAgICAgICAgICAgIExpbmtUeXBlTGlzdCA9PiBcJUxpbmtUeXBlTGlzdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmV0dXJuIHRoZSBwZGYgZG9jdW1lbnQKICAgICAgICBteSAkRmlsZW5hbWUgPSAnRkFRXycgLiAkRkFRRGF0YXtOdW1iZXJ9OwogICAgICAgIG15ICggJHMsICRtLCAkaCwgJEQsICRNLCAkWSApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICApOwogICAgICAgICRNID0gc3ByaW50ZiggIiUwMmQiLCAkTSApOwogICAgICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgICAgICRoID0gc3ByaW50ZiggIiUwMmQiLCAkaCApOwogICAgICAgICRtID0gc3ByaW50ZiggIiUwMmQiLCAkbSApOwogICAgICAgIG15ICRQREZTdHJpbmcgPSAkU2VsZi0+e1BERk9iamVjdH0tPkRvY3VtZW50T3V0cHV0KCk7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVuYW1lIC4gIl8iIC4gIiRZLSRNLSREIiAuICJfIiAuICIkaC0kbS5wZGYiLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAiYXBwbGljYXRpb24vcGRmIiwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBodG1sIG91dHB1dAogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEhlYWRlciggVmFsdWUgPT4gJEZBUURhdGF7TnVtYmVyfSApOwoKICAgICAgICAjIHNob3cgRkFRIENvbnRlbnQKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZBUUNvbnRlbnRTaG93KAogICAgICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJFNlbGYtPntGQVFPYmplY3R9LAogICAgICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICAgICBGQVFEYXRhICAgICAgICAgPT4geyVGQVFEYXRhfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJUxpbmtEYXRhKSB7CgogICAgICAgICAgICAjIG91dHB1dCBsaW5rIGRhdGEKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0xpbmsnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRMaW5rVHlwZUxpbmtEaXJlY3Rpb24gKCBzb3J0IHsgbGMgJGEgY21wIGxjICRiIH0ga2V5cyAlTGlua0RhdGEgKSB7CgogICAgICAgICAgICAgICAgIyBpbnZlc3RpZ2F0ZSBsaW5rIHR5cGUgbmFtZQogICAgICAgICAgICAgICAgbXkgQExpbmtEYXRhID0gc3BsaXQgcXs6On0sICRMaW5rVHlwZUxpbmtEaXJlY3Rpb247CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgbGluayB0eXBlIGRhdGEKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTGlua1R5cGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBMaW5rVHlwZU5hbWUgPT4gJExpbmtUeXBlTGlzdHsgJExpbmtEYXRhWzBdIH0tPnsgJExpbmtEYXRhWzFdIC4gJ05hbWUnIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IG9iamVjdCBsaXN0CiAgICAgICAgICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRMaW5rRGF0YXskTGlua1R5cGVMaW5rRGlyZWN0aW9ufTsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJE9iamVjdCAoIHNvcnQgeyBsYyAkYSBjbXAgbGMgJGIgfSBrZXlzICV7JE9iamVjdExpc3R9ICkgewoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkT2JqZWN0TGlzdC0+eyRPYmplY3R9IH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIG91dHB1dCBsaW5rIHR5cGUgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTGlua1R5cGVSb3cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1N0cmcgPT4gJEl0ZW0tPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGZhcQogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9IVE1MTWFzaygKICAgICAgICAgICAgRkFRSUQgPT4gJEdldFBhcmFte0ZBUUlEfSwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlVXNlckluZm8sCiAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEZvb3RlcigpOwoKICAgICAgICAjIHJldHVybiBvdXRwdXQKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9QREZPdXRwdXRGQVFIZWFkZXJJbmZvIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhQYWdlRGF0YSBGQVFEYXRhKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIG15ICVGQVFEYXRhID0gJXsgJFBhcmFte0ZBUURhdGF9IH07CiAgICBteSAlUGFnZSAgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKCiAgICAjIGNyZWF0ZSBsZWZ0IHRhYmxlCiAgICBteSAkVGFibGVMZWZ0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NhdGVnb3J5JykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkRkFRRGF0YXtDYXRlZ29yeU5hbWV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEZBUURhdGF7U3RhdGV9ICksCiAgICAgICAgfSwKICAgIF07CgogICAgIyBsYW5ndWFnZSByb3csIGZlYXR1cmUgaXMgZW5hYmxlZAogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgIG15ICRSb3cgPSB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYW5ndWFnZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEZBUURhdGF7TGFuZ3VhZ2V9ICksCiAgICAgICAgfTsKICAgICAgICBwdXNoIEB7JFRhYmxlTGVmdH0sICRSb3c7CiAgICB9CgogICAgIyBhcHByb3ZhbCBzdGF0ZSByb3csIGZlYXR1cmUgaXMgZW5hYmxlZAogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpBcHByb3ZhbFJlcXVpcmVkJykgKSB7CiAgICAgICAgJEZBUURhdGF7QXBwcm92YWx9ID0gJEZBUURhdGF7QXBwcm92ZWR9ID8gJ1llcycgOiAnTm8nOwogICAgICAgIG15ICRSb3cgPSB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdBcHByb3ZhbCcpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEZBUURhdGF7QXBwcm92YWx9ICksCiAgICAgICAgfTsKICAgICAgICBwdXNoIEB7JFRhYmxlTGVmdH0sICRSb3c7CiAgICB9CgogICAgIyBjcmVhdGUgcmlnaHQgdGFibGUKICAgIG15ICRUYWJsZVJpZ2h0OwoKICAgICMgdm90aW5nIHJvd3MsIGZlYXRyZSBpcyBlbmFibGVkCiAgICBpZiAoICRTZWxmLT57Vm90aW5nfSApIHsKICAgICAgICAkVGFibGVSaWdodCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1ZvdGVzJykgLiAnOicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtWb3Rlc30sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdSZXN1bHQnKSAuICc6JywKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGQVFEYXRhe1ZvdGVSZXN1bHR9IC4gIiAlIiwKICAgICAgICAgICAgfSwKICAgICAgICBdOwogICAgfQoKICAgICMgbGFzdCB1cGRhdGUgcm93CiAgICBwdXNoIEB7JFRhYmxlUmlnaHR9LCB7CiAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0xhc3QgdXBkYXRlJykgLiAnOicsCiAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICckVGltZUxvbmd7IiREYXRheyJDaGFuZ2VkIn0ifScsCiAgICAgICAgICAgIERhdGEgICAgID0+IFwlRkFRRGF0YSwKICAgICAgICApLAogICAgfTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsyXXtXaWR0aH0gPSA0OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bM117V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVs0XXtXaWR0aH0gPSAxNzAuNTsKCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gPSAnI0FBQUFBQSc7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JPZGR9ICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgZm9yICggJFBhZ2V7UGFnZUNvdW50fSAuLiAkUGFnZXtNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0TGlua2VkT2JqZWN0cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZURhdGEgTGlua0RhdGEgTGlua1R5cGVMaXN0KSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlUGFnZSAgICAgPSAleyAkUGFyYW17UGFnZURhdGF9IH07CiAgICBteSAlVHlwZUxpc3QgPSAleyAkUGFyYW17TGlua1R5cGVMaXN0fSB9OwogICAgbXkgJVRhYmxlUGFyYW07CiAgICBteSAkUm93ID0gMDsKCiAgICBmb3IgbXkgJExpbmtUeXBlTGlua0RpcmVjdGlvbiAoIHNvcnQgeyBsYyAkYSBjbXAgbGMgJGIgfSBrZXlzICV7ICRQYXJhbXtMaW5rRGF0YX0gfSApIHsKCiAgICAgICAgIyBpbnZlc3RpZ2F0ZSBsaW5rIHR5cGUgbmFtZQogICAgICAgIG15IEBMaW5rRGF0YSA9IHNwbGl0IHF7Ojp9LCAkTGlua1R5cGVMaW5rRGlyZWN0aW9uOwogICAgICAgIG15ICRMaW5rVHlwZU5hbWUgPSAkVHlwZUxpc3R7ICRMaW5rRGF0YVswXSB9LT57ICRMaW5rRGF0YVsxXSAuICdOYW1lJyB9OwogICAgICAgICRMaW5rVHlwZU5hbWUgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgkTGlua1R5cGVOYW1lKTsKCiAgICAgICAgIyBkZWZpbmUgaGVhZGxpbmUKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkTGlua1R5cGVOYW1lIC4gJzonOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gPSAnJzsKCiAgICAgICAgIyBleHRyYWN0IG9iamVjdCBsaXN0CiAgICAgICAgbXkgJE9iamVjdExpc3QgPSAkUGFyYW17TGlua0RhdGF9LT57JExpbmtUeXBlTGlua0RpcmVjdGlvbn07CgogICAgICAgIGZvciBteSAkT2JqZWN0ICggc29ydCB7IGxjICRhIGNtcCBsYyAkYiB9IGtleXMgJXskT2JqZWN0TGlzdH0gKSB7CgogICAgICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkT2JqZWN0TGlzdC0+eyRPYmplY3R9IH0gKSB7CgogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9IHx8PSAnJzsKICAgICAgICAgICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRJdGVtLT57VGl0bGV9IHx8ICcnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRpbnVlIHsKICAgICAgICAgICAgICAgICRSb3crKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDQzMTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0xpbmtlZCBPYmplY3RzJyksCiAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFNlbGYtPntQREZPYmplY3R9LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC00LAogICAgKTsKCiAgICAjIHRhYmxlIHBhcmFtcwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dEtleXdvcmRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhQYWdlRGF0YSBGQVFEYXRhKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIG15ICVGQVFEYXRhID0gJXsgJFBhcmFte0ZBUURhdGF9IH07CiAgICBteSAlUGFnZSAgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKICAgIG15ICVUYWJsZVBhcmFtOwoKICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVswXVswXXtDb250ZW50fSA9ICRGQVFEYXRhe0tleXdvcmRzfSB8fCAnJzsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDUxMTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0tleXdvcmRzJyksCiAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFNlbGYtPntQREZPYmplY3R9LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC00LAogICAgKTsKCiAgICAjIHRhYmxlIHBhcmFtcwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91cHV0RkFRQ29udGVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgcGFyYW1ldGVycwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFBhZ2VEYXRhIEZBUURhdGEpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkUGFyYW1OYW1lISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZBUURhdGEgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKICAgIG15ICVQYWdlICAgID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwoKICAgICMgZ2V0IHRoZSBjb25maWcgb2YgRkFRIGZpZWxkcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgbXkgJUZpZWxkczsKICAgIEZJRUxEOgogICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDYgKSB7CgogICAgICAgICMgZ2V0IGNvbmZpZyBvZiBGQVEgZmllbGQKICAgICAgICBteSAkQ29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoICdGQVE6Okl0ZW06OkZpZWxkJyAuICROdW1iZXIgKTsKCiAgICAgICAgIyBza2lwIG92ZXIgbm90IHNob3duIGZpZWxkcwogICAgICAgIG5leHQgRklFTEQgaWYgISRDb25maWctPntTaG93fTsKCiAgICAgICAgIyBzdG9yZSBvbmx5IHRoZSBjb25maWcgb2YgZmllbGRzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgJEZpZWxkc3sgIkZpZWxkIiAuICROdW1iZXIgfSA9ICRDb25maWc7CiAgICB9CgogICAgIyBzb3J0IHNob3duIGZpZWxkcyBieSBwcmlvcml0eQogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkICggc29ydCB7ICRGaWVsZHN7JGF9LT57UHJpb30gPD0+ICRGaWVsZHN7JGJ9LT57UHJpb30gfSBrZXlzICVGaWVsZHMgKSB7CgogICAgICAgICMgZ2V0IHRoZSBzdGF0ZSB0eXBlIGRhdGEgb2YgdGhpcyBmaWVsZAogICAgICAgIG15ICRTdGF0ZVR5cGVEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgICAgIE5hbWUgICA9PiAkRmllbGRzeyRGaWVsZH0tPntTaG93fSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBteSAlVGFibGVQYXJhbTsKCiAgICAgICAgIyBjb252ZXJ0IEhUTUwgdG8gYXNjaWkKICAgICAgICBteSAkQXNjaWlGaWVsZCA9ICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+VG9Bc2NpaSggU3RyaW5nID0+ICRGQVFEYXRheyRGaWVsZH0gKTsKCiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WzBdWzBde0NvbnRlbnR9ID0gJEFzY2lpRmllbGQgfHwgJyc7CiAgICAgICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gNTExOwoKICAgICAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgWSAgICA9PiAtMTUsCiAgICAgICAgKTsKCiAgICAgICAgIyB0cmFuc2xhdGUgdGhlIGZpZWxkIG5hbWUgYW5kIHN0YXRlCiAgICAgICAgbXkgJEZpZWxkTmFtZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkRmllbGRzeyRGaWVsZH0tPnsnQ2FwdGlvbid9ICkKICAgICAgICAgICAgLiAnICgnCiAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRTdGF0ZVR5cGVEYXRhLT57TmFtZX0gKQogICAgICAgICAgICAuICcpJzsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgICAgIFRleHQgICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICAgICApOwoKICAgICAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgWSAgICA9PiAtNCwKICAgICAgICApOwoKICAgICAgICAjIHRhYmxlIHBhcmFtcwogICAgICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgPSAnQ3V0JzsKICAgICAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNEREREREQnOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgPSAzOwoKICAgICAgICAjIG91dHB1dCB0YWJsZQogICAgICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfSFRNTE1hc2sgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNob3cgTGFuZ3VhZ2UKICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgYXBwcm92YWwgc3RhdGUKICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QXBwcm92YWxSZXF1aXJlZCcpICkgewogICAgICAgICRQYXJhbXtBcHByb3ZhbH0gPSAkUGFyYW17QXBwcm92ZWR9ID8gJ1llcycgOiAnTm8nOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1ByaW50QXBwcm92YWwnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgcmF0aW5nCiAgICBpZiAoICRTZWxmLT57Vm90aW5nfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSYXRpbmcnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUVByaW50JywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUVNlYXJjaDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlYXJjaFByb2ZpbGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q1NWOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhbGlkOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IFVzZXJPYmplY3QgR3JvdXBPYmplY3QgQ29uZmlnT2JqZWN0IE1haW5PYmplY3QgRW5jb2RlT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBvYmplY3RzCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1NlYXJjaFByb2ZpbGVPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlNlYXJjaFByb2ZpbGUtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntDU1ZPYmplY3R9ICAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpDU1YtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpWYWxpZC0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgY29uZmlnIGZvciBmcm9udGVuZAogICAgJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICAkU2VsZi0+e0ludGVyZmFjZX0gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2ludGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QWdlbnQ6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdXRwdXQ7CgogICAgIyBnZXQgY29uZmlnIGRhdGEKICAgICRTZWxmLT57U3RhcnRIaXR9ID0gaW50KCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxICk7CiAgICAkU2VsZi0+e1NlYXJjaExpbWl0fSA9ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaExpbWl0fSB8fCA1MDA7CiAgICAkU2VsZi0+e1NvcnRCeX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnRkFRSUQnOwogICAgJFNlbGYtPntPcmRlckJ5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ09yZGVyQnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnT3JkZXI6OkRlZmF1bHQnfQogICAgICAgIHx8ICdEb3duJzsKICAgICRTZWxmLT57UHJvZmlsZX0gICAgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvZmlsZScgKSAgICAgICAgfHwgJyc7CiAgICAkU2VsZi0+e1NhdmVQcm9maWxlfSAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVQcm9maWxlJyApICAgIHx8ICcnOwogICAgJFNlbGYtPntUYWtlTGFzdFNlYXJjaH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdUYWtlTGFzdFNlYXJjaCcgKSB8fCAnJzsKICAgICRTZWxmLT57U2VsZWN0VGVtcGxhdGV9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VsZWN0VGVtcGxhdGUnICkgfHwgJyc7CiAgICAkU2VsZi0+e0VyYXNlVGVtcGxhdGV9ICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VyYXNlVGVtcGxhdGUnICkgIHx8ICcnOwoKICAgICMgYnVpbGQgb3V0cHV0IGZvciBvcGVuIHNlYXJjaCBkZXNjcmlwdGlvbiBieSBGQVEgbnVtYmVyCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyJyApIHsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXInLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIueG1sJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQveG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIG91dHB1dCBmb3Igb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gYnkgZnVsbHRleHQKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dCcgKSB7CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dC54bWwnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC94bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgICMgc2VhcmNoIHdpdGggYSBzYXZlZCB0ZW1wbGF0ZQogICAgaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZWFyY2hUZW1wbGF0ZScgKSAmJiAkU2VsZi0+e1Byb2ZpbGV9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PgogICAgICAgICAgICAgICAgIkFjdGlvbj1BZ2VudEZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO1Rha2VMYXN0U2VhcmNoPTE7U2F2ZVByb2ZpbGU9MTtQcm9maWxlPSRTZWxmLT57UHJvZmlsZX0iCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzaW5nbGUgcGFyYW1zCiAgICBteSAlR2V0UGFyYW07CgogICAgIyBsb2FkIHByb2ZpbGVzIHN0cmluZyBwYXJhbXMgKHByZXNzIGxvYWQgcHJvZmlsZSkKICAgIGlmICggKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0xvYWRQcm9maWxlJyAmJiAkU2VsZi0+e1Byb2ZpbGV9ICkgfHwgJFNlbGYtPntUYWtlTGFzdFNlYXJjaH0gKSB7CiAgICAgICAgJUdldFBhcmFtID0gJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fS0+U2VhcmNoUHJvZmlsZUdldCgKICAgICAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNlYXJjaCBzdHJpbmcgcGFyYW1zIChnZXQgc3VibWl0dGVkIHBhcmFtcykKICAgIGVsc2UgewoKICAgICAgICAjIGdldCBzY2FsYXIgc2VhcmNoIHBhcmFtcwogICAgICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhOdW1iZXIgVGl0bGUgS2V5d29yZCBGdWxsdGV4dCBSZXN1bHRGb3JtKSkgewogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKCiAgICAgICAgICAgICMgcmVtb3ZlIHdoaXRlc3BhY2Ugb24gdGhlIHN0YXJ0IGFuZCBlbmQKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPX4gc3sgXEEgXHMrIH17fXhtczsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9fiBzeyBccysgXHogfXt9eG1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGRiIHF1b3RlIHRvIHByZXZlbnQgU1FMIGluamVjdGlvbgogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRHZXRQYXJhbXskUGFyYW1OYW1lfSApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYXJyYXkgc2VhcmNoIHBhcmFtcwogICAgICAgIGZvciBteSAkU2VhcmNoUGFyYW0gKHF3KENhdGVnb3J5SURzIExhbmd1YWdlSURzIFZhbGlkSURzKSkgewogICAgICAgICAgICBteSBAQXJyYXkgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICRTZWFyY2hQYXJhbSApOwogICAgICAgICAgICBpZiAoQEFycmF5KSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFNlYXJjaFBhcmFtfSA9IFxAQXJyYXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgcmVzdWx0IGZvcm0gZW52CiAgICBpZiAoICEkR2V0UGFyYW17UmVzdWx0Rm9ybX0gKSB7CiAgICAgICAgJEdldFBhcmFte1Jlc3VsdEZvcm19ID0gJyc7CiAgICB9CgogICAgIyBzaG93IHJlc3VsdCBzaXRlCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VhcmNoJyAmJiAhJFNlbGYtPntFcmFzZVRlbXBsYXRlfSApIHsKCiAgICAgICAgIyBmaWxsIHVwIHByb2ZpbGUgbmFtZSAoZS5nLiB3aXRoIGxhc3Qtc2VhcmNoKQogICAgICAgIGlmICggISRTZWxmLT57UHJvZmlsZX0gfHwgISRTZWxmLT57U2F2ZVByb2ZpbGV9ICkgewogICAgICAgICAgICAkU2VsZi0+e1Byb2ZpbGV9ID0gJ2xhc3Qtc2VhcmNoJzsKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgbGFzdCBvdmVydmlldyBzY3JlZW4KICAgICAgICBteSAkVVJMID0gIkFjdGlvbj1BZ2VudEZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO1Byb2ZpbGU9JFNlbGYtPntQcm9maWxlfTtTb3J0Qnk9JFNlbGYtPntTb3J0Qnl9IgogICAgICAgICAgICAuICI7T3JkZXJCeT0kU2VsZi0+e09yZGVyQnl9O1Rha2VMYXN0U2VhcmNoPTE7U3RhcnRIaXQ9JFNlbGYtPntTdGFydEhpdH0iOwogICAgICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuT3ZlcnZpZXcnLAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFVSTCwKICAgICAgICApOwogICAgICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CgogICAgICAgICMgc2F2ZSBzZWFyY2ggcHJvZmlsZSAodW5kZXIgbGFzdC1zZWFyY2ggb3IgcmVhbCBwcm9maWxlIG5hbWUpCiAgICAgICAgJFNlbGYtPntTYXZlUHJvZmlsZX0gPSAxOwoKICAgICAgICAjIHJlbWVtYmVyIGxhc3Qgc2VhcmNoIHZhbHVlcwogICAgICAgIGlmICggJFNlbGYtPntTYXZlUHJvZmlsZX0gJiYgJFNlbGYtPntQcm9maWxlfSApIHsKCiAgICAgICAgICAgICMgcmVtb3ZlIG9sZCBwcm9maWxlIHN0dWZmCiAgICAgICAgICAgICRTZWxmLT57U2VhcmNoUHJvZmlsZU9iamVjdH0tPlNlYXJjaFByb2ZpbGVEZWxldGUoCiAgICAgICAgICAgICAgICBCYXNlICAgICAgPT4gJ0ZBUVNlYXJjaCcsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGluc2VydCBuZXcgcHJvZmlsZSBwYXJhbXMKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJUdldFBhcmFtICkgewogICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17JEtleX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fS0+U2VhcmNoUHJvZmlsZUFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkR2V0UGFyYW17JEtleX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIGZ1bGx0ZXh0IHNlYXJjaAogICAgICAgIGlmICggJEdldFBhcmFte0Z1bGx0ZXh0fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0NvbnRlbnRTZWFyY2h9ID0gJ09SJzsKICAgICAgICAgICAgJEdldFBhcmFte1doYXR9ICAgICAgICAgID0gJEdldFBhcmFte0Z1bGx0ZXh0fTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ICAgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CiAgICAgICAgbXkgQEFsbFZhbGlkSURzID0ga2V5cyAlVmFsaWRMaXN0OwoKICAgICAgICAjIEdldCBVc2VyQ2F0ZWdvcnlHcm91cCBIYXNoCiAgICAgICAgIyBUaGlzIHJldHVybnMgYSBIYXNoIG9mIHRoZSBmb2xsb3dpbmcgc2FtcGxlIGRhdGEgc3RydWN0dXJlOgogICAgICAgICMKICAgICAgICAjICRVc2VyQ2F0R3JvdXAgPSB7CiAgICAgICAgIyAgICcxJyA9PiB7CiAgICAgICAgIyAgICAgICAgICAnMycgPT4gJ01pc2NTdWInCiAgICAgICAgIyAgICAgICAgfSwKICAgICAgICAjICAgJzMnID0+IHt9LAogICAgICAgICMgICAnMCcgPT4gewogICAgICAgICMgICAgICAgICAgICAnMScgPT4gJ01pc2MnLAogICAgICAgICMgICAgICAgICAgICAnMicgPT4gJ3NlY3JldCcKICAgICAgICAjICAgICAgICAgIH0sCiAgICAgICAgIyAgICcyJyA9PiB7fQogICAgICAgICMgfTsKICAgICAgICAjCiAgICAgICAgIyBLZXlzIG9mIHRoZSBvdXRlciBoYXNoIGluZm9ybSBhYm91dCBzdWJjYXRlZ29yaWVzCiAgICAgICAgIyAwIFNob3dzIHRvcCBsZXZlbCBDYXRlZ29yeUlEcy4KICAgICAgICAjIDEgU2hvd3MgdGhlIFN1YmNhdGVnb3J5SURzIG9mIENhdGVnb3J5IDEuCiAgICAgICAgIyAyIGFuZCAzIGFyZSBlbXB0eSBoYXNoZXMgYmVjYXVzZSB0aGVzZSBjYXRlZ29yaWVzIGRvbid0IGhhdmUgc3ViY2F0ZWdvcmllcy4KICAgICAgICAjCiAgICAgICAgIyBLZXlzIG9mIHRoZSBpbm5lciBoYXNoZXMgYXJlIENhdGVnb3J5SURzIGEgdXNlciBpcyBhbGxvd2VkIHRvIGhhdmUgcncgYWNjZXNzIHRvLgogICAgICAgICMgVmFsdWVzIGFyZSB0aGUgQ2F0ZWdvcnkgbmFtZXMuCgogICAgICAgIG15ICRVc2VyQ2F0R3JvdXAgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkdldFVzZXJDYXRlZ29yaWVzKAogICAgICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIEZpbmQgQ2F0ZWdvcnlJRHMgdGhlIGN1cnJlbnQgVXNlciBpcyBhbGxvd2VkIHRvIHZpZXcKICAgICAgICBteSAlQWxsb3dlZENhdGVnb3J5SURzID0gKCk7CgogICAgICAgIGlmICggJFVzZXJDYXRHcm91cCAmJiByZWYgJFVzZXJDYXRHcm91cCBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICAjIFNvIG5vdyB3ZSBoYXZlIHRvIGV4dHJhY3QgYWxsIENhdGVnb3J5IElEJ3Mgb2YgdGhlICJpbm5lciBoYXNoZXMiLgogICAgICAgICAgICAjIC0+IExvb3AgdGhyb3VnaCB0aGUgb3V0ZXIgY2F0ZWdvcnkgSUQncwogICAgICAgICAgICBmb3IgbXkgJExldmVsICggc29ydCBrZXlzICV7JFVzZXJDYXRHcm91cH0gKSB7CgogICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgVmFsdWUgb2YgdGhlIGN1cnJlbnQgaGFzaCBrZXkgaXMgYSBoYXNoIHJlZgogICAgICAgICAgICAgICAgaWYgKCAkVXNlckNhdEdyb3VwLT57JExldmVsfSAmJiByZWYgJFVzZXJDYXRHcm91cC0+eyRMZXZlbH0gZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgICAgICAgICAjIE1hcCB0aGUga2V5cyBvZiB0aGUgaW5uZXIgaGFzaCB0byBhIFRlbXBJRHMgaGFzaAogICAgICAgICAgICAgICAgICAgICMgT3JpZ2luYWwgRGF0YXN0cnVjdHVyZToKICAgICAgICAgICAgICAgICAgICAjIHsKICAgICAgICAgICAgICAgICAgICAjICAnMScgPT4gJ01pc2MnLAogICAgICAgICAgICAgICAgICAgICMgICcyJyA9PiAnc2VjcmV0JwogICAgICAgICAgICAgICAgICAgICMgfQogICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAgICAjIGFmdGVyIG1hcHBpbmc6CiAgICAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICAgICMgewogICAgICAgICAgICAgICAgICAgICMgICcxJyA9PiAxLAogICAgICAgICAgICAgICAgICAgICMgICcyJyA9PiAxJwogICAgICAgICAgICAgICAgICAgICMgfQoKICAgICAgICAgICAgICAgICAgICBteSAlVGVtcElEcyA9IG1hcCB7ICRfID0+IDEgfSBrZXlzICV7ICRVc2VyQ2F0R3JvdXAtPnskTGV2ZWx9IH07CgogICAgICAgICAgICAgICAgICAgICMgUHV0IHRoZSBUZW1wSURzIG92ZXIgdGhlIGZvcm1hbGx5IGZvdW5kIEFsbG93ZWRDYXRlZ29yeXMKICAgICAgICAgICAgICAgICAgICAjIHRvIHByb2R1Y2UgYSBoYXNoIHRoYXQgaG9sZHMgYWxsIENhdGVnb3J5SUQgYXMga2V5cwogICAgICAgICAgICAgICAgICAgICMgYW5kIHRoZSBudW1iZXIgMSBhcyB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgJUFsbG93ZWRDYXRlZ29yeUlEcyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgJUFsbG93ZWRDYXRlZ29yeUlEcywKICAgICAgICAgICAgICAgICAgICAgICAgJVRlbXBJRHMKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEZvciB0aGUgZGF0YWJhc2UgcXVlcnkgaXQncyBuZWNlc3NhcnkgdG8gaGF2ZSBhbiBhcnJheQogICAgICAgICMgb2YgQ2F0ZWdvcnlJRHMKICAgICAgICBteSBAQ2F0ZWdvcnlJRHMgPSAoKTsKCiAgICAgICAgaWYgKCVBbGxvd2VkQ2F0ZWdvcnlJRHMpIHsKICAgICAgICAgICAgQENhdGVnb3J5SURzID0gc29ydCBrZXlzICVBbGxvd2VkQ2F0ZWdvcnlJRHM7CiAgICAgICAgfQoKICAgICAgICAjIENhdGVnb3JpZXMgZ290IGZyb20gdGhlIHdlYiByZXF1ZXN0IGNvdWxkIGluY2x1ZGUgYSBub3QgYWxsb3dlZCBjYXRlZ29yeSBpZiB0aGUgdXNlcgogICAgICAgICMgICAgdGVtcGVyIHdpdGggdGhlIGNhdGVnb3JpZXMgZHJvcGJveCwgYSBjaGVjayBpcyBuZWVkZWQuCiAgICAgICAgIwogICAgICAgICMgIk1hcCIgY29weSBmcm9tIG9uZSBhcnJheSB0byBhbm90aGVyLCB3aGlsZSAiZ3JlcCIgd2lsbCBvbmx5IGxldCBwYXNzIHRoZSBjYXRlZ29yaWVzCiAgICAgICAgIyAgICB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSAlQWxsb3dlZENhdGVnb3J5SURzIGhhc2gKICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJEdldFBhcmFte0NhdGVnb3J5SURzfSApICkgewogICAgICAgICAgICBAeyAkR2V0UGFyYW17Q2F0ZWdvcnlJRHN9IH0gPSBtYXAgeyRffSBncmVwIHsgJEFsbG93ZWRDYXRlZ29yeUlEc3skX30gfSBAeyAkR2V0UGFyYW17Q2F0ZWdvcnlJRHN9IH07CiAgICAgICAgfQoKICAgICAgICAjIEp1c3Qgc2VhcmNoIGlmIHdlIGRvIGhhdmUgY2F0ZWdvcmllcywgd2UgaGF2ZSBhY2Nlc3MgdG8uCiAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byBhbnkgY2F0ZWdvcnksIGEgc2VhcmNoIHdpdGggbm8gQ2F0ZWdvcnlJRHMKICAgICAgICAjIHdvdWxkIHJlc3VsdCBpbiBmaW5kaW5nIGFsbCBjYXRlZ29yaWVzLgogICAgICAgICMKICAgICAgICAjIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgRkFRJ3Mgd2l0aG91dCBjYXRlZ29yaWVzCiAgICAgICAgIyBzbyBhdCBsZWFzdCBvbmUgY2F0ZWdvcnkgaGFzIHRvIGJlIHByZXNlbnQKCiAgICAgICAgbXkgQFZpZXdhYmxlRkFRSURzID0gKCk7CgogICAgICAgIGlmIChAQ2F0ZWdvcnlJRHMpIHsKCiAgICAgICAgICAgICMgcGVyZm9ybSBGQVEgc2VhcmNoCiAgICAgICAgICAgICMgZGVmYXVsdCBzZWFyY2ggb24gYWxsIHZhbGlkIGlkcywgdGhpcyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgJUdldFBhcmFtCiAgICAgICAgICAgIEBWaWV3YWJsZUZBUUlEcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRU2VhcmNoKAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICAgICA9PiBbICRTZWxmLT57U29ydEJ5fSBdLAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiAgICA9PiBbICRTZWxmLT57T3JkZXJCeX0gXSwKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgICAgPT4gJFNlbGYtPntTZWFyY2hMaW1pdH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIFN0YXRlcyAgICAgICAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZX0sCiAgICAgICAgICAgICAgICBDb250ZW50U2VhcmNoUHJlZml4ID0+ICcqJywKICAgICAgICAgICAgICAgIENvbnRlbnRTZWFyY2hTdWZmaXggPT4gJyonLAogICAgICAgICAgICAgICAgVmFsaWRJRHMgICAgICAgICAgICA9PiBcQEFsbFZhbGlkSURzLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRHMgICAgICAgICA9PiBcQENhdGVnb3J5SURzLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDU1Ygb3V0cHV0CiAgICAgICAgaWYgKCAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gZXEgJ0NTVicgKSB7CiAgICAgICAgICAgIG15IEBDU1ZIZWFkOwogICAgICAgICAgICBteSBAQ1NWRGF0YTsKCiAgICAgICAgICAgIGZvciBteSAkRkFRSUQgKEBWaWV3YWJsZUZBUUlEcykgewoKICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBkYXRhIGRldGFpbHMKICAgICAgICAgICAgICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAkQ2hhbmdlZCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICckVGltZUxvbmd7IiREYXRheyJDaGFuZ2VkIn0ifScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gXCVGQVFEYXRhLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGdldCBpbmZvIGZvciBDU1Ygb3V0cHV0CiAgICAgICAgICAgICAgICBteSAlQ1NWSW5mbyA9ICgKICAgICAgICAgICAgICAgICAgICBGQVFOdW1iZXIgPT4gJEZBUURhdGF7TnVtYmVyfSwKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgPT4gJEZBUURhdGF7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgIENhdGVnb3J5ICA9PiAkRkFRRGF0YXtDYXRlZ29yeU5hbWV9LAogICAgICAgICAgICAgICAgICAgIExhbmd1YWdlICA9PiAkRkFRRGF0YXtMYW5ndWFnZX0sCiAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgID0+ICRGQVFEYXRhe1N0YXRlfSwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkICAgPT4gJENoYW5nZWQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY3N2IHF1b3RlCiAgICAgICAgICAgICAgICBpZiAoICFAQ1NWSGVhZCApIHsKICAgICAgICAgICAgICAgICAgICBAQ1NWSGVhZCA9IHF3KCBGQVFOdW1iZXIgVGl0bGUgQ2F0ZWdvcnkpOwoKICAgICAgICAgICAgICAgICAgICAjIGluc2VydCBsYW5ndWFnZSBoZWFkZXIKICAgICAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICdMYW5ndWFnZSc7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCBxdyhTdGF0ZSBDaGFuZ2VkKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGluc3NlcnQgZGF0YQogICAgICAgICAgICAgICAgbXkgQERhdGE7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEhlYWRlciAoQENTVkhlYWQpIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBEYXRhLCAkQ1NWSW5mb3skSGVhZGVyfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2ggQENTVkRhdGEsIFxARGF0YTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjc3YgcXVvdGUKICAgICAgICAgICAgIyB0cmFuc2xhdGUgbm9uIGV4aXN0aW5nIGhlYWRlciBtYXkgcmVzdWx0IGluIGEgZ2FyYmFnZSBmaWxlCiAgICAgICAgICAgIGlmICggIUBDU1ZIZWFkICkgewogICAgICAgICAgICAgICAgQENTVkhlYWQgPSBxdyhGQVFOdW1iZXIgVGl0bGUgQ2F0ZWdvcnkpOwoKICAgICAgICAgICAgICAgICMgaW5zZXJ0IGxhbmd1YWdlIGhlYWRlcgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICdMYW5ndWFnZSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgcXcoU3RhdGUgQ2hhbmdlZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdHJhbnNsYXRlIGhlYWRlcnMKICAgICAgICAgICAgZm9yIG15ICRIZWFkZXIgKEBDU1ZIZWFkKSB7CgogICAgICAgICAgICAgICAgIyByZXBsYWNlIEZBUU51bWJlciBoZWFkZXIgd2l0aCB0aGUgY3VycmVudCBGQVFIb29rIGZyb20gY29uZmlnCiAgICAgICAgICAgICAgICBpZiAoICRIZWFkZXIgZXEgJ0ZBUU51bWJlcicgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhlYWRlciA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkZBUUhvb2snKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRIZWFkZXIgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgkSGVhZGVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhc3NhYmxlIENTViBkYXRhCiAgICAgICAgICAgIG15ICRDU1YgPSAkU2VsZi0+e0NTVk9iamVjdH0tPkFycmF5MkNTVigKICAgICAgICAgICAgICAgIEhlYWQgICAgICA9PiBcQENTVkhlYWQsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgPT4gXEBDU1ZEYXRhLAogICAgICAgICAgICAgICAgU2VwYXJhdG9yID0+ICRTZWxmLT57VXNlckNTVlNlcGFyYXRvcn0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJldHVybiBjc3YgdG8gZG93bmxvYWQKICAgICAgICAgICAgbXkgJENTVkZpbGUgPSAnRkFRX3NlYXJjaCc7CiAgICAgICAgICAgIG15ICggJHMsICRtLCAkaCwgJEQsICRNLCAkWSApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRNID0gc3ByaW50ZiggIiUwMmQiLCAkTSApOwogICAgICAgICAgICAkRCA9IHNwcmludGYoICIlMDJkIiwgJEQgKTsKICAgICAgICAgICAgJGggPSBzcHJpbnRmKCAiJTAyZCIsICRoICk7CiAgICAgICAgICAgICRtID0gc3ByaW50ZiggIiUwMmQiLCAkbSApOwogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJENTVkZpbGUgLiAiXyIgLiAiJFktJE0tJEQiIC4gIl8iIC4gIiRoLSRtLmNzdiIsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAidGV4dC9jc3Y7IGNoYXJzZXQ9IiAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRDU1YsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdQcmludCcgKSB7CgogICAgICAgICAgICBteSBAUERGRGF0YTsKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEgZGV0YWlscwogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIFBERk9iamVjdAogICAgICAgICAgICAgICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpQREY7CiAgICAgICAgICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6UERGLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgICAgICAgICAgICAgIyBzZXQgY2hhbmdlIGRhdGUgdG8gbG9uZyBmb3JtYXQKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntQREZPYmplY3R9ICkgewogICAgICAgICAgICAgICAgICAgIG15ICRDaGFuZ2VkID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICckVGltZUxvbmd7IiREYXRheyJDaGFuZ2VkIn0ifScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwlRkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGNyZWF0ZSBQREYgUm93cwogICAgICAgICAgICAgICAgICAgIG15IEBQREZSb3c7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAUERGUm93LCAkRkFRRGF0YXtOdW1iZXJ9OwogICAgICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgJEZBUURhdGF7VGl0bGV9OwogICAgICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgJEZBUURhdGF7Q2F0ZWdvcnlOYW1lfTsKCiAgICAgICAgICAgICAgICAgICAgIyBjcmVhdGUgbGFuZ3VhZ2Ugcm93CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICRGQVFEYXRhe0xhbmd1YWdlfTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRGQVFEYXRhe1N0YXRlfTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICAkQ2hhbmdlZDsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBQREZEYXRhLCBcQFBERlJvdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIGFkZCB0YWJsZSBibG9jawogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBsYW5ndWFnZSBkYXRhCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBQREYgT3V0cHV0CiAgICAgICAgICAgIGlmICggJFNlbGYtPntQREZPYmplY3R9ICkgewogICAgICAgICAgICAgICAgbXkgJFRpdGxlID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0ZBUScpIC4gJyAnCiAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU2VhcmNoJyk7CiAgICAgICAgICAgICAgICBteSAkUHJpbnRlZEJ5ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ3ByaW50ZWQgYnknKTsKICAgICAgICAgICAgICAgIG15ICRQYWdlICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnUGFnZScpOwogICAgICAgICAgICAgICAgbXkgJFRpbWUgICAgICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KCBUZW1wbGF0ZSA9PiAnJEVudnsiVGltZSJ9JyApOwogICAgICAgICAgICAgICAgbXkgJFVybCAgICAgICA9ICcnOwogICAgICAgICAgICAgICAgaWYgKCAkRU5We1JFUVVFU1RfVVJJfSApIHsKICAgICAgICAgICAgICAgICAgICAkVXJsID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0h0dHBUeXBlJykgLiAnOi8vJwogICAgICAgICAgICAgICAgICAgICAgICAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGUUROJykKICAgICAgICAgICAgICAgICAgICAgICAgLiAkRU5We1JFUVVFU1RfVVJJfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCBtYXhpbXVtIG51bWJlciBvZiBwYWdlcwogICAgICAgICAgICAgICAgbXkgJE1heFBhZ2VzID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgICAgICAgICAgICAgIGlmICggISRNYXhQYWdlcyB8fCAkTWF4UGFnZXMgPCAxIHx8ICRNYXhQYWdlcyA+IDEwMDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJE1heFBhZ2VzID0gMTAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBoZWFkZXIKICAgICAgICAgICAgICAgIG15ICRDZWxsRGF0YTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMF0tPntDb250ZW50fSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkZBUUhvb2snKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMF0tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMV0tPntDb250ZW50fSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdUaXRsZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsxXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsyXS0+e0NvbnRlbnR9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NhdGVnb3J5Jyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzJdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CgogICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgY29ycmVjdCBoZWFkZXIgaW5kZXgKICAgICAgICAgICAgICAgIG15ICROZXh0SGVhZGVySW5kZXggPSAzOwoKICAgICAgICAgICAgICAgICMgYWRkIGxhbmd1YWdlIGhlYWRlcgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bM10tPntDb250ZW50fSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYW5ndWFnZScpOwogICAgICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bM10tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAgICAgICAgICAgICAkTmV4dEhlYWRlckluZGV4ICAgICAgICAgICAgICAgPSA0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bJE5leHRIZWFkZXJJbmRleF0tPntDb250ZW50fSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdTdGF0ZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlskTmV4dEhlYWRlckluZGV4XS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwoKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bICROZXh0SGVhZGVySW5kZXggKyAxIF0tPntDb250ZW50fQogICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NoYW5nZWQnKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bICROZXh0SGVhZGVySW5kZXggKyAxIF0tPntGb250fSA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgY29udGVudCBhcnJheQogICAgICAgICAgICAgICAgbXkgJENvdW50ZXJSb3cgPSAxOwogICAgICAgICAgICAgICAgZm9yIG15ICRSb3cgKEBQREZEYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENvdW50ZXJDb2x1bW4gPSAwOwogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ29udGVudCAoIEB7JFJvd30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WyRDb3VudGVyUm93XS0+WyRDb3VudGVyQ29sdW1uXS0+e0NvbnRlbnR9ID0gJENvbnRlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICRDb3VudGVyQ29sdW1uKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRDb3VudGVyUm93Kys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgJ05vIFJlc3VsdCcsIGlmIG5vIGNvbnRlbnQgd2FzIGdpdmVuCiAgICAgICAgICAgICAgICBpZiAoICEkQ2VsbERhdGEtPlswXS0+WzBdICkgewogICAgICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMF0tPntDb250ZW50fSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdObyBSZXN1bHQhJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBwYWdlIHBhcmFtcwogICAgICAgICAgICAgICAgbXkgJVBhZ2VQYXJhbTsKICAgICAgICAgICAgICAgICRQYWdlUGFyYW17UGFnZU9yaWVudGF0aW9ufSA9ICdsYW5kc2NhcGUnOwogICAgICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5Ub3B9ICAgICAgID0gMzA7CiAgICAgICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpblJpZ2h0fSAgICAgPSA0MDsKICAgICAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luQm90dG9tfSAgICA9IDQwOwogICAgICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5MZWZ0fSAgICAgID0gNDA7CiAgICAgICAgICAgICAgICAkUGFnZVBhcmFte0hlYWRlclJpZ2h0fSAgICAgPSAkVGl0bGU7CiAgICAgICAgICAgICAgICAkUGFnZVBhcmFte0Zvb3RlckxlZnR9ICAgICAgPSAkVXJsOwogICAgICAgICAgICAgICAgJFBhZ2VQYXJhbXtIZWFkbGluZUxlZnR9ICAgID0gJFRpdGxlOwogICAgICAgICAgICAgICAgJFBhZ2VQYXJhbXtIZWFkbGluZVJpZ2h0fSAgID0gJFByaW50ZWRCeSAuICcgJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRmlyc3RuYW1lfSAuICcgJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyTGFzdG5hbWV9IC4gJyAoJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRW1haWx9IC4gJykgJwogICAgICAgICAgICAgICAgICAgIC4gJFRpbWU7CgogICAgICAgICAgICAgICAgIyB0YWJsZSBwYXJhbXMKICAgICAgICAgICAgICAgIG15ICVUYWJsZVBhcmFtOwogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9ICAgICAgICAgICAgPSAkQ2VsbERhdGE7CiAgICAgICAgICAgICAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgPSA2OwogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gPSAnI0FBQUFBQSc7CiAgICAgICAgICAgICAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JPZGR9ICA9ICcjREREREREJzsKICAgICAgICAgICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgID0gMTsKICAgICAgICAgICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgID0gMzsKICAgICAgICAgICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgID0gMzsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBuZXcgcGRmIGRvY3VtZW50CiAgICAgICAgICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPkRvY3VtZW50TmV3KAogICAgICAgICAgICAgICAgICAgIFRpdGxlICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRUaXRsZSwKICAgICAgICAgICAgICAgICAgICBFbmNvZGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHN0YXJ0IHRhYmxlIG91dHB1dAogICAgICAgICAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgICAgICVQYWdlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2UgLiAnIDEnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGZvciAoIDIgLi4gJE1heFBhZ2VzICkgewoKICAgICAgICAgICAgICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAgICAgICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIGFub3RoZXIgcGFnZQogICAgICAgICAgICAgICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhZ2VQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdlIC4gJyAnIC4gJF8sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmV0dXJuIHRoZSBwZGYgZG9jdW1lbnQKICAgICAgICAgICAgICAgIG15ICRGaWxlbmFtZSA9ICdGQVFfc2VhcmNoJzsKICAgICAgICAgICAgICAgIG15ICggJHMsICRtLCAkaCwgJEQsICRNLCAkWSApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRNID0gc3ByaW50ZiggIiUwMmQiLCAkTSApOwogICAgICAgICAgICAgICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAgICAgICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAgICAgICAgICRtID0gc3ByaW50ZiggIiUwMmQiLCAkbSApOwogICAgICAgICAgICAgICAgbXkgJFBERlN0cmluZyA9ICRTZWxmLT57UERGT2JqZWN0fS0+RG9jdW1lbnRPdXRwdXQoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVuYW1lIC4gIl8iIC4gIiRZLSRNLSREIiAuICJfIiAuICIkaC0kbS5wZGYiLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJhcHBsaWNhdGlvbi9wZGYiLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRQREZTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50SGVhZGVyKCBXaWR0aCA9PiA4MDAgKTsKICAgICAgICAgICAgICAgIGlmICggc2NhbGFyIEBWaWV3YWJsZUZBUUlEcyA9PSAkU2VsZi0+e1NlYXJjaExpbWl0fSApIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17V2FybmluZ30gPSAnJFRleHR7IlJlYWNoZWQgbWF4LiBjb3VudCBvZiAlcyBzZWFyY2ggaGl0cyEiLCAiJwogICAgICAgICAgICAgICAgICAgICAgICAuICRTZWxmLT57U2VhcmNoTGltaXR9IC4gJyJ9JzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZCBsYW5ndWFnZSBoZWFkZXIKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJMYW5ndWFnZScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFTZWFyY2hSZXN1bHRQcmludCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50Rm9vdGVyKCk7CgogICAgICAgICAgICAgICAgIyByZXR1cm4gb3V0cHV0CiAgICAgICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc3RhcnQgaHRtbCBwYWdlCiAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICAgICAgICAgJE91dHB1dCA9ICcnOwoKICAgICAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsdGVyJyApIHx8ICcnOwogICAgICAgICAgICAkU2VsZi0+e1ZpZXd9ICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdWaWV3JyApICAgfHwgJyc7CgogICAgICAgICAgICAjIHNob3cgRkFRJ3MKICAgICAgICAgICAgbXkgJExpbmtQYWdlID0gJ0ZpbHRlcj0nCiAgICAgICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAgICAgICAgIC4gJztWaWV3PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57Vmlld30gKQogICAgICAgICAgICAgICAgLiAnO1NvcnRCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e1NvcnRCeX0gKQogICAgICAgICAgICAgICAgLiAnO09yZGVyQnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntPcmRlckJ5fSApCiAgICAgICAgICAgICAgICAuICc7UHJvZmlsZT0nIC4gJFNlbGYtPntQcm9maWxlfSAuICc7VGFrZUxhc3RTZWFyY2g9MTtTdWJhY3Rpb249U2VhcmNoJwogICAgICAgICAgICAgICAgLiAnOyc7CiAgICAgICAgICAgIG15ICRMaW5rU29ydCA9ICdGaWx0ZXI9JwogICAgICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgICAgICAgICAuICc7Vmlldz0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAgICAgICAgIC4gJztQcm9maWxlPScgLiAkU2VsZi0+e1Byb2ZpbGV9IC4gJztUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2gnCiAgICAgICAgICAgICAgICAuICc7JzsKICAgICAgICAgICAgbXkgJExpbmtGaWx0ZXIgPSAnVGFrZUxhc3RTZWFyY2g9MTtTdWJhY3Rpb249U2VhcmNoO1Byb2ZpbGU9JwogICAgICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57UHJvZmlsZX0gKQogICAgICAgICAgICAgICAgLiAnOyc7CiAgICAgICAgICAgIG15ICRMaW5rQmFjayA9ICdTdWJhY3Rpb249TG9hZFByb2ZpbGU7UHJvZmlsZT0nCiAgICAgICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntQcm9maWxlfSApCiAgICAgICAgICAgICAgICAuICc7VGFrZUxhc3RTZWFyY2g9MTsnOwoKICAgICAgICAgICAgbXkgJEZpbHRlckxpbmsgPSAnU29ydEJ5PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57U29ydEJ5fSApCiAgICAgICAgICAgICAgICAuICc7T3JkZXJCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e09yZGVyQnl9ICkKICAgICAgICAgICAgICAgIC4gJztWaWV3PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57Vmlld30gKQogICAgICAgICAgICAgICAgLiAnO1Byb2ZpbGU9JyAuICRTZWxmLT57UHJvZmlsZX0gLiAnO1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaCcKICAgICAgICAgICAgICAgIC4gJzsnOwoKICAgICAgICAgICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgICAgICAgICBteSBAU2hvd0NvbHVtbnM7CiAgICAgICAgICAgIGlmICggJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgICAgICAgICAgZm9yIG15ICROYW1lICggc29ydCBrZXlzICVQb3NzaWJsZUNvbHVtbiApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICROYW1lOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZW5mb3JjZSBGQVEgbnVtYmVyIGNvbHVtbiBzaW5jZSBpcyB0aGUgbGluayBNYXN0ZXJBY3Rpb24gaG9vawogICAgICAgICAgICAgICAgaWYgKCAhJFBvc3NpYmxlQ29sdW1ueydOdW1iZXInfSApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJ051bWJlcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFMaXN0U2hvdygKICAgICAgICAgICAgICAgIEZBUUlEcyA9PiBcQFZpZXdhYmxlRkFRSURzLAogICAgICAgICAgICAgICAgVG90YWwgID0+IHNjYWxhciBAVmlld2FibGVGQVFJRHMsCgogICAgICAgICAgICAgICAgVmlldyA9PiAkU2VsZi0+e1ZpZXd9LAoKICAgICAgICAgICAgICAgIEVudiAgICAgICAgPT4gJFNlbGYsCiAgICAgICAgICAgICAgICBMaW5rUGFnZSAgID0+ICRMaW5rUGFnZSwKICAgICAgICAgICAgICAgIExpbmtTb3J0ICAgPT4gJExpbmtTb3J0LAogICAgICAgICAgICAgICAgTGlua0ZpbHRlciA9PiAkTGlua0ZpbHRlciwKICAgICAgICAgICAgICAgIExpbmtCYWNrICAgPT4gJExpbmtCYWNrLAogICAgICAgICAgICAgICAgUHJvZmlsZSAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAoKICAgICAgICAgICAgICAgIFRpdGxlTmFtZSA9PiAnU2VhcmNoIFJlc3VsdCcsCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgPT4gJFNlbGYtPntTZWFyY2hMaW1pdH0sCgogICAgICAgICAgICAgICAgRmlsdGVyICAgICA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgICAgICAgICBGaWx0ZXJMaW5rID0+ICRGaWx0ZXJMaW5rLAoKICAgICAgICAgICAgICAgIE9yZGVyQnkgPT4gJFNlbGYtPntPcmRlckJ5fSwKICAgICAgICAgICAgICAgIFNvcnRCeSAgPT4gJFNlbGYtPntTb3J0Qnl9LAoKICAgICAgICAgICAgICAgIFNob3dDb2x1bW5zID0+IFxAU2hvd0NvbHVtbnMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGJ1aWxkIGZvb3RlcgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KICAgIH0KCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWFByb2ZpbGVEZWxldGUnICkgewogICAgICAgIG15ICRQcm9maWxlID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvZmlsZScgKTsKCiAgICAgICAgIyByZW1vdmUgb2xkIHByb2ZpbGUgc3R1ZmYKICAgICAgICAkU2VsZi0+e1NlYXJjaFByb2ZpbGVPYmplY3R9LT5TZWFyY2hQcm9maWxlRGVsZXRlKAogICAgICAgICAgICBCYXNlICAgICAgPT4gJ0ZBUVNlYXJjaCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkUHJvZmlsZSwKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICApOwogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkpTT05FbmNvZGUoCiAgICAgICAgICAgIERhdGEgPT4gMSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBSkFYJyApIHsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0CiAgICAgICAgbXkgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tGb3JtKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENoYXJzZXQgICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgZGVmYXVsdCBzZWFyY2ggc2NyZWVuCiAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NlYXJjaCcsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUVNlYXJjaCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgcmV0dXJuICRPdXRwdXQ7Cgp9CgpzdWIgX01hc2tGb3JtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFByb2ZpbGUgPSAkU2VsZi0+e1Byb2ZpbGV9OwogICAgbXkgJEVtcHR5U2VhcmNoID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnRW1wdHlTZWFyY2gnICk7CiAgICBpZiAoICEkUHJvZmlsZSApIHsKICAgICAgICAkRW1wdHlTZWFyY2ggPSAxOwogICAgfQoKICAgIG15ICVHZXRQYXJhbSA9ICRTZWxmLT57U2VhcmNoUHJvZmlsZU9iamVjdH0tPlNlYXJjaFByb2ZpbGVHZXQoCiAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgIE5hbWUgICAgICA9PiAkUHJvZmlsZSwKICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgKTsKCiAgICAjIGlmIG5vIHByb2ZpbGUgaXMgdXNlZCwgc2V0IGRlZmF1bHQgcGFyYW1zIG9mIGRlZmF1bHQgYXR0cmlidXRlcwogICAgaWYgKCAhJFByb2ZpbGUgKSB7CiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntEZWZhdWx0c30gKSB7CiAgICAgICAgICAgIEFUVFJJQlVURToKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJFNlbGYtPntDb25maWd9LT57RGVmYXVsdHN9IH0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJFNlbGYtPntDb25maWd9LT57RGVmYXVsdHN9LT57JEF0dHJpYnV0ZX07CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JEF0dHJpYnV0ZX0gPSAkU2VsZi0+e0NvbmZpZ30tPntEZWZhdWx0c30tPnskQXR0cmlidXRlfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBhdHRyaWJ1dGVzIHN0cmluZwogICAgbXkgQEF0dHJpYnV0ZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgVmFsdWUgPT4gJ0ZBUSBOdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnRnVsbHRleHQnLAogICAgICAgICAgICBWYWx1ZSA9PiAnRnVsbHRleHQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnVGl0bGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAnVGl0bGUnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnS2V5d29yZCcsCiAgICAgICAgICAgIFZhbHVlID0+ICdLZXl3b3JkJywKICAgICAgICB9LAogICAgKTsKCiAgICAjIHNob3cgTGFuZ3VhZ2VzIGF0dHJpYnV0ZQogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0xhbmd1YWdlSURzJywKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBwdXNoIEBBdHRyaWJ1dGVzLCAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ2F0ZWdvcnlJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiAnQ2F0ZWdvcnknLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnVmFsaWRJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiAnVmFsaWRpdHknLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZHJvcGRvd24gbWVudSBmb3IgJ2F0dHJpYnV0ZXMnCiAgICAkUGFyYW17QXR0cmlidXRlc1N0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICA9PiBcQEF0dHJpYnV0ZXMsCiAgICAgICAgTmFtZSAgICAgPT4gJ0F0dHJpYnV0ZScsCiAgICAgICAgTXVsdGlwbGUgPT4gMCwKICAgICk7CiAgICAkUGFyYW17QXR0cmlidXRlc09yaWdTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgPT4gXEBBdHRyaWJ1dGVzLAogICAgICAgIE5hbWUgICAgID0+ICdBdHRyaWJ1dGVPcmlnJywKICAgICAgICBNdWx0aXBsZSA9PiAwLAogICAgKTsKCiAgICAjIGdldCBsYW5ndWFnZXMgbGlzdAogICAgbXkgJUxhbmd1YWdlcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZHJvcGRvd24gbWVudSBmb3IgJ2xhbmd1YWdlcycKICAgICRQYXJhbXtMYW5ndWFnZXNTZWxlY3Rpb25TdHJpbmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlTGFuZ3VhZ2VzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0xhbmd1YWdlSURzJywKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFte0xhbmd1YWdlSURzfSB8fCBbXSwKICAgICk7CgogICAgIyBnZXQgY2F0ZWdvcmllcyAod2l0aCBjYXRlZ29yeSBsb25nIG5hbWVzKSB3aGVyZSB1c2VyIGhhcyByaWdodHMKICAgIG15ICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+R2V0VXNlckNhdGVnb3JpZXNMb25nTmFtZXMoCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBidWlsZCB0aGUgY2F0ZWdvcnkgc2VsZWN0aW9uCiAgICAkUGFyYW17Q2F0ZWdvcmllc1NlbGVjdGlvblN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+ICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcywKICAgICAgICBOYW1lICAgICAgICA9PiAnQ2F0ZWdvcnlJRHMnLAogICAgICAgIFNlbGVjdGVkSURzID0+ICRHZXRQYXJhbXtDYXRlZ29yeUlEc30gfHwgW10sCiAgICAgICAgU2l6ZSAgICAgICAgPT4gNSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICApOwoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CgogICAgIyBidWlsZCB0aGUgdmFsaWQgc2VsZWN0aW9uCiAgICAkUGFyYW17VmFsaWRTZWxlY3Rpb25TdHJpbmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgICA9PiAnVmFsaWRJRHMnLAogICAgICAgIFNlbGVjdGVkSURzID0+ICRHZXRQYXJhbXtWYWxpZElEc30gfHwgW10sCiAgICAgICAgU2l6ZSAgICAgICAgPT4gNSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICApOwoKICAgIG15ICVQcm9maWxlcyA9ICRTZWxmLT57U2VhcmNoUHJvZmlsZU9iamVjdH0tPlNlYXJjaFByb2ZpbGVMaXN0KAogICAgICAgIEJhc2UgICAgICA9PiAnRkFRU2VhcmNoJywKICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgKTsKICAgIGRlbGV0ZSAkUHJvZmlsZXN7Jyd9OwogICAgZGVsZXRlICRQcm9maWxlc3snbGFzdC1zZWFyY2gnfTsKICAgIGlmICgkRW1wdHlTZWFyY2gpIHsKICAgICAgICAkUHJvZmlsZXN7Jyd9ID0gJy0nOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFByb2ZpbGVzeydsYXN0LXNlYXJjaCd9ID0gJy0nOwogICAgfQogICAgJFBhcmFte1Byb2ZpbGVzU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVQcm9maWxlcywKICAgICAgICBOYW1lICAgICAgID0+ICdQcm9maWxlJywKICAgICAgICBJRCAgICAgICAgID0+ICdTZWFyY2hQcm9maWxlJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQcm9maWxlLAogICAgKTsKCiAgICAkUGFyYW17UmVzdWx0Rm9ybVN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgTm9ybWFsID0+ICdOb3JtYWwnLAogICAgICAgICAgICBQcmludCAgPT4gJ1ByaW50JywKICAgICAgICAgICAgQ1NWICAgID0+ICdDU1YnLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnUmVzdWx0Rm9ybScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gfHwgJ05vcm1hbCcsCiAgICApOwoKICAgICMgaHRtbCBzZWFyY2ggbWFzayBvdXRwdXQKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2VhcmNoQUpBWCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBFbXB0eVNlYXJjaCA9PiAkRW1wdHlTZWFyY2gsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzaG93IGF0dHJpYnV0ZXMKICAgIG15ICVBbHJlYWR5U2hvd247CiAgICBJVEVNOgogICAgZm9yIG15ICRJdGVtIChAQXR0cmlidXRlcykgewogICAgICAgIG15ICRLZXkgPSAkSXRlbS0+e0tleX07CiAgICAgICAgbmV4dCBJVEVNIGlmICEkS2V5OwogICAgICAgIG5leHQgSVRFTSBpZiAhZGVmaW5lZCAkR2V0UGFyYW17JEtleX07CiAgICAgICAgbmV4dCBJVEVNIGlmICRHZXRQYXJhbXskS2V5fSBlcSAnJzsKCiAgICAgICAgbmV4dCBJVEVNIGlmICRBbHJlYWR5U2hvd257JEtleX07CiAgICAgICAgJEFscmVhZHlTaG93bnskS2V5fSA9IDE7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU2VhcmNoQUpBWFNob3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAkS2V5LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBpZiBubyBhdHRyaWJ1dGUgaXMgc2hvd24sIHNob3cgZnVsbHRleHQgc2VhcmNoCiAgICBpZiAoICEkUHJvZmlsZSApIHsKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e0RlZmF1bHRzfSApIHsKICAgICAgICAgICAgS0VZOgogICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0NvbmZpZ30tPntEZWZhdWx0c30gfSApIHsKICAgICAgICAgICAgICAgIG5leHQgS0VZIGlmICRBbHJlYWR5U2hvd257JEtleX07CiAgICAgICAgICAgICAgICAkQWxyZWFkeVNob3dueyRLZXl9ID0gMTsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VhcmNoQUpBWFNob3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJEtleSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NlYXJjaEFKQVhTaG93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnRnVsbHRleHQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBidWlsZCBvdXRwdXQKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRU2VhcmNoJywKICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUVNlYXJjaFNtYWxsOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VhcmNoUHJvZmlsZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYWxpZDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAoCiAgICAgICAgcXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBVc2VyT2JqZWN0IEdyb3VwT2JqZWN0IENvbmZpZ09iamVjdCBNYWluT2JqZWN0IEVuY29kZU9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntGQVFPYmplY3R9ICAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZWFyY2hQcm9maWxlLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwoKICAgICMgZ2V0IGNvbmZpZyBmb3IgZnJvbnRlbmQKICAgICRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCIpOwoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICAkU2VsZi0+e0ludGVyZmFjZX0gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2ludGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QWdlbnQ6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdXRwdXQ7CgogICAgIyBnZXQgY29uZmlnIGRhdGEKICAgICRTZWxmLT57U3RhcnRIaXR9ID0gaW50KCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxICk7CiAgICAkU2VsZi0+e1NlYXJjaExpbWl0fSA9ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaExpbWl0fSB8fCA1MDA7CiAgICAkU2VsZi0+e1NvcnRCeX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnRkFRSUQnOwogICAgJFNlbGYtPntPcmRlckJ5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ09yZGVyQnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnT3JkZXI6OkRlZmF1bHQnfQogICAgICAgIHx8ICdEb3duJzsKICAgICRTZWxmLT57UHJvZmlsZX0gICAgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvZmlsZScgKSAgICAgICAgfHwgJyc7CiAgICAkU2VsZi0+e1NhdmVQcm9maWxlfSAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVQcm9maWxlJyApICAgIHx8ICcnOwogICAgJFNlbGYtPntUYWtlTGFzdFNlYXJjaH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdUYWtlTGFzdFNlYXJjaCcgKSB8fCAnJzsKICAgICRTZWxmLT57U2VsZWN0VGVtcGxhdGV9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VsZWN0VGVtcGxhdGUnICkgfHwgJyc7CiAgICAkU2VsZi0+e0VyYXNlVGVtcGxhdGV9ICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VyYXNlVGVtcGxhdGUnICkgIHx8ICcnOwogICAgbXkgJE5hdiA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ05hdicgKSB8fCAnJzsKCiAgICAjIHNlYXJjaCB3aXRoIGEgc2F2ZWQgdGVtcGxhdGUKICAgIGlmICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VhcmNoVGVtcGxhdGUnICkgJiYgJFNlbGYtPntQcm9maWxlfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249QWdlbnRGQVFTZWFyY2hTbWFsbDtTdWJhY3Rpb249U2VhcmNoO1Rha2VMYXN0U2VhcmNoPTE7U2F2ZVByb2ZpbGU9MTtQcm9maWxlPSRTZWxmLT57UHJvZmlsZX07TmF2PSROYXYiCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzaW5nbGUgcGFyYW1zCiAgICBteSAlR2V0UGFyYW07CgogICAgIyBsb2FkIHByb2ZpbGVzIHN0cmluZyBwYXJhbXMgKHByZXNzIGxvYWQgcHJvZmlsZSkKICAgIGlmICggKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0xvYWRQcm9maWxlJyAmJiAkU2VsZi0+e1Byb2ZpbGV9ICkgfHwgJFNlbGYtPntUYWtlTGFzdFNlYXJjaH0gKSB7CiAgICAgICAgJUdldFBhcmFtID0gJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fS0+U2VhcmNoUHJvZmlsZUdldCgKICAgICAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNlYXJjaCBzdHJpbmcgcGFyYW1zIChnZXQgc3VibWl0dGVkIHBhcmFtcykKICAgIGVsc2UgewoKICAgICAgICAjIGdldCBzY2FsYXIgc2VhcmNoIHBhcmFtcwogICAgICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhOdW1iZXIgVGl0bGUgS2V5d29yZCBGdWxsdGV4dCBSZXN1bHRGb3JtKSkgewogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKCiAgICAgICAgICAgICMgcmVtb3ZlIHdoaXRlc3BhY2Ugb24gdGhlIHN0YXJ0IGFuZCBlbmQKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPX4gc3sgXEEgXHMrIH17fXhtczsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9fiBzeyBccysgXHogfXt9eG1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGRiIHF1b3RlIHRvIHByZXZlbnQgU1FMIGluamVjdGlvbgogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRHZXRQYXJhbXskUGFyYW1OYW1lfSApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYXJyYXkgc2VhcmNoIHBhcmFtcwogICAgICAgIGZvciBteSAkU2VhcmNoUGFyYW0gKHF3KENhdGVnb3J5SURzIExhbmd1YWdlSURzIFZhbGlkSURzKSkgewogICAgICAgICAgICBteSBAQXJyYXkgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICRTZWFyY2hQYXJhbSApOwogICAgICAgICAgICBpZiAoQEFycmF5KSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFNlYXJjaFBhcmFtfSA9IFxAQXJyYXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgcmVzdWx0IGZvcm0gZW52CiAgICBpZiAoICEkR2V0UGFyYW17UmVzdWx0Rm9ybX0gKSB7CiAgICAgICAgJEdldFBhcmFte1Jlc3VsdEZvcm19ID0gJyc7CiAgICB9CgogICAgIyBzaG93IHJlc3VsdCBzaXRlCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VhcmNoJyAmJiAhJFNlbGYtPntFcmFzZVRlbXBsYXRlfSApIHsKCiAgICAgICAgIyBmaWxsIHVwIHByb2ZpbGUgbmFtZSAoZS5nLiB3aXRoIGxhc3Qtc2VhcmNoKQogICAgICAgIGlmICggISRTZWxmLT57UHJvZmlsZX0gfHwgISRTZWxmLT57U2F2ZVByb2ZpbGV9ICkgewogICAgICAgICAgICAkU2VsZi0+e1Byb2ZpbGV9ID0gJ2xhc3Qtc2VhcmNoJzsKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgbGFzdCBxdWV1ZSBzY3JlZW4KICAgICAgICBteSAkVVJMID0gIkFjdGlvbj1BZ2VudEZBUVNlYXJjaFNtYWxsO1N1YmFjdGlvbj1TZWFyY2g7UHJvZmlsZT0kU2VsZi0+e1Byb2ZpbGV9O1NvcnRCeT0kU2VsZi0+e1NvcnRCeX0iCiAgICAgICAgICAgIC4gIjtPcmRlckJ5PSRTZWxmLT57T3JkZXJCeX07VGFrZUxhc3RTZWFyY2g9MTtTdGFydEhpdD0kU2VsZi0+e1N0YXJ0SGl0fTtOYXY9JE5hdiI7CiAgICAgICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVUkwsCiAgICAgICAgKTsKCiAgICAgICAgIyBzYXZlIHNlYXJjaCBwcm9maWxlICh1bmRlciBsYXN0LXNlYXJjaCBvciByZWFsIHByb2ZpbGUgbmFtZSkKICAgICAgICAkU2VsZi0+e1NhdmVQcm9maWxlfSA9IDE7CgogICAgICAgICMgcmVtZW1iZXIgbGFzdCBzZWFyY2ggdmFsdWVzCiAgICAgICAgaWYgKCAkU2VsZi0+e1NhdmVQcm9maWxlfSAmJiAkU2VsZi0+e1Byb2ZpbGV9ICkgewoKICAgICAgICAgICAgIyByZW1vdmUgb2xkIHByb2ZpbGUgc3R1ZmYKICAgICAgICAgICAgJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fS0+U2VhcmNoUHJvZmlsZURlbGV0ZSgKICAgICAgICAgICAgICAgIEJhc2UgICAgICA9PiAnRkFRU2VhcmNoJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBwcm9maWxlIHBhcmFtcwogICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlR2V0UGFyYW0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1NlYXJjaFByb2ZpbGVPYmplY3R9LT5TZWFyY2hQcm9maWxlQWRkKAogICAgICAgICAgICAgICAgICAgICAgICBCYXNlICAgICAgPT4gJ0ZBUVNlYXJjaCcsCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJEtleSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRHZXRQYXJhbXskS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHByZXBhcmUgZnVsbHRleHQgc2VhcmNoCiAgICAgICAgaWYgKCAkR2V0UGFyYW17RnVsbHRleHR9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17Q29udGVudFNlYXJjaH0gPSAnT1InOwogICAgICAgICAgICAkR2V0UGFyYW17V2hhdH0gICAgICAgICAgPSAkR2V0UGFyYW17RnVsbHRleHR9OwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgVXNlckNhdGVnb3J5R3JvdXAgSGFzaAogICAgICAgICMgVGhpcyByZXR1cm5zIGEgSGFzaCBvZiB0aGUgZm9sbG93aW5nIHNhbXBsZSBkYXRhIHN0cnVjdHVyZToKICAgICAgICAjCiAgICAgICAgIyAkVXNlckNhdEdyb3VwID0gewogICAgICAgICMgICAnMScgPT4gewogICAgICAgICMgICAgICAgICAgJzMnID0+ICdNaXNjU3ViJwogICAgICAgICMgICAgICAgIH0sCiAgICAgICAgIyAgICczJyA9PiB7fSwKICAgICAgICAjICAgJzAnID0+IHsKICAgICAgICAjICAgICAgICAgICAgJzEnID0+ICdNaXNjJywKICAgICAgICAjICAgICAgICAgICAgJzInID0+ICdzZWNyZXQnCiAgICAgICAgIyAgICAgICAgICB9LAogICAgICAgICMgICAnMicgPT4ge30KICAgICAgICAjIH07CiAgICAgICAgIwogICAgICAgICMgS2V5cyBvZiB0aGUgb3V0ZXIgaGFzaCBpbmZvcm0gYWJvdXQgc3ViY2F0ZWdvcmllcwogICAgICAgICMgMCBTaG93cyB0b3AgbGV2ZWwgQ2F0ZWdvcnlJRHMuCiAgICAgICAgIyAxIFNob3dzIHRoZSBTdWJjYXRlZ29yeUlEcyBvZiBDYXRlZ29yeSAxLgogICAgICAgICMgMiBhbmQgMyBhcmUgZW1wdHkgaGFzaGVzIGJlY2F1c2UgdGhlc2UgY2F0ZWdvcmllcyBkb24ndCBoYXZlIHN1YmNhdGVnb3JpZXMuCiAgICAgICAgIwogICAgICAgICMgS2V5cyBvZiB0aGUgaW5uZXIgaGFzaGVzIGFyZSBDYXRlZ29yeUlEcyBhIHVzZXIgaXMgYWxsb3dlZCB0byBoYXZlIHJ3IGFjY2VzcyB0by4KICAgICAgICAjIFZhbHVlcyBhcmUgdGhlIENhdGVnb3J5IG5hbWVzLgoKICAgICAgICBteSAkVXNlckNhdEdyb3VwID0gJFNlbGYtPntGQVFPYmplY3R9LT5HZXRVc2VyQ2F0ZWdvcmllcygKICAgICAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBGaW5kIENhdGVnb3J5SURzIHRoZSBjdXJyZW50IFVzZXIgaXMgYWxsb3dlZCB0byB2aWV3CiAgICAgICAgbXkgJUFsbG93ZWRDYXRlZ29yeUlEcyA9ICgpOwoKICAgICAgICBpZiAoICRVc2VyQ2F0R3JvdXAgJiYgcmVmICRVc2VyQ2F0R3JvdXAgZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgIyBTbyBub3cgd2UgaGF2ZSB0byBleHRyYWN0IGFsbCBDYXRlZ29yeSBJRCdzIG9mIHRoZSAiaW5uZXIgaGFzaGVzIi4KICAgICAgICAgICAgIyAtPiBMb29wIHRocm91Z2ggdGhlIG91dGVyIGNhdGVnb3J5IElEJ3MKICAgICAgICAgICAgZm9yIG15ICRMZXZlbCAoIHNvcnQga2V5cyAleyRVc2VyQ2F0R3JvdXB9ICkgewoKICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlIFZhbHVlIG9mIHRoZSBjdXJyZW50IGhhc2gga2V5IGlzIGEgaGFzaCByZWYKICAgICAgICAgICAgICAgIGlmICggJFVzZXJDYXRHcm91cC0+eyRMZXZlbH0gJiYgcmVmICRVc2VyQ2F0R3JvdXAtPnskTGV2ZWx9IGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBNYXAgdGhlIGtleXMgb2YgdGhlIGlubmVyIGhhc2ggdG8gYSBUZW1wSURzIGhhc2gKICAgICAgICAgICAgICAgICAgICAjIE9yaWdpbmFsIERhdGFzdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgICAgIyB7CiAgICAgICAgICAgICAgICAgICAgIyAgJzEnID0+ICdNaXNjJywKICAgICAgICAgICAgICAgICAgICAjICAnMicgPT4gJ3NlY3JldCcKICAgICAgICAgICAgICAgICAgICAjIH0KICAgICAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgICAgIyBhZnRlciBtYXBwaW5nOgogICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAgICAjIHsKICAgICAgICAgICAgICAgICAgICAjICAnMScgPT4gMSwKICAgICAgICAgICAgICAgICAgICAjICAnMicgPT4gMScKICAgICAgICAgICAgICAgICAgICAjIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJVRlbXBJRHMgPSBtYXAgeyAkXyA9PiAxIH0ga2V5cyAleyAkVXNlckNhdEdyb3VwLT57JExldmVsfSB9OwoKICAgICAgICAgICAgICAgICAgICAjIFB1dCB0aGUgVGVtcElEcyBvdmVyIHRoZSBmb3JtYWxseSBmb3VuZCBBbGxvd2VkQ2F0ZWdvcnlzCiAgICAgICAgICAgICAgICAgICAgIyB0byBwcm9kdWNlIGEgaGFzaCB0aGF0IGhvbGRzIGFsbCBDYXRlZ29yeUlEIGFzIGtleXMKICAgICAgICAgICAgICAgICAgICAjIGFuZCB0aGUgbnVtYmVyIDEgYXMgdmFsdWVzLgogICAgICAgICAgICAgICAgICAgICVBbGxvd2VkQ2F0ZWdvcnlJRHMgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICVBbGxvd2VkQ2F0ZWdvcnlJRHMsCiAgICAgICAgICAgICAgICAgICAgICAgICVUZW1wSURzCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBGb3IgdGhlIGRhdGFiYXNlIHF1ZXJ5IGl0J3MgbmVjZXNzYXJ5IHRvIGhhdmUgYW4gYXJyYXkKICAgICAgICAjIG9mIENhdGVnb3J5SURzCiAgICAgICAgbXkgQENhdGVnb3J5SURzID0gKCk7CgogICAgICAgIGlmICglQWxsb3dlZENhdGVnb3J5SURzKSB7CiAgICAgICAgICAgIEBDYXRlZ29yeUlEcyA9IHNvcnQga2V5cyAlQWxsb3dlZENhdGVnb3J5SURzOwogICAgICAgIH0KCiAgICAgICAgIyBDYXRlZ29yaWVzIGdvdCBmcm9tIHRoZSB3ZWIgcmVxdWVzdCBjb3VsZCBpbmNsdWRlIGEgbm90IGFsbG93ZWQgY2F0ZWdvcnkgaWYgdGhlIHVzZXIKICAgICAgICAjICAgIHRlbXBlciB3aXRoIHRoZSBjYXRlZ29yaWVzIGRyb3Bib3gsIGEgY2hlY2sgaXMgbmVlZGVkLgogICAgICAgICMKICAgICAgICAjICJNYXAiIGNvcHkgZnJvbSBvbmUgYXJyYXkgdG8gYW5vdGhlciwgd2hpbGUgImdyZXAiIHdpbGwgb25seSBsZXQgcGFzcyB0aGUgY2F0ZWdvcmllcwogICAgICAgICMgICAgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgJUFsbG93ZWRDYXRlZ29yeUlEcyBoYXNoCiAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRHZXRQYXJhbXtDYXRlZ29yeUlEc30gKSApIHsKICAgICAgICAgICAgQHsgJEdldFBhcmFte0NhdGVnb3J5SURzfSB9ID0gbWFwIHskX30gZ3JlcCB7ICRBbGxvd2VkQ2F0ZWdvcnlJRHN7JF99IH0gQHsgJEdldFBhcmFte0NhdGVnb3J5SURzfSB9OwogICAgICAgIH0KCiAgICAgICAgIyBKdXN0IHNlYXJjaCBpZiB3ZSBkbyBoYXZlIGNhdGVnb3JpZXMsIHdlIGhhdmUgYWNjZXNzIHRvLgogICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IGNhdGVnb3J5LCBhIHNlYXJjaCB3aXRoIG5vIENhdGVnb3J5SURzCiAgICAgICAgIyB3b3VsZCByZXN1bHQgaW4gZmluZGluZyBhbGwgY2F0ZWdvcmllcy4KICAgICAgICAjCiAgICAgICAgIyBJdCBpcyBub3QgcG9zc2libGUgdG8gY3JlYXRlIEZBUSdzIHdpdGhvdXQgY2F0ZWdvcmllcwogICAgICAgICMgc28gYXQgbGVhc3Qgb25lIGNhdGVnb3J5IGhhcyB0byBiZSBwcmVzZW50CgogICAgICAgIG15IEBWaWV3YWJsZUZBUUlEcyA9ICgpOwoKICAgICAgICBpZiAoQENhdGVnb3J5SURzKSB7CgogICAgICAgICAgICAjIHBlcmZvcm0gRkFRIHNlYXJjaAogICAgICAgICAgICBAVmlld2FibGVGQVFJRHMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUVNlYXJjaCgKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgICAgPT4gWyAkU2VsZi0+e1NvcnRCeX0gXSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gICAgPT4gWyAkU2VsZi0+e09yZGVyQnl9IF0sCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBTdGF0ZXMgICAgICAgICAgICAgID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgICAgICAgICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICAgICAgICAgICAgICBDb250ZW50U2VhcmNoU3VmZml4ID0+ICcqJywKICAgICAgICAgICAgICAgIENhdGVnb3J5SURzICAgICAgICAgPT4gXEBDYXRlZ29yeUlEcywKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc3RhcnQgaHRtbCBwYWdlCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICAgICAkT3V0cHV0ID0gJyc7CgogICAgICAgICRTZWxmLT57RmlsdGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnJzsKICAgICAgICAkU2VsZi0+e1ZpZXd9ICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdWaWV3JyApICAgfHwgJyc7CgogICAgICAgICMgc2hvdyBGQVEncwogICAgICAgIG15ICRMaW5rUGFnZSA9ICdGaWx0ZXI9JwogICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAgICAgLiAnO1ZpZXc9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntWaWV3fSApCiAgICAgICAgICAgIC4gJztTb3J0Qnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntTb3J0Qnl9ICkKICAgICAgICAgICAgLiAnO09yZGVyQnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntPcmRlckJ5fSApCiAgICAgICAgICAgIC4gJztQcm9maWxlPScgLiAkU2VsZi0+e1Byb2ZpbGV9IC4gJztUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2gnCiAgICAgICAgICAgIC4gJztOYXY9JyAuICROYXYKICAgICAgICAgICAgLiAnOyc7CiAgICAgICAgbXkgJExpbmtTb3J0ID0gJ0ZpbHRlcj0nCiAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgICAgICAuICc7Vmlldz0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAgICAgLiAnO1Byb2ZpbGU9JyAuICRTZWxmLT57UHJvZmlsZX0gLiAnO1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaCcKICAgICAgICAgICAgLiAnO05hdj0nIC4gJE5hdgoKICAgICAgICAgICAgLiAnOyc7CiAgICAgICAgbXkgJExpbmtGaWx0ZXIgPSAnVGFrZUxhc3RTZWFyY2g9MTtTdWJhY3Rpb249U2VhcmNoO1Byb2ZpbGU9JwogICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntQcm9maWxlfSApCiAgICAgICAgICAgIC4gJztOYXY9JyAuICROYXYKICAgICAgICAgICAgLiAnOyc7CiAgICAgICAgbXkgJExpbmtCYWNrID0gJ1N1YmFjdGlvbj1Mb2FkUHJvZmlsZTtQcm9maWxlPScKICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57UHJvZmlsZX0gKQogICAgICAgICAgICAuICc7TmF2PScgLiAkTmF2CiAgICAgICAgICAgIC4gJztUYWtlTGFzdFNlYXJjaD0xOyc7CgogICAgICAgIG15ICRGaWx0ZXJMaW5rID0gJ1NvcnRCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e1NvcnRCeX0gKQogICAgICAgICAgICAuICc7T3JkZXJCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5MaW5rRW5jb2RlKCAkU2VsZi0+e09yZGVyQnl9ICkKICAgICAgICAgICAgLiAnO1ZpZXc9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntWaWV3fSApCiAgICAgICAgICAgIC4gJztQcm9maWxlPScgLiAkU2VsZi0+e1Byb2ZpbGV9IC4gJztUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2gnCiAgICAgICAgICAgIC4gJztOYXY9JyAuICROYXYKICAgICAgICAgICAgLiAnOyc7CgogICAgICAgICMgZmluZCBvdXQgd2hpY2ggY29sdW1ucyBzaG91bGQgYmUgc2hvd24KICAgICAgICBteSBAU2hvd0NvbHVtbnM7CiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICAgICAjIGdldCBhbGwgcG9zc2libGUgY29sdW1ucyBmcm9tIGNvbmZpZwogICAgICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICAgICAgQ09MVU1OTkFNRToKICAgICAgICAgICAgZm9yIG15ICROYW1lICggc29ydCBrZXlzICVQb3NzaWJsZUNvbHVtbiApIHsKICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OTkFNRSBpZiAhJFBvc3NpYmxlQ29sdW1ueyROYW1lfTsKICAgICAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkTmFtZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBlbmZvcmNlIEZBUSBudW1iZXIgY29sdW1uIHNpbmNlIGlzIHRoZSBsaW5rIE1hc3RlckFjdGlvbiBob29rCiAgICAgICAgICAgIGlmICggISRQb3NzaWJsZUNvbHVtbnsnTnVtYmVyJ30gKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJ051bWJlcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFMaXN0U2hvdygKICAgICAgICAgICAgRkFRSURzID0+IFxAVmlld2FibGVGQVFJRHMsCiAgICAgICAgICAgIFRvdGFsICA9PiBzY2FsYXIgQFZpZXdhYmxlRkFRSURzLAoKICAgICAgICAgICAgVmlldyA9PiAkU2VsZi0+e1ZpZXd9LAoKICAgICAgICAgICAgRW52ICAgICAgICA9PiAkU2VsZiwKICAgICAgICAgICAgTGlua1BhZ2UgICA9PiAkTGlua1BhZ2UsCiAgICAgICAgICAgIExpbmtTb3J0ICAgPT4gJExpbmtTb3J0LAogICAgICAgICAgICBMaW5rRmlsdGVyID0+ICRMaW5rRmlsdGVyLAogICAgICAgICAgICBMaW5rQmFjayAgID0+ICRMaW5rQmFjaywKICAgICAgICAgICAgUHJvZmlsZSAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAoKICAgICAgICAgICAgVGl0bGVOYW1lID0+ICdTZWFyY2ggUmVzdWx0JywKICAgICAgICAgICAgTGltaXQgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAoKICAgICAgICAgICAgRmlsdGVyICAgICA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgICAgIEZpbHRlckxpbmsgPT4gJEZpbHRlckxpbmssCgogICAgICAgICAgICBPcmRlckJ5ID0+ICRTZWxmLT57T3JkZXJCeX0sCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJFNlbGYtPntTb3J0Qnl9LAoKICAgICAgICAgICAgU2hvd0NvbHVtbnMgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICAgICAgTmF2ICAgICAgICAgPT4gJE5hdiwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgIGVsc2UgewogICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVHlwZSA9PiAnU21hbGwnICk7CgogICAgICAgICMgY3JlYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrRm9ybSgKICAgICAgICAgICAgTmF2ID0+ICROYXYsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9NYXNrRm9ybSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHByb2ZpbGVzIGxpc3QKICAgIG15ICVQcm9maWxlcyA9ICRTZWxmLT57U2VhcmNoUHJvZmlsZU9iamVjdH0tPlNlYXJjaFByb2ZpbGVMaXN0KAogICAgICAgIEJhc2UgICAgICA9PiAnRkFRU2VhcmNoJywKICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgKTsKCiAgICAjIGJ1aWxkIHByb2ZpbGVzIG91dHB1dCBsaXN0CiAgICAkUGFyYW17UHJvZmlsZXNTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUHJvZmlsZXN9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnUHJvZmlsZScsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtQcm9maWxlfSwKICAgICk7CgogICAgIyBnZXQgbGFuZ3VhZ2VzIGxpc3QKICAgIG15ICVMYW5ndWFnZXMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGJ1aWxkIGxhbmd1YWdlcyBvdXRwdXQgbGlzdAogICAgJFBhcmFte0xhbmd1YWdlc1N0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IHslTGFuZ3VhZ2VzfSwKICAgICAgICBOYW1lICAgICAgID0+ICdMYW5ndWFnZUlEcycsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtMYW5ndWFnZUlEc30sCiAgICApOwoKICAgICMgZ2V0IGNhdGVnb3JpZXMgbGlzdAogICAgbXkgJENhdGVnb3JpZXMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkdldFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdydycsCiAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBidWlsZCBjYXRlZ29yaWVzIG91dHB1dCBsaXN0CiAgICAkUGFyYW17Q2F0ZWdvcmllc1N0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRDYXRlZ29yaWVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NhdGVnb3J5SURzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0NhdGVnb3J5SURzfSwKICAgICk7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoKTsKCiAgICAjIGJ1aWxkIHRoZSB2YWxpZCBzZWxlY3Rpb24KICAgICRQYXJhbXtWYWxpZFNlbGVjdGlvblN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgID0+ICdWYWxpZElEcycsCiAgICAgICAgU2VsZWN0ZWRJRHMgPT4gJFBhcmFte1ZhbGlkSURzfSB8fCBbXSwKICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICk7CgogICAgIyBodG1sIHNlYXJjaCBtYXNrIG91dHB1dAogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZWFyY2gnLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgc2hvdyBsYW5ndWFnZXMgc2VsZWN0CiAgICBpZiAoICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFuZ3VhZ2UnLAogICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICk7CiAgICB9CgogICAgIyBodG1sIHNlYXJjaCBtYXNrIG91dHB1dAogICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFTZWFyY2hTbWFsbCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAoCiAgICAgICAgcXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QgVXNlck9iamVjdCBHcm91cE9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICAkU2VsZi0+e0xpbmtPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntGQVFPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyglUGFyYW0pOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJGQVE6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgJFNlbGYtPntJbnRlcmZhY2V9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgTmFtZSAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkFnZW50OjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgZGVmYXVsdCBvcHRpb25zCiAgICAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwogICAgJFNlbGYtPntWb3Rpbmd9ICAgICAgICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OlZvdGluZycpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSb30gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBybyBwZXJtaXNzaW9uIScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKICAgICRHZXRQYXJhbXtJdGVtSUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnSXRlbUlEJyApOwogICAgJEdldFBhcmFte1JhdGV9ICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdSYXRlJyApOwoKICAgICMgZ2V0IG5hdmlnYXRpb24gYmFyIG9wdGlvbgogICAgbXkgJE5hdiA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ05hdicgKSB8fCAnJzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJEdldFBhcmFte0l0ZW1JRH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIEl0ZW1JRCBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEZBUSBpdGVtIGRhdGEKICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJUZBUURhdGEgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgIH0KCiAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgbXkgJFBlcm1pc3Npb24gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNoZWNrQ2F0ZWdvcnlVc2VyUGVybWlzc2lvbigKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBDYXRlZ29yeUlEID0+ICRGQVFEYXRhe0NhdGVnb3J5SUR9LAogICAgKTsKCiAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgaWYgKCAhJFBlcm1pc3Npb24gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgaGF2ZSBubyBwZXJtaXNzaW9uIGZvciB0aGlzIGNhdGVnb3J5IScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBIVE1MVmlldyBTdWJhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSFRNTFZpZXcnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkRmllbGQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJGaWVsZCIgKTsKCiAgICAgICAgIyBuZWVkZWQgcGFyYW1zCiAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KCBJdGVtSUQgRmllbGQgKSkgewogICAgICAgICAgICBpZiAoICEkTmVlZGVkICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWRlZCBQYXJhbTogJE5lZWRlZCEiLAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgRmllbGQgY29udGVudAogICAgICAgIG15ICRGaWVsZENvbnRlbnQgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkl0ZW1GaWVsZEdldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBGaWVsZCAgPT4gJEZpZWxkLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmV3cml0ZSBoYW5kbGUgYW5kIGFjdGlvbiwgdGFrZSBjYXJlIG9mIG9sZCBzdHlsZSBiZWZvcmUgRkFRIDIuMC54CiAgICAgICAgJEZpZWxkQ29udGVudCA9fiBzewogICAgICAgICAgICBBY3Rpb249QWdlbnRGQVEgWyZdKGFtcDspPyBTdWJhY3Rpb249RG93bmxvYWQgWyZdKGFtcDspPwogICAgICAgIH17QWN0aW9uPUFnZW50RkFRWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O31neG1zOwoKICAgICAgICAjIGJ1aWxkIGJhc2UgdXJsIGZvciBpbmxpbmUgaW1hZ2VzCiAgICAgICAgbXkgJFNlc3Npb25JRCA9ICcnOwogICAgICAgIGlmICggJFNlbGYtPntTZXNzaW9uSUR9ICYmICEkU2VsZi0+e1Nlc3Npb25JRENvb2tpZX0gKSB7CiAgICAgICAgICAgICRTZXNzaW9uSUQgPSAnOycgLiAkU2VsZi0+e1Nlc3Npb25OYW1lfSAuICc9JyAuICRTZWxmLT57U2Vzc2lvbklEfTsKICAgICAgICAgICAgJEZpZWxkQ29udGVudCA9fiBzewogICAgICAgICAgICAgICAgKEFjdGlvbj1BZ2VudEZBUVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtJdGVtSUQ9XGQrO0ZpbGVJRD1cZCspCiAgICAgICAgICAgIH17JDEkU2Vzc2lvbklEfWdtc3g7CiAgICAgICAgfQoKICAgICAgICAjIGRldGVjdCBhbGwgcGxhaW4gdGV4dCBsaW5rcyBhbmQgcHV0IHRoZW0gaW50byBhbiBIVE1MIDxhPiB0YWcKICAgICAgICAkRmllbGRDb250ZW50ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57SFRNTFV0aWxzT2JqZWN0fS0+TGlua1F1b3RlKAogICAgICAgICAgICBTdHJpbmcgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICApOwoKICAgICAgICAjIHNldCB0YXJnZXQ9Il9ibGFuayIgYXR0cmlidXRlIHRvIGFsbCBIVE1MIDxhPiB0YWdzCiAgICAgICAgIyB0aGUgTGlua1F1b3RlIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBhZ2FpbgogICAgICAgICRGaWVsZENvbnRlbnQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntIVE1MVXRpbHNPYmplY3R9LT5MaW5rUXVvdGUoCiAgICAgICAgICAgIFN0cmluZyAgICA9PiAkRmllbGRDb250ZW50LAogICAgICAgICAgICBUYXJnZXRBZGQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBuZWVkZWQgSFRNTCBoZWFkZXJzCiAgICAgICAgJEZpZWxkQ29udGVudCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0hUTUxVdGlsc09iamVjdH0tPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyAgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICAgICAgQ2hhcnNldCA9PiAndXRmLTgnLAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIGNvbXBsZXRlIEhUTUwgYXMgYW4gYXR0YWNobWVudAogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIERvd25sb2FkQXR0YWNobWVudCBTdWJhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRG93bmxvYWRBdHRhY2htZW50JyApIHsKCiAgICAgICAgIyBtYW5hZ2UgcGFyYW1ldGVycwogICAgICAgICRHZXRQYXJhbXtGaWxlSUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsZUlEJyApOwoKICAgICAgICBpZiAoICFkZWZpbmVkICRHZXRQYXJhbXtGaWxlSUR9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICdOZWVkIEZpbGVJRCcgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGF0dGFjaG1lbnRzCiAgICAgICAgbXkgJUZpbGUgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgRmlsZUlEID0+ICRHZXRQYXJhbXtGaWxlSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCVGaWxlKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoJUZpbGUpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBhdHRhY2htZW50ICgkR2V0UGFyYW17RmlsZUlEfSkhIE1heSBiZSBhbiBhdHRhY2shISEiLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJE91dHB1dDsKICAgIGlmICggJE5hdiBlcSAnTm9uZScgKSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBzbWFsbCBhbmQgbm8gTmF2YmFyCiAgICAgICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmlnYXRpb24gYmFyCiAgICAgICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtUaXRsZX0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgfQoKICAgICMgZ2V0IEZBUSB2b3RlIGluZm9ybWF0aW9uCiAgICBteSAkVm90ZURhdGE7CiAgICBpZiAoICRTZWxmLT57Vm90aW5nfSApIHsKICAgICAgICAkVm90ZURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlZvdGVHZXQoCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIEl0ZW1JRCAgICA9PiAkRkFRRGF0YXtJdGVtSUR9LAogICAgICAgICAgICBJbnRlcmZhY2UgPT4gJFNlbGYtPntJbnRlcmZhY2V9LT57U3RhdGVJRH0sCiAgICAgICAgICAgIElQICAgICAgICA9PiAkRU5WeydSRU1PVEVfQUREUid9LAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBpZiB1c2VyIGFscmVhZHkgdm90ZWQgdGhpcyBGQVEgaXRlbQogICAgbXkgJEFscmVhZHlWb3RlZDsKICAgIGlmICgkVm90ZURhdGEpIHsKCiAgICAgICAgIyBpdGVtL2NoYW5nZV90aW1lID4gdm90aW5nL2NyZWF0ZV90aW1lCiAgICAgICAgbXkgJEl0ZW1DaGFuZ2VkU3lzdGVtVGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICBTdHJpbmcgPT4gJEZBUURhdGF7Q2hhbmdlZH0gfHwgJycsCiAgICAgICAgKTsKICAgICAgICBteSAkVm90ZUNyZWF0ZWRTeXN0ZW1UaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkVm90ZURhdGEtPntDcmVhdGVkfSB8fCAnJywKICAgICAgICApOwogICAgICAgIGlmICggJEl0ZW1DaGFuZ2VkU3lzdGVtVGltZSA8PSAkVm90ZUNyZWF0ZWRTeXN0ZW1UaW1lICkgewogICAgICAgICAgICAkQWxyZWFkeVZvdGVkID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgVm90ZSBTdWJhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVm90ZScgKSB7CgogICAgICAgICMgdXNlciBjYW4ndCB1c2UgdGhpcyBzdWJhY3Rpb24gaWYgaXMgbm90IGVuYmxlZAogICAgICAgIGlmICggISRTZWxmLT57Vm90aW5nfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJUaGUgdm90aW5nIG1lY2hhbmlzbSBpcyBub3QgZW5hYmxlZCEiICk7CiAgICAgICAgfQoKICAgICAgICAjIHVzZXIgY2FuIHZvdGUgb25seSBvbmNlIHBlciBGQVEgcmV2aXNpb24KICAgICAgICBpZiAoJEFscmVhZHlWb3RlZCkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICdZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkIScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgdm90ZSBpZiBhbnkKICAgICAgICBlbHNpZiAoIGRlZmluZWQgJEdldFBhcmFte1JhdGV9ICkgewoKICAgICAgICAgICAgIyBnZXQgcmF0ZXMgY29uZmlnCiAgICAgICAgICAgIG15ICRWb3RpbmdSYXRlcyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6Okl0ZW06OlZvdGluZzo6UmF0ZXMnKTsKICAgICAgICAgICAgbXkgJFJhdGUgICAgICAgID0gJEdldFBhcmFte1JhdGV9OwoKICAgICAgICAgICAgIyBzZW5kIGVycm9yIGlmIHJhdGUgaXMgbm90IGRlZmluZWQgaW4gY29uZmlnCiAgICAgICAgICAgIGlmICggISRWb3RpbmdSYXRlcy0+eyRSYXRlfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiVGhlIHZvdGUgcmF0ZSBpcyBub3QgZGVmaW5lZCEiICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3RoZXJ3aXNlIGFkZCB0aGUgdm90ZQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT57RkFRT2JqZWN0fS0+Vm90ZUFkZCgKICAgICAgICAgICAgICAgICAgICBDcmVhdGVkQnkgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICBJUCAgICAgICAgPT4gJEVOVnsnUkVNT1RFX0FERFInfSwKICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJFNlbGYtPntJbnRlcmZhY2V9LT57U3RhdGVJRH0sCiAgICAgICAgICAgICAgICAgICAgUmF0ZSAgICAgID0+ICRHZXRQYXJhbXtSYXRlfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGRvIG5vdCBzaG93IHRoZSB2b3RpbmcgZm9ybQogICAgICAgICAgICAgICAgJEFscmVhZHlWb3RlZCA9IDE7CgogICAgICAgICAgICAgICAgIyByZWZyZXNoIEZBUSBpdGVtIGRhdGEKICAgICAgICAgICAgICAgICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJUZBUURhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KCBJbmZvID0+ICdUaGFua3MgZm9yIHlvdXIgdm90ZSEnICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXNlciBpcyBhYmxlIHRvIHZvdGUgYnV0IG5vIHJhdGUgaGFzIGJlZW4gc2VsZWN0ZWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBJbmZvICAgICA9PiAnTm8gcmF0ZSBzZWxlY3RlZCEnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHByZXBhcmUgZmllbGRzIGRhdGEgKFN0aWxsIG5lZWRlZCBmb3IgUGxhaW5UZXh0KQogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkIChxdyhGaWVsZDEgRmllbGQyIEZpZWxkMyBGaWVsZDQgRmllbGQ1IEZpZWxkNikpIHsKICAgICAgICBuZXh0IEZJRUxEIGlmICEkRkFRRGF0YXskRmllbGR9OwoKICAgICAgICAjIHJld3JpdGUgaGFuZGxlIGFuZCBhY3Rpb24sIHRha2UgY2FyZSBvZiBvbGQgc3R5bGUgYmVmb3JlIEZBUSAyLjAueAogICAgICAgICRGQVFEYXRheyRGaWVsZH0gPX4gc3sKICAgICAgICAgICAgQWN0aW9uPUFnZW50RkFRIFsmXShhbXA7KT8gU3ViYWN0aW9uPURvd25sb2FkIFsmXShhbXA7KT8KICAgICAgICB9e0FjdGlvbj1BZ2VudEZBUVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDt9Z3htczsKCiAgICAgICAgIyBubyBxdW90aW5nIGlmIGh0bWwgdmlldyBpcyBlbmFibGVkCiAgICAgICAgbmV4dCBGSUVMRCBpZiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpJdGVtOjpIVE1MJyk7CgogICAgICAgICMgaHRtbCBxdW90aW5nCiAgICAgICAgJEZBUURhdGF7JEZpZWxkfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgTmV3TGluZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJEZBUURhdGF7JEZpZWxkfSwKICAgICAgICAgICAgVk1heCAgICAgICAgICAgPT4gNTAwMCwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICAgICAgTGlua0ZlYXR1cmUgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHVzZXIgaW5mbyAoQ3JlYXRlZEJ5KQogICAgbXkgJVVzZXJJbmZvID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRGQVFEYXRhe0NyZWF0ZWRCeX0KICAgICk7CiAgICAkUGFyYW17Q3JlYXRlZEJ5VXNlcn0gPSAiJFVzZXJJbmZve1VzZXJGaXJzdG5hbWV9ICRVc2VySW5mb3tVc2VyTGFzdG5hbWV9IjsKCiAgICAjIGdldCB1c2VyIGluZm8gKENoYW5nZWRCeSkKICAgICVVc2VySW5mbyA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkRkFRRGF0YXtDaGFuZ2VkQnl9CiAgICApOwogICAgJFBhcmFte0NoYW5nZWRCeVVzZXJ9ID0gIiRVc2VySW5mb3tVc2VyRmlyc3RuYW1lfSAkVXNlckluZm97VXNlckxhc3RuYW1lfSI7CgogICAgIyBzZXQgdm90aW5nIHJlc3VsdHMKICAgICRQYXJhbXtWb3RpbmdSZXN1bHRDb2xvcn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkdldEZBUUl0ZW1Wb3RpbmdSYXRlQ29sb3IoCiAgICAgICAgUmF0ZSA9PiAkRkFRRGF0YXtWb3RlUmVzdWx0fSwKICAgICk7CgogICAgaWYgKCAhJFBhcmFte1ZvdGluZ1Jlc3VsdENvbG9yfSB8fCAkRkFRRGF0YXtWb3Rlc30gZXEgJzAnICkgewogICAgICAgICRQYXJhbXtWb3RpbmdSZXN1bHRDb2xvcn0gPSAnR3JheSc7CiAgICB9CgogICAgaWYgKCAkTmF2IG5lICdOb25lJyApIHsKCiAgICAgICAgIyBydW4gZmFxIG1lbnUgbW9kdWxlcwogICAgICAgIGlmICggcmVmICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgZXEgJ0hBU0gnICkgewogICAgICAgICAgICBteSAlTWVudXMgICA9ICV7ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgfTsKICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgICAgICBmb3IgbXkgJE1lbnUgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSggJE1lbnVzeyRNZW51fS0+e01vZHVsZX0gKSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1lbnVzeyRNZW51fS0+e01vZHVsZX0tPm5ldygKICAgICAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRRGF0YXtJdGVtSUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IGNsYXNzZXMKICAgICAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnUG9wVXAnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e0NsYXNzfSA9ICdBc1BvcHVwJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdCYWNrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntDbGFzc30gPSAnSGlzdG9yeUJhY2snOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gZXEgJ0NvbmZpcm1hdGlvbkRpYWxvZycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57Q2xhc3N9ID0gJ0FzQ29uZmlybWF0aW9uRGlhbG9nJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgcnVuIG1vZHVsZQogICAgICAgICAgICAgICAgICAgICRDb3VudGVyID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZBUUl0ZW0gPT4geyVGQVFEYXRhfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlciA9PiAkQ291bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnICA9PiAkTWVudXN7JE1lbnV9LAogICAgICAgICAgICAgICAgICAgICAgICBNZW51SUQgID0+ICdNZW51JyAuICRNZW51LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBvdXRwdXQgYXBwcm92YWwgc3RhdGUKICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QXBwcm92YWxSZXF1aXJlZCcpICkgewogICAgICAgICRQYXJhbXtBcHByb3ZhbH0gPSAkRkFRRGF0YXtBcHByb3ZlZH0gPyAnWWVzJyA6ICdObyc7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVmlld0FwcHJvdmFsJywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFNlbGYtPntWb3Rpbmd9ICkgewoKICAgICAgICAjIG91dHB1dCB2b3RlcyBudW1iZXIgaWYgYW55CiAgICAgICAgaWYgKCAkRkFRRGF0YXtWb3Rlc30gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdWaWV3Vm90ZXMnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgZGlzcGxheSBhIE5vIFZvdGVzIGZvdW5kIG1lc3NhZ2UKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnVmlld05vVm90ZXMnICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBGQVEgcGF0aAogICAgbXkgJFNob3dGQVFQYXRoID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFQYXRoU2hvdygKICAgICAgICBGQVFPYmplY3QgID0+ICRTZWxmLT57RkFRT2JqZWN0fSwKICAgICAgICBDYXRlZ29yeUlEID0+ICRGQVFEYXRhe0NhdGVnb3J5SUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIE5hdiAgICAgICAgPT4gJE5hdiwKICAgICk7CiAgICBpZiAoJFNob3dGQVFQYXRoKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRkFRUGF0aEl0ZW1FbGVtZW50JywKICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICAgICBOYXYgID0+ICROYXYsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cga2V5d29yZHMgYXMgc2VhcmNoIGxpbmtzCiAgICBpZiAoICRGQVFEYXRhe0tleXdvcmRzfSApIHsKCiAgICAgICAgIyByZXBsYWNlIGNvbW1hcyBhbmQgc2VtaWNvbG9ucwogICAgICAgICRGQVFEYXRhe0tleXdvcmRzfSA9fiBzLywvIC9nOwogICAgICAgICRGQVFEYXRhe0tleXdvcmRzfSA9fiBzLzsvIC9nOwoKICAgICAgICBteSBAS2V5d29yZHMgPSBzcGxpdCAvXHMrLywgJEZBUURhdGF7S2V5d29yZHN9OwogICAgICAgIGZvciBteSAkS2V5d29yZCAoQEtleXdvcmRzKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdLZXl3b3JkcycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBLZXl3b3JkID0+ICRLZXl3b3JkLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IGxhbmd1YWdlcwogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IHJhdGluZyBzdGFycwogICAgaWYgKCAkU2VsZi0+e1ZvdGluZ30gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFSYXRpbmdTdGFyc1Nob3coCiAgICAgICAgICAgIFZvdGVSZXN1bHQgPT4gJEZBUURhdGF7Vm90ZVJlc3VsdH0sCiAgICAgICAgICAgIFZvdGVzICAgICAgPT4gJEZBUURhdGF7Vm90ZXN9LAogICAgICAgICk7CiAgICB9CiAgICBpZiAoICROYXYgbmUgJ05vbmUnICkgewoKICAgICAgICAjIG91dHB1dCBleGlzdGluZyBhdHRhY2htZW50cwogICAgICAgIG15IEBBdHRhY2htZW50SW5kZXggPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgU2hvd0lubGluZSA9PiAwLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIGFsbCBhdHRhY2htZW50cwogICAgICAgIGlmIChAQXR0YWNobWVudEluZGV4KSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50SGVhZGVyJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRSb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IEZBUSBDb250ZW50CiAgICBteSAkRkFRQm9keSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RkFRQ29udGVudFNob3coCiAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRTZWxmLT57RkFRT2JqZWN0fSwKICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgIEZBUURhdGEgICAgICAgICA9PiB7JUZBUURhdGF9LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgUmV0dXJuQ29udGVudCAgID0+IDEsCiAgICApOwoKICAgIGlmICggJE5hdiBuZSAnTm9uZScgKSB7CgogICAgICAgICMgc2hvdyBGQVEgVm90aW5nCiAgICAgICAgaWYgKCAkU2VsZi0+e1ZvdGluZ30gKSB7CgogICAgICAgICAgICAjIGdldCB2b3RpbmcgY29uZmlnCiAgICAgICAgICAgIG15ICRTaG93Vm90aW5nQ29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6SXRlbTo6Vm90aW5nOjpTaG93Jyk7CiAgICAgICAgICAgIGlmICggJFNob3dWb3RpbmdDb25maWctPnsgJFNlbGYtPntJbnRlcmZhY2V9LT57TmFtZX0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSB1c2VyIGFscmVhZHkgdm90ZWQgYWZ0ZXIgbGFzdCBjaGFuZ2UKICAgICAgICAgICAgICAgIGlmICggISRBbHJlYWR5Vm90ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPl9GQVFWb3RpbmcoIEZBUURhdGEgPT4geyVGQVFEYXRhfSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBsaW5rZWQgb2JqZWN0cwogICAgICAgIG15ICRMaW5rTGlzdFdpdGhEYXRhID0gJFNlbGYtPntMaW5rT2JqZWN0fS0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICAgICAgT2JqZWN0ID0+ICdGQVEnLAogICAgICAgICAgICBLZXkgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGxpbmsgdGFibGUgdmlldyBtb2RlCiAgICAgICAgbXkgJExpbmtUYWJsZVZpZXdNb2RlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0xpbmtPYmplY3Q6OlZpZXdNb2RlJyk7CgogICAgICAgICMgY3JlYXRlIHRoZSBsaW5rIHRhYmxlCiAgICAgICAgbXkgJExpbmtUYWJsZVN0cmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtPYmplY3RUYWJsZUNyZWF0ZSgKICAgICAgICAgICAgTGlua0xpc3RXaXRoRGF0YSA9PiAkTGlua0xpc3RXaXRoRGF0YSwKICAgICAgICAgICAgVmlld01vZGUgICAgICAgICA9PiAkTGlua1RhYmxlVmlld01vZGUsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgdGhlIGxpbmsgdGFibGUKICAgICAgICBpZiAoJExpbmtUYWJsZVN0cmcpIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0xpbmtUYWJsZScgLiAkTGlua1RhYmxlVmlld01vZGUsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBMaW5rVGFibGVTdHJnID0+ICRMaW5rVGFibGVTdHJnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBsb2cgYWNjZXNzIHRvIHRoaXMgRkFRIGl0ZW0KICAgICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRTG9nQWRkKAogICAgICAgIEl0ZW1JRCAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJdGVtSUQnICksCiAgICAgICAgSW50ZXJmYWNlID0+ICRTZWxmLT57SW50ZXJmYWNlfS0+e05hbWV9LAogICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICBpZiAoICROYXYgJiYgJE5hdiBlcSAnTm9uZScgKSB7CgogICAgICAgICMgb25seSBjb252ZXJ0IGh0bWwgdG8gcGxhaW4gdGV4dCBpZiByaWNoIHRleHQgZWRpdG9yIGlzIG5vdCB1c2VkCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0JykgKSB7CiAgICAgICAgICAgICRGQVFEYXRhe0Z1bGxCb2R5fSA9ICRGQVFCb2R5OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEZBUURhdGF7RnVsbEJvZHl9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57SFRNTFV0aWxzT2JqZWN0fS0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkRkFRQm9keSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBwdWJsaWMgc3RhdGUgdHlwZQogICAgICAgIG15ICRQdWJsaWNTdGF0ZVR5cGUgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICAgICAgTmFtZSAgID0+ICdwdWJsaWMnLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmVtb3ZlIGlubGluZSBpbWFnZSBsaW5rcyB0byBmYXEgaW1hZ2VzCiAgICAgICAgJEZBUURhdGF7RnVsbEJvZHl9CiAgICAgICAgICAgID1+IHN7IDxpbWcgW148Pl0rIEFjdGlvbj0oQWdlbnR8Q3VzdG9tZXJ8UHVibGljKUZBUSBbXjw+XSsgPiB9e31neG1zOwoKICAgICAgICAjIGdldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFRpY2tldCBDb21wb3NlCiAgICAgICAgbXkgJFRpY2tldENvbXBvc2VDb25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpUaWNrZXRDb21wb3NlJyk7CgogICAgICAgIG15ICRTaG93T3JCbG9jazsKCiAgICAgICAgIyBzaG93ICJJbnNlcnQgVGV4dCIgYnV0dG9uCiAgICAgICAgaWYgKCAkVGlja2V0Q29tcG9zZUNvbmZpZy0+e1Nob3dJbnNlcnRUZXh0QnV0dG9ufSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luc2VydFRleHQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNob3dPckJsb2NrID0gMTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgRkFRIGFydGljbGUgaXMgcHVibGljCiAgICAgICAgaWYgKCAkRkFRRGF0YXtTdGF0ZVR5cGVJRH0gPT0gJFB1YmxpY1N0YXRlVHlwZS0+e1N0YXRlSUR9ICkgewoKICAgICAgICAgICAgbXkgJEhUVFBUeXBlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0h0dHBUeXBlJyk7CiAgICAgICAgICAgIG15ICRGUUROICAgICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGUUROJyk7CiAgICAgICAgICAgIG15ICRCYXNlbGluayA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jhc2VsaW5rfTsKCiAgICAgICAgICAgICMgcmV3cml0ZSBoYW5kbGUKICAgICAgICAgICAgJEJhc2VsaW5rCiAgICAgICAgICAgICAgICA9fiBzeyBpbmRleFsuXXBsIFs/XSB9e3B1YmxpYy5wbD99Z3htczsKCiAgICAgICAgICAgICRGQVFEYXRhe1B1YmxpY2xpbmt9ID0gJEhUVFBUeXBlIC4gJzovLycgLiAkRlFETiAuICRCYXNlbGluawogICAgICAgICAgICAgICAgLiAiQWN0aW9uPVB1YmxpY0ZBUVpvb207SXRlbUlEPSRGQVFEYXRhe0l0ZW1JRH0iOwoKICAgICAgICAgICAgIyBzaG93ICJJbnNlcnQgTGluayIgYnV0dG9uCiAgICAgICAgICAgIGlmICggJFRpY2tldENvbXBvc2VDb25maWctPntTaG93SW5zZXJ0TGlua0J1dHRvbn0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luc2VydExpbmsnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNob3dPckJsb2NrID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzaG93ICJJbnNlcnQgVGV4dCBhbmQgTGluayIgYnV0dG9uCiAgICAgICAgICAgIGlmICggJFRpY2tldENvbXBvc2VDb25maWctPntTaG93SW5zZXJ0VGV4dEFuZExpbmtCdXR0b259ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJbnNlcnRCb3RoJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTaG93T3JCbG9jayA9IDEKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJENhbmNlbEJ1dHRvbkNsYXNzID0gJ1pvb21TbWFsbEJ1dHRvbic7CgogICAgICAgICMgc2hvdyB0aGUgIk9yIiBibG9jayBiZXR3ZWVuIHRoZSBidXR0b25zIGFuZCB0aGUgQ2FuY2VsICYgY2xvc2Ugd2luZG93IGxhYmVsCiAgICAgICAgaWYgKCRTaG93T3JCbG9jaykgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3InLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IHRoZSAkQ2FuY2VsQnV0dG9uQ2xhc3MgdG8gJyc7CiAgICAgICAgICAgICRDYW5jZWxCdXR0b25DbGFzcyA9ICcnOwogICAgICAgIH0KCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUVpvb21TbWFsbCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIENhbmNlbEJ1dHRvbkNsYXNzID0+ICRDYW5jZWxCdXR0b25DbGFzcyB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUVpvb20nLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFkZCBmb290ZXIKICAgIGlmICggJE5hdiAmJiAkTmF2IGVxICdOb25lJyApIHsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgIH0KCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9GQVFWb3RpbmcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlRkFRRGF0YSA9ICV7ICRQYXJhbXtGQVFEYXRhfSB9OwoKICAgICMgb3VwdXQgdm90aW5nIGJsb2NrCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZBUVZvdGluZycsCiAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgKTsKCiAgICAjIGdldCBWb3RpbmcgcmF0ZXMgc2V0dGluZwogICAgbXkgJFZvdGluZ1JhdGVzID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6SXRlbTo6Vm90aW5nOjpSYXRlcycpOwogICAgZm9yIG15ICRSYXRlVmFsdWUgKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAleyRWb3RpbmdSYXRlc30gKSB7CgogICAgICAgICMgY3JlYXRlIGRhdGEgc3RydWN1cmUgZm9yIG91dHB1dAogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICBWYWx1ZSA9PiAkUmF0ZVZhbHVlLAogICAgICAgICAgICBUaXRsZSA9PiAkVm90aW5nUmF0ZXMtPnskUmF0ZVZhbHVlfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCB2b3RlIHJhdGluZyByb3cgYmxvY2sKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGQVFWb3RpbmdSYXRlUm93JywKICAgICAgICAgICAgRGF0YSA9PiB7JURhdGF9LAogICAgICAgICk7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lckZBUUV4cGxvcmVyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiRkFROjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgICRTZWxmLT57SW50ZXJmYWNlfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlR2V0KAogICAgICAgIE5hbWUgICA9PiAnZXh0ZXJuYWwnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpDdXN0b21lcjo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIGRhdGEKICAgICRTZWxmLT57U3RhcnRIaXR9ID0gaW50KCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxICk7CiAgICAkU2VsZi0+e1NlYXJjaExpbWl0fSAgICAgPSAkU2VsZi0+e0NvbmZpZ30tPntTZWFyY2hMaW1pdH0gICAgIHx8IDIwMDsKICAgICRTZWxmLT57U2VhcmNoUGFnZVNob3dufSA9ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaFBhZ2VTaG93bn0gfHwgMzsKICAgICRTZWxmLT57U29ydEJ5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdGQVFJRCc7CiAgICAkU2VsZi0+e09yZGVyQnl9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXInICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnT3JkZXI6OkRlZmF1bHQnfQogICAgICAgIHx8ICdEb3duJzsKCiAgICAjIGdldCBjYXRlZ29yeSBpZAogICAgbXkgJENhdGVnb3J5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDYXRlZ29yeUlEJyApIHx8IDA7CgogICAgIyBjaGVjayBmb3Igbm9uIG51bWVyaWMgQ2F0ZWdvcnlJRAogICAgaWYgKCAkQ2F0ZWdvcnlJRCAhfiAvXGQrLyApIHsKICAgICAgICAkQ2F0ZWdvcnlJRCA9IDA7CiAgICB9CgogICAgIyBnZXQgY2F0ZWdvcnkgYnkgbmFtZQogICAgbXkgJENhdGVnb3J5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2F0ZWdvcnknICkgfHwgJyc7CgogICAgIyB0cnkgdG8gZ2V0IHRoZSBDYXRlZ29yeSBJRCBmcm9tIGNhdGVnb3J5IG5hbWUgaWYgbm8gQ2F0ZWdvcnkgSUQKICAgIGlmICggJENhdGVnb3J5ICYmICEkQ2F0ZWdvcnlJRCApIHsKCiAgICAgICAgIyBnZXQgdGhlIGNhdGVnb3J5IHRyZWUKICAgICAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmV2ZXJzZSB0aGUgaGFzIGZvciBlYXN5IGxvb2t1cAogICAgICAgIG15ICVSZXZlcnNlQ2F0ZWdvcnlUcmVlID0gcmV2ZXJzZSAleyRDYXRlZ29yeVRyZWV9OwoKICAgICAgICAkQ2F0ZWdvcnlJRCA9ICRSZXZlcnNlQ2F0ZWdvcnlUcmVleyRDYXRlZ29yeX0gfHwgMDsKICAgIH0KCiAgICAjIHRyeSB0byBnZXQgdGhlIGNhdGVnb3J5IGRhdGEKICAgIG15ICVDYXRlZ29yeURhdGE7CiAgICBpZiAoJENhdGVnb3J5SUQpIHsKCiAgICAgICAgIyBnZXQgY2F0ZWdvcnkgZGF0YQogICAgICAgICVDYXRlZ29yeURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNhdGVnb3J5R2V0KAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgIGlmICggISVDYXRlZ29yeURhdGEgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyTm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgICAgIG15ICRQZXJtaXNzaW9uID0gJFNlbGYtPntGQVFPYmplY3R9LT5DaGVja0NhdGVnb3J5Q3VzdG9tZXJQZXJtaXNzaW9uKAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICAgICBDYXRlZ29yeUlEICAgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICAgICAgaWYgKCAhJFBlcm1pc3Npb24gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyTm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc3RvcmUgdGhlIGxhc3Qgc2NyZWVuIG92ZXJ2aWV3IGluIHNlc3Npb24KICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbk92ZXJ2aWV3JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVySGVhZGVyKAogICAgICAgIFZhbHVlID0+ICcnLAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKCiAgICAjIHNob3cgRkFRIHBhdGgKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RkFRUGF0aFNob3coCiAgICAgICAgRkFRT2JqZWN0ICA9PiAkU2VsZi0+e0ZBUU9iamVjdH0sCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgYWxsIGRpcmVjdCBzdWJjYXRlZ29yaWVzIG9mIHRoZSBzZWxlY3RlZCBjYXRlZ29yeQogICAgbXkgJENhdGVnb3J5SURzUmVmID0gJFNlbGYtPntGQVFPYmplY3R9LT5DdXN0b21lckNhdGVnb3J5U2VhcmNoKAogICAgICAgIFBhcmVudElEICAgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICBDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgIE1vZGUgICAgICAgICA9PiAnQ3VzdG9tZXInLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2hvdyBzdWJjYXRlZ29yaWVzIGxpc3QKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1N1YmNhdGVnb3JpZXMnICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdPdmVydmlld1Jlc3VsdCcgKTsKCiAgICAjIGNoZWNrIGlmIHRoZXJlIGFyZSBzdWJjYXRlZ29yaWVzCiAgICBpZiAoICRDYXRlZ29yeUlEc1JlZiAmJiByZWYgJENhdGVnb3J5SURzUmVmIGVxICdBUlJBWScgJiYgQHskQ2F0ZWdvcnlJRHNSZWZ9ICkgewoKICAgICAgICAjIHNob3cgZGF0YSBmb3IgZWFjaCBzdWJjYXRlZ29yeQogICAgICAgIGZvciBteSAkU3ViQ2F0ZWdvcnlJRCAoIEB7JENhdGVnb3J5SURzUmVmfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBjYXRlZ29yeSBkYXRhCiAgICAgICAgICAgIG15ICVTdWJDYXRlZ29yeURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNhdGVnb3J5R2V0KAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkU3ViQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIG51bWJlciBvZiBzdWJjYXRlZ29yaWVzIG9mIHRoaXMgc3ViY2F0ZWdvcnkKICAgICAgICAgICAgJFN1YkNhdGVnb3J5RGF0YXtTdWJDYXRlZ29yeUNvdW50fSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2F0ZWdvcnlDb3VudCgKICAgICAgICAgICAgICAgIFBhcmVudElEcyA9PiBbJFN1YkNhdGVnb3J5SURdLAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBudW1iZXIgb2YgZmFxIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkKICAgICAgICAgICAgJFN1YkNhdGVnb3J5RGF0YXtBcnRpY2xlQ291bnR9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFDb3VudCgKICAgICAgICAgICAgICAgIENhdGVnb3J5SURzICA9PiBbJFN1YkNhdGVnb3J5SURdLAogICAgICAgICAgICAgICAgSXRlbVN0YXRlcyAgID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICAgICAgICAgIE9ubHlBcHByb3ZlZCA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IHRoZSBjYXRlZ29yeSBkYXRhCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslU3ViQ2F0ZWdvcnlEYXRhfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0NhdGVnb3J5RGF0YUZvdW5kTXNnJywKICAgICAgICApOwogICAgfQoKICAgICMgc2VhcmNoIGFsbCBGQVEgYXJ0aWNsZXMgd2l0aGluIHRoZSBnaXZlbiBjYXRlZ29yeQogICAgbXkgQFZpZXdhYmxlRkFRSURzID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFTZWFyY2goCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbICRTZWxmLT57U29ydEJ5fSBdLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyAkU2VsZi0+e09yZGVyQnl9IF0sCiAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAkU2VsZi0+e1NlYXJjaExpbWl0fSwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBTdGF0ZXMgICAgICAgICAgID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBJbnRlcmZhY2UgICAgICAgID0+ICRTZWxmLT57SW50ZXJmYWNlfSwKICAgICAgICBDYXRlZ29yeUlEcyAgICAgID0+IFskQ2F0ZWdvcnlJRF0sCiAgICApOwoKICAgICMgc2V0IHRoZSBTb3J0QnkgQ2xhc3MKICAgIG15ICRTb3J0Q2xhc3M7CgogICAgIyB0aGlzIHNldHMgdGhlIG9wcG9zaXQgdG8gdGhlIE9yZGVyQnkgcGFyYW1ldGVyCiAgICBpZiAoICRTZWxmLT57T3JkZXJCeX0gZXEgJ0Rvd24nICkgewogICAgICAgICRTb3J0Q2xhc3MgPSAnU29ydEFzY2VuZGluZyc7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57T3JkZXJCeX0gZXEgJ1VwJyApIHsKICAgICAgICAkU29ydENsYXNzID0gJ1NvcnREZXNjZW5kaW5nJzsKICAgIH0KCiAgICAjIHNldCB0aGUgU29ydEJ5IENsYXNzIHRvIHRoZSBjb3JyZWN0IGZpZWxkCiAgICBteSAlQ1NTU29ydDsKICAgIG15ICRTb3J0QnkgPSAkU2VsZi0+e1NvcnRCeX0gLiAnU29ydCc7CiAgICAkQ1NTU29ydHskU29ydEJ5fSA9ICRTb3J0Q2xhc3M7CgogICAgbXkgJU5ld09yZGVyID0gKAogICAgICAgIERvd24gPT4gJ1VwJywKICAgICAgICBVcCAgID0+ICdEb3duJywKICAgICk7CgogICAgIyBzaG93IHRoZSBGQVEgYXJ0aWNsZSBsaXN0CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZBUUl0ZW1MaXN0JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgJUNTU1NvcnQsCiAgICAgICAgICAgIE9yZGVyID0+ICROZXdPcmRlcnsgJFNlbGYtPntPcmRlckJ5fSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyBsYW5ndWFnZSBoZWFkZXIKICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgICVDU1NTb3J0LAogICAgICAgICAgICAgICAgT3JkZXIgPT4gJE5ld09yZGVyeyAkU2VsZi0+e09yZGVyQnl9IH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkQ291bnRlciA9IDA7CiAgICBpZiAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgIGZvciBteSAkRkFRSUQgKEBWaWV3YWJsZUZBUUlEcykgewoKICAgICAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgICAgICMgYnVpbGQgc2VhcmNoIHJlc3VsdAogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkQ291bnRlciA+PSAkU2VsZi0+e1N0YXJ0SGl0fQogICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRTZWxmLT57U2VhcmNoUGFnZVNob3dufSArICRTZWxmLT57U3RhcnRIaXR9ICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBkYXRhIGRldGFpbHMKICAgICAgICAgICAgICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGFkZCBibG9ja3MgdG8gdGVtcGxhdGUKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBhZGQgbGFuZ3VhZ2UgZGF0YQogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZExhbmd1YWdlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlzIGRpc3BsYXllZAogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9GQVFEYXRhRm91bmRNc2cnLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJExpbmsgPSAnU29ydEJ5PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57U29ydEJ5fSApIC4gJzsnOwogICAgJExpbmsgLj0gJ09yZGVyPScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57T3JkZXJCeX0gKSAuICc7JzsKCiAgICAjIGJ1aWxkIHNlYXJjaCBuYXZpZ2F0aW9uIGJhcgogICAgbXkgJVBhZ2VOYXYgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgIFN0YXJ0SGl0ICA9PiAkU2VsZi0+e1N0YXJ0SGl0fSwKICAgICAgICBQYWdlU2hvd24gPT4gJFNlbGYtPntTZWFyY2hQYWdlU2hvd259LAogICAgICAgIEFsbEhpdHMgICA9PiAkQ291bnRlciwKICAgICAgICBBY3Rpb24gICAgPT4gIkFjdGlvbj1DdXN0b21lckZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9JENhdGVnb3J5SUQiLAogICAgICAgIExpbmsgICAgICA9PiAkTGluaywKICAgICAgICBJRFByZWZpeCAgPT4gIkN1c3RvbWVyRkFRRXhwbG9yZXIiLAogICAgKTsKCiAgICAjIHNob3cgZm9vdGVyIGZpbHRlciAtIHNob3cgb25seSBpZiBtb3JlIHRoZSBvbmUgcGFnZSBpcyBhdmFpbGFibGUKICAgIGlmICggZGVmaW5lZCAkUGFnZU5hdntUb3RhbEhpdHN9ICYmICggJFBhZ2VOYXZ7VG90YWxIaXRzfSA+ICRTZWxmLT57U2VhcmNoUGFnZVNob3dufSApICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1BhZ2luYXRpb24nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IFF1aWNrU2VhcmNoCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZBUVNob3dRdWlja1NlYXJjaCgKICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ0N1c3RvbWVyJywKICAgICAgICBDdXN0b21lclVzZXIgICAgPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZX0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgbGFzdCBhZGRlZCBhbmQgbGFzdCB1cGRhdGVkIGFydGljbGVzCiAgICBmb3IgbXkgJFR5cGUgKHF3KExhc3RDcmVhdGUgTGFzdENoYW5nZSkpIHsKCiAgICAgICAgbXkgJFNob3dPayA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RkFRU2hvd0xhdGVzdE5ld3NCb3goCiAgICAgICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkU2VsZi0+e0ZBUU9iamVjdH0sCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICA9PiAkVHlwZSwKICAgICAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgICA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgIENhdGVnb3J5SUQgICAgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgID0+ICRTZWxmLT57SW50ZXJmYWNlfSwKICAgICAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJFNob3dPayApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IHRvcCB0ZW4gYXJ0aWNsZXMKICAgIG15ICRTaG93T2sgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZBUVNob3dUb3AxMCgKICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJFNlbGYtPntGQVFPYmplY3R9LAogICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnQ3VzdG9tZXInLAogICAgICAgIEN1c3RvbWVyVXNlciAgICA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgQ2F0ZWdvcnlJRCAgICAgID0+ICRDYXRlZ29yeUlELAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZX0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkU2hvd09rICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICB9CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lckZBUUV4cGxvcmVyJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgICVDYXRlZ29yeURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lckZBUVByaW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHM7CnVzZSBLZXJuZWw6OlN5c3RlbTo6UERGOwp1c2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKAogICAgICAgIHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0IE1haW5PYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggISRTZWxmLT57JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICROZWVkZWQhIiApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBhZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscy0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1BERk9iamVjdH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6UERGLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57RkFRT2JqZWN0fSAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyglUGFyYW0pOwoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICAkU2VsZi0+e0ludGVyZmFjZX0gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2V4dGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6Q3VzdG9tZXI6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBkZWZhdWx0IG9wdGlvbnMKICAgICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CiAgICAkU2VsZi0+e1ZvdGluZ30gICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6Vm90aW5nJyk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICBpZiAoICEkU2VsZi0+e0FjY2Vzc1JvfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBuZWVkIHJvIHBlcm1pc3Npb24hJywKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgIG15ICRPdXRwdXQ7CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAlR2V0UGFyYW07CiAgICAkR2V0UGFyYW17SXRlbUlEfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0l0ZW1JRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJEdldFBhcmFte0l0ZW1JRH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBJdGVtSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgaXRlbSBkYXRhCiAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICggISVGQVFEYXRhICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRmF0YWxFcnJvcigpOwogICAgfQoKICAgICMgY2hlY2sgdXNlciBwZXJtaXNzaW9uCiAgICBteSAkUGVybWlzc2lvbiA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2hlY2tDYXRlZ29yeUN1c3RvbWVyUGVybWlzc2lvbigKICAgICAgICBDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgIENhdGVnb3J5SUQgICA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgbm8gcGVybWlzc2lvbiBlcnJvcgogICAgaWYgKAogICAgICAgICEkUGVybWlzc2lvbgogICAgICAgIHx8ICEkRkFRRGF0YXtBcHByb3ZlZH0KICAgICAgICB8fCAhJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LT57ICRGQVFEYXRhe1N0YXRlVHlwZUlEfSB9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyTm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICk7CiAgICB9CgogICAgIyBwcmVwYXJlIGZpZWxkcyBkYXRhCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKHF3KEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNCBGaWVsZDUgRmllbGQ2KSkgewogICAgICAgIG5leHQgRklFTEQgaWYgISRGQVFEYXRheyRGaWVsZH07CgogICAgICAgICMgcmV3cml0ZSBsaW5rcyB0byBlbWJlZGRlZCBpbWFnZXMgZm9yIGN1c3RvbWVyIGFuZCBwdWJsaWMgaW50ZXJmYWNlCiAgICAgICAgaWYgKCAkU2VsZi0+e0ludGVyZmFjZX17TmFtZX0gZXEgJ2V4dGVybmFsJyApIHsKICAgICAgICAgICAgJEZBUURhdGF7JEZpZWxkfQogICAgICAgICAgICAgICAgPX4gc3sgaW5kZXhbLl1wbCBbP10gQWN0aW9uPUFnZW50RkFRWm9vbSB9e2N1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lckZBUVpvb219Z3htczsKICAgICAgICB9CgogICAgICAgICMgbm8gcXVvdGluZyBpZiBodG1sIHZpZXcgaXMgZW5hYmxlZAogICAgICAgIG5leHQgRklFTEQgaWYgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpOwoKICAgICAgICAjIGh0bWwgcXVvdGluZwogICAgICAgICRGQVFEYXRheyRGaWVsZH0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIE5ld0xpbmUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRGQVFEYXRheyRGaWVsZH0sCiAgICAgICAgICAgIFZNYXggICAgICAgICAgID0+IDUwMDAsCiAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgIExpbmtGZWF0dXJlICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdlbmVyYXRlIHBkZiBvdXRwdXQKICAgIGlmICggJFNlbGYtPntQREZPYmplY3R9ICkgewogICAgICAgIG15ICRQcmludGVkQnkgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgncHJpbnRlZCBieScpOwogICAgICAgIG15ICRUaW1lICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCggVGVtcGxhdGUgPT4gJyRFbnZ7IlRpbWUifScgKTsKICAgICAgICBteSAkVXJsICAgICAgID0gJyAnOwogICAgICAgIGlmICggJEVOVntSRVFVRVNUX1VSSX0gKSB7CiAgICAgICAgICAgICRVcmwgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSHR0cFR5cGUnKSAuICc6Ly8nCiAgICAgICAgICAgICAgICAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGUUROJykKICAgICAgICAgICAgICAgIC4gJEVOVntSRVFVRVNUX1VSSX07CiAgICAgICAgfQogICAgICAgIG15ICVQYWdlOwoKICAgICAgICAjIGdldCBtYXhpbXVtIG51bWJlciBvZiBwYWdlcwogICAgICAgICRQYWdle01heFBhZ2VzfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQREY6Ok1heFBhZ2VzJyk7CiAgICAgICAgaWYgKCAhJFBhZ2V7TWF4UGFnZXN9IHx8ICRQYWdle01heFBhZ2VzfSA8IDEgfHwgJFBhZ2V7TWF4UGFnZXN9ID4gMTAwMCApIHsKICAgICAgICAgICAgJFBhZ2V7TWF4UGFnZXN9ID0gMTAwOwogICAgICAgIH0KICAgICAgICBteSAkSGVhZGVyUmlnaHQgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RkFRSG9vaycpIC4gJEZBUURhdGF7TnVtYmVyfTsKICAgICAgICBteSAkSGVhZGxpbmVMZWZ0ID0gJEhlYWRlclJpZ2h0OwogICAgICAgIG15ICRUaXRsZSAgICAgICAgPSAkSGVhZGVyUmlnaHQ7CiAgICAgICAgaWYgKCAkRkFRRGF0YXtUaXRsZX0gKSB7CiAgICAgICAgICAgICRIZWFkbGluZUxlZnQgPSAkRkFRRGF0YXtUaXRsZX07CiAgICAgICAgICAgICRUaXRsZSAuPSAnIC8gJyAuICRGQVFEYXRhe1RpdGxlfTsKICAgICAgICB9CgogICAgICAgICRQYWdle01hcmdpblRvcH0gICAgID0gMzA7CiAgICAgICAgJFBhZ2V7TWFyZ2luUmlnaHR9ICAgPSA0MDsKICAgICAgICAkUGFnZXtNYXJnaW5Cb3R0b219ICA9IDQwOwogICAgICAgICRQYWdle01hcmdpbkxlZnR9ICAgID0gNDA7CiAgICAgICAgJFBhZ2V7SGVhZGVyUmlnaHR9ICAgPSAkSGVhZGVyUmlnaHQ7CiAgICAgICAgJFBhZ2V7SGVhZGxpbmVMZWZ0fSAgPSAkSGVhZGxpbmVMZWZ0OwogICAgICAgICRQYWdle0hlYWRsaW5lUmlnaHR9ID0gJFByaW50ZWRCeSAuICcgJwogICAgICAgICAgICAuICRTZWxmLT57VXNlckZpcnN0bmFtZX0gLiAnICcKICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJMYXN0bmFtZX0gLiAnICgnCiAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRW1haWx9IC4gJykgJwogICAgICAgICAgICAuICRUaW1lOwogICAgICAgICRQYWdle0Zvb3RlckxlZnR9ID0gJFVybDsKICAgICAgICAkUGFnZXtQYWdlVGV4dH0gICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdQYWdlJyk7CiAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSAgPSAxOwoKICAgICAgICAjIGNyZWF0ZSBuZXcgcGRmIGRvY3VtZW50CiAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5Eb2N1bWVudE5ldygKICAgICAgICAgICAgVGl0bGUgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFRpdGxlLAogICAgICAgICAgICBFbmNvZGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckNoYXJzZXR9LAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGZpcnN0IHBkZiBwYWdlCiAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAlUGFnZSwKICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICApOwogICAgICAgICRQYWdle1BhZ2VDb3VudH0rKzsKCiAgICAgICAgIyB0eXBlIG9mIHByaW50IHRhZwogICAgICAgIG15ICRQcmludFRhZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdGQVEgQXJ0aWNsZSBQcmludCcpOwoKICAgICAgICAjIG91dHB1dCBoZWFkbGluZQogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+VGV4dCgKICAgICAgICAgICAgVGV4dCAgICAgPT4gJFByaW50VGFnLAogICAgICAgICAgICBIZWlnaHQgICA9PiA5LAogICAgICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGQnLAogICAgICAgICAgICBBbGlnbiAgICA9PiAncmlnaHQnLAogICAgICAgICAgICBGb250U2l6ZSA9PiA5LAogICAgICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5Qb3NpdGlvblNldCgKICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgIFkgICAgPT4gLTYsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgZmFxIGluZm9ybWF0aW9uCiAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRGQVFIZWFkZXJJbmZvKAogICAgICAgICAgICBQYWdlRGF0YSA9PiBcJVBhZ2UsCiAgICAgICAgICAgIEZBUURhdGEgID0+IFwlRkFRRGF0YSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRGQVFEYXRhe0tleXdvcmRzfSApIHsKICAgICAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRLZXl3b3JkcygKICAgICAgICAgICAgICAgIFBhZ2VEYXRhID0+IFwlUGFnZSwKICAgICAgICAgICAgICAgIEZBUURhdGEgID0+IFwlRkFRRGF0YSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5fUERGT3VwdXRGQVFDb250ZW50KAogICAgICAgICAgICBQYWdlRGF0YSAgICAgICAgPT4gXCVQYWdlLAogICAgICAgICAgICBGQVFEYXRhICAgICAgICAgPT4gXCVGQVFEYXRhLAogICAgICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIHRoZSBwZGYgZG9jdW1lbnQKICAgICAgICBteSAkRmlsZW5hbWUgPSAnRkFRXycgLiAkRkFRRGF0YXtOdW1iZXJ9OwogICAgICAgIG15ICggJHMsICRtLCAkaCwgJEQsICRNLCAkWSApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICApOwogICAgICAgICRNID0gc3ByaW50ZiggIiUwMmQiLCAkTSApOwogICAgICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgICAgICRoID0gc3ByaW50ZiggIiUwMmQiLCAkaCApOwogICAgICAgICRtID0gc3ByaW50ZiggIiUwMmQiLCAkbSApOwogICAgICAgIG15ICRQREZTdHJpbmcgPSAkU2VsZi0+e1BERk9iamVjdH0tPkRvY3VtZW50T3V0cHV0KCk7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVuYW1lIC4gIl8iIC4gIiRZLSRNLSREIiAuICJfIiAuICIkaC0kbS5wZGYiLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAiYXBwbGljYXRpb24vcGRmIiwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBodG1sIG91dHB1dAogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEhlYWRlciggVmFsdWUgPT4gJEZBUURhdGF7TnVtYmVyfSApOwoKICAgICAgICAjIHNob3cgRkFRIENvbnRlbnQKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZBUUNvbnRlbnRTaG93KAogICAgICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJFNlbGYtPntGQVFPYmplY3R9LAogICAgICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICAgICBGQVFEYXRhICAgICAgICAgPT4geyVGQVFEYXRhfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZmFxCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X0hUTUxNYXNrKAogICAgICAgICAgICBGQVFJRCA9PiAkR2V0UGFyYW17RkFRSUR9LAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEZvb3RlcigpOwoKICAgICAgICAjIHJldHVybiBvdXRwdXQKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9QREZPdXRwdXRGQVFIZWFkZXJJbmZvIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhQYWdlRGF0YSBGQVFEYXRhKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIG15ICVGQVFEYXRhID0gJXsgJFBhcmFte0ZBUURhdGF9IH07CiAgICBteSAlUGFnZSAgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKCiAgICAjIGNyZWF0ZSBsZWZ0IHRhYmxlCiAgICBteSAkVGFibGVMZWZ0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NhdGVnb3J5JykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkRkFRRGF0YXtDYXRlZ29yeU5hbWV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEZBUURhdGF7U3RhdGV9ICksCiAgICAgICAgfSwKICAgIF07CgogICAgIyBsYW5ndWFnZSByb3csIGZlYXR1cmUgaXMgZW5hYmxlZAogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgIG15ICRSb3cgPSB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYW5ndWFnZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEZBUURhdGF7TGFuZ3VhZ2V9ICksCiAgICAgICAgfTsKICAgICAgICBwdXNoIEB7JFRhYmxlTGVmdH0sICRSb3c7CiAgICB9CgogICAgIyBjcmVhdGUgcmlnaHQgdGFibGUKICAgIG15ICRUYWJsZVJpZ2h0OwoKICAgICMgdm90aW5nIHJvd3MsIGZlYXRyZSBpcyBlbmFibGVkCiAgICBpZiAoICRTZWxmLT57Vm90aW5nfSApIHsKICAgICAgICAkVGFibGVSaWdodCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1ZvdGVzJykgLiAnOicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtWb3Rlc30sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdSZXN1bHQnKSAuICc6JywKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGQVFEYXRhe1ZvdGVSZXN1bHR9IC4gIiAlIiwKICAgICAgICAgICAgfSwKICAgICAgICBdOwogICAgfQoKICAgICMgbGFzdCB1cGRhdGUgcm93CiAgICBwdXNoIEB7JFRhYmxlUmlnaHR9LCB7CiAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0xhc3QgdXBkYXRlJykgLiAnOicsCiAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICckVGltZUxvbmd7IiREYXRheyJDaGFuZ2VkIn0ifScsCiAgICAgICAgICAgIERhdGEgICAgID0+IFwlRkFRRGF0YSwKICAgICAgICApLAogICAgfTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsyXXtXaWR0aH0gPSA0OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bM117V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVs0XXtXaWR0aH0gPSAxNzAuNTsKCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gPSAnI0FBQUFBQSc7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JPZGR9ICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgZm9yICggJFBhZ2V7UGFnZUNvdW50fSAuLiAkUGFnZXtNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0S2V5d29yZHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VEYXRhIEZBUURhdGEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCggJFBhcmFteyROZWVkZWR9ICkgKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgbXkgJUZBUURhdGEgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKICAgIG15ICVQYWdlICAgID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwogICAgbXkgJVRhYmxlUGFyYW07CgogICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WzBdWzBde0NvbnRlbnR9ID0gJEZBUURhdGF7S2V5d29yZHN9IHx8ICcnOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gNTExOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFNlbGYtPntQREZPYmplY3R9LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRTZWxmLT57UERGT2JqZWN0fS0+VGV4dCgKICAgICAgICBUZXh0ICAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnS2V5d29yZHMnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgdGFibGUgcGFyYW1zCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgZm9yICggJFBhZ2V7UGFnZUNvdW50fSAuLiAkUGFnZXtNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3VwdXRGQVFDb250ZW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBwYXJhbWV0ZXJzCiAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoUGFnZURhdGEgRkFRRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRQYXJhbU5hbWUhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlRkFRRGF0YSA9ICV7ICRQYXJhbXtGQVFEYXRhfSB9OwogICAgbXkgJVBhZ2UgICAgPSAleyAkUGFyYW17UGFnZURhdGF9IH07CgogICAgIyBnZXQgdGhlIGNvbmZpZyBvZiBGQVEgZmllbGRzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICBteSAlRmllbGRzOwogICAgRklFTEQ6CiAgICBmb3IgbXkgJE51bWJlciAoIDEgLi4gNiApIHsKCiAgICAgICAgIyBnZXQgY29uZmlnIG9mIEZBUSBmaWVsZAogICAgICAgIG15ICRDb25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCggJ0ZBUTo6SXRlbTo6RmllbGQnIC4gJE51bWJlciApOwoKICAgICAgICAjIHNraXAgb3ZlciBub3Qgc2hvd24gZmllbGRzCiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJENvbmZpZy0+e1Nob3d9OwoKICAgICAgICAjIHN0b3JlIG9ubHkgdGhlIGNvbmZpZyBvZiBmaWVsZHMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICAkRmllbGRzeyAiRmllbGQiIC4gJE51bWJlciB9ID0gJENvbmZpZzsKICAgIH0KCiAgICAjIHNvcnQgc2hvd24gZmllbGRzIGJ5IHByaW9yaXR5CiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKCBzb3J0IHsgJEZpZWxkc3skYX0tPntQcmlvfSA8PT4gJEZpZWxkc3skYn0tPntQcmlvfSB9IGtleXMgJUZpZWxkcyApIHsKCiAgICAgICAgIyBnZXQgdGhlIHN0YXRlIHR5cGUgZGF0YSBvZiB0aGlzIGZpZWxkCiAgICAgICAgbXkgJFN0YXRlVHlwZURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICAgICAgTmFtZSAgID0+ICRGaWVsZHN7JEZpZWxkfS0+e1Nob3d9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZG8gbm90IHNob3cgZmllbGRzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBnaXZlbiBpbnRlcmZhY2UKICAgICAgICBuZXh0IEZJRUxEIGlmICEkUGFyYW17SW50ZXJmYWNlU3RhdGVzfS0+eyAkU3RhdGVUeXBlRGF0YS0+e1N0YXRlSUR9IH07CgogICAgICAgIG15ICVUYWJsZVBhcmFtOwoKICAgICAgICAjIGNvbnZlcnQgSFRNTCB0byBhc2NpaQogICAgICAgIG15ICRBc2NpaUZpZWxkID0gJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJEZBUURhdGF7JEZpZWxkfSApOwoKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bMF1bMF17Q29udGVudH0gPSAkQXNjaWlGaWVsZCB8fCAnJzsKICAgICAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA1MTE7CgogICAgICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICBZICAgID0+IC0xNSwKICAgICAgICApOwoKICAgICAgICAjIHRyYW5zbGF0ZSB0aGUgZmllbGQgbmFtZSBhbmQgc3RhdGUKICAgICAgICBteSAkRmllbGROYW1lID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRGaWVsZHN7JEZpZWxkfS0+eydDYXB0aW9uJ30gKQogICAgICAgICAgICAuICcgKCcKICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJFN0YXRlVHlwZURhdGEtPntOYW1lfSApCiAgICAgICAgICAgIC4gJyknOwoKICAgICAgICAjIG91dHB1dCBoZWFkbGluZQogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+VGV4dCgKICAgICAgICAgICAgVGV4dCAgICAgPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgICAgICk7CgogICAgICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICBZICAgID0+IC00LAogICAgICAgICk7CgogICAgICAgICMgdGFibGUgcGFyYW1zCiAgICAgICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgPSAwOwogICAgICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICA9IDE7CiAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgICAgICMgb3V0cHV0IHRhYmxlCiAgICAgICAgZm9yICggJFBhZ2V7UGFnZUNvdW50fSAuLiAkUGFnZXtNYXhQYWdlc30gKSB7CgogICAgICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAgICAgJVRhYmxlUGFyYW0gPSAkU2VsZi0+e1BERk9iamVjdH0tPlRhYmxlKCAlVGFibGVQYXJhbSwgKTsKCiAgICAgICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3ViIF9IVE1MTWFzayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2hvdyBMYW5ndWFnZQogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IHJhdGluZwogICAgaWYgKCAkU2VsZi0+e1ZvdGluZ30gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUmF0aW5nJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJGQVFQcmludCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lckZBUVNlYXJjaDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlYXJjaFByb2ZpbGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q1NWOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JF99ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntGQVFPYmplY3R9ICAgICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZWFyY2hQcm9maWxlLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57Q1NWT2JqZWN0fSAgICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6Q1NWLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCBjb25maWcgZm9yIGZyb250ZW5kCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiRkFROjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgICRTZWxmLT57SW50ZXJmYWNlfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlR2V0KAogICAgICAgIE5hbWUgICA9PiAnZXh0ZXJuYWwnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpDdXN0b21lcjo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIGdldCBjb25maWcgZGF0YQogICAgJFNlbGYtPntTdGFydEhpdH0gPSBpbnQoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0SGl0JyApIHx8IDEgKTsKICAgICRTZWxmLT57U2VhcmNoTGltaXR9ICAgICA9ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaExpbWl0fSAgICAgfHwgMjAwOwogICAgJFNlbGYtPntTZWFyY2hQYWdlU2hvd259ID0gJFNlbGYtPntDb25maWd9LT57U2VhcmNoUGFnZVNob3dufSB8fCA0MDsKICAgICRTZWxmLT57U29ydEJ5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdGQVFJRCc7CiAgICAkU2VsZi0+e09yZGVyQnl9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXInICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnT3JkZXI6OkRlZmF1bHQnfQogICAgICAgIHx8ICdEb3duJzsKCiAgICAkU2VsZi0+e1Byb2ZpbGV9ICAgICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Byb2ZpbGUnICkgICAgICAgIHx8ICcnOwogICAgJFNlbGYtPntTYXZlUHJvZmlsZX0gICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTYXZlUHJvZmlsZScgKSAgICB8fCAnJzsKICAgICRTZWxmLT57VGFrZUxhc3RTZWFyY2h9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnVGFrZUxhc3RTZWFyY2gnICkgfHwgJyc7CiAgICAkU2VsZi0+e1NlbGVjdFRlbXBsYXRlfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlbGVjdFRlbXBsYXRlJyApIHx8ICcnOwogICAgJFNlbGYtPntFcmFzZVRlbXBsYXRlfSAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdFcmFzZVRlbXBsYXRlJyApICB8fCAnJzsKCiAgICAjIHNlYXJjaCB3aXRoIGEgc2F2ZWQgdGVtcGxhdGUKICAgIGlmICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VhcmNoVGVtcGxhdGUnICkgJiYgJFNlbGYtPntQcm9maWxlfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249Q3VzdG9tZXJGQVFTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaDtUYWtlTGFzdFNlYXJjaD0xO1NhdmVQcm9maWxlPTE7UHJvZmlsZT0kU2VsZi0+e1Byb2ZpbGV9IiwKICAgICAgICApOwogICAgfQoKICAgICMgYnVpbGQgb3V0cHV0IGZvciBvcGVuIHNlYXJjaCBkZXNjcmlwdGlvbiBieSBGQVEgbnVtYmVyCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyJyApIHsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXInLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIueG1sJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQveG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIG91dHB1dCBmb3Igb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gYnkgZnVsbHRleHQKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dCcgKSB7CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0N1c3RvbWVyRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbFRleHQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dC54bWwnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC94bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgICMgcmVtZW1iZXIgZXhjbHVkZSBhdHRyaWJ1dGVzCiAgICBteSBARXhjbHVkZXMgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICdFeGNsdWRlJyApOwoKICAgICMgZ2V0IHNpbmdsZSBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGxvYWQgcHJvZmlsZXMgc3RyaW5nIHBhcmFtcyAocHJlc3MgbG9hZCBwcm9maWxlKQogICAgaWYgKCAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTG9hZFByb2ZpbGUnICYmICRTZWxmLT57UHJvZmlsZX0gKSB8fCAkU2VsZi0+e1Rha2VMYXN0U2VhcmNofSApIHsKICAgICAgICAlR2V0UGFyYW0gPSAkU2VsZi0+e1NlYXJjaFByb2ZpbGVPYmplY3R9LT5TZWFyY2hQcm9maWxlR2V0KAogICAgICAgICAgICBCYXNlICAgICAgPT4gJ0N1c3RvbWVyRkFRU2VhcmNoJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzZWFyY2ggc3RyaW5nIHBhcmFtcyAoZ2V0IHN1Ym1pdHRlZCBwYXJhbXMpCiAgICBlbHNlIHsKICAgICAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoTnVtYmVyIFRpdGxlIEtleXdvcmQgRnVsbHRleHQgUmVzdWx0Rm9ybSkpIHsKCiAgICAgICAgICAgICMgZ2V0IHNlYXJjaCBzdHJpbmcgcGFyYW1zIChnZXQgc3VibWl0dGVkIHBhcmFtcykKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CgogICAgICAgICAgICAjIHJlbW92ZSB3aGl0ZXNwYWNlIG9uIHRoZSBzdGFydCBhbmQgZW5kCiAgICAgICAgICAgIGlmICggJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID1+IHN7IFxBIFxzKyB9e314bXM7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPX4gc3sgXHMrIFx6IH17fXhtczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBkYiBxdW90ZSB0byBwcmV2ZW50IFNRTCBpbmplY3Rpb24KICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkR2V0UGFyYW17JFBhcmFtTmFtZX0gKTsKCiAgICAgICAgfQoKICAgICAgICAjIGdldCBhcnJheSBwYXJhbXMKICAgICAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoQ2F0ZWdvcnlJRHMgTGFuZ3VhZ2VJRHMgKSkgewoKICAgICAgICAgICAgIyBnZXQgc2VhcmNoIGFycmF5IHBhcmFtcyAoZ2V0IHN1Ym1pdHRlZCBwYXJhbXMpCiAgICAgICAgICAgIG15IEBBcnJheSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgICAgICAgICBpZiAoQEFycmF5KSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSBcQEFycmF5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgaXRlbSBuZWVkIHRvIGdldCBleGNsdWRlZAogICAgZm9yIG15ICRFeGNsdWRlIChARXhjbHVkZXMpIHsKICAgICAgICBpZiAoICRHZXRQYXJhbXskRXhjbHVkZX0gKSB7CiAgICAgICAgICAgIGRlbGV0ZSAkR2V0UGFyYW17JEV4Y2x1ZGV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCByZXN1bHQgZm9ybSBlbnYKICAgIGlmICggISRHZXRQYXJhbXtSZXN1bHRGb3JtfSApIHsKICAgICAgICAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gPSAnJzsKICAgIH0KICAgIGlmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdQcmludCcgKSB7CiAgICAgICAgJFNlbGYtPntTZWFyY2hQYWdlU2hvd259ID0gJFNlbGYtPntTZWFyY2hMaW1pdH07CiAgICB9CgogICAgIyBjaGVjayByZXF1ZXN0CiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnT3BlblNlYXJjaERlc2NyaXB0aW9uJyApIHsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24nLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnT3BlblNlYXJjaERlc2NyaXB0aW9uLnhtbCcsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3htbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IHJlc3VsdCBwYWdlCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VhcmNoJyAmJiAhJFNlbGYtPntFcmFzZVRlbXBsYXRlfSApIHsKCiAgICAgICAgIyBmaWxsIHVwIHByb2ZpbGUgbmFtZSAoZS5nLiB3aXRoIGxhc3Qtc2VhcmNoKQogICAgICAgIGlmICggISRTZWxmLT57UHJvZmlsZX0gfHwgISRTZWxmLT57U2F2ZVByb2ZpbGV9ICkgewogICAgICAgICAgICAkU2VsZi0+e1Byb2ZpbGV9ID0gJ2xhc3Qtc2VhcmNoJzsKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgbGFzdCBvdmVydmlldyBzY3JlZW4KICAgICAgICBteSAkVVJMID0gIkFjdGlvbj1DdXN0b21lckZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO1Byb2ZpbGU9JFNlbGYtPntQcm9maWxlfSIKICAgICAgICAgICAgLiAiO1NvcnRCeT0kU2VsZi0+e1NvcnRCeX07T3JkZXJCeT0kU2VsZi0+e09yZGVyQnl9O1Rha2VMYXN0U2VhcmNoPTEiCiAgICAgICAgICAgIC4gIjtTdGFydEhpdD0kU2VsZi0+e1N0YXJ0SGl0fSI7CgogICAgICAgICMgc3RvcmUgbGFzdCBzY3JlZW4KICAgICAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFVSTCwKICAgICAgICApOwogICAgICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuT3ZlcnZpZXcnLAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFVSTCwKICAgICAgICApOwoKICAgICAgICAjIHNhdmUgc2VhcmNoIHByb2ZpbGUgKHVuZGVyIGxhc3Qtc2VhcmNoIG9yIHJlYWwgcHJvZmlsZSBuYW1lKQogICAgICAgICRTZWxmLT57U2F2ZVByb2ZpbGV9ID0gMTsKCiAgICAgICAgIyByZW1lbWJlciBsYXN0IHNlYXJjaCB2YWx1ZXMKICAgICAgICBpZiAoICRTZWxmLT57U2F2ZVByb2ZpbGV9ICYmICRTZWxmLT57UHJvZmlsZX0gKSB7CgogICAgICAgICAgICAjIHJlbW92ZSBvbGQgcHJvZmlsZSBzdHVmZgogICAgICAgICAgICAkU2VsZi0+e1NlYXJjaFByb2ZpbGVPYmplY3R9LT5TZWFyY2hQcm9maWxlRGVsZXRlKAogICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDdXN0b21lckZBUVNlYXJjaCcsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGluc2VydCBuZXcgcHJvZmlsZSBwYXJhbXMKICAgICAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKCBzb3J0IGtleXMgJUdldFBhcmFtICkgewogICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntTZWFyY2hQcm9maWxlT2JqZWN0fS0+U2VhcmNoUHJvZmlsZUFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDdXN0b21lckZBUVNlYXJjaCcsCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJFBhcmFtTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRHZXRQYXJhbXskUGFyYW1OYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHByZXBhcmUgZnVsbHRleHQgc2VhcmNoCiAgICAgICAgaWYgKCAkR2V0UGFyYW17RnVsbHRleHR9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17Q29udGVudFNlYXJjaH0gPSAnT1InOwogICAgICAgICAgICAkR2V0UGFyYW17V2hhdH0gICAgICAgICAgPSAkR2V0UGFyYW17RnVsbHRleHR9OwogICAgICAgIH0KCiAgICAgICAgIyBwZXJmb3JtIEZBUSBzZWFyY2gKICAgICAgICBteSBAVmlld2FibGVGQVFJRHMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUVNlYXJjaCgKICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICAgICA9PiBbICRTZWxmLT57U29ydEJ5fSBdLAogICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICAgID0+IFsgJFNlbGYtPntPcmRlckJ5fSBdLAogICAgICAgICAgICBMaW1pdCAgICAgICAgICAgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgU3RhdGVzICAgICAgICAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgICAgICBDb250ZW50U2VhcmNoUHJlZml4ID0+ICcqJywKICAgICAgICAgICAgQ29udGVudFNlYXJjaFN1ZmZpeCA9PiAnKicsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIENTViBvdXRwdXQKICAgICAgICBpZiAoICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnQ1NWJyApIHsKICAgICAgICAgICAgbXkgQENTVkhlYWQ7CiAgICAgICAgICAgIG15IEBDU1ZEYXRhOwoKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEgZGV0YWlscwogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZm9ybWF0IHRoZSBjaGFuZ2UgdGltZQogICAgICAgICAgICAgICAgbXkgJENoYW5nZWQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAnJFRpbWVMb25neyIkRGF0YXsiQ2hhbmdlZCJ9In0nLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwlRkFRRGF0YSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBnZXQgaW5mbyBmb3IgQ1NWIG91dHB1dAogICAgICAgICAgICAgICAgbXkgJUNTVkluZm8gPSAoCiAgICAgICAgICAgICAgICAgICAgRkFRTnVtYmVyID0+ICRGQVFEYXRhe051bWJlcn0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgID0+ICRGQVFEYXRhe1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeSAgPT4gJEZBUURhdGF7Q2F0ZWdvcnlOYW1lfSwKICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZSAgPT4gJEZBUURhdGF7TGFuZ3VhZ2V9LAogICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICA9PiAkRkFRRGF0YXtTdGF0ZX0sCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZCAgID0+ICRDaGFuZ2VkLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNzdiBxdW90ZQogICAgICAgICAgICAgICAgaWYgKCAhQENTVkhlYWQgKSB7CiAgICAgICAgICAgICAgICAgICAgQENTVkhlYWQgPSBxdyggRkFRTnVtYmVyIFRpdGxlIENhdGVnb3J5KTsKCiAgICAgICAgICAgICAgICAgICAgIyBpbnNlcnQgbGFuZ3VhZ2UgaGVhZGVyCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCAnTGFuZ3VhZ2UnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgcXcoU3RhdGUgQ2hhbmdlZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBteSBARGF0YTsKICAgICAgICAgICAgICAgIGZvciBteSAkSGVhZGVyIChAQ1NWSGVhZCkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQERhdGEsICRDU1ZJbmZveyRIZWFkZXJ9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHVzaCBAQ1NWRGF0YSwgXEBEYXRhOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNzdiBxdW90ZQogICAgICAgICAgICAjIHRyYW5zbGF0ZSBub24gZXhpc3RpbmcgaGVhZGVyIG1heSByZXN1bHQgaW4gYSBnYXJiYWdlIGZpbGUKICAgICAgICAgICAgaWYgKCAhQENTVkhlYWQgKSB7CiAgICAgICAgICAgICAgICBAQ1NWSGVhZCA9IHF3KEZBUU51bWJlciBUaXRsZSBDYXRlZ29yeSk7CgogICAgICAgICAgICAgICAgIyBpbnNlcnQgbGFuZ3VhZ2UgaGVhZGVyCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgJ0xhbmd1YWdlJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCBxdyhTdGF0ZSBDaGFuZ2VkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB0cmFuc2xhdGUgaGVhZGVycwogICAgICAgICAgICBmb3IgbXkgJEhlYWRlciAoQENTVkhlYWQpIHsKCiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgRkFRTnVtYmVyIGhlYWRlciB3aXRoIHRoZSBjdXJyZW50IEZBUUhvb2sgZnJvbSBjb25maWcKICAgICAgICAgICAgICAgIGlmICggJEhlYWRlciBlcSAnRkFRTnVtYmVyJyApIHsKICAgICAgICAgICAgICAgICAgICAkSGVhZGVyID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RkFRSG9vaycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEhlYWRlciA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCRIZWFkZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFzc2FibGUgQ1NWIGRhdGEKICAgICAgICAgICAgbXkgJENTViA9ICRTZWxmLT57Q1NWT2JqZWN0fS0+QXJyYXkyQ1NWKAogICAgICAgICAgICAgICAgSGVhZCAgICAgID0+IFxAQ1NWSGVhZCwKICAgICAgICAgICAgICAgIERhdGEgICAgICA9PiBcQENTVkRhdGEsCiAgICAgICAgICAgICAgICBTZXBhcmF0b3IgPT4gJFNlbGYtPntVc2VyQ1NWU2VwYXJhdG9yfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmV0dXJuIGNzdiB0byBkb3dubG9hZAogICAgICAgICAgICBteSAkQ1NWRmlsZSA9ICdGQVFfc2VhcmNoJzsKICAgICAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAkQ1NWRmlsZSAuICJfIiAuICIkWS0kTS0kRCIgLiAiXyIgLiAiJGgtJG0uY3N2IiwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJ0ZXh0L2NzdjsgY2hhcnNldD0iIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJENTViwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gZXEgJ1ByaW50JyApIHsKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEgZGV0YWlscwogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYWRkIHRhYmxlIGJsb2NrCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGFkZCBsYW5ndWFnZSBkYXRhCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHslRkFRRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50SGVhZGVyKCBXaWR0aCA9PiA4MDAgKTsKICAgICAgICAgICAgaWYgKCBzY2FsYXIgQFZpZXdhYmxlRkFRSURzID09ICRTZWxmLT57U2VhcmNoTGltaXR9ICkgewogICAgICAgICAgICAgICAgJFBhcmFte1dhcm5pbmd9ID0gJyRUZXh0eyJSZWFjaGVkIG1heC4gY291bnQgb2YgJXMgc2VhcmNoIGhpdHMhIiwgIicKICAgICAgICAgICAgICAgICAgICAuICRTZWxmLT57U2VhcmNoTGltaXR9IC4gJyJ9JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgbGFuZ3VhZ2UgaGVhZGVyCiAgICAgICAgICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lckZBUVNlYXJjaFJlc3VsdFByaW50JywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEZvb3RlcigpOwoKICAgICAgICAgICAgIyByZXR1cm4gb3V0cHV0CiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwoKICAgICAgICB9CgogICAgICAgIG15ICRDb3VudGVyID0gMDsKCiAgICAgICAgIyBpZiB0aGVyZSBhcmUgcmVzdWx0cyB0byBzaG93CiAgICAgICAgaWYgKEBWaWV3YWJsZUZBUUlEcykgewogICAgICAgICAgICBmb3IgbXkgJEZBUUlEIChAVmlld2FibGVGQVFJRHMpIHsKCiAgICAgICAgICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgc2VhcmNoIHJlc3VsdAogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRDb3VudGVyID49ICRTZWxmLT57U3RhcnRIaXR9CiAgICAgICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRTZWxmLT57U2VhcmNoUGFnZVNob3dufSArICRTZWxmLT57U3RhcnRIaXR9ICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBkYXRhIGRldGFpbHMKICAgICAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBibG9ja3MgdG8gdGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgYWRkIGxhbmd1YWdlIGRhdGEKICAgICAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmRMYW5ndWFnZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHslRkFRRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBzaG93IGEgbm8gZGF0YSBmb3VuZCBtc2cKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnICk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBhIGxvb2t1cCB0YWJsZSBmb3IgYXR0cmlidXRlIHNldHRpbmdzCiAgICAgICAgbXkgJUF0dHJpYnV0ZU1hcCA9ICgKICAgICAgICAgICAgTnVtYmVyID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpGQVFIb29rJyksCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVGl0bGUgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdUaXRsZScsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgS2V5d29yZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0tleXdvcmQnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEZ1bGx0ZXh0ID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnRnVsbHRleHQnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENhdGVnb3J5SURzID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnQ2F0ZWdvcnknLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIExhbmd1YWdlSURzID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCgogICAgICAgICk7CgogICAgICAgICMgcHJpbnQgZWFjaCBhdHRyaWJ1dGUgaW4gc2VhcmNoIHJlc3VsdHMgYXJlYS4KICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlQXR0cmlidXRlTWFwICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgYXR0cmlidXRlIHdhcyBkZWZpbmVkIGJ5IHRoZSB1c2VyCiAgICAgICAgICAgIGlmICggJEdldFBhcmFteyRBdHRyaWJ1dGV9ICkgewoKICAgICAgICAgICAgICAgICMgc2V0IGF0dHJpYnV0ZSBuYW1lIGFuZCB0cmFuc2xhdGUgaXQgaWYgYXBwbGllcwogICAgICAgICAgICAgICAgbXkgJEF0dHJpYnV0ZU5hbWUgPSAkQXR0cmlidXRlTWFweyRBdHRyaWJ1dGV9LT57TmFtZX07CiAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGVNYXB7JEF0dHJpYnV0ZX0tPntUcmFuc2xhdGFibGV9ICkgewogICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVOYW1lID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJEF0dHJpYnV0ZU5hbWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRBdHRyaWJ1dGVWYWx1ZTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSB2YWx1ZXMgaXMgYW4gYXJyYXkgdG8gcGFyc2UgZWFjaCB2YWx1ZQogICAgICAgICAgICAgICAgaWYgKCByZWYgJEdldFBhcmFteyRBdHRyaWJ1dGV9IGVxICdBUlJBWScgKSB7CgogICAgICAgICAgICAgICAgICAgICMgQ2F0ZWdvcnkgYXR0cmlidXRlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXR0cmlidXRlIGVxICdDYXRlZ29yeUlEcycgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgbG9uZyBuYW1lIGZvciBhbGwgY3VzdG9tZXIgY2F0ZWdvcmllcwogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ2F0ZWdvcnlMaXN0ID0gJFNlbGYtPntGQVFPYmplY3R9LT5HZXRDdXN0b21lckNhdGVnb3JpZXNMb25nTmFtZXMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdydycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBlYWNoIGNhdGVnb3J5IGlkIHRvIGNhdGVnb3J5IGxvbmcgbmFtZQogICAgICAgICAgICAgICAgICAgICAgICBteSBAQ2F0ZWdvcnlOYW1lczsKICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUllJRDoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDYXRlZG9yeUlEICggQHsgJEdldFBhcmFteyRBdHRyaWJ1dGV9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENBVEVHT1JZSUQgaWYgISRDYXRlZ29yeUxpc3QtPnskQ2F0ZWRvcnlJRH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBDYXRlZ29yeU5hbWVzLCAkQ2F0ZWdvcnlMaXN0LT57JENhdGVkb3J5SUR9OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNyZWF0ZSBhIHN0cmluZyB3aXRoIGFsbCBzZWxlY3RlZCBjYXRlZ29yeSBuYW1lcwogICAgICAgICAgICAgICAgICAgICAgICAkQXR0cmlidXRlVmFsdWUgPSBqb2luKCAiICsgIiwgQENhdGVnb3J5TmFtZXMgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgTGFuZ3VhZ2VJRHMKICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRBdHRyaWJ1dGUgZXEgJ0xhbmd1YWdlSURzJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBlYWNoIGxhbmd1YWdlIGlkIHRvIGxhbmd1YWdlIG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgbXkgQExhbmd1YWdlTmFtZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIExBTkdVQUdFSUQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIEB7ICRHZXRQYXJhbXskQXR0cmlidXRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJExhbmd1YWdlTmFtZSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2VJRCA9PiAkTGFuZ3VhZ2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IExBTkdVQUdFSUQgaWYgISRMYW5ndWFnZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBMYW5ndWFnZU5hbWVzLCAkTGFuZ3VhZ2VOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgY3JlYXRlIGEgc3RyaW5nIHdpdGggYWxsIHNlbGVjdGVkIGxhbmd1YWdlIG5hbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVWYWx1ZSA9IGpvaW4oICIgKyAiLCBATGFuZ3VhZ2VOYW1lcyApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBpcyBhbiBzY2FsYXIgYW5kIGNhbiBiZSBzZXQgZGlyZWN0bHkKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVWYWx1ZSA9ICRHZXRQYXJhbXskQXR0cmlidXRlfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VhcmNoVGVybXMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJEF0dHJpYnV0ZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQXR0cmlidXRlVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRMaW5rID0gJ1Byb2ZpbGU9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntQcm9maWxlfSApIC4gJzsnOwogICAgICAgICRMaW5rIC49ICdTb3J0Qnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntTb3J0Qnl9ICkgLiAnOyc7CiAgICAgICAgJExpbmsgLj0gJ09yZGVyPScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRTZWxmLT57T3JkZXJCeX0gKSAuICc7JzsKICAgICAgICAkTGluayAuPSAnVGFrZUxhc3RTZWFyY2g9MTsnOwoKICAgICAgICAjIGJ1aWxkIHNlYXJjaCBuYXZpZ2F0aW9uIGJhcgogICAgICAgIG15ICVQYWdlTmF2ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QYWdlTmF2QmFyKAogICAgICAgICAgICBMaW1pdCAgICAgPT4gJFNlbGYtPntTZWFyY2hMaW1pdH0sCiAgICAgICAgICAgIFN0YXJ0SGl0ICA9PiAkU2VsZi0+e1N0YXJ0SGl0fSwKICAgICAgICAgICAgUGFnZVNob3duID0+ICRTZWxmLT57U2VhcmNoUGFnZVNob3dufSwKICAgICAgICAgICAgQWxsSGl0cyAgID0+ICRDb3VudGVyLAogICAgICAgICAgICBBY3Rpb24gICAgPT4gIkFjdGlvbj1DdXN0b21lckZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoIiwKICAgICAgICAgICAgTGluayAgICAgID0+ICRMaW5rLAogICAgICAgICAgICBJRFByZWZpeCAgPT4gIkN1c3RvbWVyRkFRU2VhcmNoIiwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZm9vdGVyIGZpbHRlciAtIHNob3cgb25seSBpZiBtb3JlIHRoZSBvbmUgcGFnZSBpcyBhdmFpbGFibGUKICAgICAgICBpZiAoIGRlZmluZWQgJFBhZ2VOYXZ7VG90YWxIaXRzfSAmJiAoICRQYWdlTmF2e1RvdGFsSGl0c30gPiAkU2VsZi0+e1NlYXJjaFBhZ2VTaG93bn0gKSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1BhZ2luYXRpb24nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc3RhcnQgaHRtbCBwYWdlCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJOYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgU2V0IHRoZSBTb3J0QnkgQ2xhc3MKICAgICAgICBteSAkU29ydENsYXNzOwoKICAgICAgICAjIHRoaXMgc2V0cyB0aGUgb3Bwb3NpdCB0byB0aGUgT3JkZXJCeSBwYXJhbWV0ZXIKICAgICAgICBpZiAoICRTZWxmLT57T3JkZXJCeX0gZXEgJ0Rvd24nICkgewogICAgICAgICAgICAkU29ydENsYXNzID0gJ1NvcnRBc2NlbmRpbmcnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRTZWxmLT57T3JkZXJCeX0gZXEgJ1VwJyApIHsKICAgICAgICAgICAgJFNvcnRDbGFzcyA9ICdTb3J0RGVzY2VuZGluZyc7CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgU29ydEJ5IENsYXNzIHRvIHRoZSBjb3JyZWN0IGZpZWxkCiAgICAgICAgbXkgJUNTU1NvcnQ7CiAgICAgICAgbXkgJFNvcnRCeSA9ICRTZWxmLT57U29ydEJ5fSAuICdTb3J0JzsKICAgICAgICAkQ1NTU29ydHskU29ydEJ5fSA9ICRTb3J0Q2xhc3M7CgogICAgICAgIG15ICVOZXdPcmRlciA9ICgKICAgICAgICAgICAgRG93biA9PiAnVXAnLAogICAgICAgICAgICBVcCAgID0+ICdEb3duJywKICAgICAgICApOwoKICAgICAgICAjIHNob3cgbGFuZ3VhZ2UgaGVhZGVyCiAgICAgICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICVDU1NTb3J0LAogICAgICAgICAgICAgICAgICAgIE9yZGVyID0+ICROZXdPcmRlcnsgJFNlbGYtPntPcmRlckJ5fSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRTaG9ydCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlUGFnZU5hdiwKICAgICAgICAgICAgICAgICVDU1NTb3J0LAogICAgICAgICAgICAgICAgT3JkZXIgICA9PiAkTmV3T3JkZXJ7ICRTZWxmLT57T3JkZXJCeX0gfSwKICAgICAgICAgICAgICAgIFByb2ZpbGUgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgZW1wdHkgc2VhcmNoIHNpdGUKICAgIGVsc2UgewoKICAgICAgICAjIGRlbGV0ZSBwcm9maWxlCiAgICAgICAgaWYgKCAkU2VsZi0+e0VyYXNlVGVtcGxhdGV9ICYmICRTZWxmLT57UHJvZmlsZX0gKSB7CgogICAgICAgICAgICAjIHJlbW92ZSBvbGQgcHJvZmlsZSBzdHVmZgogICAgICAgICAgICAkU2VsZi0+e1NlYXJjaFByb2ZpbGVPYmplY3R9LT5TZWFyY2hQcm9maWxlRGVsZXRlKAogICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDdXN0b21lckZBUVNlYXJjaCcsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICVHZXRQYXJhbSA9ICgpOwogICAgICAgICAgICAkU2VsZi0+e1Byb2ZpbGV9ID0gJyc7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIHNlYXJjaCBtYXNrCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJOYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+TWFza0Zvcm0oCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgUHJvZmlsZSA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICBBcmVhICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIE1hc2tGb3JtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgb3V0cHV0IGZvcm1hdHMgbGlzdAogICAgbXkgJVJlc3VsdEZvcm0gPSAoCiAgICAgICAgTm9ybWFsID0+ICdOb3JtYWwnLAogICAgICAgIFByaW50ICA9PiAnUHJpbnQnLAogICAgICAgIENTViAgICA9PiAnQ1NWJywKICAgICk7CgogICAgIyBidWlsZCBvdXRwdXQgZm9ybWF0cyBsaXN0CiAgICAkUGFyYW17UmVzdWx0Rm9ybVN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IHslUmVzdWx0Rm9ybX0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnUmVzdWx0Rm9ybScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17UmVzdWx0Rm9ybX0gfHwgJ05vcm1hbCcsCiAgICApOwoKICAgICMgZ2V0IHByb2ZpbGVzIGxpc3QKICAgIG15ICVQcm9maWxlcyA9ICRTZWxmLT57U2VhcmNoUHJvZmlsZU9iamVjdH0tPlNlYXJjaFByb2ZpbGVMaXN0KAogICAgICAgIEJhc2UgICAgICA9PiAnQ3VzdG9tZXJGQVFTZWFyY2gnLAogICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICApOwoKICAgICMgYnVpbGQgcHJvZmlsZXMgb3V0cHV0IGxpc3QKICAgICRQYXJhbXtQcm9maWxlc1N0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4geyVQcm9maWxlc30sCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdQcm9maWxlJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1Byb2ZpbGV9LAogICAgKTsKCiAgICAjIGdldCBsYW5ndWFnZXMgbGlzdAogICAgbXkgJUxhbmd1YWdlcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgYnVpbGQgbGFuZ3VhZ2VzIG91dHB1dCBsaXN0CiAgICAkUGFyYW17TGFuZ3VhZ2VzU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4geyVMYW5ndWFnZXN9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ0xhbmd1YWdlSURzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0xhbmd1YWdlSURzfSwKICAgICk7CgogICAgIyBnZXQgY2F0ZWdvcmllcyBsaXN0CiAgICBteSAkQ2F0ZWdvcmllcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+R2V0Q3VzdG9tZXJDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdydycsCiAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBidWlsZCBjYXRlZ29yaWVzIG91dHB1dCBsaXN0CiAgICAkUGFyYW17Q2F0ZWdvcmllc1N0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRDYXRlZ29yaWVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NhdGVnb3J5SURzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0NhdGVnb3J5SURzfSwKICAgICk7CgogICAgIyBodG1sIHNlYXJjaCBtYXNrIG91dHB1dAogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZWFyY2gnLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgc2hvdyBsYW5ndWFnZXMgc2VsZWN0CiAgICBpZiAoICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFuZ3VhZ2UnLAogICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICk7CiAgICB9CgogICAgIyBodG1sIHNlYXJjaCBtYXNrIG91dHB1dAogICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJGQVFTZWFyY2gnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lckZBUVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYWxpZDsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgbmVlZGVkIG9iamVjdHMKICAgICRTZWxmLT57RkFRT2JqZWN0fSAgID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1ZhbGlkT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpWYWxpZC0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICAkU2VsZi0+e0ludGVyZmFjZX0gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2V4dGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6Q3VzdG9tZXI6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBkZWZhdWx0IG9wdGlvbnMKICAgICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CiAgICAkU2VsZi0+e1ZvdGluZ30gICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6Vm90aW5nJyk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAlR2V0UGFyYW07CiAgICAkR2V0UGFyYW17SXRlbUlEfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0l0ZW1JRCcgKTsKICAgICRHZXRQYXJhbXtSYXRlfSAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUmF0ZScgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJEdldFBhcmFte0l0ZW1JRH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGYXRhbEVycm9yKCBNZXNzYWdlID0+ICdOZWVkIEl0ZW1JRCEnICk7CiAgICB9CgogICAgIyBnZXQgRkFRIGl0ZW0gZGF0YQogICAgbXkgJUZBUURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZhdGFsRXJyb3IoKTsKICAgIH0KCiAgICAjIGdldCB0aGUgdmFsaWQgaWRzCiAgICBteSBAVmFsaWRJRHMgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRJRHNHZXQoKTsKICAgIG15ICVWYWxpZElETG9va3VwID0gbWFwIHsgJF8gPT4gMSB9IEBWYWxpZElEczsKCiAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgbXkgJFBlcm1pc3Npb24gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNoZWNrQ2F0ZWdvcnlDdXN0b21lclBlcm1pc3Npb24oCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICBDYXRlZ29yeUlEICAgPT4gJEZBUURhdGF7Q2F0ZWdvcnlJRH0sCiAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICBpZiAoCiAgICAgICAgISRQZXJtaXNzaW9uCiAgICAgICAgfHwgISRGQVFEYXRhe0FwcHJvdmVkfQogICAgICAgIHx8ICEkVmFsaWRJRExvb2t1cHsgJEZBUURhdGF7VmFsaWRJRH0gfQogICAgICAgIHx8ICEkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30tPnsgJEZBUURhdGF7U3RhdGVUeXBlSUR9IH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJOb1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgIH0KCiAgICAjIHN0b3JlIHRoZSBsYXN0IHNjcmVlbiBpbiBzZXNzaW9uCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBIVE1MVmlldyBTdWJhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSFRNTFZpZXcnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkRmllbGQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJGaWVsZCIgKTsKCiAgICAgICAgIyBuZWVkZWQgcGFyYW1zCiAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KCBJdGVtSUQgRmllbGQgKSkgewogICAgICAgICAgICBpZiAoICEkTmVlZGVkICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWRlZCBQYXJhbTogJE5lZWRlZCEiLAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgRmllbGQgY29udGVudAogICAgICAgIG15ICRGaWVsZENvbnRlbnQgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkl0ZW1GaWVsZEdldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBGaWVsZCAgPT4gJEZpZWxkLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmV3cml0ZSBoYW5kbGUgYW5kIGFjdGlvbgogICAgICAgICRGaWVsZENvbnRlbnQKICAgICAgICAgICAgPX4gc3sgaW5kZXhbLl1wbCBbP10gQWN0aW9uPUFnZW50RkFRWm9vbSB9e2N1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lckZBUVpvb219Z3htczsKCiAgICAgICAgIyB0YWtlIGNhcmUgb2Ygb2xkIHN0eWxlIGJlZm9yZSBGQVEgMi4wLngKICAgICAgICAkRmllbGRDb250ZW50ID1+IHN7CiAgICAgICAgICAgIGluZGV4Wy5dcGwgWz9dIEFjdGlvbj1BZ2VudEZBUSBbJl0oYW1wOyk/IFN1YmFjdGlvbj1Eb3dubG9hZCBbJl0oYW1wOyk/CiAgICAgICAgfXtjdXN0b21lci5wbD9BY3Rpb249Q3VzdG9tZXJGQVFab29tO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7fWd4bXM7CgogICAgICAgICMgYnVpbGQgYmFzZSB1cmwgZm9yIGlubGluZSBpbWFnZXMKICAgICAgICBteSAkU2Vzc2lvbklEID0gJyc7CiAgICAgICAgaWYgKCAkU2VsZi0+e1Nlc3Npb25JRH0gJiYgISRTZWxmLT57U2Vzc2lvbklEQ29va2llfSApIHsKICAgICAgICAgICAgJFNlc3Npb25JRCA9ICc7JyAuICRTZWxmLT57U2Vzc2lvbk5hbWV9IC4gJz0nIC4gJFNlbGYtPntTZXNzaW9uSUR9OwogICAgICAgICAgICAkRmllbGRDb250ZW50ID1+IHN7CiAgICAgICAgICAgICAgICAoQWN0aW9uPUN1c3RvbWVyRkFRWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O0l0ZW1JRD1cZCs7RmlsZUlEPVxkKykKICAgICAgICAgICAgfXskMSRTZXNzaW9uSUR9Z21zeDsKICAgICAgICB9CgogICAgICAgICMgYWRkIG5lZWRlZCBIVE1MIGhlYWRlcnMKICAgICAgICAkRmllbGRDb250ZW50ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57SFRNTFV0aWxzT2JqZWN0fS0+RG9jdW1lbnRDb21wbGV0ZSgKICAgICAgICAgICAgU3RyaW5nICA9PiAkRmllbGRDb250ZW50LAogICAgICAgICAgICBDaGFyc2V0ID0+ICd1dGYtOCcsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXR1cm4gY29tcGxldGUgSFRNTCBhcyBhbiBhdHRhY2htZW50CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkRmllbGRDb250ZW50LAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgRG93bmxvYWRBdHRhY2htZW50IFN1YmFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEb3dubG9hZEF0dGFjaG1lbnQnICkgewoKICAgICAgICAjIG1hbmFnZSBwYXJhbWV0ZXJzCiAgICAgICAgJEdldFBhcmFte0ZpbGVJRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWxlSUQnICk7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkR2V0UGFyYW17RmlsZUlEfSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGYXRhbEVycm9yKCBNZXNzYWdlID0+ICdOZWVkIEZpbGVJRCcgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGF0dGFjaG1lbnRzCiAgICAgICAgbXkgJUZpbGUgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgRmlsZUlEID0+ICRHZXRQYXJhbXtGaWxlSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCVGaWxlKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoJUZpbGUpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBhdHRhY2htZW50ICgkR2V0UGFyYW17RmlsZUlEfSkhIE1heSBiZSBhbiBhdHRhY2shISEiLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGYXRhbEVycm9yKCk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoCiAgICAgICAgVmFsdWUgPT4gJEZBUURhdGF7VGl0bGV9LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKCiAgICAjIGdldCBGQVEgdm90ZSBpbmZvcm1hdGlvbgogICAgbXkgJFZvdGVEYXRhOwogICAgaWYgKCAkU2VsZi0+e1ZvdGluZ30gKSB7CiAgICAgICAgJFZvdGVEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5Wb3RlR2V0KAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBJdGVtSUQgICAgPT4gJEZBUURhdGF7SXRlbUlEfSwKICAgICAgICAgICAgSW50ZXJmYWNlID0+ICRTZWxmLT57SW50ZXJmYWNlfS0+e1N0YXRlSUR9LAogICAgICAgICAgICBJUCAgICAgICAgPT4gJEVOVnsnUkVNT1RFX0FERFInfSwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgaWYgdXNlciBhbHJlYWR5IHZvdGVkIHRoaXMgRkFRIGl0ZW0KICAgIG15ICRBbHJlYWR5Vm90ZWQ7CiAgICBpZiAoJFZvdGVEYXRhKSB7CgogICAgICAgICMgaXRlbS9jaGFuZ2VfdGltZSA+IHZvdGluZy9jcmVhdGVfdGltZQogICAgICAgIG15ICRJdGVtQ2hhbmdlZFN5c3RlbVRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRGQVFEYXRhe0NoYW5nZWR9IHx8ICcnLAogICAgICAgICk7CiAgICAgICAgbXkgJFZvdGVDcmVhdGVkU3lzdGVtVGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICBTdHJpbmcgPT4gJFZvdGVEYXRhLT57Q3JlYXRlZH0gfHwgJycsCiAgICAgICAgKTsKICAgICAgICBpZiAoICRJdGVtQ2hhbmdlZFN5c3RlbVRpbWUgPD0gJFZvdGVDcmVhdGVkU3lzdGVtVGltZSApIHsKICAgICAgICAgICAgJEFscmVhZHlWb3RlZCA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIFZvdGUgU3ViYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1ZvdGUnICkgewoKICAgICAgICAjIGN1c3RvbWVyIGNhbid0IHVzZSB0aGlzIHN1YmFjdGlvbiBpZiBpcyBub3QgZW5ibGVkCiAgICAgICAgaWYgKCAhJFNlbGYtPntWb3Rpbmd9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlRoZSB2b3RpbmcgbWVjaGFuaXNtIGlzIG5vdCBlbmFibGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVzZXIgY2FuIHZvdGUgb25seSBvbmNlIHBlciBGQVEgcmV2aXNpb24KICAgICAgICBpZiAoJEFscmVhZHlWb3RlZCkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICdZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkIScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgdm90ZSBpZiBhbnkKICAgICAgICBlbHNpZiAoIGRlZmluZWQgJEdldFBhcmFte1JhdGV9ICkgewoKICAgICAgICAgICAgIyBnZXQgcmF0ZXMgY29uZmlnCiAgICAgICAgICAgIG15ICRWb3RpbmdSYXRlcyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6Okl0ZW06OlZvdGluZzo6UmF0ZXMnKTsKICAgICAgICAgICAgbXkgJFJhdGUgICAgICAgID0gJEdldFBhcmFte1JhdGV9OwoKICAgICAgICAgICAgIyBzZW5kIGVycm9yIGlmIHJhdGUgaXMgbm90IGRlZmluZWQgaW4gY29uZmlnCiAgICAgICAgICAgIGlmICggISRWb3RpbmdSYXRlcy0+eyRSYXRlfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlRoZSB2b3RlIHJhdGUgaXMgbm90IGRlZmluZWQhIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBvdGhlcndpc2UgYWRkIHRoZSB2b3RlCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPntGQVFPYmplY3R9LT5Wb3RlQWRkKAogICAgICAgICAgICAgICAgICAgIENyZWF0ZWRCeSA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgICAgIElQICAgICAgICA9PiAkRU5WeydSRU1PVEVfQUREUid9LAogICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAkU2VsZi0+e0ludGVyZmFjZX0tPntTdGF0ZUlEfSwKICAgICAgICAgICAgICAgICAgICBSYXRlICAgICAgPT4gJEdldFBhcmFte1JhdGV9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZG8gbm90IHNob3cgdGhlIHZvdGluZyBmb3JtCiAgICAgICAgICAgICAgICAkQWxyZWFkeVZvdGVkID0gMTsKCiAgICAgICAgICAgICAgICAjIHJlZnJlc2ggRkFRIGl0ZW0gZGF0YQogICAgICAgICAgICAgICAgJUZBUURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KCBJbmZvID0+ICdUaGFua3MgZm9yIHlvdXIgdm90ZSEnICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXNlciBpcyBhYmxlIHRvIHZvdGUgYnV0IG5vIHJhdGUgaGFzIGJlZW4gc2VsZWN0ZWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBJbmZvICAgICA9PiAnTm8gcmF0ZSBzZWxlY3RlZCEnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHByZXBhcmUgZmllbGRzIGRhdGEgKFN0aWxsIG5lZWRlZCBmb3IgUGxhaW5UZXh0KQogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkIChxdyhGaWVsZDEgRmllbGQyIEZpZWxkMyBGaWVsZDQgRmllbGQ1IEZpZWxkNikpIHsKICAgICAgICBuZXh0IEZJRUxEIGlmICEkRkFRRGF0YXskRmllbGR9OwoKICAgICAgICAjIHJld3JpdGUgbGlua3MgdG8gZW1iZWRkZWQgaW1hZ2VzIGZvciBjdXN0b21lciBpbnRlcmZhY2UKICAgICAgICBpZiAoICRTZWxmLT57SW50ZXJmYWNlfS0+e05hbWV9IGVxICdleHRlcm5hbCcgKSB7CgogICAgICAgICAgICAjIHJld3JpdGUgaGFuZGxlIGFuZCBhY3Rpb24KICAgICAgICAgICAgJEZBUURhdGF7JEZpZWxkfQogICAgICAgICAgICAgICAgPX4gc3sgaW5kZXhbLl1wbCBbP10gQWN0aW9uPUFnZW50RkFRWm9vbSB9e2N1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lckZBUVpvb219Z3htczsKCiAgICAgICAgICAgICMgdGFrZSBjYXJlIG9mIG9sZCBzdHlsZSBiZWZvcmUgRkFRIDIuMC54CiAgICAgICAgICAgICRGQVFEYXRheyRGaWVsZH0gPX4gc3sKICAgICAgICAgICAgICAgIGluZGV4Wy5dcGwgWz9dIEFjdGlvbj1BZ2VudEZBUSBbJl0oYW1wOyk/IFN1YmFjdGlvbj1Eb3dubG9hZCBbJl0oYW1wOyk/CiAgICAgICAgICAgIH17Y3VzdG9tZXIucGw/QWN0aW9uPUN1c3RvbWVyRkFRWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O31neG1zOwogICAgICAgIH0KCiAgICAgICAgIyBubyBxdW90aW5nIGlmIGh0bWwgdmlldyBpcyBlbmFibGVkCiAgICAgICAgbmV4dCBGSUVMRCBpZiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpJdGVtOjpIVE1MJyk7CgogICAgICAgICMgaHRtbCBxdW90aW5nCiAgICAgICAgJEZBUURhdGF7JEZpZWxkfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgTmV3TGluZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJEZBUURhdGF7JEZpZWxkfSwKICAgICAgICAgICAgVk1heCAgICAgICAgICAgPT4gNTAwMCwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICAgICAgTGlua0ZlYXR1cmUgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IHZvdGluZyByZXN1bHRzCiAgICAkUGFyYW17Vm90aW5nUmVzdWx0Q29sb3J9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5HZXRGQVFJdGVtVm90aW5nUmF0ZUNvbG9yKAogICAgICAgIFJhdGUgPT4gJEZBUURhdGF7Vm90ZVJlc3VsdH0sCiAgICApOwoKICAgIGlmICggISRQYXJhbXtWb3RpbmdSZXN1bHRDb2xvcn0gfHwgJEZBUURhdGF7Vm90ZXN9IGVxICcwJyApIHsKICAgICAgICAkUGFyYW17Vm90aW5nUmVzdWx0Q29sb3J9ID0gJ0dyYXknOwogICAgfQoKICAgICMgc2hvdyBiYWNrIGxpbmsKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQmFjaycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIHNob3cgbGFuZ3VhZ2UKICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyB2b3RlcwogICAgaWYgKCAkU2VsZi0+e1ZvdGluZ30gKSB7CgogICAgICAgICMgYWx3YXlzIGRpcGxheXMgVm90ZXMgcmVzdWx0IGV2ZW4gaWYgaXRzIDAKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdWaWV3Vm90ZXMnLAogICAgICAgICAgICBEYXRhID0+IHslRkFRRGF0YX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgRkFRIHBhdGgKICAgIG15ICRTaG93RkFRUGF0aCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RkFRUGF0aFNob3coCiAgICAgICAgRkFRT2JqZWN0ICA9PiAkU2VsZi0+e0ZBUU9iamVjdH0sCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoJFNob3dGQVFQYXRoKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRkFRUGF0aEl0ZW1FbGVtZW50JywKICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGtleXdvcmRzIGFzIHNlYXJjaCBsaW5rcwogICAgaWYgKCAkRkFRRGF0YXtLZXl3b3Jkc30gKSB7CgogICAgICAgICMgcmVwbGFjZSBjb21tYXMgYW5kIHNlbWljb2xvbnMKICAgICAgICAkRkFRRGF0YXtLZXl3b3Jkc30gPX4gcy8sLyAvZzsKICAgICAgICAkRkFRRGF0YXtLZXl3b3Jkc30gPX4gcy87LyAvZzsKCiAgICAgICAgbXkgQEtleXdvcmRzID0gc3BsaXQgL1xzKy8sICRGQVFEYXRhe0tleXdvcmRzfTsKICAgICAgICBmb3IgbXkgJEtleXdvcmQgKEBLZXl3b3JkcykgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnS2V5d29yZHMnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgS2V5d29yZCA9PiAkS2V5d29yZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3V0cHV0IHJhdGluZyBzdGFycwogICAgaWYgKCAkU2VsZi0+e1ZvdGluZ30gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFSYXRpbmdTdGFyc1Nob3coCiAgICAgICAgICAgIFZvdGVSZXN1bHQgPT4gJEZBUURhdGF7Vm90ZVJlc3VsdH0sCiAgICAgICAgICAgIFZvdGVzICAgICAgPT4gJEZBUURhdGF7Vm90ZXN9LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgYXR0YWNobWVudHMgaWYgYW55CiAgICBteSBAQXR0YWNobWVudEluZGV4ID0gJFNlbGYtPntGQVFPYmplY3R9LT5BdHRhY2htZW50SW5kZXgoCiAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBTaG93SW5saW5lID0+IDAsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgb3V0cHV0IGF0dGFjaG1lbnRzCiAgICBpZiAoQEF0dGFjaG1lbnRJbmRleCkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRIZWFkZXInLAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudEluZGV4KSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgICAgICV7JEF0dGFjaG1lbnR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IEZBUSBDb250ZW50CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZBUUNvbnRlbnRTaG93KAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkU2VsZi0+e0ZBUU9iamVjdH0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBGQVFEYXRhICAgICAgICAgPT4geyVGQVFEYXRhfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgRkFRIFZvdGluZwogICAgaWYgKCAkU2VsZi0+e1ZvdGluZ30gKSB7CgogICAgICAgICMgZ2V0IHZvdGluZyBjb25maWcKICAgICAgICBteSAkU2hvd1ZvdGluZ0NvbmZpZyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6Okl0ZW06OlZvdGluZzo6U2hvdycpOwogICAgICAgIGlmICggJFNob3dWb3RpbmdDb25maWctPnsgJFNlbGYtPntJbnRlcmZhY2V9LT57TmFtZX0gfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIHVzZXIgYWxyZWFkeSB2b3RlZCBhZnRlciBsYXN0IGNoYW5nZQogICAgICAgICAgICBpZiAoICEkQWxyZWFkeVZvdGVkICkgewogICAgICAgICAgICAgICAgJFNlbGYtPl9GQVFWb3RpbmcoIEZBUURhdGEgPT4geyVGQVFEYXRhfSApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgbG9nIGFjY2VzcyB0byB0aGlzIEZBUSBpdGVtCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUxvZ0FkZCgKICAgICAgICBJdGVtSUQgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnSXRlbUlEJyApLAogICAgICAgIEludGVyZmFjZSA9PiAkU2VsZi0+e0ludGVyZmFjZX0tPntOYW1lfSwKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0N1c3RvbWVyRkFRWm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBfRkFRVm90aW5nIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUZBUURhdGEgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKCiAgICBteSAkU2VsZWN0ZWRSYXRlID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU2VsZWN0ZWRSYXRlIiApOwoKICAgIG15ICRSYXRlQ2xhc3MgPSAnUmF0ZVVuQ2hlY2tlZCc7CgogICAgIyBvdXB1dCB2b3RpbmcgYmxvY2sKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnRkFRVm90aW5nJywKICAgICAgICBEYXRhID0+IHslRkFRRGF0YX0sCiAgICApOwoKICAgICMgZ2V0IFZvdGluZyByYXRlcyBzZXR0aW5nCiAgICBteSAkVm90aW5nUmF0ZXMgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpJdGVtOjpWb3Rpbmc6OlJhdGVzJyk7CiAgICBmb3IgbXkgJFJhdGVWYWx1ZSAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JFZvdGluZ1JhdGVzfSApIHsKCiAgICAgICAgIyBzZXQgY3NzIHJhdGUgY2xhc3MgQ2hlY2tlZCBvciBVbkNoZWNrZWQKICAgICAgICBpZiAoIGRlZmluZWQgJFNlbGVjdGVkUmF0ZSAmJiBpbnQoJFNlbGVjdGVkUmF0ZSkgPj0gJFJhdGVWYWx1ZSApIHsKICAgICAgICAgICAgJFJhdGVDbGFzcyA9ICdSYXRlQ2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUmF0ZUNsYXNzID0gJ1JhdGVVbkNoZWNrZWQnOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgZGF0YSBzdHJ1Y3VyZSBmb3Igb3V0cHV0CiAgICAgICAgbXkgJURhdGEgPSAoCiAgICAgICAgICAgIFZhbHVlID0+ICRSYXRlVmFsdWUsCiAgICAgICAgICAgIFRpdGxlID0+ICRWb3RpbmdSYXRlcy0+eyRSYXRlVmFsdWV9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IHZvdGUgcmF0aW5nIHJvdyBibG9jawogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUVZvdGluZ1JhdGVSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgSXRlbUlEICAgID0+ICRGQVFEYXRhe0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBSYXRlQ2xhc3MgPT4gJFJhdGVDbGFzcywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IHRoZSBzdWJtaXQgYnV0dG9uCiAgICBpZiAoIGRlZmluZWQgJFNlbGVjdGVkUmF0ZSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICJGQVFWb3RpbmdTdWJtaXQiLAogICAgICAgICAgICBEYXRhID0+IHsgU2VsZWN0ZWRSYXRlID0+ICRTZWxlY3RlZFJhdGUgfSwKICAgICAgICApOwogICAgfQp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCApKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRSZWRpcmVjdCA9ICRFTlZ7UkVRVUVTVF9VUkl9OwoKICAgIGlmICgkUmVkaXJlY3QpIHsKICAgICAgICAkUmVkaXJlY3QgPX4gc3tQdWJsaWNGQVF9e1B1YmxpY0ZBUVpvb219eG1zOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFJlZGlyZWN0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QmFzZWxpbmt9CiAgICAgICAgICAgIC4gJ0FjdGlvbj1QdWJsaWNGQVFab29tO0l0ZW1JRD0nCiAgICAgICAgICAgIC4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnSXRlbUlEJyApOwogICAgfQoKICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgIE9QID0+ICRSZWRpcmVjdCwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFFeHBsb3JlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNSU1FOjpCYXNlNjQgcXcoKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IFVzZXJJRCB0byByb290IGJlY2F1c2UgaW4gcHVibGljIGludGVyZmFjZSB0aGVyZSBpcyBubyB1c2VyCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAxOwoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiRkFROjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgICRTZWxmLT57SW50ZXJmYWNlfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlR2V0KAogICAgICAgIE5hbWUgICA9PiAncHVibGljJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6UHVibGljOjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgJFNlbGYtPntNdWx0aUxhbmd1YWdlfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6Ok11bHRpTGFuZ3VhZ2UnKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgZGF0YQogICAgJFNlbGYtPntTdGFydEhpdH0gPSBpbnQoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0SGl0JyApIHx8IDEgKTsKICAgICRTZWxmLT57U2VhcmNoTGltaXR9ICAgICA9ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaExpbWl0fSAgICAgfHwgMjAwOwogICAgJFNlbGYtPntTZWFyY2hQYWdlU2hvd259ID0gJFNlbGYtPntDb25maWd9LT57U2VhcmNoUGFnZVNob3dufSB8fCAzOwogICAgJFNlbGYtPntTb3J0Qnl9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J1NvcnRCeTo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0ZBUUlEJzsKICAgICRTZWxmLT57T3JkZXJCeX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlcicgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0Rvd24nOwoKICAgICMgZ2V0IEl0ZW0gSUQKICAgIG15ICRJdGVtSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJdGVtSUQnICkgfHwgMDsKCiAgICAjIGNoZWNrIGlmIEl0ZW1JRCBwYXJhbWV0ZXIgd2FzIHNlbnQgYW5kIHJlZGlyZWN0IHRvIEZBUSBhcnRpY2xlIHpvb20gc2NyZWVuCiAgICBpZiAoJEl0ZW1JRCkgewoKICAgICAgICAjIHJlZGlyZWN0IHRvIEZBUSB6b29tCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICdBY3Rpb249UHVibGljRkFRWm9vbTtJdGVtSUQ9JyAuICRJdGVtSUQgKTsKICAgIH0KCiAgICAjIGdldCBjYXRlZ29yeSBpZAogICAgbXkgJENhdGVnb3J5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDYXRlZ29yeUlEJyApIHx8IDA7CgogICAgIyBjaGVjayBmb3Igbm9uIG51bWVyaWMgQ2F0ZWdvcnlJRAogICAgaWYgKCAkQ2F0ZWdvcnlJRCAhfiAvXGQrLyApIHsKICAgICAgICAkQ2F0ZWdvcnlJRCA9IDA7CiAgICB9CgogICAgIyBnZXQgY2F0ZWdvcnkgYnkgbmFtZQogICAgbXkgJENhdGVnb3J5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2F0ZWdvcnknICkgfHwgJyc7CgogICAgIyB0cnkgdG8gZ2V0IHRoZSBDYXRlZ29yeSBJRCBmcm9tIGNhdGVnb3J5IG5hbWUgaWYgbm8gQ2F0ZWdvcnkgSUQKICAgIGlmICggJENhdGVnb3J5ICYmICEkQ2F0ZWdvcnlJRCApIHsKCiAgICAgICAgIyBnZXQgdGhlIGNhdGVnb3J5IHRyZWUKICAgICAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHJldmVyc2UgdGhlIGhhcyBmb3IgZWFzeSBsb29rdXAKICAgICAgICBteSAlUmV2ZXJzZUNhdGVnb3J5VHJlZSA9IHJldmVyc2UgJXskQ2F0ZWdvcnlUcmVlfTsKCiAgICAgICAgJENhdGVnb3J5SUQgPSAkUmV2ZXJzZUNhdGVnb3J5VHJlZXskQ2F0ZWdvcnl9IHx8IDA7CiAgICB9CgogICAgIyB0cnkgdG8gZ2V0IHRoZSBjYXRlZ29yeSBkYXRhCiAgICBteSAlQ2F0ZWdvcnlEYXRhOwogICAgaWYgKCRDYXRlZ29yeUlEKSB7CgogICAgICAgICMgZ2V0IGNhdGVnb3J5IGRhdGEKICAgICAgICAlQ2F0ZWdvcnlEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICElQ2F0ZWdvcnlEYXRhICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCByc3MgZmVlZCBsaW5rIGZvciBuZXcgRkFRIGFydGljbGVzIGluIHRoZSBicm93c2VyIFVSTCBiYXIKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWV0YUxpbmsnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBSZWwgICA9PiAnYWx0ZXJuYXRlJywKICAgICAgICAgICAgVHlwZSAgPT4gJ2FwcGxpY2F0aW9uL3Jzcyt4bWwnLAogICAgICAgICAgICBUaXRsZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknKSwKICAgICAgICAgICAgSHJlZiAgPT4gJyRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249UHVibGljRkFRUlNTO1R5cGU9Q3JlYXRlZCcsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgcnNzIGZlZWQgbGluayBmb3IgY2hhbmdlZCBGQVEgYXJ0aWNsZXMgaW4gdGhlIGJyb3dzZXIgVVJMIGJhcgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZXRhTGluaycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFJlbCAgPT4gJ2FsdGVybmF0ZScsCiAgICAgICAgICAgIFR5cGUgPT4gJ2FwcGxpY2F0aW9uL3Jzcyt4bWwnLAogICAgICAgICAgICBUaXRsZSA9PgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknKSwKICAgICAgICAgICAgSHJlZiA9PiAnJEVudnsiQmFzZWxpbmsifUFjdGlvbj1QdWJsaWNGQVFSU1M7VHlwZT1DaGFuZ2VkJywKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCByc3MgZmVlZCBsaW5rIGZvciBUb3AxMCBGQVEgYXJ0aWNsZXMgaW4gdGhlIGJyb3dzZXIgVVJMIGJhcgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZXRhTGluaycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFJlbCAgID0+ICdhbHRlcm5hdGUnLAogICAgICAgICAgICBUeXBlICA9PiAnYXBwbGljYXRpb24vcnNzK3htbCcsCiAgICAgICAgICAgIFRpdGxlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdGQVEgQXJ0aWNsZXMgKFRvcCAxMCknKSwKICAgICAgICAgICAgSHJlZiAgPT4gJyRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249UHVibGljRkFRUlNTO1R5cGU9VG9wMTAnLAogICAgICAgIH0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoKTsKCiAgICAjIHNob3cgRkFRIHBhdGgKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RkFRUGF0aFNob3coCiAgICAgICAgRkFRT2JqZWN0ICA9PiAkU2VsZi0+e0ZBUU9iamVjdH0sCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgYWxsIGRpcmVjdCBzdWJjYXRlZ29yaWVzIG9mIHRoZSBzZWxlY3RlZCBjYXRlZ29yeQogICAgbXkgJENhdGVnb3J5SURzUmVmID0gJFNlbGYtPntGQVFPYmplY3R9LT5QdWJsaWNDYXRlZ29yeVNlYXJjaCgKICAgICAgICBQYXJlbnRJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICBNb2RlICAgICA9PiAnUHVibGljJywKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2hvdyBzdWJjYXRlZ29yaWVzIGxpc3QKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1N1YmNhdGVnb3JpZXMnICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdPdmVydmlld1Jlc3VsdCcgKTsKCiAgICAjIGNoZWNrIGlmIHRoZXJlIGFyZSBzdWJjYXRlZ29yaWVzCiAgICBpZiAoICRDYXRlZ29yeUlEc1JlZiAmJiByZWYgJENhdGVnb3J5SURzUmVmIGVxICdBUlJBWScgJiYgQHskQ2F0ZWdvcnlJRHNSZWZ9ICkgewoKICAgICAgICAjIHNob3cgZGF0YSBmb3IgZWFjaCBzdWJjYXRlZ29yeQogICAgICAgIGZvciBteSAkU3ViQ2F0ZWdvcnlJRCAoIEB7JENhdGVnb3J5SURzUmVmfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBjYXRlZ29yeSBkYXRhCiAgICAgICAgICAgIG15ICVTdWJDYXRlZ29yeURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkNhdGVnb3J5R2V0KAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkU3ViQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIG51bWJlciBvZiBzdWJjYXRlZ29yaWVzIG9mIHRoaXMgc3ViY2F0ZWdvcnkKICAgICAgICAgICAgJFN1YkNhdGVnb3J5RGF0YXtTdWJDYXRlZ29yeUNvdW50fSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2F0ZWdvcnlDb3VudCgKICAgICAgICAgICAgICAgIFBhcmVudElEcyA9PiBbJFN1YkNhdGVnb3J5SURdLAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBudW1iZXIgb2YgZmFxIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkKICAgICAgICAgICAgJFN1YkNhdGVnb3J5RGF0YXtBcnRpY2xlQ291bnR9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFDb3VudCgKICAgICAgICAgICAgICAgIENhdGVnb3J5SURzICA9PiBbJFN1YkNhdGVnb3J5SURdLAogICAgICAgICAgICAgICAgSXRlbVN0YXRlcyAgID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICAgICAgICAgIE9ubHlBcHByb3ZlZCA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IHRoZSBjYXRlZ29yeSBkYXRhCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslU3ViQ2F0ZWdvcnlEYXRhfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0NhdGVnb3J5RGF0YUZvdW5kTXNnJywKICAgICAgICApOwogICAgfQoKICAgICMgc2VhcmNoIGFsbCBGQVEgYXJ0aWNsZXMgd2l0aGluIHRoZSBnaXZlbiBjYXRlZ29yeQogICAgbXkgQFZpZXdhYmxlRkFRSURzID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFTZWFyY2goCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbICRTZWxmLT57U29ydEJ5fSBdLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyAkU2VsZi0+e09yZGVyQnl9IF0sCiAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAkU2VsZi0+e1NlYXJjaExpbWl0fSwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBTdGF0ZXMgICAgICAgICAgID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBJbnRlcmZhY2UgICAgICAgID0+ICRTZWxmLT57SW50ZXJmYWNlfSwKICAgICAgICBDYXRlZ29yeUlEcyAgICAgID0+IFskQ2F0ZWdvcnlJRF0sCiAgICApOwoKICAgICMgc2V0IHRoZSBTb3J0QnkgQ2xhc3MKICAgIG15ICRTb3J0Q2xhc3M7CgogICAgIyB0aGlzIHNldHMgdGhlIG9wcG9zaXQgdG8gdGhlIE9yZGVyQnkgcGFyYW1ldGVyCiAgICBpZiAoICRTZWxmLT57T3JkZXJCeX0gZXEgJ0Rvd24nICkgewogICAgICAgICRTb3J0Q2xhc3MgPSAnU29ydEFzY2VuZGluZyc7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57T3JkZXJCeX0gZXEgJ1VwJyApIHsKICAgICAgICAkU29ydENsYXNzID0gJ1NvcnREZXNjZW5kaW5nJzsKICAgIH0KCiAgICAjIHNldCB0aGUgU29ydEJ5IENsYXNzIHRvIHRoZSBjb3JyZWN0IGZpZWxkCiAgICBteSAlQ1NTU29ydDsKICAgIG15ICRTb3J0QnkgPSAkU2VsZi0+e1NvcnRCeX0gLiAnU29ydCc7CiAgICAkQ1NTU29ydHskU29ydEJ5fSA9ICRTb3J0Q2xhc3M7CgogICAgbXkgJU5ld09yZGVyID0gKAogICAgICAgIERvd24gPT4gJ1VwJywKICAgICAgICBVcCAgID0+ICdEb3duJywKICAgICk7CgogICAgIyBzaG93IHRoZSBGQVEgYXJ0aWNsZSBsaXN0CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZBUUl0ZW1MaXN0JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgJUNTU1NvcnQsCiAgICAgICAgICAgIE9yZGVyID0+ICROZXdPcmRlcnsgJFNlbGYtPntPcmRlckJ5fSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyBsYW5ndWFnZSBoZWFkZXIKICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgICVDU1NTb3J0LAogICAgICAgICAgICAgICAgT3JkZXIgPT4gJE5ld09yZGVyeyAkU2VsZi0+e09yZGVyQnl9IH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkQ291bnRlciA9IDA7CiAgICBpZiAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICMgY3JlYXRlIGJhY2sgbGluayBmb3IgRkFRIFpvb20gc2NyZWVuCiAgICAgICAgbXkgJFpvb21CYWNrTGluayA9ICJBY3Rpb249UHVibGljRkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD0kQ2F0ZWdvcnlJRDsiCiAgICAgICAgICAgIC4gIlNvcnRCeT0kU2VsZi0+e1NvcnRCeX07T3JkZXI9JFNlbGYtPntPcmRlckJ5fTtTdGFydEhpdD0kU2VsZi0+e1N0YXJ0SGl0fSI7CgogICAgICAgICMgZW5jb2RlIGJhY2sgbGluayB0byBCYXNlNjQgZm9yIGVhc3kgSFRNTCB0cmFuc3BvcnQKICAgICAgICAkWm9vbUJhY2tMaW5rID0gTUlNRTo6QmFzZTY0OjplbmNvZGVfYmFzZTY0KCRab29tQmFja0xpbmspOwoKICAgICAgICBmb3IgbXkgJEZBUUlEIChAVmlld2FibGVGQVFJRHMpIHsKCiAgICAgICAgICAgICRDb3VudGVyKys7CgogICAgICAgICAgICAjIGJ1aWxkIHNlYXJjaCByZXN1bHQKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFNlbGYtPntTdGFydEhpdH0KICAgICAgICAgICAgICAgICYmICRDb3VudGVyIDwgKCAkU2VsZi0+e1NlYXJjaFBhZ2VTaG93bn0gKyAkU2VsZi0+e1N0YXJ0SGl0fSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGdldCBGQVEgZGF0YSBkZXRhaWxzCiAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBhZGQgYmxvY2tzIHRvIHRlbXBsYXRlCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBab29tQmFja0xpbmsgPT4gJFpvb21CYWNrTGluaywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGFkZCBsYW5ndWFnZSBkYXRhCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0ZBUURhdGFGb3VuZE1zZycsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkTGluayA9ICdTb3J0Qnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntTb3J0Qnl9ICkgLiAnOyc7CiAgICAkTGluayAuPSAnT3JkZXI9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua0VuY29kZSggJFNlbGYtPntPcmRlckJ5fSApIC4gJzsnOwoKICAgICMgYnVpbGQgc2VhcmNoIG5hdmlnYXRpb24gYmFyCiAgICBteSAlUGFnZU5hdiA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UGFnZU5hdkJhcigKICAgICAgICBMaW1pdCAgICAgPT4gJFNlbGYtPntTZWFyY2hMaW1pdH0sCiAgICAgICAgU3RhcnRIaXQgID0+ICRTZWxmLT57U3RhcnRIaXR9LAogICAgICAgIFBhZ2VTaG93biA9PiAkU2VsZi0+e1NlYXJjaFBhZ2VTaG93bn0sCiAgICAgICAgQWxsSGl0cyAgID0+ICRDb3VudGVyLAogICAgICAgIEFjdGlvbiAgICA9PiAiQWN0aW9uPVB1YmxpY0ZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9JENhdGVnb3J5SUQiLAogICAgICAgIExpbmsgICAgICA9PiAkTGluaywKICAgICAgICBJRFByZWZpeCAgPT4gIlB1YmxpY0ZBUUV4cGxvcmVyIiwKICAgICk7CgogICAgIyBzaG93IGZvb3RlciBmaWx0ZXIgLSBzaG93IG9ubHkgaWYgbW9yZSB0aGUgb25lIHBhZ2UgaXMgYXZhaWxhYmxlCiAgICBpZiAoIGRlZmluZWQgJFBhZ2VOYXZ7VG90YWxIaXRzfSAmJiAoICRQYWdlTmF2e1RvdGFsSGl0c30gPiAkU2VsZi0+e1NlYXJjaFBhZ2VTaG93bn0gKSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQYWdpbmF0aW9uJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlUGFnZU5hdiwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBRdWlja1NlYXJjaAogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFTaG93UXVpY2tTZWFyY2goCiAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdQdWJsaWMnLAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZX0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgbGFzdCBhZGRlZCBhbmQgbGFzdCB1cGRhdGVkIGFydGljbGVzCiAgICBmb3IgbXkgJFR5cGUgKHF3KExhc3RDcmVhdGUgTGFzdENoYW5nZSkpIHsKCiAgICAgICAgbXkgJFNob3dPayA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RkFRU2hvd0xhdGVzdE5ld3NCb3goCiAgICAgICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkU2VsZi0+e0ZBUU9iamVjdH0sCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICA9PiAkVHlwZSwKICAgICAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdQdWJsaWMnLAogICAgICAgICAgICBDYXRlZ29yeUlEICAgICAgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZX0sCiAgICAgICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRTaG93T2sgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyB0b3AgdGVuIGFydGljbGVzCiAgICBteSAkU2hvd09rID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFTaG93VG9wMTAoCiAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRTZWxmLT57RkFRT2JqZWN0fSwKICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ1B1YmxpYycsCiAgICAgICAgQ2F0ZWdvcnlJRCAgICAgID0+ICRDYXRlZ29yeUlELAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZX0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkU2hvd09rICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICB9CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNGQVFFeHBsb3JlcicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAlQ2F0ZWdvcnlEYXRhLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFQcmludDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlBERjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkTmVlZGVkICgKICAgICAgICBxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCBNYWluT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgVXNlcklEIHRvIHJvb3QgYmVjYXVzZSBpbiBwdWJsaWMgaW50ZXJmYWNlIHRoZXJlIGlzIG5vIHVzZXIKICAgICRTZWxmLT57VXNlcklEfSA9IDE7CgogICAgIyBjcmVhdGUgYWRpdGlvbmFsIG9iamVjdHMKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntQREZPYmplY3R9ICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlBERi0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgJFNlbGYtPntJbnRlcmZhY2V9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgTmFtZSAgID0+ICdwdWJsaWMnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpQdWJsaWM6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBkZWZhdWx0IG9wdGlvbnMKICAgICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CiAgICAkU2VsZi0+e1ZvdGluZ30gICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6Vm90aW5nJyk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKICAgICRHZXRQYXJhbXtJdGVtSUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnSXRlbUlEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkR2V0UGFyYW17SXRlbUlEfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIEl0ZW1JRCBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEZBUSBpdGVtIGRhdGEKICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJUZBUURhdGEgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGYXRhbEVycm9yKCk7CiAgICB9CgogICAgIyBzaG93IG5vIHBlcm1pc3Npb24gZXJyb3IKICAgIGlmICgKICAgICAgICAhJEZBUURhdGF7QXBwcm92ZWR9CiAgICAgICAgfHwgISRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfS0+eyAkRkFRRGF0YXtTdGF0ZVR5cGVJRH0gfQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgfQoKICAgICMgcHJlcGFyZSBmaWVsZHMgZGF0YQogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkIChxdyhGaWVsZDEgRmllbGQyIEZpZWxkMyBGaWVsZDQgRmllbGQ1IEZpZWxkNikpIHsKICAgICAgICBuZXh0IEZJRUxEIGlmICEkRkFRRGF0YXskRmllbGR9OwoKICAgICAgICAjIHJld3JpdGUgbGlua3MgdG8gZW1iZWRkZWQgaW1hZ2VzIGZvciBjdXN0b21lciBhbmQgcHVibGljIGludGVyZmFjZQogICAgICAgIGlmICggJFNlbGYtPntJbnRlcmZhY2V9e05hbWV9IGVxICdwdWJsaWMnICkgewogICAgICAgICAgICAkRkFRRGF0YXskRmllbGR9CiAgICAgICAgICAgICAgICA9fiBzeyBpbmRleFsuXXBsIFs/XSBBY3Rpb249QWdlbnRGQVFab29tIH17cHVibGljLnBsP0FjdGlvbj1QdWJsaWNGQVFab29tfWd4bXM7CiAgICAgICAgfQoKICAgICAgICAjIG5vIHF1b3RpbmcgaWYgaHRtbCB2aWV3IGlzIGVuYWJsZWQKICAgICAgICBuZXh0IEZJRUxEIGlmICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6Okl0ZW06OkhUTUwnKTsKCiAgICAgICAgIyBodG1sIHF1b3RpbmcKICAgICAgICAkRkFRRGF0YXskRmllbGR9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBOZXdMaW5lICAgICAgICA9PiAwLAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkRkFRRGF0YXskRmllbGR9LAogICAgICAgICAgICBWTWF4ICAgICAgICAgICA9PiA1MDAwLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBwZGYgb3V0cHV0CiAgICBpZiAoICRTZWxmLT57UERGT2JqZWN0fSApIHsKICAgICAgICBteSAkVGltZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KCBUZW1wbGF0ZSA9PiAnJEVudnsiVGltZSJ9JyApOwogICAgICAgIG15ICRVcmwgPSAnICc7CiAgICAgICAgaWYgKCAkRU5We1JFUVVFU1RfVVJJfSApIHsKICAgICAgICAgICAgJFVybCA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdIdHRwVHlwZScpIC4gJzovLycKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZRRE4nKQogICAgICAgICAgICAgICAgLiAkRU5We1JFUVVFU1RfVVJJfTsKICAgICAgICB9CiAgICAgICAgbXkgJVBhZ2U7CgogICAgICAgICMgZ2V0IG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCiAgICAgICAgJFBhZ2V7TWF4UGFnZXN9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgICAgICBpZiAoICEkUGFnZXtNYXhQYWdlc30gfHwgJFBhZ2V7TWF4UGFnZXN9IDwgMSB8fCAkUGFnZXtNYXhQYWdlc30gPiAxMDAwICkgewogICAgICAgICAgICAkUGFnZXtNYXhQYWdlc30gPSAxMDA7CiAgICAgICAgfQogICAgICAgIG15ICRIZWFkZXJSaWdodCAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpGQVFIb29rJykgLiAkRkFRRGF0YXtOdW1iZXJ9OwogICAgICAgIG15ICRIZWFkbGluZUxlZnQgPSAkSGVhZGVyUmlnaHQ7CiAgICAgICAgbXkgJFRpdGxlICAgICAgICA9ICRIZWFkZXJSaWdodDsKICAgICAgICBpZiAoICRGQVFEYXRhe1RpdGxlfSApIHsKICAgICAgICAgICAgJEhlYWRsaW5lTGVmdCA9ICRGQVFEYXRhe1RpdGxlfTsKICAgICAgICAgICAgJFRpdGxlIC49ICcgLyAnIC4gJEZBUURhdGF7VGl0bGV9OwogICAgICAgIH0KCiAgICAgICAgJFBhZ2V7TWFyZ2luVG9wfSAgICAgPSAzMDsKICAgICAgICAkUGFnZXtNYXJnaW5SaWdodH0gICA9IDQwOwogICAgICAgICRQYWdle01hcmdpbkJvdHRvbX0gID0gNDA7CiAgICAgICAgJFBhZ2V7TWFyZ2luTGVmdH0gICAgPSA0MDsKICAgICAgICAkUGFnZXtIZWFkZXJSaWdodH0gICA9ICRIZWFkZXJSaWdodDsKICAgICAgICAkUGFnZXtIZWFkbGluZUxlZnR9ICA9ICRIZWFkbGluZUxlZnQ7CiAgICAgICAgJFBhZ2V7SGVhZGxpbmVSaWdodH0gPSAkVGltZTsKICAgICAgICAkUGFnZXtGb290ZXJMZWZ0fSAgICA9ICRVcmw7CiAgICAgICAgJFBhZ2V7UGFnZVRleHR9ICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnUGFnZScpOwogICAgICAgICRQYWdle1BhZ2VDb3VudH0gICAgID0gMTsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHBkZiBkb2N1bWVudAogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+RG9jdW1lbnROZXcoCiAgICAgICAgICAgIFRpdGxlICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRUaXRsZSwKICAgICAgICAgICAgRW5jb2RlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1VzZXJDaGFyc2V0fSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBmaXJzdCBwZGYgcGFnZQogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgKTsKICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgICAgICMgdHlwZSBvZiBwcmludCB0YWcKICAgICAgICBteSAkUHJpbnRUYWcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnRkFRIEFydGljbGUgUHJpbnQnKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgICAgIFRleHQgICAgID0+ICRQcmludFRhZywKICAgICAgICAgICAgSGVpZ2h0ICAgPT4gOSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkJywKICAgICAgICAgICAgQWxpZ24gICAgPT4gJ3JpZ2h0JywKICAgICAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICBZICAgID0+IC02LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGZhcSBpbmZvcm1hdGlvbgogICAgICAgICRTZWxmLT5fUERGT3V0cHV0RkFRSGVhZGVySW5mbygKICAgICAgICAgICAgUGFnZURhdGEgPT4gXCVQYWdlLAogICAgICAgICAgICBGQVFEYXRhICA9PiBcJUZBUURhdGEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkRkFRRGF0YXtLZXl3b3Jkc30gKSB7CiAgICAgICAgICAgICRTZWxmLT5fUERGT3V0cHV0S2V5d29yZHMoCiAgICAgICAgICAgICAgICBQYWdlRGF0YSA9PiBcJVBhZ2UsCiAgICAgICAgICAgICAgICBGQVFEYXRhICA9PiBcJUZBUURhdGEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+X1BERk91cHV0RkFRQ29udGVudCgKICAgICAgICAgICAgUGFnZURhdGEgICAgICAgID0+IFwlUGFnZSwKICAgICAgICAgICAgRkFRRGF0YSAgICAgICAgID0+IFwlRkFRRGF0YSwKICAgICAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICApOwoKICAgICAgICAjIHJldHVybiB0aGUgcGRmIGRvY3VtZW50CiAgICAgICAgbXkgJEZpbGVuYW1lID0gJ0ZBUV8nIC4gJEZBUURhdGF7TnVtYmVyfTsKICAgICAgICBteSAoICRzLCAkbSwgJGgsICRELCAkTSwgJFkgKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgKTsKICAgICAgICAkTSA9IHNwcmludGYoICIlMDJkIiwgJE0gKTsKICAgICAgICAkRCA9IHNwcmludGYoICIlMDJkIiwgJEQgKTsKICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAkbSA9IHNwcmludGYoICIlMDJkIiwgJG0gKTsKICAgICAgICBteSAkUERGU3RyaW5nID0gJFNlbGYtPntQREZPYmplY3R9LT5Eb2N1bWVudE91dHB1dCgpOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSAuICJfIiAuICIkWS0kTS0kRCIgLiAiXyIgLiAiJGgtJG0ucGRmIiwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gImFwcGxpY2F0aW9uL3BkZiIsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRQREZTdHJpbmcsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdhdHRhY2htZW50JywKICAgICAgICApOwogICAgfQoKICAgICMgZ2VuZXJhdGUgaHRtbCBvdXRwdXQKICAgIGVsc2UgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnRIZWFkZXIoIFZhbHVlID0+ICRGQVFEYXRhe051bWJlcn0gKTsKCiAgICAgICAgIyBzaG93IEZBUSBDb250ZW50CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFDb250ZW50U2hvdygKICAgICAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRTZWxmLT57RkFRT2JqZWN0fSwKICAgICAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICAgICAgRkFRRGF0YSAgICAgICAgID0+IHslRkFRRGF0YX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGZhcQogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9IVE1MTWFzaygKICAgICAgICAgICAgRkFRSUQgPT4gJEdldFBhcmFte0ZBUUlEfSwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnRGb290ZXIoKTsKCiAgICAgICAgIyByZXR1cm4gb3V0cHV0CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfUERGT3V0cHV0RkFRSGVhZGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZURhdGEgRkFRRGF0YSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBteSAlRkFRRGF0YSA9ICV7ICRQYXJhbXtGQVFEYXRhfSB9OwogICAgbXkgJVBhZ2UgICAgPSAleyAkUGFyYW17UGFnZURhdGF9IH07CgogICAgIyBjcmVhdGUgbGVmdCB0YWJsZQogICAgbXkgJFRhYmxlTGVmdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDYXRlZ29yeScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEZBUURhdGF7Q2F0ZWdvcnlOYW1lfSApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU3RhdGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRGQVFEYXRhe1N0YXRlfSApLAogICAgICAgIH0sCiAgICBdOwoKICAgICMgbGFuZ3VhZ2Ugcm93LCBmZWF0dXJlIGlzIGVuYWJsZWQKICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICBteSAkUm93ID0gewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnTGFuZ3VhZ2UnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRGQVFEYXRhe0xhbmd1YWdlfSApLAogICAgICAgIH07CiAgICAgICAgcHVzaCBAeyRUYWJsZUxlZnR9LCAkUm93OwogICAgfQoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodDsKCiAgICAjIHZvdGluZyByb3dzLCBmZWF0cmUgaXMgZW5hYmxlZAogICAgaWYgKCAkU2VsZi0+e1ZvdGluZ30gKSB7CiAgICAgICAgJFRhYmxlUmlnaHQgPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdWb3RlcycpIC4gJzonLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJEZBUURhdGF7Vm90ZXN9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnUmVzdWx0JykgLiAnOicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtWb3RlUmVzdWx0fSAuICIgJSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgXTsKICAgIH0KCiAgICAjIGxhc3QgdXBkYXRlIHJvdwogICAgcHVzaCBAeyRUYWJsZVJpZ2h0fSwgewogICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYXN0IHVwZGF0ZScpIC4gJzonLAogICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZSA9PiAnJFRpbWVMb25neyIkRGF0YXsiQ2hhbmdlZCJ9In0nLAogICAgICAgICAgICBEYXRhICAgICA9PiBcJUZBUURhdGEsCiAgICAgICAgKSwKICAgIH07CgogICAgbXkgJFJvd3MgPSBAeyRUYWJsZUxlZnR9OwogICAgaWYgKCBAeyRUYWJsZVJpZ2h0fSA+ICRSb3dzICkgewogICAgICAgICRSb3dzID0gQHskVGFibGVSaWdodH07CiAgICB9CgogICAgbXkgJVRhYmxlUGFyYW07CiAgICBmb3IgbXkgJFJvdyAoIDEgLi4gJFJvd3MgKSB7CiAgICAgICAgJFJvdy0tOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Rm9udH0gICAgICAgICAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gICAgICAgICA9ICRUYWJsZUxlZnQtPlskUm93XS0+e1ZhbHVlfTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMl17Q29udGVudH0gICAgICAgICA9ICcgJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMl17QmFja2dyb3VuZENvbG9yfSA9ICcjRkZGRkZGJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bM117Q29udGVudH0gICAgICAgICA9ICRUYWJsZVJpZ2h0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVs0XXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e1ZhbHVlfTsKICAgIH0KCiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMl17V2lkdGh9ID0gNDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzNde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bNF17V2lkdGh9ID0gMTcwLjU7CgogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvckV2ZW59ID0gJyNBQUFBQUEnOwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yT2RkfSAgPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dEtleXdvcmRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhQYWdlRGF0YSBGQVFEYXRhKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIG15ICVGQVFEYXRhID0gJXsgJFBhcmFte0ZBUURhdGF9IH07CiAgICBteSAlUGFnZSAgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKICAgIG15ICVUYWJsZVBhcmFtOwoKICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVswXVswXXtDb250ZW50fSA9ICRGQVFEYXRhe0tleXdvcmRzfSB8fCAnJzsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDUxMTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0tleXdvcmRzJyksCiAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFNlbGYtPntQREZPYmplY3R9LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC00LAogICAgKTsKCiAgICAjIHRhYmxlIHBhcmFtcwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91cHV0RkFRQ29udGVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgcGFyYW1ldGVycwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFBhZ2VEYXRhIEZBUURhdGEpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkUGFyYW1OYW1lISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZBUURhdGEgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKICAgIG15ICVQYWdlICAgID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwoKICAgICMgZ2V0IHRoZSBjb25maWcgb2YgRkFRIGZpZWxkcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgbXkgJUZpZWxkczsKICAgIEZJRUxEOgogICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDYgKSB7CgogICAgICAgICMgZ2V0IGNvbmZpZyBvZiBGQVEgZmllbGQKICAgICAgICBteSAkQ29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoICdGQVE6Okl0ZW06OkZpZWxkJyAuICROdW1iZXIgKTsKCiAgICAgICAgIyBza2lwIG92ZXIgbm90IHNob3duIGZpZWxkcwogICAgICAgIG5leHQgRklFTEQgaWYgISRDb25maWctPntTaG93fTsKCiAgICAgICAgIyBzdG9yZSBvbmx5IHRoZSBjb25maWcgb2YgZmllbGRzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgJEZpZWxkc3sgIkZpZWxkIiAuICROdW1iZXIgfSA9ICRDb25maWc7CiAgICB9CgogICAgIyBzb3J0IHNob3duIGZpZWxkcyBieSBwcmlvcml0eQogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkICggc29ydCB7ICRGaWVsZHN7JGF9LT57UHJpb30gPD0+ICRGaWVsZHN7JGJ9LT57UHJpb30gfSBrZXlzICVGaWVsZHMgKSB7CgogICAgICAgICMgZ2V0IHRoZSBzdGF0ZSB0eXBlIGRhdGEgb2YgdGhpcyBmaWVsZAogICAgICAgIG15ICRTdGF0ZVR5cGVEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgICAgIE5hbWUgICA9PiAkRmllbGRzeyRGaWVsZH0tPntTaG93fSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGRvIG5vdCBzaG93IGZpZWxkcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgZ2l2ZW4gaW50ZXJmYWNlCiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJFBhcmFte0ludGVyZmFjZVN0YXRlc30tPnsgJFN0YXRlVHlwZURhdGEtPntTdGF0ZUlEfSB9OwoKICAgICAgICBteSAlVGFibGVQYXJhbTsKCiAgICAgICAgIyBjb252ZXJ0IEhUTUwgdG8gYXNjaWkKICAgICAgICBteSAkQXNjaWlGaWVsZCA9ICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+VG9Bc2NpaSggU3RyaW5nID0+ICRGQVFEYXRheyRGaWVsZH0gKTsKCiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WzBdWzBde0NvbnRlbnR9ID0gJEFzY2lpRmllbGQgfHwgJyc7CiAgICAgICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gNTExOwoKICAgICAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgWSAgICA9PiAtMTUsCiAgICAgICAgKTsKCiAgICAgICAgIyB0cmFuc2xhdGUgdGhlIGZpZWxkIG5hbWUgYW5kIHN0YXRlCiAgICAgICAgbXkgJEZpZWxkTmFtZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkRmllbGRzeyRGaWVsZH0tPnsnQ2FwdGlvbid9ICkKICAgICAgICAgICAgLiAnICgnCiAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRTdGF0ZVR5cGVEYXRhLT57TmFtZX0gKQogICAgICAgICAgICAuICcpJzsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgICAgIFRleHQgICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICAgICApOwoKICAgICAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgWSAgICA9PiAtNCwKICAgICAgICApOwoKICAgICAgICAjIHRhYmxlIHBhcmFtcwogICAgICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgPSAnQ3V0JzsKICAgICAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNEREREREQnOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgPSAzOwoKICAgICAgICAjIG91dHB1dCB0YWJsZQogICAgICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfSFRNTE1hc2sgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNob3cgTGFuZ3VhZ2UKICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyByYXRpbmcKICAgIGlmICggJFNlbGYtPntWb3Rpbmd9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1JhdGluZycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY0ZBUVByaW50JywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFSU1M7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHM7CnVzZSBYTUw6OlJTUzo6U2ltcGxlR2VuIHF3KCk7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IFVzZXJJRCB0byByb290IGJlY2F1c2UgaW4gcHVibGljIGludGVyZmFjZSB0aGVyZSBpcyBubyB1c2VyCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAxOwoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntSU1NPYmplY3R9ICAgICAgID0gWE1MOjpSU1M6OlNpbXBsZUdlbi0+bmV3KCAnaHR0cDovLycgLiAkRU5We0hUVFBfSE9TVH0gKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiRkFROjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgICRTZWxmLT57SW50ZXJmYWNlfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlR2V0KAogICAgICAgIE5hbWUgICA9PiAncHVibGljJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6UHVibGljOjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgUlNTIHR5cGUKICAgIG15ICRUeXBlID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnVHlwZScgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFR5cGUgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIFR5cGUgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIHR5cGUKICAgIGlmICggJFR5cGUgIX4gbXsgQ3JlYXRlZCB8IENoYW5nZWQgfCBUb3AxMCB9eG1zICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlR5cGUgbXVzdCBiZSBlaXRoZXIgTGFzdENyZWF0ZSBvciBMYXN0Q2hhbmdlIG9yIFRvcDEwISIKICAgICAgICApOwogICAgfQoKICAgIG15IEBJdGVtSURzOwogICAgbXkgJFRpdGxlOwoKICAgICMgZ2V0IHRoZSBUb3AxMCBGQVEgYXJ0aWNsZXMKICAgIGlmICggJFR5cGUgZXEgJ1RvcDEwJyApIHsKCiAgICAgICAgIyBpbnRlcmZhY2UgbmVlZHMgdG8gYmUgdGhlIGludGVyZmFjZSBuYW1lCiAgICAgICAgbXkgJFRvcDEwSXRlbUlEc1JlZiA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRVG9wMTBHZXQoCiAgICAgICAgICAgIEludGVyZmFjZSA9PiAkU2VsZi0+e0ludGVyZmFjZX0tPntOYW1lfSwKICAgICAgICAgICAgTGltaXQgICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkV4cGxvcmVyOjpUb3AxMDo6TGltaXQnKSB8fCAxMCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBASXRlbUlEcyA9IG1hcCB7ICRfLT57SXRlbUlEfSB9IEB7JFRvcDEwSXRlbUlEc1JlZn07CgogICAgICAgICMgYnVpbGQgdGhlIHRpdGxlCiAgICAgICAgJFRpdGxlID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0ZBUSBBcnRpY2xlcyAoVG9wIDEwKScpOwogICAgfQoKICAgICMgc2VhcmNoIHRoZSBGQVEgYXJ0aWNsZXMKICAgIGVsc2UgewoKICAgICAgICAjIGludGVyZmFjZSBuZWVkcyB0byBiZSBjb21wbGV0ZSBpbnRlcmZhY2UgaGFzaAogICAgICAgIEBJdGVtSURzID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFTZWFyY2goCiAgICAgICAgICAgIFN0YXRlcyAgICAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFskVHlwZV0sCiAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWydEb3duJ10sCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDIwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHRoZSB0aXRsZQogICAgICAgIGlmICggJFR5cGUgZXEgJ0NyZWF0ZWQnICkgewogICAgICAgICAgICAkVGl0bGUgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVHlwZSBlcSAnQ2hhbmdlZCcgKSB7CiAgICAgICAgICAgICRUaXRsZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJyk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2VuZXJhdGUgdGhlIHJzcyB0aXRsZQogICAgJFRpdGxlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1Byb2R1Y3ROYW1lJykgLiAnICcgLiAkVGl0bGU7CiAgICAkU2VsZi0+e1JTU09iamVjdH0tPnRpdGxlKCRUaXRsZSk7CgogICAgIyBnZXQgdGhlIEZBUSBkYXRhCiAgICBmb3IgbXkgJEl0ZW1JRCAoQEl0ZW1JRHMpIHsKCiAgICAgICAgbXkgJUl0ZW1EYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEl0ZW1JRCwKICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGEgcHJldmlldyBvZiB0aGUgZmlyc3QgdHdvIGZpZWxkcwogICAgICAgIG15ICRQcmV2aWV3ID0gJyc7CiAgICAgICAgZm9yIG15ICRDb3VudCAoIDEgLi4gMiApIHsKICAgICAgICAgICAgaWYgKCAkSXRlbURhdGF7IkZpZWxkJENvdW50In0gKSB7CiAgICAgICAgICAgICAgICAkUHJldmlldyAuPSAkSXRlbURhdGF7IkZpZWxkJENvdW50In07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY29udmVydCBwcmV2aWV3IHRvIGFzY2lpCiAgICAgICAgJFByZXZpZXcgPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPlRvQXNjaWkoIFN0cmluZyA9PiAkUHJldmlldyApOwoKICAgICAgICAjIHJlZHVjZSBzaXplIG9mIHByZXZpZXcKICAgICAgICAkUHJldmlldyA9fiBzeyBcQSAoIC57ODB9ICkgLiogXHogfXskMVxbXC5cLlxdfWd4bXM7CgogICAgICAgICMgYnVpbGQgdGhlIFJTUyBpdGVtCiAgICAgICAgJFNlbGYtPntSU1NPYmplY3R9LT5pdGVtKAogICAgICAgICAgICAiaHR0cDovLyRFTlZ7SFRUUF9IT1NUfSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jhc2VsaW5rfUFjdGlvbj1QdWJsaWNGQVFab29tJkl0ZW1JRD0kSXRlbUlEIiwKICAgICAgICAgICAgJEl0ZW1EYXRhe1RpdGxlfSwKICAgICAgICAgICAgJFByZXZpZXcsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNvbnZlcnQgdG8gc3RyaW5nCiAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntSU1NPYmplY3R9LT5hc19zdHJpbmcoKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkT3V0cHV0ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkNhbid0IGNyZWF0ZSBSU1MgZmlsZSEiICk7CiAgICB9CgogICAgIyByZXR1cm4gdGhlIFJTUyBmZWVkCiAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAogICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQveG1sJywKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTUlNRTo6QmFzZTY0IHF3KCk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwp1c2UgS2VybmVsOjpTeXN0ZW06OkNTVjsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIChxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRffSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIiApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBVc2VySUQgdG8gcm9vdCBiZWNhdXNlIGluIHB1YmxpYyBpbnRlcmZhY2UgdGhlcmUgaXMgbm8gdXNlcgogICAgJFNlbGYtPntVc2VySUR9ID0gMTsKCiAgICAjIGNyZWF0ZSBhZGRpdGlvbmFsIG9iamVjdHMKICAgICRTZWxmLT57RkFRT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntDU1ZPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkNTVi0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgY29uZmlnIGZvciBmcm9udGVuZAogICAgJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICAkU2VsZi0+e0ludGVyZmFjZX0gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ3B1YmxpYycsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OlB1YmxpYzo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIGdldCBjb25maWcgZGF0YQogICAgJFNlbGYtPntTdGFydEhpdH0gPSBpbnQoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0SGl0JyApIHx8IDEgKTsKICAgICRTZWxmLT57U2VhcmNoTGltaXR9ICAgICA9ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaExpbWl0fSAgICAgfHwgMjAwOwogICAgJFNlbGYtPntTZWFyY2hQYWdlU2hvd259ID0gJFNlbGYtPntDb25maWd9LT57U2VhcmNoUGFnZVNob3dufSB8fCA0MDsKICAgICRTZWxmLT57U29ydEJ5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdGQVFJRCc7CiAgICAkU2VsZi0+e09yZGVyQnl9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXInICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnT3JkZXI6OkRlZmF1bHQnfQogICAgICAgIHx8ICdEb3duJzsKCiAgICAjIGJ1aWxkIG91dHB1dCBmb3Igb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gYnkgRkFRIG51bWJlcgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ09wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcicgKSB7CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcicsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ09wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlci54bWwnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC94bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgICMgYnVpbGQgb3V0cHV0IGZvciBvcGVuIHNlYXJjaCBkZXNjcmlwdGlvbiBieSBmdWxsdGV4dAogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ09wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0JyApIHsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbFRleHQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dC54bWwnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC94bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgICMgcmVtZW1iZXIgZXhjbHVkZSBhdHRyaWJ1dGVzCiAgICBteSBARXhjbHVkZXMgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICdFeGNsdWRlJyApOwoKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGdldCBzaW5nbGUgcGFyYW1zCiAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoTnVtYmVyIFRpdGxlIEtleXdvcmQgRnVsbHRleHQgUmVzdWx0Rm9ybSkpIHsKCiAgICAgICAgIyBnZXQgc2VhcmNoIHN0cmluZyBwYXJhbXMgKGdldCBzdWJtaXR0ZWQgcGFyYW1zKQogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwoKICAgICAgICAjIHJlbW92ZSB3aGl0ZXNwYWNlIG9uIHRoZSBzdGFydCBhbmQgZW5kCiAgICAgICAgaWYgKCAkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9fiBzeyBcQSBccysgfXt9eG1zOwogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPX4gc3sgXHMrIFx6IH17fXhtczsKICAgICAgICB9CgogICAgICAgICMgZGIgcXVvdGUgdG8gcHJldmVudCBTUUwgaW5qZWN0aW9uCiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkR2V0UGFyYW17JFBhcmFtTmFtZX0gKTsKCiAgICAgICAgIyBzdG9yZSBub24gZW1wdHkgcGFyYW1ldGVycyBvbiBhIGxvY2FsIHByb2ZpbGUKICAgICAgICBpZiAoICRHZXRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJFNlbGYtPntQcm9maWxlfSAuPSAiJFBhcmFtTmFtZT0kR2V0UGFyYW17JFBhcmFtTmFtZX07IjsKICAgICAgICB9CgogICAgfQoKICAgICMgZ2V0IGFycmF5IHBhcmFtcwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KENhdGVnb3J5SURzIExhbmd1YWdlSURzICkpIHsKCiAgICAgICAgIyBnZXQgc2VhcmNoIGFycmF5IHBhcmFtcyAoZ2V0IHN1Ym1pdHRlZCBwYXJhbXMpCiAgICAgICAgbXkgQEFycmF5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICAgICAgaWYgKEBBcnJheSkgewogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSBcQEFycmF5OwoKICAgICAgICAgICAgIyBzdG9yZSBwYXJhbWV0ZXJzIG9uIGEgbG9jYWwgcHJvZmlsZQogICAgICAgICAgICBmb3IgbXkgJEVsZW1lbnQgKEBBcnJheSkgewogICAgICAgICAgICAgICAgJFNlbGYtPntQcm9maWxlfQogICAgICAgICAgICAgICAgICAgIC49ICRQYXJhbU5hbWUgLiAnPScgLiAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRFbGVtZW50LCAnSW50ZWdlcicgKSAuICc7JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIGl0ZW0gbmVlZCB0byBnZXQgZXhjbHVkZWQKICAgIGZvciBteSAkRXhjbHVkZSAoQEV4Y2x1ZGVzKSB7CiAgICAgICAgaWYgKCAkR2V0UGFyYW17JEV4Y2x1ZGV9ICkgewogICAgICAgICAgICBkZWxldGUgJEdldFBhcmFteyRFeGNsdWRlfTsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgcmVzdWx0IGZvcm0gZW52CiAgICBpZiAoICEkR2V0UGFyYW17UmVzdWx0Rm9ybX0gKSB7CiAgICAgICAgJEdldFBhcmFte1Jlc3VsdEZvcm19ID0gJyc7CiAgICB9CiAgICBpZiAoICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnUHJpbnQnICkgewogICAgICAgICRTZWxmLT57U2VhcmNoUGFnZVNob3dufSA9ICRTZWxmLT57U2VhcmNoTGltaXR9OwogICAgfQoKICAgICMgY2hlY2sgcmVxdWVzdAogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ09wZW5TZWFyY2hEZXNjcmlwdGlvbicgKSB7CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbicsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdPcGVuU2VhcmNoRGVzY3JpcHRpb24ueG1sJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQveG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgcmVzdWx0IHBhZ2UKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZWFyY2gnICYmICEkU2VsZi0+e0VyYXNlVGVtcGxhdGV9ICkgewoKICAgICAgICAjIHByZXBhcmUgZnVsbHRleHQgc2VhcmNoCiAgICAgICAgaWYgKCAkR2V0UGFyYW17RnVsbHRleHR9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17Q29udGVudFNlYXJjaH0gPSAnT1InOwogICAgICAgICAgICAkR2V0UGFyYW17V2hhdH0gICAgICAgICAgPSAkR2V0UGFyYW17RnVsbHRleHR9OwogICAgICAgIH0KCiAgICAgICAgIyBwZXJmb3JtIEZBUSBzZWFyY2gKICAgICAgICBteSBAVmlld2FibGVGQVFJRHMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUVNlYXJjaCgKICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICAgICA9PiBbICRTZWxmLT57U29ydEJ5fSBdLAogICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICAgID0+IFsgJFNlbGYtPntPcmRlckJ5fSBdLAogICAgICAgICAgICBMaW1pdCAgICAgICAgICAgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgU3RhdGVzICAgICAgICAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgICAgICBDb250ZW50U2VhcmNoUHJlZml4ID0+ICcqJywKICAgICAgICAgICAgQ29udGVudFNlYXJjaFN1ZmZpeCA9PiAnKicsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIENTViBvdXRwdXQKICAgICAgICBpZiAoICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnQ1NWJyApIHsKICAgICAgICAgICAgbXkgQENTVkhlYWQ7CiAgICAgICAgICAgIG15IEBDU1ZEYXRhOwoKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEgZGV0YWlscwogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZm9ybWF0IHRoZSBjaGFuZ2UgdGltZQogICAgICAgICAgICAgICAgbXkgJENoYW5nZWQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAnJFRpbWVMb25neyIkRGF0YXsiQ2hhbmdlZCJ9In0nLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwlRkFRRGF0YSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBnZXQgaW5mbyBmb3IgQ1NWIG91dHB1dAogICAgICAgICAgICAgICAgbXkgJUNTVkluZm8gPSAoCiAgICAgICAgICAgICAgICAgICAgRkFRTnVtYmVyID0+ICRGQVFEYXRhe051bWJlcn0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgID0+ICRGQVFEYXRhe1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeSAgPT4gJEZBUURhdGF7Q2F0ZWdvcnlOYW1lfSwKICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZSAgPT4gJEZBUURhdGF7TGFuZ3VhZ2V9LAogICAgICAgICAgICAgICAgICAgIENoYW5nZWQgICA9PiAkQ2hhbmdlZCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjc3YgcXVvdGUKICAgICAgICAgICAgICAgIGlmICggIUBDU1ZIZWFkICkgewogICAgICAgICAgICAgICAgICAgIEBDU1ZIZWFkID0gcXcoIEZBUU51bWJlciBUaXRsZSBDYXRlZ29yeSk7CgogICAgICAgICAgICAgICAgICAgICMgaW5zZXJ0IGxhbmd1YWdlIGhlYWRlcgogICAgICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgJ0xhbmd1YWdlJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICdDaGFuZ2VkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG15IEBEYXRhOwogICAgICAgICAgICAgICAgZm9yIG15ICRIZWFkZXIgKEBDU1ZIZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBARGF0YSwgJENTVkluZm97JEhlYWRlcn07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEBDU1ZEYXRhLCBcQERhdGE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3N2IHF1b3RlCiAgICAgICAgICAgICMgdHJhbnNsYXRlIG5vbiBleGlzdGluZyBoZWFkZXIgbWF5IHJlc3VsdCBpbiBhIGdhcmJhZ2UgZmlsZQogICAgICAgICAgICBpZiAoICFAQ1NWSGVhZCApIHsKICAgICAgICAgICAgICAgIEBDU1ZIZWFkID0gcXcoRkFRTnVtYmVyIFRpdGxlIENhdGVnb3J5KTsKCiAgICAgICAgICAgICAgICAjIGluc2VydCBsYW5ndWFnZSBoZWFkZXIKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCAnTGFuZ3VhZ2UnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICdDaGFuZ2VkJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB0cmFuc2xhdGUgaGVhZGVycwogICAgICAgICAgICBmb3IgbXkgJEhlYWRlciAoQENTVkhlYWQpIHsKCiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgRkFRTnVtYmVyIGhlYWRlciB3aXRoIHRoZSBjdXJyZW50IEZBUUhvb2sgZnJvbSBjb25maWcKICAgICAgICAgICAgICAgIGlmICggJEhlYWRlciBlcSAnRkFRTnVtYmVyJyApIHsKICAgICAgICAgICAgICAgICAgICAkSGVhZGVyID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RkFRSG9vaycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEhlYWRlciA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCRIZWFkZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFzc2FibGUgQ1NWIGRhdGEKICAgICAgICAgICAgbXkgJENTViA9ICRTZWxmLT57Q1NWT2JqZWN0fS0+QXJyYXkyQ1NWKAogICAgICAgICAgICAgICAgSGVhZCAgICAgID0+IFxAQ1NWSGVhZCwKICAgICAgICAgICAgICAgIERhdGEgICAgICA9PiBcQENTVkRhdGEsCiAgICAgICAgICAgICAgICBTZXBhcmF0b3IgPT4gJFNlbGYtPntVc2VyQ1NWU2VwYXJhdG9yfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmV0dXJuIGNzdiB0byBkb3dubG9hZAogICAgICAgICAgICBteSAkQ1NWRmlsZSA9ICdGQVFfc2VhcmNoJzsKICAgICAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAkQ1NWRmlsZSAuICJfIiAuICIkWS0kTS0kRCIgLiAiXyIgLiAiJGgtJG0uY3N2IiwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJ0ZXh0L2NzdjsgY2hhcnNldD0iIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJENTViwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gZXEgJ1ByaW50JyApIHsKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEgZGV0YWlscwogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYWRkIHRhYmxlIGJsb2NrCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGFkZCBsYW5ndWFnZSBkYXRhCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHslRkFRRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEhlYWRlciggV2lkdGggPT4gODAwICk7CiAgICAgICAgICAgIGlmICggc2NhbGFyIEBWaWV3YWJsZUZBUUlEcyA9PSAkU2VsZi0+e1NlYXJjaExpbWl0fSApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtXYXJuaW5nfSA9ICckVGV4dHsiUmVhY2hlZCBtYXguIGNvdW50IG9mICVzIHNlYXJjaCBoaXRzISIsICInCiAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e1NlYXJjaExpbWl0fSAuICcifSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGxhbmd1YWdlIGhlYWRlcgogICAgICAgICAgICBpZiAoICRTZWxmLT57TXVsdGlMYW5ndWFnZX0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckxhbmd1YWdlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnUHVibGljRkFRU2VhcmNoUmVzdWx0UHJpbnQnLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50Rm9vdGVyKCk7CgogICAgICAgICAgICAjIHJldHVybiBvdXRwdXQKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CgogICAgICAgIH0KCiAgICAgICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICAgICAjIGlmIHRoZXJlIGFyZSByZXN1bHRzIHRvIHNob3cKICAgICAgICBpZiAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBiYWNrIGxpbmsgZm9yIEZBUSBab29tIHNjcmVlbgogICAgICAgICAgICBteSAkWm9vbUJhY2tMaW5rID0gIkFjdGlvbj1QdWJsaWNGQVFTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaDsiCiAgICAgICAgICAgICAgICAuICRTZWxmLT57UHJvZmlsZX0KICAgICAgICAgICAgICAgIC4gIlNvcnRCeT0kU2VsZi0+e1NvcnRCeX07T3JkZXI9JFNlbGYtPntPcmRlckJ5fTtTdGFydEhpdD0kU2VsZi0+e1N0YXJ0SGl0fSI7CgogICAgICAgICAgICAjIGVuY29kZSBiYWNrIGxpbmsgdG8gQmFzZTY0IGZvciBlYXN5IEhUTUwgdHJhbnNwb3J0CiAgICAgICAgICAgICRab29tQmFja0xpbmsgPSBNSU1FOjpCYXNlNjQ6OmVuY29kZV9iYXNlNjQoJFpvb21CYWNrTGluayk7CgogICAgICAgICAgICBmb3IgbXkgJEZBUUlEIChAVmlld2FibGVGQVFJRHMpIHsKCiAgICAgICAgICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgc2VhcmNoIHJlc3VsdAogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRDb3VudGVyID49ICRTZWxmLT57U3RhcnRIaXR9CiAgICAgICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRTZWxmLT57U2VhcmNoUGFnZVNob3dufSArICRTZWxmLT57U3RhcnRIaXR9ICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBkYXRhIGRldGFpbHMKICAgICAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBibG9ja3MgdG8gdGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWm9vbUJhY2tMaW5rID0+ICRab29tQmFja0xpbmssCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgbGFuZ3VhZ2UgZGF0YQogICAgICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZExhbmd1YWdlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIHNob3cgYSBubyBkYXRhIGZvdW5kIG1zZwogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIGEgbG9va3VwIHRhYmxlIGZvciBhdHRyaWJ1dGUgc2V0dGluZ3MKICAgICAgICBteSAlQXR0cmlidXRlTWFwID0gKAogICAgICAgICAgICBOdW1iZXIgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkZBUUhvb2snKSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZSA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBUaXRsZSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1RpdGxlJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBLZXl3b3JkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnS2V5d29yZCcsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRnVsbHRleHQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdGdWxsdGV4dCcsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRHMgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdDYXRlZ29yeScsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTGFuZ3VhZ2VJRHMgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKCiAgICAgICAgKTsKCiAgICAgICAgIyBwcmludCBlYWNoIGF0dHJpYnV0ZSBpbiBzZWFyY2ggcmVzdWx0cyBhcmVhLgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVBdHRyaWJ1dGVNYXAgKSB7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIGRlZmluZWQgYnkgdGhlIHVzZXIKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17JEF0dHJpYnV0ZX0gKSB7CgogICAgICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlIG5hbWUgYW5kIHRyYW5zbGF0ZSBpdCBpZiBhcHBsaWVzCiAgICAgICAgICAgICAgICBteSAkQXR0cmlidXRlTmFtZSA9ICRBdHRyaWJ1dGVNYXB7JEF0dHJpYnV0ZX0tPntOYW1lfTsKICAgICAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZU1hcHskQXR0cmlidXRlfS0+e1RyYW5zbGF0YWJsZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZU5hbWUgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgkQXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEF0dHJpYnV0ZVZhbHVlOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIHZhbHVlcyBpcyBhbiBhcnJheSB0byBwYXJzZSBlYWNoIHZhbHVlCiAgICAgICAgICAgICAgICBpZiAoIHJlZiAkR2V0UGFyYW17JEF0dHJpYnV0ZX0gZXEgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBDYXRlZ29yeSBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGUgZXEgJ0NhdGVnb3J5SURzJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBsb25nIG5hbWUgZm9yIGFsbCBwdWJsaWMgY2F0ZWdvcmllcwogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ2F0ZWdvcnlMaXN0ID0gJFNlbGYtPntGQVFPYmplY3R9LT5HZXRQdWJsaWNDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBlYWNoIGNhdGVnb3J5IGlkIHRvIGNhdGVnb3J5IGxvbmcgbmFtZQogICAgICAgICAgICAgICAgICAgICAgICBteSBAQ2F0ZWdvcnlOYW1lczsKICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUllJRDoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDYXRlZG9yeUlEICggQHsgJEdldFBhcmFteyRBdHRyaWJ1dGV9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENBVEVHT1JZSUQgaWYgISRDYXRlZ29yeUxpc3QtPnskQ2F0ZWRvcnlJRH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBDYXRlZ29yeU5hbWVzLCAkQ2F0ZWdvcnlMaXN0LT57JENhdGVkb3J5SUR9OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNyZWF0ZSBhIHN0cmluZyB3aXRoIGFsbCBzZWxlY3RlZCBjYXRlZ29yeSBuYW1lcwogICAgICAgICAgICAgICAgICAgICAgICAkQXR0cmlidXRlVmFsdWUgPSBqb2luKCAiICsgIiwgQENhdGVnb3J5TmFtZXMgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgTGFuZ3VhZ2VJRHMKICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRBdHRyaWJ1dGUgZXEgJ0xhbmd1YWdlSURzJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBlYWNoIGxhbmd1YWdlIGlkIHRvIGxhbmd1YWdlIG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgbXkgQExhbmd1YWdlTmFtZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIExBTkdVQUdFSUQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIEB7ICRHZXRQYXJhbXskQXR0cmlidXRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJExhbmd1YWdlTmFtZSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2VJRCA9PiAkTGFuZ3VhZ2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IExBTkdVQUdFSUQgaWYgISRMYW5ndWFnZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBMYW5ndWFnZU5hbWVzLCAkTGFuZ3VhZ2VOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgY3JlYXRlIGEgc3RyaW5nIHdpdGggYWxsIHNlbGVjdGVkIGxhbmd1YWdlIG5hbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVWYWx1ZSA9IGpvaW4oICIgKyAiLCBATGFuZ3VhZ2VOYW1lcyApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBpcyBhbiBzY2FsYXIgYW5kIGNhbiBiZSBzZXQgZGlyZWN0bHkKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVWYWx1ZSA9ICRHZXRQYXJhbXskQXR0cmlidXRlfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VhcmNoVGVybXMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJEF0dHJpYnV0ZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQXR0cmlidXRlVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYnVpbGQgc2VhcmNoIG5hdmlnYXRpb24gYmFyCiAgICAgICAgbXkgJVBhZ2VOYXYgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlBhZ2VOYXZCYXIoCiAgICAgICAgICAgIExpbWl0ICAgICA9PiAkU2VsZi0+e1NlYXJjaExpbWl0fSwKICAgICAgICAgICAgU3RhcnRIaXQgID0+ICRTZWxmLT57U3RhcnRIaXR9LAogICAgICAgICAgICBQYWdlU2hvd24gPT4gJFNlbGYtPntTZWFyY2hQYWdlU2hvd259LAogICAgICAgICAgICBBbGxIaXRzICAgPT4gJENvdW50ZXIsCiAgICAgICAgICAgIEFjdGlvbiAgICA9PiAiQWN0aW9uPVB1YmxpY0ZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoIiwKICAgICAgICAgICAgTGluayA9PgogICAgICAgICAgICAgICAgIiRTZWxmLT57UHJvZmlsZX1Tb3J0Qnk9JFNlbGYtPntTb3J0Qnl9O09yZGVyPSRTZWxmLT57T3JkZXJCeX07IiwKICAgICAgICAgICAgSURQcmVmaXggPT4gIlB1YmxpY0ZBUVNlYXJjaCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGZvb3RlciBmaWx0ZXIgLSBzaG93IG9ubHkgaWYgbW9yZSB0aGUgb25lIHBhZ2UgaXMgYXZhaWxhYmxlCiAgICAgICAgaWYgKCBkZWZpbmVkICRQYWdlTmF2e1RvdGFsSGl0c30gJiYgKCAkUGFnZU5hdntUb3RhbEhpdHN9ID4gJFNlbGYtPntTZWFyY2hQYWdlU2hvd259ICkgKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdQYWdpbmF0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlUGFnZU5hdiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHN0YXJ0IGh0bWwgcGFnZQogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVySGVhZGVyKCk7CgogICAgICAgICNTZXQgdGhlIFNvcnRCeSBDbGFzcwogICAgICAgIG15ICRTb3J0Q2xhc3M7CgogICAgICAgICMgdGhpcyBzZXRzIHRoZSBvcHBvc2l0ZSB0byB0aGUgT3JkZXJCeSBwYXJhbWV0ZXIKICAgICAgICBpZiAoICRTZWxmLT57T3JkZXJCeX0gZXEgJ0Rvd24nICkgewogICAgICAgICAgICAkU29ydENsYXNzID0gJ1NvcnRBc2NlbmRpbmcnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRTZWxmLT57T3JkZXJCeX0gZXEgJ1VwJyApIHsKICAgICAgICAgICAgJFNvcnRDbGFzcyA9ICdTb3J0RGVzY2VuZGluZyc7CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgU29ydEJ5IENsYXNzIHRvIHRoZSBjb3JyZWN0IGZpZWxkCiAgICAgICAgbXkgJUNTU1NvcnQ7CiAgICAgICAgbXkgJFNvcnRCeSA9ICRTZWxmLT57U29ydEJ5fSAuICdTb3J0JzsKICAgICAgICAkQ1NTU29ydHskU29ydEJ5fSA9ICRTb3J0Q2xhc3M7CgogICAgICAgIG15ICVOZXdPcmRlciA9ICgKICAgICAgICAgICAgRG93biA9PiAnVXAnLAogICAgICAgICAgICBVcCAgID0+ICdEb3duJywKICAgICAgICApOwoKICAgICAgICAjIHNob3cgbGFuZ3VhZ2UgaGVhZGVyCiAgICAgICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICVDU1NTb3J0LAogICAgICAgICAgICAgICAgICAgIE9yZGVyID0+ICROZXdPcmRlcnsgJFNlbGYtPntPcmRlckJ5fSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJVBhZ2VOYXYsCiAgICAgICAgICAgICAgICAlQ1NTU29ydCwKICAgICAgICAgICAgICAgIE9yZGVyICAgPT4gJE5ld09yZGVyeyAkU2VsZi0+e09yZGVyQnl9IH0sCiAgICAgICAgICAgICAgICBQcm9maWxlID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIGVtcHR5IHNlYXJjaCBzaXRlCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZW5lcmF0ZSBzZWFyY2ggbWFzawogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVySGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+TWFza0Zvcm0oCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgUHJvZmlsZSA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICBBcmVhICAgID0+ICdQdWJsaWMnLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBNYXNrRm9ybSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2V0IG91dHB1dCBmb3JtYXRzIGxpc3QKICAgIG15ICVSZXN1bHRGb3JtID0gKAogICAgICAgIE5vcm1hbCA9PiAnTm9ybWFsJywKICAgICAgICBQcmludCAgPT4gJ1ByaW50JywKICAgICAgICBDU1YgICAgPT4gJ0NTVicsCiAgICApOwoKICAgICMgYnVpbGQgb3V0cHV0IGZvcm1hdHMgbGlzdAogICAgJFBhcmFte1Jlc3VsdEZvcm1TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiB7JVJlc3VsdEZvcm19LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1Jlc3VsdEZvcm0nLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1Jlc3VsdEZvcm19IHx8ICdOb3JtYWwnLAogICAgKTsKCiAgICAjIGdldCBsYW5ndWFnZXMgbGlzdAogICAgbXkgJUxhbmd1YWdlcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+TGFuZ3VhZ2VMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgYnVpbGQgbGFuZ3VhZ2VzIG91dHB1dCBsaXN0CiAgICAkUGFyYW17TGFuZ3VhZ2VzU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4geyVMYW5ndWFnZXN9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ0xhbmd1YWdlSURzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0xhbmd1YWdlSURzfSwKICAgICk7CgogICAgIyBnZXQgY2F0ZWdvcmllcyBsaXN0CiAgICBteSAkQ2F0ZWdvcmllcyA9ICRTZWxmLT57RkFRT2JqZWN0fS0+R2V0UHVibGljQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgICAgICBDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgIFR5cGUgICAgICAgICA9PiAncncnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgYnVpbGQgY2F0ZWdvcmllcyBvdXRwdXQgbGlzdAogICAgJFBhcmFte0NhdGVnb3JpZXNTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkQ2F0ZWdvcmllcywKICAgICAgICBOYW1lICAgICAgID0+ICdDYXRlZ29yeUlEcycsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtDYXRlZ29yeUlEc30sCiAgICApOwoKICAgICMgaHRtbCBzZWFyY2ggbWFzayBvdXRwdXQKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2VhcmNoJywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIHNob3cgbGFuZ3VhZ2VzIHNlbGVjdAogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgaHRtbCBzZWFyY2ggbWFzayBvdXRwdXQKICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY0ZBUVNlYXJjaCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1JTUU6OkJhc2U2NCBxdygpOwp1c2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYWxpZDsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgVXNlcklEIHRvIHJvb3QgYmVjYXVzZSBpbiBwdWJsaWMgaW50ZXJmYWNlIHRoZXJlIGlzIG5vIHVzZXIKICAgICRTZWxmLT57VXNlcklEfSA9IDE7CgogICAgIyBjcmVhdGUgbmVlZGVkIG9iamVjdHMKICAgICRTZWxmLT57RkFRT2JqZWN0fSAgID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1ZhbGlkT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpWYWxpZC0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICAkU2VsZi0+e0ludGVyZmFjZX0gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ3B1YmxpYycsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OlB1YmxpYzo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGRlZmF1bHQgb3B0aW9ucwogICAgJFNlbGYtPntNdWx0aUxhbmd1YWdlfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6Ok11bHRpTGFuZ3VhZ2UnKTsKICAgICRTZWxmLT57Vm90aW5nfSAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpWb3RpbmcnKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKICAgICRHZXRQYXJhbXtJdGVtSUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnSXRlbUlEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkR2V0UGFyYW17SXRlbUlEfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gJ05lZWQgSXRlbUlEIScgKTsKICAgIH0KCiAgICAjIGdldCBiYWNrIGxpbmsKICAgICRHZXRQYXJhbXtab29tQmFja0xpbmt9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnWm9vbUJhY2tMaW5rJyApIHx8ICcnOwogICAgaWYgKCAkR2V0UGFyYW17Wm9vbUJhY2tMaW5rfSApIHsKICAgICAgICAkR2V0UGFyYW17Wm9vbUJhY2tMaW5rfSA9IE1JTUU6OkJhc2U2NDo6ZGVjb2RlX2Jhc2U2NCggJEdldFBhcmFte1pvb21CYWNrTGlua30gKTsKICAgIH0KCiAgICAjIGdldCBGQVEgaXRlbSBkYXRhCiAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICggISVGQVFEYXRhICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRmF0YWxFcnJvcigpOwogICAgfQoKICAgICMgZ2V0IHRoZSB2YWxpZCBpZHMKICAgIG15IEBWYWxpZElEcyA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZElEc0dldCgpOwogICAgbXkgJVZhbGlkSURMb29rdXAgPSBtYXAgeyAkXyA9PiAxIH0gQFZhbGlkSURzOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKAogICAgICAgICEkRkFRRGF0YXtBcHByb3ZlZH0KICAgICAgICB8fCAhJFZhbGlkSURMb29rdXB7ICRGQVFEYXRhe1ZhbGlkSUR9IH0KICAgICAgICB8fCAhJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LT57ICRGQVFEYXRhe1N0YXRlVHlwZUlEfSB9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyTm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgSFRNTFZpZXcgU3ViYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0hUTUxWaWV3JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJEZpZWxkID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiRmllbGQiICk7CgogICAgICAgICMgbmVlZGVkIHBhcmFtcwogICAgICAgIGZvciBteSAkTmVlZGVkIChxdyggSXRlbUlEIEZpZWxkICkpIHsKICAgICAgICAgICAgaWYgKCAhJE5lZWRlZCApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkZWQgUGFyYW06ICROZWVkZWQhIiwKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIEZpZWxkIGNvbnRlbnQKICAgICAgICBteSAkRmllbGRDb250ZW50ID0gJFNlbGYtPntGQVFPYmplY3R9LT5JdGVtRmllbGRHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgRmllbGQgID0+ICRGaWVsZCwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHJld3JpdGUgaGFuZGxlIGFuZCBhY3Rpb24KICAgICAgICAkRmllbGRDb250ZW50CiAgICAgICAgICAgID1+IHN7IGluZGV4Wy5dcGwgWz9dIEFjdGlvbj1BZ2VudEZBUVpvb20gfXtwdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUVpvb219Z3htczsKCiAgICAgICAgIyB0YWtlIGNhcmUgb2Ygb2xkIHN0eWxlIGJlZm9yZSBGQVEgMi4wLngKICAgICAgICAkRmllbGRDb250ZW50ID1+IHN7CiAgICAgICAgICAgIGluZGV4Wy5dcGwgWz9dIEFjdGlvbj1BZ2VudEZBUSBbJl0oYW1wOyk/IFN1YmFjdGlvbj1Eb3dubG9hZCBbJl0oYW1wOyk/CiAgICAgICAgfXtwdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDt9Z3htczsKCiAgICAgICAgIyBhZGQgbmVlZGVkIEhUTUwgaGVhZGVycwogICAgICAgICRGaWVsZENvbnRlbnQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntIVE1MVXRpbHNPYmplY3R9LT5Eb2N1bWVudENvbXBsZXRlKAogICAgICAgICAgICBTdHJpbmcgID0+ICRGaWVsZENvbnRlbnQsCiAgICAgICAgICAgIENoYXJzZXQgPT4gJ3V0Zi04JywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGJhc2UgdXJsIGZvciBpbmxpbmUgaW1hZ2VzCgogICAgICAgIG15ICRTZXNzaW9uSUQgPSAnJzsKICAgICAgICBpZiAoICRTZWxmLT57U2Vzc2lvbklEfSAmJiAhJFNlbGYtPntTZXNzaW9uSURDb29raWV9ICkgewogICAgICAgICAgICAkU2Vzc2lvbklEID0gJzsnIC4gJFNlbGYtPntTZXNzaW9uTmFtZX0gLiAnPScgLiAkU2VsZi0+e1Nlc3Npb25JRH07CiAgICAgICAgICAgICRGaWVsZENvbnRlbnQgPX4gc3sKICAgICAgICAgICAgICAgIChBY3Rpb249UHVibGljRkFRWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O0l0ZW1JRD1cZCs7RmlsZUlEPVxkKykKICAgICAgICAgICAgfXskMSRTZXNzaW9uSUR9Z21zeDsKICAgICAgICB9CgogICAgICAgICMgcmV0dXJuIGNvbXBsZXRlIEhUTUwgYXMgYW4gYXR0YWNobWVudAogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIERvd25sb2FkQXR0YWNobWVudCBTdWJhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRG93bmxvYWRBdHRhY2htZW50JyApIHsKCiAgICAgICAgIyBtYW5hZ2UgcGFyYW1ldGVycwogICAgICAgICRHZXRQYXJhbXtGaWxlSUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsZUlEJyApOwogICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFte0ZpbGVJRH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRmF0YWxFcnJvciggTWVzc2FnZSA9PiAnTmVlZCBGaWxlSUQnICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhdHRhY2htZW50cwogICAgICAgIG15ICVGaWxlID0gJFNlbGYtPntGQVFPYmplY3R9LT5BdHRhY2htZW50R2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIEZpbGVJRCA9PiAkR2V0UGFyYW17RmlsZUlEfSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgIGlmICglRmlsZSkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KCVGaWxlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHN1Y2ggYXR0YWNobWVudCAoJEdldFBhcmFte0ZpbGVJRH0pISBNYXkgYmUgYW4gYXR0YWNrISEhIiwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRmF0YWxFcnJvcigpOwogICAgICAgIH0KICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVySGVhZGVyKAogICAgICAgIFZhbHVlID0+ICRGQVFEYXRhe1RpdGxlfSwKICAgICk7CgogICAgIyBwcmVwYXJlIGZpZWxkcyBkYXRhCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKHF3KEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNCBGaWVsZDUgRmllbGQ2KSkgewogICAgICAgIG5leHQgRklFTEQgaWYgISRGQVFEYXRheyRGaWVsZH07CgogICAgICAgICMgcmV3cml0ZSBsaW5rcyB0byBlbWJlZGRlZCBpbWFnZXMgZm9yIHB1YmxpYyBpbnRlcmZhY2UKICAgICAgICBpZiAoICRTZWxmLT57SW50ZXJmYWNlfS0+e05hbWV9IGVxICdwdWJsaWMnICkgewoKICAgICAgICAgICAgIyByZXdyaXRlIGhhbmRsZSBhbmQgYWN0aW9uCiAgICAgICAgICAgICRGQVFEYXRheyRGaWVsZH0KICAgICAgICAgICAgICAgID1+IHN7IGluZGV4Wy5dcGwgWz9dIEFjdGlvbj1BZ2VudEZBUVpvb20gfXtwdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUVpvb219Z3htczsKCiAgICAgICAgICAgICMgdGFrZSBjYXJlIG9mIG9sZCBzdHlsZSBiZWZvcmUgRkFRIDIuMC54CiAgICAgICAgICAgICRGQVFEYXRheyRGaWVsZH0gPX4gc3sKICAgICAgICAgICAgICAgIGluZGV4Wy5dcGwgWz9dIEFjdGlvbj1BZ2VudEZBUSBbJl0oYW1wOyk/IFN1YmFjdGlvbj1Eb3dubG9hZCBbJl0oYW1wOyk/CiAgICAgICAgICAgIH17cHVibGljLnBsP0FjdGlvbj1QdWJsaWNGQVFab29tO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7fWd4bXM7CiAgICAgICAgfQoKICAgICAgICAjIG5vIHF1b3RpbmcgaWYgaHRtbCB2aWV3IGlzIGVuYWJsZWQKICAgICAgICBuZXh0IEZJRUxEIGlmICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6Okl0ZW06OkhUTUwnKTsKCiAgICAgICAgIyBodG1sIHF1b3RpbmcKICAgICAgICAkRkFRRGF0YXskRmllbGR9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBOZXdMaW5lICAgICAgICA9PiAwLAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkRkFRRGF0YXskRmllbGR9LAogICAgICAgICAgICBWTWF4ICAgICAgICAgICA9PiA1MDAwLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgdm90aW5nIHJlc3VsdHMKICAgICRQYXJhbXtWb3RpbmdSZXN1bHRDb2xvcn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkdldEZBUUl0ZW1Wb3RpbmdSYXRlQ29sb3IoCiAgICAgICAgUmF0ZSA9PiAkRkFRRGF0YXtWb3RlUmVzdWx0fSwKICAgICk7CgogICAgaWYgKCAhJFBhcmFte1ZvdGluZ1Jlc3VsdENvbG9yfSB8fCAkRkFRRGF0YXtWb3Rlc30gZXEgJzAnICkgewogICAgICAgICRQYXJhbXtWb3RpbmdSZXN1bHRDb2xvcn0gPSAnR3JheSc7CiAgICB9CgogICAgIyBzaG93IGJhY2sgbGluawogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdCYWNrJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyBsYW5ndWFnZQogICAgaWYgKCAkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IHZvdGVzCiAgICBpZiAoICRTZWxmLT57Vm90aW5nfSApIHsKCiAgICAgICAgIyBhbHdheXMgZGlwbGF5cyBWb3RlcyByZXN1bHQgZXZlbiBpZiBpdHMgMAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1ZpZXdWb3RlcycsCiAgICAgICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBGQVEgcGF0aAogICAgbXkgJFNob3dGQVFQYXRoID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GQVFQYXRoU2hvdygKICAgICAgICBGQVFPYmplY3QgID0+ICRTZWxmLT57RkFRT2JqZWN0fSwKICAgICAgICBDYXRlZ29yeUlEID0+ICRGQVFEYXRhe0NhdGVnb3J5SUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICgkU2hvd0ZBUVBhdGgpIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGQVFQYXRoSXRlbUVsZW1lbnQnLAogICAgICAgICAgICBEYXRhID0+IHslRkFRRGF0YX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cga2V5d29yZHMgYXMgc2VhcmNoIGxpbmtzCiAgICBpZiAoICRGQVFEYXRhe0tleXdvcmRzfSApIHsKCiAgICAgICAgIyByZXBsYWNlIGNvbW1hcyBhbmQgc2VtaWNvbG9ucwogICAgICAgICRGQVFEYXRhe0tleXdvcmRzfSA9fiBzLywvIC9nOwogICAgICAgICRGQVFEYXRhe0tleXdvcmRzfSA9fiBzLzsvIC9nOwoKICAgICAgICBteSBAS2V5d29yZHMgPSBzcGxpdCAvXHMrLywgJEZBUURhdGF7S2V5d29yZHN9OwogICAgICAgIGZvciBteSAkS2V5d29yZCAoQEtleXdvcmRzKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdLZXl3b3JkcycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBLZXl3b3JkID0+ICRLZXl3b3JkLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdXRwdXQgcmF0aW5nIHN0YXJzCiAgICBpZiAoICRTZWxmLT57Vm90aW5nfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZBUVJhdGluZ1N0YXJzU2hvdygKICAgICAgICAgICAgVm90ZVJlc3VsdCA9PiAkRkFRRGF0YXtWb3RlUmVzdWx0fSwKICAgICAgICAgICAgVm90ZXMgICAgICA9PiAkRkFRRGF0YXtWb3Rlc30sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCBhdHRhY2htZW50cyBpZiBhbnkKICAgIG15IEBBdHRhY2htZW50SW5kZXggPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkF0dGFjaG1lbnRJbmRleCgKICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgIFNob3dJbmxpbmUgPT4gMCwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBvdXRwdXQgYXR0YWNobWVudHMKICAgIGlmIChAQXR0YWNobWVudEluZGV4KSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudEhlYWRlcicsCiAgICAgICAgKTsKICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50SW5kZXgpIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgRkFRIENvbnRlbnQKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RkFRQ29udGVudFNob3coCiAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRTZWxmLT57RkFRT2JqZWN0fSwKICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgIEZBUURhdGEgICAgICAgICA9PiB7JUZBUURhdGF9LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgbG9nIGFjY2VzcyB0byB0aGlzIEZBUSBpdGVtCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUxvZ0FkZCgKICAgICAgICBJdGVtSUQgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnSXRlbUlEJyApLAogICAgICAgIEludGVyZmFjZSA9PiAkU2VsZi0+e0ludGVyZmFjZX0tPntOYW1lfSwKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY0ZBUVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkN1c3RvbWVySGVhZGVyTWV0YUZBUVNlYXJjaDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIGZvciAocXcoQ29uZmlnT2JqZWN0IExvZ09iamVjdCBMYXlvdXRPYmplY3QgVGltZU9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRffSA9ICRQYXJhbXskX30gfHwgZGllICJHb3Qgbm8gJF8hIjsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2Vzc2lvbiA9ICcnOwogICAgaWYgKCAhJFNlbGYtPntMYXlvdXRPYmplY3R9LT57U2Vzc2lvbklEQ29va2llfSApIHsKICAgICAgICAkU2Vzc2lvbiA9ICc7JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1Nlc3Npb25OYW1lfSAuICc9JwogICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1Nlc3Npb25JRH07CiAgICB9CgogICAgIyBidWlsZCBvcGVuIHNlYXJjaCBkZXNjcmlwdGlvbiBmb3IgRkFRIG51bWJlcgogICAgbXkgJFRpdGxlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1Byb2R1Y3ROYW1lJyk7CgogICAgJFRpdGxlIC49ICcgLSBDdXN0b21lciAoJyAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkZBUUhvb2snKSAuICcpJzsKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWV0YUxpbmsnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBSZWwgICA9PiAnc2VhcmNoJywKICAgICAgICAgICAgVHlwZSAgPT4gJ2FwcGxpY2F0aW9uL29wZW5zZWFyY2hkZXNjcmlwdGlvbit4bWwnLAogICAgICAgICAgICBUaXRsZSA9PiAkVGl0bGUsCiAgICAgICAgICAgIEhyZWYgID0+ICckRW52eyJCYXNlbGluayJ9QWN0aW9uPScgLiAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0KICAgICAgICAgICAgICAgIC4gJztTdWJhY3Rpb249T3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyJyAuICRTZXNzaW9uLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYnVpbGQgb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gZm9yIEZBUSBmdWxsdGV4dAogICAgbXkgJEZ1bGx0ZXh0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0ZBUUZ1bGx0ZXh0Jyk7CiAgICAkVGl0bGUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJvZHVjdE5hbWUnKTsKICAgICRUaXRsZSAuPSAnIC0gQ3VzdG9tZXIgKCcgLiAkRnVsbHRleHQgLiAnKSc7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01ldGFMaW5rJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgUmVsICAgPT4gJ3NlYXJjaCcsCiAgICAgICAgICAgIFR5cGUgID0+ICdhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sJywKICAgICAgICAgICAgVGl0bGUgPT4gJFRpdGxlLAogICAgICAgICAgICBIcmVmICA9PiAnJEVudnsiQmFzZWxpbmsifUFjdGlvbj0nIC4gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259CiAgICAgICAgICAgICAgICAuICc7U3ViYWN0aW9uPU9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0JyAuICRTZXNzaW9uLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZEZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZyBOYW1lIENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFBhcmFtT2JqZWN0IFVzZXJJRCkKICAgICAgICApCiAgICB7CiAgICAgICAgZGllICJHb3Qgbm8gJE9iamVjdCEiIGlmICggISRTZWxmLT57JE9iamVjdH0gKTsKICAgIH0KCiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgJFNlbGYtPntJbnRlcmZhY2V9ID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgTmFtZSAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkFnZW50OjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUHJlZmVyZW5jZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm47Cn0KCnN1YiBDb25maWcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gKAogICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAogICAgKTsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RkFRU2hvd0xhdGVzdE5ld3NCb3goCiAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRTZWxmLT57RkFRT2JqZWN0fSwKICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57VHlwZX0sCiAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdBZ2VudCcsCiAgICAgICAgQ2F0ZWdvcnlJRCAgICAgID0+IDAsCiAgICAgICAgSW50ZXJmYWNlICAgICAgID0+ICRTZWxmLT57SW50ZXJmYWNlfSwKICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgbXkgJENvbnRlbnQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RGFzaGJvYXJkRkFRT3ZlcnZpZXcnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIENhdGVnb3J5SUQgICA9PiAwLAogICAgICAgICAgICBTaWRlYmFyQ2xhc3MgPT4gJ01lZGl1bScsCiAgICAgICAgfSwKICAgICk7CiAgICByZXR1cm4gJENvbnRlbnQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUUpvdXJuYWxPdmVydmlld1NtYWxsOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFVzZXJJRCBVc2VyT2JqZWN0IE1haW5PYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdXRwdXQ7CiAgICBteSBAU2hvd0NvbHVtbnM7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhQYWdlU2hvd24gU3RhcnRIaXQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBuZWVkIEpvdXJuYWwKICAgIGlmICggISRQYXJhbXtKb3VybmFsfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgdGhlIEpvdXJuYWwhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHN0b3JlIHRoZSBqb3VybmFsIGxvY2FsbHkKICAgIG15IEBKb3VybmFsRW50cmllczsKICAgIGlmICggJFBhcmFte0pvdXJuYWx9ICYmIHJlZiAkUGFyYW17Sm91cm5hbH0gZXEgJ0FSUkFZJyApIHsKICAgICAgICBASm91cm5hbEVudHJpZXMgPSBAeyAkUGFyYW17Sm91cm5hbH0gfTsKICAgIH0KCiAgICAjIHNob3cgSm91cmFsIEVudHJpZXMgYXMgcm93cwogICAgaWYgKEBKb3VybmFsRW50cmllcykgewoKICAgICAgICAjIGNoZWNrIFNob3dDb2x1bW5zIHBhcmFtZXRlcgogICAgICAgIGlmICggJFBhcmFte1Nob3dDb2x1bW5zfSAmJiByZWYgJFBhcmFte1Nob3dDb2x1bW5zfSBlcSAnQVJSQVknICkgewogICAgICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkUGFyYW17U2hvd0NvbHVtbnN9IH07CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGNvbHVtbiBoZWFkZXIgYmxvY2tzCiAgICAgICAgaWYgKEBTaG93Q29sdW1ucykgewoKICAgICAgICAgICAgIyBjYWxsIG1haW4gYmxvY2sKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUmVjb3JkRm9ybScgKTsKCiAgICAgICAgICAgIGZvciBteSAkQ29sdW1uIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICAgICAjIGNhbGwgaGVhZGVyIHNwZWNpZmljIGJsb2NrCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uIC4gJ0hlYWRlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICAgICBKb3VybmFsRW50cnk6CiAgICAgICAgZm9yIG15ICRKb3VybmFsRW50cnkgKEBKb3VybmFsRW50cmllcykgewogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkQ291bnRlciA+PSAkUGFyYW17U3RhcnRIaXR9CiAgICAgICAgICAgICAgICAmJiAkQ291bnRlciA8ICggJFBhcmFte1BhZ2VTaG93bn0gKyAkUGFyYW17U3RhcnRIaXR9ICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBkYXRhIGZvciBjb3JydXB0aW9uIGNoZWNrCiAgICAgICAgICAgICAgICBteSAlRkFRID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSm91cm5hbEVudHJ5LT57SXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISVGQVE7CgogICAgICAgICAgICAgICAgIyBidWlsZCByZWNvcmQgYmxvY2sKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAleyRKb3VybmFsRW50cnl9LAogICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyID0+ICRDb3VudGVyLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICBDT0xVTU46CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXskSm91cm5hbEVudHJ5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgbGlua3MgaWYgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rU3RhcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICV7JEpvdXJuYWxFbnRyeX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnTGlua0VuZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXskSm91cm5hbEVudHJ5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIHNldCBhbiBObyBGQVEgSm91bmFsIG1lc3NhZ2UKICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ05vRkFRRm91bmQnICk7CiAgICB9CgogICAgIyB1c2UgdGVtcGxhdGUKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICRTZWxmLT57Vmlld1R5cGV9LAogICAgICAgICAgICBDb2x1bW5Db3VudCA9PiBzY2FsYXIgQFNob3dDb2x1bW5zLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUU1lbnVHZW5lcmljOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAoCiAgICAgICAgcXcoQ29uZmlnT2JqZWN0IEVuY29kZU9iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IEZBUU9iamVjdCBVc2VySUQpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17RkFRSXRlbX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEZBUUl0ZW0hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdyYW50IGFjY2VzcyBieSBkZWZhdWx0CiAgICBteSAkQWNjZXNzID0gMTsKCiAgICAjIGdldCBncm91cHMKICAgIG15ICRBY3Rpb24gPSAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn07CiAgICBpZiAoICRBY3Rpb24gZXEgJ0FnZW50TGlua09iamVjdCcgKSB7CgogICAgICAgICMgVGhlIExpbmstbGluayBpcyBhIHNwZWNpYWwgY2FzZSwgYXMgaXQgaXMgbm90IHNwZWNpZmljIHRvIEZBUS4KICAgICAgICAjIEFzIGEgd29ya2Fyb3VuZCB3ZSBoYXJkY29kZSB0aGF0IEFnZW50TGlua09iamVjdCBpcyB0cmVhdGVkIGxpa2UgQWdlbnRGQVFFZGl0CiAgICAgICAgJEFjdGlvbiA9ICdBZ2VudEZBUUVkaXQnOwogICAgfQogICAgbXkgJEdyb3Vwc1JvID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259LT57R3JvdXBSb30gfHwgW107CiAgICBteSAkR3JvdXBzUncgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn0tPntHcm91cH0gICB8fCBbXTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgIGlmICggJEFjdGlvbiAmJiAoIEB7JEdyb3Vwc1JvfSB8fCBAeyRHcm91cHNSd30gKSApIHsKCiAgICAgICAgIyBkZW55IGFjY2VzcyBieSBkZWZhdWx0LCB3aGVuIHRoZXJlIGFyZSBncm91cHMgdG8gY2hlY2sKICAgICAgICAkQWNjZXNzID0gMDsKCiAgICAgICAgIyBjaGVjayByZWFkIG9ubHkgZ3JvdXBzCiAgICAgICAgUk9HUk9VUDoKICAgICAgICBmb3IgbXkgJFJvR3JvdXAgKCBAeyRHcm91cHNSb30gKSB7CgogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgISRTZWxmLT57TGF5b3V0T2JqZWN0fS0+eyJVc2VySXNHcm91cFJvWyRSb0dyb3VwXSJ9OwogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwUm9bJFJvR3JvdXBdIn0gbmUgJ1llcyc7CgogICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgIGxhc3QgUk9HUk9VUDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgcmVhZCB3cml0ZSBncm91cHMKICAgICAgICBSV0dST1VQOgogICAgICAgIGZvciBteSAkUndHcm91cCAoIEB7JEdyb3Vwc1J3fSApIHsKCiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAhJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9OwogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01lbnVJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17RkFRSXRlbX0gfSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGEgZGlhbG9nIGhhcyB0byBiZSBzaG93bgogICAgaWYgKCAkUGFyYW17Q29uZmlnfS0+e0RpYWxvZ1RpdGxlfSApIHsKCiAgICAgICAgIyBvdXRwdXQgY29uZmlybWF0aW9uIGRpYWxvZwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dDb25maXJtYXRpb25EaWFsb2cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICV7ICRQYXJhbXtGQVFJdGVtfSB9LAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICRQYXJhbXtDb3VudGVyfSsrOwoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn07Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUU92ZXJ2aWV3U21hbGw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAoCiAgICAgICAgcXcoQ29uZmlnT2JqZWN0IExvZ09iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgVXNlcklEIFVzZXJPYmplY3QgTWFpbk9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgJFNlbGYtPntNdWx0aUxhbmd1YWdlfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6Ok11bHRpTGFuZ3VhZ2UnKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkT3V0cHV0OwogICAgbXkgQFNob3dDb2x1bW5zOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZVNob3duIFN0YXJ0SGl0KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbmVlZCBGQVFJRHMKICAgIGlmICggISRQYXJhbXtGQVFJRHN9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCB0aGUgRkFRSURzIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzdG9yZSB0aGUgRkFRSURzCiAgICBteSBASURzOwogICAgaWYgKCAkUGFyYW17RkFRSURzfSAmJiByZWYgJFBhcmFte0ZBUUlEc30gZXEgJ0FSUkFZJyApIHsKICAgICAgICBASURzID0gQHsgJFBhcmFte0ZBUUlEc30gfTsKICAgIH0KCiAgICBpZiAoQElEcykgewoKICAgICAgICAjIGNoZWNrIFNob3dDb2x1bW5zIHBhcmFtZXRlcgogICAgICAgIGlmICggJFBhcmFte1Nob3dDb2x1bW5zfSAmJiByZWYgJFBhcmFte1Nob3dDb2x1bW5zfSBlcSAnQVJSQVknICkgewogICAgICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkUGFyYW17U2hvd0NvbHVtbnN9IH07CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGNvbHVtbiBoZWFkZXIgYmxvY2tzCiAgICAgICAgaWYgKEBTaG93Q29sdW1ucykgewoKICAgICAgICAgICAgIyBjYWxsIG1haW4gYmxvY2sKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUmVjb3JkRm9ybScgKTsKCiAgICAgICAgICAgIENPTFVNTjoKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBTaG93Q29sdW1ucykgewoKICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OIGlmICggJENvbHVtbiBlcSAnTGFuZ3VhZ2UnICYmICEkU2VsZi0+e011bHRpTGFuZ3VhZ2V9ICk7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgbmVlZGVkIHZhcmlhYmxlcwogICAgICAgICAgICAgICAgbXkgJENTUyA9ICcnOwogICAgICAgICAgICAgICAgbXkgJE9yZGVyQnk7CgogICAgICAgICAgICAgICAgIyByZW1vdmUgSUQgaWYgbmVjZXNhcnkKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte1NvcnRCeX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1NvcnRCeX0gPSAkUGFyYW17U29ydEJ5fSBlcSAnUHJpb3JpdHlJRCcKICAgICAgICAgICAgICAgICAgICAgICAgPyAnUHJpb3JpdHknCiAgICAgICAgICAgICAgICAgICAgICAgIDogJFBhcmFte1NvcnRCeX0gZXEgJ0NhdGVnb3J5SUQnID8gJ0NhdGVnb3J5JwogICAgICAgICAgICAgICAgICAgICAgICA6ICRQYXJhbXtTb3J0Qnl9IGVxICdMYW5ndWFnZUlEJyA/ICdMYW5ndWFnZScKICAgICAgICAgICAgICAgICAgICAgICAgOiAkUGFyYW17U29ydEJ5fSBlcSAnU3RhdGVJRCcgICAgPyAnU3RhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIDogJFBhcmFte1NvcnRCeX0gZXEgJ0ZBUUlEJyAgICAgID8gJ051bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGFyYW17U29ydEJ5fTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNldCB0aGUgY29ycmVjdCBTZXQgQ1NTIGNsYXNzIGFuZCBvcmRlciBieSBsaW5rCiAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtTb3J0Qnl9ICYmICggJFBhcmFte1NvcnRCeX0gZXEgJENvbHVtbiApICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJFBhcmFte09yZGVyQnl9ICYmICggJFBhcmFte09yZGVyQnl9IGVxICdVcCcgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE9yZGVyQnkgPSAnRG93bic7CiAgICAgICAgICAgICAgICAgICAgICAgICRDU1MgLj0gJyBTb3J0RGVzY2VuZGluZyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdVcCc7CiAgICAgICAgICAgICAgICAgICAgICAgICRDU1MgLj0gJyBTb3J0QXNjZW5kaW5nJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdVcCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdIZWFkZXInLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIENTUyAgICAgPT4gJENTUywKICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSA9PiAkT3JkZXJCeSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICAgICBJRDoKICAgICAgICBmb3IgbXkgJElEIChASURzKSB7CiAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRDb3VudGVyID49ICRQYXJhbXtTdGFydEhpdH0KICAgICAgICAgICAgICAgICYmICRDb3VudGVyIDwgKCAkUGFyYW17UGFnZVNob3dufSArICRQYXJhbXtTdGFydEhpdH0gKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyB0byBzdG9yZSBhbGwgZGF0YQogICAgICAgICAgICAgICAgbXkgJURhdGE7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEKICAgICAgICAgICAgICAgIG15ICVGQVEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRJRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISVGQVE7CgogICAgICAgICAgICAgICAgIyBhZGQgRkFRIGRhdGEKICAgICAgICAgICAgICAgICVEYXRhID0gKCAlRGF0YSwgJUZBUSApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgcmVjb3JkIGJsb2NrCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBidWlsZCBjb2x1bW4gcmVjb3JkIGJsb2NrcwogICAgICAgICAgICAgICAgaWYgKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICAgICAgICAgIENPTFVNTjoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoQFNob3dDb2x1bW5zKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENPTFVNTiBpZiAoICRDb2x1bW4gZXEgJ0xhbmd1YWdlJyAmJiAhJFNlbGYtPntNdWx0aUxhbmd1YWdlfSApOwogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkbyBub3QgZGlzcGxheSBjb2x1bW5zIGFzIGxpbmtzIGluIHRoZSBjdXN0b21lciBmcm9udGVuZAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENPTFVNTiBpZiAkUGFyYW17RnJvbnRlbmR9IGVxICdDdXN0b21lcic7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgbGlua3MgaWYgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rU3RhcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uIC4gJ0xpbmtFbmQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdOb0ZBUUZvdW5kJyApOwogICAgfQoKICAgICMgdXNlIHRlbXBsYXRlCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFPdmVydmlld1NtYWxsJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICRTZWxmLT57Vmlld1R5cGV9LAogICAgICAgICAgICBDb2x1bW5Db3VudCA9PiBzY2FsYXIgQFNob3dDb2x1bW5zLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkhlYWRlck1ldGFGQVFTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBmb3IgKHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgTGF5b3V0T2JqZWN0IFRpbWVPYmplY3QpKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99IHx8IGRpZSAiR290IG5vICRfISI7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlc3Npb24gPSAnJzsKICAgIGlmICggISRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1Nlc3Npb25JRENvb2tpZX0gKSB7CiAgICAgICAgJFNlc3Npb24gPSAnOycgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntTZXNzaW9uTmFtZX0gLiAnPScKICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntTZXNzaW9uSUR9OwogICAgfQoKICAgICMgYnVpbGQgb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gZm9yIEZBUSBudW1iZXIKICAgIG15ICRUaXRsZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQcm9kdWN0TmFtZScpOwoKICAgICRUaXRsZSAuPSAnKCcgLiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpGQVFIb29rJykgLiAnKSc7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01ldGFMaW5rJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgUmVsICAgPT4gJ3NlYXJjaCcsCiAgICAgICAgICAgIFR5cGUgID0+ICdhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sJywKICAgICAgICAgICAgVGl0bGUgPT4gJFRpdGxlLAogICAgICAgICAgICBIcmVmICA9PiAnJEVudnsiQmFzZWxpbmsifUFjdGlvbj0nIC4gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259CiAgICAgICAgICAgICAgICAuICc7U3ViYWN0aW9uPU9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcicgLiAkU2Vzc2lvbiwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGJ1aWxkIG9wZW4gc2VhcmNoIGRlc2NyaXB0aW9uIGZvciBGQVEgZnVsbHRleHQKICAgIG15ICRGdWxsdGV4dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdGQVFGdWxsdGV4dCcpOwogICAgJFRpdGxlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1Byb2R1Y3ROYW1lJyk7CiAgICAkVGl0bGUgLj0gJygnIC4gJEZ1bGx0ZXh0IC4gJyknOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZXRhTGluaycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFJlbCAgID0+ICdzZWFyY2gnLAogICAgICAgICAgICBUeXBlICA9PiAnYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCcsCiAgICAgICAgICAgIFRpdGxlID0+ICRUaXRsZSwKICAgICAgICAgICAgSHJlZiAgPT4gJyRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JyAuICRQYXJhbXtDb25maWd9LT57QWN0aW9ufQogICAgICAgICAgICAgICAgLiAnO1N1YmFjdGlvbj1PcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dCcgLiAkU2Vzc2lvbiwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dEZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBHZXRGQVFJdGVtVm90aW5nUmF0ZUNvbG9yIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17UmF0ZX0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICdOZWVkIHJhdGUhJyApOwogICAgfQogICAgbXkgJENzc1RtcCAgICAgICAgICAgICA9ICcnOwogICAgbXkgJFZvdGluZ1Jlc3VsdENvbG9ycyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkV4cGxvcmVyOjpJdGVtTGlzdDo6Vm90aW5nUmVzdWx0Q29sb3JzJyk7CgogICAgZm9yIG15ICRLZXkgKCBzb3J0IHsgJGIgPD0+ICRhIH0ga2V5cyAleyRWb3RpbmdSZXN1bHRDb2xvcnN9ICkgewogICAgICAgIGlmICggJFBhcmFte1JhdGV9IDw9ICRLZXkgKSB7CiAgICAgICAgICAgICRDc3NUbXAgPSAkVm90aW5nUmVzdWx0Q29sb3JzLT57JEtleX07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRDc3NUbXA7Cn0KCj1pdGVtIEZBUUxpc3RTaG93KCkKClJldHVybnMgYSBsaXN0IG9mIEZBUSBpdGVtcyBhcyBzb3J0YWJsZSBsaXN0IHdpdGggcGFnaW5hdGlvbi4KClRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBMPEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXRUaWNrZXQ6OlRpY2tldExpc3RTaG93KCk+CmluIEY8S2VybmVsL091dHB1dC9IVE1ML0xheW91dFRpY2tldC5wbT4uCgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkZBUUxpc3RTaG93KAogICAgICAgIEZBUUlEcyAgICAgPT4gJEZBUUlEc1JlZiwgICAgICAgICAgICAgICAgICAgICAgICAgIyB0b3RhbCBsaXN0IG9mIEZBUUlEcywgdGhhdCBjYW4gYmUgbGlzdGVkCiAgICAgICAgVG90YWwgICAgICA9PiBzY2FsYXIgQHsgJEZBUUlEc1JlZiB9LCAgICAgICAgICAgICAjIHRvdGFsIG51bWJlciBvZiBsaXN0IGl0ZW1zLCBpbiB0aGlzIGNhc2UKICAgICAgICBWaWV3ICAgICAgID0+ICRTZWxmLT57Vmlld30sICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIHRoZSBkZWZhdWx0IHZhbHVlIGlzICdTbWFsbCcKICAgICAgICBGaWx0ZXIgICAgID0+ICdBbGwnLAogICAgICAgIEZpbHRlcnMgICAgPT4gXCVOYXZCYXJGaWx0ZXIsCiAgICAgICAgRmlsdGVyTGluayA9PiAkTGlua0ZpbHRlciwKICAgICAgICBUaXRsZU5hbWUgID0+ICdPdmVydmlldzogRkFRJywKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBFbnYgICAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlICAgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ICAgPT4gJExpbmtTb3J0LAogICAgICAgIEZyb250ZW5kICAgPT4gJ0FnZW50JywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAoQWdlbnR8Q3VzdG9tZXJ8UHVibGljKSwgZGVmYXVsdDogQWdlbnQsIGluZGljYXRlcyBmcm9tIHdoaWNoIGZyb250ZW5kIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZAogICAgKTsKCj1jdXQKCnN1YiBGQVFMaXN0U2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBvYmplY3QgcmVmIHRvIGxvY2FsLCByZW1vdmUgaXQgZnJvbSAlUGFyYW0gKHByZXZlbnQgbWVtb3J5IGxlYWspCiAgICBteSAkRW52ID0gZGVsZXRlICRQYXJhbXtFbnZ9OwoKICAgICMgbG9va3VwIGxhdGVzdCB1c2VkIHZpZXcgbW9kZQogICAgaWYgKCAhJFBhcmFte1ZpZXd9ICYmICRTZWxmLT57ICdVc2VyRkFRT3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAkUGFyYW17Vmlld30gPSAkU2VsZi0+eyAnVXNlckZBUU92ZXJ2aWV3JyAuICRFbnYtPntBY3Rpb259IH07CiAgICB9CgogICAgIyBzZXQgZnJvbnRlbmQKICAgIG15ICRGcm9udGVuZCA9ICRQYXJhbXtGcm9udGVuZH0gfHwgJ0FnZW50JzsKCiAgICAjIHNldCBkZWZhdXQgdmlldyBtb2RlIHRvICdzbWFsbCcKICAgIG15ICRWaWV3ID0gJFBhcmFte1ZpZXd9IHx8ICdTbWFsbCc7CgogICAgIyBzdG9yZSBsYXRlc3QgdmlldyBtb2RlCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJGQVFPdmVydmlldycgLiAkRW52LT57QWN0aW9ufSwKICAgICAgICBWYWx1ZSAgICAgPT4gJFZpZXcsCiAgICApOwoKICAgICMgZ2V0IGJhY2tlbmQgZnJvbSBjb25maWcKICAgIG15ICRCYWNrZW5kcyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkZyb250ZW5kOjpPdmVydmlldycpOwogICAgaWYgKCAhJEJhY2tlbmRzICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTmVlZCBjb25maWcgb3B0aW9uIEZBUTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3JywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGhhc2gtcmVmCiAgICBpZiAoIHJlZiAkQmFja2VuZHMgbmUgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ29uZmlnIG9wdGlvbiBGQVE6OkZyb250ZW5kOjpPdmVydmlldyBuZWVkcyB0byBiZSBhIEhBU0ggcmVmIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBjb25maWcga2V5CiAgICBpZiAoICEkQmFja2VuZHMtPnskVmlld30gKSB7CiAgICAgICAgcmV0dXJuICRFbnYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBjb25maWcgb3B0aW9uIGZvdW5kIGZvciB0aGUgdmlldyAnJFZpZXcnISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG5hdiBiYXIKICAgIG15ICRTdGFydEhpdCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAnU3RhcnRIaXQnLAogICAgKSB8fCAxOwoKICAgICMgZ2V0IHBlcnNvbmFsIHBhZ2Ugc2hvd24gY291bnQKICAgIG15ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSA9ICdVc2VyRkFRT3ZlcnZpZXcnIC4gJFZpZXcgLiAnUGFnZVNob3duJzsKICAgIG15ICRQYWdlU2hvd24gICAgICAgICAgICAgICA9ICRTZWxmLT57JFBhZ2VTaG93blByZWZlcmVuY2VzS2V5fSB8fCAxMDsKICAgIG15ICRHcm91cCAgICAgICAgICAgICAgICAgICA9ICdGQVFPdmVydmlldycgLiAkVmlldyAuICdQYWdlU2hvd24nOwoKICAgICMgY2hlY2sgc3RhcnQgb3B0aW9uLCBpZiBoaWdoZXIgdGhlbiBlbGVtZW50cyBhdmFpbGFibGUsIHNldAogICAgIyBpdCB0byB0aGUgbGFzdCBvdmVydmlldyBwYWdlIChUaGFua3MgdG8gU3RlZmFuIFNjaG1pZHQhKQogICAgaWYgKCAkU3RhcnRIaXQgPiAkUGFyYW17VG90YWx9ICkgewogICAgICAgIG15ICRQYWdlcyA9IGludCggKCAkUGFyYW17VG90YWx9IC8gJFBhZ2VTaG93biApICsgMC45OTk5OSApOwogICAgICAgICRTdGFydEhpdCA9ICggKCAkUGFnZXMgLSAxICkgKiAkUGFnZVNob3duICkgKyAxOwogICAgfQoKICAgICMgZ2V0IGRhdGEgc2VsZWN0aW9uCiAgICBteSAlRGF0YTsKICAgIG15ICRDb25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJlZmVyZW5jZXNHcm91cHMnKTsKICAgIGlmICggJENvbmZpZyAmJiAkQ29uZmlnLT57JEdyb3VwfSAmJiAkQ29uZmlnLT57JEdyb3VwfS0+e0RhdGF9ICkgewogICAgICAgICVEYXRhID0gJXsgJENvbmZpZy0+eyRHcm91cH0tPntEYXRhfSB9OwogICAgfQoKICAgICMgc2V0IHBhZ2UgbGltaXQgYW5kIGJ1aWxkIHBhZ2UgbmF2CiAgICBteSAkTGltaXQgPSAkUGFyYW17TGltaXR9IHx8IDIwXzAwMDsKICAgIG15ICVQYWdlTmF2ID0gJEVudi0+e0xheW91dE9iamVjdH0tPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgQWN0aW9uICAgID0+ICdBY3Rpb249JyAuICRFbnYtPntMYXlvdXRPYmplY3R9LT57QWN0aW9ufSwKICAgICAgICBMaW5rICAgICAgPT4gJFBhcmFte0xpbmtQYWdlfSwKICAgICk7CgogICAgIyBidWlsZCBzaG93biBmYXEgYXJ0aWNsZXMgb24gYSBwYWdlCiAgICAkUGFyYW17UmVxdWVzdGVkVVJMfSAgICA9ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IjsKICAgICRQYXJhbXtHcm91cH0gICAgICAgICAgID0gJEdyb3VwOwogICAgJFBhcmFte1ByZWZlcmVuY2VzS2V5fSAgPSAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXk7CiAgICAkUGFyYW17UGFnZVNob3duU3RyaW5nfSA9ICRTZWxmLT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXksCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhZ2VTaG93biwKICAgICAgICBEYXRhICAgICAgICA9PiBcJURhdGEsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICk7CgogICAgIyBidWlsZCBuYXZiYXIgY29udGVudAogICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgIG15ICRMaW5rQmFja0lEID0gJ0ZBUVNlYXJjaCc7CiAgICBpZiAoICRQYXJhbXtOYXZ9ICYmICRQYXJhbXtOYXZ9IGVxICdOb25lJyApIHsKICAgICAgICAkTGlua0JhY2tJRCAuPSAnU21hbGwnOwogICAgfQoKICAgICMgYmFjayBsaW5rCiAgICBpZiAoICRQYXJhbXtMaW5rQmFja30gKSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VCYWNrJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMaW5rQmFja0lEID0+ICRMaW5rQmFja0lELAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZmlsdGVycwogICAgaWYgKCAkUGFyYW17RmlsdGVyc30gKSB7CgogICAgICAgICMgZ2V0IGdpdmVuIGZpbHRlcnMKICAgICAgICBteSBATmF2QmFyRmlsdGVyczsKICAgICAgICBmb3IgbXkgJFByaW8gKCBzb3J0IGtleXMgJXsgJFBhcmFte0ZpbHRlcnN9IH0gKSB7CiAgICAgICAgICAgIHB1c2ggQE5hdkJhckZpbHRlcnMsICRQYXJhbXtGaWx0ZXJzfS0+eyRQcmlvfTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgZmlsdGVyIGNvbnRlbnQKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBsb29wIG92ZXIgZmlsdGVycwogICAgICAgIG15ICRDb3VudCA9IDA7CiAgICAgICAgZm9yIG15ICRGaWx0ZXIgKEBOYXZCYXJGaWx0ZXJzKSB7CgogICAgICAgICAgICAjIGluY3JlbWVudCBmaWx0ZXIgY291bnQgYW5kIGJ1aWxkIGZpbHRlciBpdGVtCiAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW0nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmaWx0ZXIgaXMgc2VsZWN0ZWQKICAgICAgICAgICAgaWYgKCAkRmlsdGVyLT57RmlsdGVyfSBlcSAkUGFyYW17RmlsdGVyfSApIHsKICAgICAgICAgICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskRmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgbG9vcCBvdmVyIGNvbmZpZ3VyZWQgYmFja2VuZHMKICAgIGZvciBteSAkQmFja2VuZCAoIHNvcnQga2V5cyAleyRCYWNrZW5kc30gKSB7CgogICAgICAgICMgYnVpbGQgbmF2YmFyIHZpZXcgbW9kZQogICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjdXJyZW50IHZpZXcgaXMgY29uZmlndXJlZCBpbiBiYWNrZW5kCiAgICAgICAgaWYgKCAkVmlldyBlcSAkQmFja2VuZCApIHsKICAgICAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgcGFnZSBuYXYgaXMgYXZhaWxhYmxlCiAgICBpZiAoJVBhZ2VOYXYpIHsKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyUGFnZU5hdkJhcicsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYWdlTmF2LAogICAgICAgICk7CgogICAgICAgICMgZG9uJ3Qgc2hvdyBjb250ZXh0IHNldHRpbmdzIGluIEFKQVggY2FzZSAoZS4gZy4gaW4gY3VzdG9tZXIgRkFRIGhpc3RvcnkpLAogICAgICAgICMgYmVjYXVzZSB0aGUgc3VibWl0IHdpdGggcGFnZSByZWxvYWQgd2lsbCBub3Qgd29yayB0aGVyZQogICAgICAgIGlmICggISRQYXJhbXtBSkFYfSApIHsKICAgICAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ29udGV4dFNldHRpbmdzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgaHRtbCBjb250ZW50CiAgICBteSAkT3V0cHV0TmF2QmFyID0gJEVudi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRT3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBjcmVhdGUgb3V0cHV0CiAgICBteSAkT3V0cHV0UmF3ID0gJyc7CiAgICBpZiAoICEkUGFyYW17T3V0cHV0fSApIHsKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+UHJpbnQoCiAgICAgICAgICAgIE91dHB1dCA9PiBcJE91dHB1dE5hdkJhciwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dFJhdyAuPSAkT3V0cHV0TmF2QmFyOwogICAgfQoKICAgICMgbG9hZCBtb2R1bGUKICAgIGlmICggISRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0gKSApIHsKICAgICAgICByZXR1cm4gJEVudi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBiYWNrZW5kIG9iamVjdAogICAgbXkgJE9iamVjdCA9ICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0tPm5ldyggJXskRW52fSApOwogICAgcmV0dXJuIGlmICEkT2JqZWN0OwoKICAgICMgcnVuIG1vZHVsZQogICAgbXkgJE91dHB1dCA9ICRPYmplY3QtPlJ1bigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgRnJvbnRlbmQgID0+ICRGcm9udGVuZCwKICAgICAgICBOYXYgICAgICAgPT4gJFBhcmFte05hdn0gfHwgJycsCiAgICApOwoKICAgICMgY3JlYXRlIG91dHB1dAogICAgaWYgKCAhJFBhcmFte091dHB1dH0gKSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPlByaW50KAogICAgICAgICAgICBPdXRwdXQgPT4gXCRPdXRwdXQsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXRSYXcgLj0gJE91dHB1dDsKICAgIH0KCiAgICAjIGNyZWF0ZSBvdmVydmlldyBuYXYgYmFyCiAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgcmV0dXJuIGNvbnRlbnQgaWYgYXZhaWxhYmxlCiAgICByZXR1cm4gJE91dHB1dFJhdzsKfQoKPWl0ZW0gRkFRQ29udGVudFNob3coKQoKT3V0cHV0cyB0aGUgbmVjZXNzYXJ5IERUTCBibG9ja3MgdG8gZGlzcGxheSB0aGUgRkFRIGl0ZW0gZmllbGRzIGZvciB0aGUgc3VwcGxpZWQgRkFRIGl0ZW0gSUQuClRoZSBmaWVsZHMgZGlzcGxheWVkIGFyZSBhbHNvIHJlc3RyaWN0ZWQgYnkgdGhlIHBlcm1pc3Npb25zIHJlcHJlc2VudGVkIGJ5IHRoZSBzdXBwbGllZCBpbnRlcmZhY2UKCklmIGV4aXN0IFJldHVybkNvbnRlbnQgcGFyYW1ldGVyIGl0IHJldHVybnMgdGhlIEZBUSBpdGVtcyBmaWVsZHMgb24gYSBIVE1MIGZvcm1hdGVkIHN0cmluZwoKICAgICRMYXlvdXRPYmplY3QtPkZBUUNvbnRlbnRTaG93KAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LCAgICAgICAgICAgICAgICAgIyBuZWVkZWQgZm9yIGNvcmUgbW9kdWxlIGludGVyYWN0aW9uCiAgICAgICAgRkFRRGF0YSAgICAgICAgID0+ICV7ICRGQVFEYXRhIH0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgbXkgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5GQVFDb250ZW50U2hvdygKICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJEZBUU9iamVjdCwgICAgICAgICAgICAgICAgICMgbmVlZGVkIGZvciBjb3JlIG1vZHVsZSBpbnRlcmFjdGlvbgogICAgICAgIEZBUURhdGEgICAgICAgICA9PiAleyAkRkFRRGF0YSB9LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgUmV0dXJuQ29udGVudCAgID0+IDEsCiAgICApOwo9Y3V0CgpzdWIgRkFRQ29udGVudFNob3cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHBhcmFtZXRlcnMKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhGQVFPYmplY3QgRkFRRGF0YSBJbnRlcmZhY2VTdGF0ZXMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc3RvcmUgRkFRIG9iamVjdCBsb2NhbGx5CiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSAkUGFyYW17RkFRT2JqZWN0fTsKCiAgICAjIGdldCB0aGUgaW50ZXJuYWwgc3RhdGUgdHlwZQogICAgbXkgJEludGVybmFsU3RhdGVUeXBlID0gJFNlbGYtPntGQVFPYmplY3R9LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgTmFtZSAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCB0aGUgaW50ZXJuYWwgc3RhdGUgdHlwZSBJRAogICAgbXkgJEludGVybmFsU3RhdGVJRCA9ICRJbnRlcm5hbFN0YXRlVHlwZS0+e1N0YXRlSUR9OwoKICAgICMgZ2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVGlja2V0IENvbXBvc2UKICAgIG15ICRUaWNrZXRDb21wb3NlQ29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6VGlja2V0Q29tcG9zZScpOwoKICAgICMgZ2V0IHRoZSBjb25maWcgb2YgRkFRIGZpZWxkcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgbXkgJUZpZWxkczsKICAgIEZJRUxEOgogICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDYgKSB7CgogICAgICAgICMgZ2V0IGNvbmZpZyBvZiBGQVEgZmllbGQKICAgICAgICBteSAkQ29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoICdGQVE6Okl0ZW06OkZpZWxkJyAuICROdW1iZXIgKTsKCiAgICAgICAgIyBza2lwIG92ZXIgbm90IHNob3duIGZpZWxkcwogICAgICAgIG5leHQgRklFTEQgaWYgISRDb25maWctPntTaG93fTsKCiAgICAgICAgIyBzdG9yZSBvbmx5IHRoZSBjb25maWcgb2YgZmllbGRzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgJEZpZWxkc3sgIkZpZWxkIiAuICROdW1iZXIgfSA9ICRDb25maWc7CiAgICB9CgogICAgbXkgJEZ1bGxDb250ZW50OwoKICAgICMgc29ydCBzaG93biBmaWVsZHMgYnkgcHJpb3JpdHkKICAgIEZJRUxEOgogICAgZm9yIG15ICRGaWVsZCAoIHNvcnQgeyAkRmllbGRzeyRhfS0+e1ByaW99IDw9PiAkRmllbGRzeyRifS0+e1ByaW99IH0ga2V5cyAlRmllbGRzICkgewoKICAgICAgICAjIGdldCB0aGUgc3RhdGUgdHlwZSBkYXRhIG9mIHRoaXMgZmllbGQKICAgICAgICBteSAkU3RhdGVUeXBlRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlR2V0KAogICAgICAgICAgICBOYW1lICAgPT4gJEZpZWxkc3skRmllbGR9LT57U2hvd30sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGRvIG5vdCBzaG93IGZpZWxkcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgZ2l2ZW4gaW50ZXJmYWNlCiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJFBhcmFte0ludGVyZmFjZVN0YXRlc30tPnsgJFN0YXRlVHlwZURhdGEtPntTdGF0ZUlEfSB9OwoKICAgICAgICBteSAkQ2FwdGlvbiA9ICRGaWVsZHN7JEZpZWxkfS0+eydDYXB0aW9uJ307CiAgICAgICAgbXkgJENvbnRlbnQgPSAkUGFyYW17RkFRRGF0YX0tPnskRmllbGR9IHx8ICcnOwoKICAgICAgICAjIHJlbW92ZSBhY3RpdmUgaHRtbCBjb250ZW50IChzY3JpcHRzLCBhcHBsZXRzLCBldGMuLi4pCiAgICAgICAgbXkgJVNhZmVDb250ZW50ID0gJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5TYWZldHkoCiAgICAgICAgICAgIFN0cmluZyAgICAgICA9PiAkQ29udGVudCwKICAgICAgICAgICAgTm9BcHBsZXQgICAgID0+IDEsCiAgICAgICAgICAgIE5vT2JqZWN0ICAgICA9PiAxLAogICAgICAgICAgICBOb0VtYmVkICAgICAgPT4gMSwKICAgICAgICAgICAgTm9JbnRTcmNMb2FkID0+IDAsCiAgICAgICAgICAgIE5vRXh0U3JjTG9hZCA9PiAwLAogICAgICAgICAgICBOb0phdmFTY3JpcHQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHRha2UgdGhlIHNhZmUgY29udGVudCBpZiBuZWNjZXNzYXJ5CiAgICAgICAgaWYgKCAkU2FmZUNvbnRlbnR7UmVwbGFjZX0gKSB7CiAgICAgICAgICAgICRDb250ZW50ID0gJFNhZmVDb250ZW50e1N0cmluZ307CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgdGhlIGZpZWxkCiAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGQVFDb250ZW50JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBJdGVtSUQgICAgPT4gJFBhcmFte0ZBUURhdGF9LT57SXRlbUlEfSwKICAgICAgICAgICAgICAgIEZpZWxkICAgICA9PiAkRmllbGQsCiAgICAgICAgICAgICAgICBDYXB0aW9uICAgPT4gJENhcHRpb24sCiAgICAgICAgICAgICAgICBTdGF0ZU5hbWUgPT4gJFN0YXRlVHlwZURhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkQ29udGVudCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6Okl0ZW06OkhUTUwnKSApIHsKICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRkFRQ29udGVudEhUTUwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgSXRlbUlEID0+ICRQYXJhbXtGQVFEYXRhfS0+e0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgRmllbGQgID0+ICRGaWVsZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdGQVFDb250ZW50UGxhaW4nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkQ29udGVudCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHN0b3JlIHRoZSBmaWVsZCB0byByZXR1cm4gYWxsIEZBUSBCb2R5CiAgICAgICAgaWYgKCAkUGFyYW17UmV0dXJuQ29udGVudH0gJiYgJENvbnRlbnQgKSB7CgogICAgICAgICAgICAjIGNoZWNrIGlmIGN1cnJlbnQgZmllbGQgaXMgaW50ZXJuYWwKICAgICAgICAgICAgbXkgJElzSW50ZXJuYWw7CiAgICAgICAgICAgIGlmICggJFN0YXRlVHlwZURhdGEtPntTdGF0ZUlEfSA9PSAkSW50ZXJuYWxTdGF0ZUlEICkgewogICAgICAgICAgICAgICAgJElzSW50ZXJuYWwgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENoZWNrIGlmIGZpZWxkIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSByZXR1cm5pbmcgc3RyaW5nCiAgICAgICAgICAgIGlmICggJFRpY2tldENvbXBvc2VDb25maWctPntJbmNsdWRlSW50ZXJuYWx9IHx8ICEkSXNJbnRlcm5hbCApIHsKCiAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGZpZWxkIG5hbWUgc2hvdWxkIGJlIHJldHVybmVkCiAgICAgICAgICAgICAgICBpZiAoICRUaWNrZXRDb21wb3NlQ29uZmlnLT57U2hvd0ZpZWxkTmFtZXN9ICkgewogICAgICAgICAgICAgICAgICAgICRGdWxsQ29udGVudCAuPSAkU2VsZi0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCRDYXB0aW9uKSAuICcgPGJyLz4gJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRGdWxsQ29udGVudCAuPSAkQ29udGVudCAuICcgPGJyLz4gJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHJldHVybiBhbGwgdGhlIChwZXJtaXRlZCkgRkFRIGJvZHkKICAgIGlmICggJFBhcmFte1JldHVybkNvbnRlbnR9ICkgewogICAgICAgIGlmICgkRnVsbENvbnRlbnQpIHsKICAgICAgICAgICAgcmV0dXJuICRGdWxsQ29udGVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1RoaXMgYXJ0aWNsZSBpcyBlbXB0eSEnKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gRkFRUGF0aFNob3coKQoKaWYgaXRzIGFsbG93ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24sIG91dHB1dHMgdGhlIG5lY2Vzc2FyeSBEVEwgYmxvY2tzIHRvIGRpc3BsYXkgdGhlIEZBUSBpdGVtIHBhdGgsCmFuZCByZXR1cm5zIHRoZSB2YWx1ZSAxLgoKICAgIG15ICRTaG93UGF0aE9rID0gJExheW91dE9iamVjdC0+RkFRUGF0aFNob3coCiAgICAgICAgRkFRT2JqZWN0ICAgPT4gJEZBUU9iamVjdCwgICAgICAgICAgICAgICAgICAgIyBuZWVkZWQgZm9yIGNvcmUgbW9kdWxlIGludGVyYWN0aW9uCiAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gNSwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgIE5hdiAgICAgICAgID0+ICdub25lJywgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgRkFRUGF0aFNob3cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHBhcmFtZXRlcnMKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhGQVFPYmplY3QgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgcGFyYW1ldGVycwogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17Q2F0ZWdvcnlJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENhdGVnb3J5SUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHN0b3JlIEZBUSBvYmplY3QgbG9jYWxseQogICAgJFNlbGYtPntGQVFPYmplY3R9ID0gJFBhcmFte0ZBUU9iamVjdH07CgogICAgIyBvdXRwdXQgY2F0ZWdvcnkgcm9vdAogICAgJFNlbGYtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZBUVBhdGhDYXRlZ29yeUVsZW1lbnQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkRlZmF1bHQ6OlJvb3RDYXRlZ29yeU5hbWUnKSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAwLAogICAgICAgICAgICBOYXYgICAgICAgID0+ICRQYXJhbXtOYXZ9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IFNob3cgRkFRIFBhdGggc2V0dGluZwogICAgbXkgJFNob3dQYXRoID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RXhwbG9yZXI6OlBhdGg6OlNob3cnKTsKCiAgICAjIGRvIG5vdCBkaXBsYXkgdGhlIHBhdGggaWYgc2V0dGluZyBpcyBvZmYKICAgIHJldHVybiBpZiAhJFNob3dQYXRoOwoKICAgICMgZ2V0IGNhdGVnb3J5IGxpc3QgdG8gY29uc3RydWN0IHRoZSBwYXRoCiAgICBteSAkQ2F0ZWdvcnlMaXN0ID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFQYXRoTGlzdEdldCgKICAgICAgICBDYXRlZ29yeUlEID0+ICRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIG91dHB1dCBzdWJjYXRlZ29yaWVzCiAgICBmb3IgbXkgJENhdGVnb3J5RGF0YSAoIEB7JENhdGVnb3J5TGlzdH0gKSB7CiAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYXYgPT4gJFBhcmFte05hdn0sCiAgICAgICAgICAgICAgICAleyRDYXRlZ29yeURhdGF9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gRkFRUmF0aW5nU3RhcnNTaG93KCkKCk91dHB1dHMgdGhlIG5lY2Vzc2FyeSBEVEwgYmxvY2tzIHRvIHJlcHJlc2VudCB0aGUgRkFRIGl0ZW0gcmF0aW5nCmFzICJTdGFycyIgaW4gdGhlIHNjYWxlIGZyb20gMSB0byA1LgoKICAgICRMYXlvdXRPYmplY3QtPkZBUVJhdGluZ1N0YXJzU2hvdygKICAgICAgICBWb3RlUmVzdWx0ID0+ICRGQVFEYXRhLT57Vm90ZVJlc3VsdH0sCiAgICAgICAgVm90ZXMgICAgICA9PiAkRkFRRGF0YSAtPntWb3Rlc30sCiAgICApOwoKPWN1dAoKc3ViIEZBUVJhdGluZ1N0YXJzU2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgcGFyYW1ldGVycwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFZvdGVSZXN1bHQgVm90ZXMpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRQYXJhbU5hbWUhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBzdGFycyBieSBtdXRpcGx5IGJ5IDUgYW5kIGRpdmlkZSBieSAxMDAKICAgICMgMTAwIGJlY2F1c2UgVm90ZSByZXN1bHQgaXMgYSAlCiAgICAjIDUgYmVjYXVzZSB3ZSBoYXZlIG9ubHkgNSBzdGFycwogICAgbXkgJFN0YXJDb3VudGVyID0gaW50KCAkUGFyYW17Vm90ZVJlc3VsdH0gKiAwLjA1ICk7CiAgICBpZiAoICRTdGFyQ291bnRlciA8IDUgKSB7CgogICAgICAgICMgYWRkIDEgYmVjYXVzZSBsb3dlc3QgdmFsdWUgc2hvdWxkIGJlIDEKICAgICAgICAkU3RhckNvdW50ZXIrKzsKICAgIH0KCiAgICAjIHRoZSBudW1iZXIgb2Ygc3RhcnMgY2FuJ3QgYmUgZ3JhdGVyIHRoYXQgNQogICAgZWxzaWYgKCAkU3RhckNvdW50ZXIgPiA1ICkgewogICAgICAgICRTdGFyQ291bnRlciA9IDU7CiAgICB9CgogICAgIyBvdXRwdXQgcmF0aW5nIGJsb2NrCiAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnVmlld1JhdGluZycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGRvIG5vdCBvdXRwdXQgYW55IHN0YXIgaWYgdGhpcyBGQVEgaGFzIGJlZW4gbm90IHZvdGVkCiAgICBpZiAoICRQYXJhbXtWb3Rlc30gZXEgJzAnICkgewogICAgICAgICRTdGFyQ291bnRlciA9IDA7CiAgICB9CgogICAgIyBzaG93IHN0YXJzIG9ubHkgaWYgdGhlIEZBUSBpdGVtIGhhcyBiZWVuIHZvdGVkIGF0IGxlYXN0IG9uY2UgZXZlbiBpZiB0aGUgJFZvdGVSZXN1bHQgaXMgMAogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IHN0YXJzCiAgICAgICAgZm9yICggMSAuLiAkU3RhckNvdW50ZXIgKSB7CiAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JhdGVTdGFycycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3V0cHV0IHN0YXJzIHRleHQKICAgICRTZWxmLT5CbG9jaygKICAgICAgICBOYW1lID0+ICdSYXRlU3RhcnNDb3VudCcsCiAgICAgICAgRGF0YSA9PiB7IFN0YXJzID0+ICRTdGFyQ291bnRlciB9LAogICAgKTsKfQoKPWl0ZW0gRkFRU2hvd0xhdGVzdE5ld3NCb3goKQoKU2hvd3MgYW4gaW5mbyBib3ggd2loIHRoZSBsYXN0IHVwZGF0ZWQgb3IgbGFzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcy4KRGVwZW5kaW5nIG9uIHRoZSB1c2VzIGludGVyZmFjZSAoYWdlbnQsIGN1c3RvbWVyLCBwdWJsaWMpIG9ubHkgdGhlIGFwcHJvcHJpYXRlCmFydGljbGVzIGFyZSBzaG93biBoZXJlLgoKICAgICRMYXlvdXRPYmplY3QtPkZBUVNob3dMYXRlc3ROZXdzQm94KAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LCAgICAgICAgICAgICAgICAgIyBuZWVkZWQgZm9yIGNvcmUgbW9kdWxlIGludGVyYWN0aW9uCiAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdMYXN0Q3JlYXRlJywgICAgICAgICAgICAgICAjIChMYXN0Q3JlYXRlIHwgTGFzdENoYW5nZSkKICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ1B1YmxpYycsICAgICAgICAgICAgICAgICAgICMgKEFnZW50LCBDdXN0b21lciwgUHVibGljKQogICAgICAgIENhdGVnb3J5SUQgICAgICA9PiA1LAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZX0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICBOYXYgICAgICAgICAgICAgPT4gJ25vbmUnLCAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgRkFRU2hvd0xhdGVzdE5ld3NCb3ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHBhcmFtZXRlcnMKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhGQVFPYmplY3QgVHlwZSBNb2RlIEludGVyZmFjZSBJbnRlcmZhY2VTdGF0ZXMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtDYXRlZ29yeUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgQ2F0ZWdvcnlJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc3RvcmUgRkFRIG9iamVjdCBsb2NhbGx5CiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSAkUGFyYW17RkFRT2JqZWN0fTsKCiAgICAjIGNoZWNrIHR5cGUKICAgIGlmICggJFBhcmFte1R5cGV9ICF+IG17IExhc3RDcmVhdGUgfCBMYXN0Q2hhbmdlIH14bXMgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdUeXBlIG11c3QgYmUgZWl0aGVyIExhc3RDcmVhdGUgb3IgTGFzdENoYW5nZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbW9kZQogICAgaWYgKCAkUGFyYW17TW9kZX0gIX4gbXsgQWdlbnQgfCBDdXN0b21lciB8IFB1YmxpYyB9eG1zICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTW9kZSBtdXN0IGJlIGVpdGhlciBBZ2VudCwgQ3VzdG9tZXIgb3IgUHVibGljIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBDdXN0b21lclVzZXIKICAgIGlmICggJFBhcmFte01vZGV9IGVxICdDdXN0b21lcicgJiYgISRQYXJhbXtDdXN0b21lclVzZXJ9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDdXN0b21lclVzZXIhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBvcmRlciBieSBzZWFyY2ggcGFyYW1ldGVyIGFuZCBoZWFkZXIgYmFzZWQgb24gdHlwZQogICAgbXkgJE9yZGVyQnk7CiAgICBteSAkSGVhZGVyOwogICAgbXkgJFJTU1RpdGxlOwogICAgaWYgKCAkUGFyYW17VHlwZX0gZXEgJ0xhc3RDcmVhdGUnICkgewogICAgICAgICRPcmRlckJ5ICA9ICdDcmVhdGVkJzsKICAgICAgICAkSGVhZGVyICAgPSAnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJzsKICAgICAgICAkUlNTVGl0bGUgPSAnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17VHlwZX0gZXEgJ0xhc3RDaGFuZ2UnICkgewogICAgICAgICRPcmRlckJ5ICA9ICdDaGFuZ2VkJzsKICAgICAgICAkSGVhZGVyICAgPSAnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJzsKICAgICAgICAkUlNTVGl0bGUgPSAnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSc7CiAgICB9CgogICAgbXkgJFJlc3VsdCA9IC0xOwoKICAgICMgc2hvdyBsYXN0IGFkZGVkL3VwZGF0ZWQgYXJ0aWNsZXMKICAgIG15ICRTaG93ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIkZBUTo6RXhwbG9yZXI6OiRQYXJhbXtUeXBlfTo6U2hvdyIpOwogICAgaWYgKCAkU2hvdy0+eyAkUGFyYW17SW50ZXJmYWNlfS0+e05hbWV9IH0gKSB7CgogICAgICAgICMgdG8gc3RvcmUgc2VhcmNoIHBhcmFtIGZvciBjYXRlZ29yaWVzCiAgICAgICAgbXkgJUNhdGVnb3J5U2VhcmNoUGFyYW07CgogICAgICAgICMgaWYgc3ViY2F0ZWdvcmllcyBzaG91bGQgYWxzbyBiZSBzaG93bgogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIkZBUTo6RXhwbG9yZXI6OiRQYXJhbXtUeXBlfTo6U2hvd1N1YkNhdGVnb3J5SXRlbXMiKSApIHsKCiAgICAgICAgICAgICMgZmluZCB0aGUgc3ViY2F0ZWdvcmllcyBvZiB0aGlzIGNhdGVnb3J5CiAgICAgICAgICAgIG15ICRTdWJDYXRlZ29yeUlEc1JlZiA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2F0ZWdvcnlTdWJDYXRlZ29yeUlETGlzdCgKICAgICAgICAgICAgICAgIFBhcmVudElEICAgICA9PiAkUGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgICAgICBNb2RlICAgICAgICAgPT4gJFBhcmFte01vZGV9LAogICAgICAgICAgICAgICAgSXRlbVN0YXRlcyAgID0+ICRQYXJhbXtJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRQYXJhbXtDdXN0b21lclVzZXJ9IHx8ICcnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZWFyY2ggaW4gdGhlIGdpdmVuIGNhdGVnb3J5IGFuZCBhZGQgdGhlIHN1YmNhdGVnb3J5CiAgICAgICAgICAgICRDYXRlZ29yeVNlYXJjaFBhcmFte0NhdGVnb3J5SURzfSA9IFsgJFBhcmFte0NhdGVnb3J5SUR9LCBAeyRTdWJDYXRlZ29yeUlEc1JlZn0gXTsKICAgICAgICB9CgogICAgICAgICMgYSBjYXRlZ29yeSBpcyBnaXZlbiBhbmQgc3ViY2F0ZWdvcmllcyBzaG91bGQgbm90IGJlIHNob3duCiAgICAgICAgZWxzaWYgKCAkUGFyYW17Q2F0ZWdvcnlJRH0gKSB7CgogICAgICAgICAgICAjIHNlYXJjaCBvbmx5IGluIHRoZSBnaXZlbiBjYXRlZ29yeQogICAgICAgICAgICAkQ2F0ZWdvcnlTZWFyY2hQYXJhbXtDYXRlZ29yeUlEc30gPSBbICRQYXJhbXtDYXRlZ29yeUlEfSBdOwogICAgICAgIH0KCiAgICAgICAgIyBzZWFyY2ggdGhlIEZBUSBhcnRpY2xlcwogICAgICAgIG15IEBJdGVtSURzID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFTZWFyY2goCiAgICAgICAgICAgIFN0YXRlcyAgICAgICAgICAgPT4gJFBhcmFte0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyRPcmRlckJ5XSwKICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJ0Rvd24nXSwKICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiAkUGFyYW17SW50ZXJmYWNlfSwKICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiRkFROjpFeHBsb3Jlcjo6JFBhcmFte1R5cGV9OjpMaW1pdCIpIHx8IDUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICVDYXRlZ29yeVNlYXJjaFBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHNob3cKICAgICAgICBpZiAoQEl0ZW1JRHMpIHsKCiAgICAgICAgICAgICRSZXN1bHQgPSAxOwoKICAgICAgICAgICAgIyBzaG93IHRoZSBpbmZvIGJveAogICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJbmZvQm94RkFRTWluaUxpc3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgSGVhZGVyID0+ICRIZWFkZXIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IHRoZSBSU1MgRmVlZCBpY29uCiAgICAgICAgICAgIGlmICggJFBhcmFte01vZGV9IGVxICdQdWJsaWMnICkgewoKICAgICAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJbmZvQm94RkFRTWluaUxpc3ROZXdzUlNTJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgPT4gJE9yZGVyQnksCiAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRSU1NUaXRsZSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIG15ICRJdGVtSUQgKEBJdGVtSURzKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEKICAgICAgICAgICAgICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSXRlbUlELAogICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNob3cgdGhlIGFydGljbGUgcm93CiAgICAgICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hdiA9PiAkUGFyYW17TmF2fSwKICAgICAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRSZXN1bHQ7Cn0KCj1pdGVtIEZBUVNob3dUb3AxMCgpCgpTaG93cyBhbiBpbmZvIGJveCB3aWggdGhlIFRvcCAxMCBGQVEgYXJ0aWNsZXMuCkRlcGVuZGluZyBvbiB0aGUgdXNlcyBpbnRlcmZhY2UgKGFnZW50LCBjdXN0b21lciwgcHVibGljKSBvbmx5IHRoZSBhcHByb3ByaWF0ZQphcnRpY2xlcyBhcmUgc2hvd24gaGVyZS4KCiAgICAkTGF5b3V0T2JqZWN0LT5GQVFTaG93VG9wMTAoCiAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRGQVFPYmplY3QsICAgICAgICAgICAgICAgICAjIG5lZWRlZCBmb3IgY29yZSBtb2R1bGUgaW50ZXJhY3Rpb24KICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ1B1YmxpYycsICAgICAgICAgICAgICAgICAgICMgKEFnZW50LCBDdXN0b21lciwgUHVibGljKQogICAgICAgIENhdGVnb3J5SUQgICAgICA9PiA1LAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZX0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICBOYXYgICAgICAgICAgICAgPT4gJ25vbmUnLCAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgRkFRU2hvd1RvcDEwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBwYXJhbWV0ZXJzCiAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoRkFRT2JqZWN0IE1vZGUgSW50ZXJmYWNlIEludGVyZmFjZVN0YXRlcyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkUGFyYW1OYW1lISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggIWRlZmluZWQgJFBhcmFte0NhdGVnb3J5SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBDYXRlZ29yeUlEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBtb2RlCiAgICBpZiAoICRQYXJhbXtNb2RlfSAhfiBteyBBZ2VudCB8IEN1c3RvbWVyIHwgUHVibGljIH14bXMgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdNb2RlIG11c3QgYmUgZWl0aGVyIEFnZW50LCBDdXN0b21lciBvciBQdWJsaWMhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIEN1c3RvbWVyVXNlcgogICAgaWYgKCAkUGFyYW17TW9kZX0gZXEgJ0N1c3RvbWVyJyAmJiAhJFBhcmFte0N1c3RvbWVyVXNlcn0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEN1c3RvbWVyVXNlciEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc3RvcmUgRkFRIG9iamVjdCBsb2NhbGx5CiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSAkUGFyYW17RkFRT2JqZWN0fTsKCiAgICBteSAkUmVzdWx0ID0gLTE7CgogICAgIyBzaG93IGxhc3QgYWRkZWQvdXBkYXRlZCBhcnRpY2xlcwogICAgbXkgJFNob3cgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpFeHBsb3Jlcjo6VG9wMTA6OlNob3cnKTsKICAgIGlmICggJFNob3ctPnsgJFBhcmFte0ludGVyZmFjZX0tPntOYW1lfSB9ICkgewoKICAgICAgICAjIHRvIHN0b3JlIHNlYXJjaCBwYXJhbSBmb3IgY2F0ZWdvcmllcwogICAgICAgIG15ICVDYXRlZ29yeVNlYXJjaFBhcmFtOwoKICAgICAgICAjIGlmIHN1YmNhdGVnb3JpZXMgc2hvdWxkIGFsc28gYmUgc2hvd24KICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkV4cGxvcmVyOjpUb3AxMDo6U2hvd1N1YkNhdGVnb3J5SXRlbXMnKSApIHsKCiAgICAgICAgICAgICMgZmluZCB0aGUgc3ViY2F0ZWdvcmllcyBvZiB0aGlzIGNhdGVnb3J5CiAgICAgICAgICAgIG15ICRTdWJDYXRlZ29yeUlEc1JlZiA9ICRTZWxmLT57RkFRT2JqZWN0fS0+Q2F0ZWdvcnlTdWJDYXRlZ29yeUlETGlzdCgKICAgICAgICAgICAgICAgIFBhcmVudElEICAgICA9PiAkUGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgICAgICBNb2RlICAgICAgICAgPT4gJFBhcmFte01vZGV9LAogICAgICAgICAgICAgICAgSXRlbVN0YXRlcyAgID0+ICRQYXJhbXtJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRQYXJhbXtDdXN0b21lclVzZXJ9IHx8ICcnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZWFyY2ggaW4gdGhlIGdpdmVuIGNhdGVnb3J5IGFuZCBhZGQgdGhlIHN1YmNhdGVnb3J5CiAgICAgICAgICAgICRDYXRlZ29yeVNlYXJjaFBhcmFte0NhdGVnb3J5SURzfSA9IFsgJFBhcmFte0NhdGVnb3J5SUR9LCBAeyRTdWJDYXRlZ29yeUlEc1JlZn0gXTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSB0b3AgMTAgYXJ0aWNsZXMgZm9yIGNhdGVnb3JpZXMgd2l0aCBhdCBsZWFzdCBybyBwZXJtaXNzaW9ucwogICAgICAgIG15ICRUb3AxMEl0ZW1JRHNSZWYgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUVRvcDEwR2V0KAogICAgICAgICAgICBJbnRlcmZhY2UgPT4gJFBhcmFte0ludGVyZmFjZX0tPntOYW1lfSwKICAgICAgICAgICAgTGltaXQgICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkV4cGxvcmVyOjpUb3AxMDo6TGltaXQnKSB8fCAxMCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAlQ2F0ZWdvcnlTZWFyY2hQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIHRoZXJlIGlzIHNvbWV0aGluZyB0byBzaG93CiAgICAgICAgaWYgKCBAeyRUb3AxMEl0ZW1JRHNSZWZ9ICkgewoKICAgICAgICAgICAgJFJlc3VsdCA9IDE7CgogICAgICAgICAgICAjIHNob3cgdGhlIGluZm8gYm94CiAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luZm9Cb3hGQVFNaW5pTGlzdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBIZWFkZXIgPT4gJ1RvcCAxMCBGQVEgYXJ0aWNsZXMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyB0aGUgUlNTIEZlZWQgaWNvbgogICAgICAgICAgICBpZiAoICRQYXJhbXtNb2RlfSBlcSAnUHVibGljJyApIHsKCiAgICAgICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5mb0JveEZBUU1pbmlMaXN0TmV3c1JTUycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgID0+ICdUb3AxMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICdGQVEgQXJ0aWNsZXMgKFRvcCAxMCknLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkTnVtYmVyOwogICAgICAgICAgICBmb3IgbXkgJFRvcDEwSXRlbSAoIEB7JFRvcDEwSXRlbUlEc1JlZn0gKSB7CgogICAgICAgICAgICAgICAgIyBpbmNyZWFzZSB0aGUgbnVtYmVyCiAgICAgICAgICAgICAgICAkTnVtYmVyKys7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEKICAgICAgICAgICAgICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkVG9wMTBJdGVtLT57SXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzaG93IHRoZSBhcnRpY2xlIHJvdwogICAgICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYXYgPT4gJFBhcmFte05hdn0sCiAgICAgICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgVG9wMTAgcG9zaXRpb24gbnVtYmVyCiAgICAgICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvd1Bvc2l0aW9uTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyID0+ICROdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRSZXN1bHQ7Cn0KCj1pdGVtIEZBUVNob3dRdWlja1NlYXJjaCgpCgpTaG93cyBhbiBpbmZvIGJveCB3aWggdGhlIFF1aWNrIFNlYXJjaC4KCiAgICAkTGF5b3V0T2JqZWN0LT5GQVFTaG93UXVpY2tTZWFyY2goCiAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdQdWJsaWMnLCAgICAgICAgICAgICAgICAgICAjIChBZ2VudCwgQ3VzdG9tZXIsIFB1YmxpYykKICAgICAgICBJbnRlcmZhY2UgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgTmF2ICAgICAgICAgICAgID0+ICdub25lJywgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICApOwoKPWN1dAoKc3ViIEZBUVNob3dRdWlja1NlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgcGFyYW1ldGVycwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KE1vZGUgSW50ZXJmYWNlIEludGVyZmFjZVN0YXRlcyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkUGFyYW1OYW1lISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBtb2RlCiAgICBpZiAoICRQYXJhbXtNb2RlfSAhfiBteyBBZ2VudCB8IEFnZW50U21hbGwgfCBDdXN0b21lciB8IFB1YmxpYyB9eG1zICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTW9kZSBtdXN0IGJlIGVpdGhlciBBZ2VudCwgQ3VzdG9tZXIgb3IgUHVibGljIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgYWN0aW9uIG1vZHVsZQogICAgbXkgJEFjdGlvbjsKICAgIGlmICggJFBhcmFte01vZGV9IGVxICdBZ2VudFNtYWxsJyApIHsKICAgICAgICAkQWN0aW9uID0gJ0FnZW50RkFRU2VhcmNoU21hbGwnOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJEFjdGlvbiA9ICRQYXJhbXtNb2RlfSAuICdGQVFTZWFyY2gnOwogICAgfQoKICAgICMgY2hlY2sgQ3VzdG9tZXJVc2VyCiAgICBpZiAoICRQYXJhbXtNb2RlfSBlcSAnQ3VzdG9tZXInICYmICEkUGFyYW17Q3VzdG9tZXJVc2VyfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ3VzdG9tZXJVc2VyIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzaG93IHF1aWNrIHNlYXJjaAogICAgbXkgJFNob3cgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpFeHBsb3Jlcjo6UXVpY2tTZWFyY2g6OlNob3cnKTsKICAgIGlmICggJFNob3ctPnsgJFBhcmFte0ludGVyZmFjZX0tPntOYW1lfSB9IHx8ICRQYXJhbXtNb2RlfSBlcSAnQWdlbnRTbWFsbCcgKSB7CgogICAgICAgICMgY2FsbCBRdWlja1NlYXJjaCBibG9jawogICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUXVpY2tTZWFyY2gnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAkQWN0aW9uLAogICAgICAgICAgICAgICAgTmF2ICAgID0+ICRQYXJhbXtOYXZ9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3RGQVE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdEZBUSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBsaW5rIG9iamVjdCAoRkFRKQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0RkFRLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgTWFpbk9iamVjdCBEQk9iamVjdCBVc2VyT2JqZWN0IEVuY29kZU9iamVjdAogICAgICAgIFF1ZXVlT2JqZWN0IEdyb3VwT2JqZWN0IFBhcmFtT2JqZWN0IFRpbWVPYmplY3QgTGFuZ3VhZ2VPYmplY3QgVXNlckxhbmd1YWdlIFVzZXJJRCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dC0+bmV3KCAleyRTZWxmfSApOwoKICAgICMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZXMKICAgICRTZWxmLT57T2JqZWN0RGF0YX0gPSB7CiAgICAgICAgT2JqZWN0ICAgPT4gJ0ZBUScsCiAgICAgICAgUmVhbG5hbWUgPT4gJ0ZBUScsCiAgICB9OwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gVGFibGVDcmVhdGVDb21wbGV4KCkKCnJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBibG9jayBkYXRhCgogICAgbXkgQEJsb2NrRGF0YSA9ICRMaW5rT2JqZWN0LT5UYWJsZUNyZWF0ZUNvbXBsZXgoCiAgICAgICAgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSA9PiAkT2JqZWN0TGlua0xpc3RSZWYsCiAgICApOwoKYSByZXN1bHQgY291bGQgYmUKCiAgICAlQmxvY2tEYXRhID0gKAogICAgICAgIHsKICAgICAgICAgICAgT2JqZWN0ICAgID0+ICdGQVEnLAogICAgICAgICAgICBCbG9ja25hbWUgPT4gJ0ZBUScsCiAgICAgICAgICAgIEhlYWRsaW5lICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnRkFRIycsCiAgICAgICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMzAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1RpdGxlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnU3RhdGUnLAogICAgICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTEwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDcmVhdGVkJywKICAgICAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDExMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEl0ZW1MaXN0ID0+IFsKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMTIzMTIzMTIzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3NzICAgICA9PiAnc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoIicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnVGhlIHRpdGxlJywKICAgICAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ2ludGVybmFsIChhZ2VudCknLAogICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA4LTAxLTAxIDEyOjEyOjAwJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnNDM0MjM0JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdUaGUgdGl0bGUgb2YgRkFRIDInLAogICAgICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAncHVibGljIChhbGwpJywKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMS0wMSAxMjoxMjowMCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7Cgo9Y3V0CgpzdWIgVGFibGVDcmVhdGVDb21wbGV4IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB8fCByZWYgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY29udmVydCB0aGUgbGlzdAogICAgbXkgJUxpbmtMaXN0OwogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfSApIHsKCiAgICAgICAgIyBleHRyYWN0IGxpbmsgdHlwZSBMaXN0CiAgICAgICAgbXkgJExpbmtUeXBlTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX07CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7JExpbmtUeXBlTGlzdH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgZGlyZWN0aW9uIGxpc3QKICAgICAgICAgICAgbXkgJERpcmVjdGlvbkxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn07CgogICAgICAgICAgICBmb3IgbXkgJEZBUUlEICggc29ydCBrZXlzICV7JERpcmVjdGlvbkxpc3R9ICkgewoKICAgICAgICAgICAgICAgICRMaW5rTGlzdHskRkFRSUR9LT57RGF0YX0gPSAkRGlyZWN0aW9uTGlzdC0+eyRGQVFJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIGl0ZW0gbGlzdAogICAgbXkgQEl0ZW1MaXN0OwogICAgZm9yIG15ICRGQVFJRCAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICVMaW5rTGlzdCApIHsKCiAgICAgICAgIyBleHRyYWN0IGZhcSBkYXRhCiAgICAgICAgbXkgJEZBUSA9ICRMaW5rTGlzdHskRkFRSUR9LT57RGF0YX07CgogICAgICAgIG15IEBJdGVtQ29sdW1ucyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICBLZXkgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJEZBUS0+e051bWJlcn0sCiAgICAgICAgICAgICAgICBMaW5rICAgID0+ICckRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9JyAuICRGQVFJRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkRkFRLT57VGl0bGV9LAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICRGQVEtPntTdGF0ZX0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkRkFRLT57Q3JlYXRlZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBASXRlbUxpc3QsIFxASXRlbUNvbHVtbnM7CiAgICB9CgogICAgcmV0dXJuIGlmICFASXRlbUxpc3Q7CgogICAgIyBkZWZpbmUgdGhlIGJsb2NrIGRhdGEKICAgIG15ICRGQVFIb29rID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RkFRSG9vaycpOwogICAgbXkgJUJsb2NrICAgPSAoCiAgICAgICAgT2JqZWN0ICAgID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9LAogICAgICAgIEJsb2NrbmFtZSA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57UmVhbG5hbWV9LAogICAgICAgIEhlYWRsaW5lICA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJEZBUUhvb2ssCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEzMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVGl0bGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdTdGF0ZScsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDExMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ3JlYXRlZCcsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEzMCwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgICAgIEl0ZW1MaXN0ID0+IFxASXRlbUxpc3QsCiAgICApOwoKICAgIHJldHVybiAoIFwlQmxvY2sgKTsKfQoKPWl0ZW0gVGFibGVDcmVhdGVTaW1wbGUoKQoKcmV0dXJuIGEgaGFzaCB3aXRoIHRoZSBsaW5rIG91dHB1dCBkYXRhCgogICAgbXkgJUxpbmtPdXRwdXREYXRhID0gJExpbmtPYmplY3QtPlRhYmxlQ3JlYXRlU2ltcGxlKAogICAgICAgIE9iamVjdExpbmtMaXN0V2l0aERhdGEgPT4gJE9iamVjdExpbmtMaXN0UmVmLAogICAgKTsKCmEgcmVzdWx0IGNvdWwgYmUgUmV0dXJuCgogICAgJUxpbmtPdXRwdXREYXRhID0gKAogICAgICAgIE5vcm1hbDo6U291cmNlID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdGOjU1NTU1JywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdGQVEjNTU1NTU1OiBUaGUgRkFRIHRpdGxlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnRjoyMjIyMicsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnRkFRIzIyMjIyOiBUaXRsZSBvZiBGQVEgMjIyMjInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFBhcmVudENoaWxkOjpUYXJnZXQgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0Y6Nzc3NzcnLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gJ0ZBUSM3Nzc3NzogRkFRIHRpdGxlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7Cgo9Y3V0CgpzdWIgVGFibGVDcmVhdGVTaW1wbGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IHx8IHJlZiAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBPYmplY3RMaW5rTGlzdFdpdGhEYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJEZBUUhvb2sgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpGQVFIb29rJyk7CiAgICBteSAlTGlua091dHB1dERhdGE7CiAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB9ICkgewoKICAgICAgICAjIGV4dHJhY3QgbGluayB0eXBlIExpc3QKICAgICAgICBteSAkTGlua1R5cGVMaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfTsKCiAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkaXJlY3Rpb24gbGlzdAogICAgICAgICAgICBteSAkRGlyZWN0aW9uTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufTsKCiAgICAgICAgICAgIG15IEBJdGVtTGlzdDsKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JERpcmVjdGlvbkxpc3R9ICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCB0aWNrdCBkYXRhCiAgICAgICAgICAgICAgICBteSAkRkFRID0gJERpcmVjdGlvbkxpc3QtPnskRkFRSUR9OwoKICAgICAgICAgICAgICAgICMgZGVmaW5lIGl0ZW0gZGF0YQogICAgICAgICAgICAgICAgbXkgJUl0ZW0gPSAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnRjonIC4gJEZBUS0+e051bWJlcn0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAiJEZBUUhvb2skRkFRLT57TnVtYmVyfTogJEZBUS0+e1RpdGxlfSIsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICA9PiAnJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPScgLiAkRkFRSUQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcHVzaCBASXRlbUxpc3QsIFwlSXRlbTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgaXRlbSBsaXN0IHRvIGxpbmsgb3V0cHV0IGRhdGEKICAgICAgICAgICAgJExpbmtPdXRwdXREYXRheyAkTGlua1R5cGUgLiAnOjonIC4gJERpcmVjdGlvbiB9LT57RkFRfSA9IFxASXRlbUxpc3Q7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlTGlua091dHB1dERhdGE7Cn0KCj1pdGVtIENvbnRlbnRTdHJpbmdDcmVhdGUoKQoKcmV0dXJuIGEgb3V0cHV0IHN0cmluZwoKICAgIG15ICRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5Db250ZW50U3RyaW5nQ3JlYXRlKAogICAgICAgIENvbnRlbnREYXRhID0+ICRIYXNoUmVmLAogICAgKTsKCj1jdXQKCnN1YiBDb250ZW50U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDb250ZW50RGF0YX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbnRlbnREYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuOwp9Cgo9aXRlbSBTZWxlY3RhYmxlT2JqZWN0TGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgaGFzaCB3aXRoIHNlbGVjdGFibGUgb2JqZWN0cwoKICAgIG15IEBTZWxlY3RhYmxlT2JqZWN0TGlzdCA9ICRMaW5rT2JqZWN0LT5TZWxlY3RhYmxlT2JqZWN0TGlzdCgKICAgICAgICBTZWxlY3RlZCA9PiAkSWRlbnRpZmllciwgICMgKG9wdGlvbmFsKQogICAgKTsKCmEgcmVzdWx0IGNvdWxkIGJlCgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0ZBUScsCiAgICAgICAgICAgIFZhbHVlID0+ICdGQVEnLAogICAgICAgIH0sCiAgICApOwoKPWN1dAoKc3ViIFNlbGVjdGFibGVPYmplY3RMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGVjdGVkOwogICAgaWYgKCAkUGFyYW17U2VsZWN0ZWR9ICYmICRQYXJhbXtTZWxlY3RlZH0gZXEgJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0gKSB7CiAgICAgICAgJFNlbGVjdGVkID0gMTsKICAgIH0KCiAgICAjIG9iamVjdCBzZWxlY3QgbGlzdAogICAgbXkgQE9iamVjdFNlbGVjdExpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSwKICAgICAgICAgICAgVmFsdWUgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e1JlYWxuYW1lfSwKICAgICAgICAgICAgU2VsZWN0ZWQgPT4gJFNlbGVjdGVkLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBAT2JqZWN0U2VsZWN0TGlzdDsKfQoKPWl0ZW0gU2VhcmNoT3B0aW9uTGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgaGFzaCB3aXRoIHNlYXJjaCBvcHRpb25zCgogICAgbXkgQFNlYXJjaE9wdGlvbkxpc3QgPSAkTGlua09iamVjdC0+U2VhcmNoT3B0aW9uTGlzdCgKICAgICAgICBTdWJPYmplY3QgPT4gJ0JsYScsICAjIChvcHRpb25hbCkKICAgICk7CgphIHJlc3VsdCBjb3VsZCBiZQoKICAgIEBTZWFyY2hPcHRpb25MaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdOdW1iZXInLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ0ZBUSMnLAogICAgICAgICAgICBJbnB1dFN0cmcgPT4gJEZvcm1TdHJpbmcsCiAgICAgICAgICAgIEZvcm1EYXRhICA9PiAnMTIzNCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgICA9PiAnVGl0bGUnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RpdGxlJywKICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRGb3JtU3RyaW5nLAogICAgICAgICAgICBGb3JtRGF0YSAgPT4gJ0JsYUJsYScsCiAgICAgICAgfSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoT3B0aW9uTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2VhcmNoIG9wdGlvbiBsaXN0CiAgICBteSAkRkFRSG9vayAgICAgICAgICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkZBUUhvb2snKTsKICAgIG15IEBTZWFyY2hPcHRpb25MaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgTmFtZSA9PiAkRkFRSG9vaywKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgPT4gJ1RpdGxlJywKICAgICAgICAgICAgTmFtZSA9PiAnVGl0bGUnLAogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnV2hhdCcsCiAgICAgICAgICAgIE5hbWUgPT4gJ0Z1bGx0ZXh0JywKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9ybWtleQogICAgZm9yIG15ICRSb3cgKEBTZWFyY2hPcHRpb25MaXN0KSB7CiAgICAgICAgJFJvdy0+e0Zvcm1LZXl9ID0gJ1NFQVJDSDo6JyAuICRSb3ctPntLZXl9OwogICAgfQoKICAgICMgYWRkIGZvcm0gZGF0YSBhbmQgaW5wdXQgc3RyaW5nCiAgICBST1c6CiAgICBmb3IgbXkgJFJvdyAoQFNlYXJjaE9wdGlvbkxpc3QpIHsKCiAgICAgICAgIyBwcmVwYXJlIHRleHQgaW5wdXQgZmllbGRzCiAgICAgICAgaWYgKCAkUm93LT57VHlwZX0gZXEgJ1RleHQnICkgewoKICAgICAgICAgICAgIyBnZXQgZm9ybSBkYXRhCiAgICAgICAgICAgICRSb3ctPntGb3JtRGF0YX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRSb3ctPntGb3JtS2V5fSApOwoKICAgICAgICAgICAgIyBwYXJzZSB0aGUgaW5wdXQgdGV4dCBibG9jawogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5wdXRUZXh0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRSb3ctPntGb3JtS2V5fSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUm93LT57Rm9ybURhdGF9IHx8ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICAgICAgJFJvdy0+e0lucHV0U3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnTGlua09iamVjdCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFJPVzsKICAgICAgICB9CgogICAgICAgICMgcHJlcGFyZSBsaXN0IGJveGVzCiAgICAgICAgaWYgKCAkUm93LT57VHlwZX0gZXEgJ0xpc3QnICkgewoKICAgICAgICAgICAgIyBnZXQgZm9ybSBkYXRhCiAgICAgICAgICAgIG15IEBGb3JtRGF0YSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheSggUGFyYW0gPT4gJFJvdy0+e0Zvcm1LZXl9ICk7CiAgICAgICAgICAgICRSb3ctPntGb3JtRGF0YX0gPSBcQEZvcm1EYXRhOwoKICAgICAgICAgICAgbXkgJUxpc3REYXRhOwogICAgICAgICAgICBpZiAoICRSb3ctPntLZXl9IGVxICdTdGF0ZUlEcycgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgc3RhdGUgbGlzdAogICAgICAgICAgICAgICAgJUxpc3REYXRhID0gJFNlbGYtPntTdGF0ZU9iamVjdH0tPlN0YXRlTGlzdCgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgdGhlIGlucHV0IHN0cmluZwogICAgICAgICAgICAkUm93LT57SW5wdXRTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgID0+IFwlTGlzdERhdGEsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICRSb3ctPntGb3JtS2V5fSwKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFJvdy0+e0Zvcm1EYXRhfSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgPT4gMywKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgUk9XOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gQFNlYXJjaE9wdGlvbkxpc3Q7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok91dHB1dEZpbHRlckZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhQYXJhbU9iamVjdCBDb25maWdPYmplY3QgTWFpbk9iamVjdCBMb2dPYmplY3QgTGF5b3V0T2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZGF0YQogICAgcmV0dXJuIGlmICEkUGFyYW17RGF0YX07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtEYXRhfSBuZSAnU0NBTEFSJzsKICAgIHJldHVybiBpZiAhJHsgJFBhcmFte0RhdGF9IH07CiAgICByZXR1cm4gaWYgISRQYXJhbXtUZW1wbGF0ZUZpbGV9OwoKICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0xheW91dE9iamVjdH0tPntFbnZSZWZ9LT57J1VzZXJJc0dyb3VwUm9bZmFxXSd9OwoKICAgICMgZ2V0IGFsbG93ZWQgdGVtcGxhdGUgbmFtZXMKICAgIG15ICRWYWxpZFRlbXBsYXRlcyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGcm9udGVuZDo6T3V0cHV0OjpGaWx0ZXJFbGVtZW50UG9zdCcpLT57RkFRfS0+e1RlbXBsYXRlc307CgogICAgIyBjaGVjayB0ZW1wbGF0ZSBuYW1lCiAgICByZXR1cm4gaWYgISRWYWxpZFRlbXBsYXRlcy0+eyAkUGFyYW17VGVtcGxhdGVGaWxlfSB9OwoKICAgICMgaWYgbm8gc2Vzc2lvbiBjb29raWVzIGFyZSB1c2VkIHdlIGF0dGFjaCB0aGUgc2Vzc2lvbiBhcyBVUkwgcGFyYW1ldGVyCiAgICBteSAkU2Vzc2lvblN0cmluZyA9ICcnOwogICAgaWYgKCAhJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1Nlc3Npb25Vc2VDb29raWUnKSApIHsKICAgICAgICBteSAkU2Vzc2lvbklEID0gJFBhcmFte1Nlc3Npb25JRH0KICAgICAgICAgICAgfHwgJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU2Vzc2lvbk5hbWUnKSApCiAgICAgICAgICAgIHx8ICcnOwogICAgICAgICRTZXNzaW9uU3RyaW5nID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1Nlc3Npb25OYW1lJykgLiAnPScgLiAkU2Vzc2lvbklEIC4gJzsnOwogICAgfQoKICAgIG15ICRTdGFydFBhdHRlcm4gICAgPSAnPCEtLSBbIF0gT3V0cHV0RmlsdGVySG9va19UaWNrZXRPcHRpb25zRW5kIFsgXSAtLT4gLis/JzsKICAgIG15ICRGQVFUcmFuc2xhdGFibGUgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnRkFRJyk7CgogICAgIyBhZGQgRkFRIGxpbmsgdG8gYW4gZXhpc3RpbmcgT3B0aW9ucyBibG9jawogICAgIyRGaW5pc2hQYXR0ZXJuIHdpbGwgYmUgcmVwbGFjZWQgYnkgJFJlcGxhY2UKICAgIGlmICggJHsgJFBhcmFte0RhdGF9IH0gPX4gbXsgJFN0YXJ0UGF0dGVybiB9aXhtcyApIHsKCiAgICAgICAgbXkgJEZpbmlzaFBhdHRlcm4gPSAnPC9kaXY+JzsKICAgICAgICBteSAkUmVwbGFjZSAgICAgICA9IDw8IkVORCI7CiAgICAgICAgICAgICAgICAgICAgICAgIDxhICBocmVmPVwiI1wiIGlkPVwiT3B0aW9uRkFRXCI+WyAkRkFRVHJhbnNsYXRhYmxlIF08L2E+Cgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPi8vPCFbQ0RBVEFbCi8qZ2xvYmFsIEZBUTogdHJ1ZSAqLwpGQVEuQWdlbnQuVGlja2V0Q29tcG9zZS5Jbml0RkFRVGlja2V0Q29tcG9zZShcJCgnI1JpY2hUZXh0JykpOwpcJCgnI09wdGlvbkZBUScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICB2YXIgRkFRSUZyYW1lID0gJzxpZnJhbWUgY2xhc3M9XCJUZXh0T3B0aW9uIEZBUVwiIHNyYz1cIicgKyBDb3JlLkNvbmZpZy5HZXQoJ0NHSUhhbmRsZScpICsgJz8nICsgJyRTZXNzaW9uU3RyaW5nJyArICdBY3Rpb249QWdlbnRGQVFFeHBsb3JlcjtOYXY9Tm9uZTtTdWJqZWN0PTtXaGF0PVwiPjwvaWZyYW1lPic7CiAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZyhGQVFJRnJhbWUsICcnLCAnMTBweCcsICdDZW50ZXInLCB0cnVlKTsKICAgIHJldHVybiBmYWxzZTsKfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CkVORAogICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHN7ICgkU3RhcnRQYXR0ZXJuKSAkRmluaXNoUGF0dGVybiB9eyQxJFJlcGxhY2V9aXhtczsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGFkZCBGQVEgbGluayBhbmQgaXRzIG93biBibG9jaywgaWYgdGhlcmUgbm8gVGlja2V0T3B0aW9ucyBibG9jayB3YXMgY2FsbGVkCiAgICAkU3RhcnRQYXR0ZXJuID0gJzwhLS0gWyBdIE91dHB1dEZpbHRlckhvb2tfTm9UaWNrZXRPcHRpb25zRmFsbGJhY2sgWyBdIC0tPiAuKz8nOwogICAgbXkgJE9wdGlvbnNUcmFuc2xhdGFibGUgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnT3B0aW9ucycpOwogICAgbXkgJFJlcGxhY2UgICAgICAgICAgICAgPSA8PCJFTkQiOwo8IS0tIE91dHB1dEZpbHRlckhvb2tfTm9UaWNrZXRPcHRpb25zRmFsbGJhY2sgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRPcHRpb25zVHJhbnNsYXRhYmxlOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSAgaHJlZj1cIiNcIiBpZD1cIk9wdGlvbkZBUVwiPlsgJEZBUVRyYW5zbGF0YWJsZSBdPC9hPgoKPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgRkFROiB0cnVlICovCkZBUS5BZ2VudC5UaWNrZXRDb21wb3NlLkluaXRGQVFUaWNrZXRDb21wb3NlKFwkKCcjUmljaFRleHQnKSk7ClwkKCcjT3B0aW9uRkFRJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIHZhciBGQVFJRnJhbWUgPSAnPGlmcmFtZSBjbGFzcz0iVGV4dE9wdGlvbiBGQVEiIHNyYz0iJyArIENvcmUuQ29uZmlnLkdldCgnQ0dJSGFuZGxlJykgKyAnPycgKyAnJFNlc3Npb25TdHJpbmcnICsgJ0FjdGlvbj1BZ2VudEZBUUV4cGxvcmVyO05hdj1Ob25lO1N1YmplY3Q9O1doYXQ9Ij48L2lmcmFtZT4nOwogICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coRkFRSUZyYW1lLCAnJywgJzEwcHgnLCAnQ2VudGVyJywgdHJ1ZSk7CiAgICByZXR1cm4gZmFsc2U7Cn0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJDbGVhclwiPjwvZGl2PgpFTkQKICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHN7ICgkU3RhcnRQYXR0ZXJuKSB9eyRSZXBsYWNlfWl4bXM7CiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlB1YmxpY0hlYWRlck1ldGFGQVFTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBmb3IgKHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgTGF5b3V0T2JqZWN0IFRpbWVPYmplY3QpKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99IHx8IGRpZSAiR290IG5vICRfISI7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlc3Npb24gPSAnJzsKICAgIGlmICggISRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1Nlc3Npb25JRENvb2tpZX0gKSB7CiAgICAgICAgJFNlc3Npb24gPSAnOycgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntTZXNzaW9uTmFtZX0gLiAnPScKICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntTZXNzaW9uSUR9OwogICAgfQoKICAgICMgYnVpbGQgb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gZm9yIEZBUSBudW1iZXIKICAgIG15ICRUaXRsZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQcm9kdWN0TmFtZScpOwoKICAgICRUaXRsZSAuPSAnIC0gUHVibGljICgnIC4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RkFRSG9vaycpIC4gJyknOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZXRhTGluaycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFJlbCAgID0+ICdzZWFyY2gnLAogICAgICAgICAgICBUeXBlICA9PiAnYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCcsCiAgICAgICAgICAgIFRpdGxlID0+ICRUaXRsZSwKICAgICAgICAgICAgSHJlZiAgPT4gJyRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JyAuICRQYXJhbXtDb25maWd9LT57QWN0aW9ufQogICAgICAgICAgICAgICAgLiAnO1N1YmFjdGlvbj1PcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXInIC4gJFNlc3Npb24sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBidWlsZCBvcGVuIHNlYXJjaCBkZXNjcmlwdGlvbiBmb3IgRkFRIGZ1bGx0ZXh0CiAgICBteSAkRnVsbHRleHQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnRkFRRnVsbHRleHQnKTsKICAgICRUaXRsZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQcm9kdWN0TmFtZScpOwogICAgJFRpdGxlIC49ICcgLSBQdWJsaWMgKCcgLiAkRnVsbHRleHQgLiAnKSc7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01ldGFMaW5rJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgUmVsICAgPT4gJ3NlYXJjaCcsCiAgICAgICAgICAgIFR5cGUgID0+ICdhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sJywKICAgICAgICAgICAgVGl0bGUgPT4gJFRpdGxlLAogICAgICAgICAgICBIcmVmICA9PiAnJEVudnsiQmFzZWxpbmsifUFjdGlvbj0nIC4gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259CiAgICAgICAgICAgICAgICAuICc7U3ViYWN0aW9uPU9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0JyAuICRTZXNzaW9uLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgQ29tbW9uCiRUZXh0eyJpbnRlcm5hbCJ9CiRUZXh0eyJwdWJsaWMifQokVGV4dHsiZXh0ZXJuYWwifQokVGV4dHsiRkFRIE51bWJlciJ9CiRUZXh0eyJMYXRlc3RDaGFuZ2VkSXRlbXMifQokVGV4dHsiTGF0ZXN0Q3JlYXRlZEl0ZW1zIn0KJFRleHR7IlRvcDEwSXRlbXMifQokVGV4dHsiU3ViQ2F0ZWdvcnlPZiJ9CiRUZXh0eyJObyByYXRlIHNlbGVjdGVkISJ9CiRUZXh0eyJFeHBsb3JlciJ9CgojIEZBUSAnc3RhdGVzJwokVGV4dHsicHVibGljIChhbGwpIn0KJFRleHR7ImV4dGVybmFsIChjdXN0b21lcikifQokVGV4dHsiaW50ZXJuYWwgKGFnZW50KSJ9CgojIFN0YXRzCiRUZXh0eyJTdGFydERheSJ9CiRUZXh0eyJTdGFydE1vbnRoIn0KJFRleHR7IlN0YXJ0WWVhciJ9CiRUZXh0eyJFbmREYXkifQokVGV4dHsiRW5kTW9udGgifQokVGV4dHsiRW5kWWVhciJ9CgojIEFnZW50RkFRWm9vbSBNZW51LU1vZHVsZXMKJFRleHR7IlRoYW5rcyBmb3IgeW91ciB2b3RlISJ9CiRUZXh0eyJObyByYXRlIHNlbGVjdGVkISJ9CiRUZXh0eyJZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISJ9CgojIEZBUSBQcmludCBzY3JlZW5zCiRUZXh0eyJGQVEgQXJ0aWNsZSBQcmludCJ9CgojIFJTUyBGZWVkcwokVGV4dHsiRkFRIEFydGljbGVzIChUb3AgMTApIn0KJFRleHR7IkZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpIn0KJFRleHR7IkZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCkifQoKIyBBZ2VudEZBUUNhdGVnb3J5LnBtCiRUZXh0eyJGQVEgY2F0ZWdvcnkgdXBkYXRlZCEifQokVGV4dHsiRkFRIGNhdGVnb3J5IGFkZGVkISJ9CiRUZXh0eyJBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEifQokVGV4dHsiVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyJ9CgojIEFnZW50RkFRTGFuZ3VhZ2UucG0KJFRleHR7IkZBUSBsYW5ndWFnZSBhZGRlZCEifQokVGV4dHsiRkFRIGxhbmd1YWdlIHVwZGF0ZWQhIn0KJFRleHR7IlRoZSBuYW1lIGlzIHJlcXVpcmVkISJ9CiRUZXh0eyJUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISJ9CiRUZXh0eyJUaGUgbmFtZSBpcyByZXF1aXJlZCEifQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KCiAgICA8aDE+JFRleHR7IkFkZCBGQVEgQXJ0aWNsZSJ9PC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KCjwhLS0gZHRsOmJsb2NrOkZBUUFkZCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iLz4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNhdmUiLz4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkZvcm1JRCIgdmFsdWU9IiRRRGF0YXsiRm9ybUlEIn0iLz4KCiAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlRpdGxlIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qIDwvc3Bhbj4kVGV4dHsiVGl0bGUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlRpdGxlIiBpZD0iVGl0bGUiIHZhbHVlPSIkUURhdGF7IlRpdGxlIn0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IlRpdGxlU2VydmVyRXJyb3IifSIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGl0bGVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaXRsZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJLZXl3b3JkcyI+JFRleHR7IktleXdvcmRzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJLZXl3b3JkcyIgaWQ9IktleXdvcmRzIiB2YWx1ZT0iJFFEYXRheyJLZXl3b3JkcyJ9IiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJDYXRlZ29yeUlEIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qIDwvc3Bhbj4kVGV4dHsiQ2F0ZWdvcnkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IkNhdGVnb3J5T3B0aW9uIn0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ2F0ZWdvcnlJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNhdGVnb3J5SURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IkEgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU3RhdGVJRCI+JFRleHR7IlN0YXRlIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJTdGF0ZU9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj4kVGV4dHsiVmFsaWRpdHkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlZhbGlkT3B0aW9uIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+Cgo8IS0tIGR0bDpibG9jazpMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJMYW5ndWFnZUlEIj4kVGV4dHsiTGFuZ3VhZ2UifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7Ikxhbmd1YWdlT3B0aW9uIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOkxhbmd1YWdlIC0tPgoKPCEtLSBkdGw6YmxvY2s6Tm9MYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMYW5ndWFnZUlEIiB2YWx1ZT0iJFFEYXRheyJMYW5ndWFnZUlEIn0iLz4KPCEtLSBkdGw6YmxvY2s6Tm9MYW5ndWFnZSAtLT4KCgo8IS0tIGR0bDpibG9jazpBcHByb3ZhbCAtLT4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJBcHByb3ZlZCI+JFRleHR7IkFwcHJvdmFsIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJBcHByb3ZhbE9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpBcHByb3ZhbCAtLT4KCjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRVcGxvYWQgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJBdHRhY2htZW50In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KPCEtLSBkdGw6YmxvY2s6QXR0YWNobWVudCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkZpbGVuYW1lIn0gKCRRRGF0YXsiRmlsZXNpemUifSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgaWQ9IkF0dGFjaG1lbnREZWxldGUkUURhdGF7IkZpbGVJRCJ9IiBuYW1lPSJBdHRhY2htZW50RGVsZXRlJFFEYXRheyJGaWxlSUQifSIgdmFsdWU9IiRUZXh0eyJEZWxldGUifSI+JFRleHR7IkRlbGV0ZSJ9PC9idXR0b24+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjQXR0YWNobWVudERlbGV0ZSRRRGF0YXsiRmlsZUlEIn0nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuRGlzYWJsZVZhbGlkYXRpb24oJCgnI0F0dGFjaG1lbnREZWxldGUkUURhdGF7IkZpbGVJRCJ9JykuY2xvc2VzdCgnZm9ybScpKTsKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJGaWxlVXBsb2FkIiBpZD0iRmlsZVVwbG9hZCIgdHlwZT0iZmlsZSIgc2l6ZT0iNDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iQXR0YWNobWVudFVwbG9hZCIgbmFtZT0iQXR0YWNobWVudFVwbG9hZCIgdmFsdWU9IjAiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjRmlsZVVwbG9hZCcpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkRm9ybSA9ICQoJyNGaWxlVXBsb2FkJykuY2xvc2VzdCgnZm9ybScpOwogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkRm9ybSk7CiAgICAgICAgJEZvcm0uZmluZCgnI0F0dGFjaG1lbnRVcGxvYWQnKS52YWwoJzEnKS5lbmQoKS5zdWJtaXQoKTsKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+Cgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50VXBsb2FkIC0tPgoKPCEtLSBkdGw6YmxvY2s6UmljaFRleHQgLS0+CiRJbmNsdWRleyJSaWNoVGV4dEVkaXRvciJ9CjwhLS0gZHRsOmJsb2NrOlJpY2hUZXh0IC0tPgoKPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudCAtLT4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSIkUURhdGF7IkZpZWxkIn0iPiRUZXh0eyIkRGF0YXsiQ2FwdGlvbiJ9In06PGJyLz48c3BhbiBjbGFzcz0iRkFRU3RhdGVOYW1lIj4oJFRleHR7IiREYXRheyJTdGF0ZU5hbWUifSJ9KTwvc3Bhbj48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IiRRRGF0YXsiRmllbGQifSIgY2xhc3M9IlJpY2hUZXh0IiBuYW1lPSIkUURhdGF7IkZpZWxkIn0iIHJvd3M9IjE1IiBjb2xzPSI3MCI+JFFEYXRheyJDb250ZW50In08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudCAtLT4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+JFRleHR7IlN1Ym1pdCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRGQVFFeHBsb3JlcjtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifSI+JFRleHR7IkNhbmNlbCJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkZBUUFkZCAtLT4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdCAtLT4KPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpJbmZvQm94RkFRTWluaUxpc3RJdGVtUm93IC0tPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPSRMUURhdGF7Ikl0ZW1JRCJ9IiBjbGFzcz0iQXNCbG9jayIgdGl0bGU9IiRRRGF0YXsiVGl0bGUifSAoJFFEYXRheyJDYXRlZ29yeU5hbWUifSkiPgogICAgICAgICAgICAgICAgICAgICRRRGF0YXsiVGl0bGUiLCI1MCJ9CiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkNhdGVnb3J5U2hvcnROYW1lIn0gJFRpbWVTaG9ydHsiJERhdGF7IkNoYW5nZWQifSJ9CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6SW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdyAtLT4KICAgIDwvdGJvZHk+CjwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdCAtLT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMT4kVGV4dHsiRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQifTwvaDE+CiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uTGlzdCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJBY3Rpb25zIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgo8IS0tIGR0bDpibG9jazpBY3Rpb25PdmVydmlldyAtLT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIj48c3Bhbj4kVGV4dHsiR28gdG8gb3ZlcnZpZXcifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uT3ZlcnZpZXcgLS0+Cgo8IS0tIGR0bDpibG9jazpBY3Rpb25BZGQgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1BZGQiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFBsdXMiPjxzcGFuPiRUZXh0eyJBZGQgY2F0ZWdvcnkifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uQWRkIC0tPgoKICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpBY3Rpb25MaXN0IC0tPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHQgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7Ikxpc3QifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIFZhcmlhYmxlV2lkdGgiIHN1bW1hcnk9IkZBUSBjYXRlZ29yaWVzIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiTmFtZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiVmFsaWRpdHkifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkRlbGV0ZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUNoYW5nZTtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifSI+JFFEYXRheyJOYW1lIn08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kVGV4dHsiJERhdGF7IlZhbGlkIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciBMYXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iRGVsZXRlQ2F0ZWdvcnlJRCRRRGF0YXsiQ2F0ZWdvcnlJRCJ9IiBjbGFzcz0iVHJhc2hDYW4iIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiRGVsZXRlIn06ICRRRGF0YXsiTmFtZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgRkFROiB0cnVlICovCiAgICBGQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLkJpbmRDb25maXJtYXRpb25EaWFsb2coewogICAgICAgIEVsZW1lbnRJRDogICAgICAgICAgICAgICAgICAnRGVsZXRlQ2F0ZWdvcnlJRCRRRGF0YXsiQ2F0ZWdvcnlJRCJ9JywKICAgICAgICBFbGVtZW50U2VsZWN0b3I6ICAgICAgICAgICAgJyNEZWxldGVDYXRlZ29yeUlEJFFEYXRheyJDYXRlZ29yeUlEIn0nLAogICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICAnQWN0aW9uPUFnZW50RkFRQ2F0ZWdvcnk7U3ViYWN0aW9uPURlbGV0ZTtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifScsCiAgICAgICAgQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmc6ICdBY3Rpb249QWdlbnRGQVFDYXRlZ29yeTtTdWJhY3Rpb249RGVsZXRlQWN0aW9uO0NhdGVnb3J5SUQ9JExRRGF0YXsiQ2F0ZWdvcnlJRCJ9JywKICAgICAgICBEaWFsb2dUaXRsZTogICAgICAgICAgICAgICAgJyRKU1RleHR7IkRlbGV0ZSBDYXRlZ29yeSJ9JywKICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICBZZXM6ICckSlNUZXh0eyJZZXMifScsCiAgICAgICAgICAgIE5vOiAgJyRKU1RleHR7Ik5vIn0nLAogICAgICAgICAgICBPazogICckSlNUZXh0eyJPayJ9JwogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0IC0tPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdVcGRhdGUgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZCAtLT4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWRkIENhdGVnb3J5In08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJBZGQgLS0+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXQgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkVkaXQgQ2F0ZWdvcnkifTwvaDI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXQgLS0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IiRMUURhdGF7IkFjdGlvbiJ9QWN0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2F0ZWdvcnlJRCIgdmFsdWU9IiRRRGF0YXsiQ2F0ZWdvcnlJRCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTmFtZSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7Ik5hbWUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIHZhbHVlPSIkUURhdGF7Ik5hbWUifSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiTmFtZVNlcnZlckVycm9yIn0iIG1heGxlbmd0aD0iNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiJERhdGF7Ik5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UifSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJQYXJlbnRJRCI+JFRleHR7IlN1YmNhdGVnb3J5IG9mIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IkNhdGVnb3J5T3B0aW9uIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkNvbW1lbnQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJDb21tZW50In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNvbW1lbnQiIGlkPSJDb21tZW50IiB2YWx1ZT0iJFFEYXRheyJDb21tZW50In0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IkNvbW1lbnRTZXJ2ZXJFcnJvciJ9IiBtYXhsZW5ndGg9IjgwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDb21tZW50RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29tbWVudFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPiRUZXh0eyJXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPiRUZXh0eyJWYWxpZGl0eSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJWYWxpZE9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJQZXJtaXNzaW9uR3JvdXBzIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiUGVybWlzc2lvbiJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJHcm91cE9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQZXJtaXNzaW9uR3JvdXBzRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBncm91cC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGVybWlzc2lvbkdyb3Vwc1NlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPiRUZXh0eyJBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9Ij4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld1VwZGF0ZSAtLT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+CgoKPCEtLSBkdGw6YmxvY2s6RGVsZXRlIC0tPgoKPCEtLSBkdGw6YmxvY2s6Tm9BZmZlY3RlZCAtLT4KPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgVzMwMHB4Ij4KICAgIDxsYWJlbD4kVGV4dHsiQ2F0ZWdvcnkifTo8L2xhYmVsPgogICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAkUURhdGF7Ik5hbWUifQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2ZpZWxkc2V0Pgo8cCBjbGFzcz0iU3BhY2luZ1RvcCBDZW50ZXIiPgogICAgJFRleHR7IkRvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8ifQo8L3A+CjwhLS0gZHRsOmJsb2NrOk5vQWZmZWN0ZWQgLS0+Cgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZCAtLT4KPHA+CiAgICAkVGV4dHsiWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5In0KPC9wPgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZCAtLT4KCjwhLS0gZHRsOmJsb2NrOkFmZmVjdGVkSXRlbXMgLS0+CjxwIGNsYXNzPSJTcGFjaW5nVG9wIFNwYWNpbmdCb3R0b20iPgogICAgJFRleHR7IlRoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpIn06CjwvcD4KPHVsPgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZEl0ZW1zUm93IC0tPgogICAgPGxpIGNsYXNzPSJJbmRlbnQgU3BhY2luZ0JvdHRvbVNtYWxsIj4KICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9JERhdGF7IkxpbmsifTtBY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0kTFFEYXRheyJJdGVtSUQifSI+CiAgICAgICAgICAgICRDb25maWd7IkZBUTo6RkFRSG9vayJ9OiRRRGF0YXsiTnVtYmVyIn08c3Bhbj4mbmJzcDsmbWRhc2g7PC9zcGFuPiAkUURhdGF7IlRpdGxlIiwgIjYwIn0KICAgICAgICA8L2E+CiAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZEl0ZW1zUm93IC0tPgo8L3VsPgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZEl0ZW1zIC0tPgoKPCEtLSBkdGw6YmxvY2s6QWZmZWN0ZWRTdWJDYXRlZ29yaWVzIC0tPgo8cCBjbGFzcz0iU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tIj4KICAgICRUZXh0eyJUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMifToKPC9wPgo8dWw+CjwhLS0gZHRsOmJsb2NrOkFmZmVjdGVkU3ViQ2F0ZWdvcmllc1JvdyAtLT4KICAgIDxsaSBjbGFzcz0iSW5kZW50IFNwYWNpbmdCb3R0b21TbWFsbCI+CiAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifSREYXRheyJMaW5rIn07QWN0aW9uPUFnZW50RkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD0kTFFEYXRheyJDYXRlZ29yeUlEIn0iPgogICAgICAgICAgICAkUURhdGF7IkxvbmdOYW1lIn0KICAgICAgICA8L2E+CiAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZFN1YkNhdGVnb3JpZXNSb3cgLS0+CjwvdWw+CjwhLS0gZHRsOmJsb2NrOkFmZmVjdGVkU3ViQ2F0ZWdvcmllcyAtLT4KCjwhLS0gZHRsOmJsb2NrOkRlbGV0ZSAtLT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFczMDBweCI+CiAgICA8bGFiZWw+JFRleHR7IlRpdGxlIn06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgJFFEYXRheyJUaXRsZSJ9CiAgICA8L3A+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZmllbGRzZXQ+CjxwIGNsYXNzPSJTcGFjaW5nVG9wIENlbnRlciI+CiAgICAkVGV4dHsiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyJ9CjwvcD4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS1kdGw6YmxvY2s6U3RhcnROb3JtYWwtLT4KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgIDxoMT4kVGV4dHsiRWRpdCJ9OiAkVGV4dHsiRkFRIn06ICRRRGF0YXsiTnVtYmVyIn08L2gxPgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CjwhLS1kdGw6YmxvY2s6U3RhcnROb3JtYWwtLT4KCjwhLS1kdGw6YmxvY2s6U3RhcnRTbWFsbC0tPgogICAgICAgIDxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgxPiRUZXh0eyJFZGl0In06ICRUZXh0eyJGQVEifTogJFFEYXRheyJOdW1iZXIifTwvaDE+CiAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCI+JFRleHR7IkNhbmNlbCAmIGNsb3NlIHdpbmRvdyJ9PC9hPgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8L2Rpdj4KPCEtLWR0bDpibG9jazpTdGFydFNtYWxsLS0+Cgo8IS0tIGR0bDpibG9jazpGQVFFZGl0IC0tPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTYXZlIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybUlEIiB2YWx1ZT0iJFFEYXRheyJGb3JtSUQifSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikl0ZW1JRCIgdmFsdWU9IiRRRGF0YXsiSXRlbUlEIn0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTY3JlZW5UeXBlIiB2YWx1ZT0iJFFEYXRheyJTY3JlZW5UeXBlIn0iLz4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVGl0bGUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPiogPC9zcGFuPiRUZXh0eyJUaXRsZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJUaXRsZSIgaWQ9IlRpdGxlIiB2YWx1ZT0iJFFEYXRheyJUaXRsZSJ9IiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJUaXRsZVNlcnZlckVycm9yIn0iIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaXRsZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaXRsZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJLZXl3b3JkcyI+JFRleHR7IktleXdvcmRzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IktleXdvcmRzIiBpZD0iS2V5d29yZHMiIHZhbHVlPSIkUURhdGF7IktleXdvcmRzIn0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkNhdGVnb3J5SUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPiogPC9zcGFuPiRUZXh0eyJDYXRlZ29yeSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJDYXRlZ29yeU9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDYXRlZ29yeUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ2F0ZWdvcnlJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IkEgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlN0YXRlSUQiPiRUZXh0eyJTdGF0ZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJTdGF0ZU9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj4kVGV4dHsiVmFsaWRpdHkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiVmFsaWRPcHRpb24ifQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ikxhbmd1YWdlSUQiPiRUZXh0eyJMYW5ndWFnZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJMYW5ndWFnZU9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOkxhbmd1YWdlIC0tPgoKPCEtLSBkdGw6YmxvY2s6Tm9MYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTGFuZ3VhZ2VJRCIgdmFsdWU9IiRRRGF0YXsiTGFuZ3VhZ2VJRCJ9Ii8+CjwhLS0gZHRsOmJsb2NrOk5vTGFuZ3VhZ2UgLS0+Cgo8IS0tIGR0bDpibG9jazpBcHByb3ZhbCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQXBwcm92ZWQiPiRUZXh0eyJBcHByb3ZhbCJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJBcHByb3ZhbE9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOkFwcHJvdmFsIC0tPgoKPCEtLSBkdGw6YmxvY2s6QXR0YWNobWVudFVwbG9hZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJBdHRhY2htZW50In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJGaWxlbmFtZSJ9ICgkUURhdGF7IkZpbGVzaXplIn0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBpZD0iQXR0YWNobWVudERlbGV0ZSRRRGF0YXsiRmlsZUlEIn0iIG5hbWU9IkF0dGFjaG1lbnREZWxldGUkUURhdGF7IkZpbGVJRCJ9IiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9Ij4kVGV4dHsiRGVsZXRlIn08L2J1dHRvbj4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNBdHRhY2htZW50RGVsZXRlJFFEYXRheyJGaWxlSUQifScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkKCcjQXR0YWNobWVudERlbGV0ZSRRRGF0YXsiRmlsZUlEIn0nKS5jbG9zZXN0KCdmb3JtJykpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkZpbGVVcGxvYWQiIGlkPSJGaWxlVXBsb2FkIiB0eXBlPSJmaWxlIiBzaXplPSI0MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iQXR0YWNobWVudFVwbG9hZCIgbmFtZT0iQXR0YWNobWVudFVwbG9hZCIgdmFsdWU9IjAiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+Cgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnI0ZpbGVVcGxvYWQnKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB2YXIgJEZvcm0gPSAkKCcjRmlsZVVwbG9hZCcpLmNsb3Nlc3QoJ2Zvcm0nKTsKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuRGlzYWJsZVZhbGlkYXRpb24oJEZvcm0pOwogICAgICAgICRGb3JtLmZpbmQoJyNBdHRhY2htZW50VXBsb2FkJykudmFsKCcxJykuZW5kKCkuc3VibWl0KCk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgoKPCEtLSBkdGw6YmxvY2s6QXR0YWNobWVudFVwbG9hZCAtLT4KCjwhLS0gZHRsOmJsb2NrOlJpY2hUZXh0IC0tPgokSW5jbHVkZXsiUmljaFRleHRFZGl0b3IifQo8IS0tIGR0bDpibG9jazpSaWNoVGV4dCAtLT4KCjwhLS0gZHRsOmJsb2NrOkZBUUNvbnRlbnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IiRRRGF0YXsiRmllbGQifSI+JFRleHR7IiREYXRheyJDYXB0aW9uIn0ifTo8YnIvPjxzcGFuIGNsYXNzPSJGQVFTdGF0ZU5hbWUiPigkVGV4dHsiJERhdGF7IlN0YXRlTmFtZSJ9In0pPC9zcGFuPjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSIkUURhdGF7IkZpZWxkIn0iIGNsYXNzPSJSaWNoVGV4dCIgbmFtZT0iJFFEYXRheyJGaWVsZCJ9IiByb3dzPSIxNSIgY29scz0iNzAiPiRRRGF0YXsiQ29udGVudCJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudCAtLT4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgoKICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkZBUUVkaXQgLS0+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+Cgo8IS0tIGR0bDpibG9jazpFbmRTbWFsbCAtLT4KICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RW5kU21hbGwgLS0+Cgo8IS0tIGR0bDpibG9jazpFbmROb3JtYWwgLS0+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkVuZE5vcm1hbCAtLT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIEZBUSI+CiAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgPGgxPiRUZXh0eyJGQVEgRXhwbG9yZXIifTwvaDE+CgogICAgPGRpdiBjbGFzcz0iRkFRUGF0aENhdGVnb3J5Ij4KICAgICAgICA8aDM+CjwhLS0gZHRsOmJsb2NrOkZBUVBhdGhDYXRlZ29yeUVsZW1lbnQgLS0+CiAgICAgICAgICAgICRDb25maWd7IkZBUTo6RXhwbG9yZXI6OlBhdGg6OlNlcGFyYXRvciJ9CiAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRGQVFFeHBsb3JlcjtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifTtOYXY9JExRRGF0YXsiTmF2In0iPgogICAgICAgICAgICAgICAgJFFEYXRheyJOYW1lIn0KICAgICAgICAgICAgPC9hPgo8IS0tIGR0bDpibG9jazpGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IC0tPgogICAgICAgIDwvaDM+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uICRRRGF0YXsiU2lkZWJhckNsYXNzIn0iPgoKPCEtLSBkdGw6YmxvY2s6UXVpY2tTZWFyY2ggLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMz4kVGV4dHsiU2VhcmNoIn08L2gzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25saXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9IlNlYXJjaEJveCIgYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkUURhdGF7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VhcmNoIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTmF2IiB2YWx1ZT0iJFFEYXRheyJOYXYifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJGdWxsdGV4dCIgdmFsdWU9IiRRRGF0YXsiU2VhcmNoIn0iIGlkPSJTZWFyY2giIHRpdGxlPSIkVGV4dHsiU2VhcmNoIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTZWFyY2gifSI+JFRleHR7IlF1aWNrIFNlYXJjaCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IldpbGRjYXJkcyBhcmUgYWxsb3dlZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZBUVNlYXJjaEJ1dHRvbiBTcGFjaW5nVG9wIiBpZD0iJExRRGF0YXsiQWN0aW9uIn0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JExRRGF0YXsiQWN0aW9uIn07TmF2PSRMUURhdGF7Ik5hdiJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiQWR2YW5jZWQgU2VhcmNoIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNBZ2VudEZBUVNlYXJjaCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5BZ2VudC5TZWFyY2guT3BlblNlYXJjaERpYWxvZygnQWdlbnRGQVFTZWFyY2gnKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgoKPCEtLSBkdGw6YmxvY2s6UXVpY2tTZWFyY2ggLS0+Cgo8IS0tIGR0bDpibG9jazpJbmZvQm94RkFRTWluaUxpc3QgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiJERhdGF7IkhlYWRlciJ9In08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IlRhYmxlbGlrZSBGQVFNaW5pTGlzdCI+CjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KPCEtLSBkdGw6YmxvY2s6SW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvd1Bvc2l0aW9uTnVtYmVyIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJOdW1iZXIifS4KPCEtLSBkdGw6YmxvY2s6SW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvd1Bvc2l0aW9uTnVtYmVyIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPSRMUURhdGF7Ikl0ZW1JRCJ9O05hdj0kTFFEYXRheyJOYXYifSIgdGl0bGU9IiRRRGF0YXsiVGl0bGUifSAoJFFEYXRheyJDYXRlZ29yeU5hbWUifSkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiVGl0bGUiLCI1MCJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkNhdGVnb3J5U2hvcnROYW1lIiwiMTUifSAkUURhdGF7Ikxhbmd1YWdlIn0gJFRleHR7IiREYXRheyJTdGF0ZSJ9In0gJFRpbWVTaG9ydHsiJERhdGF7IkNyZWF0ZWQifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6SW5mb0JveEZBUU1pbmlMaXN0IC0tPgoKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KCjwhLS0gZHRsOmJsb2NrOlN1YmNhdGVnb3JpZXMgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0IC0tPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJTdWJjYXRlZ29yaWVzIn08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIHN1bW1hcnk9IkZBUSBjYXRlZ29yaWVzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiTmFtZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkNvbW1lbnQifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJTdWJjYXRlZ29yaWVzIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiRkFRIEFydGljbGVzIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpOb0RhdGFGb3VuZE1zZyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBzdWJjYXRlZ29yaWVzIGZvdW5kLiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iTWFzdGVyQWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2sgTWFzdGVyQWN0aW9uTGluayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifTtOYXY9JExRRGF0YXsiTmF2In0iPiRRRGF0YXsiTmFtZSJ9PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiQ29tbWVudCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJTdWJDYXRlZ29yeUNvdW50In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kUURhdGF7IkFydGljbGVDb3VudCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHQgLS0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN1YmNhdGVnb3JpZXMgLS0+Cgo8IS0tIGR0bDpibG9jazpGQVFJdGVtTGlzdCAtLT4KJERhdGF7IkZBUUl0ZW1MaXN0SFRNTCJ9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RkFRSXRlbUxpc3QgLS0+CgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+CiAgICAgICAgICAgICRUZXh0eyJIaXN0b3J5IG9mIn0gJENvbmZpZ3siRkFROjpGQVFIb29rIn06ICRRRGF0YXsiTnVtYmVyIn0gLSAkUURhdGF7IlRpdGxlIiwiNjAifQogICAgICAgIDwvaDE+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIj4kVGV4dHsiQ2FuY2VsICYgY2xvc2Ugd2luZG93In08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiSGlzdG9yeSBDb250ZW50In0KICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBzdW1tYXJ5PSJGQVEgaGlzdG9yeSBkYXRhIHRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiQWN0aW9uIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJVc2VyIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJDcmVhdGV0aW1lIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgoKPCEtLSBkdGw6YmxvY2s6Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IiREYXRheyJOYW1lIn0ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkNyZWF0ZWRCeSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lTG9uZ3siJERhdGF7IkNyZWF0ZWQifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSb3cgLS0+CgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuQWN0aW9uUm93LkluaXQoKTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cgo8ZGl2IGlkPSJPdmVydmlld0JvZHkiIGNsYXNzPSJPdmVydmlldyBGaXhlZEhlYWRlciI+CjwhLS0gZHRsOmJsb2NrOk5vRkFRRm91bmQgLS0+CiAgICA8ZGl2IGlkPSJFbXB0eU1lc3NhZ2VTbWFsbCI+CiAgICAgICAgJFRleHR7Ik5vIEZBUSBKb3VybmFsIGRhdGEgZm91bmQuIn0KICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpOb0ZBUUZvdW5kIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRGb3JtIC0tPgogICAgPHRhYmxlIGlkPSJGaXhlZFRhYmxlIiBjbGFzcz0iVGFibGVTbWFsbCIgc3VtbWFyeT0iQSBnZW5lcmljIEZBUSB0YWJsZSI+CiAgICAgICAgPHRoZWFkPgogICAgICAgICAgICA8dHI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckhlYWRlciAtLT4KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRkFRTnVtYmVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kQ29uZmlneyJGQVE6OkZBUUhvb2sifTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGl0bGVIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpdGxlIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiVGl0bGUifTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFRpdGxlSGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDYXRlZ29yeUhlYWRlciAtLT4KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2F0ZWdvcnkiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJDYXRlZ29yeSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2F0ZWdvcnlIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5hbWVIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkFjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkFjdGlvbiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTmFtZUhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGltZUhlYWRlciAtLT4KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVGltZSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IlRpbWUifTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFRpbWVIZWFkZXIgLS0+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90aGVhZD4KICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOlJlY29yZCAtLT4KICAgICAgICAgICAgPHRyIGlkPSJJdGVtSURfJFFEYXRheyJJdGVtSUQifV8kUURhdGF7IkNvdW50ZXIifSIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlciAtLT4KICAgICAgICAgICAgICAgIDx0ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVyTGlua1N0YXJ0IC0tPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0kTFFEYXRheyJJdGVtSUQifSIgdGl0bGU9IiRMUURhdGF7Ik51bWJlciJ9IiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJOdW1iZXIifQo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJMaW5rRW5kIC0tPgogICAgICAgICAgICAgICAgICAgIDwvYT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVyTGlua0VuZCAtLT4KICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGl0bGUgLS0+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFFEYXRheyJTdWJqZWN0In0iPiRRRGF0YXsiU3ViamVjdCIsIjQwIn08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFRpdGxlIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDYXRlZ29yeSAtLT4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkVGV4dHsiJERhdGF7IkNhdGVnb3J5In0ifSI+JFRleHR7IiREYXRheyJDYXRlZ29yeSJ9In08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENhdGVnb3J5IC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmROYW1lIC0tPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRUZXh0eyIkRGF0YXsiQWN0aW9uIn0ifSI+JFRleHR7IiREYXRheyJBY3Rpb24ifSJ9PC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmROYW1lIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRUaW1lIC0tPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRUaW1lTG9uZ3siJFFEYXRheyJDcmVhdGVkIn0ifSI+JFRpbWVMb25neyIkUURhdGF7IkNyZWF0ZWQifSJ9PC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRUaW1lIC0tPgogICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgPC90Ym9keT4KICAgIDwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEZvcm0gLS0+CjwvZGl2Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBDb3JlLlVJLkluaXRUYWJsZUhlYWQoJCgnI0ZpeGVkVGFibGUgdGhlYWQnKSwgJCgnI0ZpeGVkVGFibGUgdGJvZHknKSk7CiAgICBDb3JlLlVJLlN0YXRpY1RhYmxlQ29udHJvbCgkKCcjT3ZlcnZpZXdDb250cm9sJykuYWRkKCQoJyNPdmVydmlld0JvZHknKSkpOwogICAgJCgnLk1hc3RlckFjdGlvbicpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgdmFyICRNYXN0ZXJBY3Rpb25MaW5rID0gJCh0aGlzKS5maW5kKCcuTWFzdGVyQWN0aW9uTGluaycpOwogICAgICAgIC8vIG9ubHkgYWN0IGlmIHRoZSBsaW5rIHdhcyBub3QgY2xpY2tlZCBkaXJlY3RseQogICAgICAgIGlmIChFdmVudC50YXJnZXQgIT09ICRNYXN0ZXJBY3Rpb25MaW5rLmdldCgwKSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkTWFzdGVyQWN0aW9uTGluay5hdHRyKCdocmVmJyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9KTsKICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24oKSB7CiAgICAgICAgQ29yZS5VSS5BZGp1c3RUYWJsZUhlYWQoJCgnI092ZXJ2aWV3SGVhZGVyIHRoZWFkJyksICQoJyNPdmVydmlld0JvZHkgdGJvZHknKSk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KCiAgICA8aDE+JFRleHR7IkZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50In08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgoKPCEtLSBkdGw6YmxvY2s6RGlzYWJsZWQgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiTm90aWNlIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWRtaW5TeXNDb25maWciLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJFZGl0Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3lzQ29uZmlnR3JvdXAiIHZhbHVlPSJGQVEiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTeXNDb25maWdTdWJHcm91cCIgdmFsdWU9IkNvcmUiLz4KICAgICAgICAgICAgICAgICAgICA8aDM+JFRleHR7IlRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCEifTwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJFbmFibGUgaXQgaGVyZSEifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkVuYWJsZSBpdCBoZXJlISJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkRpc2FibGVkIC0tPgoKPCEtLSBkdGw6YmxvY2s6QWN0aW9uTGlzdCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWN0aW9ucyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uT3ZlcnZpZXcgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiI+PHNwYW4+JFRleHR7IkdvIHRvIG92ZXJ2aWV3In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbk92ZXJ2aWV3IC0tPgoKPCEtLSBkdGw6YmxvY2s6QWN0aW9uQWRkIC0tPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQbHVzIj48c3Bhbj4kVGV4dHsiQWRkIGxhbmd1YWdlIn08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbkFkZCAtLT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpBY3Rpb25MaXN0IC0tPgogICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0IC0tPgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiTGlzdCJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIFZhcmlhYmxlV2lkdGgiIHN1bW1hcnk9IkZBUSBsYW5ndWFnZXMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJOYW1lIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJEZWxldGUifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIGRhdGEgZm91bmQuIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1DaGFuZ2U7TGFuZ3VhZ2VJRD0kTFFEYXRheyJMYW5ndWFnZUlEIn0iPiRRRGF0YXsiTmFtZSJ9PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciBMYXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iRGVsZXRlTGFuZ3VhZ2VJRCRRRGF0YXsiTGFuZ3VhZ2VJRCJ9IiBjbGFzcz0iVHJhc2hDYW4iIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiRGVsZXRlIn06ICRRRGF0YXsiTmFtZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgRkFROiB0cnVlICovCiAgICBGQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLkJpbmRDb25maXJtYXRpb25EaWFsb2coewogICAgICAgIEVsZW1lbnRJRDogICAgICAgICAgICAgICAgICAnRGVsZXRlTGFuZ3VhZ2VJRCRRRGF0YXsiTGFuZ3VhZ2VJRCJ9JywKICAgICAgICBFbGVtZW50U2VsZWN0b3I6ICAgICAgICAgICAgJyNEZWxldGVMYW5ndWFnZUlEJFFEYXRheyJMYW5ndWFnZUlEIn0nLAogICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICAnQWN0aW9uPUFnZW50RkFRTGFuZ3VhZ2U7U3ViYWN0aW9uPURlbGV0ZTtMYW5ndWFnZUlEPSRMUURhdGF7Ikxhbmd1YWdlSUQifScsCiAgICAgICAgQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmc6ICdBY3Rpb249QWdlbnRGQVFMYW5ndWFnZTtTdWJhY3Rpb249RGVsZXRlQWN0aW9uO0xhbmd1YWdlSUQ9JExRRGF0YXsiTGFuZ3VhZ2VJRCJ9JywKICAgICAgICBEaWFsb2dUaXRsZTogICAgICAgICAgICAgICAgJyRKU1RleHR7IkRlbGV0ZSBMYW5ndWFnZSJ9ICRRRGF0YXsiTmFtZSJ9JywKICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICBZZXM6ICckSlNUZXh0eyJZZXMifScsCiAgICAgICAgICAgIE5vOiAgJyRKU1RleHR7Ik5vIn0nLAogICAgICAgICAgICBPazogICckSlNUZXh0eyJPayJ9JwogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0Um93IC0tPgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHQgLS0+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld1VwZGF0ZSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJBZGQgTGFuZ3VhZ2UifTwvaDI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZCAtLT4KPCEtLSBkdGw6YmxvY2s6SGVhZGVyRWRpdCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJFZGl0IExhbmd1YWdlIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0IC0tPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iJExRRGF0YXsiQWN0aW9uIn1BY3Rpb24iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikxhbmd1YWdlSUQiIHZhbHVlPSIkUURhdGF7Ikxhbmd1YWdlSUQifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJOYW1lIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IiRRRGF0YXsiTmFtZSJ9IiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJOYW1lU2VydmVyRXJyb3IifSIgbWF4bGVuZ3RoPSI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiJERhdGF7Ik5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UifSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+JFRleHR7IlN1Ym1pdCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0iPiRUZXh0eyJDYW5jZWwifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3VXBkYXRlIC0tPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlldyAtLT4KCjwhLS0gZHRsOmJsb2NrOkRlbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6Tm9BZmZlY3RlZEl0ZW1zIC0tPgo8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBXMzAwcHgiPgogICAgPGxhYmVsPiRUZXh0eyJMYW5ndWFnZSJ9OjwvbGFiZWw+CiAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICRRRGF0YXsiTmFtZSJ9CiAgICA8L3A+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZmllbGRzZXQ+CjxwIGNsYXNzPSJTcGFjaW5nVG9wIENlbnRlciI+CiAgICAkVGV4dHsiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyJ9CjwvcD4KPCEtLSBkdGw6YmxvY2s6Tm9BZmZlY3RlZEl0ZW1zIC0tPgoKPCEtLSBkdGw6YmxvY2s6QWZmZWN0ZWRJdGVtcyAtLT4KPHA+CiAgICAkVGV4dHsiWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISJ9CjwvcD4KPHAgY2xhc3M9IlNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbSI+CiAgICAkVGV4dHsiVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocykifToKPC9wPgoKPHVsPgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZEl0ZW1zUm93IC0tPgogICAgPGxpIGNsYXNzPSJJbmRlbnQgU3BhY2luZ0JvdHRvbVNtYWxsIj4KICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9JERhdGF7IkxpbmsifTtBY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0kTFFEYXRheyJJdGVtSUQifSI+CiAgICAgICAgICAgICRDb25maWd7IkZBUTo6RkFRSG9vayJ9OiRRRGF0YXsiTnVtYmVyIn08c3Bhbj4mbmJzcDsmbWRhc2g7PC9zcGFuPiAkUURhdGF7IlRpdGxlIiwgIjYwIn0KICAgICAgICA8L2E+CiAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZEl0ZW1zUm93IC0tPgo8L3VsPgoKPCEtLSBkdGw6YmxvY2s6QWZmZWN0ZWRJdGVtcyAtLT4KPCEtLSBkdGw6YmxvY2s6RGVsZXRlIC0tPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KCiAgICA8aDE+JFRleHR7IkZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50In08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgoKPCEtLSBkdGw6YmxvY2s6RGlzYWJsZWQgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiTm90aWNlIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWRtaW5TeXNDb25maWciLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJFZGl0Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3lzQ29uZmlnR3JvdXAiIHZhbHVlPSJGQVEiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTeXNDb25maWdTdWJHcm91cCIgdmFsdWU9IkNvcmUiLz4KICAgICAgICAgICAgICAgICAgICA8aDM+JFRleHR7IlRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCEifTwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJFbmFibGUgaXQgaGVyZSEifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkVuYWJsZSBpdCBoZXJlISJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkRpc2FibGVkIC0tPgoKPCEtLSBkdGw6YmxvY2s6QWN0aW9uTGlzdCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWN0aW9ucyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uT3ZlcnZpZXcgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiI+PHNwYW4+JFRleHR7IkdvIHRvIG92ZXJ2aWV3In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbk92ZXJ2aWV3IC0tPgoKPCEtLSBkdGw6YmxvY2s6QWN0aW9uQWRkIC0tPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQbHVzIj48c3Bhbj4kVGV4dHsiQWRkIGxhbmd1YWdlIn08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbkFkZCAtLT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpBY3Rpb25MaXN0IC0tPgogICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0IC0tPgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiTGlzdCJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIFZhcmlhYmxlV2lkdGgiIHN1bW1hcnk9IkZBUSBsYW5ndWFnZXMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJOYW1lIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJEZWxldGUifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIGRhdGEgZm91bmQuIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1DaGFuZ2U7TGFuZ3VhZ2VJRD0kTFFEYXRheyJMYW5ndWFnZUlEIn0iPiRRRGF0YXsiTmFtZSJ9PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciBMYXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iRGVsZXRlTGFuZ3VhZ2VJRCRRRGF0YXsiTGFuZ3VhZ2VJRCJ9IiBjbGFzcz0iVHJhc2hDYW4iIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiRGVsZXRlIn06ICRRRGF0YXsiTmFtZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgRkFROiB0cnVlICovCiAgICBGQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLkJpbmRDb25maXJtYXRpb25EaWFsb2coewogICAgICAgIEVsZW1lbnRJRDogICAgICAgICAgICAgICAgICAnRGVsZXRlTGFuZ3VhZ2VJRCRRRGF0YXsiTGFuZ3VhZ2VJRCJ9JywKICAgICAgICBFbGVtZW50U2VsZWN0b3I6ICAgICAgICAgICAgJyNEZWxldGVMYW5ndWFnZUlEJFFEYXRheyJMYW5ndWFnZUlEIn0nLAogICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICAnQWN0aW9uPUFnZW50RkFRTGFuZ3VhZ2U7U3ViYWN0aW9uPURlbGV0ZTtMYW5ndWFnZUlEPSRMUURhdGF7Ikxhbmd1YWdlSUQifScsCiAgICAgICAgQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmc6ICdBY3Rpb249QWdlbnRGQVFMYW5ndWFnZTtTdWJhY3Rpb249RGVsZXRlQWN0aW9uO0xhbmd1YWdlSUQ9JExRRGF0YXsiTGFuZ3VhZ2VJRCJ9JywKICAgICAgICBEaWFsb2dUaXRsZTogICAgICAgICAgICAgICAgJyRKU1RleHR7IkRlbGV0ZSBMYW5ndWFnZSJ9ICRRRGF0YXsiTmFtZSJ9JywKICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICBZZXM6ICckSlNUZXh0eyJZZXMifScsCiAgICAgICAgICAgIE5vOiAgJyRKU1RleHR7Ik5vIn0nLAogICAgICAgICAgICBPazogICckSlNUZXh0eyJPayJ9JwogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0Um93IC0tPgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHQgLS0+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld1VwZGF0ZSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJBZGQgTGFuZ3VhZ2UifTwvaDI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZCAtLT4KPCEtLSBkdGw6YmxvY2s6SGVhZGVyRWRpdCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJFZGl0IExhbmd1YWdlIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0IC0tPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iJExRRGF0YXsiQWN0aW9uIn1BY3Rpb24iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikxhbmd1YWdlSUQiIHZhbHVlPSIkUURhdGF7Ikxhbmd1YWdlSUQifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJOYW1lIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IiRRRGF0YXsiTmFtZSJ9IiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJOYW1lU2VydmVyRXJyb3IifSIgbWF4bGVuZ3RoPSI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiJERhdGF7Ik5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UifSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+JFRleHR7IlN1Ym1pdCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0iPiRUZXh0eyJDYW5jZWwifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3VXBkYXRlIC0tPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlldyAtLT4KCjwhLS0gZHRsOmJsb2NrOkRlbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6Tm9BZmZlY3RlZEl0ZW1zIC0tPgo8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBXMzAwcHgiPgogICAgPGxhYmVsPiRUZXh0eyJMYW5ndWFnZSJ9OjwvbGFiZWw+CiAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICRRRGF0YXsiTmFtZSJ9CiAgICA8L3A+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZmllbGRzZXQ+CjxwIGNsYXNzPSJTcGFjaW5nVG9wIENlbnRlciI+CiAgICAkVGV4dHsiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyJ9CjwvcD4KPCEtLSBkdGw6YmxvY2s6Tm9BZmZlY3RlZEl0ZW1zIC0tPgoKPCEtLSBkdGw6YmxvY2s6QWZmZWN0ZWRJdGVtcyAtLT4KPHA+CiAgICAkVGV4dHsiWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISJ9CjwvcD4KPHAgY2xhc3M9IlNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbSI+CiAgICAkVGV4dHsiVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocykifToKPC9wPgoKPHVsPgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZEl0ZW1zUm93IC0tPgogICAgPGxpIGNsYXNzPSJJbmRlbnQgU3BhY2luZ0JvdHRvbVNtYWxsIj4KICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9JERhdGF7IkxpbmsifTtBY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0kTFFEYXRheyJJdGVtSUQifSI+CiAgICAgICAgICAgICRDb25maWd7IkZBUTo6RkFRSG9vayJ9OiRRRGF0YXsiTnVtYmVyIn08c3Bhbj4mbmJzcDsmbWRhc2g7PC9zcGFuPiAkUURhdGF7IlRpdGxlIiwgIjYwIn0KICAgICAgICA8L2E+CiAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpBZmZlY3RlZEl0ZW1zUm93IC0tPgo8L3VsPgoKPCEtLSBkdGw6YmxvY2s6QWZmZWN0ZWRJdGVtcyAtLT4KPCEtLSBkdGw6YmxvY2s6RGVsZXRlIC0tPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyIC0tPgo8ZGl2IGNsYXNzPSJPdmVydmlld0JveCBBUklBUm9sZU1haW4gJFFEYXRheyJWaWV3In0iPgogICAgPGgxPiRUZXh0eyIkRGF0YXsiVGl0bGVOYW1lIn0ifTogJFRleHR7IiREYXRheyJUaXRsZVZhbHVlIn0ifTwvaDE+CgokRGF0YXsiRGF0YUluVGhlTWlkZGxlIn0KCiAgICA8ZGl2IGNsYXNzPSJPdmVydmlld0NvbnRyb2wiIGlkPSJPdmVydmlld0NvbnRyb2wiPgogICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlciAtLT4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iVGFicyI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbSAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJBY3RpdmUgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkZpbHRlckxpbmsifUZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTxzcGFuPiRRRGF0YXsiQ291bnQifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90IC0tPgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkZpbHRlckxpbmsifUZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTxzcGFuPiRRRGF0YXsiQ291bnQifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNwbGl0IC0tPgogICAgICAgICAgICAgICAgICAgIC0KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU3BsaXQgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbSAtLT4KICAgICAgICAgICAgICAgIDwvdWw+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVyIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclBhZ2VCYWNrIC0tPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSIkTFFEYXRheyJMaW5rQmFja0lEIn0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JFFEYXRheyJMaW5rQmFjayJ9Ij4kVGV4dHsiQ2hhbmdlIHNlYXJjaCBvcHRpb25zIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjRkFRU2VhcmNoJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBDb3JlLkFnZW50LlNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nKCAnQWdlbnRGQVFTZWFyY2gnLCAiJFFEYXRheyJQcm9maWxlIn0iICk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJQYWdlQmFjayAtLT4KCjwhLS0gZHRsOmJsb2NrOkNvbnRleHRTZXR0aW5ncyAtLT4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQ29udGV4dEZ1bmN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJDb250ZXh0U2V0dGluZ3MiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iU2hvd0NvbnRleHRTZXR0aW5nc0RpYWxvZyIgdGl0bGU9IiRUZXh0eyJDb250ZXh0IFNldHRpbmdzIn0iPjxzcGFuPiRUZXh0eyJDb250ZXh0IFNldHRpbmdzIn08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lciIgY2xhc3M9IkhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBpZD0iQ29udGV4dFNldHRpbmdzRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRQcmVmZXJlbmNlcyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJVcGRhdGUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iR3JvdXAiIHZhbHVlPSIkUURhdGF7Ikdyb3VwIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUmVkaXJlY3RVUkwiIHZhbHVlPSIkUURhdGF7IlJlcXVlc3RlZFVSTCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IiRRRGF0YXsiUHJlZmVyZW5jZXNLZXkifSI+JFRleHR7IkZBUSBhcnRpY2xlcyBwZXIgcGFnZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlBhZ2VTaG93blN0cmluZyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIC8vIGJpbmQgdGhlIENvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lcgogICAgJCgnI1Nob3dDb250ZXh0U2V0dGluZ3NEaWFsb2cnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKCQoJyNDb250ZXh0U2V0dGluZ3NEaWFsb2dDb250YWluZXInKSwgJyRKU1RleHR7IlNldHRpbmdzIn0nLCAnMjAlJywgJ0NlbnRlcicsIHRydWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMYWJlbDogJyRKU1RleHR7IlN1Ym1pdCJ9JywKICAgICAgICAgICAgICAgICAgICBUeXBlOiAnU3VibWl0JywKICAgICAgICAgICAgICAgICAgICBDbGFzczogJ1ByaW1hcnknCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICApOwogICAgICAgIEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8IS0tIGR0bDpibG9jazpDb250ZXh0U2V0dGluZ3MgLS0+CgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik92ZXJ2aWV3QWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgJERhdGF7IkFjdGlvblJvdyJ9CiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJPdmVydmlld1pvb20iPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZSAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkFjdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iJFFEYXRheyJOYW1lIn0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07RmlsdGVyPSRMUURhdGF7IkZpbHRlciJ9O1ZpZXc9JExRRGF0YXsiVmlldyJ9OyRRRGF0YXsiTGlua0ZpbHRlciJ9IiB0aXRsZT0iJFRleHR7IiREYXRheyJOYW1lIn0ifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkltYWdlTW9kZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOYW1lU2hvcnQiPiRUZXh0eyIkRGF0YXsiTmFtZVNob3J0In0ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik5hbWVMb25nIj4kVGV4dHsiJERhdGF7Ik5hbWUifSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIkUURhdGF7Ik5hbWUifSIgbmFtZT0iT3ZlcnZpZXdDb250cm9sIiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O0ZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifTtWaWV3PSRMUURhdGF7IlZpZXcifTskRGF0YXsiTGlua0ZpbHRlciJ9IiB0aXRsZT0iJFRleHR7IiREYXRheyJOYW1lIn0ifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkltYWdlTW9kZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOYW1lU2hvcnQiPiRUZXh0eyIkRGF0YXsiTmFtZVNob3J0In0ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik5hbWVMb25nIj4kVGV4dHsiJERhdGF7Ik5hbWUifSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZU5vdFNlbGVjdGVkIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlIC0tPgogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlBhZ2luYXRpb24iPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclBhZ2VOYXZCYXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJSZXN1bHRMb25nIn0KICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlNpdGVOYXZCYXJMb25nIn0KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyIC0tPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiMgc29ydCBvcmRlciBiYXIgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAkRGF0YXsiU29ydE9yZGVyQmFyIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyIC0tPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuQWN0aW9uUm93LkluaXQoKTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cgo8ZGl2IGlkPSJPdmVydmlld0JvZHkiIGNsYXNzPSJPdmVydmlldyBGaXhlZEhlYWRlciI+CjwhLS0gZHRsOmJsb2NrOk5vRkFRRm91bmQgLS0+CiAgICA8ZGl2IGlkPSJFbXB0eU1lc3NhZ2VTbWFsbCI+CiAgICAgICAgJFRleHR7Ik5vIEZBUSBkYXRhIGZvdW5kLiJ9CiAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6Tm9GQVFGb3VuZCAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkRm9ybSAtLT4KICAgIDx0YWJsZSBpZD0iRml4ZWRUYWJsZSIgY2xhc3M9IlRhYmxlU21hbGwiIHN1bW1hcnk9IiRUZXh0eyJBIGdlbmVyaWMgRkFRIHRhYmxlIn0iPgogICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkZBUU51bWJlciAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1GQVFJRDtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JENvbmZpZ3siRkFROjpGQVFIb29rIn08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFRpdGxlSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJUaXRsZSAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1UaXRsZTtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IlRpdGxlIn08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRUaXRsZUhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2F0ZWdvcnlIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNhdGVnb3J5ICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PUNhdGVnb3J5O09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiQ2F0ZWdvcnkifTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENhdGVnb3J5SGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRMYW5ndWFnZUhlYWRlciAtLT4KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iTGFuZ3VhZ2UgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9TGFuZ3VhZ2U7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJMYW5ndWFnZSJ9PC9hPgogICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTGFuZ3VhZ2VIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFN0YXRlSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdGF0ZSAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1TdGF0ZTtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IlN0YXRlIn08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRTdGF0ZUhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVmFsaWRIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlN0YXRlICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PVZhbGlkO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiVmFsaWRpdHkifTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFZhbGlkSGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDaGFuZ2VkSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDaGFuZ2VkICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PUNoYW5nZWQ7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJDaGFuZ2VkIn08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDaGFuZ2VkSGVhZGVyIC0tPgogICAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGhlYWQ+CiAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgIDx0ciBpZD0iSXRlbUlEXyRRRGF0YXsiSXRlbUlEIn1fJFFEYXRheyJDb3VudGVyIn0iIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXIgLS0+CiAgICAgICAgICAgICAgICA8dGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9JExRRGF0YXsiSXRlbUlEIn07TmF2PSRMUURhdGF7Ik5hdiJ9IiB0aXRsZT0iJExRRGF0YXsiTnVtYmVyIn0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVyTGlua1N0YXJ0IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7Ik51bWJlciJ9CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtFbmQgLS0+CiAgICAgICAgICAgICAgICAgICAgPC9hPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJMaW5rRW5kIC0tPgogICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRUaXRsZSAtLT4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IlRpdGxlIn0iPiRRRGF0YXsiVGl0bGUiLCI0MCJ9PC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRUaXRsZSAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2F0ZWdvcnkgLS0+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFRleHR7IiREYXRheyJDYXRlZ29yeU5hbWUifSJ9Ij4kVGV4dHsiJERhdGF7IkNhdGVnb3J5TmFtZSJ9IiwiNTAifTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2F0ZWdvcnkgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZExhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXY+JFRleHR7IiREYXRheyJMYW5ndWFnZSJ9In08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZExhbmd1YWdlIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRTdGF0ZSAtLT4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2PiRUZXh0eyIkRGF0YXsiU3RhdGUifSJ9PC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRTdGF0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVmFsaWQgLS0+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4kVGV4dHsiJERhdGF7IlZhbGlkIn0ifTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVmFsaWQgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZWQgLS0+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4kVGltZVNob3J0eyIkRGF0YXsiQ2hhbmdlZCJ9In08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZWQgLS0+CiAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZCAtLT4KICAgICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkRm9ybSAtLT4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuSW5pdFRhYmxlSGVhZCgkKCcjRml4ZWRUYWJsZSB0aGVhZCcpLCAkKCcjRml4ZWRUYWJsZSB0Ym9keScpKTsKICAgIENvcmUuVUkuU3RhdGljVGFibGVDb250cm9sKCQoJyNPdmVydmlld0NvbnRyb2wnKS5hZGQoJCgnI092ZXJ2aWV3Qm9keScpKSk7CiAgICAkKCcuTWFzdGVyQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgdmFyICRNYXN0ZXJBY3Rpb25MaW5rID0gJCh0aGlzKS5maW5kKCcuTWFzdGVyQWN0aW9uTGluaycpOwogICAgICAgIC8vIG9ubHkgYWN0IGlmIHRoZSBsaW5rIHdhcyBub3QgY2xpY2tlZCBkaXJlY3RseQogICAgICAgIGlmIChFdmVudC50YXJnZXQgIT09ICRNYXN0ZXJBY3Rpb25MaW5rLmdldCgwKSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkTWFzdGVyQWN0aW9uTGluay5hdHRyKCdocmVmJyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9KTsKICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24oKSB7CiAgICAgICAgQ29yZS5VSS5BZGp1c3RUYWJsZUhlYWQoJCgnI092ZXJ2aWV3SGVhZGVyIHRoZWFkJyksICQoJyNPdmVydmlld0JvZHkgdGJvZHknKSk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0ibWFpbmhlYWQiPiRDb25maWd7IkZBUTo6RkFRSG9vayJ9OiAkUURhdGF7Ik51bWJlciJ9IC8gJFFEYXRheyJUaXRsZSJ9PC90ZD4KICAgIDwvdHI+CjwvdGFibGU+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMTAiIHdpZHRoPSIxMDAlIj4KICAgIDx0cj4KICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPgogICAgICAgICAgICAkVGV4dHsiRkFRLUluZm8ifToKICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI1MCUiIHZhbGlnbj0idG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ2F0ZWdvcnkifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JERhdGF7IkNhdGVnb3J5TmFtZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiU3RhdGUifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFRleHR7IiREYXRheyJTdGF0ZSJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiTGFuZ3VhZ2UifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JERhdGF7Ikxhbmd1YWdlIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+Cgo8IS0tIGR0bDpibG9jazpQcmludEFwcHJvdmFsIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkFwcHJvdmFsIn06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+IDxkaXYgdGl0bGU9IiRUZXh0eyIkRGF0YXsiQXBwcm92YWwifSJ9Ij4kVGV4dHsiJERhdGF7IkFwcHJvdmFsIn0ifTwvZGl2PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpQcmludEFwcHJvdmFsIC0tPgoKICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNTAlIiB2YWxpZ249InRvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgoKPCEtLSBkdGw6YmxvY2s6UmF0aW5nIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlZvdGVzIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkUURhdGF7IlZvdGVzIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJSZXN1bHQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+ICRRRGF0YXsiVm90ZVJlc3VsdCJ9ICYjMzc7PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJhdGluZyAtLT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiTGFzdCB1cGRhdGUifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFRpbWVMb25neyIkRGF0YXsiQ2hhbmdlZCJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiS2V5d29yZHMifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjkwJSIgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJLZXl3b3JkcyJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPgogICAgICAgICAgICA8aHI+CiAgICAgICAgPC90ZD4KICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkZBUUNvbnRlbnQgLS0+CiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4KICAgICAgICAgICAgJFRleHR7IiREYXRheyJDYXB0aW9uIn0ifTogIDxzcGFuIGNsYXNzPSJzbWFsbCI+KCRUZXh0eyIkRGF0YXsiU3RhdGVOYW1lIn0ifSkgPC9zcGFuPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMTAiIGNlbGxQYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiREYXRheyJDb250ZW50In08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxocj4KICAgICAgICA8L3RkPgogICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudCAtLT4KCjwhLS0gZHRsOmJsb2NrOkxpbmsgLS0+CiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4KICAgICAgICAgICAgJFRleHR7IkxpbmtlZC1PYmplY3QifToKICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI1MCUiIHZhbGlnbj0idG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CjwhLS0gZHRsOmJsb2NrOkxpbmtUeXBlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHZhbGlnbj0idG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiIHdpZHRoPSIyMCUiPiRUZXh0eyIkRGF0YXsiTGlua1R5cGVOYW1lIn0ifTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4KPCEtLSBkdGw6YmxvY2s6TGlua1R5cGVSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJMaW5rU3RyZyJ9PGJyLz4KPCEtLSBkdGw6YmxvY2s6TGlua1R5cGVSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkxpbmtUeXBlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpMaW5rIC0tPgoKPC90YWJsZT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOlNlYXJjaEFKQVggLS0+CjxkaXYgY2xhc3M9IklubmVyQ29udGVudCI+CiAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGlkPSJTZWFyY2hGb3JtIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgaWQ9IlNlYXJjaEFjdGlvbiIvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNlYXJjaCIvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkVtcHR5U2VhcmNoIiB2YWx1ZT0iJFFEYXRheyJFbXB0eVNlYXJjaCJ9IiBpZD0iRW1wdHlTZWFyY2giLz4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJOYXYiIHZhbHVlPSIkUURhdGF7Ik5hdiJ9Ii8+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiU2VhcmNoIHRlbXBsYXRlIn06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgJERhdGF7IlByb2ZpbGVzU3RyZyJ9CgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iU2VhcmNoUHJvZmlsZU5ldyIgdmFsdWU9IiRUZXh0eyJDcmVhdGUgTmV3In0iPiRUZXh0eyJDcmVhdGUgTmV3In08L2J1dHRvbj4KCiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJTZWFyY2hQcm9maWxlRGVsZXRlIiBjbGFzcz0iSGlkZGVuIiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9Ij4kVGV4dHsiRGVsZXRlIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlNlYXJjaFByb2ZpbGVBZGRCbG9jayI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ik5hbWUiIGlkPSJTZWFyY2hQcm9maWxlQWRkTmFtZSIvPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiB0aXRsZT0iJFRleHR7IkNyZWF0ZSBUZW1wbGF0ZSJ9IiBpZD0iU2VhcmNoUHJvZmlsZUFkZEFjdGlvbiI+JFRleHR7IkFkZCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJTYXZlIGNoYW5nZXMgaW4gdGVtcGxhdGUifTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IlNhdmVQcm9maWxlIiBpZD0iU2F2ZVByb2ZpbGUiIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiIGlkPSJTZWFyY2hJbnNlcnQiPjwvZmllbGRzZXQ+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQWRkIGFub3RoZXIgYXR0cmlidXRlIn06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgJERhdGF7IkF0dHJpYnV0ZXNTdHJnIn0KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iQWRkIiB2YWx1ZT0iQWRkIiB0aXRsZT0iQWRkIGVudHJ5Ij4kVGV4dHsiQWRkIn08L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJPdXRwdXQifTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAkRGF0YXsiUmVzdWx0Rm9ybVN0cmcifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2ZpZWxkc2V0PgogICAgPC9mb3JtPgoKICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEhpZGRlbiIgaWQ9IlNlYXJjaEF0dHJpYnV0ZXNIaWRkZW4iPgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iRnVsbHRleHQiaWQ9IkxhYmVsRnVsbHRleHQiPiRUZXh0eyJGdWxsdGV4dCJ9OjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iRnVsbHRleHQiIHZhbHVlPSIkUURhdGF7IkZ1bGx0ZXh0In0iIGNsYXNzPSJXNTBwYyIgLz4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJSZW1vdmUiIHZhbHVlPSJSZW1vdmUiIHRpdGxlPSIkVGV4dHsiUmVtb3ZlIHRoaXMgZW50cnkifSI+JFRleHR7IlJlbW92ZSJ9PC9idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJOdW1iZXIiIGlkPSJMYWJlbE51bWJlciI+JENvbmZpZ3siRkFROjpGQVFIb29rIn0gJFRleHR7IihlLiBnLiAxMCo1MTU1IG9yIDEwNTY1OCopIn06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOdW1iZXIiIHZhbHVlPSIkUURhdGF7Ik51bWJlciJ9IiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJSZW1vdmUiIHZhbHVlPSJSZW1vdmUiIHRpdGxlPSIkVGV4dHsiUmVtb3ZlIHRoaXMgZW50cnkifSI+JFRleHR7IlJlbW92ZSJ9PC9idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJUaXRsZSIgaWQ9IkxhYmVsVGl0bGUiPiRUZXh0eyJUaXRsZSJ9OjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVGl0bGUiIHZhbHVlPSIkUURhdGF7IlRpdGxlIn0iIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IlJlbW92ZSIgdmFsdWU9IlJlbW92ZSIgdGl0bGU9IiRUZXh0eyJSZW1vdmUgdGhpcyBlbnRyeSJ9Ij4kVGV4dHsiUmVtb3ZlIn08L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IktleXdvcmQiIGlkPSJMYWJlbEtleXdvcmQiPiRUZXh0eyJLZXl3b3JkIn06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJLZXl3b3JkIiB2YWx1ZT0iJFFEYXRheyJLZXl3b3JkIn0iIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IlJlbW92ZSIgdmFsdWU9IlJlbW92ZSIgdGl0bGU9IiRUZXh0eyJSZW1vdmUgdGhpcyBlbnRyeSJ9Ij4kVGV4dHsiUmVtb3ZlIn08L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSURzIiBpZD0iTGFiZWxWYWxpZElEcyI+JFRleHR7IlZhbGlkaXR5In06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICREYXRheyJWYWxpZFNlbGVjdGlvblN0cmluZyJ9CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iUmVtb3ZlIiB2YWx1ZT0iUmVtb3ZlIiB0aXRsZT0iJFRleHR7IlJlbW92ZSB0aGlzIGVudHJ5In0iPiRUZXh0eyJSZW1vdmUifTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iTGFuZ3VhZ2VJRHMiIGlkPSJMYWJlbExhbmd1YWdlSURzIj4kVGV4dHsiTGFuZ3VhZ2UifTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgJERhdGF7Ikxhbmd1YWdlc1NlbGVjdGlvblN0cmluZyJ9CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iUmVtb3ZlIiB2YWx1ZT0iUmVtb3ZlIiB0aXRsZT0iJFRleHR7IlJlbW92ZSB0aGlzIGVudHJ5In0iPiRUZXh0eyJSZW1vdmUifTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iQ2F0ZWdvcnlJRHMiIGlkPSJMYWJlbENhdGVnb3J5SURzIj4kVGV4dHsiQ2F0ZWdvcnkifTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgJERhdGF7IkNhdGVnb3JpZXNTZWxlY3Rpb25TdHJpbmcifQogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IlJlbW92ZSIgdmFsdWU9IlJlbW92ZSIgdGl0bGU9IiRUZXh0eyJSZW1vdmUgdGhpcyBlbnRyeSJ9Ij4kVGV4dHsiUmVtb3ZlIn08L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICREYXRheyJBdHRyaWJ1dGVzT3JpZ1N0cmcifQoKICAgIDwvZmllbGRzZXQ+CjwvZGl2PgoKPGRpdiBjbGFzcz0iQ29udGVudEZvb3RlciBDZW50ZXIiPgogICAgPGJ1dHRvbiBpZD0iU2VhcmNoRm9ybVN1Ym1pdCIgY2xhc3M9IlByaW1hcnkiIHZhbHVlPSJSdW4gU2VhcmNoIj4kVGV4dHsiUnVuIFNlYXJjaCJ9PC9idXR0b24+CjwvZGl2PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKXsKPCEtLSBkdGw6YmxvY2s6U2VhcmNoQUpBWFNob3cgLS0+CiAgICAgICAgQ29yZS5BZ2VudC5TZWFyY2guU2VhcmNoQXR0cmlidXRlQWRkKCIkUURhdGF7IkF0dHJpYnV0ZSJ9Iik7CjwhLS0gZHRsOmJsb2NrOlNlYXJjaEFKQVhTaG93IC0tPgogICAgICAgIENvcmUuQWdlbnQuU2VhcmNoLkFkZGl0aW9uYWxBdHRyaWJ1dGVTZWxlY3Rpb25SZWJ1aWxkKCk7CiAgICB9LCAwKTsKLy9dXT48L3NjcmlwdD4KCjwhLS0gZHRsOmJsb2NrOlNlYXJjaEFKQVggLS0+Cgo8IS0tIGR0bDpibG9jazpTZWFyY2ggLS0+Cgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgQ29yZS5BZ2VudC5TZWFyY2guT3BlblNlYXJjaERpYWxvZyggJyRFbnZ7IkFjdGlvbiJ9JyApOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+Cgo8IS0tIGR0bDpibG9jazpTZWFyY2ggLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT4kUXVvdGV7IiRDb25maWd7IlByb2R1Y3ROYW1lIn0ifSAoJFF1b3RleyIkQ29uZmlneyJGQVE6OkZBUUhvb2sifSJ9KTwvU2hvcnROYW1lPgo8RGVzY3JpcHRpb24+JFF1b3RleyIkQ29uZmlneyJQcm9kdWN0TmFtZSJ9In0gKCRRdW90ZXsiJENvbmZpZ3siRkFROjpGQVFIb29rIn0ifSk8L0Rlc2NyaXB0aW9uPgo8SW5wdXRFbmNvZGluZz4kRW52eyJVc2VyQ2hhcnNldCJ9PC9JbnB1dEVuY29kaW5nPgo8VXJsIHR5cGU9InRleHQvaHRtbCIgdGVtcGxhdGU9IiRDb25maWd7Ikh0dHBUeXBlIn06Ly8kRW52eyJIVFRQX0hPU1QifSRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRGQVFTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaDtOdW1iZXI9e3NlYXJjaFRlcm1zfSIgLz4KPEltYWdlIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgdHlwZT0iaW1hZ2UveC1pY29uIj4kQ29uZmlneyJIdHRwVHlwZSJ9Oi8vJEVudnsiSFRUUF9IT1NUIn0kQ29uZmlneyJGcm9udGVuZDo6SW1hZ2VQYXRoIn1pY29ucy9wcm9kdWN0LmljbzwvSW1hZ2U+CjwvT3BlblNlYXJjaERlc2NyaXB0aW9uPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT4kUXVvdGV7IiRDb25maWd7IlByb2R1Y3ROYW1lIn0ifSAoJFRleHR7IkZBUUZ1bGx0ZXh0In0pPC9TaG9ydE5hbWU+CjxEZXNjcmlwdGlvbj4kUXVvdGV7IiRDb25maWd7IlByb2R1Y3ROYW1lIn0ifSAoJFRleHR7IkZBUUZ1bGx0ZXh0In0pPC9EZXNjcmlwdGlvbj4KPElucHV0RW5jb2Rpbmc+JEVudnsiVXNlckNoYXJzZXQifTwvSW5wdXRFbmNvZGluZz4KPFVybCB0eXBlPSJ0ZXh0L2h0bWwiIHRlbXBsYXRlPSIkQ29uZmlneyJIdHRwVHlwZSJ9Oi8vJEVudnsiSFRUUF9IT1NUIn0kRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50RkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7RnVsbHRleHQ9e3NlYXJjaFRlcm1zfSIgLz4KPEltYWdlIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgdHlwZT0iaW1hZ2UveC1pY29uIj4kQ29uZmlneyJIdHRwVHlwZSJ9Oi8vJEVudnsiSFRUUF9IT1NUIn0kQ29uZmlneyJGcm9udGVuZDo6SW1hZ2VQYXRoIn1pY29ucy9wcm9kdWN0LmljbzwvSW1hZ2U+CjwvT3BlblNlYXJjaERlc2NyaXB0aW9uPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gc3RhcnQgZm9ybSAtLT4KPGk+JERhdGF7Ildhcm5pbmcifTwvaT4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJtYWluaGVhZCI+JFRleHR7IlNlYXJjaCJ9PC90ZD4KICAgIDwvdHI+CjwvdGFibGU+Cjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRDb25maWd7IkZBUTo6RkFRSG9vayJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjM1JSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJUaXRsZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJDYXRlZ29yeSJ9PC90ZD4KCjwhLS0gZHRsOmJsb2NrOkhlYWRlckxhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAlIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7Ikxhbmd1YWdlIn08L3RkPgo8IS0tIGR0bDpibG9jazpIZWFkZXJMYW5ndWFnZSAtLT4KCiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNSUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiU3RhdGUifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ2hhbmdlZCJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZCAtLT4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJOdW1iZXIifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRRRGF0YXsiVGl0bGUiLCI0MCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJDYXRlZ29yeU5hbWUiLCIzMCJ9PC90ZD4KCjwhLS0gZHRsOmJsb2NrOlJlY29yZExhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7Ikxhbmd1YWdlIn08L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRMYW5ndWFnZSAtLT4KCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRUZXh0eyIkRGF0YXsiU3RhdGUifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFRpbWVMb25neyIkRGF0YXsiQ2hhbmdlZCJ9In08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkIC0tPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo8IS0tIGVuZCBmb3JtIC0tPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOlNlYXJjaCAtLT4KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDE+JFRleHR7IkZBUSBTZWFyY2gifTwvaDE+CiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJQcm9maWxlIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJMb2FkUHJvZmlsZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTmF2IiB2YWx1ZT0iJFFEYXRheyJOYXYifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUHJvZmlsZSI+JFRleHR7IlNlYXJjaCB0ZW1wbGF0ZSJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJQcm9maWxlc1N0cmcifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBTcGFjaW5nVG9wIiBuYW1lPSJTZWxlY3RUZW1wbGF0ZSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlNlbGVjdCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiU2VsZWN0In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gU3BhY2luZ1RvcCIgbmFtZT0iRXJhc2VUZW1wbGF0ZSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiRGVsZXRlIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gU3BhY2luZ1RvcCIgbmFtZT0iU2VhcmNoVGVtcGxhdGUiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTZWFyY2gifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IlNlYXJjaCJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VhcmNoIi8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik5hdiIgdmFsdWU9IiRRRGF0YXsiTmF2In0iLz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8ifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2F2ZVByb2ZpbGUiPiRUZXh0eyJTYXZlIGFzIFRlbXBsYXRlPyJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSJTYXZlIGFzIFRlbXBsYXRlIiB0eXBlPSJjaGVja2JveCIgaWQ9IlNhdmVQcm9maWxlIiBuYW1lPSJTYXZlUHJvZmlsZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlByb2ZpbGUiPiRUZXh0eyJUZW1wbGF0ZSBOYW1lIn08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlBpY2sgYSBwcm9maWxlIG5hbWUiIHR5cGU9InRleHQiIGlkPSJQcm9maWxlIiBuYW1lPSJQcm9maWxlIiB2YWx1ZT0iJFFEYXRheyJQcm9maWxlIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkZ1bGx0ZXh0ImlkPSJMYWJlbEZ1bGx0ZXh0Ij4kVGV4dHsiRnVsbHRleHQifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJGdWxsdGV4dCIgdmFsdWU9IiRRRGF0YXsiRnVsbHRleHQifSIgY2xhc3M9Ilc1MHBjIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wU21hbGwgQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTnVtYmVyIj4kQ29uZmlneyJGQVE6OkZBUUhvb2sifSAkVGV4dHsiKGUuIGcuIDEwKjUxNTUgb3IgMTA1NjU4KikifTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSIkQ29uZmlneyJGQVE6OkZBUUhvb2sifSIgdHlwZT0idGV4dCIgbmFtZT0iTnVtYmVyIiBpZD0iTnVtYmVyIiBjbGFzcz0iVzUwcGMiIHZhbHVlPSIkUURhdGF7Ik51bWJlciJ9Ii8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3BTbWFsbCBDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUaXRsZSI+JFRleHR7IlRpdGxlIn08L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iJFRleHR7IlRpdGxlIn0iIHR5cGU9InRleHQiIGlkPSJUaXRsZSIgbmFtZT0iVGl0bGUiIHZhbHVlPSIkUURhdGF7IlRpdGxlIn0iIGNsYXNzPSJXNTBwYyIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcFNtYWxsIENsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IktleXdvcmQiPiRUZXh0eyJLZXl3b3JkIn08L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0gIkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IiRUZXh0eyJLZXl3b3JkIn0iIHR5cGU9InRleHQiIGlkPSJLZXl3b3JkIiBuYW1lPSJLZXl3b3JkIiB2YWx1ZT0iJFFEYXRheyJLZXl3b3JkIn0iIGNsYXNzPSJXNTBwYyIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdTcGFjaW5nVG9wU21hbGwgQ2xlYXInPjwvZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTGFuZ3VhZ2VJRHMiPiRUZXh0eyJMYW5ndWFnZSJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAkRGF0YXsiTGFuZ3VhZ2VzU3RyZyJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nU3BhY2luZ1RvcFNtYWxsIENsZWFyJz48L2Rpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNhdGVnb3J5SURzIj4kVGV4dHsiQ2F0ZWdvcnkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICREYXRheyJDYXRlZ29yaWVzU3RyZyJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J0NsZWFyJz48L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdTcGFjaW5nVG9wU21hbGwgQ2xlYXInPjwvZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRHMiPiRUZXh0eyJWYWxpZGl0eSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgJERhdGF7IlZhbGlkU2VsZWN0aW9uU3RyaW5nIn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nQ2xlYXInPjwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8ZGl2IGlkPSJCb3R0b21BY3Rpb25Sb3ciIGNsYXNzPSJDZW50ZXIgU3BhY2luZ1RvcFNtYWxsIj4KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlNlYXJjaCJ9Ij4kVGV4dHsiU2VhcmNoIn08L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Zvcm0+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTZWFyY2ggLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGgxIHRpdGxlPSIkQ29uZmlneyJGQVE6OkZBUUhvb2sifTogJFFEYXRheyJOdW1iZXIifSAmbmRhc2g7ICRRRGF0YXsiVGl0bGUiLCAiNDAifSI+CiAgICAgICAgICAgICRDb25maWd7IkZBUTo6RkFRSG9vayJ9OiAkRGF0YXsiTnVtYmVyIn0gPHNwYW4+Jm1kYXNoOzwvc3Bhbj4gJFFEYXRheyJUaXRsZSIsICI2MCJ9CiAgICAgICAgPC9oMT4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkZBUVBhdGhDYXRlZ29yeSI+CiAgICAgICAgPGgzPgo8IS0tIGR0bDpibG9jazpGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IC0tPgogICAgICAgICAgICAkQ29uZmlneyJGQVE6OkV4cGxvcmVyOjpQYXRoOjpTZXBhcmF0b3IifQogICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50RkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD0kTFFEYXRheyJDYXRlZ29yeUlEIn07TmF2PSRMUURhdGF7Ik5hdiJ9Ij4KICAgICAgICAgICAgICAgICRRRGF0YXsiTmFtZSJ9CiAgICAgICAgICAgIDwvYT4KPCEtLSBkdGw6YmxvY2s6RkFRUGF0aENhdGVnb3J5RWxlbWVudCAtLT4KICAgICAgICA8L2gzPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJGQVEgSW5mb3JtYXRpb24ifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQ2F0ZWdvcnkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiJERhdGF7IkNhdGVnb3J5TmFtZSJ9In0iPiRUZXh0eyIkRGF0YXsiQ2F0ZWdvcnlOYW1lIn0iLCIxOCJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IktleXdvcmRzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KPCEtLSBkdGw6YmxvY2s6S2V5d29yZHMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50RkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7S2V5d29yZD0kTFFEYXRheyJLZXl3b3JkIn0iIHRpdGxlPSIkUURhdGF7IktleXdvcmQifSI+JFFEYXRheyJLZXl3b3JkIn08L2E+CjwhLS0gZHRsOmJsb2NrOktleXdvcmRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiU3RhdGUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiJERhdGF7IlN0YXRlIn0ifSI+JFRleHR7IiREYXRheyJTdGF0ZSJ9IiwiMjUifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJWYWxpZGl0eSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IiRUZXh0eyIkRGF0YXsiVmFsaWQifSJ9Ij4kVGV4dHsiJERhdGF7IlZhbGlkIn0iLCIyNSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOkxhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7Ikxhbmd1YWdlIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iJFRleHR7IiREYXRheyJMYW5ndWFnZSJ9In0iPiRUZXh0eyIkRGF0YXsiTGFuZ3VhZ2UifSIsIjE4In08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+Cgo8IS0tIGR0bDpibG9jazpWaWV3QXBwcm92YWwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQXBwcm92YWwifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiJERhdGF7IkFwcHJvdmFsIn0ifSI+JFRleHR7IiREYXRheyJBcHByb3ZhbCJ9IiwiMTgifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpWaWV3QXBwcm92YWwgLS0+Cgo8IS0tIGR0bDpibG9jazpWaWV3UmF0aW5nIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IlJhdGluZyJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIiB0aXRsZT0iJFRleHR7IlJhdGluZyAkRGF0YXsiVm90ZVJlc3VsdCJ9JSJ9Ij4KCjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFycyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJhdGVTdGFyIj5TdGFyPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFycyAtLT4KPCEtLSBkdGw6YmxvY2s6UmF0ZVN0YXJzQ291bnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSYXRlU3RhclRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiU3RhcnMifSAkVGV4dHsib3V0IG9mIDUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFyc0NvdW50IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpWaWV3UmF0aW5nIC0tPgoKPCEtLSBkdGw6YmxvY2s6Vmlld1ZvdGVzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IlZvdGVzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iJFRleHR7IiREYXRheyJWb3RlcyJ9In0iPiRUZXh0eyIkRGF0YXsiVm90ZXMifSIsIjE4In08L3A+CjwhLS0gZHRsOmJsb2NrOlZpZXdWb3RlcyAtLT4KPCEtLSBkdGw6YmxvY2s6Vmlld05vVm90ZXMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiVm90ZXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiTm8gdm90ZXMgZm91bmQhIn0iPiRUZXh0eyJObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuIn08L3A+CjwhLS0gZHRsOmJsb2NrOlZpZXdOb1ZvdGVzIC0tPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDcmVhdGVkIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kVGltZVNob3J0eyIkRGF0YXsiQ3JlYXRlZCJ9In0gICgkRGF0YXsiQ3JlYXRlZEJ5VXNlciJ9KTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDaGFuZ2VkIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kVGltZVNob3J0eyIkRGF0YXsiQ2hhbmdlZCJ9In0gICgkRGF0YXsiQ2hhbmdlZEJ5VXNlciJ9KTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+Cgo8IS0tIGR0bDpibG9jazpMaW5rVGFibGVTaW1wbGUgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBEb250UHJpbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkxpbmtlZCBPYmplY3RzIn08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAkRGF0YXsiTGlua1RhYmxlU3RyZyJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkxpbmtUYWJsZVNpbXBsZSAtLT4KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWRkaXRpb25hbEluZm9ybWF0aW9uIj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgoKPCEtLSBkdGw6YmxvY2s6TWVudUl0ZW0gLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9JERhdGF7IkxpbmsifSIgaWQ9IiRRRGF0YXsiTWVudUlEIn0iIGNsYXNzPSIkUURhdGF7IkNsYXNzIn0iICREYXRheyJMaW5rUGFyYW0ifSB0aXRsZT0iJFRleHR7IiREYXRheyJEZXNjcmlwdGlvbiJ9In0iPiRUZXh0eyIkRGF0YXsiTmFtZSJ9In08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KCjwhLS0gZHRsOmJsb2NrOlNob3dDb25maXJtYXRpb25EaWFsb2cgLS0+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCi8qZ2xvYmFsIEZBUTogdHJ1ZSAqLwogICAgRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZy5CaW5kQ29uZmlybWF0aW9uRGlhbG9nKHsKICAgICAgICBFbGVtZW50SUQ6ICAgICAgICAgICAgICAgICAgJyREYXRheyJNZW51SUQifScsCiAgICAgICAgRWxlbWVudFNlbGVjdG9yOiAgICAgICAgICAgICckRGF0YXsiRWxlbWVudFNlbGVjdG9yIn0nLAogICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICAnJERhdGF7IkRpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZyJ9JywKICAgICAgICBDb25maXJtZWRBY3Rpb25RdWVyeVN0cmluZzogJyREYXRheyJDb25maXJtZWRBY3Rpb25RdWVyeVN0cmluZyJ9JywKICAgICAgICBEaWFsb2dUaXRsZTogICAgICAgICAgICAgICAgJyREYXRheyJEaWFsb2dUaXRsZSJ9JywKICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICBZZXM6ICckSlNUZXh0eyJZZXMifScsCiAgICAgICAgICAgIE5vOiAgJyRKU1RleHR7Ik5vIn0nLAogICAgICAgICAgICBPazogICckSlNUZXh0eyJPayJ9JwogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjwhLS0gZHRsOmJsb2NrOlNob3dDb25maXJtYXRpb25EaWFsb2cgLS0+Cgo8IS0tIGR0bDpibG9jazpNZW51SXRlbSAtLT4KCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0iRkFRQm9keSI+Cgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50SGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0Qm94Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGQVFDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXJ0aWNsZUZBUUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IkF0dGFjaG1lbnRzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVGQVFDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPgoKPCEtLSBkdGw6YmxvY2s6QXR0YWNobWVudFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iRG93bmxvYWRBdHRhY2htZW50IiB0aXRsZT0iJFRleHR7IkRvd25sb2FkIEF0dGFjaG1lbnQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtJdGVtSUQ9JExRRGF0YXsiSXRlbUlEIn07RmlsZUlEPSRMUURhdGF7IkZpbGVJRCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiRmlsZW5hbWUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJFFEYXRheyJGaWxlc2l6ZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxici8+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRSb3cgLS0+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRIZWFkZXIgLS0+Cgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50IC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0Qm94Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGQVFDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXJ0aWNsZUZBUUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IiREYXRheyJDYXB0aW9uIn0ifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkZBUVN0YXRlTmFtZSI+KCRUZXh0eyIkRGF0YXsiU3RhdGVOYW1lIn0ifSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50SFRNTCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KIyBVc2UgdGhlIEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIHRvIHByZXZlbnQgcGx1Z2lucyBhbmQgc2NyaXB0cyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGluIHRoZSBicm93c2VyLgojIFVzZSBJRSdzIChub24tc3RhbmRhcmQpIHNlY3VyaXR5IGF0dHJpYnV0ZSB0byBhY2hpZXZlIHNvbWV0aGluZyBzaW1pbGFyIGluIG9sZGVyIElFIGJyb3dzZXJzLiBBcHBlbmQgc2Vzc2lvbiBpbmZvIHRvIFVSTCBiZWNhdXNlIElFIHdpbGwgbm90IHNlbmQgY29va2llcy4KIyBTZXQgJ2FsbG93LXBvcHVwcycgdG8gYWxsb3cgSUUxMCsgdG8gb3BlbiBsaW5rcy4gcmVmOiBodHRwOi8vd3d3LnczLm9yZy9odG1sL3dnL3dpa2kvQ2hhbmdlUHJvcG9zYWxzL3NhbmRib3hfYWxsb3dfcG9wdXBzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXBvcHVwcyIgc2VjdXJpdHk9InJlc3RyaWN0ZWQiIGNsYXNzPSJGQVFGaWVsZCIgaWQ9IklmcmFtZUZBUSRRRGF0YXsiRmllbGQifSIgb25sb2FkPSJpZiAodHlwZW9mIEZBUSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5BZ2VudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5BZ2VudC5GQVFab29tID09PSAnb2JqZWN0JykgeyBGQVEuQWdlbnQuRkFRWm9vbS5JZnJhbWVBdXRvSGVpZ2h0KCQoJyNJZnJhbWVGQVEkUURhdGF7IkZpZWxkIn0nKSk7IH07IiBzcmM9IiMiIGRhdGEtc3JjPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50RkFRWm9vbTtTdWJhY3Rpb249SFRNTFZpZXc7SXRlbUlEPSRRRGF0YXsiSXRlbUlEIn07RmllbGQ9JFFEYXRheyJGaWVsZCJ9OyRRRW52eyJTZXNzaW9uTmFtZSJ9PSRRRW52eyJTZXNzaW9uSUQifSI+PC9pZnJhbWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50SFRNTCAtLT4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwoKICAgIENvcmUuQ29uZmlnLlNldCgnRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0JywgcGFyc2VJbnQoIiRDb25maWd7IkZBUTo6RnJvbnRlbmQ6OkFnZW50SFRNTEZpZWxkSGVpZ2h0RGVmYXVsdCJ9IiB8fCAwLCAxMCkpOwogICAgQ29yZS5Db25maWcuU2V0KCdGQVE6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodE1heCcsIHBhcnNlSW50KCIkQ29uZmlneyJGQVE6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodE1heCJ9IiB8fCAwLCAxMCkpOwoKICAgIC8vIGNvcHkgZGF0YS1zcmMgYXR0cmlidXRlIHRvIHNyYyBhdHRyaWJ1dGUgZm9yIGFsbCBpZnJhbWVzIHRvIGNvcnJlY3RseSBkaXNwbGF5IGl0cyBjb250ZW50cyBhZnRlciBKUyBpcyBmdWxseSBsb2FkZWQKICAgICQoJ2lmcmFtZScpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAkKHRoaXMpLmF0dHIoInNyYyIsICQodGhpcykuYXR0cigiZGF0YS1zcmMiKSApOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50UGxhaW4gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVGQVFDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJDb250ZW50In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudFBsYWluIC0tPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkZBUUNvbnRlbnQgLS0+CjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRkFRVm90aW5nIiBpZD0iRkFRVm90aW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXJ0aWNsZUZBUUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IlJhdGluZyJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJBcnRpY2xlRkFRQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+JFRleHR7IkhvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISJ9PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iRkFRVm90ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZUxhYmVsQmVmb3JlIj4kVGV4dHsibm90IGhlbHBmdWwifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+Cgo8IS0tIGR0bDpibG9jazpGQVFWb3RpbmdSYXRlUm93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSYXRlQnV0dG9uJERhdGF7IlZhbHVlIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJhdGVCdXR0b24gUmF0ZVVuQ2hlY2tlZCI+JFFEYXRheyJUaXRsZSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RkFRVm90aW5nUmF0ZVJvdyAtLT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZUxhYmVsQWZ0ZXIiPiRUZXh0eyJ2ZXJ5IGhlbHBmdWwifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iSGlkZGVuIiBpZD0iUmF0ZVN1Ym1pdEJ1dHRvbiIgbmFtZT0iYnRuIiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRGQVFab29tIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlZvdGUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2F0ZWdvcnlJRCIgdmFsdWU9IiRRRGF0YXsiQ2F0ZWdvcnlJRCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikl0ZW1JRCIgdmFsdWU9IiRRRGF0YXsiSXRlbUlEIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUmF0ZSIgdmFsdWU9IiIgaWQ9IlJhdGVWYWx1ZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpGQVFWb3RpbmcgLS0+CgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpMaW5rVGFibGVDb21wbGV4IC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICREYXRheyJMaW5rVGFibGVTdHJnIn0KICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkxpbmtUYWJsZUNvbXBsZXggLS0+CgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ3VsLkFjdGlvbnMgYS5Bc1BvcHVwJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBDb3JlLlVJLlBvcHVwLk9wZW5Qb3B1cCAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCiAgICAkKCcuUmF0ZUJ1dHRvbicpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgdmFyIFJhdGVOdW1iZXIgPSBwYXJzZUludCgkKHRoaXMpLmNsb3Nlc3QoJ2RpdicpLmF0dHIoJ2lkJykucmVwbGFjZSgvUmF0ZUJ1dHRvbi8sICcnKSwgMTApOwogICAgICAgICQoJyNSYXRlVmFsdWUnKS52YWwoUmF0ZU51bWJlcik7CiAgICAgICAgJCgnI1JhdGVTdWJtaXRCdXR0b24nKS5yZW1vdmVDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgJCgnI0ZBUVZvdGluZycpLmZpbmQoJy5SYXRlQnV0dG9uJykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIEl0ZW1SYXRlTnVtYmVyID0gcGFyc2VJbnQoJCh0aGlzKS5jbG9zZXN0KCdkaXYnKS5hdHRyKCdpZCcpLnJlcGxhY2UoL1JhdGVCdXR0b24vLCAnJyksIDEwKTsKICAgICAgICAgICAgaWYgKCBJdGVtUmF0ZU51bWJlciA8PSBSYXRlTnVtYmVyICkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnUmF0ZUNoZWNrZWQnKTsKICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ1JhdGVVbkNoZWNrZWQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ1JhdGVVbkNoZWNrZWQnKTsKICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ1JhdGVDaGVja2VkJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGgxIHRpdGxlPSIkVGV4dHsiWm9vbSJ9ICRDb25maWd7IkZBUTo6RkFRSG9vayJ9OiAkUURhdGF7Ik51bWJlciJ9ICZuZGFzaDsgJFFEYXRheyJUaXRsZSIsICI0MCJ9Ij4KICAgICAgICAgICAgJENvbmZpZ3siRkFROjpGQVFIb29rIn06ICREYXRheyJOdW1iZXIifSA8c3Bhbj4mbWRhc2g7PC9zcGFuPiAkUURhdGF7IlRpdGxlIiwgIjYwIn0KICAgICAgICA8L2gxPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iRkFRUGF0aENhdGVnb3J5Ij4KICAgICAgICA8aDM+Cgo8IS0tIGR0bDpibG9jazpGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IC0tPgogICAgICAgICAgICAkQ29uZmlneyJGQVE6OkV4cGxvcmVyOjpQYXRoOjpTZXBhcmF0b3IifQogICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50RkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD0kTFFEYXRheyJDYXRlZ29yeUlEIn07TmF2PSRMUURhdGF7Ik5hdiJ9Ij4KICAgICAgICAgICAgICAgICRRRGF0YXsiTmFtZSJ9CiAgICAgICAgICAgIDwvYT4KPCEtLSBkdGw6YmxvY2s6RkFRUGF0aENhdGVnb3J5RWxlbWVudCAtLT4KCiAgICAgICAgPC9oMz4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJGQVEgSW5mb3JtYXRpb24ifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQ2F0ZWdvcnkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiJERhdGF7IkNhdGVnb3J5TmFtZSJ9In0iPiRUZXh0eyIkRGF0YXsiQ2F0ZWdvcnlOYW1lIn0ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJLZXl3b3JkcyJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CjwhLS0gZHRsOmJsb2NrOktleXdvcmRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudEZBUVNlYXJjaFNtYWxsO1N1YmFjdGlvbj1TZWFyY2g7S2V5d29yZD0kTFFEYXRheyJLZXl3b3JkIn0iIHRpdGxlPSIkUURhdGF7IktleXdvcmQifSI+JFFEYXRheyJLZXl3b3JkIn08L2E+CjwhLS0gZHRsOmJsb2NrOktleXdvcmRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiU3RhdGUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiJERhdGF7IlN0YXRlIn0ifSI+JFRleHR7IiREYXRheyJTdGF0ZSJ9In08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiVmFsaWRpdHkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiJERhdGF7IlZhbGlkIn0ifSI+JFRleHR7IiREYXRheyJWYWxpZCJ9IiwiMjUifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiTGFuZ3VhZ2UifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiJERhdGF7Ikxhbmd1YWdlIn0ifSI+JFRleHR7IiREYXRheyJMYW5ndWFnZSJ9In08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+Cgo8IS0tIGR0bDpibG9jazpWaWV3QXBwcm92YWwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQXBwcm92YWwifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiJERhdGF7IkFwcHJvdmFsIn0ifSI+JFRleHR7IiREYXRheyJBcHByb3ZhbCJ9In08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6Vmlld0FwcHJvdmFsIC0tPgoKPCEtLSBkdGw6YmxvY2s6Vmlld1JhdGluZyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJSYXRpbmcifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSIgdGl0bGU9IiRUZXh0eyJSYXRpbmcgJERhdGF7IlZvdGVSZXN1bHQifSUifSI+CjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFycyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJhdGVTdGFyIj5TdGFyPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFycyAtLT4KPCEtLSBkdGw6YmxvY2s6UmF0ZVN0YXJzQ291bnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSYXRlU3RhclRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiU3RhcnMifSAkVGV4dHsib3V0IG9mIDUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFyc0NvdW50IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpWaWV3UmF0aW5nIC0tPgoKPCEtLSBkdGw6YmxvY2s6Vmlld1ZvdGVzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IlZvdGVzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kUURhdGF7IlZvdGVzIn08L3A+CjwhLS0gZHRsOmJsb2NrOlZpZXdWb3RlcyAtLT4KPCEtLSBkdGw6YmxvY2s6Vmlld05vVm90ZXMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiVm90ZXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiTm8gdm90ZXMgZm91bmQhIn0iPiRUZXh0eyJObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuIn08L3A+CjwhLS0gZHRsOmJsb2NrOlZpZXdOb1ZvdGVzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IkNyZWF0ZWQifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGltZUxvbmd7IiREYXRheyJDcmVhdGVkIn0ifSAoJFFEYXRheyJDcmVhdGVkQnlMb2dpbiJ9KSI+JFRpbWVTaG9ydHsiJERhdGF7IkNyZWF0ZWQifSJ9ICAoJFFEYXRheyJDcmVhdGVkQnlMb2dpbiJ9KTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDaGFuZ2VkIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iJFRpbWVMb25neyIkRGF0YXsiQ2hhbmdlZCJ9In0gKCRRRGF0YXsiQ3JlYXRlZEJ5TG9naW4ifSkiPiRUaW1lU2hvcnR7IiREYXRheyJDaGFuZ2VkIn0ifSAgKCRRRGF0YXsiQ3JlYXRlZEJ5TG9naW4ifSk8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRkFRQ29udGVudFNtYWxsIj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXJ0aWNsZUZBUUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IiREYXRheyJDYXB0aW9uIn0ifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudEhUTUwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiMgVXNlIHRoZSBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSB0byBwcmV2ZW50IHBsdWdpbnMgYW5kIHNjcmlwdHMgZnJvbSBiZWluZyBleGVjdXRlZCBpbiB0aGUgYnJvd3Nlci4KIyBVc2UgSUUncyAobm9uLXN0YW5kYXJkKSBzZWN1cml0eSBhdHRyaWJ1dGUgdG8gYWNoaWV2ZSBzb21ldGhpbmcgc2ltaWxhciBpbiBvbGRlciBJRSBicm93c2Vycy4gQXBwZW5kIHNlc3Npb24gaW5mbyB0byBVUkwgYmVjYXVzZSBJRSB3aWxsIG5vdCBzZW5kIGNvb2tpZXMuCiMgU2V0ICdhbGxvdy1wb3B1cHMnIHRvIGFsbG93IElFMTArIHRvIG9wZW4gbGlua3MuIHJlZjogaHR0cDovL3d3dy53My5vcmcvaHRtbC93Zy93aWtpL0NoYW5nZVByb3Bvc2Fscy9zYW5kYm94X2FsbG93X3BvcHVwcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1wb3B1cHMiIHNlY3VyaXR5PSJyZXN0cmljdGVkIiBjbGFzcz0iRkFRRmllbGQiIGlkPSJJZnJhbWVGQVEkUURhdGF7IkZpZWxkIn0iIG9ubG9hZD0iaWYgKHR5cGVvZiBGQVEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBGQVEuQWdlbnQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBGQVEuQWdlbnQuRkFRWm9vbSA9PT0gJ29iamVjdCcpIHsgRkFRLkFnZW50LkZBUVpvb20uSWZyYW1lQXV0b0hlaWdodCgkKCcjSWZyYW1lRkFRJFFEYXRheyJGaWVsZCJ9JykpOyB9OyIgc3JjPSIjIiBkYXRhLXNyYz0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudEZBUVpvb207U3ViYWN0aW9uPUhUTUxWaWV3O0l0ZW1JRD0kUURhdGF7Ikl0ZW1JRCJ9O0ZpZWxkPSRRRGF0YXsiRmllbGQifTskUUVudnsiU2Vzc2lvbk5hbWUifT0kUUVudnsiU2Vzc2lvbklEIn0iPjwvaWZyYW1lPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudEhUTUwgLS0+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKCiAgICBDb3JlLkNvbmZpZy5TZXQoJ0ZBUTo6RnJvbnRlbmQ6OkFnZW50SFRNTEZpZWxkSGVpZ2h0RGVmYXVsdCcsIHBhcnNlSW50KCIkQ29uZmlneyJGQVE6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodERlZmF1bHQifSIgfHwgMCwgMTApKTsKICAgIENvcmUuQ29uZmlnLlNldCgnRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHRNYXgnLCBwYXJzZUludCgiJENvbmZpZ3siRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHRNYXgifSIgfHwgMCwgMTApKTsKCiAgICAvLyBjb3B5IGRhdGEtc3JjIGF0dHJpYnV0ZSB0byBzcmMgYXR0cmlidXRlIGZvciBhbGwgaWZyYW1lcyB0byBjb3JyZWN0bHkgZGlzcGxheSBpdHMgY29udGVudHMgYWZ0ZXIgSlMgaXMgZnVsbHkgbG9hZGVkCiAgICAkKCdpZnJhbWUnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgJCh0aGlzKS5hdHRyKCJzcmMiLCAkKHRoaXMpLmF0dHIoImRhdGEtc3JjIikgKTsKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudFBsYWluIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJBcnRpY2xlRkFRQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQ29udGVudCJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkZBUUNvbnRlbnRQbGFpbiAtLT4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudCAtLT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGlucHV0IGlkPSJGQVFUaXRsZSIgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaXRsZSIgdmFsdWU9IiRRRGF0YXsiVGl0bGUifSI+CiAgICA8aW5wdXQgaWQ9IkZBUUJvZHkiIHR5cGU9ImhpZGRlbiIgbmFtZT0iQm9keSIgdmFsdWU9IiRRRGF0YXsiRnVsbEJvZHkifSI+CiAgICA8aW5wdXQgaWQ9IkZBUVB1YmxpY0xpbmsiIHR5cGU9ImhpZGRlbiIgbmFtZT0iTGluayIgIHZhbHVlPSIkRGF0YXsiUHVibGljbGluayJ9Ij4KCjwvZGl2PgoKPGRpdiBjbGFzcz0iWm9vbVNtYWxsRm9vdGVyIj4KPCEtLSBkdGw6YmxvY2s6SW5zZXJ0VGV4dCAtLT4KICAgIDxidXR0b24gaWQ9Ikluc2VydFRleHQiIGNsYXNzPSJQcmltYXJ5IFpvb21TbWFsbEJ1dHRvbiI+JFRleHR7Ikluc2VydCBGQVEgVGV4dCJ9PC9idXR0b24+CjwhLS0gZHRsOmJsb2NrOkluc2VydFRleHQgLS0+Cgo8IS0tIGR0bDpibG9jazpJbnNlcnRMaW5rIC0tPgogICAgPGJ1dHRvbiBpZD0iSW5zZXJ0TGluayIgY2xhc3M9IlByaW1hcnkgWm9vbVNtYWxsQnV0dG9uIj4kVGV4dHsiSW5zZXJ0IEZBUSBMaW5rIn08L2J1dHRvbj4KPCEtLSBkdGw6YmxvY2s6SW5zZXJ0TGluayAtLT4KCjwhLS0gZHRsOmJsb2NrOkluc2VydEJvdGggLS0+CiAgICA8YnV0dG9uIGlkPSJJbnNlcnRCb3RoIiBjbGFzcz0iUHJpbWFyeSBab29tU21hbGxCdXR0b24iPiRUZXh0eyJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIn08L2J1dHRvbj4KPCEtLSBkdGw6YmxvY2s6SW5zZXJ0Qm90aCAtLT4KCjwhLS0gZHRsOmJsb2NrOk9yIC0tPgogICAgJFRleHR7Im9yIn0KPCEtLSBkdGw6YmxvY2s6T3IgLS0+CgogICAgPGEgaWQ9IkNhbmNlbCIgY2xhc3M9IiRRRGF0YXsiQ2FuY2VsQnV0dG9uQ2xhc3MifSIgaHJlZj0iIyI+JFRleHR7IkNhbmNlbCAmIGNsb3NlIHdpbmRvdyJ9PC9hPgoKPC9kaXY+Cgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwovKmdsb2JhbCBGQVE6IHRydWUgKi8KJCgnI0NhbmNlbCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICBwYXJlbnQuQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZycsIHBhcmVudC5kb2N1bWVudCkpOwp9KTsKCiQoJyNJbnNlcnRUZXh0JykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIHZhciBGQVFUaXRsZSA9ICQoJyNGQVFUaXRsZScpLnZhbCgpLAogICAgICAgIEZBUUNvbnRlbnQgPSAkKCcjRkFRQm9keScpLnZhbCgpLAogICAgICAgIEZBUUhUTUxDb250ZW50ID0gRkFRQ29udGVudDsKCiAgICBGQVEuQWdlbnQuVGlja2V0Q29tcG9zZS5TZXREYXRhKEZBUVRpdGxlLCBGQVFDb250ZW50LCBGQVFIVE1MQ29udGVudCk7Cn0pOwoKJCgnI0luc2VydExpbmsnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgewogICAgdmFyIEZBUVRpdGxlID0gJCgnI0ZBUVRpdGxlJykudmFsKCksCiAgICAgICAgRkFRQ29udGVudCA9ICQoJyNGQVFQdWJsaWNMaW5rJykudmFsKCksCiAgICAgICAgRkFRSFRNTENvbnRlbnQgPSAnPGEgaHJlZj0iJyArICQoJyNGQVFQdWJsaWNMaW5rJykudmFsKCkgKyAnIj4nICsgJCgnI0ZBUVRpdGxlJykudmFsKCkgKyAnPC9hPic7CgogICAgRkFRLkFnZW50LlRpY2tldENvbXBvc2UuU2V0RGF0YShGQVFUaXRsZSwgRkFRQ29udGVudCwgRkFRSFRNTENvbnRlbnQpOwp9KTsKCiQoJyNJbnNlcnRCb3RoJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIHZhciBGQVFUaXRsZSA9ICQoJyNGQVFUaXRsZScpLnZhbCgpLAogICAgICAgIEZBUUNvbnRlbnQgPSAkKCcjRkFRQm9keScpLnZhbCgpICsgIlxuIiArICQoJyNGQVFQdWJsaWNMaW5rJykudmFsKCksCiAgICAgICAgRkFRSFRNTENvbnRlbnQgPSAkKCcjRkFRQm9keScpLnZhbCgpICsgJzxici8+JyArICc8YSBocmVmPSInICsgJCgnI0ZBUVB1YmxpY0xpbmsnKS52YWwoKSArICciPicgKyAkKCcjRkFRVGl0bGUnKS52YWwoKSArICc8L2E+JzsKCiAgICBGQVEuQWdlbnQuVGlja2V0Q29tcG9zZS5TZXREYXRhKEZBUVRpdGxlLCBGQVFDb250ZW50LCBGQVFIVE1MQ29udGVudCk7Cn0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJBUklBUm9sZU1haW4iPgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9IkZBUUhlYWRlciI+CiAgICAgICAgICAgIDxoMiB0aXRsZT0iJFFEYXRheyJUaXRsZSJ9Ij4KICAgICAgICAgICAgICAgICRRRGF0YXsiVGl0bGUiLCI0MCJ9CiAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iRkFRUGF0aENhdGVnb3J5Ij4KICAgICAgICAgICAgPGgzPgo8IS0tIGR0bDpibG9jazpGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IC0tPgogICAgICAgICAgICAgICAgJENvbmZpZ3siRkFROjpFeHBsb3Jlcjo6UGF0aDo6U2VwYXJhdG9yIn0KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249Q3VzdG9tZXJGQVFFeHBsb3JlcjtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifSI+CiAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJOYW1lIn0KICAgICAgICAgICAgICAgIDwvYT4KPCEtLSBkdGw6YmxvY2s6RkFRUGF0aENhdGVnb3J5RWxlbWVudCAtLT4KICAgICAgICAgICAgPC9oMz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4gTGFyZ2UiPgoKPCEtLSBkdGw6YmxvY2s6UXVpY2tTZWFyY2ggLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4kVGV4dHsiU2VhcmNoIn08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9IlNlYXJjaEJveCIgYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJFFEYXRheyJBY3Rpb24ifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZWFyY2giLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTmF2IiB2YWx1ZT0iJFFEYXRheyJOYXYifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iRnVsbHRleHQiIHZhbHVlPSIkUURhdGF7IlNlYXJjaCJ9IiBpZD0iU2VhcmNoIiB0aXRsZT0iJFRleHR7IlNlYXJjaCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlNlYXJjaCJ9Ij4kVGV4dHsiUXVpY2sgU2VhcmNoIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiV2lsZGNhcmRzIGFyZSBhbGxvd2VkLiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGQVFTZWFyY2hCdXR0b24gU3BhY2luZ1RvcCIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kTFFEYXRheyJBY3Rpb24ifTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiQWR2YW5jZWQgU2VhcmNoIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpRdWlja1NlYXJjaCAtLT4KCjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdCAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4kVGV4dHsiJERhdGF7IkhlYWRlciJ9In08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IlRhYmxlbGlrZSBGQVFNaW5pTGlzdCI+CjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3dQb3NpdGlvbk51bWJlciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7Ik51bWJlciJ9Lgo8IS0tIGR0bDpibG9jazpJbmZvQm94RkFRTWluaUxpc3RJdGVtUm93UG9zaXRpb25OdW1iZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1DdXN0b21lckZBUVpvb207SXRlbUlEPSRMUURhdGF7Ikl0ZW1JRCJ9IiB0aXRsZT0iJFFEYXRheyJUaXRsZSJ9ICgkUURhdGF7IkNhdGVnb3J5TmFtZSJ9KSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiVGl0bGUiLCI1MCJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkNhdGVnb3J5U2hvcnROYW1lIiwiMTUifSAkUURhdGF7Ikxhbmd1YWdlIn0gJFRleHR7IiREYXRheyJTdGF0ZSJ9In0gJFRpbWVTaG9ydHsiJERhdGF7IkNyZWF0ZWQifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6SW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6SW5mb0JveEZBUU1pbmlMaXN0IC0tPgoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgoKPCEtLSBkdGw6YmxvY2s6U3ViY2F0ZWdvcmllcyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0IC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4kVGV4dHsiU3ViY2F0ZWdvcmllcyJ9PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iT3ZlcnZpZXciIHN1bW1hcnk9IkZBUSBjYXRlZ29yaWVzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSIjIj4kVGV4dHsiTmFtZSJ9PC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSIjIj4kVGV4dHsiQ29tbWVudCJ9PC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSIjIj4kVGV4dHsiU3ViY2F0ZWdvcmllcyJ9PC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSIjIj4kVGV4dHsiRkFRIEFydGljbGVzIn08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9DYXRlZ29yeURhdGFGb3VuZE1zZyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPiRUZXh0eyJObyBzdWJjYXRlZ29yaWVzIGZvdW5kLiJ9PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vQ2F0ZWdvcnlEYXRhRm91bmRNc2cgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O0NhdGVnb3J5SUQ9JExRRGF0YXsiQ2F0ZWdvcnlJRCJ9Ij4kUURhdGF7Ik5hbWUifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJDb21tZW50In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJTdWJDYXRlZ29yeUNvdW50In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJBcnRpY2xlQ291bnQifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHRSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdCAtLT4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdWJjYXRlZ29yaWVzIC0tPgoKCjwhLS0gZHRsOmJsb2NrOkZBUUl0ZW1MaXN0IC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPiRUZXh0eyJGQVEgQXJ0aWNsZXMifTwvaDM+CjwhLS0gZHRsOmJsb2NrOlBhZ2luYXRpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlBhZ2luYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz4kUURhdGF7IlJlc3VsdCJ9PC9zdHJvbmc+ICRUZXh0eyJvZiJ9IDxzdHJvbmc+JFFEYXRheyJUb3RhbEhpdHMifTwvc3Ryb25nPiAtICRUZXh0eyJQYWdlIn06ICREYXRheyJTaXRlTmF2QmFyIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlBhZ2luYXRpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iT3ZlcnZpZXciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJGQVFOdW1iZXIgJERhdGF7IkZBUUlEU29ydCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07Q2F0ZWdvcnlJRD0kTFFEYXRheyJDYXRlZ29yeUlEIn07U29ydEJ5PUZBUUlEO09yZGVyPSRMUURhdGF7Ik9yZGVyIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDb25maWd7IkZBUTo6RkFRSG9vayJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVGl0bGUgJERhdGF7IlRpdGxlU29ydCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07Q2F0ZWdvcnlJRD0kTFFEYXRheyJDYXRlZ29yeUlEIn07U29ydEJ5PVRpdGxlO09yZGVyPSRMUURhdGF7Ik9yZGVyIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJUaXRsZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2F0ZWdvcnkgJERhdGF7IkNhdGVnb3J5U29ydCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07Q2F0ZWdvcnlJRD0kTFFEYXRheyJDYXRlZ29yeUlEIn07U29ydEJ5PUNhdGVnb3J5O09yZGVyPSRMUURhdGF7Ik9yZGVyIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJDYXRlZ29yeSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckxhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ikxhbmd1YWdlICREYXRheyJMYW5ndWFnZVNvcnQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O0NhdGVnb3J5SUQ9JExRRGF0YXsiQ2F0ZWdvcnlJRCJ9O1NvcnRCeT1MYW5ndWFnZTtPcmRlcj0kTFFEYXRheyJPcmRlciJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTGFuZ3VhZ2UifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpIZWFkZXJMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdGF0ZSAkRGF0YXsiU3RhdGVTb3J0In0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifTtTb3J0Qnk9U3RhdGU7T3JkZXI9JExRRGF0YXsiT3JkZXIifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlN0YXRlIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9GQVFEYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj4kVGV4dHsiTm8gRkFRIGFydGljbGVzIGZvdW5kLiJ9PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vRkFRRGF0YUZvdW5kTXNnIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkZBUU51bWJlciIgdGl0bGU9IiRRRGF0YXsiTnVtYmVyIn0iPjxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249Q3VzdG9tZXJGQVFab29tO0l0ZW1JRD0kTFFEYXRheyJGQVFJRCJ9Ij4kUURhdGF7Ik51bWJlciJ9PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGl0bGUiIHRpdGxlPSIkUURhdGF7IlRpdGxlIn0iPiRRRGF0YXsiVGl0bGUiLCI2MCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDYXRlZ29yeSIgdGl0bGU9IiRRRGF0YXsiQ2F0ZWdvcnlOYW1lIn0iPiRRRGF0YXsiQ2F0ZWdvcnlOYW1lIiwiNDUifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZExhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Ikxhbmd1YWdlIiB0aXRsZT0iJFFEYXRheyJMYW5ndWFnZSJ9Ij4kUURhdGF7Ikxhbmd1YWdlIiwiNSJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iU3RhdGUiPiRUZXh0eyIkUURhdGF7IlN0YXRlIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6Qm90dG9tU3ViTmF2aWdhdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGFnaW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPiRRRGF0YXsiUmVzdWx0In08L3N0cm9uZz4gJFRleHR7Im9mIn0gPHN0cm9uZz4kUURhdGF7IlRvdGFsSGl0cyJ9PC9zdHJvbmc+IC0gJFRleHR7IlBhZ2UifTogJERhdGF7IlNpdGVOYXZCYXIifQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpCb3R0b21TdWJOYXZpZ2F0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkZBUUl0ZW1MaXN0IC0tPgoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLyBtYWtlIHdob2xlIEZBUSBJdGVtIHJvdyBjbGlja2FibGUsIGJ1dCBub3QgdGhlIGhlYWRlcnMsIGNhbid0IHVzZSBDb3JlLkN1c3RvbWVyLkNsaWNrYWJsZVJvdygpCi8vIHNpbmNlIGl0IHVzZXMgInRhYmxlIHRyIiBhcyBzZWxlY3Rvciwgc2VlIGJ1ZyM5MzI5CiQoInRib2R5IHRyIikuY2xpY2soZnVuY3Rpb24oKXsKICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJCgiYSIsIHRoaXMpLmF0dHIoImhyZWYiKTsKICAgIHJldHVybiBmYWxzZTsKfSk7Cjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0ibWFpbmhlYWQiPiRDb25maWd7IkZBUTo6RkFRSG9vayJ9OiAkUURhdGF7Ik51bWJlciJ9IC8gJFFEYXRheyJUaXRsZSJ9PC90ZD4KICAgIDwvdHI+CjwvdGFibGU+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMTAiIHdpZHRoPSIxMDAlIj4KICAgIDx0cj4KICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPgogICAgICAgICAgICAkVGV4dHsiRkFRLUluZm8ifToKICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI1MCUiIHZhbGlnbj0idG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ2F0ZWdvcnkifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJDYXRlZ29yeU5hbWUifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlN0YXRlIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRUZXh0eyIkRGF0YXsiU3RhdGUifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkxhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7Ikxhbmd1YWdlIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRRRGF0YXsiTGFuZ3VhZ2UifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNTAlIiB2YWxpZ249InRvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgoKPCEtLSBkdGw6YmxvY2s6UmF0aW5nIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlZvdGVzIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkUURhdGF7IlZvdGVzIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJSZXN1bHQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+ICRRRGF0YXsiVm90ZVJlc3VsdCJ9ICYjMzc7PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJhdGluZyAtLT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiTGFzdCB1cGRhdGUifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFRpbWVMb25neyIkRGF0YXsiQ2hhbmdlZCJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiS2V5d29yZHMifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjkwJSIgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JERhdGF7IktleXdvcmRzIn08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxocj4KICAgICAgICA8L3RkPgogICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudCAtLT4KICAgIDx0cj4KICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPgogICAgICAgICAgICAkVGV4dHsiJERhdGF7IkNhcHRpb24ifSJ9OiAgPHNwYW4gY2xhc3M9InNtYWxsIj4oJFRleHR7IiREYXRheyJTdGF0ZU5hbWUifSJ9KSA8L3NwYW4+CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxMCIgY2VsbFBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JERhdGF7IkNvbnRlbnQifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD4KICAgICAgICAgICAgPGhyPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50IC0tPgoKPC90YWJsZT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOlNlYXJjaCAtLT4KPGRpdiBpZD0iTWFpbkJveCIgY2xhc3M9IlNlYXJjaCBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iTG9hZFByb2ZpbGUiLz4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJQcm9maWxlIn08L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJQcm9maWxlIj4kVGV4dHsiU2VhcmNoIHRlbXBsYXRlIn08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICREYXRheyJQcm9maWxlc1N0cmcifQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJvdyI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIG5hbWU9IlNlbGVjdFRlbXBsYXRlIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU2VsZWN0In0iPiRUZXh0eyJTZWxlY3QifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJFcmFzZVRlbXBsYXRlIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiRGVsZXRlIn0iPiRUZXh0eyJEZWxldGUifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJTZWFyY2hUZW1wbGF0ZSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlNlYXJjaCJ9Ij4kVGV4dHsiU2VhcmNoIn08L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPgoKICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIG5hbWU9ImNvbXBvc2UiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZWFyY2giLz4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgPGgyPiRDb25maWd7IkZBUTo6RkFRSG9vayJ9PC9oMj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTnVtYmVyIj4kQ29uZmlneyJGQVE6OkZBUUhvb2sifTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSIkQ29uZmlneyJGQVE6OkZBUUhvb2sifSIgdHlwZT0idGV4dCIgbmFtZT0iTnVtYmVyIiBpZD0iTnVtYmVyIiBzaXplPSIzMCIgdmFsdWU9IiRRRGF0YXsiTnVtYmVyIn0iLz4KICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiZS4gZy4gMTAqNTE1NSBvciAxMDU2NTgqIn08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSJ9PC9oMj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVGl0bGUiPiRUZXh0eyJGdWxsdGV4dCJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IiRUZXh0eyJGdWxsdGV4dCJ9IiB0eXBlPSJ0ZXh0IiBpZD0iRnVsbFRleHQiIG5hbWU9IkZ1bGx0ZXh0IiB2YWx1ZT0iJFFEYXRheyJGdWxsdGV4dCJ9IiBzaXplPSIyMCIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUaXRsZSI+JFRleHR7IlRpdGxlIn08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iJFRleHR7IlRpdGxlIn0iIHR5cGU9InRleHQiIGlkPSJUaXRsZSIgbmFtZT0iVGl0bGUiIHZhbHVlPSIkUURhdGF7IlRpdGxlIn0iIHNpemU9IjIwIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IktleXdvcmQiPiRUZXh0eyJLZXl3b3JkIn08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iJFRleHR7IktleXdvcmQifSIgdHlwZT0idGV4dCIgaWQ9IktleXdvcmQiIG5hbWU9IktleXdvcmQiIHZhbHVlPSIkUURhdGF7IktleXdvcmQifSIgc2l6ZT0iMjAiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiTGFuZ3VhZ2UifTo8L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAkRGF0YXsiTGFuZ3VhZ2VzU3RyZyJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQ2F0ZWdvcnkifTo8L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQ2F0ZWdvcmllc1N0cmcifQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/In08L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTYXZlUHJvZmlsZSI+JFRleHR7IlNhdmUgYXMgVGVtcGxhdGU/In08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iU2F2ZSBhcyBUZW1wbGF0ZSIgdHlwZT0iY2hlY2tib3giIGlkPSJTYXZlUHJvZmlsZSIgbmFtZT0iU2F2ZVByb2ZpbGUiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUHJvZmlsIj4kVGV4dHsiVGVtcGxhdGUgTmFtZSJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlBpY2sgYSBwcm9maWwgbmFtZSIgdHlwZT0idGV4dCIgaWQ9IlByb2ZpbCIgbmFtZT0iUHJvZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSIkUURhdGF7IlByb2ZpbGUifSIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8ZGl2IGlkPSJCb3R0b21BY3Rpb25Sb3ciIGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU2VhcmNoIn0iPiRUZXh0eyJTZWFyY2gifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7Ik91dHB1dCB0byJ9PC9zcGFuPgogICAgICAgICAgICAgICAgJERhdGF7IlJlc3VsdEZvcm1TdHJnIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgQ29yZS5DdXN0b21lci5Jbml0Rm9jdXMoKTsKPC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8IS0tIGR0bDpibG9jazpTZWFyY2ggLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT4kUXVvdGV7IiRDb25maWd7IlByb2R1Y3ROYW1lIn0ifSAtICRUZXh0eyJDdXN0b21lciJ9ICgkUXVvdGV7IiRDb25maWd7IkZBUTo6RkFRSG9vayJ9In0pPC9TaG9ydE5hbWU+CjxEZXNjcmlwdGlvbj4kUXVvdGV7IiRDb25maWd7IlByb2R1Y3ROYW1lIn0ifSAtICRUZXh0eyJDdXN0b21lciJ9ICgkUXVvdGV7IiRDb25maWd7IkZBUTo6RkFRSG9vayJ9In0pPC9EZXNjcmlwdGlvbj4KPElucHV0RW5jb2Rpbmc+JEVudnsiVXNlckNoYXJzZXQifTwvSW5wdXRFbmNvZGluZz4KPFVybCB0eXBlPSJ0ZXh0L2h0bWwiIHRlbXBsYXRlPSIkQ29uZmlneyJIdHRwVHlwZSJ9Oi8vJEVudnsiSFRUUF9IT1NUIn0kRW52eyJCYXNlbGluayJ9QWN0aW9uPUN1c3RvbWVyRkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7TnVtYmVyPXtzZWFyY2hUZXJtc30iIC8+CjxJbWFnZSBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIHR5cGU9ImltYWdlL3gtaWNvbiI+JENvbmZpZ3siSHR0cFR5cGUifTovLyRFbnZ7IkhUVFBfSE9TVCJ9JENvbmZpZ3siRnJvbnRlbmQ6OkltYWdlUGF0aCJ9aWNvbnMvcHJvZHVjdC5pY288L0ltYWdlPgo8L09wZW5TZWFyY2hEZXNjcmlwdGlvbj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT4kUXVvdGV7IiRDb25maWd7IlByb2R1Y3ROYW1lIn0ifSAtICRUZXh0eyJDdXN0b21lciJ9ICgkVGV4dHsiRkFRRnVsbHRleHQifSk8L1Nob3J0TmFtZT4KPERlc2NyaXB0aW9uPiRRdW90ZXsiJENvbmZpZ3siUHJvZHVjdE5hbWUifSJ9IC0gJFRleHR7IkN1c3RvbWVyIn0gKCRUZXh0eyJGQVFGdWxsdGV4dCJ9KTwvRGVzY3JpcHRpb24+CjxJbnB1dEVuY29kaW5nPiRFbnZ7IlVzZXJDaGFyc2V0In08L0lucHV0RW5jb2Rpbmc+CjxVcmwgdHlwZT0idGV4dC9odG1sIiB0ZW1wbGF0ZT0iJENvbmZpZ3siSHR0cFR5cGUifTovLyRFbnZ7IkhUVFBfSE9TVCJ9JEVudnsiQmFzZWxpbmsifUFjdGlvbj1DdXN0b21lckZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO0Z1bGx0ZXh0PXtzZWFyY2hUZXJtc30iIC8+CjxJbWFnZSBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIHR5cGU9ImltYWdlL3gtaWNvbiI+JENvbmZpZ3siSHR0cFR5cGUifTovLyRFbnZ7IkhUVFBfSE9TVCJ9JENvbmZpZ3siRnJvbnRlbmQ6OkltYWdlUGF0aCJ9aWNvbnMvcHJvZHVjdC5pY288L0ltYWdlPgo8L09wZW5TZWFyY2hEZXNjcmlwdGlvbj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gc3RhcnQgZm9ybSAtLT4KPGk+JERhdGF7Ildhcm5pbmcifTwvaT4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJtYWluaGVhZCI+JFRleHR7IlNlYXJjaCJ9PC90ZD4KICAgIDwvdHI+CjwvdGFibGU+Cjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRDb25maWd7IkZBUTo6RkFRSG9vayJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjM1JSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJUaXRsZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJDYXRlZ29yeSJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6SGVhZGVyTGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiTGFuZ3VhZ2UifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckxhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTUlIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlN0YXRlIn08L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAlIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkNoYW5nZWQifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRRRGF0YXsiTnVtYmVyIn08L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7IlRpdGxlIiwiNDAifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRRRGF0YXsiQ2F0ZWdvcnlOYW1lIiwiMzAifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZExhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7Ikxhbmd1YWdlIn08L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFRleHR7IiREYXRheyJTdGF0ZSJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kVGltZUxvbmd7IiREYXRheyJDaGFuZ2VkIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC90ZD4KICAgIDwvdHI+CjwvdGFibGU+CjwhLS0gZW5kIGZvcm0gLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJUaWNrZXRWaWV3IEFSSUFSb2xlTWFpbiBTZWFyY2hSZXN1bHRzICRDb25maWd7IlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0T3ZlcnZpZXdTb3J0YWJsZSJ9IFNvcnRhYmxlIj4KICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249TG9hZFByb2ZpbGU7JFFEYXRheyJMaW5rIn0iPgogICAgICAgICAgICAgICAgICAgICZsYXJyOyAkVGV4dHsiQ2hhbmdlIHNlYXJjaCBvcHRpb25zIn0KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgo8IS0tIGR0bDpibG9jazpQYWdpbmF0aW9uIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IlRhYnMgUGFnaW5hdGlvbiI+CiAgICAgICAgICAgIDxzdHJvbmc+JFFEYXRheyJSZXN1bHQifTwvc3Ryb25nPiAkVGV4dHsib2YifSA8c3Ryb25nPiRRRGF0YXsiVG90YWxIaXRzIn08L3N0cm9uZz4gLSAkVGV4dHsiUGFnZSJ9OiAkRGF0YXsiU2l0ZU5hdkJhciJ9CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlBhZ2luYXRpb24gLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IlNlYXJjaFRlcm1zIj4KICAgICAgICAgICAgPGgyPiRUZXh0eyJTZWFyY2ggUmVzdWx0cyBmb3IifTo8L2gyPgo8IS0tIGR0bDpibG9jazpTZWFyY2hUZXJtcyAtLT4KICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICAkUURhdGF7IkF0dHJpYnV0ZSJ9OiAkUURhdGF7IlZhbHVlIn0KIyBoaWRlIHJlbW92ZSBsaW5rLCBmdW5jdGlvbmFsaXR5IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQKIyAgICAgICAgICAgICAgICA8YSB0aXRsZT0iJFRleHR7IlJlbW92ZSB0aGlzIFNlYXJjaCBUZXJtLiJ9IiBocmVmPSIkRGF0YXsiU2VhcmNoVmFsdWUifSI+JnRpbWVzOzwvYT4KICAgICAgICAgICAgPC9zcGFuPgo8IS0tIGR0bDpibG9jazpTZWFyY2hUZXJtcyAtLT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPHRhYmxlIGNsYXNzPSJPdmVydmlldyI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkZBUU51bWJlciAkRGF0YXsiRkFRSURTb3J0In0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZWFyY2g7U29ydEJ5PUZBUUlEO09yZGVyPSRMUURhdGF7Ik9yZGVyIn07UHJvZmlsZT0kTFFEYXRheyJQcm9maWxlIn07VGFrZUxhc3RTZWFyY2g9MTtGaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn07TGltaXQ9JExRRGF0YXsiTGltaXQifTtUeXBlPSRMUURhdGF7IlR5cGUifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ29uZmlneyJGQVE6OkZBUUhvb2sifQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpdGxlICREYXRheyJUaXRsZVNvcnQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVNlYXJjaDtTb3J0Qnk9VGl0bGU7T3JkZXI9JExRRGF0YXsiT3JkZXIifTtQcm9maWxlPSRMUURhdGF7IlByb2ZpbGUifTtUYWtlTGFzdFNlYXJjaD0xO0ZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifTtMaW1pdD0kTFFEYXRheyJMaW1pdCJ9O1R5cGU9JExRRGF0YXsiVHlwZSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJUaXRsZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2F0ZWdvcnkgJERhdGF7IkNhdGVnb3J5U29ydCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2VhcmNoO1NvcnRCeT1DYXRlZ29yeTtPcmRlcj0kTFFEYXRheyJPcmRlciJ9O1Byb2ZpbGU9JExRRGF0YXsiUHJvZmlsZSJ9O1Rha2VMYXN0U2VhcmNoPTE7RmlsdGVyPSRMUURhdGF7IkZpbHRlciJ9O0xpbWl0PSRMUURhdGF7IkxpbWl0In07VHlwZT0kTFFEYXRheyJUeXBlIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IkNhdGVnb3J5In0KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckxhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iTGFuZ3VhZ2UgJERhdGF7Ikxhbmd1YWdlU29ydCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2VhcmNoO1NvcnRCeT1MYW5ndWFnZTtPcmRlcj0kTFFEYXRheyJPcmRlciJ9O1Byb2ZpbGU9JExRRGF0YXsiUHJvZmlsZSJ9O1Rha2VMYXN0U2VhcmNoPTE7RmlsdGVyPSRMUURhdGF7IkZpbHRlciJ9O0xpbWl0PSRMUURhdGF7IkxpbWl0In07VHlwZT0kTFFEYXRheyJUeXBlIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ikxhbmd1YWdlIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckxhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2hhbmdlZCAkRGF0YXsiQ2hhbmdlZFNvcnQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVNlYXJjaDtTb3J0Qnk9Q2hhbmdlZDtPcmRlcj0kTFFEYXRheyJPcmRlciJ9O1Byb2ZpbGU9JExRRGF0YXsiUHJvZmlsZSJ9O1Rha2VMYXN0U2VhcmNoPTE7RmlsdGVyPSRMUURhdGF7IkZpbHRlciJ9O0xpbWl0PSRMUURhdGF7IkxpbWl0In07VHlwZT0kTFFEYXRheyJUeXBlIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IkNoYW5nZWQifQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICA8dHIgaWQ9IkVtcHR5TWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj4kVGV4dHsiTm8gRkFRIGRhdGEgZm91bmQuIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgICAgICA8dHIgdGl0bGU9IiRRRGF0YXsiVGlja2V0TnVtYmVyIn0iPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRkFRTnVtYmVyIj48YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUN1c3RvbWVyRkFRWm9vbTtJdGVtSUQ9JExRRGF0YXsiRkFRSUQifSI+JFFEYXRheyJOdW1iZXIifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGl0bGUiPiRRRGF0YXsiVGl0bGUiLCI2MCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNhdGVnb3J5Ij4kUURhdGF7IkNhdGVnb3J5TmFtZSIsIjYwIn08L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Ikxhbmd1YWdlIj4kUURhdGF7Ikxhbmd1YWdlIiwiNSJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDaGFuZ2VkIj4kVGltZVNob3J0eyIkRGF0YXsiQ2hhbmdlZCJ9In08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkIC0tPgogICAgICAgICAgICA8L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6Qm90dG9tU3ViTmF2aWdhdGlvbiAtLT4KICAgIDxkaXYgaWQ9IkJvdHRvbUFjdGlvblJvdyIgY2xhc3M9IkFjdGlvblJvdyBCaWdCdXR0b25zIj4KICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1Mb2FkUHJvZmlsZTskTFFEYXRheyJMaW5rIn0iPgogICAgICAgICAgICAgICAgICAgICZsYXJyOyAkVGV4dHsiQ2hhbmdlIHNlYXJjaCBvcHRpb25zIn0KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgICAgIDxkaXYgY2xhc3M9IlRhYnMgUGFnaW5hdGlvbiI+CiAgICAgICAgICAgIDxzdHJvbmc+JFFEYXRheyJSZXN1bHQifTwvc3Ryb25nPiAkVGV4dHsib2YifSA8c3Ryb25nPiRRRGF0YXsiVG90YWxIaXRzIn08L3N0cm9uZz4gLSAkVGV4dHsiUGFnZSJ9OiAkRGF0YXsiU2l0ZU5hdkJhciJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkJvdHRvbVN1Yk5hdmlnYXRpb24gLS0+CjwvZGl2PgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIENvcmUuQ3VzdG9tZXIuQ2xpY2thYmxlUm93KCk7Cjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJUaWNrZXRab29tIEFSSUFSb2xlTWFpbiI+Cgo8IS0tIGR0bDpibG9jazpCYWNrIC0tPgogICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifSRFbnZ7Ikxhc3RTY3JlZW5PdmVydmlldyJ9Ij4mbGFycjsgJFRleHR7IkJhY2sifTwvYT48L2xpPgogICAgICAgIDwvdWw+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkJhY2sgLS0+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iRkFRSGVhZGVyIj4KICAgICAgICAgICAgPGgyIHRpdGxlPSIkUURhdGF7IlRpdGxlIn0iPgogICAgICAgICAgICAgICAgJFFEYXRheyJUaXRsZSIsIjY1In0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJGQVFIb29rIj4kUURhdGF7Ik51bWJlciJ9PC9zcGFuPgogICAgICAgICAgICA8L2gyPgogICAgICAgICAgICA8dWwgaWQ9IkZBUU9wdGlvbnMiPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249Q3VzdG9tZXJGQVFQcmludDtJdGVtSUQ9JExRRGF0YXsiSXRlbUlEIn0iIGNsYXNzPSJQcmludCBBc1BvcHVwIiB0aXRsZT0iJFRleHR7IlByaW50In0iPiRUZXh0eyJQcmludCJ9PC9hPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iRkFRUGF0aENhdGVnb3J5IEZBUVpvb20iPgogICAgICAgICAgICA8aDM+CjwhLS0gZHRsOmJsb2NrOkZBUVBhdGhDYXRlZ29yeUVsZW1lbnQgLS0+CiAgICAgICAgICAgICAgICAkQ29uZmlneyJGQVE6OkV4cGxvcmVyOjpQYXRoOjpTZXBhcmF0b3IifQogICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1DdXN0b21lckZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9JExRRGF0YXsiQ2F0ZWdvcnlJRCJ9Ij4KICAgICAgICAgICAgICAgICAgICAkUURhdGF7Ik5hbWUifQogICAgICAgICAgICAgICAgPC9hPgo8IS0tIGR0bDpibG9jazpGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IC0tPgo8IS0tIGR0bDpibG9jazpGQVFQYXRoSXRlbUVsZW1lbnQgLS0+CiAgICAgICAgICAgICAgICAkQ29uZmlneyJGQVE6OkV4cGxvcmVyOjpQYXRoOjpTZXBhcmF0b3IifQogICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifTtJdGVtSUQ9JExRRGF0YXsiSXRlbUlEIn0iPgogICAgICAgICAgICAgICAgICAgICRRRGF0YXsiVGl0bGUifQogICAgICAgICAgICAgICAgPC9hPgo8IS0tIGR0bDpibG9jazpGQVFQYXRoSXRlbUVsZW1lbnQgLS0+CiAgICAgICAgICAgIDwvaDM+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDx1bCBpZD0iTWVzc2FnZXMiPgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50SGVhZGVyIC0tPgogICAgICAgICAgICA8bGkgY2xhc3M9IkN1c3RvbWVyIFZpc2libGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTWVzc2FnZUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgzPiRUZXh0eyJBdHRhY2htZW50cyJ9OjwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJBdHRhY2htZW50cyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGFiZWwiPiRUZXh0eyJBdHRhY2htZW50In06PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KPCEtLSBkdGw6YmxvY2s6QXR0YWNobWVudFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkRvd25sb2FkQXR0YWNobWVudCIgdGl0bGU9IiRUZXh0eyJEb3dubG9hZCBBdHRhY2htZW50In0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O0l0ZW1JRD0kTFFEYXRheyJJdGVtSUQifTtGaWxlSUQ9JExRRGF0YXsiRmlsZUlEIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiRmlsZW5hbWUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAkUURhdGF7IkZpbGVzaXplIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8YnIvPgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50Um93IC0tPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOkZBUUNvbnRlbnQgLS0+CiAgICAgICAgICAgIDxsaSBjbGFzcz0iQ3VzdG9tZXIgVmlzaWJsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJNZXNzYWdlSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDM+JFRleHR7IiREYXRheyJDYXB0aW9uIn0ifTo8L2gzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50SFRNTCAtLT4KICAgICAgICAgICAgICAgIDxkaXY+CiMgVXNlIHRoZSBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSB0byBwcmV2ZW50IHBsdWdpbnMgYW5kIHNjcmlwdHMgZnJvbSBiZWluZyBleGVjdXRlZCBpbiB0aGUgYnJvd3Nlci4KIyBVc2UgSUUncyAobm9uLXN0YW5kYXJkKSBzZWN1cml0eSBhdHRyaWJ1dGUgdG8gYWNoaWV2ZSBzb21ldGhpbmcgc2ltaWxhciBpbiBvbGRlciBJRSBicm93c2Vycy4gQXBwZW5kIHNlc3Npb24gaW5mbyB0byBVUkwgYmVjYXVzZSBJRSB3aWxsIG5vdCBzZW5kIGNvb2tpZXMuCiMgU2V0ICdhbGxvdy1wb3B1cHMnIHRvIGFsbG93IElFMTArIHRvIG9wZW4gbGlua3MuIHJlZjogaHR0cDovL3d3dy53My5vcmcvaHRtbC93Zy93aWtpL0NoYW5nZVByb3Bvc2Fscy9zYW5kYm94X2FsbG93X3BvcHVwcwogICAgICAgICAgICAgICAgICAgIDxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctcG9wdXBzIiBzZWN1cml0eT0icmVzdHJpY3RlZCIgY2xhc3M9IkZBUUZpZWxkIiBpZD0iSWZyYW1lRkFRJFFEYXRheyJGaWVsZCJ9IiBvbmxvYWQ9ImlmICh0eXBlb2YgRkFRID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgRkFRLkN1c3RvbWVyID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgRkFRLkN1c3RvbWVyLkZBUVpvb20gPT09ICdvYmplY3QnKSB7IEZBUS5DdXN0b21lci5GQVFab29tLklmcmFtZUF1dG9IZWlnaHQoJCgnI0lmcmFtZUZBUSRRRGF0YXsiRmllbGQifScpKTsgfTsiIHNyYz0iIyIgZGF0YS1zcmM9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249Q3VzdG9tZXJGQVFab29tO1N1YmFjdGlvbj1IVE1MVmlldztJdGVtSUQ9JFFEYXRheyJJdGVtSUQifTtGaWVsZD0kUURhdGF7IkZpZWxkIn07JFFFbnZ7IlNlc3Npb25OYW1lIn09JFFFbnZ7IlNlc3Npb25JRCJ9Ij48L2lmcmFtZT4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50SFRNTCAtLT4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgQ29yZS5Db25maWcuU2V0KCdGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodERlZmF1bHQnLCBwYXJzZUludCgiJENvbmZpZ3siRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHREZWZhdWx0In0iIHx8IDAsIDEwKSk7CiAgICBDb3JlLkNvbmZpZy5TZXQoJ0ZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVySFRNTEZpZWxkSGVpZ2h0TWF4JywgcGFyc2VJbnQoIiRDb25maWd7IkZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVySFRNTEZpZWxkSGVpZ2h0TWF4In0iIHx8IDAsIDEwKSk7CgogICAgLy8gY29weSBkYXRhLXNyYyBhdHRyaWJ1dGUgdG8gc3JjIGF0dHJpYnV0ZSBmb3IgYWxsIGlmcmFtZXMgdG8gY29ycmVjdGx5IGRpc3BsYXkgaXRzIGNvbnRlbnRzIGFmdGVyIEpTIGlzIGZ1bGx5IGxvYWRlZAogICAgJCgnaWZyYW1lJykuZWFjaChmdW5jdGlvbigpewogICAgICAgICQodGhpcykuYXR0cigic3JjIiwgJCh0aGlzKS5hdHRyKCJkYXRhLXNyYyIpICk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmJsb2NrOkZBUUNvbnRlbnRQbGFpbiAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVGQVFDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IkNvbnRlbnQifQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkZBUUNvbnRlbnRQbGFpbiAtLT4KICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudCAtLT4KCiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGlkPSJab29tU2lkZWJhciI+CiAgICAgICAgICAgIDx1bCBpZD0iTWV0YWRhdGEiPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik1lc3NhZ2VIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+JFRleHR7IkZBUSBJbmZvcm1hdGlvbiJ9PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iS2V5Ij4kVGV4dHsiQ2F0ZWdvcnkifTo8L3NwYW4+IDxzcGFuIHRpdGxlPSIkVGV4dHsiJERhdGF7IkNhdGVnb3J5TmFtZSJ9In0iPiRUZXh0eyIkRGF0YXsiQ2F0ZWdvcnlOYW1lIn0ifTwvc3Bhbj48L2xpPgoKICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iS2V5d29yZHNDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJLZXkiPiRUZXh0eyJLZXl3b3JkcyJ9Ojwvc3Bhbj4KPCEtLSBkdGw6YmxvY2s6S2V5d29yZHMgLS0+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IktleXdvcmQiIHRpdGxlPSIkVGV4dHsiU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQifTogJFFEYXRheyJLZXl3b3JkIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUN1c3RvbWVyRkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7S2V5d29yZD0kTFFEYXRheyJLZXl3b3JkIn0iPiRRRGF0YXsiS2V5d29yZCJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KPCEtLSBkdGw6YmxvY2s6S2V5d29yZHMgLS0+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJLZXkiPiRUZXh0eyJTdGF0ZSJ9Ojwvc3Bhbj4gPHNwYW4gdGl0bGU9IiRUZXh0eyIkRGF0YXsiU3RhdGUifSJ9Ij4kVGV4dHsiJERhdGF7IlN0YXRlIn0ifTwvc3Bhbj48L2xpPgo8IS0tIGR0bDpibG9jazpMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iS2V5Ij4kVGV4dHsiTGFuZ3VhZ2UifTo8L3NwYW4+IDxzcGFuIHRpdGxlPSIkVGV4dHsiJERhdGF7Ikxhbmd1YWdlIn0ifSI+JFRleHR7IiREYXRheyJMYW5ndWFnZSJ9In08L3NwYW4+PC9saT4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+Cgo8IS0tIGR0bDpibG9jazpWaWV3UmF0aW5nIC0tPgogICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJLZXkgUmF0aW5nTGFiZWwiPiRUZXh0eyJSYXRpbmcifTo8L3NwYW4+CjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFycyAtLT4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZVN0YXIiPlN0YXI8L3NwYW4+CjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFycyAtLT4KPCEtLSBkdGw6YmxvY2s6UmF0ZVN0YXJzQ291bnQgLS0+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJhdGVTdGFyVGV4dCIgdGl0bGU9IiRRRGF0YXsiU3RhcnMifSAkVGV4dHsib3V0IG9mIDUifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiU3RhcnMifSAkVGV4dHsib3V0IG9mIDUifQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KPCEtLSBkdGw6YmxvY2s6UmF0ZVN0YXJzQ291bnQgLS0+CiAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpWaWV3UmF0aW5nIC0tPgoKPCEtLSBkdGw6YmxvY2s6Vmlld1ZvdGVzIC0tPgogICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJLZXkiPiRUZXh0eyJWb3RlcyJ9Ojwvc3Bhbj4gPHNwYW4gdGl0bGU9IiRRRGF0YXsiVm90ZXMifSI+JFFEYXRheyJWb3RlcyJ9PC9zcGFuPjwvbGk+CjwhLS0gZHRsOmJsb2NrOlZpZXdWb3RlcyAtLT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZyAtLT4KICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IkZBUVZvdGUiIGNsYXNzPSJQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iVm90aW5nQm94IFZpc2libGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTWVzc2FnZUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgzPiRUZXh0eyJSYXRpbmcifTo8L2gzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBpZD0iTWVzc2VuZ2VyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iVm90aW5nUXVlc3Rpb24iPiRUZXh0eyJIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZUxhYmVsQmVmb3JlIj4kVGV4dHsibm90IGhlbHBmdWwifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZ1JhdGVSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmF0ZUJ1dHRvbiREYXRheyJWYWx1ZSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IlJhdGVCdXR0b24gJExRRGF0YXsiUmF0ZUNsYXNzIn0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07SXRlbUlEPSRMUURhdGF7Ikl0ZW1JRCJ9O1NlbGVjdGVkUmF0ZT0kTFFEYXRheyJWYWx1ZSJ9Ij4kUURhdGF7IlRpdGxlIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZ1JhdGVSb3cgLS0+CgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJSYXRlTGFiZWxBZnRlciI+JFRleHR7InZlcnkgaGVscGZ1bCJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkN1c3RvbWVyRkFRWm9vbSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlZvdGUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDYXRlZ29yeUlEIiB2YWx1ZT0iJFFEYXRheyJDYXRlZ29yeUlEIn0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJdGVtSUQiIHZhbHVlPSIkUURhdGF7Ikl0ZW1JRCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KCjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZ1N1Ym1pdCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU3VibWl0In0iPiRUZXh0eyJTdWJtaXQifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSYXRlIiB2YWx1ZT0iJFFEYXRheyJTZWxlY3RlZFJhdGUifSJpZD0iUmF0ZVZhbHVlIi8+CjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZ1N1Ym1pdCAtLT4KCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPgo8IS0tIGR0bDpibG9jazpGQVFWb3RpbmcgLS0+CgogICAgPC9kaXY+CjwvZGl2PgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICQoJ2EuQXNQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdUaWNrZXRBY3Rpb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKPC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJBUklBUm9sZU1haW4iPgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9IkZBUUhlYWRlciI+CiAgICAgICAgICAgIDxoMiB0aXRsZT0iJFFEYXRheyJUaXRsZSJ9Ij4KICAgICAgICAgICAgICAgICRRRGF0YXsiVGl0bGUiLCI0MCJ9CiAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iRkFRUGF0aENhdGVnb3J5Ij4KICAgICAgICAgICAgPGgzPgo8IS0tIGR0bDpibG9jazpGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IC0tPgogICAgICAgICAgICAgICAgJENvbmZpZ3siRkFROjpFeHBsb3Jlcjo6UGF0aDo6U2VwYXJhdG9yIn0KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249UHVibGljRkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD0kTFFEYXRheyJDYXRlZ29yeUlEIn0iPgogICAgICAgICAgICAgICAgICAgICRRRGF0YXsiTmFtZSJ9CiAgICAgICAgICAgICAgICA8L2E+CjwhLS0gZHRsOmJsb2NrOkZBUVBhdGhDYXRlZ29yeUVsZW1lbnQgLS0+CiAgICAgICAgICAgIDwvaDM+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIExhcmdlIj4KCjwhLS0gZHRsOmJsb2NrOlF1aWNrU2VhcmNoIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+JFRleHR7IlNlYXJjaCJ9PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJTZWFyY2hCb3giIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRRRGF0YXsiQWN0aW9uIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VhcmNoIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik5hdiIgdmFsdWU9IiRRRGF0YXsiTmF2In0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkZ1bGx0ZXh0IiB2YWx1ZT0iJFFEYXRheyJTZWFyY2gifSIgaWQ9IlNlYXJjaCIgdGl0bGU9IiRUZXh0eyJTZWFyY2gifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTZWFyY2gifSI+JFRleHR7IlF1aWNrIFNlYXJjaCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IldpbGRjYXJkcyBhcmUgYWxsb3dlZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRkFRU2VhcmNoQnV0dG9uIFNwYWNpbmdUb3AiIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JExRRGF0YXsiQWN0aW9uIn07Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkFkdmFuY2VkIFNlYXJjaCJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UXVpY2tTZWFyY2ggLS0+Cgo8IS0tIGR0bDpibG9jazpJbmZvQm94RkFRTWluaUxpc3QgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+JFRleHR7IiREYXRheyJIZWFkZXIifSJ9PC9oMz4KPCEtLSBkdGw6YmxvY2s6SW5mb0JveEZBUU1pbmlMaXN0TmV3c1JTUyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1QdWJsaWNGQVFSU1M7VHlwZT0kTFFEYXRheyJUeXBlIn0iIHRpdGxlPSIkVGV4dHsiJERhdGF7IlRpdGxlIn0ifSIgY2xhc3M9IlJTU0ljb24gQXNCbG9jayI+UlNTPC9hPgo8IS0tIGR0bDpibG9jazpJbmZvQm94RkFRTWluaUxpc3ROZXdzUlNTIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IlRhYmxlbGlrZSBGQVFNaW5pTGlzdCI+CjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3dQb3NpdGlvbk51bWJlciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7Ik51bWJlciJ9Lgo8IS0tIGR0bDpibG9jazpJbmZvQm94RkFRTWluaUxpc3RJdGVtUm93UG9zaXRpb25OdW1iZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1QdWJsaWNGQVFab29tO0l0ZW1JRD0kTFFEYXRheyJJdGVtSUQifSIgdGl0bGU9IiRRRGF0YXsiVGl0bGUifSAoJFFEYXRheyJDYXRlZ29yeU5hbWUifSkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IlRpdGxlIiwiNTAifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJDYXRlZ29yeVNob3J0TmFtZSIsIjE1In0gJFFEYXRheyJMYW5ndWFnZSJ9ICRUZXh0eyIkRGF0YXsiU3RhdGUifSJ9ICRUaW1lU2hvcnR7IiREYXRheyJDcmVhdGVkIn0ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOkluZm9Cb3hGQVFNaW5pTGlzdCAtLT4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KCjwhLS0gZHRsOmJsb2NrOlN1YmNhdGVnb3JpZXMgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdCAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+JFRleHR7IlN1YmNhdGVnb3JpZXMifTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9Ik92ZXJ2aWV3IiBzdW1tYXJ5PSJGQVEgY2F0ZWdvcmllcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIyI+JFRleHR7Ik5hbWUifTwvYT48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIyI+JFRleHR7IkNvbW1lbnQifTwvYT48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIyI+JFRleHR7IlN1YmNhdGVnb3JpZXMifTwvYT48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIyI+JFRleHR7IkZBUSBBcnRpY2xlcyJ9PC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOk5vQ2F0ZWdvcnlEYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj4kVGV4dHsiTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4ifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb0NhdGVnb3J5RGF0YUZvdW5kTXNnIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifSI+JFFEYXRheyJOYW1lIn08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiQ29tbWVudCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiU3ViQ2F0ZWdvcnlDb3VudCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiQXJ0aWNsZUNvdW50In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHQgLS0+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3ViY2F0ZWdvcmllcyAtLT4KCgo8IS0tIGR0bDpibG9jazpGQVFJdGVtTGlzdCAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4kVGV4dHsiRkFRIEFydGljbGVzIn08L2gzPgo8IS0tIGR0bDpibG9jazpQYWdpbmF0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJQYWdpbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+JFFEYXRheyJSZXN1bHQifTwvc3Ryb25nPiAkVGV4dHsib2YifSA8c3Ryb25nPiRRRGF0YXsiVG90YWxIaXRzIn08L3N0cm9uZz4gLSAkVGV4dHsiUGFnZSJ9OiAkRGF0YXsiU2l0ZU5hdkJhciJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpQYWdpbmF0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9Ik92ZXJ2aWV3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRkFRTnVtYmVyICREYXRheyJGQVFJRFNvcnQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O0NhdGVnb3J5SUQ9JExRRGF0YXsiQ2F0ZWdvcnlJRCJ9O1NvcnRCeT1GQVFJRDtPcmRlcj0kTFFEYXRheyJPcmRlciJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ29uZmlneyJGQVE6OkZBUUhvb2sifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpdGxlICREYXRheyJUaXRsZVNvcnQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O0NhdGVnb3J5SUQ9JExRRGF0YXsiQ2F0ZWdvcnlJRCJ9O1NvcnRCeT1UaXRsZTtPcmRlcj0kTFFEYXRheyJPcmRlciJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVGl0bGUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNhdGVnb3J5ICREYXRheyJDYXRlZ29yeVNvcnQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O0NhdGVnb3J5SUQ9JExRRGF0YXsiQ2F0ZWdvcnlJRCJ9O1NvcnRCeT1DYXRlZ29yeTtPcmRlcj0kTFFEYXRheyJPcmRlciJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiQ2F0ZWdvcnkifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpIZWFkZXJMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJMYW5ndWFnZSAkRGF0YXsiTGFuZ3VhZ2VTb3J0In0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifTtTb3J0Qnk9TGFuZ3VhZ2U7T3JkZXI9JExRRGF0YXsiT3JkZXIifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ikxhbmd1YWdlIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6SGVhZGVyTGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOk5vRkFRRGF0YUZvdW5kTXNnIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+JFRleHR7Ik5vIEZBUSBhcnRpY2xlcyBmb3VuZC4ifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb0ZBUURhdGFGb3VuZE1zZyAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJGQVFOdW1iZXIiIHRpdGxlPSIkUURhdGF7Ik51bWJlciJ9Ij48YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPVB1YmxpY0ZBUVpvb207SXRlbUlEPSRMUURhdGF7IkZBUUlEIn07Wm9vbUJhY2tMaW5rPSRMUURhdGF7Ilpvb21CYWNrTGluayJ9OyI+JFFEYXRheyJOdW1iZXIifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlRpdGxlIiB0aXRsZT0iJFFEYXRheyJUaXRsZSJ9Ij4kUURhdGF7IlRpdGxlIiwiNjAifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2F0ZWdvcnkiIHRpdGxlPSIkUURhdGF7IkNhdGVnb3J5TmFtZSJ9Ij4kUURhdGF7IkNhdGVnb3J5TmFtZSIsIjQ1In08L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJMYW5ndWFnZSIgdGl0bGU9IiRRRGF0YXsiTGFuZ3VhZ2UifSI+JFFEYXRheyJMYW5ndWFnZSIsIjUifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZExhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOkJvdHRvbVN1Yk5hdmlnYXRpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlBhZ2luYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz4kUURhdGF7IlJlc3VsdCJ9PC9zdHJvbmc+ICRUZXh0eyJvZiJ9IDxzdHJvbmc+JFFEYXRheyJUb3RhbEhpdHMifTwvc3Ryb25nPiAtICRUZXh0eyJQYWdlIn06ICREYXRheyJTaXRlTmF2QmFyIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6Qm90dG9tU3ViTmF2aWdhdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpGQVFJdGVtTGlzdCAtLT4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy8gbWFrZSB3aG9sZSBGQVEgSXRlbSByb3cgY2xpY2thYmxlLCBidXQgbm90IHRoZSBoZWFkZXJzLCBjYW4ndCB1c2UgQ29yZS5DdXN0b21lci5DbGlja2FibGVSb3coKQovLyBzaW5jZSBpdCB1c2VzICJ0YWJsZSB0ciIgYXMgc2VsZWN0b3IsIHNlZSBidWcjOTMyOQokKCJ0Ym9keSB0ciIpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICQoImEiLCB0aGlzKS5hdHRyKCJocmVmIik7CiAgICByZXR1cm4gZmFsc2U7Cn0pOwo8L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0ibWFpbmhlYWQiPiRDb25maWd7IkZBUTo6RkFRSG9vayJ9OiAkUURhdGF7Ik51bWJlciJ9IC8gJFFEYXRheyJUaXRsZSJ9PC90ZD4KICAgIDwvdHI+CjwvdGFibGU+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMTAiIHdpZHRoPSIxMDAlIj4KICAgIDx0cj4KICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPgogICAgICAgICAgICAkVGV4dHsiRkFRLUluZm8ifToKICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI1MCUiIHZhbGlnbj0idG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ2F0ZWdvcnkifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJDYXRlZ29yeU5hbWUifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJMYW5ndWFnZSJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7Ikxhbmd1YWdlIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjUwJSIgdmFsaWduPSJ0b3AiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMyIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KCjwhLS0gZHRsOmJsb2NrOlJhdGluZyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJWb3RlcyJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7IlZvdGVzIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJSZXN1bHQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJWb3RlUmVzdWx0In0gJiMzNzs8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UmF0aW5nIC0tPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJMYXN0IHVwZGF0ZSJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kVGltZUxvbmd7IiREYXRheyJDaGFuZ2VkIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8YnIvPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMyIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJLZXl3b3JkcyJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iOTAlIiBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7IktleXdvcmRzIn08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxocj4KICAgICAgICA8L3RkPgogICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudCAtLT4KICAgIDx0cj4KICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPgogICAgICAgICAgICAkVGV4dHsiJERhdGF7IkNhcHRpb24ifSJ9OiAgPHNwYW4gY2xhc3M9InNtYWxsIj4oJFRleHR7IiREYXRheyJTdGF0ZU5hbWUifSJ9KSA8L3NwYW4+CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxMCIgY2VsbFBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JERhdGF7IkNvbnRlbnQifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD4KICAgICAgICAgICAgPGhyPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50IC0tPgoKPC90YWJsZT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOlNlYXJjaCAtLT4KPGRpdiBpZD0iTWFpbkJveCIgY2xhc3M9IlNlYXJjaCBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgbmFtZT0iY29tcG9zZSI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNlYXJjaCIvPgogICAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8aDI+JENvbmZpZ3siRkFROjpGQVFIb29rIn08L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOdW1iZXIiPiRDb25maWd7IkZBUTo6RkFRSG9vayJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IiRDb25maWd7IkZBUTo6RkFRSG9vayJ9IiB0eXBlPSJ0ZXh0IiBuYW1lPSJOdW1iZXIiIGlkPSJOdW1iZXIiIHNpemU9IjMwIiB2YWx1ZT0iJFFEYXRheyJOdW1iZXIifSIvPgogICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJlLiBnLiAxMCo1MTU1IG9yIDEwNTY1OCoifTwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkZ1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpIn08L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUaXRsZSI+JFRleHR7IkZ1bGx0ZXh0In08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iJFRleHR7IkZ1bGx0ZXh0In0iIHR5cGU9InRleHQiIGlkPSJGdWxsVGV4dCIgbmFtZT0iRnVsbHRleHQiIHZhbHVlPSIkUURhdGF7IkZ1bGx0ZXh0In0iIHNpemU9IjIwIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRpdGxlIj4kVGV4dHsiVGl0bGUifTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSIkVGV4dHsiVGl0bGUifSIgdHlwZT0idGV4dCIgaWQ9IlRpdGxlIiBuYW1lPSJUaXRsZSIgdmFsdWU9IiRRRGF0YXsiVGl0bGUifSIgc2l6ZT0iMjAiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iS2V5d29yZCI+JFRleHR7IktleXdvcmQifTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSIkVGV4dHsiS2V5d29yZCJ9IiB0eXBlPSJ0ZXh0IiBpZD0iS2V5d29yZCIgbmFtZT0iS2V5d29yZCIgdmFsdWU9IiRRRGF0YXsiS2V5d29yZCJ9IiBzaXplPSIyMCIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0Pgo8IS0tIGR0bDpibG9jazpMYW5ndWFnZSAtLT4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJMYW5ndWFnZSJ9OjwvaDI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICREYXRheyJMYW5ndWFnZXNTdHJnIn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0Pgo8IS0tIGR0bDpibG9jazpMYW5ndWFnZSAtLT4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJDYXRlZ29yeSJ9OjwvaDI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICREYXRheyJDYXRlZ29yaWVzU3RyZyJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgPGRpdiBpZD0iQm90dG9tQWN0aW9uUm93IiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlNlYXJjaCJ9Ij4kVGV4dHsiU2VhcmNoIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJPdXRwdXQgdG8ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICREYXRheyJSZXN1bHRGb3JtU3RyZyJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIENvcmUuQ3VzdG9tZXIuSW5pdEZvY3VzKCk7Cjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6U2VhcmNoIC0tPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT4kUXVvdGV7IiRDb25maWd7IlByb2R1Y3ROYW1lIn0ifSAtICRUZXh0eyJQdWJsaWMifSAoJFF1b3RleyIkQ29uZmlneyJGQVE6OkZBUUhvb2sifSJ9KTwvU2hvcnROYW1lPgo8RGVzY3JpcHRpb24+JFF1b3RleyIkQ29uZmlneyJQcm9kdWN0TmFtZSJ9In0gLSAkVGV4dHsiUHVibGljIn0gKCRRdW90ZXsiJENvbmZpZ3siRkFROjpGQVFIb29rIn0ifSk8L0Rlc2NyaXB0aW9uPgo8SW5wdXRFbmNvZGluZz4kRW52eyJVc2VyQ2hhcnNldCJ9PC9JbnB1dEVuY29kaW5nPgo8VXJsIHR5cGU9InRleHQvaHRtbCIgdGVtcGxhdGU9IiRDb25maWd7Ikh0dHBUeXBlIn06Ly8kRW52eyJIVFRQX0hPU1QifSRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249UHVibGljRkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7RnVsbHRleHQ9e3NlYXJjaFRlcm1zfSIgLz4KPEltYWdlIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgdHlwZT0iaW1hZ2UveC1pY29uIj4kQ29uZmlneyJIdHRwVHlwZSJ9Oi8vJEVudnsiSFRUUF9IT1NUIn0kQ29uZmlneyJGcm9udGVuZDo6SW1hZ2VQYXRoIn1pY29ucy9wcm9kdWN0LmljbzwvSW1hZ2U+CjwvT3BlblNlYXJjaERlc2NyaXB0aW9uPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT4kUXVvdGV7IiRDb25maWd7IlByb2R1Y3ROYW1lIn0ifSAtICRUZXh0eyJQdWJsaWMifSAoJFRleHR7IkZBUUZ1bGx0ZXh0In0pPC9TaG9ydE5hbWU+CjxEZXNjcmlwdGlvbj4kUXVvdGV7IiRDb25maWd7IlByb2R1Y3ROYW1lIn0ifSAtICRUZXh0eyJQdWJsaWMifSAoJFRleHR7IkZBUUZ1bGx0ZXh0In0pPC9EZXNjcmlwdGlvbj4KPElucHV0RW5jb2Rpbmc+JEVudnsiVXNlckNoYXJzZXQifTwvSW5wdXRFbmNvZGluZz4KPFVybCB0eXBlPSJ0ZXh0L2h0bWwiIHRlbXBsYXRlPSIkQ29uZmlneyJIdHRwVHlwZSJ9Oi8vJEVudnsiSFRUUF9IT1NUIn0kRW52eyJCYXNlbGluayJ9QWN0aW9uPVB1YmxpY0ZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO0Z1bGx0ZXh0PXtzZWFyY2hUZXJtc30iIC8+CjxJbWFnZSBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIHR5cGU9ImltYWdlL3gtaWNvbiI+JENvbmZpZ3siSHR0cFR5cGUifTovLyRFbnZ7IkhUVFBfSE9TVCJ9JENvbmZpZ3siRnJvbnRlbmQ6OkltYWdlUGF0aCJ9aWNvbnMvcHJvZHVjdC5pY288L0ltYWdlPgo8L09wZW5TZWFyY2hEZXNjcmlwdGlvbj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gc3RhcnQgZm9ybSAtLT4KPGk+JERhdGF7Ildhcm5pbmcifTwvaT4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJtYWluaGVhZCI+JFRleHR7IlNlYXJjaCJ9PC90ZD4KICAgIDwvdHI+CjwvdGFibGU+Cjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRDb25maWd7IkZBUTo6RkFRSG9vayJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjMwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJUaXRsZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjMwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJDYXRlZ29yeSJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6SGVhZGVyTGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiTGFuZ3VhZ2UifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckxhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAlIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkNoYW5nZWQifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRRRGF0YXsiTnVtYmVyIn08L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7IlRpdGxlIiwiNDAifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiRRRGF0YXsiQ2F0ZWdvcnlOYW1lIiwiMzAifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZExhbmd1YWdlIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7Ikxhbmd1YWdlIn08L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFRpbWVMb25neyIkRGF0YXsiQ2hhbmdlZCJ9In08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkIC0tPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo8IS0tIGVuZCBmb3JtIC0tPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJUaWNrZXRWaWV3IEFSSUFSb2xlTWFpbiBTZWFyY2hSZXN1bHRzICRDb25maWd7IlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0T3ZlcnZpZXdTb3J0YWJsZSJ9IFNvcnRhYmxlIj4KICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskUURhdGF7IkxpbmsifSI+CiAgICAgICAgICAgICAgICAgICAgJmxhcnI7ICRUZXh0eyJDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMifQogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CjwhLS0gZHRsOmJsb2NrOlBhZ2luYXRpb24gLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iVGFicyBQYWdpbmF0aW9uIj4KICAgICAgICAgICAgPHN0cm9uZz4kUURhdGF7IlJlc3VsdCJ9PC9zdHJvbmc+ICRUZXh0eyJvZiJ9IDxzdHJvbmc+JFFEYXRheyJUb3RhbEhpdHMifTwvc3Ryb25nPiAtICRUZXh0eyJQYWdlIn06ICREYXRheyJTaXRlTmF2QmFyIn0KICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UGFnaW5hdGlvbiAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iU2VhcmNoVGVybXMiPgogICAgICAgICAgICA8aDI+JFRleHR7IlNlYXJjaCBSZXN1bHRzIGZvciJ9OjwvaDI+CjwhLS0gZHRsOmJsb2NrOlNlYXJjaFRlcm1zIC0tPgogICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICRRRGF0YXsiQXR0cmlidXRlIn06ICRRRGF0YXsiVmFsdWUifQojIGhpZGUgcmVtb3ZlIGxpbmssIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHlldCBpbXBsZW1lbnRlZAojICAgICAgICAgICAgICAgIDxhIHRpdGxlPSIkVGV4dHsiUmVtb3ZlIHRoaXMgU2VhcmNoIFRlcm0uIn0iIGhyZWY9IiREYXRheyJTZWFyY2hWYWx1ZSJ9Ij4mdGltZXM7PC9hPgogICAgICAgICAgICA8L3NwYW4+CjwhLS0gZHRsOmJsb2NrOlNlYXJjaFRlcm1zIC0tPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICA8dGFibGUgY2xhc3M9Ik92ZXJ2aWV3Ij4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRkFRTnVtYmVyICREYXRheyJGQVFJRFNvcnQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVNlYXJjaDskUURhdGF7IlByb2ZpbGUifVNvcnRCeT1GQVFJRDtPcmRlcj0kTFFEYXRheyJPcmRlciJ9O1Rha2VMYXN0U2VhcmNoPTE7RmlsdGVyPSRMUURhdGF7IkZpbHRlciJ9O0xpbWl0PSRMUURhdGF7IkxpbWl0In07VHlwZT0kTFFEYXRheyJUeXBlIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENvbmZpZ3siRkFROjpGQVFIb29rIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJUaXRsZSAkRGF0YXsiVGl0bGVTb3J0In0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZWFyY2g7JFFEYXRheyJQcm9maWxlIn1Tb3J0Qnk9VGl0bGU7T3JkZXI9JExRRGF0YXsiT3JkZXIifTtUYWtlTGFzdFNlYXJjaD0xO0ZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifTtMaW1pdD0kTFFEYXRheyJMaW1pdCJ9O1R5cGU9JExRRGF0YXsiVHlwZSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJUaXRsZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2F0ZWdvcnkgJERhdGF7IkNhdGVnb3J5U29ydCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2VhcmNoOyRRRGF0YXsiUHJvZmlsZSJ9U29ydEJ5PUNhdGVnb3J5O09yZGVyPSRMUURhdGF7Ik9yZGVyIn07VGFrZUxhc3RTZWFyY2g9MTtGaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn07TGltaXQ9JExRRGF0YXsiTGltaXQifTtUeXBlPSRMUURhdGF7IlR5cGUifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiQ2F0ZWdvcnkifQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6SGVhZGVyTGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJMYW5ndWFnZSAkRGF0YXsiTGFuZ3VhZ2VTb3J0In0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZWFyY2g7JFFEYXRheyJQcm9maWxlIn1Tb3J0Qnk9TGFuZ3VhZ2U7T3JkZXI9JExRRGF0YXsiT3JkZXIifTtUYWtlTGFzdFNlYXJjaD0xO0ZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifTtMaW1pdD0kTFFEYXRheyJMaW1pdCJ9O1R5cGU9JExRRGF0YXsiVHlwZSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJMYW5ndWFnZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpIZWFkZXJMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZWQgJERhdGF7IkNoYW5nZWRTb3J0In0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZWFyY2g7JFFEYXRheyJQcm9maWxlIn1Tb3J0Qnk9Q2hhbmdlZDtPcmRlcj0kTFFEYXRheyJPcmRlciJ9O1Rha2VMYXN0U2VhcmNoPTE7RmlsdGVyPSRMUURhdGF7IkZpbHRlciJ9O0xpbWl0PSRMUURhdGF7IkxpbWl0In07VHlwZT0kTFFEYXRheyJUeXBlIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IkNoYW5nZWQifQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICA8dHIgaWQ9IkVtcHR5TWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj4kVGV4dHsiTm8gRkFRIGRhdGEgZm91bmQuIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgICAgICA8dHIgdGl0bGU9IiRRRGF0YXsiVGlja2V0TnVtYmVyIn0iPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRkFRTnVtYmVyIj48YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPVB1YmxpY0ZBUVpvb207SXRlbUlEPSRMUURhdGF7IkZBUUlEIn07Wm9vbUJhY2tMaW5rPSRMUURhdGF7Ilpvb21CYWNrTGluayJ9OyI+JFFEYXRheyJOdW1iZXIifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGl0bGUiPiRRRGF0YXsiVGl0bGUiLCI2MCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNhdGVnb3J5Ij4kUURhdGF7IkNhdGVnb3J5TmFtZSIsIjYwIn08L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Ikxhbmd1YWdlIj4kUURhdGF7Ikxhbmd1YWdlIiwiNSJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTGFuZ3VhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDaGFuZ2VkIiB0aXRsZT0iJFRpbWVTaG9ydHsiJERhdGF7IkNoYW5nZWQifSJ9Ij4kUURhdGF7IkNoYW5nZWQiLCIyMCJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZCAtLT4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkJvdHRvbVN1Yk5hdmlnYXRpb24gLS0+CiAgICA8ZGl2IGlkPSJCb3R0b21BY3Rpb25Sb3ciIGNsYXNzPSJBY3Rpb25Sb3cgQmlnQnV0dG9ucyI+CiAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249TG9hZFByb2ZpbGU7JExRRGF0YXsiTGluayJ9Ij4KICAgICAgICAgICAgICAgICAgICAmbGFycjsgJFRleHR7IkNoYW5nZSBzZWFyY2ggb3B0aW9ucyJ9CiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGNsYXNzPSJUYWJzIFBhZ2luYXRpb24iPgogICAgICAgICAgICA8c3Ryb25nPiRRRGF0YXsiUmVzdWx0In08L3N0cm9uZz4gJFRleHR7Im9mIn0gPHN0cm9uZz4kUURhdGF7IlRvdGFsSGl0cyJ9PC9zdHJvbmc+IC0gJFRleHR7IlBhZ2UifTogJERhdGF7IlNpdGVOYXZCYXIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpCb3R0b21TdWJOYXZpZ2F0aW9uIC0tPgo8L2Rpdj4KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICBDb3JlLkN1c3RvbWVyLkNsaWNrYWJsZVJvdygpOwo8L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJUaWNrZXRab29tIEFSSUFSb2xlTWFpbiI+Cgo8IS0tIGR0bDpibG9jazpCYWNrIC0tPgogICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifTskUURhdGF7Ilpvb21CYWNrTGluayJ9IiBjbGFzcz0iSGlzdG9yeUJhY2siPiZsYXJyOyAkVGV4dHsiQmFjayJ9PC9hPjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6QmFjayAtLT4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJGQVFIZWFkZXIiPgogICAgICAgICAgICA8aDIgdGl0bGU9IiRRRGF0YXsiVGl0bGUifSI+CiAgICAgICAgICAgICAgICAkUURhdGF7IlRpdGxlIiwiNjUifQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkZBUUhvb2siPiRRRGF0YXsiTnVtYmVyIn08L3NwYW4+CiAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDx1bCBpZD0iRkFRT3B0aW9ucyI+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1QdWJsaWNGQVFQcmludDtJdGVtSUQ9JExRRGF0YXsiSXRlbUlEIn0iIGNsYXNzPSJQcmludCBBc1BvcHVwIiB0aXRsZT0iJFRleHR7IlByaW50In0iPiRUZXh0eyJQcmludCJ9PC9hPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iRkFRUGF0aENhdGVnb3J5IEZBUVpvb20iPgogICAgICAgICAgICA8aDM+CjwhLS0gZHRsOmJsb2NrOkZBUVBhdGhDYXRlZ29yeUVsZW1lbnQgLS0+CiAgICAgICAgICAgICAgICAkQ29uZmlneyJGQVE6OkV4cGxvcmVyOjpQYXRoOjpTZXBhcmF0b3IifQogICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1QdWJsaWNGQVFFeHBsb3JlcjtDYXRlZ29yeUlEPSRMUURhdGF7IkNhdGVnb3J5SUQifSI+CiAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJOYW1lIn0KICAgICAgICAgICAgICAgIDwvYT4KPCEtLSBkdGw6YmxvY2s6RkFRUGF0aENhdGVnb3J5RWxlbWVudCAtLT4KPCEtLSBkdGw6YmxvY2s6RkFRUGF0aEl0ZW1FbGVtZW50IC0tPgogICAgICAgICAgICAgICAgJENvbmZpZ3siRkFROjpFeHBsb3Jlcjo6UGF0aDo6U2VwYXJhdG9yIn0KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07Q2F0ZWdvcnlJRD0kTFFEYXRheyJDYXRlZ29yeUlEIn07SXRlbUlEPSRMUURhdGF7Ikl0ZW1JRCJ9Ij4KICAgICAgICAgICAgICAgICAgICAkUURhdGF7IlRpdGxlIn0KICAgICAgICAgICAgICAgIDwvYT4KPCEtLSBkdGw6YmxvY2s6RkFRUGF0aEl0ZW1FbGVtZW50IC0tPgogICAgICAgICAgICA8L2gzPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8dWwgaWQ9Ik1lc3NhZ2VzIj4KPCEtLSBkdGw6YmxvY2s6QXR0YWNobWVudEhlYWRlciAtLT4KICAgICAgICAgICAgPGxpIGNsYXNzPSJDdXN0b21lciBWaXNpYmxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik1lc3NhZ2VIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMz4kVGV4dHsiQXR0YWNobWVudHMifTo8L2gzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXR0YWNobWVudHMiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxhYmVsIj4kVGV4dHsiQXR0YWNobWVudCJ9OjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXY+CjwhLS0gZHRsOmJsb2NrOkF0dGFjaG1lbnRSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEb3dubG9hZEF0dGFjaG1lbnQiIHRpdGxlPSIkVGV4dHsiRG93bmxvYWQgQXR0YWNobWVudCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtJdGVtSUQ9JExRRGF0YXsiSXRlbUlEIn07RmlsZUlEPSRMUURhdGF7IkZpbGVJRCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkZpbGVuYW1lIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJFFEYXRheyJGaWxlc2l6ZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4KPCEtLSBkdGw6YmxvY2s6QXR0YWNobWVudFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpBdHRhY2htZW50SGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50IC0tPgogICAgICAgICAgICA8bGkgY2xhc3M9IkN1c3RvbWVyIFZpc2libGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTWVzc2FnZUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgzPiRUZXh0eyIkRGF0YXsiQ2FwdGlvbiJ9In06PC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudEhUTUwgLS0+CiAgICAgICAgICAgICAgICA8ZGl2PgojIFVzZSB0aGUgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgdG8gcHJldmVudCBwbHVnaW5zIGFuZCBzY3JpcHRzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW4gdGhlIGJyb3dzZXIuCiMgVXNlIElFJ3MgKG5vbi1zdGFuZGFyZCkgc2VjdXJpdHkgYXR0cmlidXRlIHRvIGFjaGlldmUgc29tZXRoaW5nIHNpbWlsYXIgaW4gb2xkZXIgSUUgYnJvd3NlcnMuIEFwcGVuZCBzZXNzaW9uIGluZm8gdG8gVVJMIGJlY2F1c2UgSUUgd2lsbCBub3Qgc2VuZCBjb29raWVzLgojIFNldCAnYWxsb3ctcG9wdXBzJyB0byBhbGxvdyBJRTEwKyB0byBvcGVuIGxpbmtzLiByZWY6IGh0dHA6Ly93d3cudzMub3JnL2h0bWwvd2cvd2lraS9DaGFuZ2VQcm9wb3NhbHMvc2FuZGJveF9hbGxvd19wb3B1cHMKICAgICAgICAgICAgICAgICAgICA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXBvcHVwcyIgc2VjdXJpdHk9InJlc3RyaWN0ZWQiIGNsYXNzPSJGQVFGaWVsZCIgaWQ9IklmcmFtZUZBUSRRRGF0YXsiRmllbGQifSIgb25sb2FkPSJpZiAodHlwZW9mIEZBUSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5DdXN0b21lciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5DdXN0b21lci5GQVFab29tID09PSAnb2JqZWN0JykgeyBGQVEuQ3VzdG9tZXIuRkFRWm9vbS5JZnJhbWVBdXRvSGVpZ2h0KCQoJyNJZnJhbWVGQVEkUURhdGF7IkZpZWxkIn0nKSk7IH07IiBzcmM9IiMiIGRhdGEtc3JjPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPVB1YmxpY0ZBUVpvb207U3ViYWN0aW9uPUhUTUxWaWV3O0l0ZW1JRD0kUURhdGF7Ikl0ZW1JRCJ9O0ZpZWxkPSRRRGF0YXsiRmllbGQifTsiPjwvaWZyYW1lPgogICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkZBUUNvbnRlbnRIVE1MIC0tPgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBDb3JlLkNvbmZpZy5TZXQoJ0ZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVySFRNTEZpZWxkSGVpZ2h0RGVmYXVsdCcsIHBhcnNlSW50KCIkQ29uZmlneyJGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodERlZmF1bHQifSIgfHwgMCwgMTApKTsKICAgIENvcmUuQ29uZmlnLlNldCgnRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHRNYXgnLCBwYXJzZUludCgiJENvbmZpZ3siRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHRNYXgifSIgfHwgMCwgMTApKTsKCiAgICAvLyBjb3B5IGRhdGEtc3JjIGF0dHJpYnV0ZSB0byBzcmMgYXR0cmlidXRlIGZvciBhbGwgaWZyYW1lcyB0byBjb3JyZWN0bHkgZGlzcGxheSBpdHMgY29udGVudHMgYWZ0ZXIgSlMgaXMgZnVsbHkgbG9hZGVkCiAgICAkKCdpZnJhbWUnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgJCh0aGlzKS5hdHRyKCJzcmMiLCAkKHRoaXMpLmF0dHIoImRhdGEtc3JjIikgKTsKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudFBsYWluIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXJ0aWNsZUZBUUNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQ29udGVudCJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RkFRQ29udGVudFBsYWluIC0tPgogICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpGQVFDb250ZW50IC0tPgoKICAgICAgICA8L3VsPgogICAgICAgIDxkaXYgaWQ9Ilpvb21TaWRlYmFyIj4KICAgICAgICAgICAgPHVsIGlkPSJNZXRhZGF0YSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTWVzc2FnZUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4kVGV4dHsiRkFRIEluZm9ybWF0aW9uIn08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJLZXkiPiRUZXh0eyJDYXRlZ29yeSJ9Ojwvc3Bhbj4gPHNwYW4gdGl0bGU9IiRUZXh0eyIkRGF0YXsiQ2F0ZWdvcnlOYW1lIn0ifSI+JFRleHR7IiREYXRheyJDYXRlZ29yeU5hbWUifSJ9PC9zcGFuPjwvbGk+CgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJLZXl3b3Jkc0NvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IktleSI+JFRleHR7IktleXdvcmRzIn06PC9zcGFuPgo8IS0tIGR0bDpibG9jazpLZXl3b3JkcyAtLT4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iS2V5d29yZCIgdGl0bGU9IiRUZXh0eyJTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCJ9OiAkUURhdGF7IktleXdvcmQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249UHVibGljRkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7S2V5d29yZD0kTFFEYXRheyJLZXl3b3JkIn0iPiRRRGF0YXsiS2V5d29yZCJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KPCEtLSBkdGw6YmxvY2s6S2V5d29yZHMgLS0+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJLZXkiPiRUZXh0eyJTdGF0ZSJ9Ojwvc3Bhbj4gPHNwYW4gdGl0bGU9IiRUZXh0eyIkRGF0YXsiU3RhdGUifSJ9Ij4kVGV4dHsiJERhdGF7IlN0YXRlIn0ifTwvc3Bhbj48L2xpPgo8IS0tIGR0bDpibG9jazpMYW5ndWFnZSAtLT4KICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iS2V5Ij4kVGV4dHsiTGFuZ3VhZ2UifTo8L3NwYW4+IDxzcGFuIHRpdGxlPSIkVGV4dHsiJERhdGF7Ikxhbmd1YWdlIn0ifSI+JFRleHR7IiREYXRheyJMYW5ndWFnZSJ9In08L3NwYW4+PC9saT4KPCEtLSBkdGw6YmxvY2s6TGFuZ3VhZ2UgLS0+Cgo8IS0tIGR0bDpibG9jazpWaWV3UmF0aW5nIC0tPgogICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJLZXkgUmF0aW5nTGFiZWwiPiRUZXh0eyJSYXRpbmcifTo8L3NwYW4+CjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFycyAtLT4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZVN0YXIiPlN0YXI8L3NwYW4+CjwhLS0gZHRsOmJsb2NrOlJhdGVTdGFycyAtLT4KPCEtLSBkdGw6YmxvY2s6UmF0ZVN0YXJzQ291bnQgLS0+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJhdGVTdGFyVGV4dCIgdGl0bGU9IiRRRGF0YXsiU3RhcnMifSAkVGV4dHsib3V0IG9mIDUifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiU3RhcnMifSAkVGV4dHsib3V0IG9mIDUifQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KPCEtLSBkdGw6YmxvY2s6UmF0ZVN0YXJzQ291bnQgLS0+CiAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpWaWV3UmF0aW5nIC0tPgoKPCEtLSBkdGw6YmxvY2s6Vmlld1ZvdGVzIC0tPgogICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJLZXkiPiRUZXh0eyJWb3RlcyJ9Ojwvc3Bhbj4gPHNwYW4gdGl0bGU9IiRRRGF0YXsiVm90ZXMifSI+JFFEYXRheyJWb3RlcyJ9PC9zcGFuPjwvbGk+CjwhLS0gZHRsOmJsb2NrOlZpZXdWb3RlcyAtLT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZyAtLT4KICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IkZBUVZvdGUiIGNsYXNzPSJQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iVm90aW5nQm94IFZpc2libGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTWVzc2FnZUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgzPiRUZXh0eyJSYXRpbmcifTo8L2gzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBpZD0iTWVzc2VuZ2VyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iVm90aW5nUXVlc3Rpb24iPiRUZXh0eyJIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZUxhYmVsQmVmb3JlIj4kVGV4dHsibm90IGhlbHBmdWwifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZ1JhdGVSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmF0ZUJ1dHRvbiREYXRheyJWYWx1ZSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IlJhdGVCdXR0b24gJExRRGF0YXsiUmF0ZUNsYXNzIn0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07SXRlbUlEPSRMUURhdGF7Ikl0ZW1JRCJ9O1NlbGVjdGVkUmF0ZT0kTFFEYXRheyJWYWx1ZSJ9Ij4kUURhdGF7IlRpdGxlIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZ1JhdGVSb3cgLS0+CgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJSYXRlTGFiZWxBZnRlciI+JFRleHR7InZlcnkgaGVscGZ1bCJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkN1c3RvbWVyRkFRWm9vbSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlZvdGUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDYXRlZ29yeUlEIiB2YWx1ZT0iJFFEYXRheyJDYXRlZ29yeUlEIn0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJdGVtSUQiIHZhbHVlPSIkUURhdGF7Ikl0ZW1JRCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KCjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZ1N1Ym1pdCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU3VibWl0In0iPiRUZXh0eyJTdWJtaXQifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSYXRlIiB2YWx1ZT0iJFFEYXRheyJTZWxlY3RlZFJhdGUifSJpZD0iUmF0ZVZhbHVlIi8+CjwhLS0gZHRsOmJsb2NrOkZBUVZvdGluZ1N1Ym1pdCAtLT4KCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPgo8IS0tIGR0bDpibG9jazpGQVFWb3RpbmcgLS0+CgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNSU1FOjpCYXNlNjQgcXcoKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpDYWNoZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06Okdyb3VwOwp1c2UgS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyR3JvdXA7CnVzZSBLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6RkFRIC0gZmFxIGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgZmFxIGZ1bmN0aW9ucy4gRS4gZy4gdG8gYWRkIGZhcXMgb3IgdG8gZ2V0IGZhcXMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhIGZhcSBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkVuY29kZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwoKICAgIG15ICRDb25maWdPYmplY3QgPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiAgICBteSAkRW5jb2RlT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkVuY29kZS0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgKTsKICAgIG15ICRMb2dPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TG9nLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICApOwogICAgbXkgJE1haW5PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TWFpbi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgKTsKICAgIG15ICRUaW1lT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlRpbWUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJEZBUU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIFRpbWVPYmplY3QgICA9PiAkVGltZU9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IExvZ09iamVjdCBFbmNvZGVPYmplY3QgTWFpbk9iamVjdCBUaW1lT2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntHcm91cE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpHcm91cC0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntDYWNoZU9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpDYWNoZS0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntDdXN0b21lckdyb3VwT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lckdyb3VwLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e1VzZXJPYmplY3R9ICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlVzZXItPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57VGlja2V0T2JqZWN0fSAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0LT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e0xpbmtPYmplY3R9ICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9ICAgPSBLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZS0+bmV3KCAleyRTZWxmfSApOwoKICAgICMgZ2V0IGxpa2UgZXNjYXBlIHN0cmluZyBuZWVkZWQgZm9yIHNvbWUgZGF0YWJhc2VzIChlLmcuIG9yYWNsZSkKICAgICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+R2V0RGF0YWJhc2VGdW5jdGlvbignTGlrZUVzY2FwZVN0cmluZycpOwoKICAgICMgZ2V0IGRlZmF1bHQgb3B0aW9ucwogICAgJFNlbGYtPntWb3Rpbmd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6Vm90aW5nJyk7CgogICAgIyBnZXQgdGhlIGNhY2hlIFRUTCAoaW4gc2Vjb25kcykKICAgICRTZWxmLT57Q2FjaGVUVEx9ID0gaW50KCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpDYWNoZVRUTCcpIHx8IDYwICogNjAgKiAyNCAqIDIgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEZBUUdldCgpCgpnZXQgYW4gZmFxIGl0ZW0KCiAgICBteSAlRkFRID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gMTIzLAogICAgICAgIEl0ZW1GaWVsZHMgPT4gMCwgICAgICAgICMgT3B0aW9uYWwsIGRlZmF1bHQgMC4gVG8gaW5jbHVkZSB0aGUgaXRlbSBmaWVsZCBjb3RuZW50IGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIEZBUSBpdGVtIG9uIHRoZSByZXR1cm4gc3RydWN0dXJlLgogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICVGQVEgPSAoCiAgICAgICAgSUQgICAgICAgICAgICAgICAgPT4gMzIsCiAgICAgICAgSXRlbUlEICAgICAgICAgICAgPT4gMzIsCiAgICAgICAgRkFRSUQgICAgICAgICAgICAgPT4gMzIsCiAgICAgICAgTnVtYmVyICAgICAgICAgICAgPT4gMTAwMDMyLAogICAgICAgIENhdGVnb3J5SUQgICAgICAgID0+ICcyJywKICAgICAgICBDYXRlZ29yeU5hbWUnICAgICA9PiAnQ2F0ZWdvcnlBOjpDYXRlZ29yeUInLAogICAgICAgIENhdGVnb3J5U2hvcnROYW1lID0+ICdDYXRlZ29yeUInLAogICAgICAgIExhbmd1YWdlSUQgICAgICAgID0+IDEsCiAgICAgICAgTGFuZ3VhZ2UgICAgICAgICAgPT4gJ2VuJywKICAgICAgICBUaXRsZSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBUaXRsZScsCiAgICAgICAgQXBwcm92ZWQgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAKICAgICAgICBWYWxpZElEICAgICAgICAgICA9PiAxLAogICAgICAgIFZhbGlkICAgICAgICAgICAgID0+ICd2YWxpZCcsCiAgICAgICAgS2V5d29yZHMgICAgICAgICAgPT4gJ0tleVdvcmQxIEtleVdvcmQyJywKICAgICAgICBWb3RlcyAgICAgICAgICAgICA9PiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbnVtYmVyIG9mIHZvdGVzCiAgICAgICAgVm90ZVJlc3VsdCAgICAgICAgPT4gJzAuMDAnLCAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgbnVtYmVyIGJldHdlZW4gMC4wMCBhbmQgMTAwLjAwCiAgICAgICAgU3RhdGVJRCAgICAgICAgICAgPT4gMSwKICAgICAgICBTdGF0ZSAgICAgICAgICAgICA9PiAnaW50ZXJuYWwgKGFnZW50KScsICAgICAgICAgICAgICMgb3IgJ2V4dGVybmFsIChjdXN0b21lciknIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICdwdWJsaWMgKGFsbCknCiAgICAgICAgU3RhdGVUeXBlSUQgICAgICAgPT4gMSwKICAgICAgICBTdGF0ZVR5cGVOYW1lICAgICA9PiAnaW50ZXJuYWwnLCAgICAgICAgICAgICAgICAgICAgICMgb3IgJ2V4dGVybmFsJyBvciAncHVibGljJwogICAgICAgIENyZWF0ZWRCeSAgICAgICAgID0+IDEsCiAgICAgICAgQ2hhbmdlZCcgICAgICAgICAgPT4gJzIwMTEtMDEtMDUgMjE6NTM6NTAnLAogICAgICAgIENoYW5nZWRCeSAgICAgICAgID0+ICcxJywKICAgICAgICBDcmVhdGVkICAgICAgICAgICA9PiAnMjAxMS0wMS0wNSAyMTo1Mzo1MCcsCiAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJzEyOTQyODYwMzAtMzEuMTY5NzI5NzEwNDczMicsICAjIEZBUSBBcnRpY2xlIG5hbWUgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3lzdGVtdGltZSArICctJyArIHJhbmRvbSBudW1iZXIKICAgICk7CgogICAgbXkgJUZBUSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICBJdGVtSUQgICAgID0+IDEyMywKICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJUZBUSA9ICgKICAgICAgICBJRCAgICAgICAgICAgICAgICA9PiAzMiwKICAgICAgICBJdGVtSUQgICAgICAgICAgICA9PiAzMiwKICAgICAgICBGQVFJRCAgICAgICAgICAgICA9PiAzMiwKICAgICAgICBOdW1iZXIgICAgICAgICAgICA9PiAxMDAwMzIsCiAgICAgICAgQ2F0ZWdvcnlJRCAgICAgICAgPT4gJzInLAogICAgICAgIENhdGVnb3J5TmFtZScgICAgID0+ICdDYXRlZ29yeUE6OkNhdGVnb3J5QicsCiAgICAgICAgQ2F0ZWdvcnlTaG9ydE5hbWUgPT4gJ0NhdGVnb3J5QicsCiAgICAgICAgTGFuZ3VhZ2VJRCAgICAgICAgPT4gMSwKICAgICAgICBMYW5ndWFnZSAgICAgICAgICA9PiAnZW4nLAogICAgICAgIFRpdGxlICAgICAgICAgICAgID0+ICdBcnRpY2xlIFRpdGxlJywKICAgICAgICBGaWVsZDEgICAgICAgICAgICA9PiAnVGhlIFN5bXB0b21zJywKICAgICAgICBGaWVsZDIgICAgICAgICAgICA9PiAnVGhlIFByb2JsZW0nLAogICAgICAgIEZpZWxkMyAgICAgICAgICAgID0+ICdUaGUgU29sdXRpb24nLAogICAgICAgIEZpZWxkNCAgICAgICAgICAgID0+IHVuZGVmLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3QgYWN0aXZlIGJ5IGRlZmF1bHQKICAgICAgICBGaWVsZDUgICAgICAgICAgICA9PiB1bmRlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm90IGFjdGl2ZSBieSBkZWZhdWx0CiAgICAgICAgRmllbGQ2ICAgICAgICAgICAgPT4gJ0NvbW1lbnRzJywKICAgICAgICBBcHByb3ZlZCAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgMAogICAgICAgIFZhbGlkSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgVmFsaWQgICAgICAgICAgICAgPT4gJ3ZhbGlkJywKICAgICAgICBLZXl3b3JkcyAgICAgICAgICA9PiAnS2V5V29yZDEgS2V5V29yZDInLAogICAgICAgIFZvdGVzICAgICAgICAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBudW1iZXIgb2Ygdm90ZXMKICAgICAgICBWb3RlUmVzdWx0ICAgICAgICA9PiAnMC4wMCcsICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBudW1iZXIgYmV0d2VlbiAwLjAwIGFuZCAxMDAuMDAKICAgICAgICBTdGF0ZUlEICAgICAgICAgICA9PiAxLAogICAgICAgIFN0YXRlICAgICAgICAgICAgID0+ICdpbnRlcm5hbCAoYWdlbnQpJywgICAgICAgICAgICAgIyBvciAnZXh0ZXJuYWwgKGN1c3RvbWVyKScgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJ3B1YmxpYyAoYWxsKScKICAgICAgICBTdGF0ZVR5cGVJRCAgICAgICA9PiAxLAogICAgICAgIFN0YXRlVHlwZU5hbWUgICAgID0+ICdpbnRlcm5hbCcsICAgICAgICAgICAgICAgICAgICAgIyBvciAnZXh0ZXJuYWwnIG9yICdwdWJsaWMnCiAgICAgICAgQ3JlYXRlZEJ5ICAgICAgICAgPT4gMSwKICAgICAgICBDaGFuZ2VkJyAgICAgICAgICA9PiAnMjAxMS0wMS0wNSAyMTo1Mzo1MCcsCiAgICAgICAgQ2hhbmdlZEJ5ICAgICAgICAgPT4gJzEnLAogICAgICAgIENyZWF0ZWQgICAgICAgICAgID0+ICcyMDExLTAxLTA1IDIxOjUzOjUwJywKICAgICAgICBOYW1lICAgICAgICAgICAgICA9PiAnMTI5NDI4NjAzMC0zMS4xNjk3Mjk3MTA0NzMyJywgICMgRkFRIEFydGljbGUgbmFtZSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzeXN0ZW10aW1lICsgJy0nICsgcmFuZG9tIG51bWJlcgogICAgKTsKCj1jdXQKCnN1YiBGQVFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIEZhaWx1cmVzIHJlbmFtZSBmcm9tIEl0ZW1JRCB0byBGQVFJRAogICAgaWYgKCAkUGFyYW17RkFRSUR9ICkgewogICAgICAgICRQYXJhbXtJdGVtSUR9ID0gJFBhcmFte0ZBUUlEfTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIEl0ZW1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJEZldGNoSXRlbUZpZWxkcyA9ICRQYXJhbXtJdGVtRmllbGRzfSA/IDEgOiAwOwoKICAgIG15ICRDYWNoZUtleSA9ICdGQVFHZXQ6Okl0ZW1JRDo6JyAuICRQYXJhbXtJdGVtSUR9IC4gJzo6SXRlbUZpZWxkczo6JyAuICRGZXRjaEl0ZW1GaWVsZHM7CiAgICBteSAkQ2FjaGUgICAgPSAkU2VsZi0+e0NhY2hlT2JqZWN0fS0+R2V0KAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgICMgc2V0ICVEYXRhIGZyb20gY2FjaGUgaWYgYW55CiAgICBteSAlRGF0YTsKICAgIGlmICggcmVmICRDYWNoZSBlcSAnSEFTSCcgKSB7CiAgICAgICAgJURhdGEgPSAleyRDYWNoZX07CiAgICB9CgogICAgIyBvdGhlcndpc2UgZ2V0ICVEYXRhIGZyb20gdGhlIERCCiAgICBlbHNlIHsKCiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgICAgIFNFTEVDVCBpLmZfbmFtZSwgaS5mX2xhbmd1YWdlX2lkLCBpLmZfc3ViamVjdCwgaS5jcmVhdGVkLCBpLmNyZWF0ZWRfYnksIGkuY2hhbmdlZCwKICAgICAgICAgICAgICAgICAgICBpLmNoYW5nZWRfYnksIGkuY2F0ZWdvcnlfaWQsIGkuc3RhdGVfaWQsIGMubmFtZSwgcy5uYW1lLCBsLm5hbWUsIGkuZl9rZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICBpLmFwcHJvdmVkLCBpLnZhbGlkX2lkLCBpLmZfbnVtYmVyLCBzdC5pZCwgc3QubmFtZQogICAgICAgICAgICAgICAgRlJPTSBmYXFfaXRlbSBpLCBmYXFfY2F0ZWdvcnkgYywgZmFxX3N0YXRlIHMsIGZhcV9zdGF0ZV90eXBlIHN0LCBmYXFfbGFuZ3VhZ2UgbAogICAgICAgICAgICAgICAgV0hFUkUgaS5zdGF0ZV9pZCA9IHMuaWQKICAgICAgICAgICAgICAgICAgICBBTkQgcy50eXBlX2lkID0gc3QuaWQKICAgICAgICAgICAgICAgICAgICBBTkQgaS5jYXRlZ29yeV9pZCA9IGMuaWQKICAgICAgICAgICAgICAgICAgICBBTkQgaS5mX2xhbmd1YWdlX2lkID0gbC5pZAogICAgICAgICAgICAgICAgICAgIEFORCBpLmlkID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgICAgICVEYXRhID0gKAoKICAgICAgICAgICAgICAgICMgdmFyIGZvciBvbGQgdmVyc2lvbnMKICAgICAgICAgICAgICAgIElEICAgID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgRkFRSUQgPT4gJFBhcmFte0l0ZW1JRH0sCgogICAgICAgICAgICAgICAgIyBnZXQgZGF0YSBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICBJdGVtSUQgICAgICAgID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAkUm93WzBdLAogICAgICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgICA9PiAkUm93WzFdLAogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAkUm93WzJdLAogICAgICAgICAgICAgICAgQ3JlYXRlZCAgICAgICA9PiAkUm93WzNdLAogICAgICAgICAgICAgICAgQ3JlYXRlZEJ5ICAgICA9PiAkUm93WzRdLAogICAgICAgICAgICAgICAgQ2hhbmdlZCAgICAgICA9PiAkUm93WzVdLAogICAgICAgICAgICAgICAgQ2hhbmdlZEJ5ICAgICA9PiAkUm93WzZdLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgICA9PiAkUm93WzddLAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkUm93WzhdLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlOYW1lICA9PiAkUm93WzldLAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkUm93WzEwXSwKICAgICAgICAgICAgICAgIExhbmd1YWdlICAgICAgPT4gJFJvd1sxMV0sCiAgICAgICAgICAgICAgICBLZXl3b3JkcyAgICAgID0+ICRSb3dbMTJdLAogICAgICAgICAgICAgICAgQXBwcm92ZWQgICAgICA9PiAkUm93WzEzXSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gJFJvd1sxNF0sCiAgICAgICAgICAgICAgICBOdW1iZXIgICAgICAgID0+ICRSb3dbMTVdLAogICAgICAgICAgICAgICAgU3RhdGVUeXBlSUQgICA9PiAkUm93WzE2XSwKICAgICAgICAgICAgICAgIFN0YXRlVHlwZU5hbWUgPT4gJFJvd1sxN10sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJURhdGEgKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIEl0ZW1JRCAkUGFyYW17SXRlbUlEfSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIEZBUSBpdGVtIGZpZWxkcyBhcmUgcmVxdWlyZWQKICAgICAgICBpZiAoJEZldGNoSXRlbUZpZWxkcykgewoKICAgICAgICAgICAgZm9yIG15ICRGaWVsZE51bWJlciAoIDEgLi4gNiApIHsKCiAgICAgICAgICAgICAgICAjIHNldCBmaWVsZCBuYW1lCiAgICAgICAgICAgICAgICBteSAkRmllbGQgPSAiRmllbGQkRmllbGROdW1iZXIiOwoKICAgICAgICAgICAgICAgICMgZ2V0IGVhY2ggZmllbGQgY29udGVudAogICAgICAgICAgICAgICAgJERhdGF7JEZpZWxkfSA9ICRTZWxmLT5JdGVtRmllbGRHZXQoCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIEZpZWxkID0+ICRGaWVsZCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIG51bWJlcgogICAgICAgIGlmICggISREYXRhe051bWJlcn0gKSB7CgogICAgICAgICAgICBteSAkTnVtYmVyID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N5c3RlbUlEJykgLiAnMDAnIC4gJERhdGF7SXRlbUlEfTsKCiAgICAgICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMICA9PiAnVVBEQVRFIGZhcV9pdGVtIFNFVCBmX251bWJlciA9ID8gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJE51bWJlciwgXCREYXRhe0l0ZW1JRH0gXSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICREYXRhe051bWJlcn0gPSAkTnVtYmVyOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIGNhdGVnb3J5IGxvbmcgbmFtZXMKICAgICAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJFNlbGYtPkNhdGVnb3J5VHJlZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNhdmUgdGhlIGNhdGVnb3J5IHNob3J0IG5hbWUKICAgICAgICAkRGF0YXtDYXRlZ29yeVNob3J0TmFtZX0gPSAkRGF0YXtDYXRlZ29yeU5hbWV9OwoKICAgICAgICAjIGdldCB0aGUgY2F0ZWdvcnkgbG9uZyBuYW1lCiAgICAgICAgJERhdGF7Q2F0ZWdvcnlOYW1lfSA9ICRDYXRlZ29yeVRyZWUtPnsgJERhdGF7Q2F0ZWdvcnlJRH0gfTsKCiAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgIG15ICVWYWxpZExpc3QgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CiAgICAgICAgJERhdGF7VmFsaWR9ID0gJFZhbGlkTGlzdHsgJERhdGF7VmFsaWRJRH0gfTsKCiAgICAgICAgIyBjYWNoZSByZXN1bHQKICAgICAgICAkU2VsZi0+e0NhY2hlT2JqZWN0fS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAnRkFRJywKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcJURhdGEsCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdm90ZSBkYXRhIGZvciB0aGlzIEZBUSBpdGVtCiAgICBteSAkVm90ZURhdGE7CiAgICBpZiAoICRTZWxmLT57Vm90aW5nfSApIHsKICAgICAgICAkVm90ZURhdGEgPSAkU2VsZi0+SXRlbVZvdGVEYXRhR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBmcm9tIGNvbmZpZwogICAgbXkgJERlY2ltYWxQbGFjZXMgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpFeHBsb3Jlcjo6SXRlbUxpc3Q6OlZvdGluZ1Jlc3VsdERlY2ltYWxQbGFjZXMnKSB8fCAwOwoKICAgICMgZm9ybWF0IHRoZSB2b3RlIHJlc3VsdAogICAgbXkgJFZvdGVSZXN1bHQgPSBzcHJpbnRmKCAiJTAuIiAuICREZWNpbWFsUGxhY2VzIC4gImYiLCAkVm90ZURhdGEtPntSZXN1bHR9IHx8IDAgKTsKCiAgICAjIGFkZCB2b3RpbmcgaW5mb3JtYXRpb24gdG8gRkFRIGl0ZW0KICAgICREYXRhe1ZvdGVSZXN1bHR9ID0gJFZvdGVSZXN1bHQ7CiAgICAkRGF0YXtWb3Rlc30gPSAkVm90ZURhdGEtPntWb3Rlc30gfHwgMDsKCiAgICByZXR1cm4gJURhdGE7Cn0KCnN1YiBJdGVtRmllbGRHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIEl0ZW1JRCBGaWVsZCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBmb3IgdmFsaWQgZmllbGQgbmFtZQogICAgaWYgKCAkUGFyYW17RmllbGR9ICF+IG17IFxBIEZpZWxkIFsxLTZdIFx6IH1tc3hpICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRmllbGQgJyRQYXJhbXtGaWVsZH0nIGlzIGludmFsaWQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnSXRlbUZpZWxkR2V0OjpJdGVtSUQ6OicgLiAkUGFyYW17SXRlbUlEfTsKCiAgICBteSAkQ2FjaGUgPSAkU2VsZi0+e0NhY2hlT2JqZWN0fS0+R2V0KAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgICMgY2hlY2sgaWYgYSBjYWNoZSBlbnRyeSBleGlzdHMgZm9yIHRoZSBnaXZlbiBGaWVsZAogICAgaWYgKCByZWYgJENhY2hlIGVxICdIQVNIJyAmJiBleGlzdHMgJENhY2hlLT57ICRQYXJhbXtGaWVsZH0gfSApIHsKICAgICAgICByZXR1cm4gJENhY2hlLT57ICRQYXJhbXtGaWVsZH0gfTsKICAgIH0KCiAgICAjIGNyZWF0ZSBhIGZpZWxkIGxvb2t1cCB0YWJsZQogICAgbXkgJUZpZWxkTG9va3VwID0gKAogICAgICAgIEZpZWxkMSA9PiAnZl9maWVsZDEnLAogICAgICAgIEZpZWxkMiA9PiAnZl9maWVsZDInLAogICAgICAgIEZpZWxkMyA9PiAnZl9maWVsZDMnLAogICAgICAgIEZpZWxkNCA9PiAnZl9maWVsZDQnLAogICAgICAgIEZpZWxkNSA9PiAnZl9maWVsZDUnLAogICAgICAgIEZpZWxkNiA9PiAnZl9maWVsZDYnLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUICcgLiAkRmllbGRMb29rdXB7ICRQYXJhbXtGaWVsZH0gfSAuICcKICAgICAgICAgICAgRlJPTSBmYXFfaXRlbQogICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJEZpZWxkOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRmllbGQgPSAkUm93WzBdIHx8ICcnOwogICAgfQoKICAgIGlmICggcmVmICRDYWNoZSBlcSAnSEFTSCcgKSB7CgogICAgICAgICMgQ2FjaGUgZmlsZSBmb3IgSXRlbUlEIGFscmVhZHkgZXhpc3RzLCBhZGQgZmllbGQgZGF0YS4KICAgICAgICAkQ2FjaGUtPnsgJFBhcmFte0ZpZWxkfSB9ID0gJEZpZWxkOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgQ3JlYXRlIG5ldyBjYWNoZSBmaWxlLgogICAgICAgICRDYWNoZSA9IHsKICAgICAgICAgICAgJFBhcmFte0ZpZWxkfSA9PiAkRmllbGQsCiAgICAgICAgfTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJFNlbGYtPntDYWNoZU9iamVjdH0tPlNldCgKICAgICAgICBUeXBlICA9PiAnRkFRJywKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gJENhY2hlLAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICByZXR1cm4gJEZpZWxkOwp9Cgo9aXRlbSBJdGVtVm90ZURhdGFHZXQoKQoKUmV0dXJucyBhIGhhc2ggcmVmZXJlbmNlIHdpdGggdGhlIG51bWJlciBvZiB2b3RlcyBhbmQgdGhlIHZvdGUgcmVzdWx0LgoKICAgIG15ICRWb3RlRGF0YUhhc2hSZWYgPSAkRkFRT2JqZWN0LT5JdGVtVm90ZURhdGFHZXQoCiAgICAgICAgSXRlbUlEID0+IDEyMywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRWb3RlRGF0YUhhc2hSZWYgPSB7CiAgICAgICAgUmVzdWx0ID0+IDc1LjAwMDAsCiAgICAgICAgVm90ZXMgID0+IDUKICAgIH07Cgo9Y3V0CgpzdWIgSXRlbVZvdGVEYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdJdGVtVm90ZURhdGFHZXQ6OicgLiAkUGFyYW17SXRlbUlEfTsKICAgIG15ICRDYWNoZSAgICA9ICRTZWxmLT57Q2FjaGVPYmplY3R9LT5HZXQoCiAgICAgICAgVHlwZSA9PiAnRkFRJywKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIGdldCB2b3RlIGZyb20gZGIKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBjb3VudCgqKSwgYXZnKHJhdGUpIEZST00gZmFxX3ZvdGluZyBXSEVSRSBpdGVtX2lkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0l0ZW1JRH0gXSwKICAgICAgICBMaW1pdCA9PiAkUGFyYW17TGltaXR9IHx8IDUwMCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlRGF0YTsKICAgIGlmICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJERhdGF7Vm90ZXN9ICA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7UmVzdWx0fSA9ICRSb3dbMV07CiAgICB9CgogICAgIyBjYWNoZSByZXN1bHQKICAgICRTZWxmLT57Q2FjaGVPYmplY3R9LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICAgICBUVEwgICA9PiA2MCAqIDYwICogMjQgKiAyLAogICAgKTsKCiAgICByZXR1cm4gXCVEYXRhOwp9Cgo9aXRlbSBGQVFBZGQoKQoKYWRkIGFuIGFydGljbGUKCiAgICBteSAkSXRlbUlEID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgICAgIFRpdGxlICAgICAgPT4gJ1NvbWUgVGV4dCcsCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAxLAogICAgICAgIFN0YXRlSUQgICAgPT4gMSwKICAgICAgICBMYW5ndWFnZUlEID0+IDEsCiAgICAgICAgTnVtYmVyICAgICA9PiAnMTM0MDInLCAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBLZXl3b3JkcyAgID0+ICdzb21lIGtleXdvcmRzJywgICMgKG9wdGlvbmFsKQogICAgICAgIEZpZWxkMSAgICAgPT4gJ1N5bXB0b20uLi4nLCAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRmllbGQyICAgICA9PiAnUHJvYmxlbS4uLicsICAgICAjIChvcHRpb25hbCkKICAgICAgICBGaWVsZDMgICAgID0+ICdTb2x1dGlvbi4uLicsICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpZWxkNCAgICAgPT4gJ0ZpZWxkNC4uLicsICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRmllbGQ1ICAgICA9PiAnRmllbGQ1Li4uJywgICAgICAjIChvcHRpb25hbCkKICAgICAgICBGaWVsZDYgICAgID0+ICdDb21tZW50Li4uJywgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEFwcHJvdmVkICAgPT4gMSwgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRJdGVtSUQgPSAzNDsKCj1jdXQKCnN1YiBGQVFBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2F0ZWdvcnlJRCBTdGF0ZUlEIExhbmd1YWdlSUQgVGl0bGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlIGZvciBWYWxpZElECiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZElEfSApIHsKCiAgICAgICAgIyBnZXQgdGhlIHZhbGlkIGlkcwogICAgICAgIG15IEBWYWxpZElEcyA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZElEc0dldCgpOwoKICAgICAgICAkUGFyYW17VmFsaWRJRH0gPSAkVmFsaWRJRHNbMF07CiAgICB9CgogICAgIyBjaGVjayBuYW1lCiAgICBpZiAoICEkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJFBhcmFte05hbWV9ID0gdGltZSgpIC4gJy0nIC4gcmFuZCgxMDApOwogICAgfQoKICAgICMgY2hlY2sgbnVtYmVyCiAgICBpZiAoICEkUGFyYW17TnVtYmVyfSApIHsKICAgICAgICAkUGFyYW17TnVtYmVyfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTeXN0ZW1JRCcpIC4gcmFuZCgxMDApOwogICAgfQoKICAgICMgY2hlY2sgaWYgYXBwcm92YWwgZmVhdHVyZSBpcyB1c2VkCiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkFwcHJvdmFsUmVxdWlyZWQnKSApIHsKCiAgICAgICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICAgICAgbXkgJUdyb3VwcyA9IHJldmVyc2UgJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgYXBwcm92YWwgZ3JvdXAKICAgICAgICBteSAkQXBwcm92YWxHcm91cCA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkFwcHJvdmFsR3JvdXAnKTsKCiAgICAgICAgIyBzZXQgZGVmYXVsdCB0byAwIGlmIGFwcHJvdmVkIHBhcmFtIGlzIG5vdCBnaXZlbgogICAgICAgICMgb3IgaWYgdXNlciBkb2VzIG5vdCBoYXZlIHRoZSByaWdodHMgdG8gYXBwcm92ZQogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFte0FwcHJvdmVkfSB8fCAhJEdyb3Vwc3skQXBwcm92YWxHcm91cH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtBcHByb3ZlZH0gPSAwOwogICAgICAgIH0KICAgIH0KCiAgICAjIGlmIGFwcHJvdmFsIGZlYXR1cmUgaXMgbm90IGFjdGl2YXRlZCwgYSBuZXcgZmFxIGl0ZW0gaXMgYWx3YXlzIGFwcHJvdmVkCiAgICBlbHNlIHsKICAgICAgICAkUGFyYW17QXBwcm92ZWR9ID0gMTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGZhcV9pdGVtICcKICAgICAgICAgICAgLiAnKGZfbnVtYmVyLCBmX25hbWUsIGZfbGFuZ3VhZ2VfaWQsIGZfc3ViamVjdCwgJwogICAgICAgICAgICAuICdjYXRlZ29yeV9pZCwgc3RhdGVfaWQsIGZfa2V5d29yZHMsIGFwcHJvdmVkLCB2YWxpZF9pZCwgJwogICAgICAgICAgICAuICdmX2ZpZWxkMSwgZl9maWVsZDIsIGZfZmllbGQzLCBmX2ZpZWxkNCwgZl9maWVsZDUsIGZfZmllbGQ2LCAnCiAgICAgICAgICAgIC4gJ2NyZWF0ZWQsIGNyZWF0ZWRfYnksIGNoYW5nZWQsIGNoYW5nZWRfYnkpJwogICAgICAgICAgICAuICdWQUxVRVMgKCcKICAgICAgICAgICAgLiAnPywgPywgPywgPywgJwogICAgICAgICAgICAuICc/LCA/LCA/LCA/LCA/LCAnCiAgICAgICAgICAgIC4gJz8sID8sID8sID8sID8sID8sICcKICAgICAgICAgICAgLiAnY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TnVtYmVyfSwgICAgIFwkUGFyYW17TmFtZX0sICAgIFwkUGFyYW17TGFuZ3VhZ2VJRH0sIFwkUGFyYW17VGl0bGV9LAogICAgICAgICAgICBcJFBhcmFte0NhdGVnb3J5SUR9LCBcJFBhcmFte1N0YXRlSUR9LCBcJFBhcmFte0tleXdvcmRzfSwgICBcJFBhcmFte0FwcHJvdmVkfSwKICAgICAgICAgICAgXCRQYXJhbXtWYWxpZElEfSwKICAgICAgICAgICAgXCRQYXJhbXtGaWVsZDF9LCBcJFBhcmFte0ZpZWxkMn0sIFwkUGFyYW17RmllbGQzfSwKICAgICAgICAgICAgXCRQYXJhbXtGaWVsZDR9LCBcJFBhcmFte0ZpZWxkNX0sIFwkUGFyYW17RmllbGQ2fSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBidWlsZCBTUUwgdG8gZ2V0IHRoZSBpZCBvZiB0aGUgbmV3bHkgaW5zZXJ0ZWQgRkFRIGFydGljbGUKICAgIG15ICRTUUwgPSAnU0VMRUNUIGlkIEZST00gZmFxX2l0ZW0gJwogICAgICAgIC4gJ1dIRVJFIGZfbnVtYmVyID0gPyAnCiAgICAgICAgLiAnQU5EIGZfbmFtZSA9ID8gJwogICAgICAgIC4gJ0FORCBmX2xhbmd1YWdlX2lkID0gPyAnCiAgICAgICAgLiAnQU5EIGNhdGVnb3J5X2lkID0gPyAnCiAgICAgICAgLiAnQU5EIHN0YXRlX2lkID0gPyAnCiAgICAgICAgLiAnQU5EIGFwcHJvdmVkID0gPyAnCiAgICAgICAgLiAnQU5EIHZhbGlkX2lkID0gPyAnCiAgICAgICAgLiAnQU5EIGNyZWF0ZWRfYnkgPSA/ICcKICAgICAgICAuICdBTkQgY2hhbmdlZF9ieSA9ID8gJzsKCiAgICAjIGhhbmRsZSB0aGUgdGl0bGUKICAgIGlmICggJFBhcmFte1RpdGxlfSApIHsKICAgICAgICAkU1FMIC49ICdBTkQgZl9zdWJqZWN0ID0gPyAnOwogICAgfQoKICAgICMgYWRkaXRpb25hbCBTUUwgZm9yIHRoZSBjYXNlIHRoYXQgdGhlIHRpdGxlIGlzIGFuIGVtcHR5IHN0cmluZwogICAgIyBhbmQgdGhlIGRhdGFiYXNlIGlzIG9yYWNsZSwgd2hpY2ggdHJlYXRzIGVtcHR5IHN0cmluZ3MgYXMgTlVMTAogICAgZWxzZSB7CiAgICAgICAgJFNRTCAuPSAnQU5EICgoZl9zdWJqZWN0ID0gPykgT1IgKGZfc3ViamVjdCBJUyBOVUxMKSkgJzsKICAgIH0KCiAgICAjIGhhbmRsZSB0aGUga2V5d29yZHMKICAgIGlmICggJFBhcmFte0tleXdvcmRzfSApIHsKICAgICAgICAkU1FMIC49ICdBTkQgZl9rZXl3b3JkcyA9ID8gJzsKICAgIH0KCiAgICAjIGFkZGl0aW9uYWwgU1FMIGZvciB0aGUgY2FzZSB0aGF0IGtleXdvcmRzIGlzIGFuIGVtcHR5IHN0cmluZwogICAgIyBhbmQgdGhlIGRhdGFiYXNlIGlzIG9yYWNsZSwgd2hpY2ggdHJlYXRzIGVtcHR5IHN0cmluZ3MgYXMgTlVMTAogICAgZWxzZSB7CiAgICAgICAgJFNRTCAuPSAnQU5EICgoZl9rZXl3b3JkcyA9ID8pIE9SIChmX2tleXdvcmRzIElTIE5VTEwpKSAnOwogICAgfQoKICAgICMgZ2V0IGlkCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtOdW1iZXJ9LAogICAgICAgICAgICBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte0xhbmd1YWdlSUR9LAogICAgICAgICAgICBcJFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgICAgICBcJFBhcmFte1N0YXRlSUR9LAogICAgICAgICAgICBcJFBhcmFte0FwcHJvdmVkfSwKICAgICAgICAgICAgXCRQYXJhbXtWYWxpZElEfSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkUGFyYW17VGl0bGV9LAogICAgICAgICAgICBcJFBhcmFte0tleXdvcmRzfSwKICAgICAgICBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICRJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJElEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIHVwZGF0ZSBudW1iZXIKICAgIG15ICROdW1iZXIgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3lzdGVtSUQnKSAuICcwMCcgLiAkSUQ7CiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgID0+ICdVUERBVEUgZmFxX2l0ZW0gU0VUIGZfbnVtYmVyID0gPyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJE51bWJlciwgXCRJRCBdLAogICAgKTsKCiAgICAjIGFkZCBoaXN0b3J5CiAgICAkU2VsZi0+RkFRSGlzdG9yeUFkZCgKICAgICAgICBOYW1lICAgPT4gJ0NyZWF0ZWQnLAogICAgICAgIEl0ZW1JRCA9PiAkSUQsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGFwcHJvdmFsIGZlYXR1cmUgaXMgZW5hYmxlZAogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpBcHByb3ZhbFJlcXVpcmVkJykgJiYgISRQYXJhbXtBcHByb3ZlZH0gKSB7CgogICAgICAgICMgY3JlYXRlIG5ldyBhcHByb3ZhbCB0aWNrZXQKICAgICAgICBteSAkT2sgPSAkU2VsZi0+X0ZBUUFwcHJvdmFsVGlja2V0Q3JlYXRlKAogICAgICAgICAgICBJdGVtSUQgICAgID0+ICRJRCwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkUGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJFBhcmFte0xhbmd1YWdlSUR9LAogICAgICAgICAgICBGQVFOdW1iZXIgID0+ICROdW1iZXIsCiAgICAgICAgICAgIFRpdGxlICAgICAgPT4gJFBhcmFte1RpdGxlfSwKICAgICAgICAgICAgU3RhdGVJRCAgICA9PiAkUGFyYW17U3RhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRPayApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NvdWxkIG5vdCBjcmVhdGUgYXBwcm92YWwgdGlja2V0IScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkSUQ7Cn0KCj1pdGVtIEZBUVVwZGF0ZSgpCgp1cGRhdGUgYW4gYXJ0aWNsZQoKICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFVcGRhdGUoCiAgICAgICAgSXRlbUlEICAgICAgPT4gMTIzLAogICAgICAgIENhdGVnb3J5SUQgID0+IDEsCiAgICAgICAgU3RhdGVJRCAgICAgPT4gMSwKICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgIEFwcHJvdmVkICAgID0+IDEsCiAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICBUaXRsZSAgICAgICA9PiAnU29tZSBUZXh0JywKICAgICAgICBGaWVsZDEgICAgICA9PiAnUHJvYmxlbS4uLicsCiAgICAgICAgRmllbGQyICAgICAgPT4gJ1NvbHV0aW9uLi4uJywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgIEFwcHJvdmFsT2ZmID0+IDEsIChvcHRpb25hbCwgaWYgc2V0IHRvIDEgYXBwcm92YWwgaXMgaWdub3JlZC4gVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiBjYWxsZWQgZnJvbSBGQVFJbmxpbmVBdHRhY2htZW50VVJMVXBkYXRlKQogICAgKTsKClJldHVybnM6CgogICAgJFN1Y2Nlc3MgPSAxIDsgICAgICAgICAgIyBvciB1bmRlZiBpZiBjYW4ndCB1cGRhdGUgdGhlIEZBUSBhcnRpY2xlCgo9Y3V0CgpzdWIgRkFRVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBDYXRlZ29yeUlEIFN0YXRlSUQgTGFuZ3VhZ2VJRCBUaXRsZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGZhcSBkYXRhCiAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT5GQVFHZXQoCiAgICAgICAgSXRlbUlEICAgICA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBpZiBubyBuYW1lIHdhcyBnaXZlbiB1c2Ugb2xkIG5hbWUgZnJvbSBGQVEKICAgIGlmICggISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkUGFyYW17TmFtZX0gPSAkRkFRRGF0YXtOYW1lfTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlIGZvciBWYWxpZElECiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZElEfSApIHsKICAgICAgICAkUGFyYW17VmFsaWRJRH0gPSAkRkFRRGF0YXtWYWxpZElEfTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBmYXFfaXRlbSBTRVQgJwogICAgICAgICAgICAuICdmX25hbWUgPSA/LCBmX2xhbmd1YWdlX2lkID0gPywgJwogICAgICAgICAgICAuICdmX3N1YmplY3QgPSA/LCBjYXRlZ29yeV9pZCA9ID8sICcKICAgICAgICAgICAgLiAnc3RhdGVfaWQgPSA/LCBmX2tleXdvcmRzID0gPywgdmFsaWRfaWQgPSA/LCAnCiAgICAgICAgICAgIC4gJ2ZfZmllbGQxID0gPywgZl9maWVsZDIgPSA/LCAnCiAgICAgICAgICAgIC4gJ2ZfZmllbGQzID0gPywgZl9maWVsZDQgPSA/LCAnCiAgICAgICAgICAgIC4gJ2ZfZmllbGQ1ID0gPywgZl9maWVsZDYgPSA/LCAnCiAgICAgICAgICAgIC4gJ2NoYW5nZWQgPSBjdXJyZW50X3RpbWVzdGFtcCwgJwogICAgICAgICAgICAuICdjaGFuZ2VkX2J5ID0gPyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sICAgIFwkUGFyYW17TGFuZ3VhZ2VJRH0sCiAgICAgICAgICAgIFwkUGFyYW17VGl0bGV9LCAgIFwkUGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgIFwkUGFyYW17U3RhdGVJRH0sIFwkUGFyYW17S2V5d29yZHN9LCBcJFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICBcJFBhcmFte0ZpZWxkMX0sICBcJFBhcmFte0ZpZWxkMn0sCiAgICAgICAgICAgIFwkUGFyYW17RmllbGQzfSwgIFwkUGFyYW17RmllbGQ0fSwKICAgICAgICAgICAgXCRQYXJhbXtGaWVsZDV9LCAgXCRQYXJhbXtGaWVsZDZ9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkUGFyYW17SXRlbUlEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgJFNlbGYtPl9EZWxldGVGcm9tRkFRQ2FjaGUoJVBhcmFtKTsKCiAgICAjIHVwZGF0ZSBhcHByb3ZhbAogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpBcHByb3ZhbFJlcXVpcmVkJykgJiYgISRQYXJhbXtBcHByb3ZhbE9mZn0gKSB7CgogICAgICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgICAgIG15ICVHcm91cHMgPSByZXZlcnNlICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgVHlwZSAgID0+ICdybycsCiAgICAgICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGhlIGFwcHJvdmFsIGdyb3VwCiAgICAgICAgbXkgJEFwcHJvdmFsR3JvdXAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpBcHByb3ZhbEdyb3VwJyk7CgogICAgICAgICMgc2V0IGFwcHJvdmFsIHRvIDAgaWYgdXNlciBkb2VzIG5vdCBoYXZlIHRoZSByaWdodHMgdG8gYXBwcm92ZQogICAgICAgIGlmICggISRHcm91cHN7JEFwcHJvdmFsR3JvdXB9ICkgewogICAgICAgICAgICAkUGFyYW17QXBwcm92ZWR9ID0gMDsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBhcHByb3ZhbAogICAgICAgIG15ICRVcGRhdGVTdWNjZXNzID0gJFNlbGYtPl9GQVFBcHByb3ZhbFVwZGF0ZSgKICAgICAgICAgICAgSXRlbUlEICAgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIEFwcHJvdmVkID0+ICRQYXJhbXtBcHByb3ZlZH0gfHwgMCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRVcGRhdGVTdWNjZXNzICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IHVwZGF0ZSBhcHByb3ZhbCBmb3IgSXRlbUlEICRQYXJhbXtJdGVtSUR9ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIGNhY2hlCiAgICAgICAgJFNlbGYtPl9EZWxldGVGcm9tRkFRQ2FjaGUoJVBhcmFtKTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGhpc3RvcnkgZW50cnkgc2hvdWxkIGJlIGFkZGVkCiAgICByZXR1cm4gMSBpZiAkUGFyYW17SGlzdG9yeU9mZn07CgogICAgIyB3cml0ZSBoaXN0b3J5IGVudHJ5CiAgICAkU2VsZi0+RkFRSGlzdG9yeUFkZCgKICAgICAgICBOYW1lICAgPT4gJ1VwZGF0ZWQnLAogICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBBdHRhY2htZW50QWRkKCkKCmFkZCBhcnRpY2xlIGF0dGFjaG1lbnRzLCByZXR1cm5zIHRoZSBhdHRhY2htZW50IGlkCgogICAgbXkgJEF0dGFjaG1lbnRJRCA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRBZGQoCiAgICAgICAgSXRlbUlEICAgICAgPT4gMTIzLAogICAgICAgIENvbnRlbnQgICAgID0+ICRDb250ZW50LAogICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3htbCcsCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJ3NvbWVuYW1lLnhtbCcsCiAgICAgICAgSW5saW5lICAgICAgPT4gMSwgICAoMHwxLCBkZWZhdWx0IDApCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRBdHRhY2htZW50SUQgPSAxMjMgOyAgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgY2FuJ3QgYWRkIHRoZSBhdHRhY2htZW50Cgo9Y3V0CgpzdWIgQXR0YWNobWVudEFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgQ29udGVudCBDb250ZW50VHlwZSBGaWxlbmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGRlZmF1bHQKICAgIGlmICggISRQYXJhbXtJbmxpbmV9ICkgewogICAgICAgICRQYXJhbXtJbmxpbmV9ID0gMDsKICAgIH0KCiAgICAjIGdldCBhdHRhY2htZW50IHNpemUKICAgIHsKICAgICAgICB1c2UgYnl0ZXM7CiAgICAgICAgJFBhcmFte0ZpbGVzaXplfSA9IGxlbmd0aCAkUGFyYW17Q29udGVudH07CiAgICAgICAgbm8gYnl0ZXM7CiAgICB9CgogICAgIyBnZXQgYWxsIGV4aXN0aW5nIGF0dGFjaG1lbnRzCiAgICBteSBASW5kZXggPSAkU2VsZi0+QXR0YWNobWVudEluZGV4KAogICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBmaWxlbmFtZQogICAgbXkgJE5ld0ZpbGVOYW1lID0gJFBhcmFte0ZpbGVuYW1lfTsKCiAgICAjIGJ1aWxkIGEgbG9va3VwIGhhc2ggb2YgYWxsIGV4aXN0aW5nIGZpbGUgbmFtZXMKICAgIG15ICVVc2VkRmlsZTsKICAgIGZvciBteSAkRmlsZSAoQEluZGV4KSB7CiAgICAgICAgJFVzZWRGaWxleyAkRmlsZS0+e0ZpbGVuYW1lfSB9ID0gMTsKICAgIH0KCiAgICAjIHRyeSB0byBtb2RpZnkgdGhlIHRoZSBmaWxlIG5hbWUgYnkgYWRkaW5nIGEgbnVtYmVyIGlmIGl0IGV4aXN0cyBhbHJlYWR5CiAgICBteSAkQ291bnQgPSAwOwogICAgd2hpbGUgKCAkQ291bnQgPCA1MCApIHsKCiAgICAgICAgIyBpbmNyZWFzZSBjb3VudGVyCiAgICAgICAgJENvdW50Kys7CgogICAgICAgICMgaWYgdGhlIGZpbGUgbmFtZSBleGlzdHMKICAgICAgICBpZiAoIGV4aXN0cyAkVXNlZEZpbGV7JE5ld0ZpbGVOYW1lfSApIHsKCiAgICAgICAgICAgICMgZmlsZW5hbWUgaGFzIGEgZmlsZSBuYW1lIGV4dGVuc2lvbiAoZS5nLiB0ZXN0LmpwZykKICAgICAgICAgICAgaWYgKCAkUGFyYW17RmlsZW5hbWV9ID1+IG17IFxBICguKikgXC4gKC4rPykgXHogfXhtcyApIHsKICAgICAgICAgICAgICAgICROZXdGaWxlTmFtZSA9ICIkMS0kQ291bnQuJDIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJE5ld0ZpbGVOYW1lID0gIiRQYXJhbXtGaWxlbmFtZX0tJENvdW50IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHN0b3JlIHRoZSBuZXcgZmlsZW5hbWUKICAgICRQYXJhbXtGaWxlbmFtZX0gPSAkTmV3RmlsZU5hbWU7CgogICAgIyBlbmNvZGUgYXR0YWNobWVudCBpZiBpdCdzIGEgcG9zdGdyZXNxbCBiYWNrZW5kISEhCiAgICBpZiAoICEkU2VsZi0+e0RCT2JqZWN0fS0+R2V0RGF0YWJhc2VGdW5jdGlvbignRGlyZWN0QmxvYicpICkgewogICAgICAgICRTZWxmLT57RW5jb2RlT2JqZWN0fS0+RW5jb2RlT3V0cHV0KCBcJFBhcmFte0NvbnRlbnR9ICk7CiAgICAgICAgJFBhcmFte0NvbnRlbnR9ID0gTUlNRTo6QmFzZTY0OjplbmNvZGVfYmFzZTY0KCAkUGFyYW17Q29udGVudH0gKTsKICAgIH0KCiAgICAjIHdyaXRlIGF0dGFjaG1lbnQgdG8gZGIKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gZmFxX2F0dGFjaG1lbnQgJyAuCiAgICAgICAgICAgICcgKGZhcV9pZCwgZmlsZW5hbWUsIGNvbnRlbnRfdHlwZSwgY29udGVudF9zaXplLCBjb250ZW50LCBpbmxpbmVhdHRhY2htZW50LCAnIC4KICAgICAgICAgICAgJyBjcmVhdGVkLCBjcmVhdGVkX2J5LCBjaGFuZ2VkLCBjaGFuZ2VkX2J5KSBWQUxVRVMgJyAuCiAgICAgICAgICAgICcgKD8sID8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sICBcJFBhcmFte0ZpbGVuYW1lfSwgXCRQYXJhbXtDb250ZW50VHlwZX0sIFwkUGFyYW17RmlsZXNpemV9LAogICAgICAgICAgICBcJFBhcmFte0NvbnRlbnR9LCBcJFBhcmFte0lubGluZX0sICAgXCRQYXJhbXtVc2VySUR9LCAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGdldCB0aGUgYXR0YWNobWVudCBpZAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCAnCiAgICAgICAgICAgIC4gJ0ZST00gZmFxX2F0dGFjaG1lbnQgJwogICAgICAgICAgICAuICdXSEVSRSBmYXFfaWQgPSA/IEFORCBmaWxlbmFtZSA9ID8gJwogICAgICAgICAgICAuICdBTkQgY29udGVudF90eXBlID0gPyBBTkQgY29udGVudF9zaXplID0gPyAnCiAgICAgICAgICAgIC4gJ0FORCBpbmxpbmVhdHRhY2htZW50ID0gPyAnCiAgICAgICAgICAgIC4gJ0FORCBjcmVhdGVkX2J5ID0gPyBBTkQgY2hhbmdlZF9ieSA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sIFwkUGFyYW17RmlsZW5hbWV9LCBcJFBhcmFte0NvbnRlbnRUeXBlfSwgXCRQYXJhbXtGaWxlc2l6ZX0sCiAgICAgICAgICAgIFwkUGFyYW17SW5saW5lfSwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkQXR0YWNobWVudElEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQXR0YWNobWVudElEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJEF0dGFjaG1lbnRJRDsKfQoKPWl0ZW0gQXR0YWNobWVudEdldCgpCgpnZXQgYXR0YWNobWVudCBvZiBhcnRpY2xlCgogICAgbXkgJUZpbGUgPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50R2V0KAogICAgICAgIEl0ZW1JRCA9PiAxMjMsCiAgICAgICAgRmlsZUlEID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAlRmlsZSA9ICgKICAgICAgICBGaWxlc2l6ZSAgICA9PiAnNTQwMjg2JywgICAgICAgICAgICAgICAgIyBmaWxlIHNpemUgaW4gYnl0ZXMKICAgICAgICBDb250ZW50VHlwZSA9PiAnaW1hZ2UvanBlZycsCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJ0Vycm9yLmpwZycsCiAgICAgICAgQ29udGVudCAgICAgPT4gJy4uLicgICAgICAgICAgICAgICAgICAgICMgZmlsZSBiaW5hcnkgY29udGVudAogICAgKTsKCj1jdXQKCnN1YiBBdHRhY2htZW50R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBGaWxlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgZmlsZW5hbWUsIGNvbnRlbnRfdHlwZSwgY29udGVudF9zaXplLCBjb250ZW50ICcKICAgICAgICAgICAgLiAnRlJPTSBmYXFfYXR0YWNobWVudCAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPyBBTkQgZmFxX2lkID0gPyAnCiAgICAgICAgICAgIC4gJ09SREVSIEJZIGNyZWF0ZWQnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0ZpbGVJRH0sIFwkUGFyYW17SXRlbUlEfSBdLAogICAgICAgIEVuY29kZSA9PiBbIDEsIDEsIDEsIDAgXSwKICAgICAgICBMaW1pdCAgPT4gMSwKICAgICk7CgogICAgbXkgJUZpbGU7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICAjIGRlY29kZSBhdHRhY2htZW50IGlmIGl0J3MgYSBwb3N0Z3Jlc3FsIGJhY2tlbmQgYW5kIG5vdCBCTE9CCiAgICAgICAgaWYgKCAhJFNlbGYtPntEQk9iamVjdH0tPkdldERhdGFiYXNlRnVuY3Rpb24oJ0RpcmVjdEJsb2InKSApIHsKICAgICAgICAgICAgJFJvd1szXSA9IE1JTUU6OkJhc2U2NDo6ZGVjb2RlX2Jhc2U2NCggJFJvd1szXSApOwogICAgICAgIH0KCiAgICAgICAgJEZpbGV7RmlsZW5hbWV9ICAgID0gJFJvd1swXTsKICAgICAgICAkRmlsZXtDb250ZW50VHlwZX0gPSAkUm93WzFdOwogICAgICAgICRGaWxle0ZpbGVzaXplfSAgICA9ICRSb3dbMl07CiAgICAgICAgJEZpbGV7Q29udGVudH0gICAgID0gJFJvd1szXTsKICAgIH0KCiAgICByZXR1cm4gJUZpbGU7Cn0KCj1pdGVtIEF0dGFjaG1lbnREZWxldGUoKQoKZGVsZXRlIGF0dGFjaG1lbnQgb2YgYXJ0aWNsZQoKICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+QXR0YWNobWVudERlbGV0ZSgKICAgICAgICBJdGVtSUQgPT4gMTIzLAogICAgICAgIEZpbGVJRCA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFN1Y2Nlc3MgPSAxIDsgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgYXR0YWNobWVudCBjb3VsZCBub3QgYmUgZGVsZXRlZAoKPWN1dAoKc3ViIEF0dGFjaG1lbnREZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIEZpbGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gZmFxX2F0dGFjaG1lbnQgV0hFUkUgaWQgPSA/IEFORCBmYXFfaWQgPSA/ICcsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17RmlsZUlEfSwgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBBdHRhY2htZW50SW5kZXgoKQoKcmV0dXJuIGFuIGF0dGFjaG1lbnQgaW5kZXggb2YgYW4gYXJ0aWNsZQoKICAgIG15IEBJbmRleCA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRJbmRleCgKICAgICAgICBJdGVtSUQgICAgID0+IDEyMywKICAgICAgICBTaG93SW5saW5lID0+IDAsICAgKCAwfDEsIGRlZmF1bHQgMSkKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICBASW5kZXggPSAoCiAgICAgICAgewogICAgICAgICAgICBGaWxlc2l6ZSAgICA9PiAnNTI3LjYgS0J5dGVzJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnRXJyb3IuanBnJywKICAgICAgICAgICAgRmlsZXNpemVSYXcgPT4gNTQwMjg2LAogICAgICAgICAgICBGaWxlSUQgICAgICA9PiA2LAogICAgICAgICAgICBJbmxpbmUgICAgICA9PiAwLAogICAgICAgIH0sCiAgICAgICAgeywKICAgICAgICAgICAgRmlsZXNpemUgPT4gJzQzMC4wIEtCeXRlcycsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJ1NvbHV0aW9uLmpwZycsCiAgICAgICAgICAgIEZpbGVzaXplUmF3ID0+IDQ0MDI4NiwKICAgICAgICAgICAgRmlsZUlEID0+IDUsCiAgICAgICAgICAgIElubGluZSA9PiAxLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWxlc2l6ZSA9PiAnMjk2IEJ5dGVzJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICBGaWxlbmFtZSA9PiAnQWRkaXRpb25hbENvbW1lbnRzLnR4dCcsCiAgICAgICAgICAgIEZpbGVzaXplUmF3ID0+IDI5NiwKICAgICAgICAgICAgRmlsZUlEID0+IDcsCiAgICAgICAgICAgIElubGluZSA9PiAwLAogICAgICAgIH0sCiAgICApOwoKPWN1dAoKc3ViIEF0dGFjaG1lbnRJbmRleCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBmaWxlbmFtZSwgY29udGVudF90eXBlLCBjb250ZW50X3NpemUsIGlubGluZWF0dGFjaG1lbnQgJwogICAgICAgICAgICAuICdGUk9NIGZhcV9hdHRhY2htZW50ICcKICAgICAgICAgICAgLiAnV0hFUkUgZmFxX2lkID0gPyAnCiAgICAgICAgICAgIC4gJ09SREVSIEJZIGZpbGVuYW1lJywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17SXRlbUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEwMCwKICAgICk7CgogICAgbXkgQEluZGV4OwogICAgQVRUQUNITUVOVDoKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIG15ICRJRCAgICAgICAgICA9ICRSb3dbMF07CiAgICAgICAgbXkgJEZpbGVuYW1lICAgID0gJFJvd1sxXTsKICAgICAgICBteSAkQ29udGVudFR5cGUgPSAkUm93WzJdOwogICAgICAgIG15ICRGaWxlc2l6ZSAgICA9ICRSb3dbM107CiAgICAgICAgbXkgJElubGluZSAgICAgID0gJFJvd1s0XTsKCiAgICAgICAgIyBkbyBub3Qgc2hvdyBpbmxpbmUgYXR0YWNobWVudHMKICAgICAgICBpZiAoIGRlZmluZWQgJFBhcmFte1Nob3dJbmxpbmV9ICYmICEkUGFyYW17U2hvd0lubGluZX0gJiYgJElubGluZSApIHsKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UOwogICAgICAgIH0KCiAgICAgICAgIyBjb252ZXJ0IHRvIGh1bWFuIHJlYWRhYmxlIGZpbGUgc2l6ZQogICAgICAgIG15ICRGaWxlU2l6ZVJhdyA9ICRGaWxlc2l6ZTsKICAgICAgICBpZiAoJEZpbGVzaXplKSB7CiAgICAgICAgICAgIGlmICggJEZpbGVzaXplID4gKCAxMDI0ICogMTAyNCApICkgewogICAgICAgICAgICAgICAgJEZpbGVzaXplID0gc3ByaW50ZiAiJS4xZiBNQnl0ZXMiLCAoICRGaWxlc2l6ZSAvICggMTAyNCAqIDEwMjQgKSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEZpbGVzaXplID4gMTAyNCApIHsKICAgICAgICAgICAgICAgICRGaWxlc2l6ZSA9IHNwcmludGYgIiUuMWYgS0J5dGVzIiwgKCAoICRGaWxlc2l6ZSAvIDEwMjQgKSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJEZpbGVzaXplID0gJEZpbGVzaXplIC4gJyBCeXRlcyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHB1c2ggQEluZGV4LCB7CiAgICAgICAgICAgIEZpbGVJRCAgICAgID0+ICRJRCwKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkQ29udGVudFR5cGUsCiAgICAgICAgICAgIEZpbGVzaXplICAgID0+ICRGaWxlc2l6ZSwKICAgICAgICAgICAgRmlsZXNpemVSYXcgPT4gJEZpbGVTaXplUmF3LAogICAgICAgICAgICBJbmxpbmUgICAgICA9PiAkSW5saW5lLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIEBJbmRleDsKfQoKPWl0ZW0gRkFRQ291bnQoKQoKQ291bnQgdGhlIG51bWJlciBvZiBhcnRpY2xlcyBmb3IgYSBkZWZpbmVkIGNhdGVnb3J5LiBPbmx5IHZhbGlkIEZBUSBhcnRpY2xlcyB3aWxsIGJlIGNvdW50ZWQuCgogICAgbXkgJEFydGljbGVDb3VudCA9ICRGQVFPYmplY3QtPkZBUUNvdW50KAogICAgICAgIENhdGVnb3J5SURzICA9PiBbMSwyLDMsNF0sCiAgICAgICAgT25seUFwcHJvdmVkID0+IDEsICAgIyBvcHRpb25hbCAoZGVmYXVsdCAwKQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJEFydGljbGVDb3VudCA9IDM7Cgo9Y3V0CgpzdWIgRkFRQ291bnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2F0ZWdvcnlJRHMgSXRlbVN0YXRlcyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENhdGVnb3J5SURTdHJpbmcgPSAnJzsKICAgIGlmICggJFBhcmFte0NhdGVnb3J5SURzfSAmJiByZWYgJFBhcmFte0NhdGVnb3J5SURzfSBlcSAnQVJSQVknICYmIEB7ICRQYXJhbXtDYXRlZ29yeUlEc30gfSApIHsKCiAgICAgICAgIyBpbnRlZ2VyIHF1b3RlIHRoZSBjYXRlZ29yeSBpZHMKICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBAeyAkUGFyYW17Q2F0ZWdvcnlJRHN9IH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJENhdGVnb3J5SUQsICdJbnRlZ2VyJyApOwogICAgICAgIH0KCiAgICAgICAgbXkgQFNvcnRlZElEcyA9IHNvcnQgQHsgJFBhcmFte0NhdGVnb3J5SURzfSB9OwoKICAgICAgICAjIHNwbGl0IElOIHN0YXRlbWVudCB3aXRoIG1vcmUgdGhhbiA5MDAgZWxlbWVudHMgaW4gbW9yZSBzdGF0ZW1lbnRzIGJvbWJpbmVkIHdpdGggT1IKICAgICAgICAjIGJlY2F1c2UgT3JhY2xlIGRvZXNuJ3Qgc3VwcG9ydCBtb3JlIHRoYW4gMTAwMCBlbGVtZW50cyBpbiBvbmUgSU4gc3RhdGVtZW50LgogICAgICAgIG15IEBTUUxTdHJpbmdzOwogICAgICAgIExPT1A6CiAgICAgICAgd2hpbGUgKCBzY2FsYXIgQFNvcnRlZElEcyApIHsKCiAgICAgICAgICAgIG15IEBTb3J0ZWRJRHNQYXJ0ID0gc3BsaWNlIEBTb3J0ZWRJRHMsIDAsIDkwMDsKCiAgICAgICAgICAgIG15ICRJRFN0cmluZyA9IGpvaW4gJywnLCBAU29ydGVkSURzUGFydDsKCiAgICAgICAgICAgIHB1c2ggQFNRTFN0cmluZ3MsICIgaS5jYXRlZ29yeV9pZCBJTiAoJElEU3RyaW5nKSAiOwogICAgICAgIH0KCiAgICAgICAgbXkgJFNRTFN0cmluZyA9IGpvaW4gJyBPUiAnLCBAU1FMU3RyaW5nczsKCiAgICAgICAgJENhdGVnb3J5SURTdHJpbmcgLj0gJ0FORCAoICcgLiAkU1FMU3RyaW5nIC4gJyApICc7CiAgICB9CgogICAgIyBidWlsZCB2YWxpZCBpZCBzdHJpbmcKICAgIG15ICRWYWxpZElEc1N0cmluZyA9IGpvaW4gJywgJywgJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkSURzR2V0KCk7CgogICAgbXkgJFNRTCA9ICdTRUxFQ1QgQ09VTlQoKikgJwogICAgICAgIC4gJ0ZST00gZmFxX2l0ZW0gaSwgZmFxX3N0YXRlIHMgJwogICAgICAgIC4gJ1dIRVJFIGkuc3RhdGVfaWQgPSBzLmlkICcKICAgICAgICAuICJBTkQgaS52YWxpZF9pZCBJTiAoJFZhbGlkSURzU3RyaW5nKSAiCiAgICAgICAgLiAkQ2F0ZWdvcnlJRFN0cmluZzsKCiAgICAjIGNvdW50IG9ubHkgYXBwcm92ZWQgYXJ0aWNsZXMKICAgIGlmICggJFBhcmFte09ubHlBcHByb3ZlZH0gKSB7CiAgICAgICAgJFNRTCAuPSAnIEFORCBpLmFwcHJvdmVkID0gMSc7CiAgICB9CgogICAgbXkgJEV4dCA9ICcnOwogICAgaWYgKCAkUGFyYW17SXRlbVN0YXRlc30gJiYgcmVmICRQYXJhbXtJdGVtU3RhdGVzfSBlcSAnSEFTSCcgJiYgJXsgJFBhcmFte0l0ZW1TdGF0ZXN9IH0gKSB7CiAgICAgICAgbXkgJFN0YXRlc1N0cmluZyA9IGpvaW4gJywgJywga2V5cyAleyAkUGFyYW17SXRlbVN0YXRlc30gfTsKICAgICAgICAkRXh0IC49ICIgQU5EIHMudHlwZV9pZCBJTiAoJFN0YXRlc1N0cmluZyApIjsKICAgIH0KICAgICRFeHQgLj0gJyBHUk9VUCBCWSBjYXRlZ29yeV9pZCc7CiAgICAkU1FMIC49ICRFeHQ7CgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+IDIwMCwKICAgICk7CgogICAgbXkgJENvdW50ID0gMDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENvdW50ID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJENvdW50Owp9Cgo9aXRlbSBWb3RlQWRkKCkKCmFkZCBhIHZvdGUKCiAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPlZvdGVBZGQoCiAgICAgICAgQ3JlYXRlZEJ5ID0+ICdTb21lIFRleHQnLAogICAgICAgIEl0ZW1JRCAgICA9PiAnMTIzNDU2JywKICAgICAgICBJUCAgICAgICAgPT4gJzU0LjQzLjMwLjEnLAogICAgICAgIEludGVyZmFjZSA9PiAnU29tZSBUZXh0JywKICAgICAgICBSYXRlICAgICAgPT4gMTAwLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiB2b3RlIGNvdWxkIG5vdCBiZSBhZGRlZAoKPWN1dAoKc3ViIFZvdGVBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3JlYXRlZEJ5IEl0ZW1JRCBJUCBJbnRlcmZhY2UgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGZhcV92b3RpbmcgKGNyZWF0ZWRfYnksIGl0ZW1faWQsIGlwLCBpbnRlcmZhY2UsIHJhdGUsIGNyZWF0ZWQgKScKICAgICAgICAgICAgLiAnIFZBTFVFUyAoID8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wICknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0NyZWF0ZWRCeX0sIFwkUGFyYW17SXRlbUlEfSwgXCRQYXJhbXtJUH0sIFwkUGFyYW17SW50ZXJmYWNlfSwKICAgICAgICAgICAgXCRQYXJhbXtSYXRlfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0l0ZW1Wb3RlRGF0YUdldDo6JyAuICRQYXJhbXtJdGVtSUR9OwogICAgJFNlbGYtPntDYWNoZU9iamVjdH0tPkRlbGV0ZSgKICAgICAgICBUeXBlID0+ICdGQVEnLAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gVm90ZUdldCgpCgpnZXQgYSB2b3RlIGluZm9ybWF0aW9uCgogICAgbXkgJVZvdGVEYXRhID0gJEZBUU9iamVjdC0+Vm90ZUdldCgKICAgICAgICBDcmVhdGVCeSAgPT4gJ1NvbWUgVGV4dCcsCiAgICAgICAgSXRlbUlEICAgID0+ICcxMjM0NTYnLAogICAgICAgIElQICAgICAgICA9PiAnMTI3LjAuMC4xJywKICAgICAgICBJbnRlcmZhY2UgPT4gJ1NvbWUgVGV4dCcsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAlVm90ZURhdGEgPSAoCiAgICAgICAgSXRlbUlEICAgID0+IDIzLAogICAgICAgIFJhdGUgICAgICA9PiA1MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvciAwIG9yIDI1IG9yIDc1IG9yIDEwMAogICAgICAgIElQICAgICAgICA9PiAnMTkyLjE2OC4wLjEnLAogICAgICAgIEludGVyZmFjZSA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbnRlcmZhY2UgSUQKICAgICAgICBDcmVhdGVkQnkgPT4gMSwKICAgICAgICBDcmVhdGVkICAgPT4gJzIwMTEtMDYtMTQgMTI6MzI6MDMnLAogICAgKTsKCj1jdXQKCnN1YiBWb3RlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENyZWF0ZUJ5IEl0ZW1JRCBJbnRlcmZhY2UgSVAgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRiIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDcmVhdGVkQnkgSW50ZXJmYWNlIElQKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSApOwogICAgfQogICAgJFBhcmFte0l0ZW1JRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtJdGVtSUR9LCAnSW50ZWdlcicgKTsKCiAgICBteSAkRXh0ID0gIiI7CiAgICBteSAkU1FMID0gIiBTRUxFQ1QgY3JlYXRlZF9ieSwgaXRlbV9pZCwgaW50ZXJmYWNlLCBpcCwgY3JlYXRlZCwgcmF0ZSBGUk9NIGZhcV92b3RpbmcgV0hFUkUiOwoKICAgICMgcHVibGljCiAgICBpZiAoICRQYXJhbXtJbnRlcmZhY2V9IGVxICczJyApIHsKICAgICAgICAkRXh0IC49ICIgaXAgPSAnJFBhcmFte0lQfScgQU5EIGl0ZW1faWQgPSAkUGFyYW17SXRlbUlEfSI7CiAgICB9CgogICAgIyBjdXN0b21lcgogICAgZWxzaWYgKCAkUGFyYW17SW50ZXJmYWNlfSBlcSAnMicgKSB7CiAgICAgICAgJEV4dCAuPSAiIGNyZWF0ZWRfYnkgPSAnJFBhcmFte0NyZWF0ZUJ5fScgQU5EIGl0ZW1faWQgPSAkUGFyYW17SXRlbUlEfSI7CiAgICB9CgogICAgIyBpbnRlcm5hbAogICAgZWxzaWYgKCAkUGFyYW17SW50ZXJmYWNlfSBlcSAnMScgKSB7CiAgICAgICAgJEV4dCAuPSAiIGNyZWF0ZWRfYnkgPSAnJFBhcmFte0NyZWF0ZUJ5fScgQU5EIGl0ZW1faWQgPSAkUGFyYW17SXRlbUlEfSI7CiAgICB9CiAgICAkU1FMIC49ICRFeHQ7CgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAlRGF0YSA9ICgKICAgICAgICAgICAgQ3JlYXRlZEJ5ID0+ICRSb3dbMF0sCiAgICAgICAgICAgIEl0ZW1JRCAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBJbnRlcmZhY2UgPT4gJFJvd1syXSwKICAgICAgICAgICAgSVAgICAgICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgIENyZWF0ZWQgICA9PiAkUm93WzRdLAogICAgICAgICAgICBSYXRlICAgICAgPT4gJFJvd1s1XSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiBpZiAhJURhdGE7CiAgICByZXR1cm4gXCVEYXRhOwp9Cgo9aXRlbSBWb3RlU2VhcmNoKCkKCnJldHVybnMgYW4gYXJyYXkgd2l0aCBWb3RlSURzCgogICAgbXkgJFZvdGVJREFycmF5cmVmID0gJEZBUU9iamVjdC0+Vm90ZVNlYXJjaCgKICAgICAgICBJdGVtSUQgPT4gMSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRWb3RlSURBcnJheXJlZiA9IFsKICAgICAgICAyMywKICAgICAgICA0NSwKICAgIF07Cgo9Y3V0CgpzdWIgVm90ZVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBmYXFfdm90aW5nIFdIRVJFIGl0ZW1faWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17SXRlbUlEfSBdLAogICAgICAgIExpbWl0ID0+ICRQYXJhbXtMaW1pdH0gfHwgNTAwLAogICAgKTsKCiAgICBteSBAVm90ZUlEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAVm90ZUlEcywgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBWb3RlSURzOwp9Cgo9aXRlbSBWb3RlRGVsZXRlKCkKCmRlbGV0ZSBhIHZvdGUKCiAgICBteSAkRGVsZXRlU3VjY2VzcyA9ICRGQVFPYmplY3QtPlZvdGVEZWxldGUoCiAgICAgICAgVm90ZUlEID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkRGVsZXRlU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAjIG9yIHVuZGVmIGlmIHZvdGUgY291bGQgbm90IGJlIGRlbGV0ZWQKCj1jdXQKCnN1YiBWb3RlRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFZvdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGZhcV92b3RpbmcgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtWb3RlSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBGQVFEZWxldGUoKQoKRGVsZXRlIGFuIGFydGljbGUuCgogICAgbXkgJERlbGV0ZVN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgSXRlbUlEID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEyMywKICAgICk7CgpSZXR1cm5zOgoKICAgICREZWxldGVTdWNjZXNzID0gMTsgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgYXJ0aWNsZSBjb3VsZCBub3QgYmUgZGVsZXRlZAoKPWN1dAoKc3ViIEZBUURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSBhdHRhY2htZW50cwogICAgbXkgQEluZGV4ID0gJFNlbGYtPkF0dGFjaG1lbnRJbmRleCgKICAgICAgICBJdGVtSUQgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKICAgIGZvciBteSAkRmlsZUlEIChASW5kZXgpIHsKICAgICAgICBteSAkRGVsZXRlU3VjY2VzcyA9ICRTZWxmLT5BdHRhY2htZW50RGVsZXRlKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEZpbGVJRCA9PiAkRmlsZUlELT57RmlsZUlEfSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuIGlmICEkRGVsZXRlU3VjY2VzczsKICAgIH0KCiAgICAjIGRlbGV0ZSB2b3RlcwogICAgbXkgJFZvdGVJRHNSZWYgPSAkU2VsZi0+Vm90ZVNlYXJjaCgKICAgICAgICBJdGVtSUQgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKICAgIGZvciBteSAkVm90ZUlEICggQHskVm90ZUlEc1JlZn0gKSB7CiAgICAgICAgbXkgJERlbGV0ZVN1Y2Nlc3MgPSAkU2VsZi0+Vm90ZURlbGV0ZSgKICAgICAgICAgICAgVm90ZUlEID0+ICRWb3RlSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgICAgIHJldHVybiBpZiAhJERlbGV0ZVN1Y2Nlc3M7CiAgICB9CgogICAgIyBkZWxldGUgYWxsIGZhcSBsaW5rcyBvZiB0aGlzIGZhcSBhcnRpY2xlCiAgICAkU2VsZi0+e0xpbmtPYmplY3R9LT5MaW5rRGVsZXRlQWxsKAogICAgICAgIE9iamVjdCA9PiAnRkFRJywKICAgICAgICBLZXkgICAgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGRlbGV0ZSBoaXN0b3J5CiAgICByZXR1cm4gaWYgISRTZWxmLT5GQVFIaXN0b3J5RGVsZXRlKAogICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZGVsZXRlIGFydGljbGUKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGZhcV9pdGVtIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17SXRlbUlEfSBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgJFNlbGYtPl9EZWxldGVGcm9tRkFRQ2FjaGUoJVBhcmFtKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gRkFRSGlzdG9yeUFkZCgpCgphZGQgYW4gaGlzdG9yeSB0byBhbiBhcnRpY2xlCgogICAgbXkgJEFkZFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFIaXN0b3J5QWRkKAogICAgICAgIEl0ZW1JRCA9PiAxLAogICAgICAgIE5hbWUgICA9PiAnVXBkYXRlZCBBcnRpY2xlLicsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQWRkU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBhcnRpY2xlIGhpc3RvcnkgY291bGQgbm90IGJlIGFkZGVkCgo9Y3V0CgpzdWIgRkFRSGlzdG9yeUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgTmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gZmFxX2hpc3RvcnkgKG5hbWUsIGl0ZW1faWQsICcgLgogICAgICAgICAgICAnIGNyZWF0ZWQsIGNyZWF0ZWRfYnksIGNoYW5nZWQsIGNoYW5nZWRfYnkpJyAuCiAgICAgICAgICAgICcgVkFMVUVTICggPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sIFwkUGFyYW17SXRlbUlEfSwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEZBUUhpc3RvcnlHZXQoKQoKZ2V0IGFuIGFycmF5IHdpdGggaGFzaHJlZiB3aXRoIHRoZSBoaXN0b3J5IG9mIGFuIGFydGljbGUKCiAgICBteSAkSGlzdG9yeURhdGFBcnJheVJlZiA9ICRGQVFPYmplY3QtPkZBUUhpc3RvcnlHZXQoCiAgICAgICAgSXRlbUlEID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkSGlzdG9yeURhdGFBcnJheVJlZiA9IFsKICAgICAgICB7CiAgICAgICAgICAgIENyZWF0ZWRCeSA9PiAxLAogICAgICAgICAgICBDcmVhdGVkICAgPT4gJzIwMTAtMTEtMDIgMDc6NDU6MTUnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ0NyZWF0ZWQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBDcmVhdGVkQnkgPT4gMSwKICAgICAgICAgICAgQ3JlYXRlZCAgID0+ICcyMDExLTA2LTE0IDEyOjUzOjU1JywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdVcGRhdGVkJywKICAgICAgICB9LAogICAgXTsKCj1jdXQKCnN1YiBGQVFIaXN0b3J5R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIG5hbWUsIGNyZWF0ZWQsIGNyZWF0ZWRfYnkgRlJPTSBmYXFfaGlzdG9yeSBXSEVSRSBpdGVtX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17SXRlbUlEfSBdLAogICAgKTsKCiAgICBteSBARGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJVJlY29yZCA9ICgKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIENyZWF0ZWQgICA9PiAkUm93WzFdLAogICAgICAgICAgICBDcmVhdGVkQnkgPT4gJFJvd1syXSwKICAgICAgICApOwogICAgICAgIHB1c2ggQERhdGEsIFwlUmVjb3JkOwogICAgfQoKICAgIHJldHVybiBcQERhdGE7Cn0KCj1pdGVtIEZBUUhpc3RvcnlEZWxldGUoKQoKZGVsZXRlIHRoZSBoaXN0b3J5IG9mIGFuIGFydGljbGUKCiAgICBteSAkRGVsZXRlU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUUhpc3RvcnlEZWxldGUoCiAgICAgICAgSXRlbUlEID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkRGVsZXRlRHVjY2VzcyA9IDE7ICAgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgaGlzdG9yeSBjb3VsZCBub3QgYmUgZGVsZXRlZAoKPWN1dAoKc3ViIEZBUUhpc3RvcnlEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gZmFxX2hpc3RvcnkgV0hFUkUgaXRlbV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0l0ZW1JRH0gXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEhpc3RvcnlHZXQoKQoKZ2V0IHRoZSBzeXN0ZW0gaGlzdG9yeQoKICAgIG15ICRIaXN0b3J5RGF0YUFycmF5UmVmID0gJEZBUU9iamVjdC0+SGlzdG9yeUdldCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRIaXN0b3J5RGF0YUFycmF5UmVmID0gWwogICAgICAgIHsKICAgICAgICAgICAgSXRlbUlEICAgID0+ICczMicsCiAgICAgICAgICAgIE51bWJlciAgICA9PiAnMTAwMDQnLAogICAgICAgICAgICBDYXRlZ29yeSAgPT4gJ015IENhdGVnb3J5JywKICAgICAgICAgICAgU3ViamVjdCAgID0+ICdOZXcgQXJ0aWNsZScsCiAgICAgICAgICAgIEFjdGlvbiAgICA9PiAnQ3JlYXRlZCcsCiAgICAgICAgICAgIENyZWF0ZWRCeSA9PiAnMScsCiAgICAgICAgICAgIENyZWF0ZWQgICA9PiAnMjAxMS0wMS0wNSAyMTo1Mzo1MCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEl0ZW1JRCAgICA9PiAnNCcsCiAgICAgICAgICAgIE51bWJlciAgICA9PiAnMTAwMDQnLAogICAgICAgICAgICBDYXRlZ29yeSAgPT4gJ015IENhdGVnb3J5JywKICAgICAgICAgICAgU3ViamVjdCAgID0+ICJOZXcgQXJ0aWNsZSIsCiAgICAgICAgICAgIEFjdGlvbiAgICA9PiAnVXBkYXRlZCcsCiAgICAgICAgICAgIENyZWF0ZWRCeSA9PiAnMScsCiAgICAgICAgICAgIENyZWF0ZWQgICA9PiAnMjAxMS0wMS0wNSAyMTo1NTozMicsCiAgICAgICAgfQogICAgXTsKCj1jdXQKCnN1YiBIaXN0b3J5R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGJ1aWxkIFNRTCBxdWVyeQogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaS5pZCwgaC5uYW1lLCBoLmNyZWF0ZWQsIGguY3JlYXRlZF9ieSwgYy5uYW1lLCBpLmZfc3ViamVjdCwgaS5mX251bWJlciAnCiAgICAgICAgLiAnRlJPTSBmYXFfaXRlbSBpLCBmYXFfc3RhdGUgcywgZmFxX2hpc3RvcnkgaCwgZmFxX2NhdGVnb3J5IGMgJwogICAgICAgIC4gJ1dIRVJFIHMuaWQgPSBpLnN0YXRlX2lkICcKICAgICAgICAuICdBTkQgaC5pdGVtX2lkID0gaS5pZCAnCiAgICAgICAgLiAnQU5EIGkuY2F0ZWdvcnlfaWQgPSBjLmlkICc7CgogICAgIyBhZGQgc3RhdGVzIGNvbmRpdGlvbgogICAgaWYgKCAkUGFyYW17U3RhdGVzfSAmJiByZWYgJFBhcmFte1N0YXRlc30gZXEgJ0FSUkFZJyAmJiBAeyAkUGFyYW17U3RhdGVzfSB9ICkgewogICAgICAgIG15ICRTdGF0ZXNTdHJpbmcgPSBqb2luICcsICcsIEB7ICRQYXJhbXtTdGF0ZXN9IH07CiAgICAgICAgJFNRTCAuPSAiQU5EIHMubmFtZSBJTiAoJFN0YXRlc1N0cmluZykgIjsKICAgIH0KCiAgICAjIGFkZCBvcmRlciBieSBjbGF1c2UKICAgICRTUUwgLj0gJ09SREVSIEJZIGguY3JlYXRlZCBERVNDJzsKCiAgICAjIGdldCB0aGUgZGF0YSBmcm9tIGRiCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgTGltaXQgPT4gMjAwLAogICAgKTsKCiAgICBteSBARGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJVJlY29yZCA9ICgKICAgICAgICAgICAgSXRlbUlEICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIEFjdGlvbiAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBDcmVhdGVkICAgPT4gJFJvd1syXSwKICAgICAgICAgICAgQ3JlYXRlZEJ5ID0+ICRSb3dbM10sCiAgICAgICAgICAgIENhdGVnb3J5ICA9PiAkUm93WzRdLAogICAgICAgICAgICBTdWJqZWN0ICAgPT4gJFJvd1s1XSwKICAgICAgICAgICAgTnVtYmVyICAgID0+ICRSb3dbNl0sCiAgICAgICAgKTsKICAgICAgICBwdXNoIEBEYXRhLCBcJVJlY29yZDsKICAgIH0KCiAgICByZXR1cm4gXEBEYXRhOwp9Cgo9aXRlbSBDYXRlZ29yeUxpc3QoKQoKZ2V0IHRoZSBjYXRlZ29yeSBsaXN0IGFzIGhhc2gKCiAgICBteSAkQ2F0ZWdvcnlIYXNoUmVmID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlMaXN0KAogICAgICAgIFZhbGlkICA9PiAxLCAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJENhdGVnb3J5SGFzaFJlZiA9IHsKICAgICAgICAwID0+IHsKICAgICAgICAgICAgMSA9PiAnTWlzYycsCiAgICAgICAgICAgIDIgPT4gJ015IENhdGVnb3J5JywKICAgICAgICB9LAogICAgICAgIDIgPT4gewogICAgICAgICAgICAzID0+ICdTdWIgQ2F0ZWdvcnkgQScsCiAgICAgICAgICAgIDQgPT4gJ1N1YiBDYXRlZ29yeSBCJywKICAgICAgICB9LAogICAgfTsKCj1jdXQKCnN1YiBDYXRlZ29yeUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQKICAgIG15ICRWYWxpZCA9IDA7CiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkVmFsaWQgPSAkUGFyYW17VmFsaWR9OwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIGlmICggJFNlbGYtPntDYWNoZX0tPntDYXRlZ29yeUxpc3R9LT57JFZhbGlkfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntDYXRlZ29yeUxpc3R9LT57JFZhbGlkfTsKICAgIH0KCiAgICAjIGJ1aWxkIHNxbAogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaWQsIHBhcmVudF9pZCwgbmFtZSBGUk9NIGZhcV9jYXRlZ29yeSc7CiAgICBpZiAoJFZhbGlkKSB7CgogICAgICAgICMgZ2V0IHRoZSB2YWxpZCBpZHMKICAgICAgICAkU1FMIC49ICcgV0hFUkUgdmFsaWRfaWQgSU4gKCcgLiBqb2luICcsICcsICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZElEc0dldCgpIC4gJyknOwogICAgfQoKICAgICMgcHJlcGFyZSBzcWwgc3RhdGVtZW50CiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKCBTUUwgPT4gJFNRTCApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREYXRheyAkUm93WzFdIH0tPnsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgIH0KCiAgICAjIGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlfS0+e0NhdGVnb3J5TGlzdH0tPnskVmFsaWR9ID0gXCVEYXRhOwoKICAgIHJldHVybiBcJURhdGE7Cn0KCj1pdGVtIENhdGVnb3J5U2VhcmNoKCkKCmdldCB0aGUgY2F0ZWdvcnkgc2VhcmNoIGFzIGFuIGFycmF5IHJlZgoKICAgIG15ICRDYXRlZ29yeUlEQXJyYXlSZWYgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeVNlYXJjaCgKICAgICAgICBOYW1lICAgICAgICA9PiAnVGVzdCcsCiAgICAgICAgUGFyZW50SUQgICAgPT4gMywKICAgICAgICBQYXJlbnRJRHMgICA9PiBbIDEsIDMsIDggXSwKICAgICAgICBDYXRlZ29yeUlEcyA9PiBbIDIsIDUsIDcgXSwKICAgICAgICBPcmRlckJ5ICAgICA9PiAnTmFtZScsCiAgICAgICAgU29ydEJ5ICAgICAgPT4gJ2Rvd24nLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQ2F0ZWdvcnlJREFycmF5UmVmID0gWwogICAgICAgIDIsCiAgICBdOwoKPWN1dAoKc3ViIENhdGVnb3J5U2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNxbAogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaWQnCiAgICAgICAgLiAnIEZST00gZmFxX2NhdGVnb3J5JwogICAgICAgIC4gJyBXSEVSRSB2YWxpZF9pZCBJTiAoJwogICAgICAgIC4gam9pbiAnLCAnLCAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRJRHNHZXQoKQogICAgICAgIC4gJyknOwogICAgbXkgJEV4dCA9ICcnOwoKICAgICMgc2VhcmNoIGZvciBuYW1lCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte05hbWV9ICkgewoKICAgICAgICAjIGRiIGxpa2UgcXVvdGUKICAgICAgICAkUGFyYW17TmFtZX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtOYW1lfSwgJ0xpa2UnICk7CgogICAgICAgICRFeHQgLj0gIiBBTkQgbmFtZSBMSUtFICclIiAuICRQYXJhbXtOYW1lfSAuICIlJyAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgcGFyZW50IGlkCiAgICBlbHNpZiAoIGRlZmluZWQgJFBhcmFte1BhcmVudElEfSApIHsKCiAgICAgICAgIyBkYiBpbnRlZ2VyIHF1b3RlCiAgICAgICAgJFBhcmFte1BhcmVudElEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1BhcmVudElEfSwgJ0ludGVnZXInICk7CgogICAgICAgICRFeHQgLj0gJyBBTkQgcGFyZW50X2lkID0gJyAuICRQYXJhbXtQYXJlbnRJRH07CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHBhcmVudCBpZHMKICAgIGVsc2lmICgKICAgICAgICBkZWZpbmVkICRQYXJhbXtQYXJlbnRJRHN9CiAgICAgICAgJiYgcmVmICRQYXJhbXtQYXJlbnRJRHN9IGVxICdBUlJBWScKICAgICAgICAmJiBAeyAkUGFyYW17UGFyZW50SURzfSB9CiAgICAgICAgKQogICAgewoKICAgICAgICAjIGludGVnZXIgcXVvdGUgdGhlIHBhcmVudCBpZHMKICAgICAgICBmb3IgbXkgJFBhcmVudElEICggQHsgJFBhcmFte1BhcmVudElEc30gfSApIHsKICAgICAgICAgICAgJFBhcmVudElEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyZW50SUQsICdJbnRlZ2VyJyApOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgc3RyaW5nCiAgICAgICAgbXkgJEluU3RyaW5nID0gam9pbiAnLCAnLCBAeyAkUGFyYW17UGFyZW50SURzfSB9OwoKICAgICAgICAkRXh0ID0gJyBBTkQgcGFyZW50X2lkIElOICgnIC4gJEluU3RyaW5nIC4gJyknOwogICAgfQoKICAgICMgc2VhcmNoIGZvciBjYXRlZ29yeSBpZHMKICAgIGVsc2lmICgKICAgICAgICBkZWZpbmVkICRQYXJhbXtDYXRlZ29yeUlEc30KICAgICAgICAmJiByZWYgJFBhcmFte0NhdGVnb3J5SURzfSBlcSAnQVJSQVknCiAgICAgICAgJiYgQHsgJFBhcmFte0NhdGVnb3J5SURzfSB9CiAgICAgICAgKQogICAgewoKICAgICAgICAjIGludGVnZXIgcXVvdGUgdGhlIGNhdGVnb3J5IGlkcwogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIEB7ICRQYXJhbXtDYXRlZ29yeUlEc30gfSApIHsKICAgICAgICAgICAgJENhdGVnb3J5SUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRDYXRlZ29yeUlELCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gJywgJywgQHsgJFBhcmFte0NhdGVnb3J5SURzfSB9OwoKICAgICAgICAkRXh0ID0gJyBBTkQgaWQgSU4gKCcgLiAkSW5TdHJpbmcgLiAnKSc7CiAgICB9CgogICAgIyBPUkRFUiBCWQogICAgaWYgKCAkUGFyYW17T3JkZXJCeX0gKSB7CiAgICAgICAgJEV4dCAuPSAiIE9SREVSIEJZIG5hbWUiOwoKICAgICAgICAjIHNldCB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyCiAgICAgICAgJFBhcmFte1NvcnRCeX0gfHw9ICd1cCc7CgogICAgICAgICMgU09SVAogICAgICAgIGlmICggJFBhcmFte1NvcnRCeX0gKSB7CiAgICAgICAgICAgIGlmICggJFBhcmFte1NvcnRCeX0gZXEgJ3VwJyApIHsKICAgICAgICAgICAgICAgICRFeHQgLj0gIiBBU0MiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFBhcmFte1NvcnRCeX0gZXEgJ2Rvd24nICkgewogICAgICAgICAgICAgICAgJEV4dCAuPSAiIERFU0MiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgU1FMIFNUQVRFTUVOVAogICAgJFNRTCAuPSAkRXh0OwoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBMaW1pdCA9PiA1MDAsCiAgICApOwoKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBMaXN0LCAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBcQExpc3Q7Cn0KCj1pdGVtIENhdGVnb3J5R2V0KCkKCmdldCBhIGNhdGVnb3J5IGFzIGhhc2gKCiAgICBteSAlQ2F0ZWdvcnkgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdldCgKICAgICAgICBDYXRlZ29yeUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJUNhdGVnb3J5ID0gKCwKICAgICAgICBDYXRlZ29yeUlEID0+IDIsCiAgICAgICAgUGFyZW50SUQgICA9PiAwLAogICAgICAgIE5hbWUgICAgICAgPT4gJ015IENhdGVnb3J5JywKICAgICAgICBDb21tZW50ICAgID0+ICdUaGlzIGlzIG15IGZpcnN0IGNhdGVnb3J5LicsCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDYXRlZ29yeUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggIWRlZmluZWQgJFBhcmFte0NhdGVnb3J5SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDYXRlZ29yeUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0NhdGVnb3J5R2V0OjonIC4gJFBhcmFte0NhdGVnb3J5SUR9OwogICAgbXkgJENhY2hlICAgID0gJFNlbGYtPntDYWNoZU9iamVjdH0tPkdldCgKICAgICAgICBUeXBlID0+ICdGQVEnLAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAleyRDYWNoZX0gaWYgJENhY2hlOwoKICAgICMgc3FsCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQsIHBhcmVudF9pZCwgbmFtZSwgY29tbWVudHMsIHZhbGlkX2lkIEZST00gZmFxX2NhdGVnb3J5IFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NhdGVnb3J5SUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICVEYXRhID0gKAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRSb3dbMF0sCiAgICAgICAgICAgIFBhcmVudElEICAgPT4gJFJvd1sxXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkUm93WzJdLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gJFJvd1s0XSwKICAgICAgICApOwogICAgfQoKICAgICMgY2FjaGUgcmVzdWx0CiAgICAkU2VsZi0+e0NhY2hlT2JqZWN0fS0+U2V0KAogICAgICAgIFR5cGUgID0+ICdGQVEnLAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJURhdGEsCiAgICAgICAgVFRMICAgPT4gNjAgKiA2MCAqIDI0ICogMiwKICAgICk7CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBDYXRlZ29yeVN1YkNhdGVnb3J5SURMaXN0KCkKCmdldCBhbGwgc3ViY2F0ZWdvcnkgaWRzIG9mIG9mIGEgY2F0ZWdvcnkKCiAgICBteSAkU3ViQ2F0ZWdvcnlJREFycmF5UmVmID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlTdWJDYXRlZ29yeUlETGlzdCgKICAgICAgICBQYXJlbnRJRCAgICAgPT4gMSwKICAgICAgICBNb2RlICAgICAgICAgPT4gJ1B1YmxpYycsICMgKEFnZW50LCBDdXN0b21lciwgUHVibGljKQogICAgICAgIEN1c3RvbWVyVXNlciA9PiAndHQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFN1YkNhdGVnb3J5SURBcnJheVJlZiA9IFsKICAgICAgICAzLAogICAgICAgIDQsCiAgICAgICAgNSwKICAgICAgICA2LAogICAgXTsKCj1jdXQKCnN1YiBDYXRlZ29yeVN1YkNhdGVnb3J5SURMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17UGFyZW50SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBQYXJlbnRJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRDYXRlZ29yaWVzID0ge307CgogICAgaWYgKCAkUGFyYW17TW9kZX0gJiYgJFBhcmFte01vZGV9IGVxICdBZ2VudCcgKSB7CgogICAgICAgICMgZ2V0IGFnZW50cyBjYXRlZ29yaWVzCiAgICAgICAgJENhdGVnb3JpZXMgPSAkU2VsZi0+R2V0VXNlckNhdGVnb3JpZXMoCiAgICAgICAgICAgIFR5cGUgICA9PiAncm8nLAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte01vZGV9ICYmICRQYXJhbXtNb2RlfSBlcSAnQ3VzdG9tZXInICkgewoKICAgICAgICAjIGdldCBjdXN0b21lciBjYXRlZ29yaWVzCiAgICAgICAgJENhdGVnb3JpZXMgPSAkU2VsZi0+R2V0Q3VzdG9tZXJDYXRlZ29yaWVzKAogICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ3JvJywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRQYXJhbXtDdXN0b21lclVzZXJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGdldCBhbGwgY2F0ZWdvcmllcwogICAgICAgICRDYXRlZ29yaWVzID0gJFNlbGYtPkNhdGVnb3J5TGlzdCgKICAgICAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgIG15IEBTdWJDYXRlZ29yeUlEczsKICAgIG15IEBUZW1wU3ViQ2F0ZWdvcnlJRHMgPSBrZXlzICV7ICRDYXRlZ29yaWVzLT57ICRQYXJhbXtQYXJlbnRJRH0gfSB9OwogICAgU1VCQ0FURUdPUllJRDoKICAgIHdoaWxlIChAVGVtcFN1YkNhdGVnb3J5SURzKSB7CgogICAgICAgICMgZ2V0IG5leHQgc3ViY2F0ZWdvcnkgaWQKICAgICAgICBteSAkU3ViQ2F0ZWdvcnlJRCA9IHNoaWZ0IEBUZW1wU3ViQ2F0ZWdvcnlJRHM7CgogICAgICAgICMgYWRkIHRvIHJlc3VsdAogICAgICAgIHB1c2ggQFN1YkNhdGVnb3J5SURzLCAkU3ViQ2F0ZWdvcnlJRDsKCiAgICAgICAgIyBjaGVjayBpZiBzdWJjYXRlZ29yeSBoYXMgb3duIHN1YmNhdGVnb3JpZXMKICAgICAgICBuZXh0IFNVQkNBVEVHT1JZSUQgaWYgISRDYXRlZ29yaWVzLT57JFN1YkNhdGVnb3J5SUR9OwoKICAgICAgICAjIGFkZCBuZXcgc3ViY2F0ZWdvcmllcwogICAgICAgIHB1c2ggQFRlbXBTdWJDYXRlZ29yeUlEcywga2V5cyAleyAkQ2F0ZWdvcmllcy0+eyRTdWJDYXRlZ29yeUlEfSB9OwogICAgfQoKICAgICMgc29ydCBzdWJjYXRlZ29yaWVzIG51bWVyaWNhbGx5CiAgICBAU3ViQ2F0ZWdvcnlJRHMgPSBzb3J0IHsgJGEgPD0+ICRiIH0gQFN1YkNhdGVnb3J5SURzOwoKICAgIHJldHVybiBcQFN1YkNhdGVnb3J5SURzOwp9Cgo9aXRlbSBDYXRlZ29yeUFkZCgpCgphZGQgYSBjYXRlZ29yeQoKICAgIG15ICRDYXRlZ29yeUlEID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICAgICAgTmFtZSAgICAgPT4gJ0NhdGVnb3J5QScsCiAgICAgICAgQ29tbWVudCAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICAgICAgUGFyZW50SUQgPT4gMiwKICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQ2F0ZWdvcnlJRCA9IDM0OyAgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgY2F0ZWdvcnkgY291bGQgbm90IGJlIGFkZGVkCgo9Y3V0CgpzdWIgQ2F0ZWdvcnlBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtQYXJlbnRJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFBhcmVudElEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB0aGF0IFBhcmVudElEIGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcgYnV0IG51bWJlciAwIGlzIGFsbG93ZWQKICAgIGlmICggJFBhcmFte1BhcmVudElEfSBlcSAnJyApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlBhcmVudElEIGNhbm5vdCBiZSBlbXB0eSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaW5zZXJ0IHJlY29yZAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBmYXFfY2F0ZWdvcnkgJwogICAgICAgICAgICAuICcobmFtZSwgcGFyZW50X2lkLCBjb21tZW50cywgdmFsaWRfaWQsIGNyZWF0ZWQsIGNyZWF0ZWRfYnksIGNoYW5nZWQsIGNoYW5nZWRfYnkpICcKICAgICAgICAgICAgLiAnVkFMVUVTICggPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sIFwkUGFyYW17UGFyZW50SUR9LCBcJFBhcmFte0NvbW1lbnR9LCBcJFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGdldCBuZXcgY2F0ZWdvcnkgaWQKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGZhcV9jYXRlZ29yeSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJENhdGVnb3J5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDYXRlZ29yeUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIGxvZyBub3RpY2UKICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgIE1lc3NhZ2UgID0+ICJGQVFDYXRlZ29yeTogJyRQYXJhbXtOYW1lfScgQ2F0ZWdvcnlJRDogJyRDYXRlZ29yeUlEJyAiCiAgICAgICAgICAgIC4gImNyZWF0ZWQgc3VjY2Vzc2Z1bGx5ICgkUGFyYW17VXNlcklEfSkhIiwKICAgICk7CgogICAgcmV0dXJuICRDYXRlZ29yeUlEOwp9Cgo9aXRlbSBDYXRlZ29yeVVwZGF0ZSgpCgp1cGRhdGUgYSBjYXRlZ29yeQoKICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlVcGRhdGUoCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAyLAogICAgICAgIFBhcmVudElEICAgPT4gMSwKICAgICAgICBOYW1lICAgICAgID0+ICdTb21lIENhdGVnb3J5JywKICAgICAgICBDb21tZW50ICAgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRTdWNjZXNzID0gMTsgICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBjYXRlZ29yeSBjb3VsZCBub3QgYmUgdXBkYXRlZAoKPWN1dAoKc3ViIENhdGVnb3J5VXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2F0ZWdvcnlJRCBQYXJlbnRJRCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHRoYXQgUGFyZW50SUQgaXMgbm90IGFuIGVtcHR5IHN0cmluZyBidXQgbnVtYmVyIDAgaXMgYWxsb3dlZAogICAgaWYgKCAkUGFyYW17UGFyZW50SUR9IGVxICcnICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiUGFyZW50SUQgY2Fubm90IGJlIGVtcHR5ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzcWwKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnVVBEQVRFIGZhcV9jYXRlZ29yeSBTRVQgJwogICAgICAgICAgICAuICdwYXJlbnRfaWQgPSA/LCBuYW1lID0gPywgJwogICAgICAgICAgICAuICdjb21tZW50cyA9ID8sIHZhbGlkX2lkID0gPywgY2hhbmdlZCA9IGN1cnJlbnRfdGltZXN0YW1wLCAnCiAgICAgICAgICAgIC4gJ2NoYW5nZWRfYnkgPSA/IFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17UGFyZW50SUR9LCBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte0NvbW1lbnR9LCAgXCRQYXJhbXtWYWxpZElEfSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCAgIFwkUGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBsb2cgbm90aWNlCiAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICBNZXNzYWdlICA9PiAiRkFRQ2F0ZWdvcnk6ICckUGFyYW17TmFtZX0nICIKICAgICAgICAgICAgLiAiSUQ6ICckUGFyYW17Q2F0ZWdvcnlJRH0nIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5ICgkUGFyYW17VXNlcklEfSkhIiwKICAgICk7CgogICAgIyBkZWxldGUgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdDYXRlZ29yeUdldDo6JyAuICRQYXJhbXtDYXRlZ29yeUlEfTsKICAgICRTZWxmLT57Q2FjaGVPYmplY3R9LT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAnRkFRJywKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENhdGVnb3J5RHVwbGljYXRlQ2hlY2soKQoKY2hlY2sgYSBjYXRlZ29yeSBmb3IgZHVwbGljYXRlIG5hbWUgdW5kZXIgdGhlIHNhbWUgcGFyZW50CgogICAgbXkgJEV4aXN0cyA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RHVwbGljYXRlQ2hlY2soCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAxLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1NvbWUgTmFtZScsCiAgICAgICAgUGFyZW50SUQgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRFeGlzdHMgPSAxOyAgICAgICAgICAgICAgICAjIGlmIGNhdGVnb3J5IG5hbWUgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGUgc2FtZSBwYXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAgaWYgdGhlIG5hbWUgZG9lcyBub3QgZXhpc3RzIHdpdGggdGhlIHNhbWUgcGFyZW50Cgo9Y3V0CgpzdWIgQ2F0ZWdvcnlEdXBsaWNhdGVDaGVjayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdHMKICAgICRQYXJhbXtDYXRlZ29yeUlEfSB8fD0gMDsKICAgICRQYXJhbXtQYXJlbnRJRH0gICB8fD0gMDsKCiAgICAjIGRiIHF1b3RlCiAgICAkUGFyYW17TmFtZX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtOYW1lfSApIHx8ICcnOwogICAgJFBhcmFte0NhdGVnb3J5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17Q2F0ZWdvcnlJRH0sICdJbnRlZ2VyJyApOwogICAgJFBhcmFte1BhcmVudElEfSAgID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UGFyZW50SUR9LCAgICdJbnRlZ2VyJyApOwoKICAgICMgYnVpbGQgc3FsCiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCBGUk9NIGZhcV9jYXRlZ29yeSBXSEVSRSAnOwogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkU1FMIC49ICJuYW1lID0gJyRQYXJhbXtOYW1lfScgQU5EIHBhcmVudF9pZCA9ICRQYXJhbXtQYXJlbnRJRH0gIjsKICAgICAgICBpZiAoIGRlZmluZWQgJFBhcmFte0NhdGVnb3J5SUR9ICkgewogICAgICAgICAgICAkU1FMIC49ICJBTkQgaWQgIT0gJFBhcmFte0NhdGVnb3J5SUR9IjsKICAgICAgICB9CiAgICB9CgogICAgIyBwcmVwYXJlIHNxbCBzdGF0ZW1lbnQKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRFeGlzdHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRFeGlzdHMgPSAxOwogICAgfQoKICAgIHJldHVybiAkRXhpc3RzOwp9Cgo9aXRlbSBDYXRlZ29yeUNvdW50KCkKCkNvdW50IHRoZSBudW1iZXIgb2YgY2F0ZWdvcmllcy4KCiAgICBteSAkQ2F0ZWdvcnlDb3VudCA9ICRGQVFPYmplY3QtPkNhdGVnb3J5Q291bnQoCiAgICAgICAgUGFyZW50SURzID0+IFsgMSwgMiwgMywgNCBdLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJENhdGVnb3J5Q291bnQgPSA2OwoKPWN1dAoKc3ViIENhdGVnb3J5Q291bnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtQYXJlbnRJRHN9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBQYXJlbnRJRHMhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGJ1aWxkIFNRTAogICAgbXkgJFNRTCA9ICdTRUxFQ1QgQ09VTlQoKiknCiAgICAgICAgLiAnIEZST00gZmFxX2NhdGVnb3J5JwogICAgICAgIC4gJyBXSEVSRSB2YWxpZF9pZCBJTiAoJwogICAgICAgIC4gam9pbiAnLCAnLCAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRJRHNHZXQoKQogICAgICAgIC4gJyknOwoKICAgICMgcGFyZW50IGlkcyBhcmUgZ2l2ZW4KICAgIGlmICggZGVmaW5lZCAkUGFyYW17UGFyZW50SURzfSApIHsKCiAgICAgICAgIyBpbnRlZ2VyIHF1b3RlIHRoZSBwYXJlbnQgaWRzCiAgICAgICAgZm9yIG15ICRQYXJlbnRJRCAoIEB7ICRQYXJhbXtQYXJlbnRJRHN9IH0gKSB7CiAgICAgICAgICAgICRQYXJlbnRJRCA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmVudElELCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gJywgJywgQHsgJFBhcmFte1BhcmVudElEc30gfTsKCiAgICAgICAgJFNRTCAuPSAnIEFORCBwYXJlbnRfaWQgSU4gKCcgLiAkSW5TdHJpbmcgLiAnKSc7CiAgICB9CgogICAgIyBhZGQgZ3JvdXAgYnkKICAgICRTUUwgLj0gJyBHUk9VUCBCWSBwYXJlbnRfaWQnOwoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBMaW1pdCA9PiAyMDAsCiAgICApOwoKICAgIG15ICRDb3VudCA9IDA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb3VudCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRDb3VudDsKfQoKPWl0ZW0gQ2F0ZWdvcnlUcmVlTGlzdCgpCgpnZXQgYWxsIGNhdGVnb3JpZXMgYXMgdHJlZSAod2l0aCB0aGVpciBsb25nIG5hbWVzKQoKICAgIG15ICRDYXRlZ29yeVRyZWUgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLCAgIyAoMHwxLCBvcHRpb25hbCkKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRDYXRlZ29yeVRyZWUgPSB7CiAgICAgICAgMSA9PiAnTWlzYycsCiAgICAgICAgMiA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgIDMgPT4gJ015IENhdGVnb3J5OjpTdWIgQ2F0ZWdvcnkgQScsCiAgICAgICAgNCA9PiAnTXkgQ2F0ZWdvcnk6OlN1YiBDYXRlZ29yeSBCJywKICAgIH07Cgo9Y3V0CgpzdWIgQ2F0ZWdvcnlUcmVlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdAogICAgbXkgJFZhbGlkID0gMDsKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkVmFsaWQgPSAkUGFyYW17VmFsaWR9OwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIGlmICggJFNlbGYtPntDYWNoZX0tPntHZXRDYXRlZ29yeVRyZWV9LT57JFZhbGlkfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntHZXRDYXRlZ29yeVRyZWV9LT57JFZhbGlkfTsKICAgIH0KCiAgICAjIGJ1aWxkIHNxbAogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaWQsIHBhcmVudF9pZCwgbmFtZSBGUk9NIGZhcV9jYXRlZ29yeSc7CgogICAgIyBhZGQgd2hlcmUgY2xhdXNlIGZvciB2YWxpZCBjYXRlZ29yaWVzCiAgICBpZiAoJFZhbGlkKSB7CiAgICAgICAgJFNRTCAuPSAnIFdIRVJFIHZhbGlkX2lkIElOICgnIC4gam9pbiAnLCAnLCAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRJRHNHZXQoKSAuICcpJzsKICAgIH0KCiAgICAjIHByZXBhcmUgc3FsCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAkU1FMLAogICAgKTsKCiAgICAjIGZldGNoIHJlc3VsdAogICAgbXkgJUNhdGVnb3J5TWFwOwogICAgbXkgJUNhdGVnb3J5TmFtZUxvb2t1cDsKICAgIG15ICVQYXJlbnRJRExvb2t1cDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENhdGVnb3J5TWFweyAkUm93WzFdIH0tPnsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgICAgICAkQ2F0ZWdvcnlOYW1lTG9va3VweyAkUm93WzBdIH0gICAgICAgPSAkUm93WzJdOwogICAgICAgICRQYXJlbnRJRExvb2t1cHsgJFJvd1swXSB9ICAgICAgICAgICA9ICRSb3dbMV07CiAgICB9CgogICAgIyB0byBzdG9yZSB0aGUgY2F0ZWdvcnkgdHJlZQogICAgbXkgJUNhdGVnb3J5VHJlZTsKCiAgICAjIGNoZWNrIGFsbCBwYXJlbnQgaWRzCiAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJUNhdGVnb3J5TWFwICkgewoKICAgICAgICAjIGdldCBzdWJjYXRlZ29yaWVzIGFuZCBuYW1lcyBmb3IgdGhpcyBwYXJlbnQgaWQKICAgICAgICB3aGlsZSAoIG15ICggJENhdGVnb3J5SUQsICRDYXRlZ29yeU5hbWUgKSA9IGVhY2ggJXsgJENhdGVnb3J5TWFweyRQYXJlbnRJRH0gfSApIHsKCiAgICAgICAgICAgICMgbG9va3VwIHRoZSBwYXJlbnRzIG5hbWUKICAgICAgICAgICAgbXkgJE5ld1BhcmVudElEID0gJFBhcmVudElEOwogICAgICAgICAgICB3aGlsZSAoJE5ld1BhcmVudElEKSB7CgogICAgICAgICAgICAgICAgIyBwcmVhcGVuZCBwYXJlbnRzIGNhdGVnb3J5IG5hbWUKICAgICAgICAgICAgICAgIGlmICggJENhdGVnb3J5TmFtZUxvb2t1cHskTmV3UGFyZW50SUR9ICkgewogICAgICAgICAgICAgICAgICAgICRDYXRlZ29yeU5hbWUgPSAkQ2F0ZWdvcnlOYW1lTG9va3VweyROZXdQYXJlbnRJRH0gLiAnOjonIC4gJENhdGVnb3J5TmFtZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCB1cCBvbmUgcGFyZW50IGxldmVsCiAgICAgICAgICAgICAgICAkTmV3UGFyZW50SUQgPSAkUGFyZW50SURMb29rdXB7JE5ld1BhcmVudElEfSB8fCAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBjYXRlZ29yeSB0byB0cmVlCiAgICAgICAgICAgICRDYXRlZ29yeVRyZWV7JENhdGVnb3J5SUR9ID0gJENhdGVnb3J5TmFtZTsKICAgICAgICB9CiAgICB9CgogICAgIyBjYWNoZQogICAgJFNlbGYtPntDYWNoZX0tPntHZXRDYXRlZ29yeVRyZWV9LT57JFZhbGlkfSA9IFwlQ2F0ZWdvcnlUcmVlOwoKICAgIHJldHVybiBcJUNhdGVnb3J5VHJlZTsKfQoKPWl0ZW0gQ2F0ZWdvcnlHcm91cEdldCgpCgpnZXQgZ3JvdXBzIG9mIGEgY2F0ZWdvcnkKCiAgICBteSAkR3JvdXBBcnJheVJlZiA9ICRGQVFPYmplY3QtPkNhdGVnb3J5R3JvdXBHZXQoCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRHcm91cEFycmF5UmVmID0gWwogICAgICAgIDIsCiAgICAgICAgOSwKICAgICAgICAxMCwKICAgIF07Cgo9Y3V0CgpzdWIgQ2F0ZWdvcnlHcm91cEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDYXRlZ29yeUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZ3JvdXBzCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBncm91cF9pZCBGUk9NIGZhcV9jYXRlZ29yeV9ncm91cCBXSEVSRSBjYXRlZ29yeV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NhdGVnb3J5SUR9IF0sCiAgICApOwoKICAgIG15IEBHcm91cHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQEdyb3VwcywgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBHcm91cHM7Cn0KCj1pdGVtIENhdGVnb3J5R3JvdXBHZXRBbGwoKQoKZ2V0IGFsbCBjYXRlZ29yeS1ncm91cHMKCiAgICBteSAkQWxsQ2F0ZWdvcnlHcm91cEhhc2hSZWYgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdyb3VwR2V0QWxsKAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJEFsbENhdGVnb3J5R3JvdXBIYXNoUmVmID0gewogICAgICAgIDEgPT4gewogICAgICAgICAgICAyICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgMiA9PiB7CiAgICAgICAgICAgIDIgID0+IDEsCiAgICAgICAgICAgIDkgID0+IDEsCiAgICAgICAgICAgIDEwID0+IDEsCiAgICAgICAgfSwKICAgICAgICAzID0+IHsKICAgICAgICAgICAgMiAgPT4gMSwKICAgICAgICAgICAgOSAgPT4gMSwKICAgICAgICAgICAgMTAgPT4gMSwKICAgICAgICB9LAogICAgICAgIDQgPT4gewogICAgICAgICAgICAxICA9PiAxLAogICAgICAgICAgICAyICA9PiAxLAogICAgICAgICAgICAzICA9PiAxLAogICAgICAgICAgICA0ICA9PiAxLAogICAgICAgICAgICA1ICA9PiAxLAogICAgICAgICAgICA5ICA9PiAxLAogICAgICAgICAgICAxMCA9PiAxLAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIENhdGVnb3J5R3JvdXBHZXRBbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIGlmICggJFNlbGYtPntDYWNoZX0tPntDYXRlZ29yeUdyb3VwR2V0QWxsfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntDYXRlZ29yeUdyb3VwR2V0QWxsfTsKICAgIH0KCiAgICAjIGdldCBncm91cHMKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgZ3JvdXBfaWQsIGNhdGVnb3J5X2lkIEZST00gZmFxX2NhdGVnb3J5X2dyb3VwJywKICAgICk7CgogICAgbXkgJUdyb3VwczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEdyb3Vwc3sgJFJvd1sxXSB9LT57ICRSb3dbMF0gfSA9IDE7CiAgICB9CgogICAgIyBjYWNoZQogICAgJFNlbGYtPntDYWNoZX0tPntDYXRlZ29yeUdyb3VwR2V0QWxsfSA9IFwlR3JvdXBzOwoKICAgIHJldHVybiBcJUdyb3VwczsKfQoKPWl0ZW0gQ2F0ZWdvcnlEZWxldGUoKQoKRGVsZXRlIGEgY2F0ZWdvcnkuCgogICAgbXkgJERlbGV0ZVN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeURlbGV0ZSgKICAgICAgICBDYXRlZ29yeUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgRGVsZXRlU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAjIG9yIHVuZGVmIGlmIGNhdGVnb3J5IGNvdWxkIG5vdCBiZSBkZWxldGVkCgo9Y3V0CgpzdWIgQ2F0ZWdvcnlEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KENhdGVnb3J5SUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIHRoZSBjYXRlZ29yeQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gZmFxX2NhdGVnb3J5IFdIRVJFIGlkID0gPyAnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NhdGVnb3J5SUR9IF0sCiAgICApOwoKICAgICMgZGVsZXRlIHRoZSBjYXRlZ29yeSBncm91cHMKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGZhcV9jYXRlZ29yeV9ncm91cCBXSEVSRSBjYXRlZ29yeV9pZCA9ID8gJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDYXRlZ29yeUlEfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gS2V5d29yZExpc3QoKQoKZ2V0IGEgbGlzdCBvZiBrZXl3b3JkcyBhcyBhIGhhc2gsIHdpdGggdGhlaXIgY291bnQgYXMgdGhlIHZhbHVlOgoKICAgIG15ICVLZXl3b3JkcyA9ICRGQVFPYmplY3QtPktleXdvcmRMaXN0KAogICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJUtleXdvcmRzID0gKAogICAgICAgICAgJ21hY29zeCcgICA9PiA4LAogICAgICAgICAgJ3VidW50dScgICA9PiAxLAogICAgICAgICAgJ291dGxvb2snICA9PiAyLAogICAgICAgICAgJ3dpbmRvd3MnICA9PiAzLAogICAgICAgICAgJ2V4Y2hhbmdlJyA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBLZXl3b3JkTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdAogICAgbXkgJFZhbGlkID0gMDsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRWYWxpZCA9ICRQYXJhbXtWYWxpZH07CiAgICB9CgogICAgIyBnZXQga2V5d29yZHMgZnJvbSBkYgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBmX2tleXdvcmRzIEZST00gZmFxX2l0ZW0nLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIG15ICRLZXl3b3JkTGlzdCA9IGxjICRSb3dbMF07CgogICAgICAgIGZvciBteSAkS2V5d29yZCAoIHNwbGl0IC8sLywgJEtleXdvcmRMaXN0ICkgewoKICAgICAgICAgICAgIyByZW1vdmUgbGVhZGluZy90YWlsaW5nIHNwYWNlcwogICAgICAgICAgICAkS2V5d29yZCA9fiBzeyBcQSBccysgfXt9eG1zZzsKICAgICAgICAgICAgJEtleXdvcmQgPX4gc3sgXHMrIFx6IH17fXhtc2c7CgogICAgICAgICAgICAjIGluY3JlYXNlIGtleXdvcmQgY291bnRlcgogICAgICAgICAgICAkRGF0YXskS2V5d29yZH0rKzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBTdGF0ZVR5cGVMaXN0KCkKCmdldCB0aGUgc3RhdGUgdHlwZSBsaXN0IGFzIGhhc2hyZWYKCiAgICBteSAkU3RhdGVUeXBlSGFzaFJlZiA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3RhdGVUeXBlSGFzaFJlZiA9IHsKICAgICAgICAxID0+ICdpbnRlcm5hbCcsCiAgICAgICAgMyA9PiAncHVibGljJywKICAgICAgICAyID0+ICdleHRlcm5hbCcsCiAgICB9OwoKPWN1dAoKc3ViIFN0YXRlVHlwZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYnVpbGQgU1FMCiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCwgbmFtZSBGUk9NIGZhcV9zdGF0ZV90eXBlJzsKCiAgICAjIHR5cGVzIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17VHlwZXN9ICkgewoKICAgICAgICAjIGNvcHkgJFBhcmFte1R5cGVzfSB0byBhIGxvY2FsIHZhbHVlIHNpbmNlIGl0IHdpbGwgYmUgY2hhbmdlZCwgaWYgdGhlIHJlZmVyZW5jZSB2YWx1ZSBpcwogICAgICAgICMgY2hhbmdlZCBpdCB3aWxsIGJyaW5nIHNpZGUgZWZmZWN0cwogICAgICAgIG15IEBUeXBlcyA9IEB7ICRQYXJhbXtUeXBlc30gfTsKCiAgICAgICAgIyBxdW90ZSB0aGUgdHlwZXMgYW5kIGFkZCBzaW5nbGUgcXVvdGVzIGFyb3VuZCB0aGVtCiAgICAgICAgZm9yIG15ICRUeXBlIChAVHlwZXMpIHsKICAgICAgICAgICAgJFR5cGUgPSAiJyIgLiAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFR5cGUpIC4gIiciOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgc3RyaW5nCiAgICAgICAgbXkgJEluU3RyaW5nID0gam9pbiAnLCAnLCBAVHlwZXM7CiAgICAgICAgJFNRTCAuPSAnIFdIRVJFIG5hbWUgSU4gKCcgLiAkSW5TdHJpbmcgLiAnKSc7CiAgICB9CgogICAgIyBwcmVwYXJlIFNRTAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSggU1FMID0+ICRTUUwgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkTGlzdHsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gXCVMaXN0Owp9Cgo9aXRlbSBTdGF0ZUxpc3QoKQoKZ2V0IHRoZSBzdGF0ZSBsaXN0IGFzIGhhc2gKCiAgICBteSAlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJVN0YXRlcyA9ICgKICAgICAgICAxID0+ICdpbnRlcm5hbCAoYWdlbnQpJywKICAgICAgICAyID0+ICdleHRlcm5hbCAoY3VzdG9tZXIpJywKICAgICAgICAzID0+ICdwdWJsaWMgKGFsbCknLAogICAgKTsKCj1jdXQKCnN1YiBTdGF0ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc3FsCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKCBTUUwgPT4gJ1NFTEVDVCBpZCwgbmFtZSBGUk9NIGZhcV9zdGF0ZScgKTsKCiAgICBteSAlTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJExpc3R7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgcmV0dXJuICVMaXN0Owp9Cgo9aXRlbSBTdGF0ZVVwZGF0ZSgpCgp1cGRhdGUgYSBzdGF0ZQoKICAgIG15IFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5TdGF0ZVVwZGF0ZSgKICAgICAgICBTdGF0ZUlEID0+IDEsCiAgICAgICAgTmFtZSAgICA9PiAncHVibGljJywKICAgICAgICBUeXBlSUQgID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgc3RhdGUgY291bGQgbm90IGJlIHVwZGF0ZWQKCj1jdXQKCnN1YiBTdGF0ZVVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdGF0ZUlEIE5hbWUgVHlwZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzcWwKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCAgPT4gJ1VQREFURSBmYXFfc3RhdGUgU0VUIG5hbWUgPSA/LCB0eXBlX2lkID0gPywgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtUeXBlSUR9LCBcJFBhcmFte1N0YXRlSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBTdGF0ZUFkZCgpCgphZGQgYSBzdGF0ZQoKICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+U3RhdGVBZGQoCiAgICAgICAgTmFtZSAgID0+ICdwdWJsaWMnLAogICAgICAgIFR5cGVJRCA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgc3RhdGUgY291bGQgbm90IGJlIGFkZGVkCgo9Y3V0CgpzdWIgU3RhdGVBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBUeXBlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgID0+ICdJTlNFUlQgSU5UTyBmYXFfc3RhdGUgKG5hbWUsIHR5cGVfaWQpIFZBTFVFUyAoID8sID8gKScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17TmFtZX0sIFwkUGFyYW17VHlwZUlEfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gU3RhdGVHZXQoKQoKZ2V0IGEgc3RhdGUgYXMgaGFzaAoKICAgIG15ICVTdGF0ZSA9ICRGQVFPYmplY3QtPlN0YXRlR2V0KAogICAgICAgIFN0YXRlSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAlU3RhdGUgPSAoCiAgICAgICAgU3RhdGVJRCAgPT4gMSwKICAgICAgICBOYW1lICAgICA9PiAnaW50ZXJuYWwgKGFnZW50KScsCiAgICAgICAgVHlwZUlEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU3RhdGVHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3RhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc3FsCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQsIG5hbWUsIHR5cGVfaWQgRlJPTSBmYXFfc3RhdGUgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U3RhdGVJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJURhdGEgPSAoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gJFJvd1swXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBUeXBlSUQgID0+ICRSb3dbMl0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFN0YXRlVHlwZUdldCgpCgpnZXQgYSBzdGF0ZSBhcyBoYXNocmVmCgogICAgbXkgJFN0YXRlVHlwZUhhc2hSZWYgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgU3RhdGVJRCA9PiAxLCAjIG9yCiAgICAgICAgTmFtZSAgICA9PiAnaW50ZXJuYWwnLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRTdGF0ZVR5cGVIYXNoUmVmID0gewogICAgICAgICdTdGF0ZUlEJyA9PiAxLAogICAgICAgICdOYW1lJyAgICA9PiAnaW50ZXJuYWwnLAogICAgfTsKCj1jdXQKCnN1YiBTdGF0ZVR5cGVHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRTUUwgPSAnU0VMRUNUIGlkLCBuYW1lIEZST00gZmFxX3N0YXRlX3R5cGUgV0hFUkUgJzsKICAgIG15IEBCaW5kOwogICAgbXkgJENhY2hlS2V5ID0gJ1N0YXRlVHlwZUdldDo6JzsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17U3RhdGVJRH0gKSB7CiAgICAgICAgJFNRTCAuPSAnaWQgPSA/JzsKICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1N0YXRlSUR9OwogICAgICAgICRDYWNoZUtleSAuPSAnSUQ6OicgLiAkUGFyYW17U3RhdGVJRH07CiAgICB9CiAgICBlbHNpZiAoIGRlZmluZWQgJFBhcmFte05hbWV9ICkgewogICAgICAgICRTUUwgLj0gJ25hbWUgPSA/JzsKICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte05hbWV9OwogICAgICAgICRDYWNoZUtleSAuPSAnTmFtZTo6JyAuICRQYXJhbXtOYW1lfTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGUgPSAkU2VsZi0+e0NhY2hlT2JqZWN0fS0+R2V0KAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGU7CgogICAgIyBzcWwKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJURhdGEgPSAoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gJFJvd1swXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAkUm93WzFdLAogICAgICAgICk7CiAgICB9CgogICAgIyBjYWNoZSByZXN1bHQKICAgICRTZWxmLT57Q2FjaGVPYmplY3R9LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICAgICBUVEwgICA9PiA2MCAqIDYwICogMjQgKiAyLAogICAgKTsKCiAgICByZXR1cm4gXCVEYXRhOwp9Cgo9aXRlbSBMYW5ndWFnZUxpc3QoKQoKZ2V0IHRoZSBsYW5ndWFnZSBsaXN0IGFzIGhhc2gKCiAgICBteSAlTGFuZ3VhZ2VzID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJUxhbmd1YWdlcyA9ICgKICAgICAgICAxID0+ICdlbicsCiAgICAgICAgMiA9PiAnZGUnLAogICAgICAgIDMgPT4gJ2VzJywKICAgICk7Cgo9Y3V0CgpzdWIgTGFuZ3VhZ2VMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGJ1aWxkIHNxbAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgbmFtZSBGUk9NIGZhcV9sYW5ndWFnZScsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJUxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRMaXN0eyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgIHJldHVybiAlTGlzdDsKfQoKPWl0ZW0gTGFuZ3VhZ2VVcGRhdGUoKQoKdXBkYXRlIGEgbGFuZ3VhZ2UKCiAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlVXBkYXRlKAogICAgICAgIExhbmd1YWdlSUQgPT4gMSwKICAgICAgICBOYW1lICAgICAgID0+ICdkZScsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgbGFuZ3VhZ2UgY291bGQgbm90IGJlIHVwZGF0ZWQKCj1jdXQKCnN1YiBMYW5ndWFnZVVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhMYW5ndWFnZUlEIE5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIHNxbAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMICA9PiAnVVBEQVRFIGZhcV9sYW5ndWFnZSBTRVQgbmFtZSA9ID8gV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtMYW5ndWFnZUlEfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTGFuZ3VhZ2VEdXBsaWNhdGVDaGVjaygpCgpjaGVjayBhIGxhbmd1YWdlCgogICAgbXkgJEV4aXN0cyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlRHVwbGljYXRlQ2hlY2soCiAgICAgICAgTmFtZSAgICAgICA9PiAnU29tZSBOYW1lJywKICAgICAgICBMYW5ndWFnZUlEID0+IDEsICMgZm9yIHVwZGF0ZQogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRFeGlzdHMgPSAxOyAgICAgICAgICAgICAgICAjIGlmIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzLCBvciAwIGlmIGRvZXMgbm90IGV4aXN0Cgo9Y3V0CgpzdWIgTGFuZ3VhZ2VEdXBsaWNhdGVDaGVjayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkYiBxdW90ZQogICAgJFBhcmFte05hbWV9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17TmFtZX0gKSB8fCAnJzsKICAgICRQYXJhbXtMYW5ndWFnZUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0xhbmd1YWdlSUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGJ1aWxkIHNxbAogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaWQgRlJPTSBmYXFfbGFuZ3VhZ2UgV0hFUkUgJzsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJFNRTCAuPSAibmFtZSA9ICckUGFyYW17TmFtZX0nICI7CiAgICB9CiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0xhbmd1YWdlSUR9ICkgewogICAgICAgICRTUUwgLj0gIkFORCBpZCAhPSAnJFBhcmFte0xhbmd1YWdlSUR9JyAiOwogICAgfQoKICAgICMgcHJlcGFyZSBzcWwgc3RhdGVtZW50CiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkRXhpc3RzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRXhpc3RzID0gMTsKICAgIH0KCiAgICByZXR1cm4gJEV4aXN0czsKfQoKPWl0ZW0gTGFuZ3VhZ2VBZGQoKQoKYWRkIGEgbGFuZ3VhZ2UKCiAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlQWRkKAogICAgICAgIE5hbWUgICA9PiAnU29tZSBDYXRlZ29yeScsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBsYW5ndWFnZSBjb3VsZCBub3QgYmUgYWRkZWQKCj1jdXQKCnN1YiBMYW5ndWFnZUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMICA9PiAnSU5TRVJUIElOVE8gZmFxX2xhbmd1YWdlIChuYW1lKSBWQUxVRVMgKD8pJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTGFuZ3VhZ2VHZXQoKQoKZ2V0IGEgbGFuZ3VhZ2UgYXMgaGFzaAoKICAgIG15ICVMYW5ndWFnZSA9ICRGQVFPYmplY3QtPkxhbmd1YWdlR2V0KAogICAgICAgIExhbmd1YWdlSUQgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAlTGFuZ3VhZ2UgPSAoCiAgICAgICAgTGFuZ3VhZ2VJRCA9PiAnMScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnZW4nLAogICAgKTsKCj1jdXQKCnN1YiBMYW5ndWFnZUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhMYW5ndWFnZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzcWwKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCwgbmFtZSBGUk9NIGZhcV9sYW5ndWFnZSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtMYW5ndWFnZUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAlRGF0YSA9ICgKICAgICAgICAgICAgTGFuZ3VhZ2VJRCA9PiAkUm93WzBdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRSb3dbMV0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIExhbmd1YWdlTG9va3VwKCkKClRoaXMgbWV0aG9kIGRvZXMgYSBsb29rdXAgZm9yIGEgZmFxIGxhbmd1YWdlLgpJZiBhIGxhbmd1YWdlIGlkIGlzIGdpdmVuLCBpdCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZS4KSWYgdGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlIGlzIGdpdmVuLCB0aGUgbGFuZ3VhZ2UgaWQgaXMgcmV0dXJuZWQuCgogICAgbXkgJExhbmd1YWdlTmFtZSA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTG9va3VwKAogICAgICAgIExhbmd1YWdlSUQgPT4gMSwKICAgICk7CgogICAgbXkgJExhbmd1YWdlSUQgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUxvb2t1cCgKICAgICAgICBOYW1lID0+ICdlbicsCiAgICApOwoKUmV0dXJuczoKCiAgICAkTGFuZ3VhZ2VOYW1lID0gJ2VuJzsKCiAgICAkTGFuZ3VhZ2VJRCA9IDE7Cgo9Y3V0CgpzdWIgTGFuZ3VhZ2VMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGlmIGJvdGggcGFyYW1ldGVycyBhcmUgZ2l2ZW4KICAgIGlmICggJFBhcmFte0xhbmd1YWdlSUR9ICYmICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTGFuZ3VhZ2VJRCBvciBOYW1lIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGJvdGggcGFyYW1ldGVycyBhcmUgbm90IGdpdmVuCiAgICBpZiAoICEkUGFyYW17TGFuZ3VhZ2VJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTGFuZ3VhZ2VJRCBvciBOYW1lIC0gbm9uZSBpcyBnaXZlbiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgaWYgTGFuZ3VhZ2VJRCBpcyBhIG51bWJlcgogICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2VJRH0gJiYgJFBhcmFte0xhbmd1YWdlSUR9ICF+IG17IFxBIFxkKyBceiB9eG1zICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTGFuZ3VhZ2VJRCBtdXN0IGJlIGEgbnVtYmVyISAoTGFuZ3VhZ2VJRDogJFBhcmFte0xhbmd1YWdlSUR9KSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBwcmVwYXJlIFNRTCBzdGF0ZW1lbnRzCiAgICBpZiAoICRQYXJhbXtMYW5ndWFnZUlEfSApIHsKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIG5hbWUgRlJPTSBmYXFfbGFuZ3VhZ2UgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0xhbmd1YWdlSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte05hbWV9ICkgewogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBmYXFfbGFuZ3VhZ2UgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJExvb2t1cDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJExvb2t1cCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRMb29rdXA7Cn0KCj1pdGVtIExhbmd1YWdlRGVsZXRlKCkKCkRlbGV0ZSBhIGxhbmd1YWdlLgoKICAgIG15ICREZWxldGVTdWNjZXNzID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VEZWxldGUoCiAgICAgICAgTGFuZ3VhZ2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zCgogICAgJERlbGV0ZVN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAjIG9yIHVuZGVmIGlmIGxhbmd1YWdlIGNvdWxkIG5vdCBiZSBkZWxldGVkCgo9Y3V0CgpzdWIgTGFuZ3VhZ2VEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KExhbmd1YWdlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIHRoZSBsYW5ndWFnZQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gZmFxX2xhbmd1YWdlIFdIRVJFIGlkID0gPyAnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0xhbmd1YWdlSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBGQVFTZWFyY2goKQoKc2VhcmNoIGluIEZBUSBhcnRpY2xlcwoKICAgIG15IEBJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCgogICAgICAgIE51bWJlciAgICA9PiAnKjEzNConLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVGl0bGUgICAgID0+ICcqc29tZSB0aXRsZSonLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBpcyBzZWFyY2hpbmcgaW4gTnVtYmVyLCBUaXRsZSwgS2V5d29yZCBhbmQgRmllbGQxLTYKICAgICAgICBXaGF0ICAgICAgPT4gJypzb21lIHRleHQqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBLZXl3b3JkICAgPT4gJyp3ZWJzZXJ2ZXIqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFN0YXRlcyAgICA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgIDEgPT4gJ2ludGVybmFsJywKICAgICAgICAgICAgMiA9PiAnZXh0ZXJuYWwnLAogICAgICAgIH0sCiAgICAgICAgTGFuZ3VhZ2VJRHMgPT4gWyA0LCA1LCA2IF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDYXRlZ29yeUlEcyA9PiBbIDcsIDgsIDkgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbGlkSURzICAgID0+IFsgMSwgMiwgMyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIChkZWZhdWx0IDEpCgogICAgICAgIE9yZGVyQnkgPT4gWyAnRkFRSUQnLCAnVGl0bGUnIF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBbICdGQVFJRCcgXSwKICAgICAgICAjIChGQVFJRCwgTnVtYmVyLCBUaXRsZSwgTGFuZ3VhZ2UsIENhdGVnb3J5LCBWYWxpZCwgQ3JlYXRlZCwKICAgICAgICAjIENoYW5nZWQsIFN0YXRlLCBWb3RlcywgUmVzdWx0KQoKICAgICAgICAjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIE9yZGVyQnk6CiAgICAgICAgIyBUaGUgT3JkZXJCeURpcmVjdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGZvciBlYWNoIE9yZGVyQnkgYXR0cmlidXRlLgogICAgICAgICMgVGhlIHBhaXJpbmcgaXMgbWFkZSBieSB0aGUgYXJyYXkgaW5kZXhlcy4KCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbICdEb3duJywgJ1VwJyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGRlZmF1bHQ6IFsgJ0Rvd24nIF0KICAgICAgICAjIChEb3duIHwgVXApCgogICAgICAgIExpbWl0ICAgICA9PiAxNTAsCiAgICAgICAgSW50ZXJmYWNlID0+ICdwdWJsaWMnLCAgICAgICMgcHVibGljfGV4dGVybmFsfGludGVybmFsIChkZWZhdWx0IGludGVybmFsKQogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgQElEcyA9ICgKICAgICAgICAzMiwKICAgICAgICAxMywKICAgICAgICAxMiwKICAgICAgICA5LAogICAgICAgIDYsCiAgICAgICAgNSwKICAgICAgICA0LAogICAgICAgIDEsCiAgICApOwoKPWN1dAoKc3ViIEZBUVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2UKICAgIGlmICggISRQYXJhbXtJbnRlcmZhY2V9IHx8ICEkUGFyYW17SW50ZXJmYWNlfS0+e05hbWV9ICkgewogICAgICAgICRQYXJhbXtJbnRlcmZhY2V9LT57TmFtZX0gPSAnaW50ZXJuYWwnOwogICAgfQoKICAgICMgdmVyaWZ5IHRoYXQgYWxsIHBhc3NlZCBhcnJheSBwYXJhbWV0ZXJzIGNvbnRhaW4gYW4gYXJyYXlyZWYKICAgIEFSR1VNRU5UOgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT3JkZXJCeSBPcmRlckJ5RGlyZWN0aW9uKSkgewoKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gW107CgogICAgICAgICAgICBuZXh0IEFSR1VNRU5UOwogICAgICAgIH0KCiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVmaW5lIG9yZGVyIHRhYmxlCiAgICBteSAlT3JkZXJCeVRhYmxlID0gKAoKICAgICAgICAjIEZBUSBpdGVtIGF0dHJpYnV0ZXMKICAgICAgICBGQVFJRCAgICA9PiAnaS5pZCcsCiAgICAgICAgTnVtYmVyICAgPT4gJ2kuZl9udW1iZXInLAogICAgICAgIFRpdGxlICAgID0+ICdpLmZfc3ViamVjdCcsCiAgICAgICAgTGFuZ3VhZ2UgPT4gJ2kuZl9sYW5ndWFnZV9pZCcsCiAgICAgICAgQ2F0ZWdvcnkgPT4gJ2kuY2F0ZWdvcnlfaWQnLAogICAgICAgIFZhbGlkICAgID0+ICdpLnZhbGlkX2lkJywKICAgICAgICBDcmVhdGVkICA9PiAnaS5jcmVhdGVkJywKICAgICAgICBDaGFuZ2VkICA9PiAnaS5jaGFuZ2VkJywKCiAgICAgICAgIyBTdGF0ZSBhdHRyaWJ1dGVzCiAgICAgICAgU3RhdGUgPT4gJ3MubmFtZScsCgogICAgICAgICMgVm90ZSBhdHRyaWJ1dGVzCiAgICAgICAgVm90ZXMgID0+ICd2b3RlcycsCiAgICAgICAgUmVzdWx0ID0+ICd2cmF0ZScsCiAgICApOwoKICAgICMgY2hlY2sgaWYgT3JkZXJCeSBjb250YWlucyBvbmx5IHVuaXF1ZSB2YWxpZCB2YWx1ZXMKICAgIG15ICVPcmRlckJ5U2VlbjsKICAgIGZvciBteSAkT3JkZXJCeSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgewoKICAgICAgICBpZiAoICEkT3JkZXJCeSB8fCAhJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gfHwgJE9yZGVyQnlTZWVueyRPcmRlckJ5fSApIHsKCiAgICAgICAgICAgICMgZm91bmQgYW4gZXJyb3IKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9yZGVyQnkgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAnJE9yZGVyQnknICIKICAgICAgICAgICAgICAgICAgICAuICdvciB0aGUgdmFsdWUgaXMgdXNlZCBtb3JlIHRoYW4gb25jZSEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHJlbWVtYmVyIHRoZSB2YWx1ZSB0byBjaGVjayBpZiBpdCBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlCiAgICAgICAgJE9yZGVyQnlTZWVueyRPcmRlckJ5fSA9IDE7CgogICAgfQoKICAgICMgY2hlY2sgaWYgT3JkZXJCeURpcmVjdGlvbiBhcnJheSBjb250YWlucyBvbmx5ICdVcCcgb3IgJ0Rvd24nCiAgICBESVJFQ1RJT046CiAgICBmb3IgbXkgJERpcmVjdGlvbiAoIEB7ICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAjIG9ubHkgJ1VwJyBvciAnRG93bicgYWxsb3dlZAogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ1VwJzsKICAgICAgICBuZXh0IERJUkVDVElPTiBpZiAkRGlyZWN0aW9uIGVxICdEb3duJzsKCiAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeURpcmVjdGlvbiBjYW4gb25seSBjb250YWluICdVcCcgb3IgJ0Rvd24nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBhc3NlbWJsZSB0aGUgT1JERVIgQlkgY2xhdXNlCiAgICBteSBAU1FMT3JkZXJCeTsKICAgIG15ICRDb3VudCA9IDA7CiAgICBmb3IgbXkgJE9yZGVyQnkgKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApIHsKCiAgICAgICAgIyBzZXQgdGhlIGRlZmF1bHQgb3JkZXIgZGlyZWN0aW9uCiAgICAgICAgbXkgJERpcmVjdGlvbiA9ICdERVNDJzsKCiAgICAgICAgIyBhZGQgdGhlIGdpdmVuIG9yZGVyIGRpcmVjdGlvbgogICAgICAgIGlmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdVcCcgKSB7CiAgICAgICAgICAgICAgICAkRGlyZWN0aW9uID0gJ0FTQyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdEb3duJyApIHsKICAgICAgICAgICAgICAgICREaXJlY3Rpb24gPSAnREVTQyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIFNRTAogICAgICAgIHB1c2ggQFNRTE9yZGVyQnksICIkT3JkZXJCeVRhYmxleyRPcmRlckJ5fSAkRGlyZWN0aW9uIjsKICAgIH0KICAgIGNvbnRpbnVlIHsKICAgICAgICAkQ291bnQrKzsKICAgIH0KCiAgICAjIGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgb3JkZXJpbmcgaXMgbm90IGRldGVybWluZWQKICAgICMgd2UgYWRkIGFuIGRlc2NlbmRpbmcgb3JkZXJpbmcgYnkgaWQKICAgIGlmICggIWdyZXAgeyAkXyBlcSAnRkFRSUQnIH0gKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApICkgewogICAgICAgIHB1c2ggQFNRTE9yZGVyQnksICIkT3JkZXJCeVRhYmxle0ZBUUlEfSBERVNDIjsKICAgIH0KCiAgICAjIHNxbAogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaS5pZCwgY291bnQoIHYuaXRlbV9pZCApIGFzIHZvdGVzLCBhdmcoIHYucmF0ZSApIGFzIHZyYXRlICcKICAgICAgICAuICdGUk9NIGZhcV9pdGVtIGkgJwogICAgICAgIC4gJ0xFRlQgSk9JTiBmYXFfdm90aW5nIHYgT04gdi5pdGVtX2lkID0gaS5pZCAnCiAgICAgICAgLiAnTEVGVCBKT0lOIGZhcV9zdGF0ZSBzIE9OIHMuaWQgPSBpLnN0YXRlX2lkJzsKCiAgICAjIGV4dGVuZGVkIFNRTAogICAgbXkgJEV4dCA9ICcnOwoKICAgICMgZnVsbHRleHQgc2VhcmNoCiAgICBpZiAoICRQYXJhbXtXaGF0fSAmJiAkUGFyYW17V2hhdH0gbmUgJyonICkgewoKICAgICAgICAjIGRlZmluZSB0aGUgc2VhcmNoIGZpZWxkcyBmb3IgZnVsbHRleHQgc2VhcmNoCiAgICAgICAgbXkgQFNlYXJjaEZpZWxkcyA9ICggJ2kuZl9udW1iZXInLCAnaS5mX3N1YmplY3QnLCAnaS5mX2tleXdvcmRzJyApOwoKICAgICAgICAjIHVzZWQgZnJvbSB0aGUgYWdlbnQgaW50ZXJmYWNlIChpbnRlcm5hbCkKICAgICAgICBpZiAoICRQYXJhbXtJbnRlcmZhY2V9LT57TmFtZX0gZXEgJ2ludGVybmFsJyApIHsKCiAgICAgICAgICAgIGZvciBteSAkTnVtYmVyICggMSAuLiA2ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzdGF0ZSBvZiB0aGUgZmllbGQgKGludGVybmFsLCBleHRlcm5hbCwgcHVibGljKQogICAgICAgICAgICAgICAgbXkgJEZpZWxkU3RhdGUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCggJ0ZBUTo6SXRlbTo6RmllbGQnIC4gJE51bWJlciApLT57U2hvd307CgogICAgICAgICAgICAgICAgIyBhZGQgYWxsIGludGVybmFsLCBleHRlcm5hbCBhbmQgcHVibGljIGZpZWxkcwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRGaWVsZFN0YXRlIGVxICdpbnRlcm5hbCcKICAgICAgICAgICAgICAgICAgICB8fCAkRmllbGRTdGF0ZSBlcSAnZXh0ZXJuYWwnCiAgICAgICAgICAgICAgICAgICAgfHwgJEZpZWxkU3RhdGUgZXEgJ3B1YmxpYycKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2VhcmNoRmllbGRzLCAnaS5mX2ZpZWxkJyAuICROdW1iZXI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXNlZCBmcm9tIHRoZSBjdXN0b21lciBpbnRlcmZhY2UgKGV4dGVybmFsKQogICAgICAgIGVsc2lmICggJFBhcmFte0ludGVyZmFjZX0tPntOYW1lfSBlcSAnZXh0ZXJuYWwnICkgewoKICAgICAgICAgICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDYgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIHN0YXRlIG9mIHRoZSBmaWVsZCAoaW50ZXJuYWwsIGV4dGVybmFsLCBwdWJsaWMpCiAgICAgICAgICAgICAgICBteSAkRmllbGRTdGF0ZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCAnRkFROjpJdGVtOjpGaWVsZCcgLiAkTnVtYmVyICktPntTaG93fTsKCiAgICAgICAgICAgICAgICAjIGFkZCBhbGwgZXh0ZXJuYWwgYW5kIHB1YmxpYyBmaWVsZHMKICAgICAgICAgICAgICAgIGlmICggJEZpZWxkU3RhdGUgZXEgJ2V4dGVybmFsJyB8fCAkRmllbGRTdGF0ZSBlcSAncHVibGljJyApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTZWFyY2hGaWVsZHMsICdpLmZfZmllbGQnIC4gJE51bWJlcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB1c2VkIGZyb20gdGhlIHB1YmxpYyBpbnRlcmZhY2UgKHB1YmxpYykKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDYgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIHN0YXRlIG9mIHRoZSBmaWVsZCAoaW50ZXJuYWwsIGV4dGVybmFsLCBwdWJsaWMpCiAgICAgICAgICAgICAgICBteSAkRmllbGRTdGF0ZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCAnRkFROjpJdGVtOjpGaWVsZCcgLiAkTnVtYmVyICktPntTaG93fTsKCiAgICAgICAgICAgICAgICAjIGFkZCBhbGwgcHVibGljIGZpZWxkcwogICAgICAgICAgICAgICAgaWYgKCAkRmllbGRTdGF0ZSBlcSAncHVibGljJyApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTZWFyY2hGaWVsZHMsICdpLmZfZmllbGQnIC4gJE51bWJlcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgdGhlIFNRTCBmb3IgdGhlIGZ1bGx0ZXh0IHNlYXJjaAogICAgICAgICRFeHQgLj0gJFNlbGYtPntEQk9iamVjdH0tPlF1ZXJ5Q29uZGl0aW9uKAogICAgICAgICAgICBLZXkgICAgICAgICAgPT4gXEBTZWFyY2hGaWVsZHMsCiAgICAgICAgICAgIFZhbHVlICAgICAgICA9PiAkUGFyYW17V2hhdH0sCiAgICAgICAgICAgIFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICAgICAgICAgIFNlYXJjaFN1ZmZpeCA9PiAnKicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIG51bWJlcgogICAgaWYgKCAkUGFyYW17TnVtYmVyfSApIHsKICAgICAgICAkUGFyYW17TnVtYmVyfSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17TnVtYmVyfSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17TnVtYmVyfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte051bWJlcn0sICdMaWtlJyApOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICIgTE9XRVIoaS5mX251bWJlcikgTElLRSBMT1dFUignIiAuICRQYXJhbXtOdW1iZXJ9IC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgdGl0bGUKICAgIGlmICggJFBhcmFte1RpdGxlfSApIHsKICAgICAgICAkUGFyYW17VGl0bGV9ID0gIlwlJFBhcmFte1RpdGxlfVwlIjsKICAgICAgICAkUGFyYW17VGl0bGV9ID1+IHMvXCovJS9nOwogICAgICAgICRQYXJhbXtUaXRsZX0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte1RpdGxlfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1RpdGxlfSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gIiBMT1dFUihpLmZfc3ViamVjdCkgTElLRSBMT1dFUignIiAuICRQYXJhbXtUaXRsZX0gLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIGxhbmd1YWdlcwogICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2VJRHN9ICYmIHJlZiAkUGFyYW17TGFuZ3VhZ2VJRHN9IGVxICdBUlJBWScgJiYgQHsgJFBhcmFte0xhbmd1YWdlSURzfSB9ICkgewoKICAgICAgICAjIGludGVnZXIgcXVvdGUgdGhlIGxhbmd1YWdlIGlkcwogICAgICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIEB7ICRQYXJhbXtMYW5ndWFnZUlEc30gfSApIHsKICAgICAgICAgICAgJExhbmd1YWdlSUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRMYW5ndWFnZUlELCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gJywgJywgQHsgJFBhcmFte0xhbmd1YWdlSURzfSB9OwoKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAnIGkuZl9sYW5ndWFnZV9pZCBJTiAoJyAuICRJblN0cmluZyAuICcpJzsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgY2F0ZWdvcmllcwogICAgaWYgKCAkUGFyYW17Q2F0ZWdvcnlJRHN9ICYmIHJlZiAkUGFyYW17Q2F0ZWdvcnlJRHN9IGVxICdBUlJBWScgJiYgQHsgJFBhcmFte0NhdGVnb3J5SURzfSB9ICkgewoKICAgICAgICAjIGludGVnZXIgcXVvdGUgdGhlIGNhdGVnb3J5IGlkcwogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIEB7ICRQYXJhbXtDYXRlZ29yeUlEc30gfSApIHsKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkQ2F0ZWdvcnlJRCwgJ0ludGVnZXInICk7CiAgICAgICAgfQoKICAgICAgICBteSBAU29ydGVkSURzID0gc29ydCBAeyAkUGFyYW17Q2F0ZWdvcnlJRHN9IH07CgogICAgICAgICMgc3BsaXQgSU4gc3RhdGVtZW50IHdpdGggbW9yZSB0aGFuIDkwMCBlbGVtZW50cyBpbiBtb3JlIHN0YXRlbWVudHMgYm9tYmluZWQgd2l0aCBPUgogICAgICAgICMgYmVjYXVzZSBPcmFjbGUgZG9lc24ndCBzdXBwb3J0IG1vcmUgdGhhbiAxMDAwIGVsZW1lbnRzIGluIG9uZSBJTiBzdGF0ZW1lbnQuCiAgICAgICAgbXkgQFNRTFN0cmluZ3M7CiAgICAgICAgTE9PUDoKICAgICAgICB3aGlsZSAoIHNjYWxhciBAU29ydGVkSURzICkgewoKICAgICAgICAgICAgbXkgQFNvcnRlZElEc1BhcnQgPSBzcGxpY2UgQFNvcnRlZElEcywgMCwgOTAwOwoKICAgICAgICAgICAgbXkgJElEU3RyaW5nID0gam9pbiAnLCcsIEBTb3J0ZWRJRHNQYXJ0OwoKICAgICAgICAgICAgcHVzaCBAU1FMU3RyaW5ncywgIiBpLmNhdGVnb3J5X2lkIElOICgkSURTdHJpbmcpICI7CiAgICAgICAgfQoKICAgICAgICBteSAkU1FMU3RyaW5nID0gam9pbiAnIE9SICcsIEBTUUxTdHJpbmdzOwoKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAnICggJyAuICRTUUxTdHJpbmcgLiAnICkgJzsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlIGZvciBWYWxpZElEcyAob25seSBzZWFyY2ggZm9yIHZhbGlkIEZBUXMpCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZElEc30gKSB7CgogICAgICAgICMgZ2V0IHRoZSB2YWxpZCBpZHMKICAgICAgICBteSBAVmFsaWRJRHMgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRJRHNHZXQoKTsKCiAgICAgICAgJFBhcmFte1ZhbGlkSURzfSA9IFxAVmFsaWRJRHM7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIFZhbGlkSURzCiAgICBpZiAoICRQYXJhbXtWYWxpZElEc30gJiYgcmVmICRQYXJhbXtWYWxpZElEc30gZXEgJ0FSUkFZJyAmJiBAeyAkUGFyYW17VmFsaWRJRHN9IH0gKSB7CgogICAgICAgICMgaW50ZWdlciBxdW90ZSB0aGUgVmFsaWRJRHMKICAgICAgICBmb3IgbXkgJFZhbGlkSUQgKCBAeyAkUGFyYW17VmFsaWRJRHN9IH0gKSB7CiAgICAgICAgICAgICRWYWxpZElEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkVmFsaWRJRCwgJ0ludGVnZXInICk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBzdHJpbmcKICAgICAgICBteSAkSW5TdHJpbmcgPSBqb2luICcsICcsIEB7ICRQYXJhbXtWYWxpZElEc30gfTsKCiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gJyBpLnZhbGlkX2lkIElOICgnIC4gJEluU3RyaW5nIC4gJyknOwogICAgfQoKICAgICMgc2VhcmNoIGZvciBzdGF0ZXMKICAgIGlmICggJFBhcmFte1N0YXRlc30gJiYgcmVmICRQYXJhbXtTdGF0ZXN9IGVxICdIQVNIJyAmJiAleyAkUGFyYW17U3RhdGVzfSB9ICkgewoKICAgICAgICAjIGludGVnZXIgcXVvdGUgdGhlIHN0YXRlIGlkcwogICAgICAgIGZvciBteSAkU3RhdGVUeXBlSUQgKCBzb3J0IGtleXMgJXsgJFBhcmFte1N0YXRlc30gfSApIHsKICAgICAgICAgICAgJFN0YXRlVHlwZUlEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkU3RhdGVUeXBlSUQsICdJbnRlZ2VyJyApOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgc3RyaW5nCiAgICAgICAgbXkgJEluU3RyaW5nID0gam9pbiAnLCAnLCBrZXlzICV7ICRQYXJhbXtTdGF0ZXN9IH07CgogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICcgcy50eXBlX2lkIElOICgnIC4gJEluU3RyaW5nIC4gJyknOwogICAgfQoKICAgICMgc2VhcmNoIGZvciBrZXl3b3JkcwogICAgaWYgKCAkUGFyYW17S2V5d29yZH0gKSB7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRQYXJhbXtLZXl3b3JkfSA9ICJcJSRQYXJhbXtLZXl3b3JkfVwlIjsKICAgICAgICAkUGFyYW17S2V5d29yZH0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte0tleXdvcmR9ID1+IHMvJSUvJS9nOwogICAgICAgICRQYXJhbXtLZXl3b3JkfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0tleXdvcmR9LCAnTGlrZScgKTsKCiAgICAgICAgaWYgKCAkU2VsZi0+e0RCT2JqZWN0fS0+R2V0RGF0YWJhc2VGdW5jdGlvbignTm9Mb3dlckluTGFyZ2VUZXh0JykgKSB7CiAgICAgICAgICAgICRFeHQgLj0gIiBpLmZfa2V5d29yZHMgTElLRSAnIiAuICRQYXJhbXtLZXl3b3JkfSAuICInICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRTZWxmLT57REJPYmplY3R9LT5HZXREYXRhYmFzZUZ1bmN0aW9uKCdMY2FzZUxpa2VJbkxhcmdlVGV4dCcpICkgewogICAgICAgICAgICAkRXh0CiAgICAgICAgICAgICAgICAuPSAiIExDQVNFKGkuZl9rZXl3b3JkcykgTElLRSBMQ0FTRSgnIgogICAgICAgICAgICAgICAgLiAkUGFyYW17S2V5d29yZH0KICAgICAgICAgICAgICAgIC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEV4dAogICAgICAgICAgICAgICAgLj0gIiBMT1dFUihpLmZfa2V5d29yZHMpIExJS0UgTE9XRVIoJyIKICAgICAgICAgICAgICAgIC4gJFBhcmFte0tleXdvcmR9CiAgICAgICAgICAgICAgICAuICInKSAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IG9ubHkgYXBwcm92ZWQgZmFxIGFydGljbGVzIGZvciBwdWJsaWMgYW5kIGN1c3RvbWVyIGludGVyZmFjZQogICAgaWYgKCAkUGFyYW17SW50ZXJmYWNlfS0+e05hbWV9IGVxICdwdWJsaWMnIHx8ICRQYXJhbXtJbnRlcmZhY2V9LT57TmFtZX0gZXEgJ2V4dGVybmFsJyApIHsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAnIGkuYXBwcm92ZWQgPSAxJzsKICAgIH0KCiAgICAjIGFkZCBXSEVSRSBzdGF0ZW1lbnQKICAgIGlmICgkRXh0KSB7CiAgICAgICAgJEV4dCA9ICcgV0hFUkUgJyAuICRFeHQ7CiAgICB9CgogICAgIyBhZGQgR1JPVVAgQlkKICAgICRFeHQKICAgICAgICAuPSAnIEdST1VQIEJZIGkuaWQsIGkuZl9zdWJqZWN0LCBpLmZfbGFuZ3VhZ2VfaWQsIGkuY3JlYXRlZCwgaS5jaGFuZ2VkLCBzLm5hbWUsIHYuaXRlbV9pZCAnOwoKICAgICMgYWRkIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgIGlmIChAU1FMT3JkZXJCeSkgewogICAgICAgICRFeHQgLj0gJ09SREVSIEJZICc7CiAgICAgICAgJEV4dCAuPSBqb2luICcsICcsIEBTUUxPcmRlckJ5OwogICAgICAgICRFeHQgLj0gJyAnOwogICAgfQoKICAgICMgYWRkIGV4dGVuZGVkIFNRTAogICAgJFNRTCAuPSAkRXh0OwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSB8fCA1MDAKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBATGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBATGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gQExpc3Q7Cn0KCj1pdGVtIEZBUVBhdGhMaXN0R2V0KCkKCnJldHVybnMgYSBjYXRlZ29yeSBhcnJheSByZWZlcmVuY2UKCiAgICBteSAkQ2F0ZWdvcnlJREFycmF5UmVmID0gJEZBUU9iamVjdC0+RkFRUGF0aExpc3RHZXQoCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAxNTAsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJENhdGVnb3J5SURBcnJheVJlZiA9IFsKICAgICAgICB7CiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJzInLAogICAgICAgICAgICBQYXJlbnRJRCA9PiAnMCcsCiAgICAgICAgICAgIE5hbWUgPT4gJ015IENhdGVnb3J5JywKICAgICAgICAgICAgQ29tbWVudCA9PiAnTXkgRmlyc3QgQ2F0ZWdvcnknLAogICAgICAgICAgICBWYWxpZElEID0+ICcxJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAnNCcsCiAgICAgICAgICAgIFBhcmVudElEID0+ICcyJywKICAgICAgICAgICAgTmFtZSA9PiAnU3ViIENhdGVnb3J5IEEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdUaGlzIElzIENhdGVnb3J5IEEnLAogICAgICAgICAgICBWYWxpZElEID0+ICcxJywKICAgICAgICB9LAogICAgXTsKCj1jdXQKCnN1YiBGQVFQYXRoTGlzdEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgQENhdGVnb3J5TGlzdDsKICAgIG15ICRUZW1wQ2F0ZWdvcnlJRCA9ICRQYXJhbXtDYXRlZ29yeUlEfTsKICAgIHdoaWxlICgkVGVtcENhdGVnb3J5SUQpIHsKICAgICAgICBteSAlRGF0YSA9ICRTZWxmLT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkVGVtcENhdGVnb3J5SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoJURhdGEpIHsKICAgICAgICAgICAgcHVzaCBAQ2F0ZWdvcnlMaXN0LCBcJURhdGE7CiAgICAgICAgfQogICAgICAgICRUZW1wQ2F0ZWdvcnlJRCA9ICREYXRhe1BhcmVudElEfTsKICAgIH0KCiAgICBAQ2F0ZWdvcnlMaXN0ID0gcmV2ZXJzZSBAQ2F0ZWdvcnlMaXN0OwoKICAgIHJldHVybiBcQENhdGVnb3J5TGlzdDsKCn0KCj1pdGVtIFNldENhdGVnb3J5R3JvdXAoKQoKc2V0IGdyb3VwcyB0byBhIGNhdGVnb3J5CgogICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5TZXRDYXRlZ29yeUdyb3VwKAogICAgICAgIENhdGVnb3J5SUQgPT4gMywKICAgICAgICBHcm91cElEcyAgID0+IFsgMiw0LDEsNSw3NyBdLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRTdWNjZXNzID0gMTsgICAgICAgICAgICAgICAjIG9yIHVuZGVmIGlmIGdyb3VwcyBjb3VsZCBub3QgYmUgc2V0IHRvIGEgY2F0ZWdvcnkKCj1jdXQKCnN1YiBTZXRDYXRlZ29yeUdyb3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENhdGVnb3J5SUQgR3JvdXBJRHMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSBvbGQgZ3JvdXBzCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBmYXFfY2F0ZWdvcnlfZ3JvdXAgV0hFUkUgY2F0ZWdvcnlfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDYXRlZ29yeUlEfSBdLAogICAgKTsKCiAgICAjIGluc2VydCBncm91cHMKICAgICRQYXJhbXtDYXRlZ29yeUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0NhdGVnb3J5SUR9LCAnSW50ZWdlcicgKTsKICAgIGZvciBteSAkR3JvdXBJRCAoIEB7ICRQYXJhbXtHcm91cElEc30gfSApIHsKCiAgICAgICAgIyBkYiBxdW90ZQogICAgICAgICRHcm91cElEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkR3JvdXBJRCwgJ0ludGVnZXInICk7CgogICAgICAgIG15ICRTUUwgPSAiSU5TRVJUIElOVE8gZmFxX2NhdGVnb3J5X2dyb3VwICIgLgogICAgICAgICAgICAiIChjYXRlZ29yeV9pZCwgZ3JvdXBfaWQsIGNoYW5nZWQsIGNoYW5nZWRfYnksIGNyZWF0ZWQsIGNyZWF0ZWRfYnkpIFZBTFVFUyIgLgogICAgICAgICAgICAiICgkUGFyYW17Q2F0ZWdvcnlJRH0sICRHcm91cElELCBjdXJyZW50X3RpbWVzdGFtcCwgJFBhcmFte1VzZXJJRH0sICIgLgogICAgICAgICAgICAiIGN1cnJlbnRfdGltZXN0YW1wLCAkUGFyYW17VXNlcklEfSkiOwoKICAgICAgICAjIHdyaXRlIGF0dGFjaG1lbnQgdG8gZGIKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbyggU1FMID0+ICRTUUwgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gR2V0VXNlckNhdGVnb3JpZXMoKQoKZ2V0IHVzZXIgY2F0ZWdvcnktZ3JvdXBzCgogICAgbXkgJFVzZXJDYXRlZ29yeUdyb3VwSGFzaFJlZiA9ICRGQVFPYmplY3QtPkdldFVzZXJDYXRlZ29yaWVzKAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFVzZXJDYXRlZ29yeUdyb3VwSGFzaFJlZiA9IHsKICAgICAgICAxID0+IHt9LAogICAgICAgIDAgPT4gewogICAgICAgICAgICAxID0+ICdNaXNjJywKICAgICAgICAgICAgMiA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgIH0sCiAgICAgICAgMiA9PiB7CiAgICAgICAgICAgIDMgPT4gJ1N1YiBDYXRlZ29yeSBBJywKICAgICAgICAgICAgNCA9PiAnU3ViIENhdGVnb3J5IEInLAogICAgICAgIH0sCiAgICAgICAgMyA9PiB7fSwKICAgICAgICA0ID0+IHt9LAogICAgfTsKCj1jdXQKCnN1YiBHZXRVc2VyQ2F0ZWdvcmllcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUeXBlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENhdGVnb3JpZXMgPSAkU2VsZi0+Q2F0ZWdvcnlMaXN0KAogICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJENhdGVnb3J5R3JvdXBzID0gJFNlbGYtPkNhdGVnb3J5R3JvdXBHZXRBbGwoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKICAgIG15ICVVc2VyR3JvdXBzOwogICAgaWYgKCAhJFNlbGYtPntDYWNoZX0tPntHZXRVc2VyQ2F0ZWdvcmllc30tPntHcm91cE1lbWJlckxpc3R9ICkgewogICAgICAgICVVc2VyR3JvdXBzID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPntDYWNoZX0tPntHZXRVc2VyQ2F0ZWdvcmllc30tPntHcm91cE1lbWJlckxpc3R9ID0gXCVVc2VyR3JvdXBzOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJVVzZXJHcm91cHMgPSAleyAkU2VsZi0+e0NhY2hlfS0+e0dldFVzZXJDYXRlZ29yaWVzfS0+e0dyb3VwTWVtYmVyTGlzdH0gfTsKICAgIH0KCiAgICBteSAkVXNlckNhdGVnb3JpZXMgPSAkU2VsZi0+X1VzZXJDYXRlZ29yaWVzKAogICAgICAgIENhdGVnb3JpZXMgICAgID0+ICRDYXRlZ29yaWVzLAogICAgICAgIENhdGVnb3J5R3JvdXBzID0+ICRDYXRlZ29yeUdyb3VwcywKICAgICAgICBVc2VyR3JvdXBzICAgICA9PiBcJVVzZXJHcm91cHMsCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkVXNlckNhdGVnb3JpZXM7Cn0KCj1pdGVtIEdldFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzKCkKCmdldCB1c2VyIGNhdGVnb3J5LWdyb3VwcyAoc2hvdyBjYXRlZ29yeSBsb25nIG5hbWVzKQoKICAgIG15ICRVc2VyQ2F0ZWdvcnlHcm91cEhhc2hSZWYgPSAkRkFRT2JqZWN0LT5HZXRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRVc2VyQ2F0ZWdvcnlHcm91cEhhc2hSZWYgPSB7CiAgICAgICAgMSA9PiAnTWlzYycsCiAgICAgICAgMiA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgIDMgPT4gJ015IENhdGVnb3J5OjpTdWIgQ2F0ZWdvcnkgQScsCiAgICAgICAgNCA9PiAnTXkgQ2F0ZWdvcnk6OlN1YiBDYXRlZ29yeSBBJywKICAgIH07Cgo9Y3V0CgpzdWIgR2V0VXNlckNhdGVnb3JpZXNMb25nTmFtZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVHlwZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGNhdGVnb3JpZXMgd2hlcmUgdXNlciBoYXMgcmlnaHRzCiAgICBteSAkVXNlckNhdGVnb3JpZXMgPSAkU2VsZi0+R2V0VXNlckNhdGVnb3JpZXMoCiAgICAgICAgVHlwZSAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGFsbCBjYXRlZ29yaWVzIHdpdGggdGhlaXIgbG9uZyBuYW1lcwogICAgbXkgJENhdGVnb3J5VHJlZSA9ICRTZWxmLT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyB0byBzdG9yZSB0aGUgdXNlciBjYXRlZ29yaWVzIHdpdGggdGhlaXIgbG9uZyBuYW1lcwogICAgbXkgJVVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzOwoKICAgICMgZ2V0IHRoZSBsb25nIG5hbWVzIG9mIHRoZSBjYXRlZ29yaWVzIHdoZXJlIHVzZXIgaGFzIHJpZ2h0cwogICAgUEFSRU5USUQ6CiAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCBrZXlzICV7JFVzZXJDYXRlZ29yaWVzfSApIHsKCiAgICAgICAgbmV4dCBQQVJFTlRJRCBpZiAhJFVzZXJDYXRlZ29yaWVzLT57JFBhcmVudElEfTsKICAgICAgICBuZXh0IFBBUkVOVElEIGlmIHJlZiAkVXNlckNhdGVnb3JpZXMtPnskUGFyZW50SUR9IG5lICdIQVNIJzsKICAgICAgICBuZXh0IFBBUkVOVElEIGlmICEleyAkVXNlckNhdGVnb3JpZXMtPnskUGFyZW50SUR9IH07CgogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIHNvcnQga2V5cyAleyAkVXNlckNhdGVnb3JpZXMtPnskUGFyZW50SUR9IH0gKSB7CiAgICAgICAgICAgICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lc3skQ2F0ZWdvcnlJRH0gPSAkQ2F0ZWdvcnlUcmVlLT57JENhdGVnb3J5SUR9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXCVVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lczsKfQoKPWl0ZW0gR2V0Q3VzdG9tZXJDYXRlZ29yaWVzKCkKCmdldCBjdXN0b21lciB1c2VyIGNhdGVnb3JpZXMKCiAgICBteSAkQ3VzdG9tZXJVc2VyQ2F0ZWdvcnlIYXNoUmVmID0gJEZBUU9iamVjdC0+R2V0Q3VzdG9tZXJDYXRlZ29yaWVzKAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAnaGFucycsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdydycsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQ3VzdG9tZXJVc2VyQ2F0ZWdvcnlIYXNoUmVmID0gewogICAgICAgIDEgPT4ge30sCiAgICAgICAgMCA9PiB7CiAgICAgICAgICAgIDEgPT4gJ01pc2MnLAogICAgICAgICAgICAyID0+ICdNeSBDYXRlZ29yeScsCiAgICAgICAgfSwKICAgICAgICAyID0+IHsKICAgICAgICAgICAgMyA9PiAnU3ViIENhdGVnb3J5IEEnLAogICAgICAgICAgICA0ID0+ICdTdWIgQ2F0ZWdvcnkgQicsCiAgICAgICAgfSwKICAgICAgICAzID0+IHt9LAogICAgICAgIDQgPT4ge30sCiAgICB9OwoKPWN1dAoKc3ViIEdldEN1c3RvbWVyQ2F0ZWdvcmllcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDdXN0b21lclVzZXIgVHlwZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdHZXRDdXN0b21lckNhdGVnb3JpZXM6OkN1c3RvbWVyVXNlcjo6JyAuICRQYXJhbXtDdXN0b21lclVzZXJ9OwogICAgaWYgKCBkZWZpbmVkICRTZWxmLT57Q2FjaGV9LT57JENhY2hlS2V5fSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPnskQ2FjaGVLZXl9OwogICAgfQoKICAgICMgZ2V0IGFsbCB2YWxpZCBjYXRlZ29yaWVzCiAgICBteSAkQ2F0ZWdvcmllcyA9ICRTZWxmLT5DYXRlZ29yeUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAkQ2F0ZWdvcnlHcm91cHMgPSAkU2VsZi0+Q2F0ZWdvcnlHcm91cEdldEFsbCgKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVVc2VyR3JvdXBzID0gJFNlbGYtPntDdXN0b21lckdyb3VwT2JqZWN0fS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17Q3VzdG9tZXJVc2VyfSwKICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgKTsKCiAgICBteSAkQ3VzdG9tZXJDYXRlZ29yaWVzID0gJFNlbGYtPl9Vc2VyQ2F0ZWdvcmllcygKICAgICAgICBDYXRlZ29yaWVzICAgICA9PiAkQ2F0ZWdvcmllcywKICAgICAgICBDYXRlZ29yeUdyb3VwcyA9PiAkQ2F0ZWdvcnlHcm91cHMsCiAgICAgICAgVXNlckdyb3VwcyAgICAgPT4gXCVVc2VyR3JvdXBzLAogICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlfS0+eyRDYWNoZUtleX0gPSAkQ3VzdG9tZXJDYXRlZ29yaWVzOwoKICAgIHJldHVybiAkQ3VzdG9tZXJDYXRlZ29yaWVzOwp9Cgo9aXRlbSBHZXRDdXN0b21lckNhdGVnb3JpZXNMb25nTmFtZXMoKQoKZ2V0IGN1c3RvbWVyIGNhdGVnb3J5LWdyb3VwcyAoc2hvdyBjYXRlZ29yeSBsb25nIG5hbWVzKQoKICAgIG15ICRDdXN0b21lckNhdGVnb3J5R3JvdXBIYXNoUmVmID0gJEZBUU9iamVjdC0+R2V0Q3VzdG9tZXJDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAnaGFucycsCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQ3VzdG9tZXJDYXRlZ29yeUdyb3VwSGFzaFJlZiA9IHsKICAgICAgICAxID0+ICdNaXNjJywKICAgICAgICAyID0+ICdNeSBDYXRlZ29yeScsCiAgICAgICAgMyA9PiAnTXkgQ2F0ZWdvcnk6OlN1YiBDYXRlZ29yeSBBJywKICAgICAgICA0ID0+ICdNeSBDYXRlZ29yeTo6U3ViIENhdGVnb3J5IEEnLAogICAgfTsKCj1jdXQKCnN1YiBHZXRDdXN0b21lckNhdGVnb3JpZXNMb25nTmFtZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3VzdG9tZXJVc2VyIFR5cGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjYXRlZ29yaWVzIHdoZXJlIHVzZXIgaGFzIHJpZ2h0cwogICAgbXkgJEN1c3RvbWVyQ2F0ZWdvcmllcyA9ICRTZWxmLT5HZXRDdXN0b21lckNhdGVnb3JpZXMoCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRQYXJhbXtDdXN0b21lclVzZXJ9LAogICAgICAgIFR5cGUgICAgICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGV4dHJhY3QgY2F0ZWdvcnkgaWRzCiAgICBteSAlQWxsQ2F0ZWdvcnlJRHM7CiAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCBrZXlzICV7JEN1c3RvbWVyQ2F0ZWdvcmllc30gKSB7CiAgICAgICAgZm9yIG15ICRDYXRlZ29yeUlEICggc29ydCBrZXlzICV7ICRDdXN0b21lckNhdGVnb3JpZXMtPnskUGFyZW50SUR9IH0gKSB7CiAgICAgICAgICAgICRBbGxDYXRlZ29yeUlEc3skQ2F0ZWdvcnlJRH0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBhbGwgY3VzdG9tZXIgY2F0ZWdvcnkgaWRzCiAgICBteSBAQ3VzdG9tZXJDYXRlZ29yeUlEczsKICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIDAsIGtleXMgJUFsbENhdGVnb3J5SURzICkgewogICAgICAgIHB1c2ggQEN1c3RvbWVyQ2F0ZWdvcnlJRHMsIEB7CiAgICAgICAgICAgICRTZWxmLT5DdXN0b21lckNhdGVnb3J5U2VhcmNoKAogICAgICAgICAgICAgICAgUGFyZW50SUQgICAgID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRQYXJhbXtDdXN0b21lclVzZXJ9LAogICAgICAgICAgICAgICAgTW9kZSAgICAgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICApCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGJ1aWxkIGN1c3RvbWVyIGNhdGVnb3J5IGhhc2gKICAgICRDdXN0b21lckNhdGVnb3JpZXMgPSB7fTsKICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoQEN1c3RvbWVyQ2F0ZWdvcnlJRHMpIHsKICAgICAgICBteSAlQ2F0ZWdvcnkgPSAkU2VsZi0+Q2F0ZWdvcnlHZXQoCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkQ3VzdG9tZXJDYXRlZ29yaWVzLT57ICRDYXRlZ29yeXtQYXJlbnRJRH0gfS0+eyAkQ2F0ZWdvcnl7Q2F0ZWdvcnlJRH0gfSA9ICRDYXRlZ29yeXtOYW1lfTsKICAgIH0KCiAgICAjIGdldCBhbGwgY2F0ZWdvcmllcyB3aXRoIHRoZWlyIGxvbmcgbmFtZXMKICAgIG15ICRDYXRlZ29yeVRyZWUgPSAkU2VsZi0+Q2F0ZWdvcnlUcmVlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgdG8gc3RvcmUgdGhlIHVzZXIgY2F0ZWdvcmllcyB3aXRoIHRoZWlyIGxvbmcgbmFtZXMKICAgIG15ICVDdXN0b21lckNhdGVnb3JpZXNMb25nTmFtZXM7CgogICAgIyBnZXQgdGhlIGxvbmcgbmFtZXMgb2YgdGhlIGNhdGVnb3JpZXMgd2hlcmUgdXNlciBoYXMgcmlnaHRzCiAgICBQQVJFTlRJRDoKICAgIGZvciBteSAkUGFyZW50SUQgKCBzb3J0IGtleXMgJXskQ3VzdG9tZXJDYXRlZ29yaWVzfSApIHsKCiAgICAgICAgbmV4dCBQQVJFTlRJRCBpZiAhJEN1c3RvbWVyQ2F0ZWdvcmllcy0+eyRQYXJlbnRJRH07CiAgICAgICAgbmV4dCBQQVJFTlRJRCBpZiByZWYgJEN1c3RvbWVyQ2F0ZWdvcmllcy0+eyRQYXJlbnRJRH0gbmUgJ0hBU0gnOwogICAgICAgIG5leHQgUEFSRU5USUQgaWYgISV7ICRDdXN0b21lckNhdGVnb3JpZXMtPnskUGFyZW50SUR9IH07CgogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIHNvcnQga2V5cyAleyAkQ3VzdG9tZXJDYXRlZ29yaWVzLT57JFBhcmVudElEfSB9ICkgewogICAgICAgICAgICAkQ3VzdG9tZXJDYXRlZ29yaWVzTG9uZ05hbWVzeyRDYXRlZ29yeUlEfSA9ICRDYXRlZ29yeVRyZWUtPnskQ2F0ZWdvcnlJRH07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJUN1c3RvbWVyQ2F0ZWdvcmllc0xvbmdOYW1lczsKfQoKPWl0ZW0gR2V0UHVibGljQ2F0ZWdvcmllc0xvbmdOYW1lcygpCgpnZXQgcHVibGljIGNhdGVnb3J5LWdyb3VwcyAoc2hvdyBjYXRlZ29yeSBsb25nIG5hbWVzKQoKICAgIG15ICRQdWJsaWNDYXRlZ29yeUdyb3VwSGFzaFJlZiA9ICRGQVFPYmplY3QtPkdldFB1YmxpY0NhdGVnb3JpZXNMb25nTmFtZXMoCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkUHVibGljQ2F0ZWdvcnlHcm91cEhhc2hSZWYgPSB7CiAgICAgICAgMSA9PiAnTWlzYycsCiAgICAgICAgMiA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgIDMgPT4gJ015IENhdGVnb3J5OjpTdWIgQ2F0ZWdvcnkgQScsCiAgICAgICAgNCA9PiAnTXkgQ2F0ZWdvcnk6OlN1YiBDYXRlZ29yeSBBJywKICAgIH07Cgo9Y3V0CgpzdWIgR2V0UHVibGljQ2F0ZWdvcmllc0xvbmdOYW1lcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUeXBlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgYWxsIGNhdGVnb3JpZXMKICAgIG15ICRQdWJsaWNDYXRlZ29yaWVzID0gJFNlbGYtPkNhdGVnb3J5TGlzdCggVXNlcklEID0+ICRQYXJhbXtVc2VySUR9ICk7CgogICAgIyBleHRyYWN0IGNhdGVnb3J5IGlkcwogICAgbXkgJUFsbENhdGVnb3J5SURzOwogICAgZm9yIG15ICRQYXJlbnRJRCAoIHNvcnQga2V5cyAleyRQdWJsaWNDYXRlZ29yaWVzfSApIHsKICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBzb3J0IGtleXMgJXsgJFB1YmxpY0NhdGVnb3JpZXMtPnskUGFyZW50SUR9IH0gKSB7CiAgICAgICAgICAgICRBbGxDYXRlZ29yeUlEc3skQ2F0ZWdvcnlJRH0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBhbGwgcHVibGljIGNhdGVnb3J5IGlkcwogICAgbXkgQFB1YmxpY0NhdGVnb3J5SURzOwogICAgZm9yIG15ICRDYXRlZ29yeUlEICggMCwga2V5cyAlQWxsQ2F0ZWdvcnlJRHMgKSB7CiAgICAgICAgcHVzaCBAUHVibGljQ2F0ZWdvcnlJRHMsIEB7CiAgICAgICAgICAgICRTZWxmLT5QdWJsaWNDYXRlZ29yeVNlYXJjaCgKICAgICAgICAgICAgICAgIFBhcmVudElEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgTW9kZSAgICAgPT4gJ1B1YmxpYycsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICkKICAgICAgICB9OwogICAgfQoKICAgICMgYnVpbGQgcHVibGljIGNhdGVnb3J5IGhhc2gKICAgICRQdWJsaWNDYXRlZ29yaWVzID0ge307CiAgICBmb3IgbXkgJENhdGVnb3J5SUQgKEBQdWJsaWNDYXRlZ29yeUlEcykgewogICAgICAgIG15ICVDYXRlZ29yeSA9ICRTZWxmLT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgICAgICRQdWJsaWNDYXRlZ29yaWVzLT57ICRDYXRlZ29yeXtQYXJlbnRJRH0gfS0+eyAkQ2F0ZWdvcnl7Q2F0ZWdvcnlJRH0gfSA9ICRDYXRlZ29yeXtOYW1lfTsKICAgIH0KCiAgICAjIGdldCBhbGwgY2F0ZWdvcmllcyB3aXRoIHRoZWlyIGxvbmcgbmFtZXMKICAgIG15ICRDYXRlZ29yeVRyZWUgPSAkU2VsZi0+Q2F0ZWdvcnlUcmVlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgdG8gc3RvcmUgdGhlIHVzZXIgY2F0ZWdvcmllcyB3aXRoIHRoZWlyIGxvbmcgbmFtZXMKICAgIG15ICVQdWJsaWNDYXRlZ29yaWVzTG9uZ05hbWVzOwoKICAgICMgZ2V0IHRoZSBsb25nIG5hbWVzIG9mIHRoZSBjYXRlZ29yaWVzIHdoZXJlIHVzZXIgaGFzIHJpZ2h0cwogICAgUEFSRU5USUQ6CiAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCBrZXlzICV7JFB1YmxpY0NhdGVnb3JpZXN9ICkgewoKICAgICAgICBuZXh0IFBBUkVOVElEIGlmICEkUHVibGljQ2F0ZWdvcmllcy0+eyRQYXJlbnRJRH07CiAgICAgICAgbmV4dCBQQVJFTlRJRCBpZiByZWYgJFB1YmxpY0NhdGVnb3JpZXMtPnskUGFyZW50SUR9IG5lICdIQVNIJzsKICAgICAgICBuZXh0IFBBUkVOVElEIGlmICEleyAkUHVibGljQ2F0ZWdvcmllcy0+eyRQYXJlbnRJRH0gfTsKCiAgICAgICAgZm9yIG15ICRDYXRlZ29yeUlEICggc29ydCBrZXlzICV7ICRQdWJsaWNDYXRlZ29yaWVzLT57JFBhcmVudElEfSB9ICkgewogICAgICAgICAgICAkUHVibGljQ2F0ZWdvcmllc0xvbmdOYW1lc3skQ2F0ZWdvcnlJRH0gPSAkQ2F0ZWdvcnlUcmVlLT57JENhdGVnb3J5SUR9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXCVQdWJsaWNDYXRlZ29yaWVzTG9uZ05hbWVzOwp9Cgo9aXRlbSBDaGVja0NhdGVnb3J5VXNlclBlcm1pc3Npb24oKQoKZ2V0IHVzZXIgcGVybWlzc2lvbiBmb3IgYSBjYXRlZ29yeQoKICAgIG15ICRQZXJtaXNzaW9uU3RyaW5nID0gJEZBUU9iamVjdC0+Q2hlY2tDYXRlZ29yeVVzZXJQZXJtaXNzaW9uKAogICAgICAgIENhdGVnb3J5SUQgPT4gJzEyMycsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFBlcm1pc3Npb25TdHJpbmcgPSAncncnOyAgICAgICAgICAgICAgICMgb3IgJ3JvJyBvciAnJwoKPWN1dAoKc3ViIENoZWNrQ2F0ZWdvcnlVc2VyUGVybWlzc2lvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDYXRlZ29yeUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFVzZXJDYXRlZ29yaWVzID0gJFNlbGYtPkdldFVzZXJDYXRlZ29yaWVzKAogICAgICAgIFR5cGUgICA9PiAncm8nLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgZm9yIG15ICRQZXJtaXNzaW9uIChxdyhydyBybykpIHsKICAgICAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCBrZXlzICV7JFVzZXJDYXRlZ29yaWVzfSApIHsKICAgICAgICAgICAgbXkgJENhdGVnb3JpZXMgPSAkVXNlckNhdGVnb3JpZXMtPnskUGFyZW50SUR9OwogICAgICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBzb3J0IGtleXMgJXskQ2F0ZWdvcmllc30gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRDYXRlZ29yeUlEID09ICRQYXJhbXtDYXRlZ29yeUlEfSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFBlcm1pc3Npb247CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICcnOwp9Cgo9aXRlbSBDaGVja0NhdGVnb3J5Q3VzdG9tZXJQZXJtaXNzaW9uKCkKCmdldCBjdXN0b21lciB1c2VyIHBlcm1pc3Npb24gZm9yIGEgY2F0ZWdvcnkKCiAgICBteSAkUGVybWlzc2lvblN0cmluZyAkRkFRT2JqZWN0LT5DaGVja0NhdGVnb3J5Q3VzdG9tZXJQZXJtaXNzaW9uKAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAnbW0nLAogICAgICAgIENhdGVnb3J5SUQgICA9PiAnMTIzJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRQZXJtaXNzaW9uU3RyaW5nID0gJ3J3JzsgICAgICAgICAgICAgICAjIG9yICdybycgb3IgJycKCj1jdXQKCnN1YiBDaGVja0NhdGVnb3J5Q3VzdG9tZXJQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEN1c3RvbWVyVXNlciBDYXRlZ29yeUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRQZXJtaXNzaW9uIChxdyhydyBybykpIHsKICAgICAgICBteSAkQ3VzdG9tZXJDYXRlZ29yaWVzID0gJFNlbGYtPkdldEN1c3RvbWVyQ2F0ZWdvcmllcygKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRQYXJhbXtDdXN0b21lclVzZXJ9LAogICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ3JvJywKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRQYXJlbnRJRCAoIHNvcnQga2V5cyAleyRDdXN0b21lckNhdGVnb3JpZXN9ICkgewogICAgICAgICAgICBteSAkQ2F0ZWdvcmllcyA9ICRDdXN0b21lckNhdGVnb3JpZXMtPnskUGFyZW50SUR9OwogICAgICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBzb3J0IGtleXMgJXskQ2F0ZWdvcmllc30gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRDYXRlZ29yeUlEID09ICRQYXJhbXtDYXRlZ29yeUlEfSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFBlcm1pc3Npb247CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICcnOwp9Cgo9aXRlbSBBZ2VudENhdGVnb3J5U2VhcmNoKCkKCmdldCB0aGUgY2F0ZWdvcnkgc2VhcmNoIGFzIGFycmF5IHJlZgoKICAgIG15ICRDYXRlZ29yeUlEQXJyYXlSZWYgPSAkRkFRT2JqZWN0LT5BZ2VudENhdGVnb3J5U2VhcmNoKAogICAgICAgIFBhcmVudElEID0+IDMsICAgIyAob3B0aW9uYWwsIGRlZmF1bHQgMCkKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJENhdGVnb3J5SURBcnJheVJlZiA9IFsKICAgICAgICAnNCcsCiAgICAgICAgJzgnLAogICAgXTsKCj1jdXQKCnN1YiBBZ2VudENhdGVnb3J5U2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHBhcmVudCBpZAogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17UGFyZW50SUR9ICkgewogICAgICAgICRQYXJhbXtQYXJlbnRJRH0gPSAwOwogICAgfQogICAgbXkgJENhdGVnb3JpZXMgPSAkU2VsZi0+R2V0VXNlckNhdGVnb3JpZXMoCiAgICAgICAgVHlwZSAgID0+ICdybycsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlQ2F0ZWdvcnkgPSAleyAkQ2F0ZWdvcmllcy0+eyAkUGFyYW17UGFyZW50SUR9IH0gfTsKICAgIG15IEBDYXRlZ29yeUlEcyA9IHNvcnQgeyAkQ2F0ZWdvcnl7JGF9IGNtcCAkQ2F0ZWdvcnl7JGJ9IH0gKCBrZXlzICVDYXRlZ29yeSApOwoKICAgIHJldHVybiBcQENhdGVnb3J5SURzOwp9Cgo9aXRlbSBDdXN0b21lckNhdGVnb3J5U2VhcmNoKCkKCmdldCB0aGUgY2F0ZWdvcnkgc2VhcmNoIGFzIGhhc2gKCiAgICBteSAkQ2F0ZWdvcnlJREFycmF5UmVmID0gQHskRkFRT2JqZWN0LT5DdXN0b21lckNhdGVnb3J5U2VhcmNoKAogICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJ3R0JywKICAgICAgICBQYXJlbnRJRCAgICAgID0+IDMsICAgIyAob3B0aW9uYWwsIGRlZmF1bHQgMCkKICAgICAgICBNb2RlICAgICAgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKX07CgpSZXR1cm5zOgoKICAgICRDYXRlZ29yeUlEQXJyYXlSZWYgPSBbCiAgICAgICAgJzQnLAogICAgICAgICc4JywKICAgIF07Cgo9Y3V0CgpzdWIgQ3VzdG9tZXJDYXRlZ29yeVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDdXN0b21lclVzZXIgTW9kZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgcGFyZW50IGlkCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtQYXJlbnRJRH0gKSB7CiAgICAgICAgJFBhcmFte1BhcmVudElEfSA9IDA7CiAgICB9CgogICAgbXkgJENhdGVnb3JpZXMgPSAkU2VsZi0+R2V0Q3VzdG9tZXJDYXRlZ29yaWVzKAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAkUGFyYW17Q3VzdG9tZXJVc2VyfSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ3JvJywKICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVDYXRlZ29yeSA9ICV7ICRDYXRlZ29yaWVzLT57ICRQYXJhbXtQYXJlbnRJRH0gfSB9OwogICAgbXkgQENhdGVnb3J5SURzID0gc29ydCB7ICRDYXRlZ29yeXskYX0gY21wICRDYXRlZ29yeXskYn0gfSAoIGtleXMgJUNhdGVnb3J5ICk7CgogICAgbXkgQEFsbG93ZWRDYXRlZ29yeUlEczsKICAgIG15ICVBcnRpY2xlczsKCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnQ3VzdG9tZXJDYXRlZ29yeVNlYXJjaDo6QXJ0aWNsZXMnOwogICAgaWYgKCAkU2VsZi0+e0NhY2hlfS0+eyRDYWNoZUtleX0gKSB7CiAgICAgICAgJUFydGljbGVzID0gJXsgJFNlbGYtPntDYWNoZX0tPnskQ2FjaGVLZXl9IH07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBidWlsZCB2YWxpZCBpZCBzdHJpbmcKICAgICAgICBteSAkVmFsaWRJRHNTdHJpbmcgPSBqb2luICcsICcsICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZElEc0dldCgpOwoKICAgICAgICBteSAkU1FMID0gJ1NFTEVDVCBmYXFfaXRlbS5pZCwgZmFxX2l0ZW0uY2F0ZWdvcnlfaWQgJwogICAgICAgICAgICAuICdGUk9NIGZhcV9pdGVtLCBmYXFfc3RhdGVfdHlwZSwgZmFxX3N0YXRlICcKICAgICAgICAgICAgLiAnV0hFUkUgZmFxX3N0YXRlLmlkID0gZmFxX2l0ZW0uc3RhdGVfaWQgJwogICAgICAgICAgICAuICdBTkQgZmFxX3N0YXRlLnR5cGVfaWQgPSBmYXFfc3RhdGVfdHlwZS5pZCAnCiAgICAgICAgICAgIC4gIkFORCBmYXFfc3RhdGVfdHlwZS5uYW1lICE9ICdpbnRlcm5hbCcgIgogICAgICAgICAgICAuICJBTkQgZmFxX2l0ZW0udmFsaWRfaWQgSU4gKCRWYWxpZElEc1N0cmluZykgIgogICAgICAgICAgICAuICdBTkQgZmFxX2l0ZW0uYXBwcm92ZWQgPSAxJzsKCiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICRTUUwsCiAgICAgICAgKTsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkQXJ0aWNsZXN7ICRSb3dbMV0gfSsrOwogICAgICAgIH0KCiAgICAgICAgIyBjYWNoZQogICAgICAgICRTZWxmLT57Q2FjaGV9LT57JENhY2hlS2V5fSA9IFwlQXJ0aWNsZXM7CiAgICB9CgogICAgZm9yIG15ICRDYXRlZ29yeUlEIChAQ2F0ZWdvcnlJRHMpIHsKCiAgICAgICAgIyBnZXQgYWxsIHN1YmNhdGVnb3J5IGlkcyBmb3IgdGhpcyBjYXRlZ29yeQogICAgICAgIG15ICRTdWJDYXRlZ29yeUlEcyA9ICRTZWxmLT5DYXRlZ29yeVN1YkNhdGVnb3J5SURMaXN0KAogICAgICAgICAgICBQYXJlbnRJRCAgICAgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIE1vZGUgICAgICAgICA9PiAkUGFyYW17TW9kZX0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkUGFyYW17Q3VzdG9tZXJVc2VyfSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoaXMgY2F0ZWdvcnkgaWQKICAgICAgICBteSBASURzID0gKCAkQ2F0ZWdvcnlJRCwgQHskU3ViQ2F0ZWdvcnlJRHN9ICk7CgogICAgICAgICMgY2hlY2sgaWYgY2F0ZWdvcnkgY29udGFpbnMgYXJ0aWNsZXMgd2l0aCBzdGF0ZSBleHRlcm5hbCBvciBwdWJsaWMKICAgICAgICBJRDoKICAgICAgICBmb3IgbXkgJElEIChASURzKSB7CiAgICAgICAgICAgIG5leHQgSUQgaWYgISRBcnRpY2xlc3skSUR9OwogICAgICAgICAgICBwdXNoIEBBbGxvd2VkQ2F0ZWdvcnlJRHMsICRDYXRlZ29yeUlEOwogICAgICAgICAgICBsYXN0IElEOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXEBBbGxvd2VkQ2F0ZWdvcnlJRHM7Cn0KCj1pdGVtIFB1YmxpY0NhdGVnb3J5U2VhcmNoKCkKCmdldCB0aGUgY2F0ZWdvcnkgc2VhcmNoIGFzIGhhc2gKCiAgICBteSAkQ2F0ZWdvcnlJREFycmF5UmVmID0gJEZBUU9iamVjdC0+UHVibGljQ2F0ZWdvcnlTZWFyY2goCiAgICAgICAgUGFyZW50SUQgICAgICA9PiAzLCAgICMgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiAgICAgICAgTW9kZSAgICAgICAgICA9PiAnUHVibGljJywKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQ2F0ZWdvcnlJREFycmF5UmVmID0gWwogICAgICAgICc0JywKICAgICAgICAnOCcsCiAgICBdOwoKPWN1dAoKc3ViIFB1YmxpY0NhdGVnb3J5U2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE1vZGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtQYXJlbnRJRH0gKSB7CiAgICAgICAgJFBhcmFte1BhcmVudElEfSA9IDA7CiAgICB9CgogICAgbXkgJENhdGVnb3J5TGlzdENhdGVnb3JpZXMgPSAkU2VsZi0+Q2F0ZWdvcnlMaXN0KAogICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIFtdIGlmICEkQ2F0ZWdvcnlMaXN0Q2F0ZWdvcmllcy0+eyAkUGFyYW17UGFyZW50SUR9IH07CgogICAgbXkgJUNhdGVnb3J5ID0gJXsgJENhdGVnb3J5TGlzdENhdGVnb3JpZXMtPnsgJFBhcmFte1BhcmVudElEfSB9IH07CiAgICBteSBAQ2F0ZWdvcnlJRHMgPSBzb3J0IHsgJENhdGVnb3J5eyRhfSBjbXAgJENhdGVnb3J5eyRifSB9ICgga2V5cyAlQ2F0ZWdvcnkgKTsKICAgIG15IEBBbGxvd2VkQ2F0ZWdvcnlJRHM7CgogICAgIyBidWlsZCB2YWxpZCBpZCBzdHJpbmcKICAgIG15ICRWYWxpZElEc1N0cmluZyA9IGpvaW4gJywgJywgJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkSURzR2V0KCk7CgogICAgZm9yIG15ICRDYXRlZ29yeUlEIChAQ2F0ZWdvcnlJRHMpIHsKCiAgICAgICAgIyBnZXQgYWxsIHN1YmNhdGVnb3J5IGlkcyBmb3IgdGhpcyBjYXRlZ29yeQogICAgICAgIG15ICRTdWJDYXRlZ29yeUlEcyA9ICRTZWxmLT5DYXRlZ29yeVN1YkNhdGVnb3J5SURMaXN0KAogICAgICAgICAgICBQYXJlbnRJRCAgICAgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIE1vZGUgICAgICAgICA9PiAkUGFyYW17TW9kZX0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkUGFyYW17Q3VzdG9tZXJVc2VyfSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoaXMgY2F0ZWdvcnkgaWQKICAgICAgICBteSBASURzID0gKCAkQ2F0ZWdvcnlJRCwgQHskU3ViQ2F0ZWdvcnlJRHN9ICk7CgogICAgICAgICMgY2hlY2sgaWYgY2F0ZWdvcnkgY29udGFpbnMgYXJ0aWNsZXMgd2l0aCBzdGF0ZSBwdWJsaWMKICAgICAgICBteSAkRm91bmRBcnRpY2xlID0gMDsKCiAgICAgICAgbXkgJFNRTCA9ICdTRUxFQ1QgZmFxX2l0ZW0uaWQgJwogICAgICAgICAgICAuICdGUk9NIGZhcV9pdGVtLCBmYXFfc3RhdGVfdHlwZSwgZmFxX3N0YXRlICcKICAgICAgICAgICAgLiAnV0hFUkUgZmFxX2l0ZW0uY2F0ZWdvcnlfaWQgPSA/ICcKICAgICAgICAgICAgLiAiQU5EIGZhcV9pdGVtLnZhbGlkX2lkIElOICgkVmFsaWRJRHNTdHJpbmcpICIKICAgICAgICAgICAgLiAnQU5EIGZhcV9zdGF0ZS5pZCA9IGZhcV9pdGVtLnN0YXRlX2lkICcKICAgICAgICAgICAgLiAnQU5EIGZhcV9zdGF0ZS50eXBlX2lkID0gZmFxX3N0YXRlX3R5cGUuaWQgJwogICAgICAgICAgICAuICJBTkQgZmFxX3N0YXRlX3R5cGUubmFtZSA9ICdwdWJsaWMnICIKICAgICAgICAgICAgLiAnQU5EIGZhcV9pdGVtLmFwcHJvdmVkID0gMSc7CgogICAgICAgIElEOgogICAgICAgIGZvciBteSAkSUQgKEBJRHMpIHsKICAgICAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgICAgICAgICBCaW5kICA9PiBbIFwkSUQgXSwKICAgICAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICAgICAkRm91bmRBcnRpY2xlID0gJFJvd1swXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsYXN0IElEIGlmICRGb3VuZEFydGljbGU7CiAgICAgICAgfQoKICAgICAgICAjIGFuIGFydGljbGUgd2FzIGZvdW5kCiAgICAgICAgaWYgKCRGb3VuZEFydGljbGUpIHsKICAgICAgICAgICAgcHVzaCBAQWxsb3dlZENhdGVnb3J5SURzLCAkQ2F0ZWdvcnlJRDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFxAQWxsb3dlZENhdGVnb3J5SURzOwoKfQoKPWl0ZW0gRkFRTG9nQWRkKCkKCmFkZHMgYWNjZXNzZWQgRkFRIGFydGljbGUgdG8gdGhlIGFjY2VzcyBsb2cgdGFibGUKCiAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUUxvZ0FkZCgKICAgICAgICBJdGVtSUQgICAgPT4gJzEyMzQ1NicsCiAgICAgICAgSW50ZXJmYWNlID0+ICdpbnRlcm5hbCcsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9MTsgICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBGQVFMb2cgY291bGQgbm90IGJlIGFkZGVkCgo9Y3V0CgpzdWIgRkFRTG9nQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBJbnRlcmZhY2UgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgIG15ICRJUCAgICAgICAgPSAkRU5WeydSRU1PVEVfQUREUid9ICAgICB8fCAnTk9ORSc7CiAgICBteSAkVXNlckFnZW50ID0gJEVOVnsnSFRUUF9VU0VSX0FHRU5UJ30gfHwgJ05PTkUnOwoKICAgICMgZ2V0IGN1cnJlbnQgc3lzdGVtIHRpbWUKICAgIG15ICRTeXN0ZW1UaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpOwoKICAgICMgZGVmaW5lIHRpbWUgcGVyaW9kIHdoZXJlIHJlbG9hZHMgd2lsbCBub3QgYmUgbG9nZ2VkICgxMCBtaW51dGVzKQogICAgbXkgJFJlbG9hZEJsb2NrVGltZSA9IDEwICogNjA7CgogICAgIyBzdWJ0cmFjdCBSZWxvYWRCbG9ja1RpbWUKICAgICRTeXN0ZW1UaW1lID0gJFN5c3RlbVRpbWUgLSAkUmVsb2FkQmxvY2tUaW1lOwoKICAgICMgY29udmVydCB0byB0aW1lc3N0YW1wCiAgICBteSAkVGltZVN0YW1wID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSwKICAgICk7CgogICAgIyBjaGVjayBpZiBhIGxvZyBlbnRyeSBleGlzdHMgbmV3ZXIgdGhhbiB0aGUgUmVsb2FkQmxvY2tUaW1lCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gZmFxX2xvZyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGl0ZW1faWQgPSA/IEFORCBpcCA9ID8gJwogICAgICAgICAgICAuICdBTkQgdXNlcl9hZ2VudCA9ID8gQU5EIGNyZWF0ZWQgPj0gPyAnLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtJdGVtSUR9LCBcJElQLCBcJFVzZXJBZ2VudCwgXCRUaW1lU3RhbXAgXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRBbHJlYWR5RXhpc3RzID0gMDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFscmVhZHlFeGlzdHMgPSAxOwogICAgfQoKICAgIHJldHVybiBpZiAkQWxyZWFkeUV4aXN0czsKCiAgICAjIGluc2VydCBuZXcgbG9nIGVudHJ5CiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGZhcV9sb2cgJwogICAgICAgICAgICAuICcoaXRlbV9pZCwgaW50ZXJmYWNlLCBpcCwgdXNlcl9hZ2VudCwgY3JlYXRlZCkgVkFMVUVTICcKICAgICAgICAgICAgLiAnKD8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wKScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17SXRlbUlEfSwgXCRQYXJhbXtJbnRlcmZhY2V9LCBcJElQLCBcJFVzZXJBZ2VudCwKICAgICAgICBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gRkFRVG9wMTBHZXQoKQoKUmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSB0b3AgMTAgZmFxIGFydGljbGUgaWRzLgoKICAgIG15ICRUb3AxMElEc1JlZiA9ICRGQVFPYmplY3QtPkZBUVRvcDEwR2V0KAogICAgICAgIEludGVyZmFjZSAgID0+ICdwdWJsaWMnLAogICAgICAgIENhdGVnb3J5SURzID0+IFsgMSwgMiwgMyBdLCAgIyAob3B0aW9uYWwpIE9ubHkgc2hvdyB0aGUgVG9wMTAgYXJ0aWNsZXMgZnJvbSB0aGVzZSBjYXRlZ29yaWVzCiAgICAgICAgTGltaXQgICAgICAgPT4gMTAsICAgICAgICAgICAjIChvcHRpb25hbCwgZGVmYXVsdCAxMCkKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFRvcDEwSURzUmVmID0gWwogICAgICAgIHsKICAgICAgICAgICAgJ0l0ZW1JRCcgICAgPT4gMTMsCiAgICAgICAgICAgICdDb3VudCcgICAgID0+IDE1OSwgICAgICAgICAgICAgICAjIG51bWJlciBvZiB2aXNpdHMKICAgICAgICAgICAgJ0ludGVyZmFjZScgPT4gJ3B1YmxpYycsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdJdGVtSUQnICAgID0+IDYsCiAgICAgICAgICAgICdDb3VudCcgICAgID0+IDc4LAogICAgICAgICAgICAnSW50ZXJmYWNlJyA9PiAncHVibGljJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgJ0l0ZW1JRCcgICAgPT4gNCwKICAgICAgICAgICAgJ0NvdW50JyAgICAgPT4gNTksCiAgICAgICAgICAgICdJbnRlcmZhY2UnID0+ICdpbnRlcm5hbCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdJdGVtSUQnICAgID0+IDIwLAogICAgICAgICAgICAnQ291bnQnICAgICA9PiAyOSwKICAgICAgICAgICAgJ0ludGVyZmFjZScgPT4gJ3B1YmxpYycsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdJdGVtSUQnICAgID0+IDEsCiAgICAgICAgICAgICdDb3VudCcgICAgID0+IDI0LAogICAgICAgICAgICAnSW50ZXJmYWNlJyA9PiAnZXh0ZXJuYWwnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAnSXRlbUlEJyAgICA9PiAxMSwKICAgICAgICAgICAgJ0NvdW50JyAgICAgPT4gMjQsCiAgICAgICAgICAgICdJbnRlcmZhY2UnID0+ICdpbnRlcm5hbCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdJdGVtSUQnICAgID0+IDUsCiAgICAgICAgICAgICdDb3VudCcgICAgID0+IDE4LAogICAgICAgICAgICAnSW50ZXJmYWNlJyA9PiAnaW50ZXJuYWwnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAnSXRlbUlEJyAgICA9PiA5LAogICAgICAgICAgICAnQ291bnQnICAgICA9PiAxNiwKICAgICAgICAgICAgJ0ludGVyZmFjZScgPT4gJ2V4dGVybmFsJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgJ0l0ZW1JRCcgICAgPT4gMiwKICAgICAgICAgICAgJ0NvdW50JyAgICAgPT4gMTQsCiAgICAgICAgICAgICdJbnRlcmZhY2UnID0+ICdpbnRlcm5hbCcKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgJ0l0ZW1JRCcgICAgPT4gMTQsCiAgICAgICAgICAgICdDb3VudCcgICAgID0+IDYsCiAgICAgICAgICAgICdJbnRlcmZhY2UnID0+ICdwdWJsaWMnLAogICAgICAgIH0KICAgIF07Cgo9Y3V0CgpzdWIgRkFRVG9wMTBHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSW50ZXJmYWNlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CiAgICB9CgogICAgIyBidWlsZCB2YWxpZCBpZCBzdHJpbmcKICAgIG15ICRWYWxpZElEc1N0cmluZyA9IGpvaW4gJywgJywgJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkSURzR2V0KCk7CgogICAgIyBwcmVwYXJlIFNRTAogICAgbXkgQEJpbmQ7CiAgICBteSAkU1FMID0gJ1NFTEVDVCBpdGVtX2lkLCBjb3VudChpdGVtX2lkKSBhcyBpdGVtY291bnQsIGZhcV9zdGF0ZV90eXBlLm5hbWUsIGFwcHJvdmVkICcKICAgICAgICAuICdGUk9NIGZhcV9sb2csIGZhcV9pdGVtLCBmYXFfc3RhdGUsIGZhcV9zdGF0ZV90eXBlICcKICAgICAgICAuICdXSEVSRSBmYXFfbG9nLml0ZW1faWQgPSBmYXFfaXRlbS5pZCAnCiAgICAgICAgLiAnQU5EIGZhcV9pdGVtLnN0YXRlX2lkID0gZmFxX3N0YXRlLmlkICcKICAgICAgICAuICJBTkQgZmFxX2l0ZW0udmFsaWRfaWQgSU4gKCRWYWxpZElEc1N0cmluZykgIgogICAgICAgIC4gJ0FORCBmYXFfc3RhdGUudHlwZV9pZCA9IGZhcV9zdGF0ZV90eXBlLmlkICc7CgogICAgIyBmaWx0ZXIganVzdCBjYXRlZ29yaWVzIHdpdGggYXQgbGVhc3Qgcm8gcGVybWlzc2lvbgogICAgaWYgKCAkUGFyYW17Q2F0ZWdvcnlJRHN9ICYmIHJlZiAkUGFyYW17Q2F0ZWdvcnlJRHN9IGVxICdBUlJBWScgJiYgQHsgJFBhcmFte0NhdGVnb3J5SURzfSB9ICkgewoKICAgICAgICAjIGludGVnZXIgcXVvdGUgdGhlIGNhdGVnb3J5IGlkcwogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIEB7ICRQYXJhbXtDYXRlZ29yeUlEc30gfSApIHsKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkQ2F0ZWdvcnlJRCwgJ0ludGVnZXInICk7CiAgICAgICAgfQoKICAgICAgICBteSBAU29ydGVkSURzID0gc29ydCBAeyAkUGFyYW17Q2F0ZWdvcnlJRHN9IH07CgogICAgICAgICMgc3BsaXQgSU4gc3RhdGVtZW50IHdpdGggbW9yZSB0aGFuIDkwMCBlbGVtZW50cyBpbiBtb3JlIHN0YXRlbWVudHMgYm9tYmluZWQgd2l0aCBPUgogICAgICAgICMgYmVjYXVzZSBPcmFjbGUgZG9lc24ndCBzdXBwb3J0IG1vcmUgdGhhbiAxMDAwIGVsZW1lbnRzIGluIG9uZSBJTiBzdGF0ZW1lbnQuCiAgICAgICAgbXkgQFNRTFN0cmluZ3M7CiAgICAgICAgTE9PUDoKICAgICAgICB3aGlsZSAoIHNjYWxhciBAU29ydGVkSURzICkgewoKICAgICAgICAgICAgbXkgQFNvcnRlZElEc1BhcnQgPSBzcGxpY2UgQFNvcnRlZElEcywgMCwgOTAwOwoKICAgICAgICAgICAgbXkgJElEU3RyaW5nID0gam9pbiAnLCcsIEBTb3J0ZWRJRHNQYXJ0OwoKICAgICAgICAgICAgcHVzaCBAU1FMU3RyaW5ncywgIiBmYXFfaXRlbS5jYXRlZ29yeV9pZCBJTiAoJElEU3RyaW5nKSAiOwogICAgICAgIH0KCiAgICAgICAgbXkgJFNRTFN0cmluZyA9IGpvaW4gJyBPUiAnLCBAU1FMU3RyaW5nczsKCiAgICAgICAgJFNRTCAuPSAnIEFORCAoICcgLiAkU1FMU3RyaW5nIC4gJyApICc7CiAgICB9CgogICAgIyBmaWx0ZXIgcmVzdWx0cyBmb3IgcHVibGljIGFuZCBjdXN0b21lciBpbnRlcmZhY2UKICAgIGlmICggKCAkUGFyYW17SW50ZXJmYWNlfSBlcSAncHVibGljJyApIHx8ICggJFBhcmFte0ludGVyZmFjZX0gZXEgJ2V4dGVybmFsJyApICkgewoKICAgICAgICAjIG9ubHkgc2hvdyBhcHByb3ZlZCBhcnRpY2xlcwogICAgICAgICRTUUwgLj0gJ0FORCBmYXFfaXRlbS5hcHByb3ZlZCA9IDEgJzsKCiAgICAgICAgIyBvbmx5IHNob3cgdGhlIHB1YmxpYyBhcnRpY2xlcwogICAgICAgICRTUUwgLj0gIkFORCAoICggZmFxX3N0YXRlX3R5cGUubmFtZSA9ICdwdWJsaWMnICkgIjsKCiAgICAgICAgIyBjdXN0b21lcnMgY2FuIGFkZGl0aW9uYWxseSBzZWUgdGhlIGV4dGVybmFsIGFydGljbGVzCiAgICAgICAgaWYgKCAkUGFyYW17SW50ZXJmYWNlfSBlcSAnZXh0ZXJuYWwnICkgewogICAgICAgICAgICAkU1FMIC49ICJPUiAoIGZhcV9zdGF0ZV90eXBlLm5hbWUgPSAnZXh0ZXJuYWwnICkgIjsKICAgICAgICB9CgogICAgICAgICRTUUwgLj0gJykgJzsKICAgIH0KCiAgICAjIGZpbHRlciByZXN1bHRzIGZvciBkZWZpbmVkIHRpbWUgcGVyaW9kCiAgICBpZiAoICRQYXJhbXtTdGFydERhdGV9ICYmICRQYXJhbXtFbmREYXRlfSApIHsKICAgICAgICAkU1FMIC49ICdBTkQgZmFxX2xvZy5jcmVhdGVkID49ID8gQU5EIGZhcV9sb2cuY3JlYXRlZCA8PSA/ICc7CiAgICAgICAgcHVzaCBAQmluZCwgKCBcJFBhcmFte1N0YXJ0RGF0ZX0sIFwkUGFyYW17RW5kRGF0ZX0gKTsKICAgIH0KCiAgICAjIGNvbXBsZXRlIFNRTCBzdGF0ZW1lbnQKICAgICRTUUwgLj0gJ0dST1VQIEJZIGl0ZW1faWQsIGZhcV9zdGF0ZV90eXBlLm5hbWUsIGFwcHJvdmVkICcKICAgICAgICAuICdPUkRFUiBCWSBpdGVtY291bnQgREVTQyc7CgogICAgIyBnZXQgdGhlIHRvcCAxMCBhcnRpY2xlIGlkcyBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gW10gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgQmluZCAgPT4gXEBCaW5kLAogICAgICAgIExpbWl0ID0+ICRQYXJhbXtMaW1pdH0gfHwgMTAsCiAgICApOwoKICAgIG15IEBSZXN1bHQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFJlc3VsdCwgewogICAgICAgICAgICBJdGVtSUQgICAgPT4gJFJvd1swXSwKICAgICAgICAgICAgQ291bnQgICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIEludGVyZmFjZSA9PiAkUm93WzJdLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIFxAUmVzdWx0Owp9Cgo9aXRlbSBGQVFJbmxpbmVBdHRhY2htZW50VVJMVXBkYXRlKCkKClVwZGF0ZXMgdGhlIFVSTHMgb2YgdXBsb2FkZWQgaW5saW5lIGF0dGFjaG1lbnRzLgoKICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRSW5saW5lQXR0YWNobWVudFVSTFVwZGF0ZSgKICAgICAgICBJdGVtSUQgICAgID0+IDEyLAogICAgICAgIEZvcm1JRCAgICAgPT4gNDU2LAogICAgICAgIEZpbGVJRCAgICAgPT4gNSwKICAgICAgICBBdHRhY2htZW50ID0+IFwlQXR0YWNobWVudCwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgIyBvZiB1bmRlZiBpZiBhdHRhY2htZW50IFVSTCBjb3VsZCBub3QgYmUgdXBkYXRlZAoKPWN1dAoKc3ViIEZBUUlubGluZUF0dGFjaG1lbnRVUkxVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIEF0dGFjaG1lbnQgRm9ybUlEIEZpbGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgYXR0YWNobWVudCBpcyBhIGhhc2ggcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkUGFyYW17QXR0YWNobWVudH0gbmUgJ0hBU0gnICYmICEleyAkUGFyYW17QXR0YWNobWVudH0gfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkF0dGFjaG1lbnQgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBvbmx5IGNvbnNpZGVyIGlubGluZSBhdHRhY2htZW50cyBoZXJlICh0aGV5IGhhdmUgYSBjb250ZW50IGlkKQogICAgcmV0dXJuIDEgaWYgISRQYXJhbXtBdHRhY2htZW50fS0+e0NvbnRlbnRJRH07CgogICAgIyBnZXQgZmFxIGRhdGEKICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPkZBUUdldCgKICAgICAgICBJdGVtSUQgICAgID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIHBpY3R1cmUgVVJMIGluIHVwbG9hZCBjYWNoZQogICAgbXkgJFNlYXJjaCA9ICJBY3Rpb249UGljdHVyZVVwbG9hZCAuIEZvcm1JRD1cUSRQYXJhbXtGb3JtSUR9XEUgLiAiCiAgICAgICAgLiAiQ29udGVudElEPVxRJFBhcmFte0F0dGFjaG1lbnR9LT57Q29udGVudElEfVxFIjsKCiAgICAjIHBpY3R1cmUgdXJsIGluIGZhcSBhdHRhY2htZW50CiAgICBteSAkUmVwbGFjZSA9ICJBY3Rpb249QWdlbnRGQVFab29tO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7IgogICAgICAgIC4gIkl0ZW1JRD0kUGFyYW17SXRlbUlEfTtGaWxlSUQ9JFBhcmFte0ZpbGVJRH0iOwoKICAgICMgcmV3cml0ZSBwaWN0dXJlIHVybHMKICAgIEZJRUxEOgogICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDYgKSB7CgogICAgICAgICMgY2hlY2sgaWYgZmllbGQgY29udGFpbnMgc29tZXRoaW5nCiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZBUURhdGF7IkZpZWxkJE51bWJlciJ9OwoKICAgICAgICAjIHJlbW92ZSBuZXdsaW5lcwogICAgICAgICRGQVFEYXRheyJGaWVsZCROdW1iZXIifSA9fiBzeyBbXG5ccl0rIH17fWd4bXM7CgogICAgICAgICMgcmVwbGFjZSB1cmwKICAgICAgICAkRkFRRGF0YXsiRmllbGQkTnVtYmVyIn0gPX4gc3skU2VhcmNofXskUmVwbGFjZX14bXM7CiAgICB9CgogICAgIyB1cGRhdGUgRkFRIGFydGljbGUgd2l0aG91dCB3cml0aW5nIGEgaGlzdG9yeSBlbnRyeQogICAgbXkgJE9rID0gJFNlbGYtPkZBUVVwZGF0ZSgKICAgICAgICAlRkFRRGF0YSwKICAgICAgICBIaXN0b3J5T2ZmICA9PiAxLAogICAgICAgIEFwcHJvdmFsT2ZmID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgdXBkYXRlIHdhcyBzdWNjZXNzZnVsCiAgICBpZiAoICEkT2sgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgdXBkYXRlIEZBUSBJdGVtIyAnJFBhcmFte0l0ZW1JRH0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1iZWdpbiBJbnRlcm5hbDoKCj1pdGVtIF9Vc2VyQ2F0ZWdvcmllcygpCgouLi4uCi4uLi4KCj1jdXQKCnN1YiBfVXNlckNhdGVnb3JpZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2F0ZWdvcmllcyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVVc2VyQ2F0ZWdvcmllczsKCiAgICBQQVJFTlRJRDoKICAgIGZvciBteSAkUGFyZW50SUQgKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAleyAkUGFyYW17Q2F0ZWdvcmllc30gfSApIHsKCiAgICAgICAgbXkgJVN1YkNhdGVnb3JpZXM7CgogICAgICAgIENBVEVHT1JZSUQ6CiAgICAgICAgZm9yIG15ICRDYXRlZ29yeUlEICggc29ydCBrZXlzICV7ICRQYXJhbXtDYXRlZ29yaWVzfS0+eyRQYXJlbnRJRH0gfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgY2F0ZWdvcnkgZ3JvdXBzCiAgICAgICAgICAgIG5leHQgQ0FURUdPUllJRCBpZiAhZGVmaW5lZCAkUGFyYW17Q2F0ZWdvcnlHcm91cHN9LT57JENhdGVnb3J5SUR9OwoKICAgICAgICAgICAgIyBjaGVjayB1c2VyIGdyb3VwcwogICAgICAgICAgICBHUk9VUElEOgogICAgICAgICAgICBmb3IgbXkgJEdyb3VwSUQgKCBzb3J0IGtleXMgJXsgJFBhcmFte0NhdGVnb3J5R3JvdXBzfS0+eyRDYXRlZ29yeUlEfSB9ICkgewoKICAgICAgICAgICAgICAgIG5leHQgR1JPVVBJRCBpZiAhZGVmaW5lZCAkUGFyYW17VXNlckdyb3Vwc30tPnskR3JvdXBJRH07CgogICAgICAgICAgICAgICAgIyBhZGQgY2F0ZWdvcnkKICAgICAgICAgICAgICAgICRTdWJDYXRlZ29yaWVzeyRDYXRlZ29yeUlEfSA9ICRQYXJhbXtDYXRlZ29yaWVzfS0+eyRQYXJlbnRJRH0tPnskQ2F0ZWdvcnlJRH07CgogICAgICAgICAgICAgICAgIyBhZGQgZW1wdHkgaGFzaCBpZiBjYXRlZ29yeSBoYXMgbm8gc3ViY2F0ZWdvcmllcwogICAgICAgICAgICAgICAgaWYgKCAhJFVzZXJDYXRlZ29yaWVzeyRDYXRlZ29yeUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAkVXNlckNhdGVnb3JpZXN7JENhdGVnb3J5SUR9ID0ge307CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbGFzdCBHUk9VUElEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRVc2VyQ2F0ZWdvcmllc3skUGFyZW50SUR9ID0gXCVTdWJDYXRlZ29yaWVzOwogICAgfQogICAgcmV0dXJuIFwlVXNlckNhdGVnb3JpZXM7Cn0KCj1pdGVtIF9GQVFBcHByb3ZhbFVwZGF0ZSgpCgp1cGRhdGUgdGhlIGFwcHJvdmFsIHN0YXRlIG9mIGFuIGFydGljbGUKCiAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPl9GQVFBcHByb3ZhbFVwZGF0ZSgKICAgICAgICBJdGVtSUQgICAgID0+IDEyMywKICAgICAgICBBcHByb3ZlZCAgID0+IDEsICAgICMgMHwxIChkZWZhdWx0IDApCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBfRkFRQXBwcm92YWxVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17QXBwcm92ZWR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBBcHByb3ZlZCBwYXJhbWV0ZXIhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHVwZGF0ZSBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICdVUERBVEUgZmFxX2l0ZW0gU0VUICcKICAgICAgICAgICAgLiAnYXBwcm92ZWQgPSA/LCAnCiAgICAgICAgICAgIC4gJ2NoYW5nZWQgPSBjdXJyZW50X3RpbWVzdGFtcCwgJwogICAgICAgICAgICAuICdjaGFuZ2VkX2J5ID0gPyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17QXBwcm92ZWR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkUGFyYW17SXRlbUlEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGFwcHJvdmFsIGZlYXR1cmUgaXMgYWN0aXZhdGVkIGFuZCBmYXEgYXJ0aWNsZSBpcyBub3QgYXBwcm92ZWQgeWV0CiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkFwcHJvdmFsUmVxdWlyZWQnKSAmJiAhJFBhcmFte0FwcHJvdmVkfSApIHsKCiAgICAgICAgIyBnZXQgZmFxIGRhdGEKICAgICAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT5GQVFHZXQoCiAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBuZXcgYXBwcm92YWwgdGlja2V0CiAgICAgICAgbXkgJE9rID0gJFNlbGYtPl9GQVFBcHByb3ZhbFRpY2tldENyZWF0ZSgKICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgTGFuZ3VhZ2VJRCA9PiAkRkFRRGF0YXtMYW5ndWFnZUlEfSwKICAgICAgICAgICAgRkFRTnVtYmVyICA9PiAkRkFRRGF0YXtOdW1iZXJ9LAogICAgICAgICAgICBUaXRsZSAgICAgID0+ICRGQVFEYXRhe1RpdGxlfSwKICAgICAgICAgICAgU3RhdGVJRCAgICA9PiAkRkFRRGF0YXtTdGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJE9rICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnQ291bGQgbm90IGNyZWF0ZSBhcHByb3ZhbCB0aWNrZXQhJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9GQVFBcHByb3ZhbFRpY2tldENyZWF0ZSgpCgpjcmVhdGVzIGFuIGFwcHJvdmFsIHRpY2tldAoKICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+X0ZBUUFwcHJvdmFsVGlja2V0Q3JlYXRlKAogICAgICAgIEl0ZW1JRCAgICAgPT4gMTIzLAogICAgICAgIENhdGVnb3J5SUQgPT4gMiwKICAgICAgICBMYW5ndWFnZUlEID0+IDEsCiAgICAgICAgRkFRTnVtYmVyICA9PiAxMDIxMSwKICAgICAgICBUaXRsZSAgICAgID0+ICdTb21lIFRpdGxlJywKICAgICAgICBTdGF0ZUlEICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBfRkFRQXBwcm92YWxUaWNrZXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIENhdGVnb3J5SUQgRkFRTnVtYmVyIFRpdGxlIFN0YXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBzdWJqZWN0CiAgICBteSAkU3ViamVjdCA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkFwcHJvdmFsVGlja2V0U3ViamVjdCcpOwogICAgJFN1YmplY3QgPX4gc3sgPE9UUlNfRkFRX05VTUJFUj4gfXskUGFyYW17RkFRTnVtYmVyfX14bXM7CgogICAgIyBjaGVjayBpZiB3ZSBjYW4gZmluZCBleGlzdGluZyBvcGVuIGFwcHJvdmFsIHRpY2tldHMgZm9yIHRoaXMgRkFRIGFydGljbGUKICAgIG15IEBUaWNrZXRJRHMgPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPlRpY2tldFNlYXJjaCgKICAgICAgICBSZXN1bHQgICAgPT4gJ0FSUkFZJywKICAgICAgICBUaXRsZSAgICAgPT4gJFN1YmplY3QsCiAgICAgICAgU3RhdGVUeXBlID0+ICdPcGVuJywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgIyB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhbm90aGVyIGFwcHJvdmFsIHRpY2tldCBpZiB0aGVyZSBpcyBzdGlsbCBhdCBsZWFzdCBvbmUgdGlja2V0IG9wZW4KICAgICMgZm9yIHRoaXMgRkFRIGFydGljbGUKICAgIHJldHVybiAxIGlmIEBUaWNrZXRJRHM7CgogICAgIyBjcmVhdGUgdGlja2V0CiAgICBteSAkVGlja2V0SUQgPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPlRpY2tldENyZWF0ZSgKICAgICAgICBUaXRsZSAgICA9PiAkU3ViamVjdCwKICAgICAgICBRdWV1ZSAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRkFROjpBcHByb3ZhbFF1ZXVlJykgfHwgJ1JhdycsCiAgICAgICAgTG9jayAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgUHJpb3JpdHkgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QXBwcm92YWxUaWNrZXRQcmlvcml0eScpIHx8ICczIG5vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QXBwcm92YWxUaWNrZXREZWZhdWx0U3RhdGUnKSB8fCAnbmV3JywKICAgICAgICBPd25lcklEICA9PiAxLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgIGlmICgkVGlja2V0SUQpIHsKCiAgICAgICAgIyBnZXQgVXNlck5hbWUKICAgICAgICBteSAkVXNlck5hbWUgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTmFtZSgKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGZhcSBzdGF0ZQogICAgICAgIG15ICVTdGF0ZSA9ICRTZWxmLT5TdGF0ZUdldCgKICAgICAgICAgICAgU3RhdGVJRCA9PiAkUGFyYW17U3RhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjYXRlZ29yaWVzIGNhbiBiZSBuZXN0ZWQ7IHlvdSBjYW4gaGF2ZSBzb21lOjpsb25nOjpjYXRlZ29yeS4KICAgICAgICBteSBAQ2F0ZWdvcnlOYW1lczsKICAgICAgICBteSAkQ2F0ZWdvcnlJRCA9ICRQYXJhbXtDYXRlZ29yeUlEfTsKICAgICAgICBDQVRFR09SWToKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICBteSAlQ2F0ZWdvcnkgPSAkU2VsZi0+Q2F0ZWdvcnlHZXQoCiAgICAgICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAQ2F0ZWdvcnlOYW1lcywgJENhdGVnb3J5e05hbWV9OwogICAgICAgICAgICBsYXN0IENBVEVHT1JZIGlmICEkQ2F0ZWdvcnl7UGFyZW50SUR9OwogICAgICAgICAgICAkQ2F0ZWdvcnlJRCA9ICRDYXRlZ29yeXtQYXJlbnRJRH07CiAgICAgICAgfQogICAgICAgIG15ICRDYXRlZ29yeSA9IGpvaW4oICc6OicsIHJldmVyc2UgQENhdGVnb3J5TmFtZXMgKTsKCiAgICAgICAgbXkgJExhbmd1YWdlOwogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpICkgewogICAgICAgICAgICAkTGFuZ3VhZ2UgPSAkU2VsZi0+TGFuZ3VhZ2VMb29rdXAoCiAgICAgICAgICAgICAgICBMYW5ndWFnZUlEID0+ICRQYXJhbXtMYW5ndWFnZUlEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYW5ndWFnZSA9ICctJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGJvZHkgZnJvbSBjb25maWcKICAgICAgICBteSAkQm9keSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OkFwcHJvdmFsVGlja2V0Qm9keScpOwogICAgICAgICRCb2R5ID1+IHN7IDxPVFJTX0ZBUV9DQVRFR09SWUlEPiB9eyRQYXJhbXtDYXRlZ29yeUlEfX14bXM7CiAgICAgICAgJEJvZHkgPX4gc3sgPE9UUlNfRkFRX0NBVEVHT1JZPiAgIH17JENhdGVnb3J5fXhtczsKICAgICAgICAkQm9keSA9fiBzeyA8T1RSU19GQVFfTEFOR1VBR0U+ICAgfXskTGFuZ3VhZ2V9eG1zOwogICAgICAgICRCb2R5ID1+IHN7IDxPVFJTX0ZBUV9JVEVNSUQ+ICAgICB9eyRQYXJhbXtJdGVtSUR9fXhtczsKICAgICAgICAkQm9keSA9fiBzeyA8T1RSU19GQVFfTlVNQkVSPiAgICAgfXskUGFyYW17RkFRTnVtYmVyfX14bXM7CiAgICAgICAgJEJvZHkgPX4gc3sgPE9UUlNfRkFRX1RJVExFPiAgICAgIH17JFBhcmFte1RpdGxlfX14bXM7CiAgICAgICAgJEJvZHkgPX4gc3sgPE9UUlNfRkFRX0FVVEhPUj4gICAgIH17JFVzZXJOYW1lfXhtczsKICAgICAgICAkQm9keSA9fiBzeyA8T1RSU19GQVFfU1RBVEU+ICAgICAgfXskU3RhdGV7TmFtZX19eG1zOwoKICAgICAgICAjIGNyZWF0ZSBhcnRpY2xlCiAgICAgICAgbXkgJEFydGljbGVJRCA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+QXJ0aWNsZUNyZWF0ZSgKICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBBcnRpY2xlVHlwZSA9PiAnbm90ZS1pbnRlcm5hbCcsCiAgICAgICAgICAgIFNlbmRlclR5cGUgID0+ICdzeXN0ZW0nLAogICAgICAgICAgICBTdWJqZWN0ICAgICA9PiAkU3ViamVjdCwKICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJEJvZHksCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgPT4gJ1N5c3RlbVJlcXVlc3QnLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PgogICAgICAgICAgICAgICAgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Tm90ZScpLT57SGlzdG9yeUNvbW1lbnR9CiAgICAgICAgICAgICAgICB8fCAnJywKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJEFydGljbGVJRDsKICAgIH0KCiAgICByZXR1cm47Cn0KCiMKIyBEZWxldGVzIGFsbCBuZWVkZWQgRkFRIGl0ZW0gY2FjaGUgZW50cmllcyBmb3IgYSBnaXZlbiBGQVEgSXRlbUlELgojCnN1YiBfRGVsZXRlRnJvbUZBUUNhY2hlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhJdGVtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIENsZWFyIEZBUUdldCBjYWNoZQogICAgJFNlbGYtPntDYWNoZU9iamVjdH0tPkRlbGV0ZSgKICAgICAgICBUeXBlID0+ICdGQVEnLAogICAgICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJFBhcmFte0l0ZW1JRH0gLiAnOjpJdGVtRmllbGRzOjoxJywKICAgICk7CiAgICAkU2VsZi0+e0NhY2hlT2JqZWN0fS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICA9PiAnRkFRR2V0OjpJdGVtSUQ6OicgLiAkUGFyYW17SXRlbUlEfSAuICc6Okl0ZW1GaWVsZHM6OjAnLAogICAgKTsKCiAgICAjIENsZWFyIEl0ZW1GZWxkR2V0IGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlT2JqZWN0fS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICA9PiAnSXRlbUZpZWxkR2V0OjpJdGVtSUQ6OicgLiAkUGFyYW17SXRlbUlEfSwKICAgICk7Cn0KCjE7Cgo9ZW5kIEludGVybmFsOgoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OkZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R3JvdXA7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0IEVuY29kZU9iamVjdCBUaW1lT2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntHcm91cE9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R3JvdXAtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57RkFRT2JqZWN0fSAgID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gTGlua0xpc3RXaXRoRGF0YSgpCgpmaWxsIHVwIHRoZSBsaW5rIGxpc3Qgd2l0aCBkYXRhCgogICAgJFN1Y2Nlc3MgPSAkTGlua09iamVjdEJhY2tlbmQtPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgTGlua0xpc3QgPT4gJEhhc2hSZWYsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0xpc3RXaXRoRGF0YSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhMaW5rTGlzdCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbGluayBsaXN0CiAgICBpZiAoIHJlZiAkUGFyYW17TGlua0xpc3R9IG5lICdIQVNIJyApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0xpbmtMaXN0IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte0xpbmtMaXN0fSB9ICkgewoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfSB9ICkgewoKICAgICAgICAgICAgRkFRSUQ6CiAgICAgICAgICAgIGZvciBteSAkRkFRSUQgKCBzb3J0IGtleXMgJXsgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGZhcSBkYXRhCiAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBpZCBmcm9tIGhhc2ggaWYgbm8gZmFxIGRhdGEgd2FzIGZvdW5kCiAgICAgICAgICAgICAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRGQVFJRH07CiAgICAgICAgICAgICAgICAgICAgbmV4dCBGQVFJRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZCBmYXEgZGF0YQogICAgICAgICAgICAgICAgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRGQVFJRH0gPSBcJUZBUURhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIE9iamVjdFBlcm1pc3Npb24oKQoKY2hlY2tzIHJlYWQgcGVybWlzc2lvbiBmb3IgYSBnaXZlbiBvYmplY3QgYW5kIFVzZXJJRC4KCiAgICAkUGVybWlzc2lvbiA9ICRMaW5rT2JqZWN0LT5PYmplY3RQZXJtaXNzaW9uKAogICAgICAgIE9iamVjdCAgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG1vZHVsZSByZWdpc3RyeSBvZiBBZ2VudEZBUVpvb20KICAgIG15ICRNb2R1bGVSZWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57QWdlbnRGQVFab29tfTsKCiAgICAjIGRvIG5vdCBncmFudCBhY2Nlc3MgaWYgZnJvbnRlbmQgbW9kdWxlIGlzIG5vdCByZWdpc3RlcmVkCiAgICByZXR1cm4gaWYgISRNb2R1bGVSZWc7CgogICAgIyBncmFudCBhY2Nlc3MgaWYgbW9kdWxlIHBlcm1pc3NvbiBoYXMgbm8gR3JvdXAgb3IgR3JvdXBSbyBkZWZpbmVkCiAgICBpZiAoICEkTW9kdWxlUmVnLT57R3JvdXBSb30gJiYgISRNb2R1bGVSZWctPntHcm91cH0gKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgUEVSTUlTU0lPTjoKICAgIGZvciBteSAkUGVybWlzc2lvbiAocXcoR3JvdXBSbyBHcm91cCkpIHsKCiAgICAgICAgbmV4dCBQRVJNSVNTSU9OIGlmICEkTW9kdWxlUmVnLT57JFBlcm1pc3Npb259OwogICAgICAgIG5leHQgUEVSTUlTU0lPTiBpZiByZWYgJE1vZHVsZVJlZy0+eyRQZXJtaXNzaW9ufSBuZSAnQVJSQVknOwoKICAgICAgICBmb3IgbXkgJEdyb3VwICggQHsgJE1vZHVsZVJlZy0+eyRQZXJtaXNzaW9ufSB9ICkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGdyb3VwIGlkCiAgICAgICAgICAgIG15ICRHcm91cElEID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTG9va3VwKCBHcm91cCA9PiAkR3JvdXAgKTsKCiAgICAgICAgICAgIG15ICRUeXBlOwogICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIGVxICdHcm91cFJvJyApIHsKICAgICAgICAgICAgICAgICRUeXBlID0gJ3JvJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRQZXJtaXNzaW9uIGVxICdHcm91cCcgKSB7CiAgICAgICAgICAgICAgICAkVHlwZSA9ICdydyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IHVzZXIgZ3JvdXBzLCB3aGVyZSB0aGUgdXNlciBoYXMgdGhlIGFwcHJvcHJpYXRlIHByaXZpbGVnZQogICAgICAgICAgICBteSAlR3JvdXBzID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIFR5cGUgICA9PiAkVHlwZSwKICAgICAgICAgICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdyYW50IGFjY2VzcyBpZiBhZ2VudCBpcyBhIG1lbWJlciBpbiB0aGUgZ3JvdXAKICAgICAgICAgICAgcmV0dXJuIDEgaWYgJEdyb3Vwc3skR3JvdXBJRH07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKPWl0ZW0gT2JqZWN0RGVzY3JpcHRpb25HZXQoKQoKcmV0dXJuIGEgaGFzaCBvZiBvYmplY3QgZGVzY3JpcHRpb25zCgpSZXR1cm4KICAgICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gIkZBUSMgMTIzNCIsCiAgICAgICAgTG9uZyAgID0+ICJGQVEjIDEyMzQ6IEZBUVRpdGxlIiwKICAgICk7CgogICAgJURlc2NyaXB0aW9uID0gJExpbmtPYmplY3QtPk9iamVjdERlc2NyaXB0aW9uR2V0KAogICAgICAgIEtleSAgICAgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0RGVzY3JpcHRpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0IEtleSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICBteSAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICdGQVEnLAogICAgICAgIExvbmcgICA9PiAnRkFRJywKICAgICk7CgogICAgcmV0dXJuICVEZXNjcmlwdGlvbiBpZiAkUGFyYW17TW9kZX0gJiYgJFBhcmFte01vZGV9IGVxICdUZW1wb3JhcnknOwoKICAgICMgZ2V0IGZhcQogICAgbXkgJUZBUSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJUZBUTsKCiAgICAjIGRlZmluZSBkZXNjcmlwdGlvbiB0ZXh0CiAgICBteSAkRkFRSG9vayAgICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6RkFRSG9vaycpOwogICAgbXkgJERlc2NyaXB0aW9uVGV4dCA9ICIkRkFRSG9vayAkRkFRe051bWJlcn0iOwoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICREZXNjcmlwdGlvblRleHQsCiAgICAgICAgTG9uZyAgID0+ICIkRGVzY3JpcHRpb25UZXh0OiAkRkFRe1RpdGxlfSIsCiAgICApOwoKICAgIHJldHVybiAlRGVzY3JpcHRpb247Cn0KCj1pdGVtIE9iamVjdFNlYXJjaCgpCgpyZXR1cm4gYSBoYXNoIGxpc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzCgpSZXR1cm4KICAgICRTZWFyY2hMaXN0ID0gewogICAgICAgIE5PVExJTktFRCA9PiB7CiAgICAgICAgICAgIFNvdXJjZSA9PiB7CiAgICAgICAgICAgICAgICAxMiAgPT4gJERhdGFPZkl0ZW0xMiwKICAgICAgICAgICAgICAgIDIxMiA9PiAkRGF0YU9mSXRlbTIxMiwKICAgICAgICAgICAgICAgIDMzMiA9PiAkRGF0YU9mSXRlbTMzMiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfTsKCiAgICAkU2VhcmNoTGlzdCA9ICRMaW5rT2JqZWN0QmFja2VuZC0+T2JqZWN0U2VhcmNoKAogICAgICAgIFNlYXJjaFBhcmFtcyA9PiAkSGFzaFJlZiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgcGFyYW1zCiAgICAkUGFyYW17U2VhcmNoUGFyYW1zfSB8fD0ge307CgogICAgIyBhZGQgd2lsZGNhcmRzCiAgICBteSAlU2VhcmNoOwogICAgaWYgKCAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e1RpdGxlfSApIHsKICAgICAgICAkU2VhcmNoe1RpdGxlfSA9ICcqJyAuICRQYXJhbXtTZWFyY2hQYXJhbXN9LT57VGl0bGV9IC4gJyonOwogICAgfQogICAgaWYgKCAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e051bWJlcn0gKSB7CiAgICAgICAgJFNlYXJjaHtOdW1iZXJ9ID0gJyonIC4gJFBhcmFte1NlYXJjaFBhcmFtc30tPntOdW1iZXJ9IC4gJyonOwogICAgfQogICAgaWYgKCAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e1doYXR9ICkgewogICAgICAgICRTZWFyY2h7V2hhdH0gPSAnKicgLiAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e1doYXR9IC4gJyonOwogICAgfQoKICAgICMgc2VhcmNoIHRoZSBmYXFzCiAgICBteSBARkFRSURzID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFTZWFyY2goCiAgICAgICAgJXsgJFBhcmFte1NlYXJjaFBhcmFtc30gfSwKICAgICAgICAlU2VhcmNoLAogICAgICAgIE9yZGVyICA9PiAnQ3JlYXRlZCcsCiAgICAgICAgU29ydCAgID0+ICdkb3duJywKICAgICAgICBMaW1pdCAgPT4gNTAsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlU2VhcmNoTGlzdDsKICAgIEZBUUlEOgogICAgZm9yIG15ICRGQVFJRCAoQEZBUUlEcykgewoKICAgICAgICAjIGdldCBGQVEgZGF0YQogICAgICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFHZXQoCiAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEZBUUlELAogICAgICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBGQVFJRCBpZiAhJUZBUURhdGE7CgogICAgICAgICMgYWRkIEZBUSBkYXRhCiAgICAgICAgJFNlYXJjaExpc3R7Tk9UTElOS0VEfS0+e1NvdXJjZX0tPnskRkFRSUR9ID0gXCVGQVFEYXRhOwogICAgfQoKICAgIHJldHVybiBcJVNlYXJjaExpc3Q7Cn0KCj1pdGVtIExpbmtBZGRQcmUoKQoKbGluayBhZGQgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ0ZBUScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnRkFRJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0FkZFByZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIExpbmtBZGRQb3N0KCkKCmxpbmsgYWRkIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnRkFRJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnRkFRJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0FkZFBvc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rRGVsZXRlUHJlKCkKCmxpbmsgZGVsZXRlIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdGQVEnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0ZBUScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtEZWxldGVQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rRGVsZXRlUG9zdCgpCgpsaW5rIGRlbGV0ZSBwb3N0IGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdGQVEnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdGQVEnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rRGVsZXRlUG9zdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpTdGF0aWM6OkZBUUFjY2VzczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIERhdGU6OlBjYWxjIHF3KERheXNfaW5fTW9udGgpOwp1c2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBhbGwgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhEQk9iamVjdCBDb25maWdPYmplY3QgTG9nT2JqZWN0IFVzZXJJRCkpIHsKICAgICAgICBkaWUgIkdvdCBubyAkT2JqZWN0IiBpZiAhJFNlbGYtPnskT2JqZWN0fTsKICAgIH0KCiAgICAjIGNyZWF0ZSBuZWVkZWQgb2JqZWN0CiAgICAkU2VsZi0+e0ZBUU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBQYXJhbSB7CgogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICBteSBAUGFyYW1zID0gKCk7CgogICAgIyBnZXQgY3VycmVudCB0aW1lCiAgICBteSAoICRzLCAkbSwgJGgsICRELCAkTSwgJFkgKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICk7CiAgICAkRCA9IHNwcmludGYoICIlMDJkIiwgJEQgKTsKICAgICRNID0gc3ByaW50ZiggIiUwMmQiLCAkTSApOwogICAgJFkgPSBzcHJpbnRmKCAiJTAyZCIsICRZICk7CgogICAgIyBjcmVhdGUgcG9zc2libGUgdGltZSBzZWxlY3Rpb25zCiAgICBteSAlWWVhciA9IG1hcCB7ICRfLCAkXyB9ICggJFkgLSAxMCAuLiAkWSArIDEgKTsKICAgIG15ICVNb250aCA9IG1hcCB7IHNwcmludGYoICIlMDJkIiwgJF8gKSwgc3ByaW50ZiggIiUwMmQiLCAkXyApIH0gKCAxIC4uIDEyICk7CiAgICBteSAlRGF5ICAgPSBtYXAgeyBzcHJpbnRmKCAiJTAyZCIsICRfICksIHNwcmludGYoICIlMDJkIiwgJF8gKSB9ICggMSAuLiAzMSApOwoKICAgIHB1c2ggQFBhcmFtcywgewogICAgICAgIEZyb250ZW5kICAgPT4gJ1N0YXJ0IGRheScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnU3RhcnREYXknLAogICAgICAgIE11bHRpcGxlICAgPT4gMCwKICAgICAgICBTaXplICAgICAgID0+IDAsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAnMDEnLAogICAgICAgIERhdGEgICAgICAgPT4gewogICAgICAgICAgICAlRGF5LAogICAgICAgIH0sCiAgICB9OwogICAgcHVzaCBAUGFyYW1zLCB7CiAgICAgICAgRnJvbnRlbmQgICA9PiAnU3RhcnQgbW9udGgnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1N0YXJ0TW9udGgnLAogICAgICAgIE11bHRpcGxlICAgPT4gMCwKICAgICAgICBTaXplICAgICAgID0+IDAsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkTSwKICAgICAgICBEYXRhICAgICAgID0+IHsKICAgICAgICAgICAgJU1vbnRoLAogICAgICAgIH0sCiAgICB9OwogICAgcHVzaCBAUGFyYW1zLCB7CiAgICAgICAgRnJvbnRlbmQgICA9PiAnU3RhcnQgeWVhcicsCiAgICAgICAgTmFtZSAgICAgICA9PiAnU3RhcnRZZWFyJywKICAgICAgICBNdWx0aXBsZSAgID0+IDAsCiAgICAgICAgU2l6ZSAgICAgICA9PiAwLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFksCiAgICAgICAgRGF0YSAgICAgICA9PiB7CiAgICAgICAgICAgICVZZWFyLAogICAgICAgIH0sCiAgICB9OwogICAgcHVzaCBAUGFyYW1zLCB7CiAgICAgICAgRnJvbnRlbmQgICA9PiAnRW5kIGRheScsCiAgICAgICAgTmFtZSAgICAgICA9PiAnRW5kRGF5JywKICAgICAgICBNdWx0aXBsZSAgID0+IDAsCiAgICAgICAgU2l6ZSAgICAgICA9PiAwLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJEQsCiAgICAgICAgRGF0YSAgICAgICA9PiB7CiAgICAgICAgICAgICVEYXksCiAgICAgICAgfSwKICAgIH07CiAgICBwdXNoIEBQYXJhbXMsIHsKICAgICAgICBGcm9udGVuZCAgID0+ICdFbmQgbW9udGgnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0VuZE1vbnRoJywKICAgICAgICBNdWx0aXBsZSAgID0+IDAsCiAgICAgICAgU2l6ZSAgICAgICA9PiAwLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJE0sCiAgICAgICAgRGF0YSAgICAgICA9PiB7CiAgICAgICAgICAgICVNb250aCwKICAgICAgICB9LAogICAgfTsKICAgIHB1c2ggQFBhcmFtcywgewogICAgICAgIEZyb250ZW5kICAgPT4gJ0VuZCB5ZWFyJywKICAgICAgICBOYW1lICAgICAgID0+ICdFbmRZZWFyJywKICAgICAgICBNdWx0aXBsZSAgID0+IDAsCiAgICAgICAgU2l6ZSAgICAgICA9PiAwLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFksCiAgICAgICAgRGF0YSAgICAgICA9PiB7CiAgICAgICAgICAgICVZZWFyLAogICAgICAgIH0sCiAgICB9OwoKICAgIHJldHVybiBAUGFyYW1zOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhTdGFydFllYXIgU3RhcnRNb250aCBTdGFydERheSBFbmRZZWFyIEVuZE1vbnRoIEVuZERheSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRQYXJhbU5hbWUhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNvcnJlY3Qgc3RhcnQgZGF5IG9mIG1vbnRoIGlmIGVudGVyZWQgd3JvbmcgYnkgdXNlcgogICAgbXkgJFN0YXJ0RGF5ID0gc3ByaW50ZiggIiUwMmQiLCBEYXlzX2luX01vbnRoKCAkUGFyYW17U3RhcnRZZWFyfSwgJFBhcmFte1N0YXJ0TW9udGh9ICkgKTsKICAgIGlmICggJFBhcmFte1N0YXJ0RGF5fSA8ICRTdGFydERheSApIHsKICAgICAgICAkU3RhcnREYXkgPSAkUGFyYW17U3RhcnREYXl9OwogICAgfQoKICAgICMgY29ycmVjdCBlbmQgZGF5IG9mIG1vbnRoIGlmIGVudGVyZWQgd3JvbmcgYnkgdXNlcgogICAgbXkgJEVuZERheSA9IHNwcmludGYoICIlMDJkIiwgRGF5c19pbl9Nb250aCggJFBhcmFte0VuZFllYXJ9LCAkUGFyYW17RW5kTW9udGh9ICkgKTsKICAgIGlmICggJFBhcmFte0VuZERheX0gPCAkRW5kRGF5ICkgewogICAgICAgICRFbmREYXkgPSAkUGFyYW17RW5kRGF5fTsKICAgIH0KCiAgICAjIHNldCBzdGFydCBhbmQgZW5kIGRhdGUKICAgIG15ICRTdGFydERhdGUgPSAiJFBhcmFte1N0YXJ0WWVhcn0tJFBhcmFte1N0YXJ0TW9udGh9LSRTdGFydERheSAwMDowMDowMCI7CiAgICBteSAkRW5kRGF0ZSAgID0gIiRQYXJhbXtFbmRZZWFyfS0kUGFyYW17RW5kTW9udGh9LSRFbmREYXkgMjM6NTk6NTkiOwoKICAgICMgZ2V0IGEgY291bnQgb2YgYWxsIGZhcSBhcnRpY2xlcwogICAgbXkgJFRvcDEwSXRlbUlEc1JlZiA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRVG9wMTBHZXQoCiAgICAgICAgSW50ZXJmYWNlID0+ICdpbnRlcm5hbCcsCiAgICAgICAgU3RhcnREYXRlID0+ICRTdGFydERhdGUsCiAgICAgICAgRW5kRGF0ZSAgID0+ICRFbmREYXRlLAogICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgYnVpbGQgcmVzdWx0IHRhYmxlCiAgICBteSBARGF0YTsKICAgIGZvciBteSAkSXRlbUlEUmVmICggQHskVG9wMTBJdGVtSURzUmVmfSApIHsKCiAgICAgICAgIyBnZXQgZmFxIGRhdGEKICAgICAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+RkFRR2V0KAogICAgICAgICAgICBJdGVtSUQgICAgID0+ICRJdGVtSURSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHZvdGUgZGF0YQogICAgICAgIG15ICRWb3RlRGF0YSA9ICRTZWxmLT57RkFRT2JqZWN0fS0+SXRlbVZvdGVEYXRhR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRFJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBteSAkVm90ZVJlc3VsdCA9IHNwcmludGYoCiAgICAgICAgICAgICIlMC4iCiAgICAgICAgICAgICAgICAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KAogICAgICAgICAgICAgICAgIkZBUTo6RXhwbG9yZXI6Okl0ZW1MaXN0OjpWb3RpbmdSZXN1bHREZWNpbWFsUGxhY2VzIgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLiAiZiIsCiAgICAgICAgICAgICRWb3RlRGF0YS0+e1Jlc3VsdH0KICAgICAgICAgICAgICAgIHx8IDAKICAgICAgICApOwogICAgICAgIG15ICRWb3RlcyA9ICRWb3RlRGF0YS0+e1ZvdGVzfSB8fCAwOwoKICAgICAgICAjIGJ1aWxkIHRhYmxlIHJvdwogICAgICAgIHB1c2ggQERhdGEsIFsKICAgICAgICAgICAgJEZBUURhdGF7TnVtYmVyfSwKICAgICAgICAgICAgJEZBUURhdGF7VGl0bGV9LAogICAgICAgICAgICAkSXRlbUlEUmVmLT57Q291bnR9LAogICAgICAgICAgICAkVm90ZVJlc3VsdCwKICAgICAgICAgICAgJFZvdGVzLAogICAgICAgIF07CiAgICB9CgogICAgIyBzZXQgcmVwb3J0IHRpdGxlCiAgICBteSAkVGl0bGUgPSAiJFBhcmFte1N0YXJ0WWVhcn0tJFBhcmFte1N0YXJ0TW9udGh9LSRTdGFydERheSAtICRQYXJhbXtFbmRZZWFyfS0kUGFyYW17RW5kTW9udGh9LSRFbmREYXkiOwoKICAgICMgdGFibGUgaGVhZGxpbmVzCiAgICBteSBASGVhZERhdGEgPSAoCiAgICAgICAgJ0ZBUSAjJywKICAgICAgICAnVGl0bGUnLAogICAgICAgICdDb3VudCcsCiAgICAgICAgJ1ZvdGUgUmVzdWx0JywKICAgICAgICAnVm90ZXMnLAogICAgKTsKCiAgICBteSBAUmVzdWx0ID0gKCBbJFRpdGxlXSwgW0BIZWFkRGF0YV0sIEBEYXRhICk7CgogICAgcmV0dXJuIEBSZXN1bHQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwoKbXkgJEZBUU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyggJXskU2VsZn0gKTsKCm15ICRGQVFJRCA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgIFRpdGxlICAgICAgPT4gJ1NvbWUgVGV4dCcsCiAgICBDYXRlZ29yeUlEID0+IDEsCiAgICBTdGF0ZUlEICAgID0+IDEsCiAgICBMYW5ndWFnZUlEID0+IDEsCiAgICBLZXl3b3JkcyAgID0+ICdzb21lIGtleXdvcmRzJywKICAgIEZpZWxkMSAgICAgPT4gJ1Byb2JsZW0uLi4nLAogICAgRmllbGQyICAgICA9PiAnU29sdXRpb24uLi4nLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRkFRSUQsCiAgICAiRkFRQWRkKCkgLSAxIiwKKTsKCm15ICVGQVEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCm15ICVGQVFUZXN0ID0gKAogICAgVGl0bGUgICAgICA9PiAnU29tZSBUZXh0JywKICAgIENhdGVnb3J5SUQgPT4gMSwKICAgIFN0YXRlSUQgICAgPT4gMSwKICAgIExhbmd1YWdlSUQgPT4gMSwKICAgIEtleXdvcmRzICAgPT4gJ3NvbWUga2V5d29yZHMnLAogICAgRmllbGQxICAgICA9PiAnUHJvYmxlbS4uLicsCiAgICBGaWVsZDIgICAgID0+ICdTb2x1dGlvbi4uLicsCik7Cgpmb3IgbXkgJFRlc3QgKCBzb3J0IGtleXMgJUZBUVRlc3QgKSB7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEZBUXskVGVzdH0sCiAgICAgICAgJEZBUVRlc3R7JFRlc3R9LAogICAgICAgICJGQVFHZXQoKSAtICRUZXN0IiwKICAgICk7Cn0KCm15ICRGQVFVcGRhdGUgPSAkRkFRT2JqZWN0LT5GQVFVcGRhdGUoCiAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgIENhdGVnb3J5SUQgPT4gMSwKICAgIFN0YXRlSUQgICAgPT4gMiwKICAgIExhbmd1YWdlSUQgPT4gMiwKICAgIEFwcHJvdmVkICAgPT4gMSwKICAgIFRpdGxlICAgICAgPT4gJ1NvbWUgVGV4dDInLAogICAgS2V5d29yZHMgICA9PiAnc29tZSBrZXl3b3JkczInLAogICAgRmllbGQxICAgICA9PiAnUHJvYmxlbS4uLjInLAogICAgRmllbGQyICAgICA9PiAnU29sdXRpb24gZm91bmQuLi4yJywKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiVGQVEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiVGQVFUZXN0ID0gKAogICAgVGl0bGUgICAgICA9PiAnU29tZSBUZXh0MicsCiAgICBDYXRlZ29yeUlEID0+IDEsCiAgICBTdGF0ZUlEICAgID0+IDIsCiAgICBMYW5ndWFnZUlEID0+IDIsCiAgICBLZXl3b3JkcyAgID0+ICdzb21lIGtleXdvcmRzMicsCiAgICBGaWVsZDEgICAgID0+ICdQcm9ibGVtLi4uMicsCiAgICBGaWVsZDIgICAgID0+ICdTb2x1dGlvbiBmb3VuZC4uLjInLAopOwoKZm9yIG15ICRUZXN0ICggc29ydCBrZXlzICVGQVFUZXN0ICkgewogICAgJFNlbGYtPklzKAogICAgICAgICRGQVFUZXN0eyRUZXN0fSwKICAgICAgICAkRkFReyRUZXN0fSwKICAgICAgICAiRkFRR2V0KCkgLSAkVGVzdCIsCiAgICApOwp9CgpteSAkT2sgPSAkRkFRT2JqZWN0LT5Wb3RlQWRkKAogICAgQ3JlYXRlZEJ5ID0+ICdTb21lIFRleHQnLAogICAgSXRlbUlEICAgID0+ICRGQVFJRCwKICAgIElQICAgICAgICA9PiAnNTQuNDMuMzAuMScsCiAgICBJbnRlcmZhY2UgPT4gJzInLAogICAgUmF0ZSAgICAgID0+IDEwMCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkT2ssCiAgICAiVm90ZUFkZCgpIiwKKTsKCm15ICRWb3RlID0gJEZBUU9iamVjdC0+Vm90ZUdldCgKICAgIENyZWF0ZUJ5ICA9PiAnU29tZSBUZXh0JywKICAgIEl0ZW1JRCAgICA9PiAkRkFRSUQsCiAgICBJUCAgICAgICAgPT4gJzU0LjQzLjMwLjEnLAogICAgSW50ZXJmYWNlID0+ICcyJywKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgJFZvdGUtPntJUH0sCiAgICAnNTQuNDMuMzAuMScsCiAgICAiVm90ZUdldCgpIC0gSVAiLAopOwoKbXkgJEZBUUlEMiA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgIFRpdGxlICAgICAgPT4gJ1RpdGxlJywKICAgIENhdGVnb3J5SUQgPT4gMSwKICAgIFN0YXRlSUQgICAgPT4gMSwKICAgIExhbmd1YWdlSUQgPT4gMSwKICAgIEtleXdvcmRzICAgPT4gJycsCiAgICBGaWVsZDEgICAgID0+ICdQcm9ibGVtIERlc2NyaXB0aW9uIDEuLi4nLAogICAgRmllbGQyICAgICA9PiAnU29sdXRpb24gbm90IGZvdW5kMS4uLicsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRGQVFJRDIsCiAgICAiRkFRQWRkKCkgLSAyIiwKKTsKCm15ICRIb21lICAgICAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSG9tZScpOwpteSBAQXR0YWNobWVudFRlc3RzID0gKAogICAgewogICAgICAgIEZpbGUgPT4gJ0ZBUS1UZXN0MS5wZGYnLAogICAgICAgIE1ENSAgPT4gJzVlZTc2N2YzYjY4ZjI0YTkyMTNlMGJlZjgyZGM1M2U1JywKICAgIH0sCiAgICB7CiAgICAgICAgRmlsZSA9PiAnRkFRLVRlc3QxLmRvYycsCiAgICAgICAgTUQ1ICA9PiAnMmU1MjAwMzZhMGNkYTZhODA2YTg4MzhiMTAwMGQ5ZDcnLAogICAgfSwKKTsKZm9yIG15ICRBdHRhY2htZW50VGVzdCAoQEF0dGFjaG1lbnRUZXN0cykgewogICAgbXkgJENvbnRlbnRTQ0FMQVJSZWYgPSAkU2VsZi0+e01haW5PYmplY3R9LT5GaWxlUmVhZCgKICAgICAgICBMb2NhdGlvbiA9PiAkSG9tZSAuICcvc2NyaXB0cy90ZXN0L3NhbXBsZS8nIC4gJEF0dGFjaG1lbnRUZXN0LT57RmlsZX0sCiAgICApOwogICAgbXkgJEFkZCA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRBZGQoCiAgICAgICAgSXRlbUlEICAgICAgPT4gJEZBUUlEMiwKICAgICAgICBDb250ZW50ICAgICA9PiAkeyRDb250ZW50U0NBTEFSUmVmfSwKICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC94bWwnLAogICAgICAgIEZpbGVuYW1lICAgID0+ICRBdHRhY2htZW50VGVzdC0+e0ZpbGV9LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEFkZCwKICAgICAgICAiQXR0YWNobWVudEFkZCgpIC0gJEF0dGFjaG1lbnRUZXN0LT57RmlsZX0iLAogICAgKTsKICAgIG15IEBBdHRhY2htZW50SW5kZXggPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50SW5kZXgoCiAgICAgICAgSXRlbUlEID0+ICRGQVFJRDIsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJUZpbGUgPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50R2V0KAogICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQyLAogICAgICAgIEZpbGVJRCA9PiAkQXR0YWNobWVudEluZGV4WzBdLT57RmlsZUlEfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEZpbGV7RmlsZW5hbWV9LAogICAgICAgICRBdHRhY2htZW50VGVzdC0+e0ZpbGV9LAogICAgICAgICJBdHRhY2htZW50R2V0KCkgLSBGaWxlbmFtZSAkQXR0YWNobWVudFRlc3QtPntGaWxlfSIsCiAgICApOwogICAgbXkgJE1ENSA9ICRTZWxmLT57TWFpbk9iamVjdH0tPk1ENXN1bSgKICAgICAgICBTdHJpbmcgPT4gXCRGaWxle0NvbnRlbnR9LAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkTUQ1LAogICAgICAgICRBdHRhY2htZW50VGVzdC0+e01ENX0sCiAgICAgICAgIkF0dGFjaG1lbnRHZXQoKSAtIE1ENSAkQXR0YWNobWVudFRlc3QtPntGaWxlfSIsCiAgICApOwoKICAgIG15ICREZWxldGUgPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50RGVsZXRlKAogICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQyLAogICAgICAgIEZpbGVJRCA9PiAkQXR0YWNobWVudEluZGV4WzBdLT57RmlsZUlEfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkRGVsZXRlLAogICAgICAgICJBdHRhY2htZW50RGVsZXRlKCkgLSAkQXR0YWNobWVudFRlc3QtPntGaWxlfSIsCiAgICApOwoKfQoKbXkgQEZBUUlEcyA9ICRGQVFPYmplY3QtPkZBUVNlYXJjaCgKICAgIE51bWJlciAgICAgICAgICAgPT4gJyonLAogICAgV2hhdCAgICAgICAgICAgICA9PiAnKnMqJywKICAgIEtleXdvcmQgICAgICAgICAgPT4gJ3NvbWUqJywKICAgIFN0YXRlcyAgICAgICAgICAgPT4gWyAncHVibGljJywgJ2ludGVybmFsJyBdLAogICAgT3JkZXJCeSAgICAgICAgICA9PiBbJ1ZvdGVzJ10sCiAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsnVXAnXSwKICAgIExpbWl0ICAgICAgICAgICAgPT4gMTUwLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKbXkgJEZBUVNlYXJjaEZvdW5kICA9IDA7Cm15ICRGQVFTZWFyY2hGb3VuZDIgPSAwOwpmb3IgbXkgJEZBUUlEU2VhcmNoIChARkFRSURzKSB7CiAgICBpZiAoICRGQVFJRFNlYXJjaCBlcSAkRkFRSUQgKSB7CiAgICAgICAgJEZBUVNlYXJjaEZvdW5kID0gMTsKICAgIH0KICAgIGlmICggJEZBUUlEU2VhcmNoIGVxICRGQVFJRDIgKSB7CiAgICAgICAgJEZBUVNlYXJjaEZvdW5kMiA9IDE7CiAgICB9Cn0KJFNlbGYtPlRydWUoCiAgICAkRkFRU2VhcmNoRm91bmQsCiAgICAiRkFRU2VhcmNoKCkgLSAkRkFRSUQiLAopOwokU2VsZi0+RmFsc2UoCiAgICAkRkFRU2VhcmNoRm91bmQyLAogICAgIkZBUVNlYXJjaCgpIC0gJEZBUUlEMiIsCik7CgpARkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgTnVtYmVyICAgICAgICAgICA9PiAnKicsCiAgICBUaXRsZSAgICAgICAgICAgID0+ICd0SVRMZScsCiAgICBXaGF0ICAgICAgICAgICAgID0+ICdsJywKICAgIFN0YXRlcyAgICAgICAgICAgPT4gWyAncHVibGljJywgJ2ludGVybmFsJyBdLAogICAgT3JkZXJCeSAgICAgICAgICA9PiBbJ0NyZWF0ZWQnXSwKICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWydVcCddLAogICAgTGltaXQgICAgICAgICAgICA9PiAxNTAsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgokRkFRU2VhcmNoRm91bmQgID0gMDsKJEZBUVNlYXJjaEZvdW5kMiA9IDA7CmZvciBteSAkRkFRSURTZWFyY2ggKEBGQVFJRHMpIHsKICAgIGlmICggJEZBUUlEU2VhcmNoIGVxICRGQVFJRCApIHsKICAgICAgICAkRkFRU2VhcmNoRm91bmQgPSAxOwogICAgfQogICAgaWYgKCAkRkFRSURTZWFyY2ggZXEgJEZBUUlEMiApIHsKICAgICAgICAkRkFRU2VhcmNoRm91bmQyID0gMTsKICAgIH0KfQokU2VsZi0+RmFsc2UoCiAgICAkRkFRU2VhcmNoRm91bmQsCiAgICAiRkFRU2VhcmNoKCkgLSAkRkFRSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRGQVFTZWFyY2hGb3VuZDIsCiAgICAiRkFRU2VhcmNoKCkgLSAkRkFRSUQyIiwKKTsKCkBGQVFJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCiAgICBOdW1iZXIgICAgICAgICAgID0+ICcqJywKICAgIFRpdGxlICAgICAgICAgICAgPT4gJycsCiAgICBXaGF0ICAgICAgICAgICAgID0+ICdzb2x1dGlvbiBmb3VuZCcsCiAgICBTdGF0ZXMgICAgICAgICAgID0+IFsgJ3B1YmxpYycsICdpbnRlcm5hbCcgXSwKICAgIE9yZGVyQnkgICAgICAgICAgPT4gWydDcmVhdGVkJ10sCiAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsnVXAnXSwKICAgIExpbWl0ICAgICAgICAgICAgPT4gMTUwLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKJEZBUVNlYXJjaEZvdW5kICA9IDA7CiRGQVFTZWFyY2hGb3VuZDIgPSAwOwpmb3IgbXkgJEZBUUlEU2VhcmNoIChARkFRSURzKSB7CiAgICBpZiAoICRGQVFJRFNlYXJjaCBlcSAkRkFRSUQgKSB7CiAgICAgICAgJEZBUVNlYXJjaEZvdW5kID0gMTsKICAgIH0KICAgIGlmICggJEZBUUlEU2VhcmNoIGVxICRGQVFJRDIgKSB7CiAgICAgICAgJEZBUVNlYXJjaEZvdW5kMiA9IDE7CiAgICB9Cn0KJFNlbGYtPlRydWUoCiAgICAkRkFRU2VhcmNoRm91bmQsCiAgICAiRkFRU2VhcmNoICgpIGxpdGVyYWwgdGV4dCAtICRGQVFJRCIsCik7CiRTZWxmLT5GYWxzZSgKICAgICRGQVFTZWFyY2hGb3VuZDIsCiAgICAiRkFRU2VhcmNoKCkgbGl0ZXJhbCB0ZXh0IC0gJEZBUUlEMiIsCik7CgpARkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgTnVtYmVyICAgICAgICAgICA9PiAnKicsCiAgICBUaXRsZSAgICAgICAgICAgID0+ICcnLAogICAgV2hhdCAgICAgICAgICAgICA9PiAnc29sdXRpb24rZm91bmQnLAogICAgU3RhdGVzICAgICAgICAgICA9PiBbICdwdWJsaWMnLCAnaW50ZXJuYWwnIF0sCiAgICBPcmRlckJ5ICAgICAgICAgID0+IFsnQ3JlYXRlZCddLAogICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJ1VwJ10sCiAgICBMaW1pdCAgICAgICAgICAgID0+IDE1MCwKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCiRGQVFTZWFyY2hGb3VuZCAgPSAwOwokRkFRU2VhcmNoRm91bmQyID0gMDsKZm9yIG15ICRGQVFJRFNlYXJjaCAoQEZBUUlEcykgewogICAgaWYgKCAkRkFRSURTZWFyY2ggZXEgJEZBUUlEICkgewogICAgICAgICRGQVFTZWFyY2hGb3VuZCA9IDE7CiAgICB9CiAgICBpZiAoICRGQVFJRFNlYXJjaCBlcSAkRkFRSUQyICkgewogICAgICAgICRGQVFTZWFyY2hGb3VuZDIgPSAxOwogICAgfQp9CiRTZWxmLT5UcnVlKAogICAgJEZBUVNlYXJjaEZvdW5kLAogICAgIkZBUVNlYXJjaCgpIEFORCAtICRGQVFJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJEZBUVNlYXJjaEZvdW5kMiwKICAgICJGQVFTZWFyY2goKSBBTkQgLSAkRkFRSUQyIiwKKTsKCm15ICRWb3RlSURzUmVmID0gJEZBUU9iamVjdC0+Vm90ZVNlYXJjaCgKICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKCmZvciBteSAkVm90ZUlEICggQHskVm90ZUlEc1JlZn0gKSB7CiAgICBteSAkVm90ZURlbGV0ZSA9ICRGQVFPYmplY3QtPlZvdGVEZWxldGUoCiAgICAgICAgVm90ZUlEID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZvdGVEZWxldGUsCiAgICAgICAgIlZvdGVEZWxldGUoKSIsCiAgICApOwp9CgojIGFkZCBGQVEgYXJ0aWNsZSB0byBsb2cKbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFMb2dBZGQoCiAgICBJdGVtSUQgICAgPT4gJEZBUUlELAogICAgSW50ZXJmYWNlID0+ICdpbnRlcm5hbCcsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJGQVFMb2dBZGQoKSAtICRGQVFJRCIsCik7CgojIHRyeSB0byBhZGQgc2FtZSBGQVEgYXJ0aWNsZSB0byBsb2cgYWdhaW4gKG11c3QgcmV0dXJuIGZhbHNlKQokU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUUxvZ0FkZCgKICAgIEl0ZW1JRCAgICA9PiAkRkFRSUQsCiAgICBJbnRlcmZhY2UgPT4gJ2ludGVybmFsJywKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+RmFsc2UoCiAgICAkU3VjY2VzcywKICAgICJGQVFMb2dBZGQoKSAtICRGQVFJRCIsCik7CgojIGFkZCBhbm90aGVyIEZBUSBhcnRpY2xlIHRvIGxvZwokU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUUxvZ0FkZCgKICAgIEl0ZW1JRCAgICA9PiAkRkFRSUQyLAogICAgSW50ZXJmYWNlID0+ICdpbnRlcm5hbCcsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJGQVFMb2dBZGQoKSAtICRGQVFJRDIiLAopOwoKIyBnZXQgRkFRIFRvcDEwCm15ICRUb3AxMElEc1JlZiA9ICRGQVFPYmplY3QtPkZBUVRvcDEwR2V0KAogICAgSW50ZXJmYWNlID0+ICdpbnRlcm5hbCcsCiAgICBMaW1pdCAgICAgPT4gMTAsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICBzY2FsYXIgQHskVG9wMTBJRHNSZWZ9LAogICAgIkZBUVRvcDEwR2V0KCkiLAopOwoKIyB0ZXN0IExhbmd1YWdlTG9va3VwKCkKbXkgJExhbmd1YWdlTmFtZSA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTG9va3VwKAogICAgTGFuZ3VhZ2VJRCA9PiAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRMYW5ndWFnZU5hbWUsCiAgICAiTGFuZ3VhZ2VMb29rdXAoKSBmb3IgTGFuZ3VhZ2VJRCAnMScgaXMgJyRMYW5ndWFnZU5hbWUnIiwKKTsKCm15ICRMYW5ndWFnZUlEID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VMb29rdXAoCiAgICBOYW1lICAgPT4gJExhbmd1YWdlTmFtZSwKICAgIFVzZXJJRCA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkTGFuZ3VhZ2VJRCwKICAgIDEsCiAgICAiTGFuZ3VhZ2VMb29rdXAoKSBmb3IgTGFuZ3VhZ2VOYW1lICckTGFuZ3VhZ2VOYW1lJyIsCik7CgpteSAkRkFRRGVsZXRlID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgSXRlbUlEID0+ICRGQVFJRCwKICAgIFVzZXJJRCA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRGQVFEZWxldGUsCiAgICAiRkFRRGVsZXRlKCkgLSBGQVFJRDogJEZBUUlEIiwKKTsKCm15ICRGQVFEZWxldGUyID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgSXRlbUlEID0+ICRGQVFJRDIsCiAgICBVc2VySUQgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkRkFRRGVsZXRlMiwKICAgICJGQVFEZWxldGUoKSAtIEZBUUlEOiAkRkFRSUQyIiwKKTsKCm15ICRDYXRlZ29yeUlEID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICBOYW1lICAgICA9PiAnVGVzdENhdGVnb3J5JywKICAgIENvbW1lbnQgID0+ICdDYXRlZ29yeSBmb3IgdGVzdGluZycsCiAgICBQYXJlbnRJRCA9PiAwLAogICAgVmFsaWRJRCAgPT4gMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRDYXRlZ29yeUlELAogICAgIkNhdGVnb3J5QWRkKCkgLSBSb290IENhdGVnb3J5IiwKKTsKCiMgc2V0IFBhcmVudElEIHRvIGVtcHR5IHRvIG1ha2UgaXQgZmFpbApteSAkQ2F0ZWdvcnlJREZhaWwgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUFkZCgKICAgIE5hbWUgICAgID0+ICdUZXN0Q2F0ZWdvcnknLAogICAgQ29tbWVudCAgPT4gJ0NhdGVnb3J5IGZvciB0ZXN0aW5nJywKICAgIFBhcmVudElEID0+ICcnLAogICAgVmFsaWRJRCAgPT4gMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkQ2F0ZWdvcnlJREZhaWwsCiAgICAiQ2F0ZWdvcnlBZGQoKSAtIFJvb3QgQ2F0ZWdvcnkiLAopOwoKbXkgJENhdGVnb3J5VXBkYXRlID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlVcGRhdGUoCiAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgUGFyZW50SUQgICA9PiAwLAogICAgTmFtZSAgICAgICA9PiAnUm9vdENhdGVnb3J5JywKICAgIENvbW1lbnQgICAgPT4gJ1Jvb3QgQ2F0ZWdvcnkgZm9yIHRlc3RpbmcnLAogICAgVmFsaWRJRCAgICA9PiAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkQ2F0ZWdvcnlVcGRhdGUsCiAgICAiQ2F0ZWdvcnlVcGRhdGUoKSAtIFJvb3QgQ2F0ZWdvcnkiLAopOwoKIyBzZXQgUGFyZW50SUQgdG8gZW1wdHkgdG8gbWFrZSBpdCBmYWlsCm15ICRDYXRlZ29yeVVwZGF0ZUZhaWwgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeVVwZGF0ZSgKICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICBQYXJlbnRJRCAgID0+ICcnLAogICAgTmFtZSAgICAgICA9PiAnUm9vdENhdGVnb3J5JywKICAgIENvbW1lbnQgICAgPT4gJ1Jvb3QgQ2F0ZWdvcnkgZm9yIHRlc3RpbmcnLAogICAgVmFsaWRJRCAgICA9PiAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKJFNlbGYtPkZhbHNlKAogICAgJENhdGVnb3J5VXBkYXRlRmFpbCwKICAgICJDYXRlZ29yeVVwZGF0ZSgpIC0gUm9vdCBDYXRlZ29yeSIsCik7CgpteSAkQ2hpbGRDYXRlZ29yeUlEID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICBOYW1lICAgICA9PiAnQ2hpbGRDYXRlZ29yeScsCiAgICBDb21tZW50ICA9PiAnQ2hpbGQgQ2F0ZWdvcnkgZm9yIHRlc3RpbmcnLAogICAgUGFyZW50SUQgPT4gJENhdGVnb3J5SUQsCiAgICBWYWxpZElEICA9PiAxLAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENoaWxkQ2F0ZWdvcnlJRCwKICAgICJDYXRlZ29yeUFkZCgpIC0gQ2hpbGQgQ2F0ZWdvcnkiLAopOwoKbXkgJENoaWxkQ2F0ZWdvcnlEZWxldGUgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeURlbGV0ZSgKICAgIENhdGVnb3J5SUQgPT4gJENoaWxkQ2F0ZWdvcnlJRCwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENoaWxkQ2F0ZWdvcnlEZWxldGUsCiAgICAiQ2F0ZWdvcnlEZWxldGUoKSAtIENoaWxkIENhdGVnb3J5IiwKKTsKCm15ICRDYXRlZ29yeURlbGV0ZSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RGVsZXRlKAogICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENhdGVnb3J5RGVsZXRlLAogICAgIkNhdGVnb3J5RGVsZXRlKCkgLSBSb290IENhdGVnb3J5IiwKKTsKCiNJdGVtRmllbGRHZXQgVGVzdHMKbXkgJVRlc3RGaWVsZHMgPSAoCiAgICBGaWVsZDEgPT4gJ1N5bXB0b20uLi4nLAogICAgRmllbGQyID0+ICdQcm9ibGVtLi4uJywKICAgIEZpZWxkMyA9PiAnU29sdXRpb24uLi4nLAogICAgRmllbGQ0ID0+ICdVc2VyIEZpZWxkNC4uLicsCiAgICBGaWVsZDUgPT4gJ1VzZXIgRmllbGQ1Li4uJywKICAgIEZpZWxkNiA9PiAnQ29tbWVudC4uLicsCik7CgokRkFRSUQgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICBUaXRsZSAgICAgID0+ICdTb21lIFRleHQnLAogICAgQ2F0ZWdvcnlJRCA9PiAxLAogICAgU3RhdGVJRCAgICA9PiAxLAogICAgTGFuZ3VhZ2VJRCA9PiAxLAogICAgS2V5d29yZHMgICA9PiAnc29tZSBrZXl3b3JkcycsCiAgICAlVGVzdEZpZWxkcywKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRkFRSUQsCiAgICAiRkFRQWRkKCkgZm9yIEl0ZW1GaWVsZEdldCB3aXRoIFRydWUiLAopOwoKbXkgJVJlc3VsdEZpZWxkczsKCm15ICRDaGVja0ZpZWxkcyA9IHN1YiB7CiAgICBteSAlUGFyYW0gPSBAXzsKCiAgICBmb3IgbXkgJEZpZWxkQ291bnQgKCAxIC4uIDYgKSB7CiAgICAgICAgbXkgJEZpZWxkID0gIkZpZWxkJEZpZWxkQ291bnQiOwoKICAgICAgICAjIGNoZWNrIHRoYXQgY2FjaGUgaXMgY2xlYW4KICAgICAgICBteSAkQ2FjaGUgPSAkRkFRT2JqZWN0LT57Q2FjaGVPYmplY3R9LT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgICAgIEtleSAgPT4gIkl0ZW1GaWVsZEdldDo6SXRlbUlEOjokRkFRSUQiLAogICAgICAgICk7CgogICAgICAgICMgb24gYmVmb3JlIGZpcnN0IEdldCBjY2hlIHNob3VsZCBiZSB1bmRlZiwgYWZ0ZXIgZmlycyBjYWNoZSBleGlzdCwgYnV0IHRoZSBGaWVsZCBrZXkgbXVzdCBiZQogICAgICAgICMgdW5kZWYKICAgICAgICBpZiAoIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkQ2FjaGUtPnskRmllbGR9LAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAiQ2FjaGUgYmVmb3JlIEl0ZW1GaWVsZEdldCgpOiAkRmllbGQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJENhY2hlLAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAiQ2FjaGUgYmVmb3JlIEl0ZW1GaWVsZEdldCgpOiBDb21wbGV0ZSBjYWNoZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgZmllbGQKICAgICAgICAkUmVzdWx0RmllbGRzeyRGaWVsZH0gPSAkRkFRT2JqZWN0LT5JdGVtRmllbGRHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgIEZpZWxkICA9PiAkRmllbGQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgY2FjaGUgaXMgc2V0CiAgICAgICAgJENhY2hlID0gJEZBUU9iamVjdC0+e0NhY2hlT2JqZWN0fS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICdGQVEnLAogICAgICAgICAgICBLZXkgID0+ICJJdGVtRmllbGRHZXQ6Okl0ZW1JRDo6JEZBUUlEIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHJlZiAkQ2FjaGUsCiAgICAgICAgICAgICdIQVNIJywKICAgICAgICAgICAgIkNhY2hlIGFmdGVyIEl0ZW1GaWVsZEdldCgpOiByZWYiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkQ2FjaGUtPnskRmllbGR9LAogICAgICAgICAgICAkUGFyYW17Q29tcGFyZUZpZWxkc30tPnskRmllbGR9LAogICAgICAgICAgICAiQ2FjaGUgYWZ0ZXIgSXRlbUZpZWxkR2V0KCk6ICRGaWVsZCBtYXRjaGVkIHdpdGggb3JpZ2luYWwgZmllbGQgZGF0YSIsCiAgICAgICAgKTsKICAgIH0KfTsKCiRDaGVja0ZpZWxkcy0+KCBDb21wYXJlRmllbGRzID0+IFwlVGVzdEZpZWxkcyApOwoKJFNlbGYtPklzRGVlcGx5KAogICAgXCVSZXN1bHRGaWVsZHMsCiAgICBcJVRlc3RGaWVsZHMsCiAgICAiSXRlbUZpZWxkR2V0KCk6IGZvciBhbGwgZmllbGRzIG1hdGNoIGV4cGVjdGVkIGRhdGEiLAopOwoKIyB1cGRhdGUgdGhlIEZBUSBpdGVtCm15ICVVcGRhdGVkVGVzdEZpZWxkcyA9ICgKICAgIEZpZWxkMSA9PiAnVXBkYXRlZCBTeW1wdG9tLi4uJywKICAgIEZpZWxkMiA9PiAnVXBkYXRlZCBQcm9ibGVtLi4uJywKICAgIEZpZWxkMyA9PiAnVXBkYXRlZCBTb2x1dGlvbi4uLicsCiAgICBGaWVsZDQgPT4gJ1VwZGF0ZWQgVXNlciBGaWVsZDQuLi4nLAogICAgRmllbGQ1ID0+ICdVcGRhdGVkIFVzZXIgRmllbGQ1Li4uJywKICAgIEZpZWxkNiA9PiAnVXBkYXRlZCBDb21tZW50Li4uJywKKTsKCiRGQVFVcGRhdGUgPSAkRkFRT2JqZWN0LT5GQVFVcGRhdGUoCiAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgIFRpdGxlICAgICAgPT4gJ1NvbWUgVGV4dCcsCiAgICBDYXRlZ29yeUlEID0+IDEsCiAgICBTdGF0ZUlEICAgID0+IDEsCiAgICBMYW5ndWFnZUlEID0+IDEsCiAgICBLZXl3b3JkcyAgID0+ICdzb21lIGtleXdvcmRzJywKICAgICVVcGRhdGVkVGVzdEZpZWxkcywKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRkFRVXBkYXRlLAogICAgIkZBUVVwZGF0ZSgpIGZvciBJdGVtRmllbGRHZXQgd2l0aCBUcnVlIiwKKTsKCiRDaGVja0ZpZWxkcy0+KCBDb21wYXJlRmllbGRzID0+IFwlVXBkYXRlZFRlc3RGaWVsZHMgKTsKCiRGQVFEZWxldGUgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICBJdGVtSUQgPT4gJEZBUUlELAogICAgVXNlcklEID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRGQVFEZWxldGUsCiAgICAiRkFRRGVsZXRlKCkgZm9yIEl0ZW1GaWVsZEdldDogd2l0aCBUcnVlIiwKKTsKCiMgY2hlY2sgdGhhdCBjYWNoZSBpcyBjbGVhbgpteSAkQ2FjaGUgPSAkRkFRT2JqZWN0LT57Q2FjaGVPYmplY3R9LT5HZXQoCiAgICBUeXBlID0+ICdGQVEnLAogICAgS2V5ICA9PiAiSXRlbUZpZWxkR2V0OjpJdGVtSUQ6OiRGQVFJRCIsCik7CgokU2VsZi0+SXMoCiAgICAkQ2FjaGUsCiAgICB1bmRlZiwKICAgICJDYWNoZSBmb3IgSXRlbUZpZWxkR2V0KCkgYWZ0ZXIgRkFRRGVsZXRlOiBDb21wbGV0ZSBjYWNoZSIsCik7CgojIEZBUSBpdGVtIGNhY2hlIHRlc3RzCiRGQVFJRCA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgIFRpdGxlICAgICAgPT4gJ1NvbWUgVGV4dCcsCiAgICBDYXRlZ29yeUlEID0+IDEsCiAgICBTdGF0ZUlEICAgID0+IDEsCiAgICBMYW5ndWFnZUlEID0+IDEsCiAgICBLZXl3b3JkcyAgID0+ICdzb21lIGtleXdvcmRzJywKICAgICVUZXN0RmllbGRzLAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoYXQgY2FjaGUgaXMgY2xlYW4KJENhY2hlID0gJEZBUU9iamVjdC0+e0NhY2hlT2JqZWN0fS0+R2V0KAogICAgVHlwZSA9PiAnRkFRJywKICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJEZBUUlEIC4gJzo6SXRlbUZpZWxkczo6MCcsCik7CiRTZWxmLT5JcygKICAgICRDYWNoZSwKICAgIHVuZGVmLAogICAgIkNhY2hlIGZvciBGQVEgTm8gSXRlbUZpZWxkcyBCZWZvcmUgRkFRR2V0KCk6IENvbXBsZXRlIGNhY2hlIiwKKTsKJENhY2hlID0gJEZBUU9iamVjdC0+e0NhY2hlT2JqZWN0fS0+R2V0KAogICAgVHlwZSA9PiAnRkFRJywKICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJEZBUUlEIC4gJzo6SXRlbUZpZWxkczo6MScsCik7CiRTZWxmLT5JcygKICAgICRDYWNoZSwKICAgIHVuZGVmLAogICAgIkNhY2hlIGZvciBGQVEgV2l0aCBJdGVtRmllbGRzIEJlZm9yZSBGQVFHZXQoKTogQ29tcGxldGUgY2FjaGUiLAopOwoKIyBnZXQgRkFRIG5vIEl0ZW0gRmllbGRzCm15ICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgSXRlbUlEICAgICA9PiAkRkFRSUQsCiAgICBJdGVtRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgID0+IDEKKTsKCiRTZWxmLT5JcygKICAgICRGQVFEYXRhe0l0ZW1JRH0sCiAgICAkRkFRSUQsCiAgICAiU2FuaXR5IENoZWNrIGZvciBGQVFHZXQoKTogbWF0Y2ggSXRlbUlEIgopOwoKIyBzYW5pdHkgY2hlY2sgSXRlbSBGaWVsZHMKZm9yIG15ICRGaWVsZENvdW50ICggMSAuLiA2ICkgewogICAgbXkgJEZpZWxkID0gIkZpZWxkJEZpZWxkQ291bnQiOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkRkFRRGF0YXskRmllbGR9LAogICAgICAgIHVuZGVmLAogICAgICAgICJTYW5pdHkgQ2hlY2sgZm9yIEZBUUdldCgpOiBubyBJdGVtRmllbGRzICRGaWVsZCIsCiAgICApOwp9CiRDYWNoZSA9ICRGQVFPYmplY3QtPntDYWNoZU9iamVjdH0tPkdldCgKICAgIFR5cGUgPT4gJ0ZBUScsCiAgICBLZXkgID0+ICdGQVFHZXQ6Okl0ZW1JRDo6JyAuICRGQVFJRCAuICc6Okl0ZW1GaWVsZHM6OjAnLAopOwokU2VsZi0+SXMoCiAgICByZWYgJENhY2hlLAogICAgJ0hBU0gnLAogICAgIkNhY2hlIGZvciBGQVEgTm8gSXRlbUZpZWxkcyBBZnRlciBGQVFHZXQoKTogQ29tcGxldGUgY2FjaGUgcmVmIiwKKTsKJENhY2hlID0gJEZBUU9iamVjdC0+e0NhY2hlT2JqZWN0fS0+R2V0KAogICAgVHlwZSA9PiAnRkFRJywKICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJEZBUUlEIC4gJzo6SXRlbUZpZWxkczo6MScsCik7CiRTZWxmLT5JcygKICAgICRDYWNoZSwKICAgIHVuZGVmLAogICAgIkNhY2hlIGZvciBGQVEgV2l0aCBJdGVtRmllbGRzIEFmdGVyIEZBUUdldCgpOiBDb21wbGV0ZSBjYWNoZSIsCik7CgojIGdldCBGQVEgd2l0aCBJdGVtIEZpZWxkcwolRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgIEl0ZW1JRCAgICAgPT4gJEZBUUlELAogICAgSXRlbUZpZWxkcyA9PiAxLAogICAgVXNlcklEICAgICA9PiAxCik7CgokU2VsZi0+SXMoCiAgICAkRkFRRGF0YXtJdGVtSUR9LAogICAgJEZBUUlELAogICAgIlNhbml0eSBDaGVjayBmb3IgRkFRR2V0KCk6IG1hdGNoIEl0ZW1JRCIKKTsKCiMgc2FuaXR5IGNoZWNrIEl0ZW0gRmllbGRzCmZvciBteSAkRmllbGRDb3VudCAoIDEgLi4gNiApIHsKICAgIG15ICRGaWVsZCA9ICJGaWVsZCRGaWVsZENvdW50IjsKCiAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgJEZBUURhdGF7JEZpZWxkfSwKICAgICAgICB1bmRlZiwKICAgICAgICAiU2FuaXR5IENoZWNrIGZvciBGQVFHZXQoKTogd2l0aCBJdGVtRmllbGRzICRGaWVsZCIsCiAgICApOwp9CiRDYWNoZSA9ICRGQVFPYmplY3QtPntDYWNoZU9iamVjdH0tPkdldCgKICAgIFR5cGUgPT4gJ0ZBUScsCiAgICBLZXkgID0+ICdGQVFHZXQ6Okl0ZW1JRDo6JyAuICRGQVFJRCAuICc6Okl0ZW1GaWVsZHM6OjAnLAopOwokU2VsZi0+SXMoCiAgICByZWYgJENhY2hlLAogICAgJ0hBU0gnLAogICAgIkNhY2hlIGZvciBGQVEgTm8gSXRlbUZpZWxkcyBBZnRlciBGQVFHZXQoKTogQ29tcGxldGUgY2FjaGUgcmVmIiwKKTsKJENhY2hlID0gJEZBUU9iamVjdC0+e0NhY2hlT2JqZWN0fS0+R2V0KAogICAgVHlwZSA9PiAnRkFRJywKICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJEZBUUlEIC4gJzo6SXRlbUZpZWxkczo6MScsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkQ2FjaGUsCiAgICAnSEFTSCcsCiAgICAiQ2FjaGUgZm9yIEZBUSBXaXRoIEl0ZW1GaWVsZHMgQWZ0ZXIgRkFRR2V0KCk6IENvbXBsZXRlIGNhY2hlIHJlZiIsCik7CgojCiMgRkFRIFN0YXRlIHRlc3RzCiMKbXkgJVN0YXRlcyA9ICRGQVFPYmplY3QtPlN0YXRlTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPklzTm90KAogICAgc2NhbGFyIGtleXMgJVN0YXRlcywKICAgIDAsCiAgICAiU3RhdGVMaXN0KCkgbnVtYmVyIG9mIGVsZW1lbnRzIHNob3VsZCBub3QgYmUgMCIKKTsKCmZvciBteSAkU3RhdGVJRCAoIHNvcnQga2V5cyAlU3RhdGVzICkgewogICAgbXkgJVN0YXRlID0gJEZBUU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgU3RhdGVJRCA9PiAkU3RhdGVJRCwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAkU3RhdGV7U3RhdGVJRH0sCiAgICAgICAgdW5kZWYsCiAgICAgICAgIlN0YXRlR2V0KCkgU3RhdGVJRCBmb3IgU3RhdGVJRDogJyRTdGF0ZUlEJyBzaG91bGQgbm90IGJlIHVuZGVmIgogICAgKTsKICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAkU3RhdGV7TmFtZX0sCiAgICAgICAgdW5kZWYsCiAgICAgICAgIlN0YXRlR2V0KCkgTmFtZSBmb3IgU3RhdGVJRDogICAgJyRTdGF0ZUlEJyBzaG91bGQgbm90IGJlIHVuZGVmIgogICAgKTsKICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAkU3RhdGV7VHlwZUlEfSwKICAgICAgICB1bmRlZiwKICAgICAgICAiU3RhdGVHZXQoKSBUeXBlSUQgZm9yIFN0YXRlSUQ6ICAnJFN0YXRlSUQnIHNob3VsZCBub3QgYmUgdW5kZWYiCiAgICApOwp9CgojIGNsZWFuIHRoZSBzeXN0ZW0KJEZBUURlbGV0ZSA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJEZBUURlbGV0ZSwKICAgICJGQVFEZWxldGUoKSBmb3IgSXRlbUZpZWxkR2V0OiB3aXRoIFRydWUiLAopOwoKIyBjaGVjayB0aGF0IGNhY2hlIGlzIGNsZWFuCiRDYWNoZSA9ICRGQVFPYmplY3QtPntDYWNoZU9iamVjdH0tPkdldCgKICAgIFR5cGUgPT4gJ0ZBUScsCiAgICBLZXkgID0+ICdGQVFHZXQ6Okl0ZW1JRDo6JyAuICRGQVFJRCAuICc6Okl0ZW1GaWVsZHM6OjAnLAopOwokU2VsZi0+SXMoCiAgICAkQ2FjaGUsCiAgICB1bmRlZiwKICAgICJDYWNoZSBmb3IgRkFRIE5vIEl0ZW1GaWVsZHMgQWZ0ZXIgRkFRRGVsZXRlKCk6IENvbXBsZXRlIGNhY2hlIiwKKTsKJENhY2hlID0gJEZBUU9iamVjdC0+e0NhY2hlT2JqZWN0fS0+R2V0KAogICAgVHlwZSA9PiAnRkFRJywKICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJEZBUUlEIC4gJzo6SXRlbUZpZWxkczo6MScsCik7CiRTZWxmLT5JcygKICAgICRDYWNoZSwKICAgIHVuZGVmLAogICAgIkNhY2hlIGZvciBGQVEgV2l0aCBJdGVtRmllbGRzIEFmdGVyIEZBUURlbGV0ZSgpOiBDb21wbGV0ZSBjYWNoZSIsCik7CgoxOwo=
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAANgAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8EAAAABQAAAAYAAAAHAAAACAAAAP7///8KAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAAP7///83AAAA/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAA/v///yYAAAAnAAAAKAAAACkAAAD+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASABMACgABAFsADwACAAAAAAAAAFQAABDx/wIAVAAAAAcARABlAGYAYQB1AGwAdAAAAAgAAAAxJAAqJAErAEIqAE9KAwBRSgMAQ0oYAG1ICQRzSAkEUEoFAG5I/wBeSgYAX0j/AHRI/wAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBQPL/oQBCAAAAGQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0AAAAAAAAAAAAAAAAAC4AQhABAPIALgAAAAkAVABlAHgAdAAgAGIAbwBkAHkAAAAKAA8AE6QAABSkeAAAACAALxDxAAIBIAAAAAQATABpAHMAdAAAAAIAEAAEAF5KBwBAAP4fAQASAUAAAAAHAEMAYQBwAHQAaQBvAG4AAAANABEAE6R4ABSkeAAMJAEAEgBDShQANggBXkoHAGFKFABdCAEmAP4fAQAiASYAAAAFAEkAbgBkAGUAeAAAAAUAEgAMJAEABABeSgcAAAAAABQAAAAEAAAKAAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADyBQAAWAIAAAAAAAAAAAAAwQMAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTAwAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQBAACvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtQMAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDZAAAATwBUAFIAUwAuAG8AcgBnAA0ADQBUAEUAUwBUAA0ADQAIAA0ADQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAEgQAABQEAAAeBAAAIAQAACIEAAAkBAAAJgQAACgEAAD09PT07/T09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQNqAAAAAFUIARZDSkAANQgBYUpAAFwIAU9KBABRSgQACAAEAAASBAAAFAQAAB4EAAAgBAAAJAQAACYEAAAoBAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAG8AbwB0ACAARQBuAHQAcgB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAFAP//////////AQAAAAYJAgAAAAAAwAAAAAAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAACACgAAAAAAAAEAQwBvAG0AcABPAGIAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAIAAgAAAAQAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoAAAAAAAAAAQBPAGwAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgD/////AwAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFAAAAAAAAAAxAFQAYQBiAGwAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAABKCAAAAAAAAAUAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIABQAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAADgBAAAAAAAA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L0ZvbnQgNyAwIFINCiAgIC9YT2JqZWN0IDggMCBSDQogICAvUHJvY1NldCBbIC9QREYgL1RleHQgL0ltYWdlQyAvSW1hZ2VJIC9JbWFnZUIgXQ0KPj4NCmVuZG9iag0KDQoxIDAgb2JqDQo8PCAvVHlwZSAvUGFnZQ0KICAgL1BhcmVudCA1IDAgUg0KICAgL1Jlc291cmNlcyA5IDAgUg0KICAgL01lZGlhQm94IFsgMCAwIDYxMiA3OTIgXQ0KICAgL0dyb3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kgL0NTIC9EZXZpY2VSR0IgL0kgdHJ1ZSA+Pg0KICAgL0NvbnRlbnRzIDIgMCBSDQo+Pg0KZW5kb2JqDQoNCjUgMCBvYmoNCjw8IC9UeXBlIC9QYWdlcw0KICAgL1Jlc291cmNlcyA5IDAgUg0KICAgL01lZGlhQm94IFsgMCAwIDU5NSA4NDIgXQ0KICAgL0tpZHMgWyAxIDAgUg0KICAgICAgICAgICBdDQogICAvQ291bnQgMQ0KPj4NCmVuZG9iag0KDQoxMCAwIG9iag0KPDwgL1R5cGUgL0NhdGFsb2cNCiAgIC9QYWdlcyA1IDAgUg0KPj4NCmVuZG9iag0KDQoxMSAwIG9iag0KPDwgL0NyZWF0b3IgPEZFRkYwMDU3MDA3MjAwNjkwMDc0MDA2NTAwNzI+DQovUHJvZHVjZXIgPEZFRkYwMDRGMDA3MDAwNjUwMDZFMDA0RjAwNjYwMDY2MDA2OTAwNjMwMDY1MDAyRTAwNkYwMDcyMDA2NzAwMjAwMDMyMDAyRTAwMzAwMDJEMDA3MDAwNzIwMDY1Pg0KL0NyZWF0aW9uRGF0ZSAoRDoyMDA3MDMwNTE1NTM1OSswMScwMCcpDQo+Pg0KZW5kb2JqDQoNCnhyZWYNCjAgMTINCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMzY5OCAwMDAwMCBuDQowMDAwMDAwMDIxIDAwMDAwIG4NCjAwMDAwMDAzMTAgMDAwMDAgbg0KMDAwMDAwMDMzNiAwMDAwMCBuDQowMDAwMDAzODgzIDAwMDAwIG4NCjAwMDAwMDMzODIgMDAwMDAgbg0KMDAwMDAwMzUwMiAwMDAwMCBuDQowMDAwMDAzNTQzIDAwMDAwIG4NCjAwMDAwMDM1ODQgMDAwMDAgbg0KMDAwMDAwNDAxOSAwMDAwMCBuDQowMDAwMDA0MDc5IDAwMDAwIG4NCnRyYWlsZXINCjw8IC9TaXplIDEyDQogICAvUm9vdCAxMCAwIFINCiAgIC9JbmZvIDExIDAgUg0KICAgL0lEIFsgPDYwMEE2NDFFNjM3QzAyN0U0NjEyMkI3ODM0NjczMzI5Pg0KICAgICAgICAgPDYwMEE2NDFFNjM3QzAyN0U0NjEyMkI3ODM0NjczMzI5PiBdDQo+Pg0Kc3RhcnR4cmVmDQo0Mjk0DQolJUVPRg0K
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIEZBUSA9IEZBUSB8fCB7fTsKRkFRLkFnZW50ID0gRkFRLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBDb25maXJtYXRpb25EaWFsb2cuCiAqLwpGQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQHZhcmlhYmxlCiAgICAgKiBAcHJpdmF0ZQogICAgICogICAgIFRoaXMgdmFyaWFibGUgc3RvcmVzIHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCBmcm9tIHRoZSBEVEwgYW5kIGNvbnRhaW4gYWxsIHRoZSBkYXRhIHRoYXQgdGhlIGRpYWxvZyBuZWVkcy4KICAgICAqLwogICAgdmFyIERpYWxvZ0RhdGEgPSBbXTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHByaXZhdGUKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogQGRlc2NyaXB0aW9uIFNob3dzIHdhaXRpbmcgZGlhbG9nIHVudGlsIHNlYXJjaCBzY3JlZW4gaXMgcmVhZHkuCiAgICAgKi8KICAgIGZ1bmN0aW9uIFNob3dXYWl0aW5nRGlhbG9nKFBvc2l0aW9uVG9wKXsKICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZygnPGRpdiBjbGFzcz0iU3BhY2luZyBDZW50ZXIiPjxzcGFuIGNsYXNzPSJBSkFYTG9hZGVyIiB0aXRsZT0iJyArIENvcmUuQ29uZmlnLkdldCgnTG9hZGluZ01zZycpICsgJyI+PC9zcGFuPjwvZGl2PicsICcnLCBQb3NpdGlvblRvcCwgJ0NlbnRlcicsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge0V2ZW50T2JqZWN0fSBldmVudCBvYmplY3Qgb2YgdGhlIGNsaWNrZWQgZWxlbWVudC4KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aXRoIDIgYnV0dG9uczogWWVzIGFuZCBObwogICAgICovCiAgICBUYXJnZXROUy5TaG93Q29uZmlybWF0aW9uRGlhbG9nID0gZnVuY3Rpb24gKEV2ZW50KSB7CgogICAgICAgIHZhciBMb2NhbERpYWxvZ0RhdGEsCiAgICAgICAgICAgIFBvc2l0aW9uVG9wLAogICAgICAgICAgICBEYXRhLAogICAgICAgICAgICBCdXR0b25zOwoKICAgICAgICAvLyBnZXQgZ2xvYmFsIHNhdmVkIERpYWxvZ0RhdGEgZm9yIHRoaXMgZnVuY3Rpb24KICAgICAgICBMb2NhbERpYWxvZ0RhdGEgPSBEaWFsb2dEYXRhWyQoRXZlbnQudGFyZ2V0KS5hdHRyKCdpZCcpXTsKCiAgICAgICAgLy8gZGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGlhbG9nCiAgICAgICAgUG9zaXRpb25Ub3AgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCkgKyAoJCh3aW5kb3cpLmhlaWdodCgpICogMC4zKTsKCiAgICAgICAgLy8gc2hvdyB3YWl0aW5nIGRpYWxvZwogICAgICAgIFNob3dXYWl0aW5nRGlhbG9nKFBvc2l0aW9uVG9wKTsKCiAgICAgICAgLy8gYWpheCBjYWxsIHRvIHRoZSBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSB0ZW1wbGF0ZQogICAgICAgIERhdGEgPSBMb2NhbERpYWxvZ0RhdGEuRGlhbG9nQ29udGVudFF1ZXJ5U3RyaW5nOwogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhLCBmdW5jdGlvbiAoUmVzcG9uc2UpIHsKCiAgICAgICAgICAgIC8vICdDb25maXJtYXRpb24nIG9wZW5zIGEgZGlhbG9nIHdpdGggMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICAgICAgICAgIGlmIChSZXNwb25zZS5EaWFsb2dUeXBlID09PSAnQ29uZmlybWF0aW9uJykgewoKICAgICAgICAgICAgICAgIC8vIGRlZmluZSB5ZXMgYW5kIG5vIGJ1dHRvbnMKICAgICAgICAgICAgICAgIEJ1dHRvbnMgPSBbewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMb2NhbERpYWxvZ0RhdGEuVHJhbnNsYXRlZFRleHQuWWVzLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAiUHJpbWFyeSIsCgogICAgICAgICAgICAgICAgICAgIC8vIGRlZmluZSB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgJ1llcycgYnV0dG9uIGlzIHByZXNzZWQKICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgWWVzIGFuZCBObyBidXR0b25zIHRvIHByZXZlbnQgbXVsdGlwbGUgc3VibWl0cwogICAgICAgICAgICAgICAgICAgICAgICAkKCdkaXYuRGlhbG9nOnZpc2libGUgZGl2LkNvbnRlbnRGb290ZXIgYnV0dG9uJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZGlyZWN0IHRvIHRoZSBtb2R1bGUgdGhhdCBkb2VzIHRoZSBjb25maXJtZWQgYWN0aW9uIGFmdGVyIHByZXNzaW5nIHRoZSBZZXMgYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykgKyBMb2NhbERpYWxvZ0RhdGEuQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMb2NhbERpYWxvZ0RhdGEuVHJhbnNsYXRlZFRleHQuTm8sCiAgICAgICAgICAgICAgICAgICAgVHlwZTogIkNsb3NlIgogICAgICAgICAgICAgICAgfV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vICdNZXNzYWdlJyBvcGVucyBhIGRpYWxvZyB3aXRoIDEgYnV0dG9uOiBPawogICAgICAgICAgICBlbHNlIGlmIChSZXNwb25zZS5EaWFsb2dUeXBlID09PSAnTWVzc2FnZScpIHsKCiAgICAgICAgICAgICAgICAvLyBkZWZpbmUgT2sgYnV0dG9uCiAgICAgICAgICAgICAgICBCdXR0b25zID0gW3sKICAgICAgICAgICAgICAgICAgICBMYWJlbDogTG9jYWxEaWFsb2dEYXRhLlRyYW5zbGF0ZWRUZXh0Lk9rLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAiUHJpbWFyeSIsCiAgICAgICAgICAgICAgICAgICAgVHlwZTogIkNsb3NlIgogICAgICAgICAgICAgICAgfV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNob3cgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gY29uZmlybSB0aGUgYWN0aW9uCiAgICAgICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKFJlc3BvbnNlLkhUTUwsIExvY2FsRGlhbG9nRGF0YS5EaWFsb2dUaXRsZSwgUG9zaXRpb25Ub3AsICJDZW50ZXIiLCB0cnVlLCBCdXR0b25zKTsKICAgICAgICB9LCAnanNvbicpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7RXZlbnRPYmplY3R9IGV2ZW50IG9iamVjdCBvZiB0aGUgY2xpY2tlZCBlbGVtZW50LgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gc2hvd3MgYSBjb25maXJtYXRpb24gZGlhbG9nIHdpdGggMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICAgKi8KICAgIFRhcmdldE5TLkJpbmRDb25maXJtYXRpb25EaWFsb2cgPSBmdW5jdGlvbiAoRGF0YSkgewogICAgICAgIERpYWxvZ0RhdGFbRGF0YS5FbGVtZW50SURdID0gRGF0YTsKCiAgICAgICAgLy8gYmluZGluZyBhIGNsaWNrIGV2ZW50IHRvIHRoZSBkZWZpbmVkIGVsZW1lbnQKICAgICAgICAkKERpYWxvZ0RhdGFbRGF0YS5FbGVtZW50SURdLkVsZW1lbnRTZWxlY3RvcikuYmluZCgnY2xpY2snLCBGQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLlNob3dDb25maXJtYXRpb25EaWFsb2cpOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZyB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgRkFRID0gRkFRIHx8IHt9OwpGQVEuQWdlbnQgPSBGQVEuQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBGQVEuQWdlbnQuVGlja2V0Wm9vbQogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBUaWNrZXRab29tLgogKi8KRkFRLkFnZW50LkZBUVpvb20gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkSWZyYW1lIFRoZSBpZnJhbWUgd2hpY2ggc2hvdWxkIGJlIGF1dG8taGVpZ2h0ZWQKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMKICAgICAqLwogICAgVGFyZ2V0TlMuSWZyYW1lQXV0b0hlaWdodCA9IGZ1bmN0aW9uICgkSWZyYW1lKSB7CiAgICAgICAgaWYgKGlzSlF1ZXJ5T2JqZWN0KCRJZnJhbWUpKSB7CiAgICAgICAgICAgIHZhciBOZXdIZWlnaHQgPSAkSWZyYW1lLmNvbnRlbnRzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgIGlmICghTmV3SGVpZ2h0IHx8IGlzTmFOKE5ld0hlaWdodCkpIHsKICAgICAgICAgICAgICAgIE5ld0hlaWdodCA9IENvcmUuQ29uZmlnLkdldCgnRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoTmV3SGVpZ2h0ID4gQ29yZS5Db25maWcuR2V0KCdGQVE6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodE1heCcpKSB7CiAgICAgICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gQ29yZS5Db25maWcuR2V0KCdGQVE6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodE1heCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRJZnJhbWUuaGVpZ2h0KE5ld0hlaWdodCArICdweCcpOwogICAgICAgIH0KICAgIH07CgoKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oRkFRLkFnZW50LkZBUVpvb20gfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIEZBUSA9IEZBUSB8fCB7fTsKRkFRLkFnZW50ID0gRkFRLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgRkFRLkFnZW50LlRpY2tldENvbXBvc2UKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgVGlja2V0Q29tcG9zZS4KICovCkZBUS5BZ2VudC5UaWNrZXRDb21wb3NlID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gJEVsZW1lbnQgVGhlIGVkaXRvcgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIEluaXRpYWxpemUgdGhlIG5lZWRlZCBzdHVmZiBmb3IgdGhlIEZBUSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0aWNrZXQgc2NyZWVucy4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdEZBUVRpY2tldENvbXBvc2UgPSBmdW5jdGlvbiAoJEVsZW1lbnQpIHsKICAgICAgICBmdW5jdGlvbiBHZXRDdXJzb3JQb3NpdGlvbigpIHsKICAgICAgICAgICAgdmFyIEVsZW1lbnQgPSAkRWxlbWVudFswXSwKICAgICAgICAgICAgICAgIEVsZW1lbnRWYWx1ZSA9ICRFbGVtZW50LnZhbCgpLAogICAgICAgICAgICAgICAgUmFuZ2UsCiAgICAgICAgICAgICAgICBUZXh0UmFuZ2UsCiAgICAgICAgICAgICAgICBUZXh0UmFuZ2VEdXBsaWNhdGUsCiAgICAgICAgICAgICAgICBTdGFydFJhbmdlID0gMCwKICAgICAgICAgICAgICAgIEVuZFJhbmdlID0gMDsKICAgICAgICAgICAgLy8gRmlyZWZveAogICAgICAgICAgICBpZiAoRWxlbWVudC5zZWxlY3Rpb25TdGFydCkgewogICAgICAgICAgICAgICAgU3RhcnRSYW5nZSA9IEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgICAgICAgICBFbmRSYW5nZSA9IEVsZW1lbnQuc2VsZWN0aW9uRW5kOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIElFCiAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikgewogICAgICAgICAgICAgICAgUmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS5kdXBsaWNhdGUoKTsKICAgICAgICAgICAgICAgIFRleHRSYW5nZSA9IEVsZW1lbnQuY3JlYXRlVGV4dFJhbmdlKCk7CiAgICAgICAgICAgICAgICBUZXh0UmFuZ2VEdXBsaWNhdGUgPSBUZXh0UmFuZ2UuZHVwbGljYXRlKCk7CiAgICAgICAgICAgICAgICBUZXh0UmFuZ2UubW92ZVRvQm9va21hcmsoUmFuZ2UuZ2V0Qm9va21hcmsoKSk7CiAgICAgICAgICAgICAgICBUZXh0UmFuZ2VEdXBsaWNhdGUuc2V0RW5kUG9pbnQoJ0VuZFRvU3RhcnQnLCBUZXh0UmFuZ2UpOwogICAgICAgICAgICAgICAgU3RhcnRSYW5nZSA9IEVuZFJhbmdlID0gVGV4dFJhbmdlRHVwbGljYXRlLnRleHQubGVuZ3RoOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTYXZlIGN1cnNvciBwb3NpdGlvbiBmb3IgbGF0ZXIgdXNhZ2UKICAgICAgICAgICAgJEVsZW1lbnQuZGF0YSgnQ3Vyc29yJywgewogICAgICAgICAgICAgICAgU3RhcnRSYW5nZTogU3RhcnRSYW5nZSwKICAgICAgICAgICAgICAgIEVuZFJhbmdlOiBFbmRSYW5nZQogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIC8vIFNlZSBidWcjOTExNjoKICAgICAgICAvLyBJbiBDaHJvbWUgc29tZXRpbWVzIHRoZSBjbGljayBldmVudCBpcyB0cmlnZ2VyZWQgYmVmb3JlIHRoZSBmb2N1cyBldmVudAogICAgICAgIC8vIHdlIHByZXZlbnQgdGhhdCBieSBjaGVja2luZyBFZGl0b3JHb3RGb2N1cyBmaXJzdAoKICAgICAgICB2YXIgSW5zdGFuY2VOYW1lID0gJEVsZW1lbnQuYXR0cignaWQnKSwKICAgICAgICAgICAgRWRpdG9yR290Rm9jdXMgPSBmYWxzZTsKICAgICAgICAvLyBSZWdpc3RlciBSVEUgZXZlbnRzIGZvciBzYXZpbmcgdGhlIGN1cnNvciBwb3NpdGlvbgogICAgICAgIGlmICh0eXBlb2YgQ0tFRElUT1IgIT09ICd1bmRlZmluZWQnICYmIENLRURJVE9SICYmIENLRURJVE9SLmluc3RhbmNlcy5SaWNoVGV4dCkgewogICAgICAgICAgICAvLyBHZXQgbGFzdCBjdXJzb3IgcG9zaXRpb24gYW5kIHNhdmUgaXQgKG9uIGZvY3VzIHdlIGNvbWUgYmFjayB0byB0aGlzIHBvc2l0aW9uKQogICAgICAgICAgICBDS0VESVRPUi5pbnN0YW5jZXNbSW5zdGFuY2VOYW1lXS5vbignY29udGVudERvbScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW0luc3RhbmNlTmFtZV0uZG9jdW1lbnQub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGlmIChFZGl0b3JHb3RGb2N1cykgewogICAgICAgICAgICAgICAgICAgICAgICAkKCcjJyArIEluc3RhbmNlTmFtZSkuZGF0YSgnUlRFQ3Vyc29yJywgQ0tFRElUT1IuaW5zdGFuY2VzW0luc3RhbmNlTmFtZV0uZ2V0U2VsZWN0aW9uKCkuZ2V0UmFuZ2VzKCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW0luc3RhbmNlTmFtZV0uZG9jdW1lbnQub24oJ2tleXVwJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGlmIChFZGl0b3JHb3RGb2N1cykgewogICAgICAgICAgICAgICAgICAgICAgICAkKCcjJyArIEluc3RhbmNlTmFtZSkuZGF0YSgnUlRFQ3Vyc29yJywgQ0tFRElUT1IuaW5zdGFuY2VzW0luc3RhbmNlTmFtZV0uZ2V0U2VsZWN0aW9uKCkuZ2V0UmFuZ2VzKCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIG5lZWRlZCBmb3IgY2xpZW50LXNpZGUgdmFsaWRhdGlvbiBhbmQgaW5zZXJ0aW5nIGRhdGEgaW50byBSVEUKICAgICAgICAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW0luc3RhbmNlTmFtZV0ub24oJ2ZvY3VzJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgLy8gaWYgYSBzYXZlZCBjdXJzb3IgcG9zaXRpb24gZXhpc3RzLCBzZXQgdGhpcyBwb3NpdGlvbiBub3cKICAgICAgICAgICAgICAgIHZhciBSVEVDdXJzb3JSYW5nZSA9ICQoJyMnICsgSW5zdGFuY2VOYW1lKS5kYXRhKCdSVEVDdXJzb3InKSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb247CgogICAgICAgICAgICAgICAgRWRpdG9yR290Rm9jdXMgPSB0cnVlOwoKICAgICAgICAgICAgICAgIGlmIChSVEVDdXJzb3JSYW5nZSkgewogICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbiA9IG5ldyBDS0VESVRPUi5kb20uc2VsZWN0aW9uKENLRURJVE9SLmluc3RhbmNlc1tJbnN0YW5jZU5hbWVdLmRvY3VtZW50KTsKICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb24uc2VsZWN0UmFuZ2VzKFJURUN1cnNvclJhbmdlKTsKICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgc2F2ZWQgY3Vyc29yIHBvc2l0aW9uICh0byBub3Qga2VlcCBvbGQgc3R1ZmYpCiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBJbnN0YW5jZU5hbWUpLmRhdGEoJ1JURUN1cnNvcicsIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvLyBSZWdpc3RlciBldmVudHMgZm9yIHNhdmluZyB0aGUgY3Vyc29yIHBvc2l0aW9uIG9mIHRleHRhcmVhCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRFbGVtZW50LnVuYmluZCgnY2xpY2suRkFRQ29tcG9zaW5nJykuYmluZCgnY2xpY2suRkFRQ29tcG9zaW5nJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgR2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICRFbGVtZW50LnVuYmluZCgna2V5dXAuRkFRQ29tcG9zaW5nJykuYmluZCgna2V5dXAuRkFRQ29tcG9zaW5nJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgR2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfTsKCgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBUaXRsZSBvZiBhIEZBUSBhcnRpY2xlIHRvIGJlIHJldHVybmVkIGludG8gdGlja2V0IFN1YmplY3QKICAgICAqIEBwYXJhbSB7U3RyaW5nfSBGaWVsZHMgb2YgYSBGQVEgYXJ0aWNsZSBhbmQgb3IgTGluayB0byB0aGUgcHVibGljIGludGVyZmFjZSBpbiBwbGFpbiB0ZXh0CiAgICAgKiBAcGFyYW0ge1N0cmluZ30gRmllbGRzIG9mIGEgRkFRIGFydGljbGUgYW5kIG9yIExpbmsgdG8gdGhlIHB1YmxpYyBpbnRlcmZhY2UgaW4gSFRNTAogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIERvIG5vdGhpbmcgYW5kIHNob3cgYW4gZXJyb3IgbWVzc2FnZS4KICAgICAqLwogICAgVGFyZ2V0TlMuU2V0RGF0YSA9IGZ1bmN0aW9uIChGQVFUaXRsZSwgRkFRQ29udGVudCwgRkFRSFRNTENvbnRlbnQpIHsKICAgICAgICBpZiAoJCgnI1N1YmplY3QnLCBwYXJlbnQuZG9jdW1lbnQpLmxlbmd0aCAmJiAkKCcjUmljaFRleHQnLCBwYXJlbnQuZG9jdW1lbnQpLmxlbmd0aCkgewogICAgICAgICAgICB2YXIgJFBhcmVudFN1YmplY3QgPSAkKCcjU3ViamVjdCcsIHBhcmVudC5kb2N1bWVudCksCiAgICAgICAgICAgICAgICAkUGFyZW50Qm9keSA9ICQoJyNSaWNoVGV4dCcsIHBhcmVudC5kb2N1bWVudCksCiAgICAgICAgICAgICAgICBQYXJlbnRCb2R5ID0gJFBhcmVudEJvZHlbMF0sCiAgICAgICAgICAgICAgICBQYXJlbnRCb2R5VmFsdWUgPSAkUGFyZW50Qm9keS52YWwoKSwKICAgICAgICAgICAgICAgIFJhbmdlLAogICAgICAgICAgICAgICAgU3RhcnRSYW5nZSA9IDAsCiAgICAgICAgICAgICAgICBFbmRSYW5nZSA9IDAsCiAgICAgICAgICAgICAgICBOZXdQb3NpdGlvbiA9IDAsCiAgICAgICAgICAgICAgICBOZXdIVE1MOwoKICAgICAgICAgICAgLy8gY29weSBzdWJqZWN0CiAgICAgICAgICAgIGlmICgkUGFyZW50U3ViamVjdC52YWwoKSA9PT0gJycpIHsKICAgICAgICAgICAgICAgICRQYXJlbnRTdWJqZWN0LnZhbChGQVFUaXRsZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkUGFyZW50U3ViamVjdC52YWwoJFBhcmVudFN1YmplY3QudmFsKCkgKyAnIC0gJyArIEZBUVRpdGxlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gYWRkIEZBUSB0ZXh0IGFuZC9vciBsaW5rIHRvIFdZU0lXWUcgZWRpdG9yIGluIHBhcmVudCB3aW5kb3cKICAgICAgICAgICAgaWYgKHBhcmVudC5DS0VESVRPUiAmJiBwYXJlbnQuQ0tFRElUT1IuaW5zdGFuY2VzLlJpY2hUZXh0KSB7CiAgICAgICAgICAgICAgICBwYXJlbnQuQ0tFRElUT1IuaW5zdGFuY2VzLlJpY2hUZXh0LmZvY3VzKCk7CiAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIC8vIEluIHNvbWUgY2lyY3Vtc3RhbmNlcywgdGhpcyBjb21tYW5kIHRocm93cyBhbiBlcnJvciAoYWx0aG91Z2ggaW5zZXJ0aW5nIHRoZSBIVE1MIHdvcmtzKQogICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgYWxzbyB3b3Jrcywgd2UganVzdCB3cmFwIGl0IGluIGEgdHJ5LWNhdGNoLXN0YXRlbWVudAogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5DS0VESVRPUi5pbnN0YW5jZXMuUmljaFRleHQuaW5zZXJ0SHRtbChGQVFIVE1MQ29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNhdGNoIChFcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAkLm5vb3AoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZycsIHBhcmVudC5kb2N1bWVudCkpOwogICAgICAgICAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGluc2VydCBib2R5IGFuZC9vciBsaW5rIHRvIHRleHRhcmVhIChpZiBwb3NzaWJsZSB0byBjdXJzb3IgcG9zaXRpb24gb3RoZXJ3aXNlIHRvIHRoZSB0b3ApCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgLy8gR2V0IHByZXZpb3VzbHkgc2F2ZWQgY3Vyc29yIHBvc2l0aW9uIG9mIHRleHRhcmVhCiAgICAgICAgICAgICAgICBpZiAocGFyZW50LiQoJyNSaWNoVGV4dCcsIHBhcmVudC5kb2N1bWVudCkuZGF0YSgnQ3Vyc29yJykpIHsKICAgICAgICAgICAgICAgICAgICBTdGFydFJhbmdlID0gcGFyZW50LiQoJyNSaWNoVGV4dCcsIHBhcmVudC5kb2N1bWVudCkuZGF0YSgnQ3Vyc29yJykuU3RhcnRSYW5nZTsKICAgICAgICAgICAgICAgICAgICBFbmRSYW5nZSA9IHBhcmVudC4kKCcjUmljaFRleHQnLCBwYXJlbnQuZG9jdW1lbnQpLmRhdGEoJ0N1cnNvcicpLkVuZFJhbmdlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCBuZXcgdGV4dCB0byB0ZXh0YXJlYQogICAgICAgICAgICAgICAgJFBhcmVudEJvZHkudmFsKFBhcmVudEJvZHlWYWx1ZS5zdWJzdHIoMCwgU3RhcnRSYW5nZSkgKyBGQVFDb250ZW50ICsgUGFyZW50Qm9keVZhbHVlLnN1YnN0cihFbmRSYW5nZSwgUGFyZW50Qm9keVZhbHVlLmxlbmd0aCkpOwogICAgICAgICAgICAgICAgTmV3UG9zaXRpb24gPSBTdGFydFJhbmdlICsgRkFRQ29udGVudC5sZW5ndGg7CgogICAgICAgICAgICAgICAgLy8gSnVtcCB0byBuZXcgY3Vyc29yIHBvc2l0aW9uIChhZnRlciBpbnNlcnRlZCB0ZXh0KQogICAgICAgICAgICAgICAgaWYgKFBhcmVudEJvZHkuc2VsZWN0aW9uU3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICBQYXJlbnRCb2R5LnNlbGVjdGlvblN0YXJ0ID0gTmV3UG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgUGFyZW50Qm9keS5zZWxlY3Rpb25FbmQgPSBOZXdQb3NpdGlvbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikgewogICAgICAgICAgICAgICAgICAgIFJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkuZHVwbGljYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgUmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBOZXdQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgUmFuZ2Uuc2VsZWN0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcGFyZW50LkNvcmUuVUkuRGlhbG9nLkNsb3NlRGlhbG9nKCQoJy5EaWFsb2cnLCBwYXJlbnQuZG9jdW1lbnQpKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJyRKU1RleHR7IlRoaXMgd2luZG93IG11c3QgYmUgY2FsbGVkIGZyb20gY29tcG9zZSB3aW5kb3cifScpOwogICAgICAgICAgICBwYXJlbnQuQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZycsIHBhcmVudC5kb2N1bWVudCkpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oRkFRLkFnZW50LlRpY2tldENvbXBvc2UgfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgRkFRID0gRkFRIHx8IHt9OwpGQVEuQ3VzdG9tZXIgPSBGQVEuQ3VzdG9tZXIgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBGQVEuQ3VzdG9tZXIuVGlja2V0Wm9vbQogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBUaWNrZXRab29tLgogKi8KRkFRLkN1c3RvbWVyLkZBUVpvb20gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkSWZyYW1lIFRoZSBpZnJhbWUgd2hpY2ggc2hvdWxkIGJlIGF1dG8taGVpZ2h0ZWQKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMKICAgICAqLwogICAgVGFyZ2V0TlMuSWZyYW1lQXV0b0hlaWdodCA9IGZ1bmN0aW9uICgkSWZyYW1lKSB7CiAgICAgICAgaWYgKGlzSlF1ZXJ5T2JqZWN0KCRJZnJhbWUpKSB7CiAgICAgICAgICAgIHZhciBOZXdIZWlnaHQgPSAkSWZyYW1lLmNvbnRlbnRzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgIGlmICghTmV3SGVpZ2h0IHx8IGlzTmFOKE5ld0hlaWdodCkpIHsKICAgICAgICAgICAgICAgIE5ld0hlaWdodCA9IENvcmUuQ29uZmlnLkdldCgnRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHREZWZhdWx0Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoTmV3SGVpZ2h0ID4gQ29yZS5Db25maWcuR2V0KCdGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodE1heCcpKSB7CiAgICAgICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gQ29yZS5Db25maWcuR2V0KCdGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodE1heCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRJZnJhbWUuaGVpZ2h0KE5ld0hlaWdodCArICdweCcpOwogICAgICAgIH0KICAgIH07CgoKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oRkFRLkN1c3RvbWVyLkZBUVpvb20gfHwge30pKTsK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gQXJ0aWNsZUxpc3QgRXhwYW5kaW5nCiAqLwoKLkZBUSAuT3ZlcnZpZXdDb250cm9sIGRpdiB7CiAgICBwYWRkaW5nOiAwcHg7Cn0KCi5GQVEgI092ZXJ2aWV3Qm9keSB7CiAgICBtYXJnaW46IDAgMCA4cHggMDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uIExhcmdlIFNpZGViYXJDb2x1bW4KICovCgouTGF5b3V0Rml4ZWRTaWRlYmFyLlNpZGViYXJMYXN0ID4gLlNpZGViYXJDb2x1bW4uTGFyZ2UgewogICAgd2lkdGg6IDM1MHB4OwogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi5MYXlvdXRGaXhlZFNpZGViYXIuU2lkZWJhckxhc3QgPiAuU2lkZWJhckNvbHVtbi5NZWRpdW0gewogICAgd2lkdGg6IDI5MHB4OwogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiBGQVFNaW5pTGlzdAogKi8KCnVsLkZBUU1pbmlMaXN0IHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCgovKioKICogQHN1YnNlY3Rpb24gQ2F0ZWdvcnkgcGF0aAogKi8KCi5GQVFQYXRoQ2F0ZWdvcnkgewogICAgbWFyZ2luLWJvdHRvbTogMTNweCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiBhdXRvOwogICAgbWluLWhlaWdodDogMjVweDsKICAgIG1hcmdpbjogMCAtMXB4OwogICAgYmFja2dyb3VuZDogI0E3QUFBQSB1cmwoIi4uL2ltZy9HcmFkaWVudFNtYWxsLnBuZyIpIHJlcGVhdC14IDAgMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4OwogICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgouRkFRUGF0aENhdGVnb3J5IGgzIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICBwYWRkaW5nLXRvcDogN3B4Owp9CgppZnJhbWUuVGV4dE9wdGlvbi5GQVEgewogICAgd2lkdGg6IDkwMHB4OwogICAgbWluLWhlaWdodDogNjAwcHg7Cn0KCmlmcmFtZS5GQVFGaWVsZCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGZyYW1lYm9yZGVyOiAwOwp9Cn0KCgo=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRkFRRGV0YWlscwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgoKLyoqCiAqIEBzdWJzZWN0aW9uICBBcnRpY2xlIHRhYmxlIGJvZHkKICovCgouQXJ0aWNsZUZBUUhlYWRlciB7CiAgICBtYXJnaW46IDAgOHB4OwogICAgcGFkZGluZzogMnB4IDAgN3B4OwogICAgZm9udC1zaXplOiAxNHB4OwogICAgY29sb3I6IEdyYXk7Cn0KCi5BcnRpY2xlRkFRQ29udGVudCB7CiAgICBwYWRkaW5nOiAxMXB4IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS4zOwp9CgouRkFRU3RhdGVOYW1lIHsKICAgIGZsb2F0OiByaWdodDsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgZm9udC1zdHlsZTogaXRhbGljOwp9CgouUmF0ZUNoZWNrZWQgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKC4uL2ltZy9yYXRlLWJ1dHRvbi1jaGVja2VkLnBuZykgbm8tcmVwZWF0IHNjcm9sbCAwIDA7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGhlaWdodDogMTZweDsKICAgIG1hcmdpbi1yaWdodDogMnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBwYWRkaW5nLXRvcDogMTVweDsKICAgIHBhZGRpbmctbGVmdDogNHB4OwogICAgcGFkZGluZy1yaWdodDogMTVweDsKICAgIGNvbG9yOiAjMDAwMDAwOwp9CgouUmF0ZVVuQ2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoLi4vaW1nL3JhdGUtYnV0dG9uLXVuY2hlY2tlZC5wbmcpIG5vLXJlcGVhdCBzY3JvbGwgMCAwOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZsb2F0OiBsZWZ0OwogICAgcGFkZGluZy10b3A6IDE1cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDRweDsKICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7CiAgICBjb2xvcjogIzAwMDAwMDsKfQoKLlJhdGVTdGFyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9pbWcvcmF0ZS1pbmRpY2F0b3IucG5nKSBuby1yZXBlYXQgc2Nyb2xsIDAgMDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgaGVpZ2h0OiAxNnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7CiAgICBmbG9hdDogbGVmdDsKICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgcGFkZGluZy1yaWdodDogNnB4Owp9CgouUmF0ZVN0YXJUZXh0IHsKICAgIHRleHQtaW5kZW50OjVweDsKfQoKLlJhdGVMYWJlbEJlZm9yZSB7CiAgICBmbG9hdDogbGVmdDsKICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7CiAgICBjb2xvcjogR3JheTsKfQoKLlJhdGVMYWJlbEFmdGVyIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLWxlZnQ6IDVweDsKICAgIG1hcmdpbi1yaWdodDogMjVweDsKICAgIGNvbG9yOiBHcmF5Owp9CgouWm9vbVNtYWxsQnV0dG9uewogICAgbWFyZ2luLWxlZnQ6IDEycHg7Cn0KCn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgV2lkZ2V0cwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgoKLyoqCiAqIEBzdWJzZWN0aW9uICBXaWRnZXRCb3gKICovCgouV2lkZ2V0Qm94ID4gLkZBUUNvbnRlbnQgewogICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9ncmFkaWVudF9saWdodGRhcmsucG5nKSByZXBlYXQteDsKICAgIG1pbi1oZWlnaHQ6IDEwMHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNDNkM1QzQ7Cn0KCi5XaWRnZXRCb3ggPiAuRkFRQ29udGVudFNtYWxsIHsKICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvZ3JhZGllbnRfbGlnaHRkYXJrLnBuZykgcmVwZWF0LXg7CiAgICBtaW4taGVpZ2h0OiAxMDBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQzZDNUM0OwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNDNkM1QzQ7Cn0KCi5XaWRnZXRCb3ggPiAuRkFRVm90aW5nIHsKICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvZ3JhZGllbnRfbGlnaHRkYXJrLnBuZykgcmVwZWF0LXg7CiAgICBtaW4taGVpZ2h0OiAxMDBweDsKfQoKfQo=
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CxMAAAsTAQCanBgAAAAHdElNRQfaCwYACxtEW+sDAAAA9klEQVQ4y9WTMWrDQBBF3xqpWNjSg6sYgotcQqVOkCO4zSV0ibQx5AAxqFapNgdwFSy78AEMzrJiJ80WwkQioCrTDPv/7Gf+zK5RVebEgpkxWyAbHpqmIc9zsiyjKIoc2AJvbduGvu8JIVCW5XQHIQRijADrBK1jjIQQ/m4hFW8AB2zGLgOY4RaMMS93/BNwGAKq+jol8AA8A4+AHdTdgC/gQ1VPoxbquj4Be+B418kR2Cd+fAZd1wFck3eA75QdcE38uID3HufcMuFn59wncAYWzrml935aQFWx1q5E5CIiu6qq3kVkJyIXa+3qt2dv/v9fmC3wA6mIXzzSqa/vAAAAAElFTkSuQmCC
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIExheW91dEZpeGVkU2lkZWJhcgogKi8KCi5MYXlvdXRGaXhlZFNpZGViYXIgewogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5MYXlvdXRGaXhlZFNpZGViYXIgPiAuQ29udGVudENvbHVtbiB7CiAgICAvKioKICAgICAqIEBub3RlICAgIGZvcmNlIG93biBCbG9jayBGb3JtYXR0aW5nIENvbnRleHQgZm9yIG5lc3RlZCBmbG9hdHMKICAgICAqLwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLkxheW91dEZpeGVkU2lkZWJhciA+IC5TaWRlYmFyQ29sdW1uIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkxheW91dEZpeGVkU2lkZWJhci5TaWRlYmFyTGFzdCA+IC5TaWRlYmFyQ29sdW1uIHsKICAgIHdpZHRoOiAyNzBweDsKICAgIGZsb2F0OiByaWdodDsKICAgIG1hcmdpbi1sZWZ0OiAxNnB4OwogICAgbWFyZ2luLXJpZ2h0OiAwOwp9CgouUlRMIC5MYXlvdXRGaXhlZFNpZGViYXIuU2lkZWJhckxhc3QgPiAuU2lkZWJhckNvbHVtbiB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbWFyZ2luLXJpZ2h0OiAxNnB4Owp9CgouTGF5b3V0Rml4ZWRTaWRlYmFyLlNpZGViYXJGaXJzdCA+IC5TaWRlYmFyQ29sdW1uIHsKICAgIHdpZHRoOiAyNzBweDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cn0KCi5SVEwgLkxheW91dEZpeGVkU2lkZWJhci5TaWRlYmFyRmlyc3QgPiAuU2lkZWJhckNvbHVtbiB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uIExhcmdlIFNpZGViYXJDb2x1bW4KICovCgouTGF5b3V0Rml4ZWRTaWRlYmFyLlNpZGViYXJMYXN0ID4gLlNpZGViYXJDb2x1bW4uTGFyZ2UgewogICAgd2lkdGg6IDMwMHB4OwogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgQ3VzdG9tZXIgV2lkZ2V0U2ltcGxlCiAqLwoKLldpZGdldFNpbXBsZSB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjRTlFOUU5OwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNGRkY7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OwogICAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAzcHggI0VFRTsKICAgIC1tb3otYm94LXNoYWRvdzogMCAwIDNweCAjRUVFOwogICAgYm94LXNoYWRvdzogMCAwIDJweCAjRUVFOwogICAgcGFkZGluZzogMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiBhdXRvOwogICAgei1pbmRleDogMTA7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgouV2lkZ2V0U2ltcGxlIC5IZWFkZXIgewogICAgcGFkZGluZzogNXB4IDhweCAzcHg7CiAgICBjb2xvcjogIzIyMjsKICAgIGJhY2tncm91bmQ6ICNBN0FBQUEgdXJsKCIuLi9pbWcvR3JhZGllbnRTbWFsbC5wbmciKSByZXBlYXQteCAwIDA7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0Q2RDZENjsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNGRkY7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5XaWRnZXRTaW1wbGUgLkhlYWRlciBhIHsKICAgIGNvbG9yOiAjMjIyOwp9CgouV2lkZ2V0U2ltcGxlIC5IZWFkZXIgaDMgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmbG9hdDogbGVmdDsKfQoKLlJUTCAuV2lkZ2V0U2ltcGxlIC5IZWFkZXIgaDMgewogICAgZmxvYXQ6IHJpZ2h0Owp9CgouV2lkZ2V0U2ltcGxlIC5IZWFkZXIgaDMgc3BhbiB7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwp9CgouV2lkZ2V0U2ltcGxlIC5Db250ZW50IHsKICAgIGhlaWdodDogYXV0bzsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwYWRkaW5nOiAxM3B4IDhweDsKICAgIGJhY2tncm91bmQ6ICNGRkY7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U5RTlFOTsKfQoKLldpZGdldFNpbXBsZSAuUGFnaW5hdGlvbiB7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiBGQVFIZWFkZXIKICovCgouRkFRSGVhZGVyIGgyIHsKICAgIG1hcmdpbjogM3B4IDAgMDsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZmxvYXQ6IGxlZnQ7Cn0KLlJUTCAuRkFRSGVhZGVyIGgyIHsKICAgIGZsb2F0OiByaWdodDsKfQoKLkZBUUhlYWRlciAuRkFRSG9vayB7CiAgICBjb2xvcjogIzY2NjsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uIE92ZXJ2aWV3CiAqLwoKLk92ZXJ2aWV3IHRoZWFkIHsKICAgIGJhY2tncm91bmQ6ICNBN0FBQUEgdXJsKCIuLi9pbWcvR3JhZGllbnRTbWFsbC5wbmciKSByZXBlYXQteCAwIC0zMXB4OwogICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwOwp9CgovKioKICogQHN1YnNlY3Rpb24gRkFRTWluaUxpc3QKICovCgp1bC5GQVFNaW5pTGlzdCBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZm9udC1zaXplOiAxMHB4Owp9CgovKioKICogQHN1YnNlY3Rpb24gQ2F0ZWdvcnkgcGF0aAogKi8KLkZBUVBhdGhDYXRlZ29yeSB7CiAgICBwYWRkaW5nOiA0cHggOHB4IDRweDsKICAgIGNvbG9yOiAjNkE2QTZBOwogICAgYmFja2dyb3VuZDogI0E3QUFBQSB1cmwoIi4uL2ltZy9HcmFkaWVudFNtYWxsLnBuZyIpIHJlcGVhdC14IDAgMDsKICAgIC1tb3otYm9yZGVyLWJvdHRvbS1jb2xvcnM6IG5vbmU7CiAgICAtbW96LWJvcmRlci1sZWZ0LWNvbG9yczogbm9uZTsKICAgIC1tb3otYm9yZGVyLXJpZ2h0LWNvbG9yczogbm9uZTsKICAgIC1tb3otYm9yZGVyLXRvcC1jb2xvcnM6IG5vbmU7CiAgICBib3JkZXItY29sb3I6ICNFOUU5RTkgI0U5RTlFOSAjREREREREOwogICAgYm9yZGVyLWltYWdlOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNXB4IDVweCA1cHggNXB4OwogICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgYm94LXNoYWRvdzogMCAwIDJweCAjRUVFRUVFOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLXRvcDogMTBweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5GQVFQYXRoQ2F0ZWdvcnkuRkFRWm9vbSB7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKfQoKLkZBUVBhdGhDYXRlZ29yeSBoMyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKaWZyYW1lLkZBUUZpZWxkIHsKICAgIHdpZHRoOiAxMDAlOwogICAgZnJhbWVib3JkZXI6IDA7Cn0KCn0KCgo=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgouV2lkZ2V0U2ltcGxlIC5IZWFkZXIgewogICAgcG9zaXRpb246IHN0YXRpYzsKfQoKfQoKCg==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRkFRRGV0YWlscwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgouQXJ0aWNsZUZBUUNvbnRlbnQgewogICAgcGFkZGluZzogMTFweCAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzsKfQoKLlJhdGVDaGVja2VkIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9pbWcvcmF0ZS1idXR0b24tY2hlY2tlZC5wbmcpIG5vLXJlcGVhdCBzY3JvbGwgMCAwOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZsb2F0OiBsZWZ0OwogICAgcGFkZGluZy10b3A6IDE1cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDRweDsKICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7CiAgICBjb2xvcjogIzAwMDAwMDsKCn0KCi5SYXRlVW5DaGVja2VkIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9pbWcvcmF0ZS1idXR0b24tdW5jaGVja2VkLnBuZykgbm8tcmVwZWF0IHNjcm9sbCAwIDA7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGhlaWdodDogMTZweDsKICAgIG1hcmdpbi1yaWdodDogMnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBwYWRkaW5nLXRvcDogMTVweDsKICAgIHBhZGRpbmctbGVmdDogNHB4OwogICAgcGFkZGluZy1yaWdodDogMTVweDsKICAgIGNvbG9yOiAjMDAwMDAwOwoKfQoKLlJhdGVTdGFyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9pbWcvcmF0ZS1pbmRpY2F0b3IucG5nKSBuby1yZXBlYXQgc2Nyb2xsIDAgMDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgaGVpZ2h0OiAxNnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7CiAgICBmbG9hdDogbGVmdDsKICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgcGFkZGluZy1yaWdodDogNnB4OwogICAgbWFyZ2luLXRvcDogMnB4Owp9CgouUlRMIC5SYXRlU3RhciB7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5SYXRlU3RhclRleHQgewogICAgbWFyZ2luLWxlZnQ6IDZweDsKfQoKLlJUTCAuUmF0ZVN0YXJUZXh0IHsKICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDZweDsKfQoKLlJhdGVMYWJlbEJlZm9yZSB7CiAgICBmbG9hdDogbGVmdDsKICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7CiAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgIGNvbG9yOiBHcmF5Owp9CgouUmF0ZUxhYmVsQWZ0ZXIgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW4tbGVmdDogNXB4OwogICAgbWFyZ2luLXJpZ2h0OiAyNXB4OwogICAgY29sb3I6IEdyYXk7Cn0KCi5SYXRpbmdMYWJlbCB7CiAgICBmbG9hdDogbGVmdDsKfQoKLlJUTCAuUmF0aW5nTGFiZWwgewogICAgZmxvYXQ6IHJpZ2h0Owp9CiAKLlNwYWNpbmdUb3AgewogICAgbWFyZ2luLXRvcDogMTNweDsKfQoKLlNwYWNpbmdUb3BMYXJnZSB7CiAgICBtYXJnaW4tdG9wOiAyNnB4Owp9CgouVm90aW5nUXVlc3Rpb24gewogICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICBtYXJnaW4tcmlnaHQ6MTBweDsKICAgIGNvbG9yOiAjMDAwMDAwOwp9CgouVm90aW5nQm94IHsKICAgIG1pbi13aWR0aDogMjBwYzsKICAgIG1hcmdpbjogMCAzMHB4IDIxcHg7CiAgICBjb2xvcjogIzZBNkE2QTsKICAgIGJhY2tncm91bmQ6ICNGMEYwRjA7CiAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNGOUY5RjksICNGMEYwRjApOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjRjlGOUY5KSwgdG8oI0YwRjBGMCkpOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjRDZENkQ2OwogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0Q2RDZENjsKICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDsKICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4OwogICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiA1cHg7CiAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogNXB4OwogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDsKICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRDZENkQ2Owp9CgouVm90aW5nQm94ID4gI01lc3NlbmdlciB7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0VFRTsKfQoKLlJTU0ljb24gewogICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9yc3MucG5nKSBuby1yZXBlYXQ7CiAgICBmbG9hdDogcmlnaHQ7CiAgICB0ZXh0LWluZGVudDogLTk5OTlweDsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAyOHB4Owp9CgouRG93bmxvYWRBdHRhY2htZW50IGEsCi5LZXl3b3JkIGEgewogICAgY29sb3I6ICNGRjk5MjI7Cn0KCi5Eb3dubG9hZEF0dGFjaG1lbnQgYTpob3ZlciwKLiBLZXl3b3JkIGE6aG92ZXIgewogICAgY29sb3I6ICNGRjc3MjI7Cn0KCn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgV2lkZ2V0cwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgoKLyoqCiAqIEBzdWJzZWN0aW9uICBXaWRnZXRCb3gKICovCgouQ2FsbEZvckFjdGlvbiB7CiAgICBwYWRkaW5nOiAwOwogICAgYmFja2dyb3VuZDogI0YzRjNGMyB1cmwoLi4vaW1nL1NtYWxsRGFya0dyYWRpZW50LnBuZykgcmVwZWF0LXg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4ODg7CiAgICBib3gtc2hhZG93OiAwIDFweCAwICNFNkU2RTY7CiAgICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDAgI0U2RTZFNjsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMCAjRTZFNkU2OwogICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLyoqCiAqIEBjc3MtZm9yICAgICBGaXJlZm94CiAqIEBub3RlICAgICAgICBidWc6IGJ1dHRvbiBjb250YWluaW5nIGFuIGVsZW1lbnQgaGFzIGFuIGhpZGRlbiBwYWRkaW5nCiAqLwoKLkNhbGxGb3JBY3Rpb246Oi1tb3otZm9jdXMtaW5uZXIgewogICAgYm9yZGVyOiAwOwogICAgcGFkZGluZzogMDsKfQoKLkNhbGxGb3JBY3Rpb246aG92ZXIgewogICAgY29sb3I6ICMwMDA7CiAgICBib3JkZXItY29sb3I6ICM2OTY5Njk7Cn0KCi5DYWxsRm9yQWN0aW9uIHNwYW4gewogICAgaGVpZ2h0OiAxMnB4OwogICAgcGFkZGluZzogM3B4IDdweCA2cHg7CiAgICBsaW5lLWhlaWdodDogMTRweDsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBjb2xvcjogIzMzMzsKICAgIGZvbnQ6IGJvbGQgMTFweC8xNHB4ICJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjRkZGOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNGRkY7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBiYWNrZ3JvdW5kOiAjREREREREIHVybCgiLi4vaW1nL2J1dHRvbl9iZy5wbmciKSByZXBlYXQteDsKCn0KCi5DYWxsRm9yQWN0aW9uOmFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjREREOwogICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLkNhbGxGb3JBY3Rpb246YWN0aXZlIHNwYW4gewogICAgcGFkZGluZzogNHB4IDdweCA1cHg7CiAgICBib3JkZXItY29sb3I6ICNEREQ7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0RERDsKICAgIGJhY2tncm91bmQ6ICNFNEU0RTQgdXJsKC4uL2ltZy9TbWFsbERhcmtHcmFkaWVudC5wbmcpIHJlcGVhdC14OwoKfQoKLlNlYXJjaEJveCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5TZWFyY2hCb3ggaW5wdXRbdHlwZT0ndGV4dCddIHsKICAgIGhlaWdodDogMTVweDsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDRweCA1cHg7CiAgICBmb250OiBub3JtYWwgMTJweC8xNXB4ICJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CiAgICBib3JkZXItY29sb3I6ICM5OTk7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDNweCAwIDAgM3B4OwogICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAzcHggMCAwIDNweDsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICB3aWR0aDogMTBwYzsKfQoKLlJUTCAuU2VhcmNoQm94IGlucHV0W3R5cGU9J3RleHQnXXsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzk5OTsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCAzcHggM3B4IDA7CiAgICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7CiAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7CiAgICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwIDNweCAzcHggMDsKICAgIHdpZHRoOiAxMHBjOwp9CgouU2VhcmNoQm94IGlucHV0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKfQouUlRMIC5TZWFyY2hCb3ggaW5wdXQ6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiAjNjY2OwogICAgYm9yZGVyLWxlZnQ6IG5vbmU7Cn0KCi5TZWFyY2hCb3ggYnV0dG9uIHsKICAgIGhlaWdodDogMjVweDsKICAgIG1hcmdpbjogMCAwIDAgLTRweDsKICAgIHBhZGRpbmc6IDNweCAzcHggNHB4OwogICAgY29sb3I6ICMzMzM7CiAgICBmb250OiBib2xkIDExcHgvMTRweCAiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOwogICAgYmFja2dyb3VuZDogI0RERERERCB1cmwoIi4uL2ltZy9idXR0b25fYmcucG5nIikgcmVwZWF0LXg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjODg4OwogICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDNweCAzcHggMDsKICAgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDsKICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAwOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0ZGRjsKICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKfQoKLlJUTCAuU2VhcmNoQm94IGJ1dHRvbiB7CiAgICBoZWlnaHQ6IDI1cHg7CiAgICBtYXJnaW46IDAgLTRweCAwIDA7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDNweCAwIDAgM3B4OwogICAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7CiAgICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOwogICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4OwogICAgYm9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHg7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjRkZGOwogICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzg4ODsKfQoKLlNlYXJjaEJveCBidXR0b246aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiAjNjk2OTY5OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgouU2VhcmNoQm94IGJ1dHRvbjphY3RpdmUgewogICAgcGFkZGluZzogNHB4IDNweCAzcHg7CiAgICBiYWNrZ3JvdW5kOiAjRTRFNEU0IHVybCguLi9pbWcvU21hbGxEYXJrR3JhZGllbnQucG5nKSByZXBlYXQteDsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqIEBjc3MtZm9yICAgICBJRTcKICovCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBUaWNrZXREZXRhaWxzCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAYnVnZml4ICAgICAgSGFzTGF5b3V0IHJlbmRlcmluZyBidWcKICovCgouV2lkZ2V0U2ltcGxlLAouV2lkZ2V0U2ltcGxlIC5Db250ZW50ID4gZGl2IHsKICAgIHpvb206IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5XaWRnZXRCb3ggLkNvbnRlbnQgewogICAgbWFyZ2luLXRvcDogLTRweDsKfQoKLldpZGdldFNpbXBsZSA+IC5IZWFkZXIgaDIgewogICAgd2lkdGg6IDEwMCU7Cn0KCi5XaWRnZXRTaW1wbGUgPiAuSGVhZGVyIC5XaWRnZXRBY3Rpb24gKyBoMiB7CiAgICB3aWR0aDogYXV0bzsKfQoKLldpZGdldEFjdGlvbiB7CiAgICBmbG9hdDogbm9uZTsKICAgIHpvb206IDE7CiAgICBkaXNwbGF5OiBpbmxpbmU7Cn0KCi5XaWRnZXRBY3Rpb24uVG9nZ2xlIGEgewogICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9lbXB0eV9iYWNrZ3JvdW5kLnBuZyk7Cn0KCi5BY3Rpb25MaXN0IGJ1dHRvbiB7CiAgICBtYXJnaW4tdG9wOiAxcHg7Cn0KCnVsLlRhYmxlbGlrZSB7CiAgICB6b29tOiAxOwp9Cgp1bC5UYWJsZWxpa2UgbGkgewogICAgbWFyZ2luLWJvdHRvbTogLTNweDsKfQoKdWwuVGFibGVsaWtlIGxpLkhlYWRlciB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgpidXR0b24uQ2FsbEZvckFjdGlvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCmJ1dHRvbi5DYWxsRm9yQWN0aW9uIHNwYW4gewogICAgcGFkZGluZzogM3B4IDAgMXB4OwogICAgbWFyZ2luOiAwOwogICAgYm9yZGVyOiAwOwogICAgaGVpZ2h0OiBhdXRvOwp9CgouU2VhcmNoQm94IGJ1dHRvbiB7CiAgICBtYXJnaW46IDFweCAwIDAgLTRweCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogM3B4IDNweCA0cHggIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkICM4ODggIWltcG9ydGFudDsKCiAgICB9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBGQVEgKGh0dHA6Ly93d3cub3Rycy5vcmcpIC0gQ3VzdG9tZXIgRnJvbnRlbmQKICogQGNvcHlyaWdodCAgIE9UUlMgQUcKICogQGxpY2Vuc2UgICAgIEFHUEwgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dCkKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBwYWNrYWdlICAgICBGQVEgLSBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRkFRWm9vbQogKi8KCi8qKgogKiBAc2VjdGlvbiAgICAgSGVhZGVyCiAqLwoKLkZBUUhlYWRlciB7CiAgICB3aWR0aDogODAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLkZBUUhlYWRlciBoMiB7CiAgICBtYXJnaW46IDNweCAwIDA7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICBsaW5lLWhlaWdodDogMjRweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGZsb2F0OiBsZWZ0Owp9Ci5SVEwgLkZBUUhlYWRlciBoMiB7CiAgICBwYWRkaW5nOiAwIDM2cHggMCAwOwogICAgZmxvYXQ6IHJpZ2h0Owp9CgouRkFRSGVhZGVyIC5GQVFIb29rIHsKICAgIGNvbG9yOiAjNjY2OwogICAgZm9udC1zaXplOiAxMnB4Owp9CgojRkFRT3B0aW9ucyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMHB4OwogICAgdG9wOiA1cHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgojRkFRT3B0aW9ucyBsaSB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7Cn0KCiNGQVFPcHRpb25zIC5QcmludCB7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIG1hcmdpbjogMCAwIDAgMnB4OwogICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL3ByaW50ZXIucG5nKSBuby1yZXBlYXQ7CiAgICB0ZXh0LWluZGVudDogLTk5OTlweDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgouUlRMICNGQVFPcHRpb25zIC5QcmludCB7CiAgICBtYXJnaW46IC0ycHggNHB4IDAgMDsKfQoKbGkuS2V5d29yZHNDb250YWluZXIgewogICAgbWFyZ2luLXRvcDogNXB4OyAKICAgIG1hcmdpbi1ib3R0b206IDVweDsKfQoKZGl2LkF0dGFjaG1lbnRzIHsKICAgIG1hcmdpbi10b3A6IDEwcHg7IAogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgouQXR0YWNobWVudHMgLkxhYmVsIHsKICAgIGJhY2tncm91bmQ6IHVybCgiLi4vaW1nL3BhcGVyLWNsaXAucG5nIikgbm8tcmVwZWF0IHNjcm9sbCByaWdodCBjZW50ZXIgdHJhbnNwYXJlbnQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7CiAgICBjb2xvcjogI0FBQUFBQTsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luOiAwIDNweDsKICAgIHdpZHRoOiA2NXB4Owp9CgouUlRMIC5BdHRhY2htZW50cyAuTGFiZWwgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdDsKICAgIHRleHQtaW5kZW50OiAtOTk5OXB4OwogICAgdGV4dC1hbGlnbjpyaWdodDsKICAgIGZsb2F0OiByaWdodDsKfQoKLkF0dGFjaG1lbnRzIGRpdiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi5BdHRhY2htZW50cyAuRG93bmxvYWRBdHRhY2htZW50IHsKICAgIG1hcmdpbi1sZWZ0OiAxMHB4Owp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVRJREFUeNrUk79rwkAUxy8x5EiMWqRYKJ0qdGupq3GrQwMZ0j+g/RtTUFGoSDQdCorQjoXORtsgNrmYn/bdYJFCsmTqgw/c997dl3fv7pjdbofyBItyRm4D7lBomoY4jsMMw1yBPAdKwDfwAUd9jaLI13U93QACJ0lyq6qqJstyWxTFE9d1LdM0n3q9Ht3ZB/xUgziOrxVFuWs2m/eEEBag02egH7bbLTMYDBagX1INwjC8aDQabcuyWHo7QRDQOQRVsfV6vQ3jYaYBbKjA+WuO4yDHIVBR9Jvjeb5G85lN9H3fXS6/Vp4XnxYKGFH2QYi7ovnMa4QF74ZhjAWhlGBcRHt4vpjMZrMxzWdWAE2cdjqPXUICrtW6aZXLlePNZv05mQzN0ajfxRhP/xowh08ZGohs2xagBzLIS+AIWANvkiQ9V6tVbz6fpxv8z7+Q2+BHgAEAHG6lklcQKVAAAAAASUVORK5CYII=
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QsVOXI8qU0aTCd93tykEZacuoswfwOJKFMGzrWgyxRA634YYw9oDsJzswmw4jP6XfXAbNmsH4xJItBuFZO/B/XjNxoFyHZ/UA4Xkad+rR/AgDnRQ6tVPB/FpfRATZIOG9hwyAy0VZBhFgW8yiMHaICbpudj+QyXAGxUa6GzWfFowLkEURSVolh9FYPW4Eajar7Kzukbl6/xRtVcazbU3Mp3m5Fyfw6ykvyvnxvLmmiz1yytqlDIupbTZDr/wXejytRe3s3gzDsbFZbNZCiMcpVa8zb8n5ub1/wQYAOUGgqaMcoNoAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAQAAADifZiHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCJljYWBgYWBkQSGJQUxEq0QYDgAmKgCxQuGUQQAAAABJRU5ErkJggg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgdmFyOjpwYWNrYWdlc2V0dXA6OkZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OkNvbmZpZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpDYWNoZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTeXNDb25maWc7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q1NWOwp1c2UgS2VybmVsOjpTeXN0ZW06Okdyb3VwOwp1c2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlVzZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7Cgp1c2UgdmFycyBxdyhASVNBICRWRVJTSU9OKTsKCj1oZWFkMSBOQU1FCgpGQVEucG0gLSBjb2RlIHRvIGV4Y2VjdXRlIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgZnVuY3Rpb25zCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6REI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlhNTDsKICAgIHVzZSB2YXI6OnBhY2thZ2VzZXR1cDo6RkFROwoKICAgIG15ICRDb25maWdPYmplY3QgPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiAgICBteSAkTG9nT2JqZWN0ICAgID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkVGltZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRYTUxPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6WE1MLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvZGVPYmplY3QgPSB2YXI6OnBhY2thZ2VzZXR1cDo6RkFRLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgICAgIFRpbWVPYmplY3QgICA9PiAkVGltZU9iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIFhNTE9iamVjdCAgICA9PiAkWE1MT2JqZWN0LAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgTWFpbk9iamVjdCBUaW1lT2JqZWN0IERCT2JqZWN0IFhNTE9iamVjdCBFbmNvZGVPYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgICMgY3JlYXRlIG5lZWRlZCBzeXNjb25maWcgb2JqZWN0CiAgICAkU2VsZi0+e1N5c0NvbmZpZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgIyByZWJ1aWxkIFpaWiogZmlsZXMKICAgICRTZWxmLT57U3lzQ29uZmlnT2JqZWN0fS0+V3JpdGVEZWZhdWx0KCk7CgogICAgIyBkZWZpbmUgdGhlIFpaWiBmaWxlcwogICAgbXkgQFpaWkZpbGVzID0gKAogICAgICAgICdaWlpBQXV0by5wbScsCiAgICAgICAgJ1paWkF1dG8ucG0nLAogICAgKTsKCiAgICAjIHJlbG9hZCB0aGUgWlpaIGZpbGVzIChtb2RfcGVybCB3b3JrYXJvdW5kKQogICAgZm9yIG15ICRaWlpGaWxlIChAWlpaRmlsZXMpIHsKCiAgICAgICAgUFJFRklYOgogICAgICAgIGZvciBteSAkUHJlZml4IChASU5DKSB7CiAgICAgICAgICAgIG15ICRGaWxlID0gJFByZWZpeCAuICcvS2VybmVsL0NvbmZpZy9GaWxlcy8nIC4gJFpaWkZpbGU7CiAgICAgICAgICAgIG5leHQgUFJFRklYIGlmICEtZiAkRmlsZTsKICAgICAgICAgICAgZG8gJEZpbGU7CiAgICAgICAgICAgIGxhc3QgUFJFRklYOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBuZWVkZWQgb2JqZWN0cwogICAgJFNlbGYtPntDb25maWdPYmplY3R9ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgJFNlbGYtPntDU1ZPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkNTVi0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntHcm91cE9iamVjdH0gID0gS2VybmVsOjpTeXN0ZW06Okdyb3VwLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e1VzZXJPYmplY3R9ICAgPSBLZXJuZWw6OlN5c3RlbTo6VXNlci0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gID0gS2VybmVsOjpTeXN0ZW06OlZhbGlkLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e0xpbmtPYmplY3R9ICAgPSBLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdC0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntGQVFPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntDYWNoZU9iamVjdH0gID0gS2VybmVsOjpTeXN0ZW06OkNhY2hlLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e1N0YXRzT2JqZWN0fSAgPSBLZXJuZWw6OlN5c3RlbTo6U3RhdHMtPm5ldygKICAgICAgICAleyRTZWxmfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBkZWZpbmUgZmlsZSBwcmVmaXgKICAgICRTZWxmLT57RmlsZVByZWZpeH0gPSAnRkFRJzsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIENvZGVJbnN0YWxsKCkKCnJ1biB0aGUgY29kZSBpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVJbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZUluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGluc2VydCB0aGUgZmFxIHN0YXRlcwogICAgJFNlbGYtPl9JbnNlcnRGQVFTdGF0ZXMoKTsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgZmFxCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICdmYXEnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdmYXEgZGF0YWJhc2UgdXNlcnMnLAogICAgKTsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgZmFxX2FkbWluCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICdmYXFfYWRtaW4nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdmYXEgYWRtaW4gdXNlcnMnLAogICAgKTsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgZmFxX2FwcHJvdmFsCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICdmYXFfYXBwcm92YWwnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdmYXEgYXBwcm92YWwgdXNlcnMnLAogICAgKTsKCiAgICAjIGFkZCB0aGUgZmFxIGdyb3VwcyB0byB0aGUgY2F0ZWdvcnkgJ01pc2MnCiAgICAkU2VsZi0+X0NhdGVnb3J5R3JvdXBTZXQoCiAgICAgICAgQ2F0ZWdvcnkgPT4gJ01pc2MnLAogICAgICAgIEdyb3VwcyAgID0+IFsgJ2ZhcScsICdmYXFfYWRtaW4nLCAnZmFxX2FwcHJvdmFsJyBdLAogICAgKTsKCiAgICAjIGNyZWF0ZSBhZGl0aW9uYWwgRkFRIGxhbmd1YWdlcwogICAgJFNlbGYtPl9DcmVhdGVBZGl0aW9uYWxGQVFMYW5ndWFnZXMoKTsKCiAgICAjIGluc3RhbGwgc3RhdHMKICAgICRTZWxmLT57U3RhdHNPYmplY3R9LT5TdGF0c0luc3RhbGwoCiAgICAgICAgRmlsZVByZWZpeCA9PiAkU2VsZi0+e0ZpbGVQcmVmaXh9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVJlaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgcmVpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVSZWluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlUmVpbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBpbnNlcnQgdGhlIGZhcSBzdGF0ZXMKICAgICRTZWxmLT5fSW5zZXJ0RkFRU3RhdGVzKCk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGZhcQogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZmFxJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxIGRhdGFiYXNlIHVzZXJzJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGZhcV9hZG1pbgogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZmFxX2FkbWluJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxIGFkbWluIHVzZXJzJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGZhcV9hcHByb3ZhbAogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZmFxX2FwcHJvdmFsJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxIGFwcHJvdmFsIHVzZXJzJywKICAgICk7CgogICAgIyBpbnN0YWxsIHN0YXRzCiAgICAkU2VsZi0+e1N0YXRzT2JqZWN0fS0+U3RhdHNJbnN0YWxsKAogICAgICAgIEZpbGVQcmVmaXggPT4gJFNlbGYtPntGaWxlUHJlZml4fSwKICAgICk7CgogICAgIyBjcmVhdGUgYWRpdGlvbmFsIEZBUSBsYW5ndWFnZXMKICAgICRTZWxmLT5fQ3JlYXRlQWRpdGlvbmFsRkFRTGFuZ3VhZ2VzKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVcGdyYWRlKCkKCnJ1biB0aGUgY29kZSB1cGdyYWRlIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGluc3RhbGwgc3RhdHMKICAgICRTZWxmLT57U3RhdHNPYmplY3R9LT5TdGF0c0luc3RhbGwoCiAgICAgICAgRmlsZVByZWZpeCA9PiAkU2VsZi0+e0ZpbGVQcmVmaXh9LAogICAgKTsKCiAgICAjIGNyZWF0ZSBhZGl0aW9uYWwgRkFRIGxhbmd1YWdlcwogICAgJFNlbGYtPl9DcmVhdGVBZGl0aW9uYWxGQVFMYW5ndWFnZXMoKTsKCiAgICAjIGRlbGV0ZSB0aGUgRkFRIGNhY2hlICh0byBhdm9pZCBvbGQgZGF0YSBmcm9tIHByZXZpb3VzIEZBUSBtb2R1bGVzKQogICAgJFNlbGYtPntDYWNoZU9iamVjdH0tPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAnRkFRJywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVcGdyYWRlU3BlY2lhbCgpCgpydW4gc3BlY2lhbCBjb2RlIHVwZ3JhZGUgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGVTcGVjaWFsKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGVTcGVjaWFsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjb252ZXJ0IFxuIHRvIDxicj4gZm9yIGV4aXN0aW5nIGFydGljbGVzCiAgICAkU2VsZi0+X0NvbnZlcnROZXdsaW5lcygpOwoKICAgICMgc3RhcnQgbm9ybWFsIGNvZGUgdXBncmFkZQogICAgJFNlbGYtPkNvZGVVcGdyYWRlKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVbmluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHVuaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVW5pbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVVuaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVhY3RpdmF0ZSB0aGUgZ3JvdXAgZmFxCiAgICAkU2VsZi0+X0dyb3VwRGVhY3RpdmF0ZSgKICAgICAgICBOYW1lID0+ICdmYXEnLAogICAgKTsKCiAgICAjIGRlYWN0aXZhdGUgdGhlIGdyb3VwIGZhcV9hZG1pbgogICAgJFNlbGYtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAnZmFxX2FkbWluJywKICAgICk7CgogICAgIyBkZWFjdGl2YXRlIHRoZSBncm91cCBmYXFfYXBwcm92YWwKICAgICRTZWxmLT5fR3JvdXBEZWFjdGl2YXRlKAogICAgICAgIE5hbWUgPT4gJ2ZhcV9hcHByb3ZhbCcsCiAgICApOwoKICAgICMgdW5pbnN0YWxsIHN0YXRzCiAgICAkU2VsZi0+e1N0YXRzT2JqZWN0fS0+U3RhdHNVbmluc3RhbGwoCiAgICAgICAgRmlsZVByZWZpeCA9PiAkU2VsZi0+e0ZpbGVQcmVmaXh9LAogICAgKTsKCiAgICAjIGRlbGV0ZSBhbGwgbGlua3Mgd2l0aCBGQVEgYXJ0aWNsZXMKICAgICRTZWxmLT5fTGlua0RlbGV0ZSgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfSW5zZXJ0RkFRU3RhdGVzKCkKCmluc2VydHMgbmVlZGVkIEZBUSBzdGF0ZXMgaW50byB0YWJsZQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0luc2VydEZBUVN0YXRlcygpOwoKPWN1dAoKc3ViIF9JbnNlcnRGQVFTdGF0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRlZmluZSBmYXFfc3RhdGVfdHlwZXMgPT4gZmFxX3N0YXRlcwogICAgbXkgJVN0YXRlID0gKAogICAgICAgICdpbnRlcm5hbCcgPT4gJ2ludGVybmFsIChhZ2VudCknLAogICAgICAgICdleHRlcm5hbCcgPT4gJ2V4dGVybmFsIChjdXN0b21lciknLAogICAgICAgICdwdWJsaWMnICAgPT4gJ3B1YmxpYyAoYWxsKScsCiAgICApOwoKICAgIGZvciBteSAkVHlwZSAoIHNvcnQga2V5cyAlU3RhdGUgKSB7CgogICAgICAgICMgZ2V0IHRoZSBzdGF0ZSB0eXBlCiAgICAgICAgbXkgJFN0YXRlVHlwZVJlZiA9ICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVUeXBlR2V0KAogICAgICAgICAgICBOYW1lICAgPT4gJFR5cGUsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoZSBzdGF0ZQogICAgICAgICRTZWxmLT57RkFRT2JqZWN0fS0+U3RhdGVBZGQoCiAgICAgICAgICAgIE5hbWUgICA9PiAkU3RhdGV7JFR5cGV9LAogICAgICAgICAgICBUeXBlSUQgPT4gJFN0YXRlVHlwZVJlZi0+e1N0YXRlSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfQ29udmVydE5ld2xpbmVzKCkKCmNvdmVydHMgYWxsIFxuIGludG8gPGJyPiBmb3IgRmllbGRzIDEtNiBpbiBhbGwgZXhpc3RpbmcgRkFRIGFydGljbGVzCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQ29udmVydE5ld2xpbmVzKCk7Cgo9Y3V0CgpzdWIgX0NvbnZlcnROZXdsaW5lcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgb25seSBjb252ZXJ0IFxuIHRvIDxicj4gaWYgSFRNTCB2aWV3IGlzIGVuYWJsZWQKICAgIHJldHVybiBpZiAhJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpOwoKICAgICMgZ2V0IGFsbCBGQVEgSURzCiAgICBteSBARkFRSURzOwogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBmYXFfaXRlbSIsCiAgICApOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoKCBARkFRSURzLCAkUm93WzBdICk7CiAgICB9CgogICAgSUQ6CiAgICBmb3IgbXkgJEl0ZW1JRCAoQEZBUUlEcykgewoKICAgICAgICAjIGdldCBGQVEgZGF0YQogICAgICAgIG15ICVGQVEgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSXRlbUlELAogICAgICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBGQVEgYXJ0aWNsZSBmaWVsZHMgMS02CiAgICAgICAgbXkgJEZvdW5kTmV3bGluZTsKICAgICAgICBLRVk6CiAgICAgICAgZm9yIG15ICRLZXkgKHF3IChGaWVsZDEgRmllbGQyIEZpZWxkMyBGaWVsZDQgRmllbGQ1IEZpZWxkNikpIHsKICAgICAgICAgICAgbmV4dCBLRVkgaWYgISRGQVF7JEtleX07CgogICAgICAgICAgICAjIHJlcGxhY2UgXG4gd2l0aCA8YnI+CiAgICAgICAgICAgICRGQVF7JEtleX0gPX4gcy9cbi88YnJcLz5cbi9nOwoKICAgICAgICAgICAgJEZvdW5kTmV3bGluZSA9IDE7CiAgICAgICAgfQogICAgICAgIG5leHQgSUQgaWYgISRGb3VuZE5ld2xpbmU7CgogICAgICAgICMgdXBkYXRlIEZBUSBkYXRhCiAgICAgICAgJFNlbGYtPntGQVFPYmplY3R9LT5GQVFVcGRhdGUoCiAgICAgICAgICAgICVGQVEsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9Hcm91cEFkZCgpCgphZGQgYSBncm91cAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICd0aGUtZ3JvdXAtbmFtZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1RoZSBncm91cCBkZXNjcmlwdGlvbi4nLAogICAgKTsKCj1jdXQKCnN1YiBfR3JvdXBBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBEZXNjcmlwdGlvbikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgIyBnZXQgbGlzdCBvZiBhbGwgZ3JvdXBzCiAgICBteSAlR3JvdXBMaXN0ID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTGlzdCgpOwoKICAgICMgcmV2ZXJzZSB0aGUgZ3JvdXAgbGlzdCBmb3IgZWFzaWVyIGxvb2t1cAogICAgbXkgJUdyb3VwTGlzdFJldmVyc2UgPSByZXZlcnNlICVHcm91cExpc3Q7CgogICAgIyBjaGVjayBpZiBncm91cCBhbHJlYWR5IGV4aXN0cwogICAgbXkgJEdyb3VwSUQgPSAkR3JvdXBMaXN0UmV2ZXJzZXsgJFBhcmFte05hbWV9IH07CgogICAgIyByZWFjdGl2YXRlIHRoZSBncm91cAogICAgaWYgKCRHcm91cElEKSB7CgogICAgICAgICMgZ2V0IGN1cnJlbnQgZ3JvdXAgZGF0YQogICAgICAgIG15ICVHcm91cERhdGEgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBHZXQoCiAgICAgICAgICAgIElEICAgICA9PiAkR3JvdXBJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyByZWFjdGl2YXRlIGdyb3VwCiAgICAgICAgJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwVXBkYXRlKAogICAgICAgICAgICAlR3JvdXBEYXRhLAogICAgICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgYWRkIHRoZSBncm91cAogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFBhcmFte05hbWV9LAogICAgICAgICAgICBDb21tZW50ID0+ICRQYXJhbXtEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGxvb2t1cCB0aGUgbmV3IGdyb3VwIGlkCiAgICBteSAkTmV3R3JvdXBJRCA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCAgPT4gJFBhcmFte05hbWV9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGFkZCB1c2VyIHJvb3QgdG8gdGhlIGdyb3VwCiAgICAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBNZW1iZXJBZGQoCiAgICAgICAgR0lEICAgICAgICA9PiAkTmV3R3JvdXBJRCwKICAgICAgICBVSUQgICAgICAgID0+IDEsCiAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgIHJvICAgICAgICA9PiAxLAogICAgICAgICAgICBtb3ZlX2ludG8gPT4gMSwKICAgICAgICAgICAgY3JlYXRlICAgID0+IDEsCiAgICAgICAgICAgIG93bmVyICAgICA9PiAxLAogICAgICAgICAgICBwcmlvcml0eSAgPT4gMSwKICAgICAgICAgICAgcncgICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9Hcm91cERlYWN0aXZhdGUoKQoKZGVhY3RpdmF0ZSBhIGdyb3VwCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR3JvdXBEZWFjdGl2YXRlKAogICAgICAgIE5hbWUgPT4gJ3RoZS1ncm91cC1uYW1lJywKICAgICk7Cgo9Y3V0CgpzdWIgX0dyb3VwRGVhY3RpdmF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvb2t1cCBncm91cCBpZAogICAgbXkgJEdyb3VwSUQgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgPT4gJFBhcmFte05hbWV9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICMgZ2V0IGN1cnJlbnQgZ3JvdXAgZGF0YQogICAgbXkgJUdyb3VwRGF0YSA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cEdldCgKICAgICAgICBJRCAgICAgPT4gJEdyb3VwSUQsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgZGVhY3RpdmF0ZSBncm91cAogICAgJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwVXBkYXRlKAogICAgICAgICVHcm91cERhdGEsCiAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXtpbnZhbGlkfSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfTGlua0RlbGV0ZSgpCgpkZWxldGUgYWxsIGV4aXN0aW5nIGxpbmtzIHRvIGZhcSBhcnRpY2xlcwoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0xpbmtEZWxldGUoKTsKCj1jdXQKCnN1YiBfTGlua0RlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGFsbCBmYXEgYXJ0aWNsZSBpZHMKICAgIG15IEBGQVFJRHMgPSAoKTsKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gZmFxX2l0ZW0nCiAgICApOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBGQVFJRHMsICRSb3dbMF07CiAgICB9CiAgICByZXR1cm4gaWYgIUBGQVFJRHM7CgogICAgIyBkZWxldGUgdGhlIGZhcSBhcnRpY2xlIGxpbmtzCiAgICBmb3IgbXkgJEZBUUlEIChARkFRSURzKSB7CiAgICAgICAgJFNlbGYtPntMaW5rT2JqZWN0fS0+TGlua0RlbGV0ZUFsbCgKICAgICAgICAgICAgT2JqZWN0ID0+ICdGQVEnLAogICAgICAgICAgICBLZXkgICAgPT4gJEZBUUlELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfQ3JlYXRlQWRpdGlvbmFsRkFRTGFuZ3VhZ2VzKCkKCmNyZWF0ZXMgYWRpdGlvbmFsIEZBUSBsYW5ndWFnZXMgZm9yIHN5c3RlbSBkZWZhdWx0IGxhbmd1YWdlIGFuZCB1c2VyIGxhbmd1YWdlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQ3JlYXRlQWRpdGlvbmFsRkFRTGFuZ3VhZ2VzKCk7Cgo9Y3V0CgpzdWIgX0NyZWF0ZUFkaXRpb25hbEZBUUxhbmd1YWdlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHN5c3RlbSBkZWZhdXQgbGFuZ3VhZ2UKICAgIG15ICRMYW5ndWFnZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdEZWZhdWx0TGFuZ3VhZ2UnKTsKICAgIGlmICgkTGFuZ3VhZ2UpIHsKCiAgICAgICAgIyBnZXQgY3VycmVudCBGQVEgbGFuZ3VhZ2VzCiAgICAgICAgbXkgJUN1cnJlbnRMYW5ndWFnZXMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyB1c2UgcmV2ZXJzZSBoYXNoIGZvciBlYXN5IGxvb2t1cAogICAgICAgIG15ICVSZXZlcnNlTGFuZ3VhZ2VzID0gcmV2ZXJzZSAlQ3VycmVudExhbmd1YWdlczsKCiAgICAgICAgIyBjaGVjayBpZiBsYW5ndWFnZSBpcyBhbHJlYWR5IGRlZmluZWQKICAgICAgICBpZiAoICEkUmV2ZXJzZUxhbmd1YWdlc3skTGFuZ3VhZ2V9ICkgewoKICAgICAgICAgICAgIyBhZGQgbGFuZ3VhZ2UKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgID0+ICRMYW5ndWFnZSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfQ2F0ZWdvcnlHcm91cFNldCgpCgpBZGRzIHRoZSBnaXZlbiBncm91cCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQ2F0ZWdvcnlHcm91cFNldCgKICAgICAgICBDYXRlZ29yeSA9PiAnTWlzYycsCiAgICAgICAgR3JvdXBzICAgPT4gWyAnZmFxJywgJ2ZhcS1hZG1pbicsICdmYXFfYXBwcm92YWwnIF0sCiAgICApOwoKPWN1dAoKc3ViIF9DYXRlZ29yeUdyb3VwU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENhdGVnb3J5IEdyb3VwcykpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggcmVmICRQYXJhbXtHcm91cHN9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJHcm91cHMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBhbGwgY2F0ZWdvcmllcyBhbmQgdGhlaXIgaWRzCiAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJFNlbGYtPntGQVFPYmplY3R9LT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGNyZWF0ZSBsb29rdXAgaGFzaCBmb3IgdGhlIGNhdG9yeSBpZAogICAgbXkgJUZBUTJJRCA9IHJldmVyc2UgJXskQ2F0ZWdvcnlUcmVlfTsKCiAgICAjIGxvb2t1cCB0aGUgY2F0ZWdvcnkgaWQKICAgIG15ICRDYXRlZ29yeUlEID0gJEZBUTJJRHsgJFBhcmFte0NhdGVnb3J5fSB9OwoKICAgICMgbG9va3VwIHRoZSBncm91cCBpZHMKICAgIG15IEBHcm91cElEczsKICAgIGZvciBteSAkR3JvdXAgKCBAeyAkUGFyYW17R3JvdXBzfSB9ICkgewogICAgICAgIG15ICRHcm91cElEID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTG9va3VwKAogICAgICAgICAgICBHcm91cCA9PiAkR3JvdXAsCiAgICAgICAgKTsKICAgICAgICBwdXNoIEBHcm91cElEcywgJEdyb3VwSUQ7CiAgICB9CgogICAgIyBzZXQgY2F0ZWdvcnkgZ3JvdXAKICAgICRTZWxmLT57RkFRT2JqZWN0fS0+U2V0Q2F0ZWdvcnlHcm91cCgKICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgIEdyb3VwSURzICAgPT4gXEBHcm91cElEcywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KCjxvdHJzX3N0YXRzPgo8Q2FjaGU+MDwvQ2FjaGU+CjxEZXNjcmlwdGlvbj5TaG93cyBhbiBvdmVydmlldyBvZiBGQVEgYXJ0aWNsZXMgaW4gYSBkZWZpbmVkIHRpbWUgcGVyaW9kIHNvcnRlZCBieSBhY2Nlc3MgbnVtYmVycy48L0Rlc2NyaXB0aW9uPgo8Rm9ybWF0PkNTVjwvRm9ybWF0Pgo8Rm9ybWF0PlByaW50PC9Gb3JtYXQ+CjxHcmFwaFNpemU+PC9HcmFwaFNpemU+CjxPYmplY3Q+PC9PYmplY3Q+CjxPYmplY3RNb2R1bGU+S2VybmVsOjpTeXN0ZW06OlN0YXRzOjpTdGF0aWM6OkZBUUFjY2VzczwvT2JqZWN0TW9kdWxlPgo8UGVybWlzc2lvbj5zdGF0czwvUGVybWlzc2lvbj4KPFN0YXRUeXBlPnN0YXRpYzwvU3RhdFR5cGU+CjxTdW1Db2w+MDwvU3VtQ29sPgo8U3VtUm93PjA8L1N1bVJvdz4KPFRpdGxlPkZBUSBhY2Nlc3Mgb3ZlcnZpZXc8L1RpdGxlPgo8VmFsaWQ+MTwvVmFsaWQ+Cjwvb3Ryc19zdGF0cz4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljQ2F0ZWdvcnlMaXN0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNBcnJheVJlZldpdGhEYXRhIElzSGFzaFJlZldpdGhEYXRhIElzU3RyaW5nV2l0aERhdGEpOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljQ2F0ZWdvcnlMaXN0IC0gR2VuZXJpY0ludGVyZmFjZSBGQVEgUHVibGljQ2F0ZWdvcnlMaXN0IE9wZXJhdGlvbiBiYWNrZW5kCgo9aGVhZDEgU1lOT1BTSVMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKAogICAgICAgIHF3KERlYnVnZ2VyT2JqZWN0IENvbmZpZ09iamVjdCBNYWluT2JqZWN0IExvZ09iamVjdCBUaW1lT2JqZWN0IERCT2JqZWN0IEVuY29kZU9iamVjdCBXZWJzZXJ2aWNlSUQpCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntGQVFPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0NvbW1vbk9iamVjdH0gPSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgIyBzZXQgVXNlcklEIHRvIHJvb3QgYmVjYXVzZSBpbiBwdWJsaWMgaW50ZXJmYWNlIHRoZXJlIGlzIG5vIHVzZXIKICAgICRTZWxmLT57VXNlcklEfSA9IDE7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBSdW4oKQoKcGVyZm9ybSBQdWJsaWNDYXRlZ29yeUxpc3QgT3BlcmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IEZBUSBDYXRlZ29yaWVzLgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7fSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2Ugb2YgYW4gZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGRhdGEgcGF5bG9hZCBhZnRlciBPcGVyYXRpb24KICAgICAgICAgICAgQ2F0ZWdvcnkgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIElEID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTmFtZT4gJ01pc2MnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBJRCA9PiAyLAogICAgICAgICAgICAgICAgICAgIE5hbWU+ICdPbmVNb3JlQ2F0ZWdvcnknLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICMgLi4uCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGVpciBsb25nIG5hbWVzCiAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJFNlbGYtPntGQVFPYmplY3R9LT5HZXRQdWJsaWNDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRDYXRlZ29yeVRyZWUpICkgewoKICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gJ0NvdWxkIG5vdCBnZXQgY2F0ZWdvcnkgZGF0YScKICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0NhdGVnb3J5TGlzdDo6UnVuKCknOwoKICAgICAgICByZXR1cm4gJFNlbGYtPntDb21tb25PYmplY3R9LT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdQdWJsaWNDYXRlZ29yeUxpc3QuTm90Q2F0ZWdvcnlEYXRhJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJQdWJsaWNDYXRlZ29yeUxpc3Q6ICRFcnJvck1lc3NhZ2UiLAogICAgICAgICk7CgogICAgfQoKICAgIG15IEBQdWJsaWNDYXRlZ29yeUxpc3Q7CiAgICBmb3IgbXkgJEtleSAoIHNvcnQoIGtleXMgJXskQ2F0ZWdvcnlUcmVlfSApICkgewogICAgICAgIG15ICVDYXRlZ29yeSA9ICgKICAgICAgICAgICAgSUQgICA9PiAkS2V5LAogICAgICAgICAgICBOYW1lID0+ICRDYXRlZ29yeVRyZWUtPnskS2V5fSwKICAgICAgICApOwogICAgICAgIHB1c2ggQFB1YmxpY0NhdGVnb3J5TGlzdCwgeyVDYXRlZ29yeX07CiAgICB9CgogICAgIyBwcmVwYXJlIHJldHVybiBkYXRhCiAgICBteSAkUmV0dXJuRGF0YSA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgIH07CiAgICBpZiAoIHNjYWxhciBAUHVibGljQ2F0ZWdvcnlMaXN0ID4gMSApIHsKICAgICAgICAkUmV0dXJuRGF0YS0+e0RhdGF9LT57Q2F0ZWdvcnl9ID0gXEBQdWJsaWNDYXRlZ29yeUxpc3Q7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkUmV0dXJuRGF0YS0+e0RhdGF9LT57Q2F0ZWdvcnl9ID0gJFB1YmxpY0NhdGVnb3J5TGlzdFswXTsKICAgIH0KCiAgICAjIHJldHVybiByZXN1bHQKICAgIHJldHVybiAkUmV0dXJuRGF0YTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6TGFuZ3VhZ2VMaXN0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNBcnJheVJlZldpdGhEYXRhIElzSGFzaFJlZldpdGhEYXRhIElzU3RyaW5nV2l0aERhdGEpOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6TGFuZ3VhZ2VMaXN0IC0gR2VuZXJpY0ludGVyZmFjZSBGQVEgTGFuZ3VhZ2VMaXN0IE9wZXJhdGlvbiBiYWNrZW5kCgo9aGVhZDEgU1lOT1BTSVMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKAogICAgICAgIHF3KERlYnVnZ2VyT2JqZWN0IENvbmZpZ09iamVjdCBNYWluT2JqZWN0IExvZ09iamVjdCBUaW1lT2JqZWN0IERCT2JqZWN0IEVuY29kZU9iamVjdCBXZWJzZXJ2aWNlSUQpCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntGQVFPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0NvbW1vbk9iamVjdH0gPSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgIyBzZXQgVXNlcklEIHRvIHJvb3QgYmVjYXVzZSBpbiBwdWJsaWMgaW50ZXJmYWNlIHRoZXJlIGlzIG5vIHVzZXIKICAgICRTZWxmLT57VXNlcklEfSA9IDE7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBSdW4oKQoKcGVyZm9ybSBMYW5ndWFnZUxpc3QgT3BlcmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IEZBUSBMYW5ndWFnZXMuCgogICAgbXkgJFJlc3VsdCA9ICRPcGVyYXRpb25PYmplY3QtPlJ1bigKICAgICAgICBEYXRhID0+IHt9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW4gY2FzZSBvZiBhbiBlcnJvcgogICAgICAgIERhdGEgICAgICAgICA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXN1bHQgZGF0YSBwYXlsb2FkIGFmdGVyIE9wZXJhdGlvbgogICAgICAgICAgICBMYW5ndWFnZSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgSUQgPT4gMSwKICAgICAgICAgICAgICAgICAgICBOYW1lPiAnZW4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBJRCA9PiAyLAogICAgICAgICAgICAgICAgICAgIE5hbWU+ICdPbmVNb3JlTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICMgLi4uCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGFuZ3VhZ2VzIGxpc3QKICAgIG15ICVMYW5ndWFnZXMgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkxhbmd1YWdlTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVMYW5ndWFnZXMgKSApIHsKCiAgICAgICAgbXkgJEVycm9yTWVzc2FnZSA9ICdDb3VsZCBub3QgZ2V0IGxhbmd1YWdlIGRhdGEnCiAgICAgICAgICAgIC4gJyBpbiBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpMYW5ndWFnZUxpc3Q6OlJ1bigpJzsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57Q29tbW9uT2JqZWN0fS0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0TGlzdC5Ob3RMYW5ndWFnZURhdGEnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldExpc3Q6ICRFcnJvck1lc3NhZ2UiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgQExhbmd1YWdlTGlzdDsKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVMYW5ndWFnZXMgKSB7CiAgICAgICAgbXkgJUxhbmd1YWdlID0gKAogICAgICAgICAgICBJRCAgID0+ICRLZXksCiAgICAgICAgICAgIE5hbWUgPT4gJExhbmd1YWdlc3skS2V5fSwKICAgICAgICApOwogICAgICAgIHB1c2ggQExhbmd1YWdlTGlzdCwgeyVMYW5ndWFnZX07CiAgICB9CgogICAgIyByZXR1cm4gcmVzdWx0CiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgTGFuZ3VhZ2UgPT4gXEBMYW5ndWFnZUxpc3QsCiAgICAgICAgfSwKICAgIH07Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljRkFRU2VhcmNoOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1JTUU6OkJhc2U2NDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNBcnJheVJlZldpdGhEYXRhIElzSGFzaFJlZldpdGhEYXRhIElzU3RyaW5nV2l0aERhdGEpOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljRkFRU2VhcmNoIC0gR2VuZXJpY0ludGVyZmFjZSBGQVEgUHVibGljRkFRU2VhcmNoIE9wZXJhdGlvbiBiYWNrZW5kCgo9aGVhZDEgU1lOT1BTSVMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKAogICAgICAgIHF3KERlYnVnZ2VyT2JqZWN0IENvbmZpZ09iamVjdCBNYWluT2JqZWN0IExvZ09iamVjdCBUaW1lT2JqZWN0IERCT2JqZWN0IEVuY29kZU9iamVjdCBXZWJzZXJ2aWNlSUQpCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntGQVFPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0NvbW1vbk9iamVjdH0gPSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgIyBzZXQgVXNlcklEIHRvIHJvb3QgYmVjYXVzZSBpbiBwdWJsaWMgaW50ZXJmYWNlIHRoZXJlIGlzIG5vIHVzZXIKICAgICRTZWxmLT57VXNlcklEfSA9IDE7CgogICAgIyBnZXQgY29uZmlnIGZvciBmcm9udGVuZAogICAgJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUVNlYXJjaCIpOwoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICAkU2VsZi0+e0ludGVyZmFjZX0gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ3B1YmxpYycsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OlB1YmxpYzo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gUnVuKCkKCnBlcmZvcm0gUHVibGljRkFRU2VhcmNoIE9wZXJhdGlvbi4gVGhpcyB3aWxsIHJldHVybiBhIGxpc3Qgb2YgcHVibGljIEZBUSBlbnRyaWVzLgoKICAgIG15IEBJRHMgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CgogICAgICAgICAgICBOdW1iZXIgICAgPT4gJyoxMzQqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICAgICBUaXRsZSAgICAgPT4gJypzb21lIHRpdGxlKicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAgICAgIyBpcyBzZWFyY2hpbmcgaW4gTnVtYmVyLCBUaXRsZSwgS2V5d29yZCBhbmQgRmllbGQxLTYKICAgICAgICAgICAgV2hhdCAgICAgID0+ICcqc29tZSB0ZXh0KicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgICAgIEtleXdvcmQgICA9PiAnKndlYnNlcnZlcionLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgIExhbmd1YWdlSURzID0+IFsgNCwgNSwgNiBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgIENhdGVnb3J5SURzID0+IFsgNywgOCwgOSBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICAgICBPcmRlckJ5ID0+IFsgJ0ZBUUlEJywgJ1RpdGxlJyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAgICAgIyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBPcmRlckJ5OgogICAgICAgICAgICAjIFRoZSBPcmRlckJ5RGlyZWN0aW9uIGNhbiBiZSBzcGVjaWZpZWQgZm9yIGVhY2ggT3JkZXJCeSBhdHRyaWJ1dGUuCiAgICAgICAgICAgICMgVGhlIHBhaXJpbmcgaXMgbWFkZSBieSB0aGUgYXJyYXkgaW5kZXhlcy4KCiAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gJ0Rvd24nLCAjIChEb3duIHwgVXApICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICAgICAjIGRlZmF1bHQ6ICdEb3duJwogICAgICAgIH0sCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbiBjYXNlIG9mIGFuIGVycm9yCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlc3VsdCBkYXRhIHBheWxvYWQgYWZ0ZXIgT3BlcmF0aW9uCiAgICAgICAgICAgIElEID0+IFsKICAgICAgICAgICAgICAgIDMyLAogICAgICAgICAgICAgICAgMTMsCiAgICAgICAgICAgICAgICAxMiwKICAgICAgICAgICAgICAgIDksCiAgICAgICAgICAgICAgICA2LAogICAgICAgICAgICAgICAgNSwKICAgICAgICAgICAgICAgIDQsCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBkYXRhCiAgICAjIHNldCBTZWFyY2hMaW1pdCBvbiAwIGJlY2F1c2Ugd2UgbmVlZCB0byBnZXQgYWxsIGVudHJpZXMKICAgICRTZWxmLT57U2VhcmNoTGltaXR9ID0gMDsKCiAgICAkU2VsZi0+e1NvcnRCeX0gPSAkUGFyYW17RGF0YX0tPntPcmRlckJ5fQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdGQVFJRCc7CgogICAgIyB0aGUgQ2F0ZWdvcnlJRCBwYXJhbSBjb3VsZCBiZSBhbiBBUlJBWSBhbiBTQ0FMQVIgb3IgYW4gZW1wdHkgdmFsdWUKICAgIGlmICggIUlzQXJyYXlSZWZXaXRoRGF0YSggJFNlbGYtPntTb3J0Qnl9ICkgJiYgJFNlbGYtPntTb3J0Qnl9IG5lICcnICkgewogICAgICAgICRTZWxmLT57U29ydEJ5fSA9IFsgJFNlbGYtPntTb3J0Qnl9IF07CiAgICB9CgogICAgJFNlbGYtPntPcmRlckJ5fSA9ICRQYXJhbXtEYXRhfS0+e09yZGVyQnlEaXJlY3Rpb259CiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J09yZGVyOjpEZWZhdWx0J30KICAgICAgICB8fCAnRG93bic7CgogICAgIyB0aGUgQ2F0ZWdvcnlJRCBwYXJhbSBjb3VsZCBiZSBhbiBBUlJBWSBhbiBTQ0FMQVIgb3IgYW4gZW1wdHkgdmFsdWUKICAgICRQYXJhbXtEYXRhfS0+e0NhdGVnb3J5SURzfSA9ICRQYXJhbXtEYXRhfS0+e0NhdGVnb3J5SURzfSB8fCAnJzsKICAgIGlmICggIUlzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9LT57Q2F0ZWdvcnlJRHN9ICkgJiYgJFBhcmFte0RhdGF9LT57Q2F0ZWdvcnlJRHN9IG5lICcnICkgewogICAgICAgICRTZWxmLT57Q2F0ZWdvcnlJRHN9ID0gWyAkUGFyYW17RGF0YX0tPntDYXRlZ29yeUlEc30gXTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0RhdGF9LT57Q2F0ZWdvcnlJRHN9IG5lICcnICkgewogICAgICAgICRTZWxmLT57Q2F0ZWdvcnlJRHN9ID0gJFBhcmFte0RhdGF9LT57Q2F0ZWdvcnlJRHN9OwogICAgfQoKICAgICMgdGhlIExhbmd1YWdlSUQgcGFyYW0gY291bGQgYmUgYW4gQVJSQVkgYW4gU0NBTEFSIG9yIGFuIGVtcHR5IHZhbHVlCiAgICAkUGFyYW17RGF0YX0tPntMYW5ndWFnZUlEc30gPSAkUGFyYW17RGF0YX0tPntMYW5ndWFnZUlEc30gfHwgJyc7CiAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoICRQYXJhbXtEYXRhfS0+e0xhbmd1YWdlSURzfSApICYmICRQYXJhbXtEYXRhfS0+e0xhbmd1YWdlSURzfSBuZSAnJyApIHsKICAgICAgICAkU2VsZi0+e0xhbmd1YWdlSURzfSA9IFsgJFBhcmFte0RhdGF9LT57TGFuZ3VhZ2VJRHN9IF07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtEYXRhfS0+e0xhbmd1YWdlSURzfSBuZSAnJyApIHsKICAgICAgICAkU2VsZi0+e0xhbmd1YWdlSURzfSA9ICRQYXJhbXtEYXRhfS0+e0xhbmd1YWdlSURzfTsKICAgIH0KCiAgICAjIHBlcmZvcm0gRkFRIHNlYXJjaAogICAgbXkgQFZpZXdhYmxlRkFRSURzID0gJFNlbGYtPntGQVFPYmplY3R9LT5GQVFTZWFyY2goCiAgICAgICAgTnVtYmVyICA9PiAkUGFyYW17RGF0YX0tPntOdW1iZXJ9ICB8fCAnJywKICAgICAgICBUaXRsZSAgID0+ICRQYXJhbXtEYXRhfS0+e1RpdGxlfSAgIHx8ICcnLAogICAgICAgIFdoYXQgICAgPT4gJFBhcmFte0RhdGF9LT57V2hhdH0gICAgfHwgJycsCiAgICAgICAgS2V5d29yZCA9PiAkUGFyYW17RGF0YX0tPntLZXl3b3JkfSB8fCAnJywKICAgICAgICBMYW5ndWFnZUlEcyAgICAgID0+ICRTZWxmLT57TGFuZ3VhZ2VJRHN9LAogICAgICAgIENhdGVnb3J5SURzICAgICAgPT4gJFNlbGYtPntDYXRlZ29yeUlEc30sCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiAkU2VsZi0+e1NvcnRCeX0sCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbICRTZWxmLT57T3JkZXJCeX0gXSwKICAgICAgICBMaW1pdCAgICAgICAgICAgID0+ICRTZWxmLT57U2VhcmNoTGltaXR9LAogICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFN0YXRlcyAgICAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgIEludGVyZmFjZSAgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgKTsKICAgIGlmICggIUlzQXJyYXlSZWZXaXRoRGF0YSggXEBWaWV3YWJsZUZBUUlEcyApICkgewoKICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gJ0NvdWxkIG5vdCBnZXQgRkFRIGRhdGEnCiAgICAgICAgICAgIC4gJyBpbiBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpQdWJsaWNGQVFTZWFyY2g6OlJ1bigpJzsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57Q29tbW9uT2JqZWN0fS0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUHVibGljRkFRU2VhcmNoLk5vdEZBUURhdGEnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlB1YmxpY0ZBUVNlYXJjaDogJEVycm9yTWVzc2FnZSIsCiAgICAgICAgKTsKCiAgICB9CgogICAgIyBwcmVwYXJlIHJldHVybiBkYXRhCiAgICBteSAkUmV0dXJuRGF0YSA9IHsKICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH07CgogICAgIyBzZXQgRkFRIGVudHJ5IGRhdGEKICAgIGlmICggc2NhbGFyIEBWaWV3YWJsZUZBUUlEcyA+IDEgKSB7CiAgICAgICAgJFJldHVybkRhdGEtPntEYXRhfS0+e0lEfSA9IFxAVmlld2FibGVGQVFJRHM7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkUmV0dXJuRGF0YS0+e0RhdGF9LT57SUR9ID0gJFZpZXdhYmxlRkFRSURzWzBdOwogICAgfQoKICAgICMgcmV0dXJuIHJlc3VsdAogICAgcmV0dXJuICRSZXR1cm5EYXRhOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljRkFRR2V0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1JTUU6OkJhc2U2NDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNBcnJheVJlZldpdGhEYXRhIElzSGFzaFJlZldpdGhEYXRhIElzU3RyaW5nV2l0aERhdGEpOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljRkFRR2V0IC0gR2VuZXJpY0ludGVyZmFjZSBGQVEgUHVibGljRkFRR2V0IE9wZXJhdGlvbiBiYWNrZW5kCgo9aGVhZDEgU1lOT1BTSVMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKAogICAgICAgIHF3KERlYnVnZ2VyT2JqZWN0IENvbmZpZ09iamVjdCBNYWluT2JqZWN0IExvZ09iamVjdCBUaW1lT2JqZWN0IERCT2JqZWN0IEVuY29kZU9iamVjdCBXZWJzZXJ2aWNlSUQpCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgb2JqZWN0cwogICAgJFNlbGYtPntGQVFPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkZBUS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0NvbW1vbk9iamVjdH0gPSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgIyBzZXQgVXNlcklEIHRvIHJvb3QgYmVjYXVzZSBpbiBwdWJsaWMgaW50ZXJmYWNlIHRoZXJlIGlzIG5vIHVzZXIKICAgICRTZWxmLT57VXNlcklEfSA9IDE7CgogICAgIyBnZXQgcHVibGljIHN0YXRlIHR5cGVzCiAgICAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30gPSAkU2VsZi0+e0ZBUU9iamVjdH0tPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGQVE6OlB1YmxpYzo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gUnVuKCkKCnBlcmZvcm0gUHVibGljRkFRR2V0IE9wZXJhdGlvbi4gVGhpcyB3aWxsIHJldHVybiBhIFB1YmxpYyBGQVEgZW50cnkuCgogICAgbXkgJFJlc3VsdCA9ICRPcGVyYXRpb25PYmplY3QtPlJ1bigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgSXRlbUlEID0gJzMyLDMzJzsKICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW4gY2FzZSBvZiBhbiBlcnJvcgogICAgICAgIERhdGEgICAgICAgICA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXN1bHQgZGF0YSBwYXlsb2FkIGFmdGVyIE9wZXJhdGlvbgogICAgICAgICAgICBJdGVtSUQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIElEICAgICAgICAgICAgICAgID0+IDMyLAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgICAgID0+IDMyLAogICAgICAgICAgICAgICAgICAgIEZBUUlEICAgICAgICAgICAgID0+IDMyLAogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgID0+IDEwMDAzMiwKICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeUlEICAgICAgICA9PiAnMicsCiAgICAgICAgICAgICAgICAgICAgQ2F0ZWdvcnlOYW1lICAgICA9PiAnQ2F0ZWdvcnlBOjpDYXRlZ29yeUInLAogICAgICAgICAgICAgICAgICAgIENhdGVnb3J5U2hvcnROYW1lID0+ICdDYXRlZ29yeUInLAogICAgICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgICAgICAgICAgPT4gJ2VuJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgRmllbGQxICAgICAgICAgICAgPT4gJ1RoZSBTeW1wdG9tcycsCiAgICAgICAgICAgICAgICAgICAgRmllbGQyICAgICAgICAgICAgPT4gJ1RoZSBQcm9ibGVtJywKICAgICAgICAgICAgICAgICAgICBGaWVsZDMgICAgICAgICAgICA9PiAnVGhlIFNvbHV0aW9uJywKICAgICAgICAgICAgICAgICAgICBGaWVsZDQgICAgICAgICAgICA9PiB1bmRlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm90IGFjdGl2ZSBieSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgRmllbGQ1ICAgICAgICAgICAgPT4gdW5kZWYsICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vdCBhY3RpdmUgYnkgZGVmYXVsdAogICAgICAgICAgICAgICAgICAgIEZpZWxkNiAgICAgICAgICAgID0+ICdDb21tZW50cycsCiAgICAgICAgICAgICAgICAgICAgQXBwcm92ZWQgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAKICAgICAgICAgICAgICAgICAgICBLZXl3b3JkcyAgICAgICAgICA9PiAnS2V5V29yZDEgS2V5V29yZDInLAogICAgICAgICAgICAgICAgICAgIFZvdGVzICAgICAgICAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBudW1iZXIgb2Ygdm90ZXMKICAgICAgICAgICAgICAgICAgICBWb3RlUmVzdWx0ICAgICAgICA9PiAnMC4wMCcsICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBudW1iZXIgYmV0d2VlbiAwLjAwIGFuZCAxMDAuMDAKICAgICAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgID0+ICdpbnRlcm5hbCAoYWdlbnQpJywgICAgICAgICAgICAgIyBvciAnZXh0ZXJuYWwgKGN1c3RvbWVyKScgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJ3B1YmxpYyAoYWxsKScKICAgICAgICAgICAgICAgICAgICBTdGF0ZVR5cGVJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFN0YXRlVHlwZU5hbWUgICAgID0+ICdpbnRlcm5hbCcsICAgICAgICAgICAgICAgICAgICAgIyBvciAnZXh0ZXJuYWwnIG9yICdwdWJsaWMnCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZEJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkICAgICAgICAgID0+ICcyMDExLTAxLTA1IDIxOjUzOjUwJywKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkQnkgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZCAgICAgICAgICAgPT4gJzIwMTEtMDEtMDUgMjE6NTM6NTAnLAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgID0+ICcxMjk0Mjg2MDMwLTMxLjE2OTcyOTcxMDQ3MzInLCAgIyBGQVEgQXJ0aWNsZSBuYW1lIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN5c3RlbXRpbWUgKyAnLScgKyByYW5kb20gbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVzaXplICAgID0+ICc1NDAyODYnLCAgICAgICAgICAgICAgICAjIGZpbGUgc2l6ZSBpbiBieXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ0Vycm9yLmpwZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnLi4uJyAgICAgICAgICAgICAgICAgICAgIyBiYXNlNjQgY29udGVudAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlc2l6ZSAgICA9PiAnNTQwMjg2JywgICAgICAgICAgICAgICAgIyBmaWxlIHNpemUgaW4gYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdQZW5jaWwuanBnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICcuLi4nICAgICAgICAgICAgICAgICAgICAjIGJhc2U2NCBjb250ZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgSUQgICAgICAgICAgICAgICAgPT4gMzMsCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICAgICAgICAgPT4gMzMsCiAgICAgICAgICAgICAgICAgICAgRkFRSUQgICAgICAgICAgICAgPT4gMzMsCiAgICAgICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICAgICAgPT4gMTAwMDMzLAogICAgICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgICAgICAgID0+ICczJywKICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeU5hbWUgICAgID0+ICdDYXRlZ29yeUQ6OkNhdGVnb3J5RScsCiAgICAgICAgICAgICAgICAgICAgQ2F0ZWdvcnlTaG9ydE5hbWUgPT4gJ0NhdGVnb3J5RScsCiAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZSAgICAgICAgICA9PiAnZW4nLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgID0+ICdBcnRpY2xlIFRpdGxlJywKICAgICAgICAgICAgICAgICAgICBGaWVsZDEgICAgICAgICAgICA9PiAnVGhlIFN5bXB0b21zJywKICAgICAgICAgICAgICAgICAgICBGaWVsZDIgICAgICAgICAgICA9PiAnVGhlIFByb2JsZW0nLAogICAgICAgICAgICAgICAgICAgIEZpZWxkMyAgICAgICAgICAgID0+ICdUaGUgU29sdXRpb24nLAogICAgICAgICAgICAgICAgICAgIEZpZWxkNCAgICAgICAgICAgID0+IHVuZGVmLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3QgYWN0aXZlIGJ5IGRlZmF1bHQKICAgICAgICAgICAgICAgICAgICBGaWVsZDUgICAgICAgICAgICA9PiB1bmRlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm90IGFjdGl2ZSBieSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgRmllbGQ2ICAgICAgICAgICAgPT4gJ0NvbW1lbnRzJywKICAgICAgICAgICAgICAgICAgICBBcHByb3ZlZCAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgMAogICAgICAgICAgICAgICAgICAgIEtleXdvcmRzICAgICAgICAgID0+ICdLZXlXb3JkMSBLZXlXb3JkMicsCiAgICAgICAgICAgICAgICAgICAgVm90ZXMgICAgICAgICAgICAgPT4gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG51bWJlciBvZiB2b3RlcwogICAgICAgICAgICAgICAgICAgIFZvdGVSZXN1bHQgICAgICAgID0+ICcwLjAwJywgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIG51bWJlciBiZXR3ZWVuIDAuMDAgYW5kIDEwMC4wMAogICAgICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgPT4gJ2ludGVybmFsIChhZ2VudCknLCAgICAgICAgICAgICAjIG9yICdleHRlcm5hbCAoY3VzdG9tZXIpJyBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAncHVibGljIChhbGwpJwogICAgICAgICAgICAgICAgICAgIFN0YXRlVHlwZUlEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgU3RhdGVUeXBlTmFtZSAgICAgPT4gJ2ludGVybmFsJywgICAgICAgICAgICAgICAgICAgICAjIG9yICdleHRlcm5hbCcgb3IgJ3B1YmxpYycKICAgICAgICAgICAgICAgICAgICBDcmVhdGVkQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIENoYW5nZWQgICAgICAgICAgPT4gJzIwMTEtMDEtMDUgMjE6NTM6NTAnLAogICAgICAgICAgICAgICAgICAgIENoYW5nZWRCeSAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICBDcmVhdGVkICAgICAgICAgICA9PiAnMjAxMS0wMS0wNSAyMTo1Mzo1MCcsCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJzEyOTQyODYwMzAtMzEuMTY5NzI5NzEwNDczMicsICAjIEZBUSBBcnRpY2xlIG5hbWUgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3lzdGVtdGltZSArICctJyArIHJhbmRvbSBudW1iZXIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAjIC4uLgogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggISRQYXJhbXtEYXRhfS0+e0l0ZW1JRH0gKSB7CgogICAgICAgIHJldHVybiAkU2VsZi0+e0NvbW1vbk9iamVjdH0tPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1B1YmxpY0ZBUUdldC5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJQdWJsaWNGQVFHZXQ6IEdvdCBubyBJdGVtSUQhIiwKICAgICAgICApOwogICAgfQoKICAgIG15ICRFcnJvck1lc3NhZ2UgPSAnJzsKCiAgICBteSAkUmV0dXJuRGF0YSA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9OwogICAgbXkgQEl0ZW1JRHMgPSBzcGxpdCggLywvLCAkUGFyYW17RGF0YX0tPntJdGVtSUR9ICk7CiAgICBteSBASXRlbTsKCiAgICAjIHN0YXJ0IG1haW4gbG9vcAogICAgZm9yIG15ICRJdGVtSUQgKEBJdGVtSURzKSB7CgogICAgICAgICMgZ2V0IHRoZSBGQVEgZW50cnkKICAgICAgICBteSAlRkFRRW50cnkgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkZBUUdldCgKICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSXRlbUlELAogICAgICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCBcJUZBUUVudHJ5ICkgKSB7CgogICAgICAgICAgICAkRXJyb3JNZXNzYWdlID0gJ0NvdWxkIG5vdCBnZXQgRkFRIGRhdGEnCiAgICAgICAgICAgICAgICAuICcgaW4gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljRkFRR2V0OjpSdW4oKSc7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntDb21tb25PYmplY3R9LT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUHVibGljRkFRR2V0Lk5vdFZhbGlkRkFRSUQnLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJQdWJsaWNGQVFHZXQ6ICRFcnJvck1lc3NhZ2UiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgICAgIG15ICRBcHByb3ZhbFN1Y2Nlc3MgPSAxOwogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZBUTo6QXBwcm92YWxSZXF1aXJlZCcpICkgewogICAgICAgICAgICAkQXBwcm92YWxTdWNjZXNzID0gJEZBUUVudHJ5e0FwcHJvdmVkfTsKICAgICAgICB9CiAgICAgICAgaWYgKCAhJEFwcHJvdmFsU3VjY2VzcyB8fCAhJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LT57ICRGQVFFbnRyeXtTdGF0ZVR5cGVJRH0gfSApIHsKCiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgPSAnQ291bGQgbm90IGdldCBGQVEgZGF0YScKICAgICAgICAgICAgICAgIC4gJyBpbiBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpQdWJsaWNGQVFHZXQ6OlJ1bigpJzsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0NvbW1vbk9iamVjdH0tPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdQdWJsaWNGQVFHZXQuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUHVibGljRkFRR2V0OiAkRXJyb3JNZXNzYWdlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2V0IEZBUSBlbnRyeSBkYXRhCiAgICAgICAgbXkgJEFydGljbGUgPSB7CiAgICAgICAgICAgIEFydGljbGUgPT4gXCVGQVFFbnRyeSwKICAgICAgICB9OwoKICAgICAgICBteSBASW5kZXggPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSXRlbUlELAogICAgICAgICAgICBTaG93SW5saW5lID0+IDEsICAgICAgICAgICAgICAgICAjICAgKCAwfDEsIGRlZmF1bHQgMSkKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoIFxASW5kZXggKSApIHsKICAgICAgICAgICAgbXkgQEF0dGFjaG1lbnRzOwogICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBJbmRleCkgewogICAgICAgICAgICAgICAgbXkgJUZpbGUgPSAkU2VsZi0+e0ZBUU9iamVjdH0tPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEID0+ICRJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgRmlsZUlEID0+ICRBdHRhY2htZW50LT57RmlsZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNvbnZlcnQgY29udGVudCB0byBiYXNlNjQKICAgICAgICAgICAgICAgICRGaWxle0NvbnRlbnR9ID0gZW5jb2RlX2Jhc2U2NCggJEZpbGV7Q29udGVudH0gKTsKICAgICAgICAgICAgICAgIHB1c2ggQEF0dGFjaG1lbnRzLCB7JUZpbGV9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNldCBGQVEgZW50cnkgZGF0YQogICAgICAgICAgICAkRkFRRW50cnl7QXR0YWNobWVudH0gPSBcQEF0dGFjaG1lbnRzOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQKICAgICAgICBwdXNoIEBJdGVtLCBcJUZBUUVudHJ5OwogICAgfSAgICAjIGZpbmlzaCBtYWluIGxvb3AKCiAgICBpZiAoICFzY2FsYXIgQEl0ZW0gKSB7CiAgICAgICAgJEVycm9yTWVzc2FnZSA9ICdDb3VsZCBub3QgZ2V0IEZBUSBkYXRhJwogICAgICAgICAgICAuICcgaW4gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljRkFRR2V0OjpSdW4oKSc7CgogICAgICAgIHJldHVybiAkU2VsZi0+e0NvbW1vbk9iamVjdH0tPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1B1YmxpY0ZBUUdldC5Ob0ZBUURhdGEnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlB1YmxpY0ZBUUdldDogJEVycm9yTWVzc2FnZSIsCiAgICAgICAgKTsKCiAgICB9CgogICAgJFJldHVybkRhdGEtPntEYXRhfS0+e0ZBUUl0ZW19ID0gXEBJdGVtOwoKICAgICMgcmV0dXJuIHJlc3VsdAogICAgcmV0dXJuICRSZXR1cm5EYXRhOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
LS0tCkRlYnVnZ2VyOgogIERlYnVnVGhyZXNob2xkOiBkZWJ1ZwogIFRlc3RNb2RlOiAwCkRlc2NyaXB0aW9uOiAnJwpGcmFtZXdvcmtWZXJzaW9uOiAzLjIueCBDVlMKUHJvdmlkZXI6CiAgT3BlcmF0aW9uOgogICAgTGFuZ3VhZ2VMaXN0OgogICAgICBEZXNjcmlwdGlvbjogTGlzdCAgYWxsIGF2YWlsYWJsZXMgbGFuZ3VhZ2VzCiAgICAgIFR5cGU6IEZBUTo6TGFuZ3VhZ2VMaXN0CiAgICBQdWJsaWNDYXRlZ29yeUxpc3Q6CiAgICAgIERlc2NyaXB0aW9uOiBMaXN0IGFsbCBwdWJsaWMgRkFRIGNhdGVnb3JpZXMgKHdpdGggdHJlZSBpbmZvcm1hdGlvbikKICAgICAgVHlwZTogRkFROjpQdWJsaWNDYXRlZ29yeUxpc3QKICAgIFB1YmxpY0ZBUVNlYXJjaDoKICAgICAgRGVzY3JpcHRpb246IFNlYXJjaCBmb3IgcHVibGljIEZBUXMKICAgICAgVHlwZTogRkFROjpQdWJsaWNGQVFTZWFyY2gKICAgIFB1YmxpY0ZBUUdldDoKICAgICAgRGVzY3JpcHRpb246IFJldHJpZXZlIHB1YmxpYyBGQVEgZW50cmllcwogICAgICBUeXBlOiBGQVE6OlB1YmxpY0ZBUUdldAogIFRyYW5zcG9ydDoKICAgIENvbmZpZzoKICAgICAgRW5jb2Rpbmc6IFVURi04CiAgICAgIEVuZHBvaW50OiAnJwogICAgICBNYXhMZW5ndGg6IDEwMDAwMDAwCiAgICAgIE5hbWVTcGFjZTogaHR0cDovL3d3dy5vdHJzLm9yZy9GQVFDb25uZWN0b3IvCiAgICAgIFNPQVBBY3Rpb246ICcnCiAgICBUeXBlOiBIVFRQOjpTT0FQClJlbW90ZVN5c3RlbTogJycK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CnVzZSB2YXJzIChxdygkU2VsZikpOwoKdXNlIFNvY2tldDsKdXNlIFlBTUw7CnVzZSBNSU1FOjpCYXNlNjQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RkFROwp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcjsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2U7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcjsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6Okxhbmd1YWdlTGlzdDsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0NhdGVnb3J5TGlzdDsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0ZBUVNlYXJjaDsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0ZBUUdldDsKCiMgaGVscGVyIG9iamVjdApteSAkSGVscGVyT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXItPm5ldygKICAgICV7JFNlbGZ9LAogICAgVW5pdFRlc3RPYmplY3QgPT4gJFNlbGYsCik7CgpteSAkUmFuZG9tSUQgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKIyBzZXQgd2Vic2VydmljZSBuYW1lCm15ICRXZWJzZXJ2aWNlTmFtZSA9ICctVGVzdC0nIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCiMgc2V0IFVzZXJJRCBvbiAxCm15ICRVc2VySUQgPSAxOwoKIyBjcmVhdGUgYWxsIEZBUSBzdHVmZiBuZWVkZWQKbXkgJEZBUU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpGQVEtPm5ldyggJXskU2VsZn0gKTsKCiMgZ2V0IHB1YmxpYyBzdGF0ZXMKbXkgJVN0YXRlcyA9ICRGQVFPYmplY3QtPlN0YXRlTGlzdCgKICAgIFVzZXJJRCA9PiAkVXNlcklELAopOwpteSAkUHVibGljU3RhdGVJRDsKZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVN0YXRlcyApIHsKICAgIGlmICggJFN0YXRlc3skS2V5fSA9fiAvXnB1YmxpYy4qLyApIHsKICAgICAgICAkUHVibGljU3RhdGVJRCA9ICRLZXk7CiAgICB9Cn0KCiRTZWxmLT5Jc05vdCgKICAgICRQdWJsaWNTdGF0ZUlELAogICAgdW5kZWYsCiAgICAiU2VhcmNoIGZvciBwdWJsaWMgU3RhdGVJRCIsCik7CgojIGNhdGVnb3J5IG9uZQpteSAkQ2F0ZWdvcnlJRE9uZSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5QWRkKAogICAgTmFtZSAgICAgPT4gJ0Nvbm5lY3RvckNhdGVnb3J5T25lJyAuICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbW1lbnQgID0+ICdDYXRlZ29yeSBmb3IgdGVzdGluZycsCiAgICBQYXJlbnRJRCA9PiAwLAogICAgVmFsaWRJRCAgPT4gMSwKICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRDYXRlZ29yeUlET25lLAogICAgIkNhdGVnb3J5QWRkKCkgLSBDYXRlZ29yeSIsCik7CgojIGNhdGVnb3J5IHR3bwpteSAkQ2F0ZWdvcnlJRFR3byA9ICRGQVFPYmplY3QtPkNhdGVnb3J5QWRkKAogICAgTmFtZSAgICAgPT4gJ0Nvbm5lY3RvckNhdGVnb3J5VHdvJyAuICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbW1lbnQgID0+ICdDaGlsZCBDYXRlZ29yeSBmb3IgdGVzdGluZycsCiAgICBQYXJlbnRJRCA9PiAkQ2F0ZWdvcnlJRE9uZSwKICAgIFZhbGlkSUQgID0+IDEsCiAgICBVc2VySUQgICA9PiAkVXNlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkQ2F0ZWdvcnlJRFR3bywKICAgICJDYXRlZ29yeUFkZCgpIC0gQ2hpbGQgQ2F0ZWdvcnkiLAopOwoKIyBjYXRlZ29yeSB0aHJlZQpteSAkQ2F0ZWdvcnlJRFRocmVlID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICBOYW1lICAgICA9PiAnISLCpyQlJi8oKT0/w5wqw4TDlkw6TEAsLi0nIC4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29tbWVudCAgPT4gJ0NoaWxkIENhdGVnb3J5IGZvciB0ZXN0aW5nJywKICAgIFBhcmVudElEID0+ICRDYXRlZ29yeUlEVHdvLAogICAgVmFsaWRJRCAgPT4gMSwKICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRDYXRlZ29yeUlEVGhyZWUsCiAgICAiQ2F0ZWdvcnlBZGQoKSAtIENoaWxkIENhdGVnb3J5IiwKKTsKCiMgY2F0ZWdvcnkgZm91cgpteSAkQ2F0ZWdvcnlJREZvdXIgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUFkZCgKICAgIE5hbWUgICAgID0+ICdDb25uZWN0b3JDYXRlZ29yeUZvdXInIC4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29tbWVudCAgPT4gJ0NhdGVnb3J5IGZvciB0ZXN0aW5nJywKICAgIFBhcmVudElEID0+IDAsCiAgICBWYWxpZElEICA9PiAxLAogICAgVXNlcklEICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENhdGVnb3J5SURGb3VyLAogICAgIkNhdGVnb3J5QWRkKCkgLSBDaGlsZCBDYXRlZ29yeSIsCik7CgpteSAkRkFRSURPbmUgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICBUaXRsZSAgICAgID0+ICdUaXRsZSBGQVEgJyAuICRSYW5kb21JRCAuICdPbmUnIC4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRE9uZSwKICAgIFN0YXRlSUQgICAgPT4gJFB1YmxpY1N0YXRlSUQsCiAgICBMYW5ndWFnZUlEID0+IDEsCiAgICBLZXl3b3JkcyAgID0+ICdzb21lIGtleXdvcmRzJywKICAgIEZpZWxkMSAgICAgPT4gJ1Byb2JsZW0uLi4nLAogICAgRmllbGQyICAgICA9PiAnU29sdXRpb24uLi4nLAogICAgVXNlcklEICAgICA9PiAkVXNlcklELAogICAgQXBwcm92ZWQgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRkFRSURPbmUsCiAgICAiRkFRQWRkKCkgLSBGQVEgT25lIiwKKTsKCm15ICRGQVFJRFR3byA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgIFRpdGxlICAgICAgPT4gJ1RpdGxlIEZBUSAnIC4gJFJhbmRvbUlEIC4gJyBUd28nIC4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRFRocmVlLAogICAgU3RhdGVJRCAgICA9PiAkUHVibGljU3RhdGVJRCwKICAgIExhbmd1YWdlSUQgPT4gMSwKICAgIEtleXdvcmRzICAgPT4gJycsCiAgICBGaWVsZDEgICAgID0+ICdQcm9ibGVtIERlc2NyaXB0aW9uIDEuLi4nLAogICAgRmllbGQyICAgICA9PiAnU29sdXRpb24gbm90IGZvdW5kMS4uLicsCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCiAgICBBcHByb3ZlZCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRGQVFJRFR3bywKICAgICJGQVFBZGQoKSAtIEZBUSBUd28iLAopOwoKbXkgJEZBUUlEVGhyZWUgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICBUaXRsZSAgICAgID0+ICdUaXRsZSDkvb/nlKjkuIvliJfor63oqIAgVGhyZWUnIC4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJREZvdXIsCiAgICBTdGF0ZUlEICAgID0+ICRQdWJsaWNTdGF0ZUlELAogICAgTGFuZ3VhZ2VJRCA9PiAxLAogICAgS2V5d29yZHMgICA9PiAnJywKICAgIEZpZWxkMSAgICAgPT4gJ0xvb2sgZm9yIG1lICcgLiAkUmFuZG9tSUQgLiAnIG9uIHRoZSBzZWFyY2gnLAogICAgRmllbGQyICAgICA9PiAnU29sdXRpb24gbm90IGZvdW5kMS4uLicsCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCiAgICBBcHByb3ZlZCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRGQVFJRFRocmVlLAogICAgIkZBUUFkZCgpIC0gRkFRIFRocmVlIiwKKTsKCiMgZmlsZSBjaGVja3MKZm9yIG15ICRGaWxlIChxdyhiaW4gdHh0KSkgewogICAgbXkgJExvY2F0aW9uID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0hvbWUnKQogICAgICAgIC4gIi9zY3JpcHRzL3Rlc3Qvc2FtcGxlL0dlbmVyaWNJbnRlcmZhY2UvRkFRL0dJLUZBUS1UZXN0LXV0ZjgtMS4kRmlsZSI7CgogICAgbXkgJENvbnRlbnRSZWYgPSAkU2VsZi0+e01haW5PYmplY3R9LT5GaWxlUmVhZCgKICAgICAgICBMb2NhdGlvbiA9PiAkTG9jYXRpb24sCiAgICAgICAgTW9kZSAgICAgPT4gJ2Jpbm1vZGUnLAogICAgKTsKCiAgICBteSAkQXR0YWNobWVudCA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRBZGQoCiAgICAgICAgSXRlbUlEICAgICAgPT4gJEZBUUlEVGhyZWUsCiAgICAgICAgQ29udGVudCAgICAgPT4gJHskQ29udGVudFJlZn0sCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3Rlc3QvJyAuICRGaWxlLAogICAgICAgIEZpbGVuYW1lICAgID0+ICd0ZXN0LicgLiAkRmlsZSwKICAgICAgICBJbmxpbmUgICAgICA9PiAwLCAgICAgICAgICAgICAgICAgIyAoMHwxLCBkZWZhdWx0IDApCiAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRCwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQXR0YWNobWVudCwKICAgICAgICAiQXR0YWNobWVudEFkZCgpIC0gRmlsZSAiIC4gJEZpbGUsCiAgICApOwp9CgpteSAkRkFRSURGb3VyID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgVGl0bGUgICAgICA9PiAnVGl0bGUgRkFRICcgLiAkUmFuZG9tSUQgLiAnINCv0LfRi9C60L7QstGL0LUgRm91cicgLiAkV2Vic2VydmljZU5hbWUsCiAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlERm91ciwKICAgIFN0YXRlSUQgICAgPT4gJFB1YmxpY1N0YXRlSUQsCiAgICBMYW5ndWFnZUlEID0+IDEsCiAgICBLZXl3b3JkcyAgID0+ICcnLAogICAgRmllbGQxICAgICA9PiAnUHJvYmxlbSBEZXNjcmlwdGlvbiAxLi4uJywKICAgIEZpZWxkMiAgICAgPT4gJ1NvbHV0aW9uIG5vdCBmb3VuZDEuLi4nLAogICAgVXNlcklEICAgICA9PiAxLAogICAgQXBwcm92ZWQgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRkFRSURGb3VyLAogICAgIkZBUUFkZCgpIC0gRkFRIEZvdXIiLAopOwoKIyBnZXQgbGFuZ3VhZ2VzIGxpc3QKbXkgJUxhbmd1YWdlcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKbXkgQExhbmd1YWdlTGlzdDsKZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJUxhbmd1YWdlcyApIHsKICAgIG15ICVMYW5ndWFnZSA9ICgKICAgICAgICBJRCAgID0+ICRLZXksCiAgICAgICAgTmFtZSA9PiAkTGFuZ3VhZ2VzeyRLZXl9LAogICAgKTsKICAgIHB1c2ggQExhbmd1YWdlTGlzdCwgeyVMYW5ndWFnZX07Cn0KCiMgZ2V0IEZBUQpteSAlRkFRT25lID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgSXRlbUlEICAgICA9PiAkRkFRSURPbmUsCiAgICBJdGVtRmllbGRzID0+IDEsCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCik7CmZvcmVhY2ggbXkgJEtleSAoIGtleXMgJUZBUU9uZSApIHsKICAgIGlmICggISRGQVFPbmV7JEtleX0gKSB7CiAgICAgICAgJEZBUU9uZXskS2V5fSA9ICcnOwogICAgfQp9CgpteSAlRkFRVHdvID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgSXRlbUlEICAgICA9PiAkRkFRSURUd28sCiAgICBJdGVtRmllbGRzID0+IDEsCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCik7CmZvcmVhY2ggbXkgJEtleSAoIGtleXMgJUZBUVR3byApIHsKICAgIGlmICggISRGQVFUd297JEtleX0gKSB7CiAgICAgICAgJEZBUVR3b3skS2V5fSA9ICcnOwogICAgfQp9CgpteSAlRkFRVGhyZWUgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICBJdGVtSUQgICAgID0+ICRGQVFJRFRocmVlLAogICAgSXRlbUZpZWxkcyA9PiAxLAogICAgVXNlcklEICAgICA9PiAkVXNlcklELAopOwpmb3JlYWNoIG15ICRLZXkgKCBrZXlzICVGQVFUaHJlZSApIHsKICAgIGlmICggISRGQVFUaHJlZXskS2V5fSApIHsKICAgICAgICAkRkFRVGhyZWV7JEtleX0gPSAnJzsKICAgIH0KfQoKbXkgQEluZGV4ID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEluZGV4KAogICAgSXRlbUlEICAgICA9PiAkRkFRSURUaHJlZSwKICAgIFNob3dJbmxpbmUgPT4gMSwgICAgICAgICAgICAgIyAgICggMHwxLCBkZWZhdWx0IDEpCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCik7CgpteSBAQXR0YWNobWVudHNUaHJlZTsKZm9yIG15ICRBdHRhY2htZW50IChASW5kZXgpIHsKICAgIG15ICVGaWxlID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEdldCgKICAgICAgICBJdGVtSUQgPT4gJEZBUUlEVGhyZWUsCiAgICAgICAgRmlsZUlEID0+ICRBdHRhY2htZW50LT57RmlsZUlEfSwKICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICk7CgogICAgIyBjb252ZXJ0IGNvbnRlbnQgdG8gYmFzZTY0CiAgICAkRmlsZXtDb250ZW50fSA9IGVuY29kZV9iYXNlNjQoICRGaWxle0NvbnRlbnR9ICk7CiAgICBwdXNoIEBBdHRhY2htZW50c1RocmVlLCB7JUZpbGV9Owp9CgpteSAlRkFRRm91ciA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgIEl0ZW1JRCAgICAgPT4gJEZBUUlERm91ciwKICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRCwKKTsKZm9yZWFjaCBteSAkS2V5ICgga2V5cyAlRkFRRm91ciApIHsKICAgIGlmICggISRGQVFGb3VyeyRLZXl9ICkgewogICAgICAgICRGQVFGb3VyeyRLZXl9ID0gJyc7CiAgICB9Cn0KCiMgZ2V0IGFsbCBjYXRlZ29yaWVzIHdpdGggdGhlaXIgbG9uZyBuYW1lcwpteSAkQ2F0ZWdvcnlUcmVlID0gJEZBUU9iamVjdC0+R2V0UHVibGljQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgIFZhbGlkICA9PiAxLAogICAgVHlwZSAgID0+ICdydycsCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKbXkgQFB1YmxpY0NhdGVnb3J5TGlzdDsKZm9yIG15ICRLZXkgKCBzb3J0KCBrZXlzICV7JENhdGVnb3J5VHJlZX0gKSApIHsKICAgIG15ICVDYXRlZ29yeSA9ICgKICAgICAgICBJRCAgID0+ICRLZXksCiAgICAgICAgTmFtZSA9PiAkQ2F0ZWdvcnlUcmVlLT57JEtleX0sCiAgICApOwogICAgcHVzaCBAUHVibGljQ2F0ZWdvcnlMaXN0LCB7JUNhdGVnb3J5fTsKfQoKIyBjcmVhdGUgd2Vic2VydmljZSBvYmplY3QKbXkgJFdlYnNlcnZpY2VPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZS0+bmV3KCAleyRTZWxmfSApOwokU2VsZi0+SXMoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAogICAgcmVmICRXZWJzZXJ2aWNlT2JqZWN0LAogICAgIkNyZWF0ZSB3ZWJzZXJ2aWNlIG9iamVjdCIsCik7CgpteSAkV2Vic2VydmljZUlEID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VBZGQoCiAgICBOYW1lICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBQcm92aWRlciA9PiB7CiAgICAgICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZUlELAogICAgIkFkZGVkIFdlYnNlcnZpY2UiLAopOwoKIyBnZXQgcmVtb3RlIGhvc3Qgd2l0aCBzb21lIHByZWNhdXRpb25zIGZvciBjZXJ0YWluIHVuaXQgdGVzdCBzeXN0ZW1zCm15ICRIb3N0OwpteSAkRlFETiA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGUUROJyk7CgojIHRyeSB0byByZXNvbHZlIGZxZG4gaG9zdAppZiAoICRGUUROIG5lICd5b3VyaG9zdC5leGFtcGxlLmNvbScgJiYgZ2V0aG9zdGJ5bmFtZSgkRlFETikgKSB7CiAgICAkSG9zdCA9ICRGUUROOwp9CgojIHRyeSB0byByZXNvbHZlIGxvY2FsaG9zdCBpbnN0ZWFkCmlmICggISRIb3N0ICYmIGdldGhvc3RieW5hbWUoJ2xvY2FsaG9zdCcpICkgewogICAgJEhvc3QgPSAnbG9jYWxob3N0JzsKfQoKIyB1c2UgaGFyZGNvZGVkIGxvY2FsaG9zdCBpcCBhZGRyZXNzCmlmICggISRIb3N0ICkgewogICAgJEhvc3QgPSAnMTI3LjAuMC4xJzsKfQoKIyBwcmVwYXJlIHdlYnNlcnZpY2UgY29uZmlnCm15ICRSZW1vdGVTeXN0ZW0gPQogICAgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0h0dHBUeXBlJykKICAgIC4gJzovLycKICAgIC4gJEhvc3QKICAgIC4gJy8nCiAgICAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTY3JpcHRBbGlhcycpCiAgICAuICcvbnBoLWdlbmVyaWNpbnRlcmZhY2UucGwvV2Vic2VydmljZUlELycKICAgIC4gJFdlYnNlcnZpY2VJRDsKCm15ICRXZWJzZXJ2aWNlQ29uZmlnID0gewoKICAgICMgICAgTmFtZSA9PiAnJywKICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgJ1Rlc3QgZm9yICB1c2luZyBTT0FQIHRyYW5zcG9ydCBiYWNrZW5kLicsCiAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgfSwKICAgIFByb3ZpZGVyID0+IHsKICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICBUeXBlICAgPT4gJ0hUVFA6OlNPQVAnLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMDAwMDAwLAogICAgICAgICAgICAgICAgTmFtZVNwYWNlID0+ICdodHRwOi8vb3Rycy5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+IHsKICAgICAgICAgICAgTGFuZ3VhZ2VMaXN0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0ZBUTo6TGFuZ3VhZ2VMaXN0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHVibGljQ2F0ZWdvcnlMaXN0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0ZBUTo6UHVibGljQ2F0ZWdvcnlMaXN0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHVibGljRkFRU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0ZBUTo6UHVibGljRkFRU2VhcmNoJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHVibGljRkFRR2V0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0ZBUTo6UHVibGljRkFRR2V0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFJlcXVlc3RlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmNvZGluZyAgPT4gJ1VURi04JywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgSW52b2tlciA9PiB7CiAgICAgICAgICAgIExhbmd1YWdlTGlzdCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHVibGljQ2F0ZWdvcnlMaXN0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBQdWJsaWNGQVFTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFB1YmxpY0ZBUUdldCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKfTsKCiMgdXBkYXRlIHdlYnNlcnZpY2Ugd2l0aCByZWFsIGNvbmZpZwpteSAkV2Vic2VydmljZVVwZGF0ZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlVXBkYXRlKAogICAgSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgTmFtZSAgICA9PiAkV2Vic2VydmljZU5hbWUsCiAgICBDb25maWcgID0+ICRXZWJzZXJ2aWNlQ29uZmlnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAkVXNlcklELAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlVXBkYXRlLAogICAgIlVwZGF0ZWQgV2Vic2VydmljZSAkV2Vic2VydmljZUlEIC0gJFdlYnNlcnZpY2VOYW1lIiwKKTsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgPT4gJ1Rlc3QgMScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgICAgICAgICAgID0+ICcxJywKICAgICAgICBSZXF1ZXN0RGF0YSAgICAgICAgICAgICAgPT4ge30sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMYW5ndWFnZSA9PiBcQExhbmd1YWdlTGlzdCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdMYW5ndWFnZUxpc3QnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgPT4gJ1Rlc3QgMicsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgICAgICAgICAgID0+ICcxJywKICAgICAgICBSZXF1ZXN0RGF0YSAgICAgICAgICAgICAgPT4ge30sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgICAgIENhdGVnb3J5ID0+IFxAUHVibGljQ2F0ZWdvcnlMaXN0LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdQdWJsaWNDYXRlZ29yeUxpc3QnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGVzdCAzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAnMScsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgID0+ICdUaXRsZSBGQVEgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgT3JkZXJCeSA9PiAnRkFRSUQnLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgICAgIElEID0+IFsKICAgICAgICAgICAgICAgICAgICAkRkFRSURGb3VyLAogICAgICAgICAgICAgICAgICAgICRGQVFJRFR3bywKICAgICAgICAgICAgICAgICAgICAkRkFRSURPbmUsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdQdWJsaWNGQVFTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGVzdCA0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAnMScsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBXaGF0ICAgID0+ICdMb29rIGZvciBtZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBPcmRlckJ5ID0+ICdGQVFJRCcsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgICAgIERhdGEgICAgPT4gewogICAgICAgICAgICAgICAgSUQgPT4gJEZBUUlEVGhyZWUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1B1YmxpY0ZBUVNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUZXN0IDUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+ICcxJywKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSURGb3VyLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgICAgIEZBUUl0ZW0gPT4gewogICAgICAgICAgICAgICAgICAgICVGQVFGb3VyLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgICAgIEZBUUl0ZW0gPT4gWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJUZBUUZvdXIsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnUHVibGljRkFRR2V0JywKICAgICAgICBJdGVtSUQgICAgPT4gJEZBUUlERm91ciwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1Rlc3QgNicsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gJzEnLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgSUQgPT4gJEZBUUlERm91ciwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUHVibGljRkFRR2V0Lk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnUHVibGljRkFRR2V0OiBHb3Qgbm8gSXRlbUlEIScKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQoKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdQdWJsaWNGQVFHZXQuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdQdWJsaWNGQVFHZXQ6IEdvdCBubyBJdGVtSUQhJwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCgogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdQdWJsaWNGQVFHZXQnLAogICAgICAgIEl0ZW1JRCAgICA9PiAkRkFRSURGb3VyLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGVzdCA3JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAnMScsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBJdGVtSUQgPT4gJ05vdEl0ZW1JRCcsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1B1YmxpY0ZBUUdldC5Ob3RWYWxpZEZBUUlEJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJ1B1YmxpY0ZBUUdldDogQ291bGQgbm90IGdldCBGQVEgZGF0YSBpbiBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpQdWJsaWNGQVFHZXQ6OlJ1bigpJwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCgogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1B1YmxpY0ZBUUdldC5Ob3RWYWxpZEZBUUlEJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJ1B1YmxpY0ZBUUdldDogQ291bGQgbm90IGdldCBGQVEgZGF0YSBpbiBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpQdWJsaWNGQVFHZXQ6OlJ1bigpJwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCgogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdQdWJsaWNGQVFHZXQnLAogICAgICAgIEl0ZW1JRCAgICA9PiAnTm90SXRlbUlEJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1Rlc3QgOCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gJzEnLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgSXRlbUlEID0+ICRGQVFJRFRocmVlLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgICAgIEZBUUl0ZW0gPT4gewogICAgICAgICAgICAgICAgICAgICVGQVFUaHJlZSwKICAgICAgICAgICAgICAgICAgICBBdHRhY2htZW50ID0+IFxAQXR0YWNobWVudHNUaHJlZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgICAgICBGQVFJdGVtID0+IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICVGQVFUaHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudCA9PiBcQEF0dGFjaG1lbnRzVGhyZWUsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1B1YmxpY0ZBUUdldCcsCiAgICAgICAgSXRlbUlEICAgID0+ICRGQVFJRFRocmVlLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGVzdCA5JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAnMScsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBPcmRlckJ5ID0+ICdOb3RFeGlzdGluZ0ZpZWxkJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnUHVibGljRkFRU2VhcmNoLk5vdEZBUURhdGEnLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAnUHVibGljRkFRU2VhcmNoOiBDb3VsZCBub3QgZ2V0IEZBUSBkYXRhIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0ZBUVNlYXJjaDo6UnVuKCknCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdQdWJsaWNGQVFTZWFyY2guTm90RkFRRGF0YScsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICdQdWJsaWNGQVFTZWFyY2g6IENvdWxkIG5vdCBnZXQgRkFRIGRhdGEgaW4gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljRkFRU2VhcmNoOjpSdW4oKScKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdQdWJsaWNGQVFTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGVzdCAxMCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gJzEnLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgV2hhdCA9PiAnTm90RXhpc3RpbmdWYWx1ZScsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1B1YmxpY0ZBUVNlYXJjaC5Ob3RGQVFEYXRhJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJ1B1YmxpY0ZBUVNlYXJjaDogQ291bGQgbm90IGdldCBGQVEgZGF0YSBpbiBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpQdWJsaWNGQVFTZWFyY2g6OlJ1bigpJwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnUHVibGljRkFRU2VhcmNoLk5vdEZBUURhdGEnLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAnUHVibGljRkFRU2VhcmNoOiBDb3VsZCBub3QgZ2V0IEZBUSBkYXRhIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0ZBUVNlYXJjaDo6UnVuKCknCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnUHVibGljRkFRU2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1Rlc3QgMTEnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+ICcxJywKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIEl0ZW1JRCA9PiAiJEZBUUlET25lLCRGQVFJRFR3bywkRkFRSURUaHJlZSIsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgICAgIERhdGEgICAgPT4gewogICAgICAgICAgICAgICAgRkFRSXRlbSA9PiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAlRkFRT25lLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAlRkFRVHdvLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAlRkFRVGhyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gXEBBdHRhY2htZW50c1RocmVlLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdQdWJsaWNGQVFHZXQnLAogICAgICAgIEl0ZW1JRCAgICA9PiAiJEZBUUlET25lLCRGQVFJRFR3bywkRkFRSURUaHJlZSIsCiAgICB9LAoKKTsKCiMgZGVidWdnZXIgb2JqZWN0Cm15ICREZWJ1Z2dlck9iamVjdCA9IEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXItPm5ldygKICAgICV7JFNlbGZ9LAogICAgRGVidWdnZXJDb25maWcgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBXZWJzZXJ2aWNlSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgQ29tbXVuaWNhdGlvblR5cGUgPT4gJ1Byb3ZpZGVyJywKKTsKJFNlbGYtPklzKAogICAgcmVmICREZWJ1Z2dlck9iamVjdCwKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyJywKICAgICdEZWJ1Z2dlck9iamVjdCBpbnN0YW5jaWF0ZSBjb3JyZWN0bHknLAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAjIGNyZWF0ZSBsb2NhbCBvYmplY3QKICAgIG15ICRMb2NhbE9iamVjdCA9ICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjokVGVzdC0+e09wZXJhdGlvbn0iLT5uZXcoCiAgICAgICAgJXskU2VsZn0sCiAgICAgICAgRGVidWdnZXJPYmplY3QgPT4gJERlYnVnZ2VyT2JqZWN0LAogICAgICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6JFRlc3QtPntPcGVyYXRpb259IiwKICAgICAgICByZWYgJExvY2FsT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ3JlYXRlIGxvY2FsIG9iamVjdCIsCiAgICApOwoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKICAgIG15ICRMb2NhbFJlc3VsdCA9ICRMb2NhbE9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRUZXN0LT57UmVxdWVzdERhdGF9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJExvY2FsUmVzdWx0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICMgd29ya2Fyb3VuZCBiZWNhdXNlIHJlc3VsdHMgZnJvbSBkaXJlY3QgY2FsbCBhbmQKICAgICMgZnJvbSBTT0FQIGNhbGwgYXJlIGEgbGl0dGxlIGJpdCBkaWZmZXJlbnQKICAgIGlmICggJFRlc3QtPntPcGVyYXRpb259IGVxICdQdWJsaWNGQVFHZXQnICkgewoKICAgICAgICBpZiAoIHJlZiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0ZBUUl0ZW19IGVxICdBUlJBWScgKSB7CiAgICAgICAgICAgIGZvciBteSAkRkFRSXRlbSAoIEB7ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RkFRSXRlbX0gfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JEZBUUl0ZW19ICkgewogICAgICAgICAgICAgICAgICAgIGlmICggISRGQVFJdGVtLT57JEtleX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRGQVFJdGVtLT57JEtleX0gPSAnJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfQoKICAgICMgcmVtb3ZlIEVycm9yTWVzc2FnZSBwYXJhbWV0ZXIgZnJvbSBkaXJlY3QgY2FsbAogICAgIyByZXN1bHQgdG8gYmUgY29uc2lzdGVudCB3aXRoIFNPQVAgY2FsbCByZXN1bHQKICAgIGlmICggJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfSApIHsKICAgICAgICBkZWxldGUgJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfTsKICAgIH0KCiAgICBpZiAoICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGF9ICkgewogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LAogICAgICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmV0dXJuTG9jYWxEYXRhfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQsCiAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwogICAgfQoKICAgICMgcmVtb3RlIGNhbGwgdXNpbmcgdGhlIHN5c3RlbSBhcyBSZXF1ZXN0ZXIgYW5kIFByb3ZpZGVyCgogICAgIyBjcmVhdGUgcmVxdWVzdGVyIG9iamVjdAogICAgbXkgJFJlcXVlc3Rlck9iamVjdCA9IEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgICAgICByZWYgJFJlcXVlc3Rlck9iamVjdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0IiwKICAgICk7CgogICAgIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2Vic2VydmljZQogICAgbXkgJFJlcXVlc3RlclJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiAkVGVzdC0+e1JlcXVlc3REYXRhfSwKICAgICk7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICAnSEFTSCcsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICMgd29ya2Fyb3VuZCBiZWNhdXNlIHJlc3VsdHMgZnJvbSBkaXJlY3QgY2FsbCBhbmQKICAgICMgZnJvbSBTT0FQIGNhbGwgYXJlIGEgbGl0dGxlIGJpdCBkaWZmZXJlbnQKICAgIGlmICggJFRlc3QtPntPcGVyYXRpb259IGVxICdQdWJsaWNGQVFHZXQnICYmICRUZXN0LT57U3VjY2Vzc1JlcXVlc3R9ICkgewoKICAgICAgICBpZiAoIHJlZiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntGQVFJdGVtfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0ZBUUl0ZW19IH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntGQVFJdGVtfS0+eyRLZXl9ICkgewogICAgICAgICAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0ZBUUl0ZW19LT57JEtleX0gPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoIHJlZiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntGQVFJdGVtfSBlcSAnQVJSQVknICkgewogICAgICAgICAgICBmb3IgbXkgJEZBUUl0ZW0gKCBAeyAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntGQVFJdGVtfSB9ICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskRkFRSXRlbX0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEZBUUl0ZW0tPnskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEZBUUl0ZW0tPnskS2V5fSA9ICcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e1N1Y2Nlc3N9LAogICAgICAgICRUZXN0LT57U3VjY2Vzc1JlcXVlc3R9LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIC0gU3VjY2VzcyBzdGF0dXMiLAogICAgKTsKCiAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YX0sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgc3VjY2Vzc2Z1bCByZXN1bHQgKG5lZWRzIGNvbmZpZ3VyZWQgYW5kIHJ1bm5pbmcgd2Vic2VydmVyKSIsCiAgICApOwoKfSAgICAjZW5kIGxvb3AKCiMgY2xlYW4gdXAgd2Vic2VydmljZQpteSAkV2Vic2VydmljZURlbGV0ZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlRGVsZXRlKAogICAgSUQgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZURlbGV0ZSwKICAgICJEZWxldGVkIFdlYnNlcnZpY2UgJFdlYnNlcnZpY2VJRCIsCik7CgojIGNsZWFuIHVwIEZBUSBzdHVmZgpteSAkRkFRRGVsZXRlID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgSXRlbUlEID0+ICRGQVFJRE9uZSwKICAgIFVzZXJJRCA9PiAkVXNlcklELAopOwokU2VsZi0+VHJ1ZSgKICAgICRGQVFEZWxldGUsCiAgICAiRkFRRGVsZXRlKCkgLSBGQVFJRDogJEZBUUlET25lIiwKKTsKCiRGQVFEZWxldGUgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICBJdGVtSUQgPT4gJEZBUUlEVHdvLAogICAgVXNlcklEID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgJEZBUURlbGV0ZSwKICAgICJGQVFEZWxldGUoKSAtIEZBUUlEOiAkRkFRSURUd28iLAopOwoKJEZBUURlbGV0ZSA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgIEl0ZW1JRCA9PiAkRkFRSURUaHJlZSwKICAgIFVzZXJJRCA9PiAkVXNlcklELAopOwokU2VsZi0+VHJ1ZSgKICAgICRGQVFEZWxldGUsCiAgICAiRkFRRGVsZXRlKCkgLSBGQVFJRDogJEZBUUlEVGhyZWUiLAopOwoKJEZBUURlbGV0ZSA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgIEl0ZW1JRCA9PiAkRkFRSURGb3VyLAogICAgVXNlcklEID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgJEZBUURlbGV0ZSwKICAgICJGQVFEZWxldGUoKSAtIEZBUUlEOiAkRkFRSURGb3VyIiwKKTsKCm15ICRDYXRlZ29yeURlbGV0ZSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RGVsZXRlKAogICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJREZvdXIsCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRDYXRlZ29yeURlbGV0ZSwKICAgICJDYXRlZ29yeURlbGV0ZSgpIC0gQ2F0ZWdvcnk6ICRDYXRlZ29yeUlERm91ciIsCik7CgokQ2F0ZWdvcnlEZWxldGUgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeURlbGV0ZSgKICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SURUaHJlZSwKICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENhdGVnb3J5RGVsZXRlLAogICAgIkNhdGVnb3J5RGVsZXRlKCkgLSBDYXRlZ29yeTogJENhdGVnb3J5SURUaHJlZSIsCik7CgokQ2F0ZWdvcnlEZWxldGUgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeURlbGV0ZSgKICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SURUd28sCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRDYXRlZ29yeURlbGV0ZSwKICAgICJDYXRlZ29yeURlbGV0ZSgpIC0gQ2F0ZWdvcnk6ICRDYXRlZ29yeUlEVHdvIiwKKTsKCiRDYXRlZ29yeURlbGV0ZSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RGVsZXRlKAogICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRE9uZSwKICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENhdGVnb3J5RGVsZXRlLAogICAgIkNhdGVnb3J5RGVsZXRlKCkgLSBDYXRlZ29yeTogJENhdGVnb3J5SURPbmUiLAopOwoKMTsK
fi91dGYtOC1maWxlLcOkw7bDvMOfLeOCq+OCueOCv+ODni50eHQKCkp1c3QgdGV4dCBmb3IgdGhlIGF0dGFjaG1lbnQKCuS9v+eUqOS4i+WIl+ivreiogAoK0K/Qt9GL0LrQvtCy0YvQtQoKISLCpyQlJi8oKT0/w5wqw4TDlkw6TEAsLi0K
fi91dGYtOC1maWxlLcOkw7bDvMOfLeOCq+OCueOCv+ODni50eHQKCkp1c3QgdGV4dCBmb3IgdGhlIGF0dGFjaG1lbnQKCuS9v+eUqOS4i+WIl+ivreiogAoK0K/Qt9GL0LrQvtCy0YvQtQoKISLCpyQlJi8oKT0/w5wqw4TDlkw6TEAsLi0K
JVBERi0xLjQKJaqrrK0KMSAwIG9iago8PAovQ3JlYXRvciAoQXBhY2hlIEZPUCBWZXJzaW9uIDIuMSkKL1Byb2R1Y2VyIChBcGFjaGUgRk9QIFZlcnNpb24gMi4xKQovQ3JlYXRpb25EYXRlIChEOjIwMTcxMDA5MTQxMjI2KzAyJzAwJykKPj4KZW5kb2JqCjIgMCBvYmoKPDwKICAvTiAzCiAgL0xlbmd0aCAzIDAgUgogIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nO2ZZ1BUWRaA73uvc6Chu2kyNDlJlNCA5JwkSBYV6G4yLTQ5mJDBERhBRCQpgogCDjg6BBlFRRQDoqCAeRoZBJRxcBRRUVnAH7NVu7VbW7W1f7bPj/e+OufWO+e+ulXvq3oAyJDi2QnJsD4ACbwUvq+zHTMoOISJvQ9wgAxIgAow4ezkRFtvbw+wHCtrwT/E+1EArdzv6fzz+r8MEieBxwEAoi9zLIebzF7mncsczUngrOSnVzg9JTEFANh7men85QGXmbPCEd84Y4WjvnHR6ho/X/tlPgoAjhS1yoRTKxyxytSuFWZH8xMAkO5bXq/CTuQvP196pZfitxlWQ3RlP8woLo/LD0/hcpj/4db+ffxdL3Ty8sv/rzf4H/dZOTvf6K3l6pmAGBV/5baWAcB6DQBS8ldO5TAAlN0AdPT8lYs4DkBnCQCSz9ip/LRvOdTq7IAAKIAOpIA8UAYaQAcYAlNgAWyAI3ADXsAPBIPNgA2iQQLgg3SQA3aBfFAISsBBUAVqQQNoAq3gDOgE58FlcA3cAnfBCHgMBGASvAJz4D1YhCAIC5EhGiQFKUCqkDZkCLEgK8gR8oB8oWAoDIqCeFAqlAPthgqhUqgKqoOaoJ+gc9Bl6AY0BD2ExqEZ6E/oE4zAJJgOy8FqsB7Mgm1hd9gP3gRHwUlwFpwH74Mr4Hr4FNwBX4ZvwSOwAH4FzyMAISIMRBHRQViIPeKFhCCRCB/ZjhQg5Ug90op0I/3IPUSAzCIfURgUDcVE6aAsUC4ofxQblYTajipCVaFOojpQfah7qHHUHOormoyWRWujzdGu6CB0FDodnY8uRzei29FX0SPoSfR7DAbDwKhjTDEumGBMLCYbU4Q5jGnDXMIMYSYw81gsVgqrjbXEemHDsSnYfGwl9hT2InYYO4n9gCPiFHCGOCdcCI6Hy8WV45pxPbhh3BRuES+KV8Wb473wHHwmvhjfgO/G38FP4hcJYgR1giXBjxBL2EWoILQSrhKeEN4SiUQlohnRhxhD3EmsIJ4mXieOEz+SqCQtkj0plJRK2kc6QbpEekh6SyaT1cg25BByCnkfuYl8hfyM/EGEJqIr4irCEdkhUi3SITIs8pqCp6hSbCmbKVmUcspZyh3KrCheVE3UXjRcdLtoteg50THReTGamIGYl1iCWJFYs9gNsWkqlqpGdaRyqHnUY9Qr1AkaQlOm2dPYtN20BtpV2iQdQ1enu9Jj6YX0H+mD9DlxqriReIB4hni1+AVxAQNhqDFcGfGMYsYZxijjk4SchK0EV2KvRKvEsMSCpIykjSRXskCyTXJE8pMUU8pRKk5qv1Sn1FNplLSWtI90uvQR6avSszJ0GQsZtkyBzBmZR7KwrJasr2y27DHZAdl5OXk5Z7lEuUq5K3Kz8gx5G/lY+TL5HvkZBZqClUKMQpnCRYWXTHGmLTOeWcHsY84pyiq6KKYq1ikOKi4qqSv5K+UqtSk9VSYos5QjlcuUe5XnVBRUPFVyVFpUHqniVVmq0aqHVPtVF9TU1QLV9qh1qk2rS6q7qmept6g/0SBrWGskadRr3NfEaLI04zQPa97VgrWMtaK1qrXuaMPaJtox2oe1h9ag15it4a2pXzOmQ9Kx1UnTadEZ12Xoeujm6nbqvtZT0QvR26/Xr/dV31g/Xr9B/7EB1cDNINeg2+BPQy1DtmG14f215LVOa3es7Vr7xkjbiGt0xOiBMc3Y03iPca/xFxNTE75Jq8mMqYppmGmN6RiLzvJmFbGum6HN7Mx2mJ03+2huYp5ifsb8DwsdiziLZovpderruOsa1k1YKlmGW9ZZCqyYVmFWR60E1orW4db11s9tlG04No02U7aatrG2p2xf2+nb8e3a7Rbsze232V9yQBycHQocBh2pjv6OVY7PnJScopxanOacjZ2znS+5oF3cXfa7jLnKubJdm1zn3Ezdtrn1uZPcN7hXuT/30PLge3R7wp5ungc8n6xXXc9b3+kFvFy9Dng99Vb3TvL+xQfj4+1T7fPC18A3x7d/A23Dlg3NG9772fkV+z321/BP9e8NoASEBjQFLAQ6BJYGCoL0grYF3QqWDo4J7grBhgSENIbMb3TceHDjZKhxaH7o6Cb1TRmbbmyW3hy/+cIWypbwLWfD0GGBYc1hn8O9wuvD5yNcI2oi5tj27EPsVxwbThlnhmvJLeVORVpGlkZOR1lGHYiaibaOLo+ejbGPqYp5E+sSWxu7EOcVdyJuKT4wvi0BlxCWcI5H5cXx+rbKb83YOpSonZifKEgyTzqYNMd35zcmQ8mbkrtS6Msf6YFUjdTvUsfTrNKq0z6kB6SfzRDL4GUMZGpl7s2cynLKOp6NymZn9+Yo5uzKGd9mu61uO7Q9YnvvDuUdeTsmdzrvPLmLsCtu1+1c/dzS3He7A3d358nl7cyb+M75u5Z8kXx+/tgeiz2136O+j/l+cO/avZV7vxZwCm4W6heWF34uYhfd/MHgh4oflvZF7hssNik+UoIp4ZWM7rfef7JUrDSrdOKA54GOMmZZQdm7g1sO3ig3Kq89RDiUekhQ4VHRValSWVL5uSq6aqTarrqtRrZmb83CYc7h4SM2R1pr5WoLaz8djTn6oM65rqNerb78GOZY2rEXDQEN/cdZx5sapRsLG7+c4J0QnPQ92ddk2tTULNtc3AK3pLbMnAo9dfdHhx+7WnVa69oYbYWnwenU0y9/Cvtp9Iz7md6zrLOtP6v+XNNOay/ogDoyO+Y6ozsFXcFdQ+fczvV2W3S3/6L7y4nziuerL4hfKO4h9OT1LF3Mujh/KfHS7OWoyxO9W3ofXwm6cr/Pp2/wqvvV69ecrl3pt+2/eN3y+vkb5jfO3WTd7LxlcqtjwHig/bbx7fZBk8GOO6Z3uu6a3e0eWjfUM2w9fPmew71r913v3xpZPzI06j/6YCx0TPCA82D6YfzDN4/SHi0+3vkE/aTgqejT8meyz+p/1fy1TWAiuDDuMD7wfMPzxxPsiVe/Jf/2eTLvBflF+ZTCVNO04fT5GaeZuy83vpx8lfhqcTb/d7Hfa15rvP75D5s/BuaC5ibf8N8s/Vn0VurtiXdG73rnveefvU94v7hQ8EHqw8mPrI/9nwI/TS2mf8Z+rvii+aX7q/vXJ0sJS0tCFxC6gNAFhC4gdAGhCwhdQOgCQhcQuoDQBYQuIHQBoQsIXeD/2AVW/+MsB7JyOTYGgF82AB63AaisAkAtEgBKaAo3I2WlytvKZG9NzOTHREWnrGGmJnOZkXwuNz5zpfY3+wIKCAplbmRzdHJlYW0KZW5kb2JqCjMgMCBvYmoKMjQ1MwplbmRvYmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+ZW48L2RjOmxhbmd1YWdlPgo8ZGM6ZGF0ZT4yMDE3LTEwLTA5VDE0OjEyOjI2KzAyOjAwPC9kYzpkYXRlPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiB4bWxuczpwZGY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8iIHJkZjphYm91dD0iIj4KPHBkZjpQcm9kdWNlcj5BcGFjaGUgRk9QIFZlcnNpb24gMi4xPC9wZGY6UHJvZHVjZXI+CjxwZGY6UERGVmVyc2lvbj4xLjQ8L3BkZjpQREZWZXJzaW9uPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHJkZjphYm91dD0iIj4KPHhtcDpDcmVhdG9yVG9vbD5BcGFjaGUgRk9QIFZlcnNpb24gMi4xPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMTctMTAtMDlUMTQ6MTI6MjYrMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDE3LTEwLTA5VDE0OjEyOjI2KzAyOjAwPC94bXA6Q3JlYXRlRGF0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L0kKCj4+CmVuZG9iago3MCAwIG9iago8PCAvVVJJIChodHRwOi8vbG9jYWxob3N0L290cnMvaW5kZXgucGw/QWN0aW9uPUFkbWluRkFRRXhwbG9yZXI7Q2F0ZWdvcnk9TWlzYykKL1MgL1VSSSA+PgplbmRvYmoKNzEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgOTYuNTYgNDExLjIwNSA0NTguMjYgNDIxLjE5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MCAwIFIKL0ggL0kKCj4+CmVuZG9iago3MiAwIG9iago8PCAvVVJJIChodHRwOi8vbG9jYWxob3N0L290cnMvaW5kZXgucGw/QWN0aW9uPUFkbWluRkFRRXhwbG9yZXI7Q2F0ZWdvcnk9TXklMjBDYXRlZ29yeSkKL1MgL1VSSSA+PgplbmRvYmoKNzMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgODAuMCAzNjcuMjA1IDQ5OC44NCAzNzcuMTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDcyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjc0IDAgb2JqCjw8IC9VUkkgKGh0dHA6Ly9sb2NhbGhvc3Qvb3Rycy9pbmRleC5wbD9BY3Rpb249Q3VzdG9tZXJGQVFFeHBsb3JlcjtDYXRlZ29yeT1HcmFuUGFyZW50OjpQYXJlbnQ6OlNvbikKL1MgL1VSSSA+PgplbmRvYmoKNzUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgODAuMCAzNDUuMjA1IDE4MS40NyAzNTUuMTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDc0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjc2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgMzMzLjIwNSA0NTguOTcgMzQzLjE5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3NCAwIFIKL0ggL0kKCj4+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MCBSCiAgL1R5cGUgL1BhZ2UKICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQogIC9Dcm9wQm94IFswIDAgNjEyIDc5Ml0KICAvQmxlZWRCb3ggWzAgMCA2MTIgNzkyXQogIC9UcmltQm94IFswIDAgNjEyIDc5Ml0KICAvUGFyZW50IDE1IDAgUgogIC9Db250ZW50cyAxMDIgMCBSCj4+CmVuZG9iagoxMDUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjIgMCBSIC9YWVogNzIuMCA3MjAuMCBudWxsXQo+PgplbmRvYmoKMTA2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgNjc5LjYyOSAxMTcuMTkgNjg5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMDUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTA3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMS4zMiA2NzkuNjI5IDU0MC4wIDY4OS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTA1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjEwOCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iagoxMDkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgODAuMCA2NjcuNjI5IDEzNy4xMTYgNjc3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMDggMCBSCi9IIC9JCgo+PgplbmRvYmoKMTEwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNjY3LjYyOSA1MzkuOTk4IDY3Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTA4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjExMSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDcwMC44IG51bGxdCj4+CmVuZG9iagoxMTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNjU1LjYyOSAxODMuNzM5IDY2NS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTExIDAgUgovSCAvSQoKPj4KZW5kb2JqCjExMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuODQ4IDY1NS42MjkgNTQwLjIwOCA2NjUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDExMSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMTQgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjUgMCBSIC9YWVogNzIuMCA2NDQuNzI4IG51bGxdCj4+CmVuZG9iagoxMTUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNjQzLjYyOSAyMDAuOTUxIDY1My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTE0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjExNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDY0My42MjkgNTM5Ljk5OCA2NTMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDExNCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMTcgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjUgMCBSIC9YWVogNzIuMCA1ODguNjU2IG51bGxdCj4+CmVuZG9iagoxMTggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNjMxLjYyOSAxNzguNDk5IDY0MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTE3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjExOSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDYzMS42MjkgNTM5Ljk5OCA2NDEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDExNyAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMjAgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjUgMCBSIC9YWVogNzIuMCA1MzIuNTg0IG51bGxdCj4+CmVuZG9iagoxMjEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNjE5LjYyOSAyMDQuOTk5IDYyOS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTIwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjEyMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDYxOS42MjkgNTM5Ljk5OCA2MjkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDEyMCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMjMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjUgMCBSIC9YWVogNzIuMCA0NzYuNTEyIG51bGxdCj4+CmVuZG9iagoxMjQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNjA3LjYyOSAyNzUuMjk0IDYxNy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTIzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjEyNSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDYwNy42MjkgNTM5Ljk5OCA2MTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDEyMyAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMjYgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjUgMCBSIC9YWVogNzIuMCAzOTYuNDQgbnVsbF0KPj4KZW5kb2JqCjEyNyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1OTUuNjI5IDM0MS44NTkgNjA1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMjYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTI4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNC41MjQgNTk1LjYyOSA1NDAuODg0IDYwNS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTI2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjEyOSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDM0MC4zNjggbnVsbF0KPj4KZW5kb2JqCjEzMCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1ODMuNjI5IDE5MS4wNjkgNTkzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMjkgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTMxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNTgzLjYyOSA1MzkuOTk4IDU5My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTI5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjEzMiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDI4NC4yOTYgbnVsbF0KPj4KZW5kb2JqCjEzMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1NzEuNjI5IDI0OS42MzEgNTgxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMzIgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTM0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNTcxLjYyOSA1MzkuOTk4IDU4MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTMyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjEzNSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDIyOC4yMjQgbnVsbF0KPj4KZW5kb2JqCjEzNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1NTkuNjI5IDE5My4wNTUgNTY5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMzUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTM3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNTU5LjYyOSA1MzkuOTk4IDU2OS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTM1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjEzOCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDE3Mi4xNTIgbnVsbF0KPj4KZW5kb2JqCjEzOSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1NDcuNjI5IDI4NS4zOTggNTU3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMzggMCBSCi9IIC9JCgo+PgplbmRvYmoKMTQwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNC41NzggNTQ3LjYyOSA1NDAuOTM4IDU1Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTM4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE0MSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDExNi4wOCBudWxsXQo+PgplbmRvYmoKMTQyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDUzNS42MjkgMzEzLjQ4NyA1NDUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE0MSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNDMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCA1MzUuNjI5IDUzOS45OTggNTQ1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNDEgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTQ0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzI4IDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjE0NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1MjMuNjI5IDIxMi40NjkgNTMzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNDQgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTQ2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNTIzLjYyOSA1MzkuOTk4IDUzMy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTQ0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE0NyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyOCAwIFIgL1hZWiA3Mi4wIDY4My42IG51bGxdCj4+CmVuZG9iagoxNDggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNTExLjYyOSAyOTEuMDYxIDUyMS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTQ3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE0OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDUxMS42MjkgNTM5Ljk5OCA1MjEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE0NyAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNTAgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjggMCBSIC9YWVogNzIuMCA2MjkuMiBudWxsXQo+PgplbmRvYmoKMTUxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDQ5OS42MjkgMjIzLjEzNiA1MDkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE1MCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjgwOCA0OTkuNjI5IDU0MC4xNjggNTA5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNTAgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTUzIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzI4IDAgUiAvWFlaIDcyLjAgNTc0LjggbnVsbF0KPj4KZW5kb2JqCjE1NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA0ODcuNjI5IDM4Ny4wNDMgNDk3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNTMgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTU1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNDg3LjYyOSA1MzkuOTk4IDQ5Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTUzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjE1NiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszMSAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iagoxNTcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgODAuMCA0NzUuNjI5IDIwMi4zOTYgNDg1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNTYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTU4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNDc1LjYyOSA1MzkuOTk4IDQ4NS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTU2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE1OSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszMSAwIFIgL1hZWiA3Mi4wIDcwMC44IG51bGxdCj4+CmVuZG9iagoxNjAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNDYzLjYyOSAxNzMuNDA4IDQ3My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTU5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE2MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDQ2My42MjkgNTM5Ljk5OCA0NzMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE1OSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNjIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzEgMCBSIC9YWVogNzIuMCA2MjYuNCBudWxsXQo+PgplbmRvYmoKMTYzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDQ1MS42MjkgMTY0LjkxMyA0NjEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE2MiAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNjQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjgwNyA0NTEuNjI5IDU0MC4xNjcgNDYxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNjIgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTY1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzMxIDAgUiAvWFlaIDcyLjAgNTU4LjAgbnVsbF0KPj4KZW5kb2JqCjE2NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA0MzkuNjI5IDIwOC40MjEgNDQ5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNjUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTY3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNDM5LjYyOSA1MzkuOTk4IDQ0OS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTY1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE2OCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszMSAwIFIgL1hZWiA3Mi4wIDQ4OS42IG51bGxdCj4+CmVuZG9iagoxNjkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNDI3LjYyOSAyMjEuNDA4IDQzNy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTY4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE3MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDQyNy42MjkgNTM5Ljk5OCA0MzcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE2OCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNzEgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzcgMCBSIC9YWVogNzIuMCA3MjAuMCBudWxsXQo+PgplbmRvYmoKMTcyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgNDE1LjYyOSAxNDkuMzkgNDI1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNzEgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTczIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNDE1LjYyOSA1MzkuOTk4IDQyNS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTcxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjE3NCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszNyAwIFIgL1hZWiA3Mi4wIDYzMi44IG51bGxdCj4+CmVuZG9iagoxNzUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNDAzLjYyOSAxOTkuMDA2IDQxMy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTc0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE3NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDQwMy42MjkgNTM5Ljk5OCA0MTMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE3NCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNzcgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzcgMCBSIC9YWVogNzIuMCA1NDQuNCBudWxsXQo+PgplbmRvYmoKMTc4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDM5MS42MjkgMTkxLjg2MyA0MDEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE3NyAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNzkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCAzOTEuNjI5IDUzOS45OTggNDAxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNzcgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTgwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQwIDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjE4MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDM3OS42MjkgMTQ2LjUxMyAzODkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE4MCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxODIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCAzNzkuNjI5IDUzOS45OTggMzg5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxODAgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTgzIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQwIDAgUiAvWFlaIDcyLjAgNjY2LjggbnVsbF0KPj4KZW5kb2JqCjE4NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCAzNjcuNjI5IDI4MC4xMTcgMzc3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxODMgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTg1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggMzY3LjYyOSA1MzkuOTk4IDM3Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTgzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjE4NiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs0MCAwIFIgL1hZWiA3Mi4wIDYwMC40IG51bGxdCj4+CmVuZG9iagoxODcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgMzU1LjYyOSAyMTcuMTUyIDM2NS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTg2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE4OCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDM1NS42MjkgNTM5Ljk5OCAzNjUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE4NiAwIFIKL0ggL0kKCj4+CmVuZG9iagoxODkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDAgMCBSIC9YWVogNzIuMCA1NTguMCBudWxsXQo+PgplbmRvYmoKMTkwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDM0My42MjkgMjI0Ljk4NiAzNTMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE4OSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxOTEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCAzNDMuNjI5IDUzOS45OTggMzUzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxODkgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTkyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQzIDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjE5MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDMzMS42MjkgMTYxLjc4NCAzNDEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE5MiAwIFIKL0ggL0kKCj4+CmVuZG9iagoxOTQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCAzMzEuNjI5IDUzOS45OTggMzQxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxOTIgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTk1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQzIDAgUiAvWFlaIDcyLjAgNzAwLjggbnVsbF0KPj4KZW5kb2JqCjE5NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCAzMTkuNjI5IDIwNy40ODkgMzI5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxOTUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTk3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggMzE5LjYyOSA1MzkuOTk4IDMyOS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTk1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE5OCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs0MyAwIFIgL1hZWiA3Mi4wIDM2Mi4zIG51bGxdCj4+CmVuZG9iagoxOTkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgMzA3LjYyOSAyNTcuMjQyIDMxNy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTk4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjIwMCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDMwNy42MjkgNTM5Ljk5OCAzMTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE5OCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMDEgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTMgMCBSIC9YWVogNzIuMCA3MjAuMCBudWxsXQo+PgplbmRvYmoKMjAyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgMjk1LjYyOSAyNTkuMDI2IDMwNS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjAxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjIwMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDI5NS42MjkgNTM5Ljk5OCAzMDUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIwMSAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMDQgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTMgMCBSIC9YWVogNzIuMCA3MDAuOCBudWxsXQo+PgplbmRvYmoKMjA1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDI4My42MjkgMzA3LjY0NiAyOTMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIwNCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMDYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCAyODMuNjI5IDUzOS45OTggMjkzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMDQgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjA3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzUzIDAgUiAvWFlaIDcyLjAgNjU4LjQgbnVsbF0KPj4KZW5kb2JqCjIwOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyNzEuNjI5IDIxOC4yNjcgMjgxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMDcgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjA5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggMjcxLjYyOSA1MzkuOTk4IDI4MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjA3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjIxMCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1MyAwIFIgL1hZWiA3Mi4wIDYwNi40IG51bGxdCj4+CmVuZG9iagoyMTEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjU5LjYyOSAyNDQuMDU5IDI2OS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjEwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjIxMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDI1OS42MjkgNTM5Ljk5OCAyNjkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIxMCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMTMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTMgMCBSIC9YWVogNzIuMCA1MzAuNCBudWxsXQo+PgplbmRvYmoKMjE0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDI0Ny42MjkgMjM0LjcwOCAyNTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIxMyAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMTUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCAyNDcuNjI5IDUzOS45OTggMjU3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMTMgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjE2IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzUzIDAgUiAvWFlaIDcyLjAgNDY2LjQgbnVsbF0KPj4KZW5kb2JqCjIxNyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyMzUuNjI5IDIxOC4yNTggMjQ1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMTYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjE4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggMjM1LjYyOSA1MzkuOTk4IDI0NS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjE2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjIxOSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1OSAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iagoyMjAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgODAuMCAyMjMuNjI5IDMyOC4xMzUgMjMzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMTkgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjIxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggMjIzLjYyOSA1MzkuOTk4IDIzMy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjE5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjIyMiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1OSAwIFIgL1hZWiA3Mi4wIDY4MS42IG51bGxdCj4+CmVuZG9iagoyMjMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgMjExLjYyOSAyNTEuMjE0IDIyMS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjIyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjIyNCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDIxMS42MjkgNTM5Ljk5OCAyMjEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIyMiAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMjUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbODMgMCBSIC9YWVogNzIuMCA3MjAuMCBudWxsXQo+PgplbmRvYmoKMjI2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgMTk5LjYyOSAyMjIuNjY5IDIwOS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjI1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjIyNyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuMjc4IDE5OS42MjkgNTM5Ljk5OCAyMDkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIyNSAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMjggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbODMgMCBSIC9YWVogNzIuMCA3MDAuOCBudWxsXQo+PgplbmRvYmoKMjI5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDE4Ny42MjkgMzA5LjM4NSAxOTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIyOCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMzAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjI3OCAxODcuNjI5IDUzOS45OTggMTk3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMjggMCBSCi9IIC9JCgo+PgplbmRvYmoKMjMxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzg2IDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjIzMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDE3NS42MjkgMjc4LjUwNSAxODUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIzMSAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMzMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjI3OCAxNzUuNjI5IDUzOS45OTggMTg1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMzEgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjM0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzg2IDAgUiAvWFlaIDcyLjAgNjM2LjI1IG51bGxdCj4+CmVuZG9iagoyMzUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgMTYzLjYyOSAxODQuNzY4IDE3My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjM0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjIzNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuMjc4IDE2My42MjkgNTM5Ljk5OCAxNzMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIzNCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMzcgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbODYgMCBSIC9YWVogNzIuMCAxNTAuOTQgbnVsbF0KPj4KZW5kb2JqCjIzOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCAxNTEuNjI5IDIxMC41NjYgMTYxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMzcgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjM5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy4yNzggMTUxLjYyOSA1MzkuOTk4IDE2MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjM3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjI0MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs4OSAwIFIgL1hZWiA3Mi4wIDMyNS41NTEgbnVsbF0KPj4KZW5kb2JqCjI0MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCAxMzkuNjI5IDE4NC43NTggMTQ5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyNDAgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjQyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy4yNzggMTM5LjYyOSA1MzkuOTk4IDE0OS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjQwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjI0MyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs5OCAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iagoyNDQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgMTI3LjYyOSAyMDEuMjEzIDEzNy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjQzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjI0NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuMjc4IDEyNy42MjkgNTM5Ljk5OCAxMzcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3Jk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NiAwIFIKMTc4IDAgUgoxNzkgMCBSCjE4MSAwIFIKMTgyIDAgUgoxODQgMCBSCjE4NSAwIFIKMTg3IDAgUgoxODggMCBSCjE5MCAwIFIKMTkxIDAgUgoxOTMgMCBSCjE5NCAwIFIKMTk2IDAgUgoxOTcgMCBSCjE5OSAwIFIKMjAwIDAgUgoyMDIgMCBSCjIwMyAwIFIKMjA1IDAgUgoyMDYgMCBSCjIwOCAwIFIKMjA5IDAgUgoyMTEgMCBSCjIxMiAwIFIKMjE0IDAgUgoyMTUgMCBSCjIxNyAwIFIKMjE4IDAgUgoyMjAgMCBSCjIyMSAwIFIKMjIzIDAgUgoyMjQgMCBSCjIyNiAwIFIKMjI3IDAgUgoyMjkgMCBSCjIzMCAwIFIKMjMyIDAgUgoyMzMgMCBSCjIzNSAwIFIKMjM2IDAgUgoyMzggMCBSCjIzOSAwIFIKMjQxIDAgUgoyNDIgMCBSCjI0NCAwIFIKMjQ1IDAgUgoyNDcgMCBSCjI0OCAwIFIKXQplbmRvYmoKMjUyIDAgb2JqCjw8CiAgL1Jlc291cmNlcyAxNCAwIFIKICAvVHlwZSAvUGFnZQogIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCiAgL0Nyb3BCb3ggWzAgMCA2MTIgNzkyXQogIC9CbGVlZEJveCBbMCAwIDYxMiA3OTJdCiAgL1RyaW1Cb3ggWzAgMCA2MTIgNzkyXQogIC9QYXJlbnQgMTUgMCBSCiAgL0Fubm90cyAyNTEgMCBSCiAgL0NvbnRlbnRzIDI0OSAwIFIKPj4KZW5kb2JqCjI1MyAwIG9iago8PAogIC9UeXBlIC9Gb250RGVzY3JpcHRvcgogIC9Gb250TmFtZSAvRUFBQUFBK0RlamFWdVNhbnMtQm9sZAogIC9Gb250QkJveCBbLTEwNjkgLTQxNSAxOTc1IDExNzRdCiAgL0ZsYWdzIDMzCiAgL0NhcEhlaWdodCA3MjkKICAvQXNjZW50IDExNzQKICAvRGVzY2VudCAtNDE1CiAgL0l0YWxpY0FuZ2xlIDAKICAvU3RlbVYgMAogIC9NaXNzaW5nV2lkdGggNTAwCiAgL0ZvbnRGaWxlMiAyNTQgMCBSCiAgL0NJRFNldCAyNTUgMCBSCj4+CmVuZG9iagoyNTQgMCBvYmoKPDwKICAvTGVuZ3Ro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MyAwIFIgODYgMCBSIDg5IDAgUiA5MiAwIFIgOTUgMCBSIDk4IDAgUiAxMDEgMCBSIDEwNCAwIFIgXSA+PgplbmRvYmoKMjg5IDAgb2JqCjw8CiAgL1R5cGUgL0NhdGFsb2cKICAvUGFnZXMgMTUgMCBSCiAgL0xhbmcgKGVuKQogIC9NZXRhZGF0YSA1IDAgUgogIC9QYWdlTGFiZWxzIDI5MCAwIFIKPj4KZW5kb2JqCjE0IDAgb2JqCjw8CiAgL0ZvbnQgPDwKICAvRjE2IDI1OCAwIFIKICAvRjE1IDI2NyAwIFIKICAvRjE3IDI3NiAwIFIKICAvRjE5IDI4NSAwIFIKPj4KICAvUHJvY1NldCBbL1BERiAvSW1hZ2VCIC9JbWFnZUMgL1RleHRdCiAgL1hPYmplY3QgPDwKICAvSW0xIDcgMCBSCiAgL0ltMiA5IDAgUgogIC9JbTMgMTYgMCBSCiAgL0ltNCAxOCAwIFIKPj4KICAvQ29sb3JTcGFjZSA8PCAvRGVmYXVsdFJHQiA0IDAgUiA+Pgo+PgplbmRvYmoKMjkwIDAgb2JqCjw8IC9OdW1zIFswIDw8IC9TIC9EID4+IDEgPDwgL1MgL3IgL1N0IDIgPj4gMiA8PCAvUyAvciAvU3QgMyA+PiAzIDw8IC9TIC9yIC9TdCA0ID4+IDQgPDwgL1MgL0QgPj4gMTAgPDwgL1MgL0QgL1N0IDcgPj5dID4+CmVuZG9iagp4cmVmCjAgMjkxCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNSAwMDAwMCBuIAowMDAwMDAwMTQ1IDAwMDAwIG4gCjAwMDAwMDI2ODMgMDAwMDAgbiAKMDAwMDAwMjcwMyAwMDAwMCBuIAowMDAwMDAyNzM2IDAwMDAwIG4gCjAwMDAwMDM2ODMgMDAwMDAgbiAKMDAwMDAwMzcwMiAwMDAwMCBuIAowMDAwMDUyMjI3IDAwMDAwIG4gCjAwMDAwNTIyNDggMDAwMDAgbiAKMDAwMDEwNTUwOCAwMDAwMCBuIAowMDAwMTA1NTMwIDAwMDAwIG4gCjAwMDAxMDYwMzkgMDAwMDAgbiAKMDAwMDEwNjA1OSAwMDAwMCBuIAowMDAwMjY3NDc4IDAwMDAwIG4gCjAwMDAyNjcxNjUgMDAwMDAgbiAKMDAwMDEwNjI1MyAwMDAwMCBuIAowMDAwMTEyNDI0IDAwMDAwIG4gCjAwMDAxMTI0NDUgMDAwMDAgbiAKMDAwMDExOTYyNSAwMDAwMCBuIAowMDAwMTE5NjQ2IDAwMDAwIG4gCjAwMDAxMjA1NTUgMDAwMDAgbiAKMDAwMDEyMDU3NSAwMDAwMCBuIAowMDAwMTIwNzY5IDAwMDAwIG4gCjAwMDAxMjMzNjUgMDAwMDAgbiAKMDAwMDEyMzM4NiAwMDAwMCBuIAowMDAwMTIzNTgwIDAwMDAwIG4gCjAwMDAxMjQ2NTAgMDAwMDAgbiAKMDAwMDEyNDY3MCAwMDAwMCBuIAowMDAwMTI0ODY0IDAwMDAwIG4gCjAwMDAxMjU3MjcgMDAwMDAgbiAKMDAwMDEyNTc0NyAwMDAwMCBuIAowMDAwMTI1OTQxIDAwMDAwIG4gCjAwMDAxMjYwMzYgMDAwMDAgbiAKMDAwMDEyNjE3MiAwMDAwMCBuIAowMDAwMTI3NzI3IDAwMDAwIG4gCjAwMDAxMjc3NDggMDAwMDAgbiAKMDAwMDEyNzc3NSAwMDAwMCBuIAowMDAwMTI3OTg2IDAwMDAwIG4gCjAwMDAxMjkxNDkgMDAwMDAgbiAKMDAwMDEyOTE3MCAwMDAwMCBuIAowMDAwMTI5MzY0IDAwMDAwIG4gCjAwMDAxMzE1MjIgMDAwMDAgbiAKMDAwMDEzMTU0MyAwMDAwMCBuIAowMDAwMTMxNzM3IDAwMDAwIG4gCjAwMDAxMzE4MTUgMDAwMDAgbiAKMDAwMDEzMTk1MiAwMDAwMCBuIAowMDAwMTMyMDkyIDAwMDAwIG4gCjAwMDAxMzMxNjQgMDAwMDAgbiAKMDAwMDEzMzE4NCAwMDAwMCBuIAowMDAwMTMzMjE4IDAwMDAwIG4gCjAwMDAxMzM0MjkgMDAwMDAgbiAKMDAwMDEzNTMwNCAwMDAwMCBuIAowMDAwMTM1MzI1IDAwMDAwIG4gCjAwMDAxMzU1MTkgMDAwMDAgbiAKMDAwMDEzNTY0MCAwMDAwMCBuIAowMDAwMTM1Nzc0IDAwMDAwIG4gCjAwMDAxMzg0NDAgMDAwMDAgbiAKMDAwMDEzODQ2MSAwMDAwMCBuIAowMDAwMTM4NDg4IDAwMDAwIG4gCjAwMDAxMzg2OTkgMDAwMDAgbiAKMDAwMDEzODgxMyAwMDAwMCBuIAowMDAwMTM4OTUwIDAwMDAwIG4gCjAwMDAxMzkwNDggMDAwMDAgbiAKMDAwMDEzOTE4NSAwMDAwMCBuIAowMDAwMTQwODA2IDAwMDAwIG4gCjAwMDAxNDA4MjcgMDAwMDAgbiAKMDAwMDE0MDg2MSAwMDAwMCBuIAowMDAwMTQxMDcyIDAwMDAwIG4gCjAwMDAxNDExNzcgMDAwMDAgbiAKMDAwMDE0MTMxNCAwMDAwMCBuIAowMDAwMTQxNDIwIDAwMDAwIG4gCjAwMDAxNDE1NTcgMDAwMDAgbiAKMDAwMDE0MTY3MiAwMDAwMCBuIAowMDAwMTQxODA4IDAwMDAwIG4gCjAwMDAxNDE5MzYgMDAwMDAgbiAKMDAwMDE0MjA3MiAwMDAwMCBuIAowMDAwMTQyMjA4IDAwMDAwIG4gCjAwMDAxNDIzMzcgMDAwMDAgbiAKMDAwMDE0MjQ3MyAwMDAwMCBuIAowMDAwMTQyNjA5IDAwMDAwIG4gCjAwMDAxNDQyNzkgMDAwMDAgbiAKMDAwMDE0NDMwMCAwMDAwMCBuIAowMDAwMTQ0MzY5IDAwMDAwIG4gCjAwMDAxNDQ1ODAgMDAwMDAgbiAKMDAwMDE0NjgzOSAwMDAwMCBuIAowMDAwMTQ2ODYwIDAwMDAwIG4gCjAwMDAxNDcwNTQgMDAwMDAgbiAKMDAwMDE0ODk5NiAwMDAwMCBuIAowMDAwMTQ5MDE3IDAwMDAwIG4gCjAwMDAxNDkyMTEgMDAwMDAgbiAKMDAwMDE1MDkzMCAwMDAwMCBuIAowMDAwMTUwOTUxIDAwMDAwIG4gCjAwMDAxNTExNDUgMDAwMDAgbiAKMDAwMDE1MjgyMCAwMDAwMCBuIAowMDAwMTUyODQxIDAwMDAwIG4gCjAwMDAxNTMwMzUgMDAwMDAgbiAKMDAwMDE1NTIxOSAwMDAwMCBuIAowMDAwMTU1MjQwIDAwMDAwIG4gCjAwMDAxNTU0MzQgMDAwMDAgbiAKMDAwMDE1NjMyNiAwMDAwMCBuIAowMDAwMTU2MzQ3IDAwMDAwIG4gCjAwMDAxNTY1NDIgMDAwMDAgbiAKMDAwMDE1NzQ1MCAwMDAwMCBuIAowMDAwMTU3NDcxIDAwMDAwIG4gCjAwMDAxNTc2NjcgMDAwMDAgbiAKMDAwMDE1Nzc0NiAwMDAwMCBuIAowMDAwMTU3ODg0IDAwMDAwIG4gCjAwMDAxNTgwMjMgMDAwMDAgbiAKMDAwMDE1ODEwMiAwMDAwMCBuIAowMDAwMTU4MjQxIDAwMDAwIG4gCjAwMDAxNTgzODMgMDAwMDAgbiAKMDAwMDE1ODQ2MiAwMDAwMCBuIAowMDAwMTU4NjAyIDAwMDAwIG4gCjAwMDAxNTg3NDQgMDAwMDAgbiAKMDAwMDE1ODgyNSAwMDAwMCBuIAowMDAwMTU4OTY1IDAwMDAwIG4gCjAwMDAxNTkxMDcgMDAwMDAgbiAKMDAwMDE1OTE4OCAwMDAwMCBuIAowMDAwMTU5MzI4IDAwMDAwIG4gCjAwMDAxNTk0NzAgMDAwMDAgbiAKMDAwMDE1OTU1MSAwMDAwMCBuIAowMDAwMTU5NjkxIDAwMDAwIG4gCjAwMDAxNTk4MzMgMDAwMDAgbiAKMDAwMDE1OTkxNCAwMDAwMCBuIAowMDAwMTYwMDU0IDAwMDAwIG4gCjAwMDAxNjAxOTYgMDAwMDAgbiAKMDAwMDE2MDI3NiAwMDAwMCBuIAowMDAwMTYwNDE2IDAwMDAwIG4gCjAwMDAxNjA1NTggMDAwMDAgbiAKMDAwMDE2MDYzOSAwMDAwMCBuIAowMDAwMTYwNzc5IDAwMDAwIG4gCjAwMDAxNjA5MjEgMDAwMDAgbiAKMDAwMDE2MTAwMiAwMDAwMCBuIAowMDAwMTYxMTQyIDAwMDAwIG4gCjAwMDAxNjEyODQgMDAwMDAgbiAKMDAwMDE2MTM2NSAwMDAwMCBuIAowMDAwMTYxNTA1IDAwMDAwIG4gCjAwMDAxNjE2NDcgMDAwMDAgbiAKMDAwMDE2MTcyOCAwMDAwMCBuIAowMDAwMTYxODY4IDAwMDAwIG4gCjAwMDAxNjIwMTAgMDAwMDAgbiAKMDAwMDE2MjA5MCAwMDAwMCBuIAowMDAwMTYyMjMwIDAwMDAwIG4gCjAwMDAxNjIzNzIgMDAwMDAgbiAKMDAwMDE2MjQ1MSAwMDAwMCBuIAowMDAwMTYyNTkxIDAwMDAwIG4gCjAwMDAxNjI3MzMgMDAwMDAgbiAKMDAwMDE2MjgxMiAwMDAwMCBuIAowMDAwMTYyOTUyIDAwMDAwIG4gCjAwMDAxNjMwOTQgMDAwMDAgbiAKMDAwMDE2MzE3MyAwMDAwMCBuIAowMDAwMTYzMzEzIDAwMDAwIG4gCjAwMDAxNjM0NTUgMDAwMDAgbiAKMDAwMDE2MzUzNCAwMDAwMCBuIAowMDAwMTYzNjc0IDAwMDAwIG4gCjAwMDAxNjM4MTYgMDAwMDAgbiAKMDAwMDE2Mzg5NSAwMDAwMCBuIAowMDAwMTY0MDM0IDAwMDAwIG4gCjAwMDAxNjQxNzYgMDAwMDAgbiAKMDAwMDE2NDI1NSAwMDAwMCBuIAowMDAwMTY0Mzk1IDAwMDAwIG4gCjAwMDAxNjQ1MzcgMDAwMDAgbiAKMDAwMDE2NDYxNiAwMDAwMCBuIAowMDAwMTY0NzU2IDAwMDAwIG4gCjAwMDAxNjQ4OTggMDAwMDAgbiAKMDAwMDE2NDk3NyAwMDAwMCBuIAowMDAwMTY1MTE3IDAwMDAwIG4gCjAwMDAxNjUyNTkgMDAwMDAgbiAKMDAwMDE2NTMzOCAwMDAwMCBuIAowMDAwMTY1NDc4IDAwMDAwIG4gCjAwMDAxNjU2MjAgMDAwMDAgbiAKMDAwMDE2NTY5OSAwMDAwMCBuIAowMDAwMTY1ODM3IDAwMDAwIG4gCjAwMDAxNjU5NzkgMDAwMDAgbiAKMDAwMDE2NjA1OCAwMDAwMCBuIAowMDAwMTY2MTk4IDAwMDAwIG4gCjAwMDAxNjYzNDAgMDAwMDAgbiAKMDAwMDE2NjQxOSAwMDAwMCBuIAowMDAwMTY2NTU5IDAwMDAwIG4gCjAwMDAxNjY3MDEgMDAwMDAgbiAKMDAwMDE2Njc4MCAwMDAwMCBuIAowMDAwMTY2OTE5IDAwMDAwIG4gCjAwMDAxNjcwNjEgMDAwMDAgbiAKMDAwMDE2NzE0MCAwMDAwMCBuIAowMDAwMTY3MjgwIDAwMDAwIG4gCjAwMDAxNjc0MjIgMDAwMDAgbiAKMDAwMDE2NzUwMSAwMDAwMCBuIAowMDAwMTY3NjQxIDAwMDAwIG4gCjAwMDAxNjc3ODMgMDAwMDAgbiAKMDAwMDE2Nzg2MiAwMDAwMCBuIAowMDAwMTY4MDAyIDAwMDAwIG4gCjAwMDAxNjgxNDQgMDAwMDAgbiAKMDAwMDE2ODIyMyAwMDAwMCBuIAowMDAwMTY4MzYyIDAwMDAwIG4gCjAwMDAxNjg1MDQgMDAwMDAgbiAKMDAwMDE2ODU4MyAwMDAwMCBuIAowMDAwMTY4NzIzIDAwMDAwIG4gCjAwMDAxNjg4NjUgMDAwMDAgbiAKMDAwMDE2ODk0NCAwMDAwMCBuIAowMDAwMTY5MDg0IDAwMDAwIG4gCjAwMDAxNjkyMjYgMDAwMDAgbiAKMDAwMDE2OTMwNSAwMDAwMCBuIAowMDAwMTY5NDQ0IDAwMDAwIG4gCjAwMDAxNjk1ODYgMDAwMDAgbiAKMDAwMDE2OTY2NSAwMDAwMCBuIAowMDAwMTY5ODA1IDAwMDAwIG4gCjAwMDAxNjk5NDcgMDAwMDAgbiAKMDAwMDE3MDAyNiAwMDAwMCBuIAowMDAwMTcwMTY2IDAwMDAwIG4gCjAwMDAxNzAzMDggMDAwMDAgbiAKMDAwMDE3MDM4NyAwMDAwMCBuIAowMDAwMTcwNTI3IDAwMDAwIG4gCjAwMDAxNzA2NjkgMDAwMDAgbiAKMDAwMDE3MDc0OCAwMDAwMCBuIAowMDAwMTcwODg4IDAwMDAwIG4gCjAwMDAxNzEwMzAgMDAwMDAgbiAKMDAwMDE3MTEwOSAwMDAwMCBuIAowMDAwMTcxMjQ5IDAwMDAwIG4gCjAwMDAxNzEzOTEgMDAwMDAgbiAKMDAwMDE3MTQ3MCAwMDAwMCBuIAowMDAwMTcxNjA5IDAwMDAwIG4gCjAwMDAxNzE3NTEgMDAwMDAgbiAKMDAwMDE3MTgzMCAwMDAwMCBuIAowMDAwMTcxOTcwIDAwMDAwIG4gCjAwMDAxNzIxMTIgMDAwMDAgbiAKMDAwMDE3MjE5MSAwMDAwMCBuIAowMDAwMTcyMzMwIDAwMDAwIG4gCjAwMDAxNzI0NzIgMDAwMDAgbiAKMDAwMDE3MjU1MSAwMDAwMCBuIAowMDAwMTcyNjkxIDAwMDAwIG4gCjAwMDAxNzI4MzMgMDAwMDAgbiAKMDAwMDE3MjkxMiAwMDAwMCBuIAowMDAwMTczMDUxIDAwMDAwIG4gCjAwMDAxNzMxOTMgMDAwMDAgbiAKMDAwMDE3MzI3MyAwMDAwMCBuIAowMDAwMTczNDEzIDAwMDAwIG4gCjAwMDAxNzM1NTUgMDAwMDAgbiAKMDAwMDE3MzYzNSAwMDAwMCBuIAowMDAwMTczNzc1IDAwMDAwIG4gCjAwMDAxNzM5MTcgMDAwMDAgbiAKMDAwMDE3Mzk5OCAwMDAwMCBuIAowMDAwMTc0MTM4IDAwMDAwIG4gCjAwMDAxNzQyODAgMDAwMDAgbiAKMDAwMDE3NDM1OSAwMDAwMCBuIAowMDAwMTc0NDk5IDAwMDAwIG4gCjAwMDAxNzQ2NDEgMDAwMDAgbiAKMDAwMDE3NDcyMSAwMDAwMCBuIAowMDAwMTc0ODYwIDAwMDAwIG4gCjAwMDAxNzUwMDIgMDAwMDAgbiAKMDAwMDIwNTY4NyAwMDAwMCBuIAowMDAwMjA1NzEwIDAwMDAwIG4gCjAwMDAyMDY0OTkgMDAwMDAgbiAKMDAwMDIwNjcxMyAwMDAwMCBuIAowMDAwMjA2OTc4IDAwMDAwIG4gCjAwMDAyMjE2MzggMDAwMDAgbiAKMDAwMDIyMTYxNSAwMDAwMCBuIAowMDAwMjIxNzM4IDAwMDAwIG4gCjAwMDAyMjE3NTggMDAwMDAgbiAKMDAwMDIyMjQwNSAwMDAwMCBuIAowMDAwMjIxOTIzIDAwMDAwIG4gCjAwMDAyMjI5ODMgMDAwMDAgbiAKMDAwMDIyMzAwNCAwMDAwMCBuIAowMDAwMjIzMjY0IDAwMDAwIG4gCjAwMDAyMzk4NTEgMDAwMDAgbiAKMDAwMDIzOTgyOCAwMDAwMCBuIAowMDAwMjM5OTU2IDAwMDAwIG4gCjAwMDAyMzk5NzYgMDAwMDAgbiAKMDAwMDI0MDY4MCAwMDAwMCBuIAowMDAwMjQwMTM2IDAwMDAwIG4gCjAwMDAyNDEzMzEgMDAwMDAgbiAKMDAwMDI0MTM1MiAwMDAwMCBuIAowMDAwMjQxNjIwIDAwMDAwIG4gCjAwMDAyNTA1MDggMDAwMDAgbiAKMDAwMDI1MDQ4NiAwMDAwMCBuIAowMDAwMjUwNjA2IDAwMDAwIG4gCjAwMDAyNTA2MjYgMDAwMDAgbiAKMDAwMDI1MTEwOSAwMDAwMCBuIAowMDAwMjUwNzk0IDAwMDAwIG4gCjAwMDAyNTE1MTAgMDAwMDAgbiAKMDAwMDI1MTUzMSAwMDAwMCBuIAowMDAwMjUxNzkzIDAwMDAwIG4gCjAwMDAyNjU3MDIgMDAwMDAgbiAKMDAwMDI2NTY3OSAwMDAwMCBuIAowMDAwMjY1ODAxIDAwMDAwIG4gCjAwMDAyNjU4MjEgMDAwMDAgbiAKMDAwMDI2NjUxNiAwMDAwMCBuIAowMDAwMjY1OTg1IDAwMDAwIG4gCjAwMDAyNjcxNDQgMDAwMDAgbiAKMDAwMDI2NzM2OSAwMDAwMCBuIAowMDAwMjY3NzIzIDAwMDAwIG4gCnRyYWlsZXIKPDwKICAvUm9vdCAyODkgMCBSCiAgL0luZm8gMSAwIFIKICAvSUQgWzw4OEVGNTgzRURCOTkwNEJENzgxMDY4QjZDRUJCRkZDRj4gPDg4RUY1ODNFREI5OTA0QkQ3ODEwNjhCNkNFQkJGRkNGPl0KICAvU2l6ZSAyOTEKPj4Kc3RhcnR4cmVmCjI2Nzg2MwolJUVPRgo=
en
de
internal
external
public
Misc
Misc Comment
1
current_timestamp
1
current_timestamp
1
0
Created
1
current_timestamp
1
current_timestamp
1