FAQ
5.0.1
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for FAQ 5.
Build for FAQ 5 beta1.
The FAQ/knowledge base.
Die FAQ-/Wissensdatenbank.
5.0.x
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to install 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 installieren.<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/>
((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/>
All Dynamic Fields created for this package and its data will be deleted permanently.
<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/>
Alle dynamischen Felder für dieses Paket erstellt und seine Daten dauerhaft gelöscht werden.
<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/>
Todos los Campos Dinámicos creados para este paquete y sus datos serán borrados permanentemente.
<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/>
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgrade();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeSpecial();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_1();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_91();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUninstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeReinstall();
2015-10-14 05:37:17
opms.otrs.com
IyEvdXNyL2Jpbi9wZXJsCiMgLS0KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFGRkVSTyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiMgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCiMgb3Igc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyB1c2UgLi4vLi4vIGFzIGxpYiBsb2NhdGlvbgp1c2UgRmluZEJpbiBxdygkQmluKTsKdXNlIGxpYiAiJEJpbi8uLi8uLiI7CnVzZSBsaWIgIiRCaW4vLi4vLi4vS2VybmVsL2NwYW4tbGliIjsKdXNlIGxpYiAiJEJpbi8uLi8uLi9DdXN0b20iOwoKIyAwPW9mZjsxPW9uOwpteSAkRGVidWcgPSAwOwoKcHJpbnQgImxvY2F0aW9uOiBwdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUUV4cGxvcmVyXG4iOwpwcmludCAiXG4iOwpwcmludCAiPGEgaHJlZj0ncHVibGljLnBsP0FjdGlvbj1QdWJsaWNGQVFFeHBsb3Jlcic+bW92ZWQ8L2E+XG4iOwo=
IyEvdXNyL2Jpbi9wZXJsCiMgLS0KIyBmYXEucGwgLSB0aGUgZ2xvYmFsIENHSSBoYW5kbGUgZmlsZSBmb3IgT1RSUwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQUZGRVJPIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKIyBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKIyBvciBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIHVzZSAuLi8uLi8gYXMgbGliIGxvY2F0aW9uCnVzZSBGaW5kQmluIHF3KCRCaW4pOwp1c2UgbGliICIkQmluLy4uLy4uIjsKdXNlIGxpYiAiJEJpbi8uLi8uLi9LZXJuZWwvY3Bhbi1saWIiOwp1c2UgbGliICIkQmluLy4uLy4uL0N1c3RvbSI7Cgp1c2UgdmFycyBxdyhASU5DKTsKCiMgMD1vZmY7MT1vbjsKbXkgJERlYnVnID0gMDsKCiMgY2hlY2sgQElOQyBmb3IgbW9kX3BlcmwgKGFkZCBsaWIgcGF0aCBmb3IgInJlcXVpcmUgbW9kdWxlIiEpCnB1c2ggKEBJTkMsICIkQmluLy4uLy4uIiwgIiRCaW4vLi4vLi4vS2VybmVsL2NwYW4tbGliIik7CgpwcmludCAibG9jYXRpb246IHB1YmxpYy5mcGw/QWN0aW9uPVB1YmxpY0ZBUUV4cGxvcmVyXG4iOwpwcmludCAiXG4iOwpwcmludCAiPGEgaHJlZj0ncHVibGljLmZwbD9BY3Rpb249UHVibGljRkFRRXhwbG9yZXInPm1vdmVkPC9hPlxuIjsK
iVBORw0KGgoAAAANSUhEUgAAA1wAAANwCAIAAAC06fzeAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd1iT5/o48DsJhCnIVpkyBGSLilRUNogFLYoiYp3Yak+to1Xb+tXqUetercdZxUktqIALQSjKqkdBQFGLIqJWZKkJO2T8/nja95eThBAZYXh/rnOdK7zjeV9iAw/Pew+aQCAAhBBCCCH0YaN39w0ghBBCCKHuh5NChBBCCCGEk0KEEEIIIYSTQoQQQgghBDgpRAghhBBCgJNChBBCCCEEOClECCGEEEKAk0KEEEIIIQQ4KUQIIYQQQgCgIH13cXGxfO4DSVFbW9vdt4AQQgihvsDV1bW1XW1MClFPYGk1rLtvASGEEEK93pPHeVL24uNjhBBCCCGEk0KEEEIIISSfSWFtbe2zZ894PJ4croUQQgghhNrhvSeFtbW11tbW9kJ+/fVXsuvt27d2dna7d++mDq6qqoqIiAgODl6+fPlHH320a9cuPp8vffwbN24sXLiwsbExJibmfe8NIYQQQgi1TzsTTQoLC+l00QnlpUuXHB0dExMTv/rqKxqNBgDz588PDg6eP38+AFRXV8+ePVtHR+fTTz+VMvKoUaOcnJzq6+sPHTo0ffr09t0eQgghhBB6L535+PjChQurVq2i0+l5eXkA8PLlSwAgM0IA0NXVjYiISE9PFznr0KFD/v7+UVFR27Ztu3nzZlFR0f79+1euXFlVVfXNN9904u0hhBBCCKHWtHOlcP369eRF//79lyxZAgCPHz+uq6tzcnIKCgq6ePGiq6vrzZs37e3thc/y9fXdvHlzY2OjiooK2VJaWnrt2rW4uLjnz5/Pnj3b0tJSIBA8f/58y5YtYWFh27Zt68C3hhBCCCGEZNXOlUJnZ2cXFxcXF5ehQ4eSLfHx8TY2NpmZmdra2leuXGlpaamurm5oaBA+S1VVtbm5WXhLamrqxIkTNTQ07O3tP/roo/bdDEIIIYQQ6qB2rhSGhIQIxxTyeLzExMTRo0cnJSUBgKqqakZGhoWFxfHjx1taWhQVFQUCQU1NTWFhoZWVFbVMCAAlJSUuLi7ktaamZge+EYQQQggh1H6dE1OYnZ1tYGCwefPmDRs2bNiwISIiIiEhwc/PT11d/fjx4wDw/PnzGTNmbN68eenSpcInWltbp6en8/n8urq6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B6b9BcJwImP3oPpWQEBAX48Of1EIAB0dT/9RehWoVAaDTqfi2mpkkyuUMpkMFMoZQfyxY62Hezp9wtSNXCMlY8YD0/7CYDiRkRsBRSFCCCGEEBpq+otC/Jk7hBBCCCGERSFCCCGEEMKiECGEEEIIARaFCCGEEEIIsChECCGEEEKARSFCCCGEEAIsChFCCCGEEGBRiBBCCCGEAItChBBCCCEEWBQihBBCCCHAohAhhBBCCAEWhQghhBBCCLAoRAghhBBCgEUhQgghhBACLAoRQgghhBBgUYgQQgghhACLQoQQQgghBFgUIoQQQgghAKD32+NB9a0XMA+EEEIIITSMKEqlcrjngBBCCCGEhhnuPkYIIYQQQlgUIoQQQgghLAoRQgghhBBgUYgQQgghhACLQoQQQgghBFgUIoQQQgghwKIQIYQQQggBFoUIIYQQQggA/j9rfWeWKWKoeAAAAABJRU5ErkJggg==
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+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpFeHBsb3Jlcjo6UXVpY2tTZWFyY2g6OlNob3ciIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2sgc2VhcmNoIHNob3VsZCBiZSBzaG93bi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJwdWJsaWMiPnB1YmxpYyAocHVibGljKTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6Okxhc3RDaGFuZ2U6OlNob3ciIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaW50ZXJuYWwiPmludGVybmFsIChhZ2VudCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImV4dGVybmFsIj5leHRlcm5hbCAoY3VzdG9tZXIpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJwdWJsaWMiPnB1YmxpYyAocHVibGljKTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6Okxhc3RDaGFuZ2U6OlNob3dTdWJDYXRlZ29yeUl0ZW1zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6Okxhc3RDaGFuZ2U6OkxpbWl0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk51bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPjM8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkV4cGxvcmVyOjpMYXN0Q3JlYXRlOjpTaG93IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpbnRlcm5hbCI+aW50ZXJuYWwgKGFnZW50KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZXh0ZXJuYWwiPmV4dGVybmFsIChjdXN0b21lcik8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InB1YmxpYyI+cHVibGljIChwdWJsaWMpPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpFeHBsb3Jlcjo6TGFzdENyZWF0ZTo6U2hvd1N1YkNhdGVnb3J5SXRlbXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkV4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpFeHBsb3Jlcjo6TGFzdENyZWF0ZTo6TGltaXQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+MzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RXhwbG9yZXI6OlRvcDEwOjpTaG93IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpbnRlcm5hbCI+aW50ZXJuYWwgKGFnZW50KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZXh0ZXJuYWwiPmV4dGVybmFsIChjdXN0b21lcik8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InB1YmxpYyI+cHVibGljIChwdWJsaWMpPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpFeHBsb3Jlcjo6VG9wMTA6OkxpbWl0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk51bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPjEwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpFeHBsb3Jlcjo6VG9wMTA6OlNob3dTdWJDYXRlZ29yeUl0ZW1zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RkFRSG9vayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+RkFRIzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6VGl0bGVTaXplIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsM30kIj41MDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RGVmYXVsdDo6U3RhdGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPmludGVybmFsIChhZ2VudCk8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkFwcHJvdmFsUmVxdWlyZWQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6QXBwcm92YWw8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkFwcHJvdmFsR3JvdXAiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6QXBwcm92YWw8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPmZhcV9hcHByb3ZhbDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6QXBwcm92YWxRdWV1ZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5RdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpBcHByb3ZhbDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+RkFRX0FwcHJvdmFsPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgoKICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6QXBwcm92YWxUaWNrZXRTdWJqZWN0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpBcHByb3ZhbDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+RkFRIGFwcHJvdmFsIHJlcXVpcmVkIGZvciBGQVEjICZsdDtPVFJTX0ZBUV9OVU1CRVImZ3Q7PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpBcHByb3ZhbFRpY2tldEJvZHkiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkFwcHJvdmFsPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFRleHRBcmVhPkhpLAoKYSBuZXcgRkFRIGFydGljbGUgbmVlZHMgeW91ciBhcHByb3ZhbCBiZWZvcmUgaXQgY2FuIGJlIHB1Ymxpc2hlZC4KCiAgRkFRIyAgIDogJmx0O09UUlNfRkFRX05VTUJFUiZndDsKICBUaXRsZSAgOiAmbHQ7T1RSU19GQVFfVElUTEUmZ3Q7CiAgQXV0aG9yIDogJmx0O09UUlNfRkFRX0FVVEhPUiZndDsKICBTdGF0ZSAgOiAmbHQ7T1RSU19GQVFfU1RBVEUmZ3Q7CgpJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCBjbGljayBvbiB0aGlzIGxpbms6CgombHQ7T1RSU19DT05GSUdfSHR0cFR5cGUmZ3Q7Oi8vJmx0O09UUlNfQ09ORklHX0ZRRE4mZ3Q7LyZsdDtPVFJTX0NPTkZJR19TY3JpcHRBbGlhcyZndDtpbmRleC5wbD9BY3Rpb249QWdlbnRGQVFFZGl0O0l0ZW1JRD0mbHQ7T1RSU19GQVFfSVRFTUlEJmd0OwoKWW91ciBPVFJTIE5vdGlmaWNhdGlvbiBNYXN0ZXIKICAgICAgICAgICAgPC9UZXh0QXJlYT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkFwcHJvdmFsVGlja2V0UHJpb3JpdHkiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkFwcHJvdmFsPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz4zIG5vcm1hbDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6QXBwcm92YWxUaWNrZXREZWZhdWx0U3RhdGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkFwcHJvdmFsPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz5uZXc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkFwcHJvdmFsVGlja2V0VHlwZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZhdWx0IHR5cGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpBcHByb3ZhbDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+VW5jbGFzc2lmaWVkPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpJdGVtOjpGaWVsZDEiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SXRlbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTaG93Ij5wdWJsaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBUcmFuc2xhdGFibGU9IjEiIEtleT0iQ2FwdGlvbiI+U3ltcHRvbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTAwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpJdGVtOjpGaWVsZDIiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SXRlbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTaG93Ij5wdWJsaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBUcmFuc2xhdGFibGU9IjEiIEtleT0iQ2FwdGlvbiI+UHJvYmxlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MjAwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpJdGVtOjpGaWVsZDMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SXRlbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTaG93Ij5wdWJsaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBUcmFuc2xhdGFibGU9IjEiIEtleT0iQ2FwdGlvbiI+U29sdXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjMwMDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6SXRlbTo6RmllbGQ0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6Okl0ZW08L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVHJhbnNsYXRhYmxlPSIxIiBLZXk9IkNhcHRpb24iPkZpZWxkNDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NDAwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpJdGVtOjpGaWVsZDUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SXRlbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTaG93Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBUcmFuc2xhdGFibGU9IjEiIEtleT0iQ2FwdGlvbiI+RmllbGQ1PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj41MDA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6Okl0ZW06OkZpZWxkNiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbml0aW9uIG9mIEZBUSBpdGVtIGZyZWUgdGV4dCBmaWVsZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJdGVtPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPmludGVybmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVHJhbnNsYXRhYmxlPSIxIiBLZXk9IkNhcHRpb24iPkNvbW1lbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjYwMDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzgzMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdGQVEnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ05vcm1hbCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzgzMDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdGQVEnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ1BhcmVudENoaWxkJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UGFyZW50Q2hpbGQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyM4MzAzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnRkFRJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdUaWNrZXQnIG9iamVjdHMgdXNpbmcgdGhlICdOb3JtYWwnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyM4MzA0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnRkFRJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdUaWNrZXQnIG9iamVjdHMgdXNpbmcgdGhlICdQYXJlbnRDaGlsZCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlBhcmVudENoaWxkPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRRXhwbG9yZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+ZmFxPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT5GQVE8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8R3JvdXBSbz5mYXE8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5NZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5JdGVtQXJlYTwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+RkFRPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudEZBUUV4cGxvcmVyPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+RkFRPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT5GPC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+MzUwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxHcm91cFJvPmZhcTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5GQVEgRXhwbG9yZXI8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPkV4cGxvcmVyPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudEZBUUV4cGxvcmVyPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkZBUTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+WDwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjkxMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5BZ2VudC5EZXRhaWwuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJDdXN0b21lckZyb250ZW5kOjpNb2R1bGUjIyNDdXN0b21lckZBUUV4cGxvcmVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+Q3VzdG9tZXIgRkFRPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT48L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+RkFRPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5GQVE8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUN1c3RvbWVyRkFRRXhwbG9yZXI8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+TWVudTwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkZBUTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+PC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+NzAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5GQVEgRXhwbG9yZXI8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPkZBUSBFeHBsb3JlcjwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249Q3VzdG9tZXJGQVFFeHBsb3JlcjwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TdWJtZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+RkFRPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT5YPC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+NzEwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLkN1c3RvbWVyLkRldGFpbC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5DdXN0b21lci5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLldpZGdldC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVyRkFRRXhwbG9yZXIjIyNTZWFyY2hMaW1pdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpGQVE6OlZpZXdFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDh9JCI+MjAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFFeHBsb3JlciMjI1NlYXJjaFBhZ2VTaG93biIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpGQVE6OlZpZXdFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDN9JCI+NDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckZBUUV4cGxvcmVyIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6RkFROjpWaWV3RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IkZBUUlEIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPlRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJGQVFJRCI+TnVtYmVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhbmd1YWdlIj5MYW5ndWFnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGUiPlN0YXRlPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckZBUUV4cGxvcmVyIyMjT3JkZXI6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpGQVE6OlZpZXdFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRG93biI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iPkRvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVwIj5VcDwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFFeHBsb3JlciMjI1RpdGxlU2l6ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OkZBUTo6Vmlld0V4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsM30kIj41MDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlB1YmxpY0Zyb250ZW5kOjpDb21tb25QYXJhbSMjI0FjdGlvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpQdWJsaWM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPlB1YmxpY0ZBUUV4cGxvcmVyPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHVibGljRnJvbnRlbmQ6Ok1vZHVsZSMjI1B1YmxpY0ZBUUV4cGxvcmVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpQdWJsaWM6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5QdWJsaWMgZmFxPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT48L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+RkFRLUFyZWE8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPkZBUTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249UHVibGljRkFRRXhwbG9yZXI8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+PC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT5YPC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+NDAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLkN1c3RvbWVyLkRldGFpbC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5DdXN0b21lci5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLldpZGdldC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUUV4cGxvcmVyIyMjU2VhcmNoTGltaXQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpGQVE6OlZpZXdFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDh9JCI+MjAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6UHVibGljRkFRRXhwbG9yZXIjIyNTZWFyY2hQYWdlU2hvd24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpGQVE6OlZpZXdFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDN9JCI+NDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFFeHBsb3JlciMjI1NvcnRCeTo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6RkFROjpWaWV3RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IkZBUUlEIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPlRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJGQVFJRCI+TnVtYmVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhbmd1YWdlIj5MYW5ndWFnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGUiPlN0YXRlPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFFeHBsb3JlciMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpGQVE6OlZpZXdFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRG93biI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iPkRvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVwIj5VcDwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6UHVibGljRkFRRXhwbG9yZXIjIyNUaXRsZVNpemUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpQdWJsaWM6OkZBUTo6Vmlld0V4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsM30kIj41MDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlB1YmxpY0Zyb250ZW5kOjpNb2R1bGUjIyNQdWJsaWNGQVFSU1MiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlB1YmxpYyBmYXE8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6SXRlbTo6SFRNTCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJdGVtPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6OkhlYWRlck1ldGFNb2R1bGUjIyMzLUZBUVNlYXJjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVNZXRhSGVhZDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpIZWFkZXJNZXRhOjpBZ2VudEZBUVNlYXJjaDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudEZBUVNlYXJjaDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6OkhlYWRlck1ldGFNb2R1bGUjIyMzLUZBUVNlYXJjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZU1ldGFIZWFkPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkhlYWRlck1ldGE6OkN1c3RvbWVyRkFRU2VhcmNoPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkN1c3RvbWVyRkFRU2VhcmNoPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHVibGljRnJvbnRlbmQ6OkhlYWRlck1ldGFNb2R1bGUjIyMzLUZBUVNlYXJjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlTWV0YUhlYWQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SGVhZGVyTWV0YTo6UHVibGljRkFRU2VhcmNoPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPlB1YmxpY0ZBUVNlYXJjaDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpPdXRwdXQ6OkZpbHRlckVsZW1lbnRQb3N0IyMjRkFRIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgd2hlcmUgdGhlICdJbnNlcnQgRkFRJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGaWx0ZXJFbGVtZW50UG9zdDo6RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWJ1ZyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGVtcGxhdGVzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldENsb3NlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0Q29tcG9zZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEVtYWlsIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0RW1haWxPdXRib3VuZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEZvcndhcmQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRGcmVlVGV4dCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldE5vdGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRPd25lciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFBlbmRpbmciPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRQaG9uZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFByaW9yaXR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0UmVzcG9uc2libGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok91dHB1dDo6T3V0cHV0RmlsdGVyVGV4dEF1dG9MaW5rIyMjRkFRIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpXZWI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVnRXhwIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPihGQVEpWyNcc10qPzEoXGR7NH0pPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVSTDEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVVJMIj4vb3Rycy9pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0mbHQ7TUFUQ0gyJmd0OzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbWFnZSI+L290cnMtd2ViL3NraW5zL0FnZW50L2RlZmF1bHQvaW1nL2hlbHAtc21hbGwucG5nPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+X2JsYW5rPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudEZBUUFkZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwPmZhcTwvR3JvdXA+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+RkFRLUFyZWE8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPkZBUTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk5ldyBGQVEgQXJ0aWNsZTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+TmV3PC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudEZBUUFkZDwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5GQVE8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PkE8L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz45MjA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuQWdlbnQuRGV0YWlsLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRRWRpdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwPmZhcTwvR3JvdXA+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+RkFRIEVkaXQ8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPkVkaXQ8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5BZ2VudC5EZXRhaWwuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRGQVFMYW5ndWFnZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwPmZhcV9hZG1pbjwvR3JvdXA+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+RkFRLUFyZWE8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPkZBUTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxHcm91cD5mYXFfYWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxhbmd1YWdlIE1hbmFnZW1lbnQ8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+TGFuZ3VhZ2UgTWFuYWdlbWVudDwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRGQVFMYW5ndWFnZTwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5GQVE8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pkw8L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz45NDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+RkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZy5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudEZBUUNhdGVnb3J5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxX2FkbWluPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5GQVEtQXJlYTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGU+RkFRPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEdyb3VwPmZhcV9hZG1pbjwvR3JvdXA+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q2F0ZWdvcnkgTWFuYWdlbWVudDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5DYXRlZ29yeSBNYW5hZ2VtZW50PC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudEZBUUNhdGVnb3J5PC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkZBUTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+QzwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjk1MDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5GQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRU2VhcmNoIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxHcm91cFJvPmZhcTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxUaXRsZT5GQVE8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8R3JvdXBSbz5mYXE8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2VhcmNoIEZBUTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5TZWFyY2g8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50RkFRU2VhcmNoPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxMaW5rT3B0aW9uPm9uY2xpY2s9IkNvcmUuQWdlbnQuU2VhcmNoLk9wZW5TZWFyY2hEaWFsb2coJ0FnZW50RkFRU2VhcmNoJyk7IGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IH0gZWxzZSB7IHdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOyB9IHJldHVybiBmYWxzZTsiPC9MaW5rT3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkZBUTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+UzwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjk2MDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudEZBUVNlYXJjaFNtYWxsIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxHcm91cFJvPmZhcTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxUaXRsZT5GQVE8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpTZWFyY2gjIyNGQVEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6U2VhcmNoUm91dGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Il4oPzpBZ2VudHxBZG1pbilGQVEiPkFjdGlvbj1BZ2VudEZBUVNlYXJjaDtTdWJhY3Rpb249QUpBWDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3IyMjU21hbGwiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFRT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6RkFRT3ZlcnZpZXc6OlNtYWxsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5TbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZVNob3J0Ij5TPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNTaG93Q29sdW1ucyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFuZ3VhZ2UiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXRlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlZCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRU2VhcmNoIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IkZBUUlEIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPlRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJGQVFJRCI+TnVtYmVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhbmd1YWdlIj5MYW5ndWFnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGUiPlN0YXRlPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRG93biI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iPkRvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVwIj5VcDwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNTZWFyY2hMaW1pdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDh9JCI+MjAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFFeHBsb3JlciMjI1Nob3dDb2x1bW5zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld0V4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFuZ3VhZ2UiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXRlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlZCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRRXhwbG9yZXIjIyNTb3J0Qnk6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRkFRSUQiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+VGl0bGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkZBUUlEIj5OdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5Ij5DYXRlZ29yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFuZ3VhZ2UiPkxhbmd1YWdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZSI+U3RhdGU8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRRXhwbG9yZXIjIyNPcmRlcjo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld0V4cGxvcmVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJEb3duIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRG93biI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiPlVwPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUUV4cGxvcmVyIyMjU2VhcmNoTGltaXQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3RXhwbG9yZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw4fSQiPjIwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRRXhwbG9yZXIjIyNUaXRsZVNpemUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdFeHBsb3JlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDN9JCI+NTA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcmVmZXJlbmNlc0dyb3VwcyMjI0ZBUU92ZXJ2aWV3U21hbGxQYWdlU2hvd24iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlByZWZlcmVuY2VzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlByZWZlcmVuY2VzOjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb2x1bW4iPk90aGVyIFNldHRpbmdzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCIgVHJhbnNsYXRhYmxlPSIxIj5GQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5IiBUcmFuc2xhdGFibGU9IjEiPkZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEwIj4xMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxNSI+MTU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjAiPjIwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjI1Ij4yNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzMCI+MzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMzUiPjM1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YVNlbGVjdGVkIj4yNTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+VXNlckZBUU92ZXJ2aWV3U21hbGxQYWdlU2hvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjgwMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGl2ZSI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudEZBUVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+ZmFxPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5GQVE8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5BZ2VudC5EZXRhaWwuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+RkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZy5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5GQVEuQWdlbnQuVGlja2V0Q29tcG9zZS5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5GQVEuQWdlbnQuRkFRWm9vbS5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRUmljaFRleHQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+ZmFxPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUSBBSkFYIFJlc3BvbmRlciBmb3IgUmljaHRleHQ8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPkZBUSBBSkFYIFJlc3BvbmRlcjwvVGl0bGU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAwMC1CYWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6RkFRTWVudTo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPlslIEVudigiTGFzdFNjcmVlbk92ZXJ2aWV3IikgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+QmFjazwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwMTAtRWRpdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUU1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkVkaXQgdGhpcyBGQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRGQVFFZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRGQVFFZGl0O0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV07U2NyZWVuVHlwZT1Qb3B1cDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwMjAtSGlzdG9yeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFNZW51OjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5IaXN0b3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5IaXN0b3J5IG9mIHRoaXMgRkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50RkFRSGlzdG9yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50RkFRSGlzdG9yeTtJdGVtSUQ9WyUgRGF0YS5JdGVtSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAzMC1QcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFNZW51OjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+UHJpbnQgdGhpcyBGQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRGQVFQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50RkFRUHJpbnQ7SXRlbUlEPVslIERhdGEuSXRlbUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1BhcmFtIj50YXJnZXQ9InByaW50X0ZBUSI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDQwLUxpbmsiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6RkFRTWVudTo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+TGluazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+TGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50TGlua09iamVjdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50TGlua09iamVjdDtTb3VyY2VPYmplY3Q9RkFRO1NvdXJjZUtleT1bJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDUwLURlbGV0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFNZW51OjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5EZWxldGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkRlbGV0ZSB0aGlzIEZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudEZBUURlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50RkFRRGVsZXRlO0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+Q29uZmlybWF0aW9uRGlhbG9nPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFbGVtZW50U2VsZWN0b3IiPiNbJSBEYXRhLk1lbnVJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZyI+QWN0aW9uPUFnZW50RkFRRGVsZXRlO0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nIj5BY3Rpb249QWdlbnRGQVFEZWxldGU7U3ViYWN0aW9uPURlbGV0ZTtJdGVtSUQ9WyUgRGF0YS5JdGVtSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEaWFsb2dUaXRsZSI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0gWyUgQ29uZmlnKCJGQVE6OkZBUUhvb2siKSAlXSBbJSBEYXRhLk51bWJlciB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJDdXN0b21lckZyb250ZW5kOjpNb2R1bGUjIyNDdXN0b21lckZBUVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxUaXRsZT48L1RpdGxlPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkN1c3RvbWVyIEZBUS1ab29tPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuQ3VzdG9tZXIuRGV0YWlsLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLkN1c3RvbWVyLkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTUz5GQVEuRkFRWm9vbS5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5GQVEuQ3VzdG9tZXIuRkFRWm9vbS5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI0N1c3RvbWVyRkFRU2VhcmNoIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+Q3VzdG9tZXIgRkFRIHNlYXJjaDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8VGl0bGU+U2VhcmNoIEZBUTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNlYXJjaDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5TZWFyY2g8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U3VibWVudTwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkZBUTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1DdXN0b21lckZBUVNlYXJjaDwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8TGlua09wdGlvbj48L0xpbmtPcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT5TPC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+NzgwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFTZWFyY2gjIyNTZWFyY2hMaW1pdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDh9JCI+MjAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFTZWFyY2gjIyNTZWFyY2hQYWdlU2hvd24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsM30kIj40MDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVyRkFRU2VhcmNoIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IkZBUUlEIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPlRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJGQVFJRCI+TnVtYmVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhbmd1YWdlIj5MYW5ndWFnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGUiPlN0YXRlPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckZBUVNlYXJjaCMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRG93biI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iPkRvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVwIj5VcDwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRUHJpbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5mYXE8L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkZBUSBQcmludDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGU+UHJpbnQ8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI0N1c3RvbWVyRkFRUHJpbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxUaXRsZT48L1RpdGxlPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkN1c3RvbWVyIEZBUS1QcmludDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHVibGljRnJvbnRlbmQ6Ok1vZHVsZSMjI1B1YmxpY0ZBUVNlYXJjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+UHVibGljIEZBUSBzZWFyY2g8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlNlYXJjaCBGQVE8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5GQVEtQXJlYTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5TZWFyY2ggRkFRPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPjwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1QdWJsaWNGQVFTZWFyY2g8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPExpbmtPcHRpb24+PC9MaW5rT3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+PC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+NjAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLkN1c3RvbWVyLkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFTZWFyY2gjIyNTZWFyY2hMaW1pdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsOH0kIj4yMDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFTZWFyY2gjIyNTZWFyY2hQYWdlU2hvd24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpGQVE6OlZpZXdGQVFTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSwzfSQiPjQwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6UHVibGljRkFRU2VhcmNoIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpQdWJsaWM6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRkFRSUQiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+VGl0bGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkZBUUlEIj5OdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5Ij5DYXRlZ29yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFuZ3VhZ2UiPkxhbmd1YWdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZSI+U3RhdGU8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUVNlYXJjaCMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJEb3duIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRG93biI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiPlVwPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQdWJsaWNGcm9udGVuZDo6TW9kdWxlIyMjUHVibGljRkFRWm9vbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8VGl0bGU+PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5QdWJsaWMgRkFRLVpvb208L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5DdXN0b21lci5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1M+RkFRLkN1c3RvbWVyLkRldGFpbC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkZBUS5GQVFab29tLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkZBUS5DdXN0b21lci5GQVFab29tLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHVibGljRnJvbnRlbmQ6Ok1vZHVsZSMjI1B1YmxpY0ZBUSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8VGl0bGU+PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5QdWJsaWMgRkFRLVpvb208L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlB1YmxpY0Zyb250ZW5kOjpNb2R1bGUjIyNQdWJsaWNGQVFQcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8VGl0bGU+PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5QdWJsaWMgRkFRLVByaW50PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkZBUTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRGQVFKb3VybmFsIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxHcm91cFJvPmZhcTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxUaXRsZT5GQVE8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8R3JvdXBSbz5mYXE8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RkFRIEpvdXJuYWw8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+Sm91cm5hbDwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRGQVFKb3VybmFsPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkZBUTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+SjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjkzMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRSm91cm5hbCMjI1Nob3dDb2x1bW5zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3Sm91cm5hbDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFKb3VybmFsIyMjSm91cm5hbExpbWl0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdKb3VybmFsPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsOH0kIj4yMDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUUpvdXJuYWwjIyNUaXRsZVNpemUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld0pvdXJuYWw8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSwzfSQiPjUwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHJlZmVyZW5jZXNHcm91cHMjIyNGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbFBhZ2VTaG93biIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpQcmVmZXJlbmNlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpQcmVmZXJlbmNlczo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29sdW1uIj5PdGhlciBTZXR0aW5nczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiIFRyYW5zbGF0YWJsZT0iMSI+RkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5IiBUcmFuc2xhdGFibGU9IjEiPkZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMTAiPjEwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjE1Ij4xNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIyMCI+MjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjUiPjI1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjMwIj4zMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzNSI+MzU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhU2VsZWN0ZWQiPjI1PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5Vc2VyRkFRSm91cm5hbE92ZXJ2aWV3U21hbGxQYWdlU2hvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjgwMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGl2ZSI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkpvdXJuYWxPdmVydmlldyMjI1NtYWxsIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUUpvdXJuYWxPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGQVFKb3VybmFsT3ZlcnZpZXc6OlNtYWxsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5TbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZVNob3J0Ij5TPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRSGlzdG9yeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwPmZhcTwvR3JvdXA+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5mYXE8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8VGl0bGU+SGlzdG9yeTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5GQVE8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50RkFRRGVsZXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+ZmFxPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5GQVEgRGVsZXRlPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5EZWxldGU8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+RkFRPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6VGlja2V0Q29tcG9zZSMjI0luc2VydE1ldGhvZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuICJGdWxsIEZBUSIgaW5jbHVkZXMgdGV4dCwgYXR0YWNobWVudHMgYW5kIGlubGluZSBpbWFnZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6VGlja2V0Q29tcG9zZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iRnVsbCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkZ1bGwiPkZ1bGwgRkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUZXh0Ij5UZXh0IE9ubHk8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6VGlja2V0Q29tcG9zZSMjI0luY2x1ZGVJbnRlcm5hbCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6VGlja2V0Q29tcG9zZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6VGlja2V0Q29tcG9zZSMjI1Nob3dGaWVsZE5hbWVzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkluY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6VGlja2V0Q29tcG9zZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6VGlja2V0Q29tcG9zZSMjI1Nob3dJbnNlcnRUZXh0QnV0dG9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6VGlja2V0Q29tcG9zZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6VGlja2V0Q29tcG9zZSMjI1Nob3dJbnNlcnRMaW5rQnV0dG9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlRpY2tldENvbXBvc2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OlRpY2tldENvbXBvc2UjIyNTaG93SW5zZXJ0VGV4dEFuZExpbmtCdXR0b24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICZhbXA7IExpbmsiIC8gIkluc2VydCBGdWxsIEZBUSAmYW1wOyBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6VGlja2V0Q29tcG9zZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6VGlja2V0Q29tcG9zZSMjI1VwZGF0ZUFydGljbGVTdWJqZWN0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZSBpZiB0aGUgRkFRIHRpdGxlIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gYXJ0aWNsZSBzdWJqZWN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlRpY2tldENvbXBvc2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6Ok11bHRpTGFuZ3VhZ2UiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkRlZmF1bHQ6Okxhbmd1YWdlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz5lbjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxvYWRlcjo6QWdlbnQ6OkNvbW1vbkNTUyMjIzIwMC1GQVEiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpXZWI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5GQVEuQWdlbnQuRGVmYXVsdC5jc3M8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTG9hZGVyOjpBZ2VudDo6Q29tbW9uSlMjIyMyMDAtRkFRIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpXZWI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5GQVEuQWdlbnQuVGlja2V0Q29tcG9zZS5qczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OlZvdGluZyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5FbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkNhY2hlVFRMIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4xNzI4MDA8L1N0cmluZz4gPCEtLSBkZWZhdWx0IDE3Miw4MDAgKDYwICogNjAgKiAyNCAqIDIpIC0tPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkRhc2hib2FyZEJhY2tlbmQjIyMwMzk4LUZBUS1MYXN0Q2hhbmdlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkRhc2hib2FyZDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6OkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPkxhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+TGFzdENoYW5nZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPkNvbnRlbnRTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPmZhcTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVmYXVsdCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkRhc2hib2FyZEJhY2tlbmQjIyMwMzk5LUZBUS1MYXN0Q3JlYXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkRhc2hib2FyZDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6OkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPkxhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+TGFzdENyZWF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPkNvbnRlbnRTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPmZhcTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVmYXVsdCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KCiAgICA8Q29uZmlnSXRlbSBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI0ZBUTo6TGFuZ3VhZ2VMaXN0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5MYW5ndWFnZUxpc3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkdlbmVyaWNJbnRlcmZhY2VPcGVyYXRpb25EZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGUjIyNGQVE6OlB1YmxpY0NhdGVnb3J5TGlzdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHVibGljQ2F0ZWdvcnlMaXN0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlIyMjRkFROjpQdWJsaWNGQVFHZXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlB1YmxpY0ZBUUdldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZU9wZXJhdGlvbkRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI0ZBUTo6UHVibGljRkFRU2VhcmNoIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5QdWJsaWNGQVFTZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkdlbmVyaWNJbnRlcmZhY2VPcGVyYXRpb25EZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1pvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw0fSQiPjEwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50SFRNTEZpZWxkSGVpZ2h0TWF4IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1pvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw1fSQiPjI1MDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodERlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpGQVE6OlZpZXdab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsNH0kIj4xMDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodE1heCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OkZBUTo6Vmlld1pvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw1fSQiPjI1MDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUUFkZCMjI1JpY2hUZXh0V2lkdGgiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgd2lkdGggZm9yIHRoZSByaWNoIHRleHQgZWRpdG9yIGNvbXBvbmVudCBmb3IgdGhpcyBzY3JlZW4uIEVudGVyIG51bWJlciAocGl4ZWxzKSBvciBwZXJjZW50IHZhbHVlIChyZWxhdGl2ZSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdBZGQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeXGQrJT8kIj42MjA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUUFkZCMjI1JpY2hUZXh0SGVpZ2h0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGhlaWdodCBmb3IgdGhlIHJpY2ggdGV4dCBlZGl0b3IgY29tcG9uZW50IGZvciB0aGlzIHNjcmVlbi4gRW50ZXIgbnVtYmVyIChwaXhlbHMpIG9yIHBlcmNlbnQgdmFsdWUgKHJlbGF0aXZlKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld0FkZDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5cZCslPyQiPjMyMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRRWRpdCMjI1JpY2hUZXh0V2lkdGgiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgd2lkdGggZm9yIHRoZSByaWNoIHRleHQgZWRpdG9yIGNvbXBvbmVudCBmb3IgdGhpcyBzY3JlZW4uIEVudGVyIG51bWJlciAocGl4ZWxzKSBvciBwZXJjZW50IHZhbHVlIChyZWxhdGl2ZSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdFZGl0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlxkKyU/JCI+NjIwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFFZGl0IyMjUmljaFRleHRIZWlnaHQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgaGVpZ2h0IGZvciB0aGUgcmljaCB0ZXh0IGVkaXRvciBjb21wb25lbnQgZm9yIHRoaXMgc2NyZWVuLiBFbnRlciBudW1iZXIgKHBpeGVscykgb3IgcGVyY2VudCB2YWx1ZSAocmVsYXRpdmUpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3RWRpdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5cZCslPyQiPjMyMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpUb29sQmFyTW9kdWxlIyMjOTAtRkFROjpBZ2VudEZBUUFkZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Ub29sYmFyIEl0ZW0gZm9yIGEgc2hvcnRjdXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpUb29sQmFyTW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXI6Okxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkFkZCBGQVEgYXJ0aWNsZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50RkFRQWRkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50RkFRQWRkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2Nlc3NLZXkiPm48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNzc0NsYXNzIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb24iPmZhIGZhLXF1ZXN0aW9uPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+MTAyMDA5MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkR5bmFtaWNGaWVsZHM6Ok9iamVjdFR5cGUjIyNGQVEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pY0ZpZWxkIG9iamVjdCByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RHluYW1pY0ZpZWxkczo6T2JqZWN0VHlwZTo6UmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpc3BsYXlOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpPYmplY3RUeXBlOjpGQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjIwMDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3U21hbGwjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzbWFsbCBmb3JtYXQgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFRT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRQWRkIyMjRHluYW1pY0ZpZWxkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3QWRkPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUUVkaXQjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3RWRpdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFab29tIyMjRHluYW1pY0ZpZWxkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckZBUVpvb20jIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OkZBUTo6Vmlld1pvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUVpvb20jIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6RkFROjpWaWV3Wm9vbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFQcmludCMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1ByaW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpDdXN0b21lckZBUVByaW50IyMjRHluYW1pY0ZpZWxkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6RkFROjpWaWV3UHJpbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUVByaW50IyMjRHluYW1pY0ZpZWxkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpGQVE6OlZpZXdQcmludDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNTZWFyY2hDU1ZEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBGaWVsZHMgdXNlZCB0byBleHBvcnQgdGhlIHNlYXJjaCByZXN1bHQgaW4gQ1NWIGZvcm1hdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFTZWFyY2gjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFPdmVydmlldyMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6RkFRT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVyRkFRU2VhcmNoIyMjU2VhcmNoQ1NWRHluYW1pY0ZpZWxkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWMgRmllbGRzIHVzZWQgdG8gZXhwb3J0IHRoZSBzZWFyY2ggcmVzdWx0IGluIENTViBmb3JtYXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUVNlYXJjaCMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUU92ZXJ2aWV3IyMjRHluYW1pY0ZpZWxkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpQdWJsaWM6OkZBUU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFTZWFyY2gjIyNTZWFyY2hDU1ZEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBGaWVsZHMgdXNlZCB0byBleHBvcnQgdGhlIHNlYXJjaCByZXN1bHQgaW4gQ1NWIGZvcm1hdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRU2VhcmNoIyMjRGVmYXVsdHMjIyNGdWxsdGV4dCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNEZWZhdWx0cyMjI051bWJlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNEZWZhdWx0cyMjI1RpdGxlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCMjI0RlZmF1bHRzIyMjS2V5d29yZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNEZWZhdWx0cyMjI0xhbmd1YWdlSURzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCMjI0RlZmF1bHRzIyMjQ2F0ZWdvcnlJRHMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRU2VhcmNoIyMjRGVmYXVsdHMjIyNWYWxpZElEcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNEZWZhdWx0cyMjI1N0YXRlSURzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCMjI0RlZmF1bHRzIyMjVm90ZVNlYXJjaFR5cGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRU2VhcmNoIyMjRGVmYXVsdHMjIyNSYXRlU2VhcmNoVHlwZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNEZWZhdWx0cyMjI0FwcHJvdmVkU2VhcmNoIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCMjI0RlZmF1bHRzIyMjQ3JlYXRlZFVzZXJJRHMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRU2VhcmNoIyMjRGVmYXVsdHMjIyNMYXN0Q2hhbmdlZFVzZXJJRHMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RkFRPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nPjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRU2VhcmNoIyMjRGVmYXVsdHMjIyNJdGVtQ3JlYXRlVGltZVBvaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCMjI0RlZmF1bHRzIyMjSXRlbUNyZWF0ZVRpbWVTbG90IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZz48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpBZ2VudEZBUVNlYXJjaCMjI0RlZmF1bHRzIyMjSXRlbUNoYW5nZVRpbWVQb2ludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNEZWZhdWx0cyMjI0l0ZW1DaGFuZ2VUaW1lU2xvdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmc+PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRkFROjpGcm9udGVuZDo6QWdlbnRGQVFTZWFyY2gjIyNUaXRsZVNpemUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZBUTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6RkFROjpWaWV3U2VhcmNoPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsM30kIj41MDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVyRkFRU2VhcmNoIyMjVGl0bGVTaXplIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OkZBUTo6Vmlld1NlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDN9JCI+NTA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFTZWFyY2gjIyNUaXRsZVNpemUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GQVE8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6UHVibGljOjpGQVE6OlZpZXdTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSwzfSQiPjUwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgoKPC9vdHJzX2NvbmZpZz4K
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==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGFfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdTaWRzdCDDpm5kcmVkZSBhcnRpa2xlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdOeWVzdGUgYXJ0aWtsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ1RvcCAxMCBhcnRpa2xlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ1VuZGVya2F0ZWdvcmkgYWYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICdJbmdlbiByYXRlIHZhbGd0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBsb3Jlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IGRheSd9ID0gJ1N0YXJ0IGRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBtb250aCd9ID0gJ1N0YXJ0IG3DpW5lZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnU3RhcnQgw6VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdTbHV0IGRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdTbHV0IG3DpW5lZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ1NsdXQgw6VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rcyBmb3IgeW91ciB2b3RlISd9ID0gJ1RhayBmb3IgZGluIHN0ZW1tZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdEdSBoYXIgYWxsZXJlZGUgc3RlbXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgYWRkZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTeW1wdG9tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvbHV0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnR29ka2VuZHQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBncm91cC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnVmlsIGJsaXZlIHZpc3Qgc29tIGtvbW1lbnRhciBpIEV4cGxvcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsZGNhcmRzIGFyZSBhbGxvd2VkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZid9ID0gJ0hpc3RvcmlrIGFmJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIChlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjApJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgKGUuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdTaWRzdCDDpm5kcmV0IGFmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZXR3ZWVuKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmV0d2VlbiknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUUZ1bGx0ZXh0J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2ZpbGUgU2VsZWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyB2b3Rlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHJhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIHJhbmdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZXMnfSA9ICdTdGVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSB0aXRsZSB0byBhcnRpY2xlIHN1YmplY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSByZXN0cmljdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIHJlc3RyaWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHJhdGUuLi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkIGJldHdlZW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUUpvdXJuYWwucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRHluYW1pYyBGaWVsZHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0ZBUS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBhcnRpY2xlIGlzIGVtcHR5ISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDU1MgY29sb3IgZm9yIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG1heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgaWYgdGhlIEZBUSB0aXRsZSBzaG91bGQgYmUgY29uY2F0ZW5hdGVkIHRvIGFydGljbGUgc3ViamVjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuICJGdWxsIEZBUSIgaW5jbHVkZXMgdGV4dCwgYXR0YWNobWVudHMgYW5kIGlubGluZSBpbWFnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiTGltaXQiIGRlZmluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc3BsYXllZCBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNtYWxsIGZvcm1hdCBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWljayBzZWFyY2ggc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgRkFRIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAnTnkgRkFRIEFydGlrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgLyAiSW5zZXJ0IEZ1bGwgRkFRICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICfDtmZmZW50bGljaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ2V4dGVybic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnRkFRLU51bW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdadWxldHp0IGdlw6RuZGVydGUgRkFRLUFydGlrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAnWnVsZXR6dCBlcnN0ZWxsdGUgRkFRLUFydGlrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ1RvcCAxMCBGQVEtQXJ0aWtlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ1VudGVya2F0ZWdvcmllIHZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ0tlaW5lIEJld2VydHVuZyBhdXNnZXfDpGhsdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICdBbnNpY2h0IG5hY2ggS2F0ZWdvcmllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICfDtmZmZW50bGljaCAoQWxsZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ2V4dGVybiAoS3VuZGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICdpbnRlcm4gKEFnZW50KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdTdGFydCBUYWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdTdGFydCBNb25hdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnU3RhcnQgSmFocic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAnRW5kIFRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdFbmQgTW9uYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICdFbmQgSmFocic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICdWaWVsZW4gRGFuayBmw7xyIElocmUgQmV3ZXJ0dW5nISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ1NpZSBoYWJlbiBiZXJlaXRzIGFiZ2VzdGltbXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnRkFRLUFydGlrZWwtQXVzZHJ1Y2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnRkFRLUFydGlrZWwgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdGQVEtQXJ0aWtlbCAobmV1IGVyc3RlbGx0ZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJ0ZBUS1BcnRpa2VsIChha3R1YWxpc2llcnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdGQVEtS2F0ZWdvcmllIGFrdHVhbGlzaWVydCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJ0ZBUS1LYXRlZ29yaWUgaGluenVnZWbDvGd0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICdFaW5lIEthdGVnb3JpZSBiZW7DtnRpZ3QgZWluZW4gTmFtZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICdEaWVzZSBLYXRlZ29yaWUgZXhpc3RpZXJ0IGJlcmVpdHMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdGQVEtU3ByYWNoZSBoaW56dWdlZsO8Z3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ0ZBUS1TcHJhY2hlIGFrdHVhbGlzaWVydCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnRGVyIE5hbWUgaXN0IGVyZm9yZGVybGljaCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdEaWVzZSBTcHJhY2hlIGV4aXN0aWVydCBiZXJlaXRzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTeW1wdG9tJ30gPSAnU3ltcHRvbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2x1dGlvbid9ID0gJ0zDtnN1bmcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdGQVEtQXJ0aWtlbCBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3Jkcyd9ID0gJ1NjaGzDvHNzZWx3w7ZydGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnRWluZSBLYXRlZ29yaWUgaXN0IGVyZm9yZGVybGljaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdGcmVpZ2FiZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdGQVEtS2F0ZWdvcmllbi1WZXJ3YWx0dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJ0thdGVnb3JpZSBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdLYXRlZ29yaWUgbMO2c2NoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdLYXRlZ29yaWUgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ0thdGVnb3JpZSBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAnV8OkaGxlbiBTaWUgbWluZGVzdGVucyBlaW5lIEJlcmVjaHRpZ3VuZ3NncnVwcGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICdBZ2VudGVuLUdydXBwZW4sIGRpZSBiZXJlY2h0aWd0IHNpbmQsIGF1ZiBGQVEtQXJ0aWtlbCBpbiBkaWVzZXIgS2F0ZWdvcmllIHp1enVncmVpZmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnV2lyZCBpbSBFeHBsb3JlciBhbHMgS29tbWVudGFyIGFuZ2V6ZWlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ1dvbGxlbiBTaWUgZGllc2UgS2F0ZWdvcmllIHdpcmtsaWNoIGzDtnNjaGVuPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9CiAgICAgICAgJ1NpZSBrw7ZubmVuIGRpZXNlIEthdGVnb3JpZSBuaWNodCBsw7ZzY2hlbi4gU2llIHdpcmQgaW4gbWluZGVzdGVucyBlaW5lbSBGQVEtQXJ0aWtlbCB2ZXJ3ZW5kZXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnRGllc2UgS2F0ZWdvcmllIHdpcmQgaW4gZGVuIGZvbGdlbmRlbiBGQVEtQXJ0aWtlbG4gdmVyd2VuZGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJ0RpZXNlIEthdGVnb3JpZSBpc3QgZWluZSBFbHRlcm4tS2F0ZWdvcmllIGbDvHIgZm9sZ2VuZGUgS2F0ZWdvcmllbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdXb2xsZW4gU2llIGRpZXNlbiBGQVEtQXJ0aWtlbCB3aXJrbGljaCBsw7ZzY2hlbj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdGQVEtRXhwbG9yZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVpY2sgU2VhcmNoJ30gPSAnU2NobmVsbHN1Y2hlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICdXaWxkY2FyZHMgc2luZCBlcmxhdWJ0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICdFcndlaXRlcnRlIFN1Y2hlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdVbnRlcmthdGVnb3JpZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnRkFRLUFydGlrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICdLZWluZSBVbnRlcmthdGVnb3JpZW4gZ2VmdW5kZW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICfDhG5kZXJ1bmdzdmVybGF1ZiB2b24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSm91cm5hbE92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBKb3VybmFsIGRhdGEgZm91bmQuJ30gPSAnS2VpbmUgRkFRLUpvdXJuYWxkYXRlbiBnZWZ1bmRlbi4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnRkFRLVNwcmFjaGVuLVZlcndhbHR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPQogICAgICAgICdWZXJ3ZW5kZW4gU2llIGRpZXNlcyBGZWF0dXJlIHdlbm4gU2llIG1pdCB2ZXJzY2hpZWRlbmVuIFNwcmFjaGVuIGFyYmVpdGVuIHdvbGxlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnU3ByYWNoZSBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgTGFuZ3VhZ2UgJXMnfSA9ICdTcHJhY2hlIEzDtnNjaGVuICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ1NwcmFjaGUgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ1NwcmFjaGUgQmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnV29sbGVuIFNpZSBkaWVzZSBTcHJhY2hlIHdpcmtsaWNoIGzDtnNjaGVuPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBsYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUhJ30gPQogICAgICAgICdTaWUga8O2bm5lbiBkaWVzZSBTcHJhY2hlIG5pY2h0IGzDtnNjaGVuLiBTaWUgd2lyZCBpbiBtaW5kZXN0ZW5zIGVpbmVtIEZBUS1BcnRpa2VsIHZlcndlbmRldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdEaWVzZSBTcHJhY2hlIHdpcmQgaW4gZGVuIGZvbGdlbmRlbiBGQVEtQXJ0aWtlbG4gdmVyd2VuZGV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnS29udGV4dC1FaW5zdGVsbHVuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ0ZBUS1BcnRpa2VsIHBybyBTZWl0ZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgZGF0YSBmb3VuZC4nfSA9ICdLZWluZSBGQVEtRGF0ZW4gZ2VmdW5kZW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJ1NjaGzDvHNzZWx3b3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgKGUuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCknfSA9ICdBYnN0aW1tdW5nIChadW0gQmVpc3BpZWw6ID0xMCBvZGVyID42MCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSAoZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUpJ30gPSAnQW50ZWlsIChadW0gQmVpc3BpZWw6ID0yNSUgb2RlciA+NzUlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJ0dlbmVobWlndCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdMZXR6dGUgw4RuZGVydW5nIHZvbjonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICdFcnN0ZWxsemVpdCBkZXMgRkFRLUFydGlrZWwgKGRhdm9yL2RhbmFjaCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJldHdlZW4pJ30gPSAnRXJzdGVsbHplaXQgZGVzIEZBUS1BcnRpa2VsICh6d2lzY2hlbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICdMZXR6dGUgw4RuZGVydW5nIGRlcyBGQVEtQXJ0aWtlbCAoZGF2b3IvZGFuYWNoKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmV0d2VlbiknfSA9ICdMZXR6dGUgw4RuZGVydW5nIGRlcyBGQVEtQXJ0aWtlbCAoendpc2NoZW4pJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ0ZBUS1Wb2xsdGV4dCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJ0ZBUSBTdWNoZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJ1Byb2ZpbGF1c3dhaGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJ0Fic3RpbW1lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlIHNldHRpbmdzJ30gPSAnS2VpbmUgQWJzdGltbXVuZ3NlaW5zdGVsbHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyB2b3Rlcyd9ID0gJ3NwZXppZmlzY2hlIEFic3RpbW11bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwJ30gPSAnWnVtIEJlaXNwaWVsOiA9MTAgb2RlciA+NjAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSd9ID0gJ0FudGVpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNldHRpbmdzJ30gPSAnS2VpbmUgQW50ZWlsLUVpbnN0ZWxsdW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgcmF0ZSd9ID0gJ2Jlc3RpbW10ZXIgQW50ZWlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlJ30gPSAnWnVtIEJlaXNwaWVsOiA9MjUlIG9kZXIgPjc1JSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSd9ID0gJ0Vyc3RlbGx6ZWl0IGRlcyBGQVEtQXJ0aWtlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyBkYXRlJ30gPSAnc3BlemlmaXNjaGVzIERhdHVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgcmFuZ2UnfSA9ICdEYXR1bXNiZXJlaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lJ30gPSAnbGV0enRlIMOEbmRlcnVuZyBkZXMgRkFRLUFydGlrZWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnRkFRLUluZm9ybWF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ0Jld2VydHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvdXQgb2YgNSd9ID0gJ3ZvbiA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnQmV3ZXJ0dW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnS2VpbmUgQmV3ZXJ0dW5nZW4gZ2VmdW5kZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdLZWluZSBCZXdlcnR1bmdlbiBnZWZ1bmRlbiEgU2VpZW4gU2llIGRlciBlcnN0ZSBkZXIgZGllc2VuIEZBUS1BcnRpa2VsIGJld2VydGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnQXR0YWNobWVudCBIZXJ1bnRlcmxhZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnVW0gZGllIExpbmtzIGltIGZvbGdlbmRlbiBCZWl0cmFnIHp1IMO2ZmZuZW4sIGthbm4gZXMgbm90d2VuZGlnIHNlaW4gU3RyZyBvZGVyIFNoaWZ0IHp1IGRyw7xja2VuLCB3w6RocmVuZCBhdWYgZGVuIExpbmsgZ2VrbGlja3Qgd2lyZCAoYWJow6RuZ2lnIHZvbSB2ZXJ3ZW5kZXRlbiBCcm93c2VyIHVuZCBCZXRyaWVic3N5c3RlbSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0KICAgICAgICAnV2llIGhpbGZyZWljaCB3YXIgZGllc2VyIEFydGlrZWw/IEJpdHRlIGdlYmVuIFNpZSBJaHJlIEJld2VydHVuZyBhYiB1bmQgaGVsZmVuIFNpZSBtaXQgZGllIFF1YWxpdMOkdCBkZXIgRkFRLURhdGVuYmFuayB6dSB2ZXJiZXNzZXJuLiBWaWVsZW4gRGFuayEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICduaWNodCBoaWxmcmVpY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAnc2VociBoaWxmcmVpY2gnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIHRpdGxlIHRvIGFydGljbGUgc3ViamVjdCd9ID0gJ0bDvGdlIGRlbiBGQVEtVGl0ZWwgYWxzIEFydGlrZWxiZXRyZWZmIGhpbnp1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdGQVEtVGV4dCBlaW5mw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRJ30gPSAnVm9sbHN0w6RuZGlnZSBGQVEgZWluZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0ZBUS1MaW5rIGVpbmbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnRkFRLVRleHQgJiBMaW5rIGVpbmbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnVm9sbHN0w6RuZGlnZSBGQVEgJiBMaW5rIGVpbmbDvGdlbic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ0tlaW5lIEZBUS1BcnRpa2VsIGdlZnVuZGVuLic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpJ30gPSAnVm9sbHRleHQtU3VjaGUgaW4gRkFRLUFydGlrZWxuICh6LiBCLiAiSm9obipuIiBvciAiV2lsbCoiKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIHJlc3RyaWN0aW9ucyd9ID0gJ1dhaGxlaW5zY2hyw6Rua3VuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggdm90ZXMuLi4nfSA9ICdOdXIgRkFRLUFydGlrZWwgbWl0IEFic3RpbW11bmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIHJlc3RyaWN0aW9ucyd9ID0gJ0FudGVpbHNiZXNjaHLDpG5rdW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCByYXRlLi4uJ30gPSAnTnVyIEZBUS1BcnRpa2VsIG1pdCBlaW5lbSBBbnRlaWwgdm9uLi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQnfSA9ICdOdXIgRkFRLUFydGlrZWwgZXJzdGVsbHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCBiZXR3ZWVuJ30gPSAnTnVyIFRpY2tldHMsIGRpZSBlcnN0ZWxsdCB3dXJkZW4gendpc2NoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/J30gPSAnU3VjaHByb2ZpbCBhbHMgVm9ybGFnZT8nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBOdW1iZXInfSA9ICdBcnRpa2VsbnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnU3VjaGUgbmFjaCBBcnRpa2VsbiBtaXQgU2NobMO8c3NlbHfDtnJ0ZXJuJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ8OWZmZlbnRsaWNoJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayB0byBGQVEgRXhwbG9yZXInfSA9ICdadXLDvGNrIHp1bSBGQVEtRXhwbG9yZXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRSm91cm5hbC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdGQVEgSm91cm5hbCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCB1cGRhdGUnfSA9ICdMZXR6dGUgQWt0dWFsaXNpZXJ1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIER5bmFtaWMgRmllbGRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9GQVEucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgYXJ0aWNsZSBpcyBlbXB0eSEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPQogICAgICAgICdFaW4gRmlsdGVyIHp1ciBhdXRvbWF0aXNjaGVuIEdlbmVyaWVydW5nIHZvbiBGQVEtTGlua3MsIHdlbm4gZWluIEhpbndlaXMgYXVmIGVpbmVuIEZBUS1BcnRpa2VsIGlkZW50aWZpemllcnQgd2lyZC4gRGFzIEVsZW1lbnQgSW1hZ2UgZXJsYXVidCB6d2VpIEVpbmdhYmVmb3JtZW46IEVyc3RlbnMgZGVyIE5hbWUgZWluZXMgSWNvbnMgKHouIEIuIGZhcS5wbmcpLiBJbiBkaWVzZW0gRmFsbCB3aXJkIGF1ZiBkYXMgR3JhZmlrLVZlcnplaWNobmlzIGRlcyBPVFJTIHp1Z2VncmlmZmVuLiBBbHMgendlaXRlIE3DtmdsaWNoa2VpdCBrYW5uIG1hbiBhYmVyIGF1Y2ggZGVuIGRpcmVrdGVuIExpbmsgenVyIEdyYWZpayBhbmdlYmVuICh6LiBCLiBodHRwOi8vb3Rycy5vcmcvZmFxLnBuZykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ1NTLUZhcmJlIGbDvHIgZGFzIEJld2VydHVuZ3MtRXJnZWJuaXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICdDYWNoZXplaXQgZsO8ciBGQVEtQXJ0aWtlbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0thdGVnb3JpZW4tVmVyd2FsdHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdEZXppbWFsc3RlbGxlbiBkZXMgRXJnZWJuaXNzZXMgZGVyIEFydGlrZWxiZXdlcnR1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICdSb290LUthdGVnb3JpZS1OYW1lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnU3RhbmRhcmQtU3ByYWNoZSBmw7xyIEZBUS1BcnRpa2VsIGltIEVpbnplbC1TcHJhY2gtTW9kdXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJ1N0YW5kYXJkbcOkw59pZyBtYXhpbWFsIGFuZ2V6ZWlndGUgWmVpY2hlbiBpbiBkZW4gVGl0ZWxuIGRlciBGQVEtQXJ0aWtlbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0KICAgICAgICAnU3RhbmRhcmQtUHJpb3JpdMOkdCB2b24gVGlja2V0cyBmw7xyIGRpZSBGcmVpZ2FiZSB2b24gRkFRLUFydGlrZWxuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAnU3RhbmRhcmQgU3RhdHVzIGVpbmVzIEZBUS1FaW50cmFncy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ1N0YW5kYXJkLVN0YXR1cyB2b24gVGlja2V0cyBmw7xyIGRpZSBGcmVpZ2FiZSB2b24gRkFRLUFydGlrZWxuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdTdGFuZGFyZCBUaWNrZXR0eXAgZsO8ciBkaWUgR2VuZWhtaWd1bmcgdm9uIEZBUS1BcnRpa2Vsbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0KICAgICAgICAnU3RhbmRhcmR3ZXJ0IGRlcyBBY3Rpb24tUGFyYW1ldGVycyBmw7xyIGRlbiDDtmZmZW50bGljaGVuIEZBUS1CZXJlaWNoLiBEZXIgQWN0aW9uLVBhcmFtZXRlciB3aXJkIHZvbiBkZW4gU2tyaXB0ZW4gZGVzIFN5c3RlbXMgYmVudXR6dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGlmIHRoZSBGQVEgdGl0bGUgc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBhcnRpY2xlIHN1YmplY3QuJ30gPQogICAgICAgICdEZWZpbmllcnQgb2IgZGVyIEZBUS1UaXRlbCBtaXQgZGVtIEFydGlrZWxiZXRyZWZmIHZlcmtldHRldCB3ZXJkZW4gc29sbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGVpbiDDnGJlcnNpY2h0cy1Nb2R1bCB1bSBkaWUgU21hbGwtQW5zaWNodCBpbSBGQVEtSm91cm5hbCBhbnp1emVpZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPQogICAgICAgICdEZWZpbmllcnQgZWluIMOcYmVyc2ljaHRzLU1vZHVsIHVtIGRpZSBTbWFsbC1BbnNpY2h0IGVpbmVyIEZBUS1MaXN0ZSBhbnp1emVpZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRhcyBTdGFuZGFyZC1GQVEtQXR0cmlidXQgZsO8ciBkaWUgU29ydGllcnVuZyBkZXIgRkFRLVN1Y2hlIGltIEFnZW50ZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRhcyBTdGFuZGFyZC1GQVEtQXR0cmlidXQgZsO8ciBkaWUgU29ydGllcnVuZyBkZXMgRkFRLVN1Y2hlIGltIEt1bmRlbi1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRhcyBTdGFuZGFyZC1GQVEtQXR0cmlidXQgZsO8ciBkaWUgU29ydGllcnVuZyBkZXMgRkFRLVN1Y2hlIGltIFB1YmxpYy1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRhcyBTdGFuZGFyZC1GQVEtQXR0cmlidXQgZsO8ciBkaWUgU29ydGllcnVuZyBkZXMgRkFRLUV4cGxvcmVyIGltIEFnZW50ZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkYXMgU3RhbmRhcmQtRkFRLUF0dHJpYnV0IGbDvHIgZGllIFNvcnRpZXJ1bmcgZGVzIEZBUS1FeHBsb3JlciBpbSBLdW5kZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGFzIFN0YW5kYXJkLUZBUS1BdHRyaWJ1dCBmw7xyIGRpZSBTb3J0aWVydW5nIGRlcyBGQVEtRXhwbG9yZXIgaW0gUHVibGljLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIFN0YW5kYXJkLVNvcnRpZXJ1bmcgZGVzIEZBUS1FeHBsb3JlciBpbSBBZ2VudGVuLUludGVyZmFjZS4gQXVmOiDDhGx0ZXN0ZXIgRkFRLUFydGlrZWwgb2Jlbi4gQWI6IE5ldWVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBTdGFuZGFyZC1Tb3J0aWVydW5nIGRlcyBGQVEtRXhwbG9yZXIgaW0gS3VuZGVuLUludGVyZmFjZS4gQXVmOiDDhGx0ZXN0ZXIgRkFRLUFydGlrZWwgb2Jlbi4gQWI6IE5ldWVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgU3RhbmRhcmQtU29ydGllcnVuZyBkZXMgRkFRLUV4cGxvcmVycyBpbSBQdWJsaWMtSW50ZXJmYWNlLiBBdWY6IMOEbHRlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLiBBYjogTmV1ZXN0ZXIgRkFRLUFydGlrZWwgb2Jlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBTdGFuZGFyZC1Tb3J0aWVydW5nIGRlciBGQVEtU3VjaGUgaW0gQWdlbnRlbi1JbnRlcmZhY2UuIEF1Zjogw4RsdGVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uIEFiOiBOZXVlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIFN0YW5kYXJkLVNvcnRpZXJ1bmcgZGVyIEZBUS1TdWNoZSBpbSBLdW5kZW4tSW50ZXJmYWNlLiBBdWY6IMOEbHRlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLiBBYjogTmV1ZXN0ZXIgRkFRLUFydGlrZWwgb2Jlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgU3RhbmRhcmQtU29ydGllcnVuZyBkZXIgRkFRLVN1Y2hlIGltIFB1YmxpYy1JbnRlcmZhY2UuIEF1Zjogw4RsdGVzdGVyIEZBUS1BcnRpa2VsIG9iZW4uIEFiOiBOZXVlc3RlciBGQVEtQXJ0aWtlbCBvYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgU3RhbmRhcmRhdHRyaWJ1dGUgZsO8ciBkaWUgU3VjaGUgaW4gZGVuIEjDpHVmaWctZ2VzdGVsbHRlbi1GcmFnZW4gaW0gSMOkdWZpZy1nZXN0ZWxsdGUtRnJhZ2VuIFN1Y2hkaWFsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGluZm9ybWF0aW9uIHRvIGJlIGluc2VydGVkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4gIkZ1bGwgRkFRIiBpbmNsdWRlcyB0ZXh0LCBhdHRhY2htZW50cyBhbmQgaW5saW5lIGltYWdlcy4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgSW5mb3JtYXRpb25lbiwgd2VsY2hlIGluIGVpbiBGQVEtYmFzaWVyZW5kZXMgVGlja2V0IGVpbmdlZ2ViZW4gd2VyZGVuLiAiS29tcGxldHRlIEZBUSIgYmVpbmhhbHRldCBkZW4gVGV4dCwgQW5ow6RuZ2UgdW5kIElubGluZS1CaWxkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgUGFyYW1ldGVyIGbDvHIgZGFzIMOcYmVyc2ljaHRzc2VpdGVuLUJhY2tlbmQuICJMaW1pdCIgZGVmaW5pZXJ0IGRpZSBBbnphaGwgZGVyIEVpbnRyw6RnZSwgZGllIHN0YW5kYXJkbcOkw59pZyBhbmdlemVpZ3Qgd2VyZGVuLiAiR3JvdXAiIHdpcmQgdmVyd2VuZGV0LCB1bSBkZW4gWnVncmlmZiBhdWYgZGFzIFBsdWdpbiB6dSBiZWdyZW56ZW4gKGJzcHcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBzdGV1ZXJ0LCBvYiBkYXMgUGx1Z2luIHN0YW5kYXJkbcOkw59pZyBha3RpdmllcnQgaXN0IG9kZXIgb2IgZGVyIFVzZXIgZXMgbWFudWVsbCBha3RpdmllcmVuIG11c3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZXJ0IGRpZSBhbmdlemVpZ3RlbiBTcGFsdGVuIGltIEZBUS1FeHBsb3Jlci4gRGllc2UgT3B0aW9uIGhhdCBrZWluZSBBdXN3aXJrdW5nIGF1ZiBkaWUgUG9zaXRpb24gZGVyIFNwYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lcnQgZGllIGFuZ2V6ZWlndGVuIFNwYWx0ZW4gaW0gRkFRLUpvdXJuYWwuIERpZXNlIE9wdGlvbiBoYXQga2VpbmUgQXVzd2lya3VuZyBhdWYgZGllIFBvc2l0aW9uIGRlciBTcGFsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lcnQgZGllIGFuZ2V6ZWlndGVuIFNwYWx0ZW4gaW4gZGVyIEZBUS1TdWNoZS4gRGllc2UgT3B0aW9uIGhhdCBrZWluZSBBdXN3aXJrdW5nIGF1ZiBkaWUgUG9zaXRpb24gZGVyIFNwYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnRGVmaW5pZXJ0IHdvIGRlciBMaW5rIGF1cyBcJ0ZBUSBlaW5mw7xnZW5cJyBhbmdlemVpZ3Qgd2lyZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pdGlvbiBkZXIgZnJlaWVuIFRleHRmZWxkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ0RpZXNlIEZBUSBsw7ZzY2hlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdBbnplaWdlIHZvbiBkeW5hbWlzY2hlbiBGZWxkZXIgaW4gZGVyIMOWYmVyZmzDpGNoZSAiRkFRIGhpbnp1ZsO8Z2VuIiBpbSBBZ2VudGVuLUludGVyZmFjZS4gTcO2Z2xpY2hlIEVpbnN0ZWxsdW5nZW46IDAgPSBkZWFrdGl2aWVydCwgMSA9IGFrdGl2aWVydCwgMiA9IGFrdGl2aWVydCB1bmQgYmVuw7Z0aWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdBbnplaWdlIHZvbiBkeW5hbWlzY2hlbiBGZWxkZXIgaW4gZGVyIMOWYmVyZmzDpGNoZSAiRkFRIGJlYXJiZWl0ZW4iIGltIEFnZW50ZW4tSW50ZXJmYWNlLiBNw7ZnbGljaGUgRWluc3RlbGx1bmdlbjogMCA9IGRlYWt0aXZpZXJ0LCAxID0gYWt0aXZpZXJ0LCAyID0gYWt0aXZpZXJ0IHVuZCBiZW7DtnRpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdBbnplaWdlIHZvbiBkeW5hbWlzY2hlbiBGZWxkZXIgaW4gZGVyIMOWYmVyZmzDpGNoZSAiRkFRIMOcYmVyc2ljaHQiIGltIEt1bmRlbi1JbnRlcmZhY2UuIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsIDIgPSBha3RpdmllcnQgdW5kIGJlbsO2dGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdBbnplaWdlIHZvbiBkeW5hbWlzY2hlbiBGZWxkZXIgaW4gZGVyIMOWYmVyZmzDpGNoZSAiRkFRIMOcYmVyc2ljaHQiIGltIFB1YmxpYy1JbnRlcmZhY2UuIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsIDIgPSBha3RpdmllcnQgdW5kIGJlbsO2dGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdBbnplaWdlIHZvbiBkeW5hbWlzY2hlbiBGZWxkZXIgaW4gZGVyIMOWYmVyZmzDpGNoZSAiRkFRIGRydWNrZW4iIGltIEFnZW50ZW4tSW50ZXJmYWNlLiBNw7ZnbGljaGUgRWluc3RlbGx1bmdlbjogMCA9IGRlYWt0aXZpZXJ0LCAxID0gYWt0aXZpZXJ0LCAyID0gYWt0aXZpZXJ0IHVuZCBiZW7DtnRpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnQW56ZWlnZSB2b24gZHluYW1pc2NoZW4gRmVsZGVyIGluIGRlciDDlmJlcmZsw6RjaGUgIkZBUSBkcnVja2VuIiBpbSBLdW5kZW4tSW50ZXJmYWNlLiBNw7ZnbGljaGUgRWluc3RlbGx1bmdlbjogMCA9IGRlYWt0aXZpZXJ0LCAxID0gYWt0aXZpZXJ0LCAyID0gYWt0aXZpZXJ0IHVuZCBiZW7DtnRpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0FuemVpZ2Ugdm9uIGR5bmFtaXNjaGVuIEZlbGRlciBpbiBkZXIgw5ZiZXJmbMOkY2hlICJGQVEgZHJ1Y2tlbiIgaW0gUHVibGljLUludGVyZmFjZS4gTcO2Z2xpY2hlIEVpbnN0ZWxsdW5nZW46IDAgPSBkZWFrdGl2aWVydCwgMSA9IGFrdGl2aWVydCwgMiA9IGFrdGl2aWVydCB1bmQgYmVuw7Z0aWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnQW56ZWlnZSB2b24gZHluYW1pc2NoZW4gRmVsZGVyIGluIGRlciDDlmJlcmZsw6RjaGUgIkZBUSBkdXJjaHN1Y2hlbiIgaW0gQWdlbnRlbi1JbnRlcmZhY2UuIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsIDIgPSBha3RpdmllcnQgdW5kIGJlbsO2dGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ0FuemVpZ2Ugdm9uIGR5bmFtaXNjaGVuIEZlbGRlciBpbiBkZXIgw5ZiZXJmbMOkY2hlICJGQVEgZHVyY2hzdWNoZW4iIGltIEt1bmRlbi1JbnRlcmZhY2UuIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsIDIgPSBha3RpdmllcnQgdW5kIGJlbsO2dGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdBbnplaWdlIHZvbiBkeW5hbWlzY2hlbiBGZWxkZXIgaW4gZGVyIMOWYmVyZmzDpGNoZSAiRkFRIGR1cmNoc3VjaGVuIiBpbSBQdWJsaWMtSW50ZXJmYWNlLiBNw7ZnbGljaGUgRWluc3RlbGx1bmdlbjogMCA9IGRlYWt0aXZpZXJ0LCAxID0gYWt0aXZpZXJ0LCAyID0gYWt0aXZpZXJ0IHVuZCBiZW7DtnRpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc21hbGwgZm9ybWF0IG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0FuemVpZ2Ugdm9uIGR5bmFtaXNjaGVuIEZlbGRlciBpbiBkZXIgw5ZiZXJmbMOkY2hlICJzbWFsbCBGQVEgw5xiZXJzaWNodCIgaW0gQWdlbnRlbi1JbnRlcmZhY2UuIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsIDIgPSBha3RpdmllcnQgdW5kIGJlbsO2dGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0FuemVpZ2Ugdm9uIGR5bmFtaXNjaGVuIEZlbGRlcm4gaW4gZGVyIE9iZXJmbMOkY2hlICJGQVEgWm9vbSIgaW0gQWdlbnRlbi1JbnRlcmZhY2UuIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsIDIgPSBha3RpdmllcnQgdW5kIGJlbsO2dGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0FuemVpZ2Ugdm9uIGR5bmFtaXNjaGVuIEZlbGRlcm4gaW4gZGVyIE9iZXJmbMOkY2hlICJGQVEgWm9vbSIgaW0gS3VuZGVuLUludGVyZmFjZS4gTcO2Z2xpY2hlIEVpbnN0ZWxsdW5nZW46IDAgPSBkZWFrdGl2aWVydCwgMSA9IGFrdGl2aWVydCwgMiA9IGFrdGl2aWVydCB1bmQgYmVuw7Z0aWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0FuemVpZ2Ugdm9uIGR5bmFtaXNjaGVuIEZlbGRlcm4gaW4gZGVyIE9iZXJmbMOkY2hlICJGQVEgWm9vbSIgaW0gUHVibGljLUludGVyZmFjZS4gTcO2Z2xpY2hlIEVpbnN0ZWxsdW5nZW46IDAgPSBkZWFrdGl2aWVydCwgMSA9IGFrdGl2aWVydCwgMiA9IGFrdGl2aWVydCB1bmQgYmVuw7Z0aWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnRkFRIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ011bHRpcGxlIFNwcmFjaGVuIGltIEZBUS1Nb2R1bCBha3RpdmllcmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJ0Jld2VydHVuZ3MtTWVjaGFuaXNtdXMgaW0gRkFRLU1vZHVsIGFrdGl2aWVyZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdGQVEtSm91cm5hbCBBbnplaWdlLUxpbWl0IGbDvHIgZGllIFNtYWxsLUFuc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdGQVEtw5xiZXJzaWNodCAia2xlaW5lcyIgTGltaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnRkFRIGxpbWl0IHBybyBTZWl0ZSBmw7xyIGRhcyBGQVEtSm91cm5hbCBpbiBkZXIgU21hbGwtQW5zaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0ZBUSBsaW1pdCBwcm8gU2VpdGUgZsO8ciBkaWUgU21hbGwtQW5zaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1N1Y2gtQmFja2VuZC1Sb3V0ZXIgZsO8ciBkaWUgRkFRLVN1Y2hlIGltIEFnZW50ZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJ0ZBUS1CZXJlaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNCd9ID0gJ0ZlbGQ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNSd9ID0gJ0ZlbGQ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0Zyb250ZW5kLU1vZHVsLVJlZ2lzdHJpZXJ1bmcgZsO8ciBkYXMgUHVibGljLUludGVyZmFjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdHcnVwcGUgZsO8ciBkaWUgRnJlaWdhYmUgdm9uIEZBUS1BcnRpa2Vsbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJ0ZBUS1IaXN0b3JpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnSW50ZXJuZSBGQVEtRmVsZGVyIGluIGVpbmVtIEZBUS1iYXNpZXJ0ZW5UaWNrZXQgdmVyd2VuZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJ0RlbiBOYW1lbiBqZWRlcyBGQVEtRmVsZGVzIGVpbmVtIEZBUS1iYXNpZXJ0ZW4gVGlja2V0IHZlcndlbmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2sgc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICdPYmVyZmzDpGNoZSBhdWYgZGVyIGRpZSBTY2huZWxsc3VjaGUgYW5nZXplaWd0IHdlcmRlbiBzb2xsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICdKb3VybmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdTcHJhY2hlbi1WZXJ3YWx0dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJ0RpZXNlIEZBUSBtaXQgZWluZW0gYW5kZXJlbiBPYmpla3QgdmVya27DvHBmZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTGlzdGUgZGVyIFN0YXR1c3R5cGVuLCBkaWUgaW4gZGVyIEFnZW50ZW5vYmVyZmzDpGNoZSBnZW51dHp0IHdlcmRlbiBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdMaXN0ZSBkZXIgU3RhdHVzdHlwZW4sIGRpZSBpbiBkZXIgS3VuZGVub2JlcmZsw6RjaGUgZ2VudXR6dCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0xpc3RlIGRlciBTdGF0dXN0eXBlbiwgZGllIGluIGRlciDDtmZmZW50bGljaGVuIE9iZXJmbMOkY2hlIGdlbnV0enQgd2VyZGVuIGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01heGltYWxlIEFuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbSBGQVEtRXhwbG9yZXJsIGltIEFnZW50ZW4tSW50ZXJmYWNlIGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01heGltYWxlIEFuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbiBkZXIgRkFRLUV4cGxvcmVyIGltIEt1bmRlbi1JbnRlcmZhY2UgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01heGltYWxlIEFuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbiBkZXIgRkFRLUV4cGxvcmVyIGltIFB1YmxpYy1JbnRlcmZhY2UgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01heGltYWxlIEFuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbSBGQVEtSm91cm5hbCBpbSBBZ2VudGVuLUludGVyZmFjZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01heGltYWxlIEFuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbiBkZXIgRkFRLVN1Y2hlIGltIEFnZW50ZW4tSW50ZXJmYWNlIGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWF4aW1hbGUgQW56YWhsIHZvbiBGQVEtQXJ0aWtlbG4gZGllIGluIGRlciBGQVEtU3VjaGUgaW0gS3VuZGVuLUludGVyZmFjZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNYXhpbWFsZSBBbnphaGwgdm9uIEZBUS1BcnRpa2VsbiBkaWUgaW4gZGVyIEZBUS1TdWNoZSBpbSBQdWJsaWMtSW50ZXJmYWNlIGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWF4aW1hbGUgR3LDtsOfZSB2b24gVGl0ZWxuIGluIEjDpHVmaWctZ2VzdGVsbHRlbi1GcmFnZW4tQmVpdHLDpGdlbiB3ZWxjaGUgaW0gSMOkdWZpZy1nZXN0ZWxsdGUtRnJhZ2VuLUV4cGxvcmVyIGRlciBBZ2VudGVuw7xiZXJzaWNodCBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01heGltYWxlIEdyw7bDn2Ugdm9uIFRpdGVsbiBpbiBIw6R1ZmlnLWdlc3RlbGx0ZW4tRnJhZ2VuLUJlaXRyw6RnZW4gd2VsY2hlIGltIEjDpHVmaWctZ2VzdGVsbHRlLUZyYWdlbi1FeHBsb3JlciBkZXIgS3VuZGVuw7xiZXJzaWNodCBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNYXhpbWFsZSBHcsO2w59lIHZvbiBUaXRlbG4gaW4gSMOkdWZpZy1nZXN0ZWxsdGVuLUZyYWdlbi1CZWl0csOkZ2VuIHdlbGNoZSBpbSBIw6R1ZmlnLWdlc3RlbGx0ZS1GcmFnZW4tRXhwbG9yZXIgZGVyIMO2ZmZlbnRsaWNoZW4gw5xiZXJzaWNodCBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNYXhpbWFsZSBHcsO2w59lIHZvbiBUaXRlbG4gaW4gSMOkdWZpZy1nZXN0ZWxsdGVuLUZyYWdlbi1CZWl0csOkZ2VuIHdlbGNoZSBpbiBkZXIgSMOkdWZpZy1nZXN0ZWxsdGUtRnJhZ2VuLVN1Y2hlIGRlciBBZ2VudGVuw7xiZXJzaWNodCBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNYXhpbWFsZSBHcsO2w59lIHZvbiBUaXRlbG4gaW4gSMOkdWZpZy1nZXN0ZWxsdGVuLUZyYWdlbi1CZWl0csOkZ2VuIHdlbGNoZSBpbiBkZXIgSMOkdWZpZy1nZXN0ZWxsdGUtRnJhZ2VuLVN1Y2hlIGRlciBLdW5kZW7DvGJlcnNpY2h0IGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNYXhpbWFsZSBHcsO2w59lIHZvbiBUaXRlbG4gaW4gSMOkdWZpZy1nZXN0ZWxsdGVuLUZyYWdlbi1CZWl0csOkZ2VuIHdlbGNoZSBpbiBkZXIgSMOkdWZpZy1nZXN0ZWxsdGUtRnJhZ2VuLVN1Y2hlIGRlciDDtmZmZW50bGljaGVuIMOcYmVyc2ljaHQgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01heGltYWxlIEdyw7bDn2Ugdm9uIFRpdGVsbiBpbiBIw6R1ZmlnLWdlc3RlbGx0ZW4tRnJhZ2VuLUJlaXRyw6RnZW4gd2VsY2hlIGluIEZBUS1CZXJpY2h0ZW4gaW4gZGVyIEFnZW50ZW7DvGJlcnNpY2h0IGFuZ2V6ZWlndCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgRkFRIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vZHVsIHp1bSBHZW5lcmllcmVuIGRlcyBIVE1MICJPcGVuU2VhcmNoIiBQcm9maWxzIHp1ciBGQVEtU3VjaGUgaW4gZGVyIMO2ZmZlbnRsaWNoZW4gT2JlcmZsw6RjaGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9kdWwgenVtIEdlbmVyaWVyZW4gZGVzIEhUTUwgIk9wZW5TZWFyY2giIFByb2ZpbHMgenVyIEZBUS1TdWNoZSBpbiBkZXIgS3VuZGVub2JlcmZsw6RjaGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9CiAgICAgICAgJ01vZHVsIHp1bSBHZW5lcmllcmVuIGRlcyBIVE1MICJPcGVuU2VhcmNoIiBQcm9maWxzIHp1ciBGQVEtU3VjaGUgw7xiZXIgZGFzIEJyb3dzZXItU3VjaGZlbGQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ05ldWVyIEZBUS1BcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJ05ldWUgRkFRLUFydGlrZWwgYmVuw7Z0aWdlbiBlaW5lIEZyZWlnYWJlIHZvciBkZXIgVmVyw7ZmZmVudGxpY2h1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01heGltYWxlIEFuemFobCB2b24gRkFRLUFydGlrZWxuIGRpZSBpbSBGQVEtRXhwbG9yZXIgaW0gS3VuZGVuLUludGVyZmFjZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWF4aW1hbGUgQW56YWhsIHZvbiBGQVEtQXJ0aWtlbG4gZGllIGltIEZBUS1FeHBsb3JlciBpbiBkZXIgw7ZmZmVudGxpY2hlbiBPYmVyZmzDpGNoZSBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTZXR6dCBpbiBTdWNoZXJnZWJuaXNzZW4gZGllIEFuemFobCB2b24gRkFRLUFydGlrZWxuIHBybyBTZWl0ZSBpbiBkZXIgS3VuZGVub2JlcmZsw6RjaGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTZXR6dCBpbiBTdWNoZXJnZWJuaXNzZW4gZGllIEFuemFobCB2b24gRkFRLUFydGlrZWxuIHBybyBTZWl0ZSBpbiBkZXIgw7ZmZmVudGxpY2hlbiBPYmVyZmzDpGNoZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICdBbnphaGwgZGVyIHp1IGFuemVpZ2VuZGVuIEFydGlrZWwgaW4gbGV0enRlbiDDhG5kZXJ1bmdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdBbnphaGwgZGVyIGFuenV6ZWlnZW5kZW4gQXJ0aWtlbCBpbiB6dWxldHp0IGVyc3RlbGx0ZSBBcnRpa2VsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJ0FuemFobCBkZXIgYW56dXplaWdlbmRlbiBBcnRpa2VsIGltIFRvcCAxMCBGZWF0dXJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgZsO8ciBkaWUgU2VpdGVuIChpbiBkZW5lbiBGQVEtQXJ0aWtlbCBhbmdlemVpZ3Qgd2VyZGVuKSBmw7xyIGRpZSBTbWFsbC1BbnNpY2h0IGRlcyBGQVEtSm91cm5hbHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgZsO8ciBkaWUgU2VpdGVuIChpbiBkZW5lbiBGQVEtQXJ0aWtlbCBhbmdlemVpZ3Qgd2VyZGVuKSBmw7xyIGRpZSBTbWFsbC1BbnNpY2h0IGRlcyBGQVEtT3Zlcmlld3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAnRkFRIGRydWNrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnUXVldWUgZsO8ciBkaWUgRnJlaWdhYmUgdm9uIEZBUS1BcnRpa2Vsbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZXMgZm9yIHZvdGluZy4gS2V5IG11c3QgYmUgaW4gcGVyY2VudC4nfSA9ICdHZXdpY2h0dW5nIGbDvHIgZGllIEJld2VydHVuZy4gRGVyIEtleSBtdXNzIGluIFByb3plbnQgYW5nZWdlYmVuIHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJ0ZBUSBkdXJjaHN1Y2hlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICdTZXR6dCBkaWUgbWF4aW1hbGUgSMO2aGUgKGluIFBpeGVsbikgdm9uIElubGluZS1IVE1MLUZlbGRlciBpbiBBZ2VudEZBUVpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnU2V0enQgZGllIG1heGltYWxlIEjDtmhlIChpbiBQaXhlbG4pIHZvbiBJbmxpbmUtSFRNTC1GZWxkZXIgaW4gQ3VzdG9tZXJGQVFab29tICh1bmQgUHVibGljRkFRWm9vbSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJ1NldHp0IGRpZSBtYXhpbWFsZSBIw7ZoZSAoaW4gUGl4ZWxuKSB2b24gSW5saW5lLUhUTUwtRmVsZGVyIGluIEFnZW50RkFRWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICdTZXR6dCBkaWUgbWF4aW1hbGUgSMO2aGUgKGluIFBpeGVsbikgdm9uIElubGluZS1IVE1MLUZlbGRlciBpbiBDdXN0b21lckZBUVpvb20gKHVuZCBQdWJsaWNGQVFab29tKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICdaZWlndCBkaWUgU2NoYWx0ZmzDpGNoZSAiRkFRLUxpbmsgZWluZsO8Z2VuIiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmw7xyIMO2ZmZlbnRsaWNoZSBGQVEtQXJ0aWtlbCBhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgLyAiSW5zZXJ0IEZ1bGwgRkFRICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnWmVpZ3QgZGllIFNjaGFsdGZsw6RjaGUgIkZBUS1UZXh0ICYgTGluayBlaW5mw7xnZW4gLyBLb21wbGV0dGUgRkFRICYgTGluayBlaW5mw7xnZW4iIGluIEFnZW50RkFRWm9vbVNtYWxsIGbDvHIgw7ZmZmVudGxpY2hlIEZBUS1BcnRpa2VsIGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIC8gIkluc2VydCBGdWxsIEZBUSIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0KICAgICAgICAnWmVpZ3QgZGllIFNjaGFsdGZsw6RjaGUgIkZBUS1UZXh0IGVpbmbDvGdlbiAvIEtvbXBsZXR0ZSBGQVEgZWluZsO8Z2VuIiBpbiBBZ2VudEZBUVpvb21TbWFsbCBhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnSFRNTCBEYXJzdGVsbHVuZyBkZXIgRkFRLUFydGlrZWwgZWluc2NoYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJ0ZBUSBQZmFkIGFuemVpZ2VuIGphL25laW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICdBcnRpa2VsIGF1cyBTdWJrYXRlZ29yaWVuIGFuemVpZ2VuIGphL25laW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ0ludGVyZmFjZXMgaW4gZGVuZW4gZGFzIExhc3RDaGFuZ2UgRmVhdHVyZSBhbmdlemVpZ3Qgd2VyZGVuIHNvbGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdJbnRlcmZhY2VzIGluIGRlbmVuIGRhcyBMYXN0Q3JlYXRlIEZlYXR1cmUgYW5nZXplaWd0IHdlcmRlbiBzb2xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnSW50ZXJmYWNlcyBpbiBkZW5lbiBkYXMgVG9wIDEwIEZlYXR1cmUgYW5nZXplaWd0IHdlcmRlbiBzb2xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnSW50ZXJmYWNlcyBpbiBkZW5lbiBkYXMgVm90aW5nIEZlYXR1cmUgYW5nZXplaWd0IHdlcmRlbiBzb2xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGVpbmVuIExpbmsgaW4gZGVyIE1lbnUtTGVpc3RlIGluIGRlciBab29tLUFuc2ljaHQgaW0gQWdlbnRlbi1JbnRlcmZhY2UgYW4sIGRlciBlcyBlcm3DtmdsaWNodCBlaW5lbiBGQVEtQXJ0aWtlbCBtaXQgYW5kZXJlbiBPYmpla3RlbiB6dSB2ZXJrbsO8cGZlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBlaW5lbiBMaW5rIGluIGRlciBNZW51LUxlaXN0ZSBpbiBkZXIgWm9vbS1BbnNpY2h0IGltIEFnZW50ZW4tSW50ZXJmYWNlIGFuLCBkZXIgZXMgZXJtw7ZnbGljaHQgZWluZW4gRkFRLUFydGlrZWwgenUgbMO2c2NoZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgZWluZW4gTGluayBpbiBkZXIgTWVudS1MZWlzdGUgaW4gZGVyIFpvb20tQW5zaWNodCBpbSBBZ2VudGVuLUludGVyZmFjZSBhbiwgdW0gZGllIEhpc3RvcmllIGVpbmVzIEZBUS1BcnRpa2VscyBhbnp1emVpZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgZWluZW4gTGluayBpbiBkZXIgTWVudS1MZWlzdGUgaW4gZGVyIFpvb20tQW5zaWNodCBpbSBBZ2VudGVuLUludGVyZmFjZSBhbiwgZGVyIGVzIGVybcO2Z2xpY2h0IGVpbmVuIEZBUS1BcnRpa2VsIHp1IGJlYXJiZWl0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBlaW5lbiBMaW5rIGluIGRlciBNZW51LUxlaXN0ZSBpbiBkZXIgWm9vbS1BbnNpY2h0IGltIEFnZW50ZW4tSW50ZXJmYWNlIGFuLCBkZXIgZXMgZXJtw7ZnbGljaHQgenVyIHZvcmhlcmlnZW4gU2VpdGUgenVyw7xjayB6dSBnZWhlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBlaW5lbiBMaW5rIGluIGRlciBNZW51LUxlaXN0ZSBpbiBkZXIgWm9vbS1BbnNpY2h0IGltIEFnZW50ZW4tSW50ZXJmYWNlIGFuLCBkZXIgZXMgZXJtw7ZnbGljaHQgZWluZW4gRkFRLUFydGlrZWwgenUgZHJ1Y2tlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0KICAgICAgICAnRGVyIElkZW50aWZpa2F0b3IgZsO8ciBlaW5lbiBGQVEtQXJ0aWtlbCwgei4gQi4gRkFRIywgS0IjLCBNeUZBUSMuIERlciBTdGFuZGFyZHdlcnQgaXN0IEZBUSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdGQVFcJy1PYmpla3RlIG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBhbmRlcmVuIFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0ZBUVwnLU9iamVrdGUgbWl0IGRlbSBMaW5rdHlwIFwnUGFyZW50Q2hpbGRcJyBtaXQgYW5kZXJlbiBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnRkFRXCctT2JqZWt0ZSBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgYW5kZXJlbiBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdGQVFcJy1PYmpla3RlIG1pdCBkZW0gTGlua3R5cCBcJ1BhcmVudENoaWxkXCcgbWl0IGFuZGVyZW4gXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0JvZHkgZGVzIFRpY2tldHMgenVyIEZyZWlnYWJlIGVpbmVzIEZBUS1BcnRpa2Vscy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0JldHJlZmYgZGVzIFRpY2tldHMgenVyIEZyZWlnYWJlIGVpbmVzIEZBUS1BcnRpa2Vscy4nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZXNfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncMO6YmxpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICdleHRlcm5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdOw7ptZXJvIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdVbHRpbW9zIGFydMOtY3Vsb3MgbW9kaWZpY2Fkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAnVWx0aW1vcyBhcnTDrWN1bG9zIGNyZWFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ1RvcCAxMCBkZSBhcnTDrWN1bG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAnU3ViY2F0ZWdvcsOtYSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ8KhTm8gc2UgaGEgc2VsZWNjaW9uYWRvIG5pbmd1bmEgcHVudHVhY2nDs24hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAnRXhwbG9yYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdww7pibGljbyAodG9kb3MpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdleHRlcm5vIChjbGllbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnaW50ZXJubyAoYWdlbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdEw61hIGRlIGluaWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBtb250aCd9ID0gJ01lcyBkZSBpbmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ0HDsW8gZGUgaW5pY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdEw61hIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTWVzIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICdBw7FvIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnwqFHcmFjaWFzIHBvciBzdSB2b3RvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ8KhVXN0ZWQgeWEgaGEgdm90YWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJ0ltcHJpbWlyIGVsIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnQXJ0w61jdWxvcyBGQVEgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnTDrWN1bG9zIEZBUSAobnVldm9zKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0w61jdWxvcyBGQVEgKG1vZGlmaWNhZG9zIHJlY2llbnRlbWVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0FjdHVhbGl6YWRhIGNhdGVnb3LDrWEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdBw7FhZGlkYSBjYXRlZ29yw61hIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfCoUxhcyBjYXRlZ29yw61hcyBkZWJlIHRlbmVyIG5vbWJyZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ0VzdGEgY2F0ZWdvcsOtYSB5YSBleGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJ0HDsWFkaWRvIGlkaW9tYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnQWN0dWFsaXphZG8gaWRpb21hIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnRWwgbm9tYnJlIGVzIGltcHJlc2NpbmRpYmxlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0VzdGUgaWRpb21hIHlhIGV4aXN0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ltcHRvbSd9ID0gJ1PDrW50b21hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvbHV0aW9uJ30gPSAnU29sdWNpw7NuICc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ0HDsWFkaXIgYXJ0w61jdWxvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICdQYWxhYnJhcyBjbGF2ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICdTZSByZXF1aWVyZSB1bmEgY2F0ZWdvcsOtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdBcHJvYmFjacOzbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBjYXRlZ29yw61hcyBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAnQcOxYWRpciBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDYXRlZ29yeSd9ID0gJ0JvcnJhciBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnQWNlcHRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdBw7FhZGlyIGNhdGVnb3LDrWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ0VkaXRhciBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAnUG9yIGZhdm9yLCBzZWxlY2Npb25lIGFsIG1lbm9zIHVuIGdydXBvIGRlIHBlcm1pc29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICdHcnVwb3MgZGUgYWdlbnRlcyBxdWUgcHVlZGVuIGFjY2VkZXIgYSBsb3MgYXJ0w61jdWxvcyBkZSBlc3RhIGNhdGVnb3LDrWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ1NlIG1vc3RyYXLDoSBjb21vIGNvbWVudGFyaW8gZW4gZWwgZXhwbG9yYWRvci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ8K/U2VndXJvIHF1ZSBkZXNlYSBib3JyYXIgZXN0YSBjYXRlZ29yw61hPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9CiAgICAgICAgJ05vIHB1ZWRlIGJvcnJhciBlc3RhIGNhdGVnb3LDrWEuIEVzdMOhIHNpZW5kbyB1c2FkYSBwb3IgYWwgbWVub3MgdW4gYXJ0w61jdWxvIEZBUSB5L28gZXMgcGFkcmUgZGUgYWwgbWVub3Mgb3RyYSBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnRXN0YSBjYXRlZ29yw61hIGVzdMOhIHNpZW5kbyB1c2FkYSBwb3IgbG9zIHNpZ3VpZW50ZXMgYXJ0w61jdWxvcyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnRXN0YSBjYXRlZ29yw61hIGVzIHBhZHJlIGRlIGxhcyBzaWd1aWVudGVzIHN1YmNhdGVnb3LDrWFzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJ8K/U2VndXJvIHF1ZSBkZXNlYSBib3JyYXIgZXN0ZSBhcnTDrWN1bG8gRkFRPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICdGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ0V4cGxvcmFkb3IgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ0LDunNxdWVkYSBSw6FwaWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICdFc3RhIHBlcm1pdGlkbyBsb3MgY29tb2RpbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJ0LDunNxdWVkYSBBdmFuemFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yaWVzJ30gPSAnU3ViY2F0ZWdvcsOtYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnQXJ0w61jdWxvcyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBzdWJjYXRlZ29yw61hcy4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZid9ID0gJ0hpc3RvcmlhbCBkZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBkYXRvcyBlbiBsYSBCaXTDoWNvcmEgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7NuIGRlIElkaW9tYXMgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAnVXRpbGljZSBlc3RhIGZ1bmNpb25hbGlkYWQgc2kgZGVzZWEgdHJhYmFqYXIgY29uIG3Dumx0aXBsZXMgaWRpb21hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnQcOxYWRpciBJZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAnQm9ycmFyIElkaW9tYSAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICdBw7FhZGlyIElkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnRWRpdGFyIElkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnwr9TZWd1cm8gcXVlIGRlc2VhIGJvcnJhciBlc3RlIGlkaW9tYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAnTm8gcHVlZGUgYm9ycmFyIGVzdGUgaWRpb21hLiBFc3TDoSBzaWVuZG8gdXNhZG8gcG9yIGFsIG1lbm9zIHVuIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdFc3RlIGlkaW9tYSBlc3RhIHNpZW5kbyB1c2FkbyBwb3IgbG9zIHNpZ3VpZW50ZXMgQXJ0w61jdWxvcyBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdBanVzdGVzIGRlIENvbnRleHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ0FydMOtY3Vsb3MgRkFRIHBvciBww6FnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ05vIHNlIGVuY29udHJhcm9uIGRhdG9zIGRlIEZBUS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3JkJ30gPSAnUGFsYWJyYSBjbGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIChlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjApJ30gPSAnVm90YSAoZWptLiBJZ3VhbCBhIDEwIG8gbWF5b3IgYSA2MCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSAoZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUpJ30gPSAnQ2FsaWZpY2EgKEVqbS4gSWd1YWwgYSAyNSUgbyBtYXlvciBhIDc1JSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92ZWQnfSA9ICdBcHJvYmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdVbHRpbW8gY2FtYmlvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ1RpZW1wbyBkZSBDcmVhY2nDs24gZGUgQXJ0w61jdWxvcyBGQVEgKGFudGVzIC8gZGVzcHXDqXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ1RpZW1wbyBkZSBDcmVhY2nDs24gZGVsIEFydGljdWxvIEZBUSAoZW50cmUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAnVGllbXBvIGRlIEFjdHVhbGl6YWNpw7NuIGRlbCBBcnRpY3VsbyBGQVEgKGFudGVzL2Rlc3B1w6lzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmV0d2VlbiknfSA9ICdUaWVtcG8gZGUgQWN0dWFsaXphY2nDs24gZGVsIEFydGljdWxvIEZBUSAoZW50cmUpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ1RleHRvIGNvbXBsZXRvIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJ0LDunNxdWVkYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZmlsZSBTZWxlY3Rpb24nfSA9ICdTZWxlY2Npw7NuIGRlIHBlcmZpbCAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJ1ZvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJ1NpbiBjb25maWd1cmFjacOzbiBkZSB2b3RhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgdm90ZXMnfSA9ICdWb3RvcyBlc3BlY8OtZmljb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwJ30gPSAnRWouIElndWFsIGEgMTAgbyBtYXlvciBhIDYwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUnfSA9ICdWYWxvcmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNldHRpbmdzJ30gPSAnU2luIGNvbmZpZ3VyYWNpw7NuIGRlIHZhbG9yYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHJhdGUnfSA9ICdWYWxvcmFjacOzbiBlc3BlY8OtZmljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSd9ID0gJ2VqbTogSWd1YWwgYSAyNSUgbyBtYXlvciBxdWUgNzUlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAnVGllbXBvIGRlIENyZWFjacOzbiBkZWwgQXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyBkYXRlJ30gPSAnRmVjaGEgZXNwZWPDrWZpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSByYW5nZSd9ID0gJ1JhbmdvIGRlIGZlY2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lJ30gPSAnVGllbXBvIGRlIEFjdHVhbGl6YWNpw7NuIGRlbCBBcnTDrWN1bG8gRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnUHVudHVhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICdkZSA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnVm90b3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnwqFObyBzZSBlbmNvbnRyw7MgbmluZ8O6biB2b3RvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnTm8gc2UgZW5jb250csOzIG5pbmfDum4gdm90by4gU2VhIGVsIHByaW1lcm8gZW4gdmFsb3JhciBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJ0Rlc2NhcmdhciBBZGp1bnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnUGFyYSBhYnJpciBsaW5rcyBlbiBsb3Mgc2lndWllbnRlcyBibG9xdWVzIGRlIGRlc2NyaXBjacOzbiwgcG9kcmlhIG5lY2VzaXRhciBwcmVzaW9uYXIgbGEgdGVjbGFzIEN0cmwsIENtZCBvIFNoaWZ0IG1pZW50cmFzIHByZXNpb25hIGVsIGxpbmsgKGRlcGVuZGUgZGVsIGJyb3dzZXIgeSBlbCBTTyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPQogICAgICAgICfCv0PDs21vIGRlIMO6dGlsIGZ1ZSBlc3RlIGFydMOtY3Vsbz8gUG9yIGZhdm9yLCBkw6lub3Mgc3UgcHVudHVhY2nDs24geSBheXVkZSBhIG1lam9yYXIgbGEgYmFzZSBkZSBkYXRvcyBkZSBGQVEuIEdyYWNpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAncG9jbyDDunRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICdtdXkgw7p0aWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIHRpdGxlIHRvIGFydGljbGUgc3ViamVjdCd9ID0gJ0FncmVnYXIgdGl0dWxvIGRlIEZBUSBhIGFzdW50byBkZWwgYXJ0w61jdWxvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCd9ID0gJ0luc2VydGFyIFRleHRvIGRlIGxhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEnfSA9ICdJbnNlcnRhciBGQVEgY29tcGxldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBMaW5rJ30gPSAnSW5zZXJ0YXIgRW5sYWNlIGEgbGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCAmIExpbmsnfSA9ICdJbnNlcnRhciB0ZXh0byB5IEVubGFjZSBhIGxhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnSW5zZXJ0YXIgRkFRIGNvbXBsZXRvIHkgZW5sYWNlJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnTm8gc2UgZW5jb250cmFyb24gYXJ0w61jdWxvcyBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ0LDunNxdWVkYSBkZSB0ZXh0byBjb21wbGV0byBlbiBhcnTDrWN1bG9zIEZBUSAoZWo6ICJKb2huKm4iIG8gIldpbGwqIiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSByZXN0cmljdGlvbnMnfSA9ICdSZXN0cmljY2lvbmVzIGRlIHZvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLid9ID0gJ1PDs2xvIGFydMOtY3Vsb3MgRkFRIGNvbiB2b3Rvcy4uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIHJlc3RyaWN0aW9ucyd9ID0gJ1Jlc3RyaWNjaW9uZXMgZGUgdmFsb3JhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCByYXRlLi4uJ30gPSAnU29sbyBhcnTDrWN1bG9zIEZBUSBjb24gdmFsb3JhY2nDs24uLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCd9ID0gJ1PDs2xvIEFydMOtY3Vsb3MgRkFRIGNyZWFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCBiZXR3ZWVuJ30gPSAnU8OzbG8gQXJ0w61jdWxvcyBGQVEgY3JlYWRvcyBlbnRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICfCv1BlcmZpbCBkZSBiw7pzcXVlZGEgY29tbyBwbGFudGlsbGE/JzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgTnVtYmVyJ30gPSAnTsO6bWVybyBkZSBBcnTDrWN1bG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICdCdXNjYXIgYXJ0w61jdWxvcyBjb24gbGEgcGFsYWJyYSBjbGF2ZSc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICdQw7pibGljbyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnUmVncmVzYXIgYWwgRXhwbG9yYWRvciBkZSBGQVEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRSm91cm5hbC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdCaXTDoWNvcmEgZGUgRkFRJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHVwZGF0ZSd9ID0gJ1VsdGltYSBhY3R1YWxpemFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRHluYW1pYyBGaWVsZHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0ZBUS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBhcnRpY2xlIGlzIGVtcHR5ISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9CiAgICAgICAgJ0ZpbHRybyBwYXJhIGVsIEhUTUwgcmVzdWx0YW50ZSBwYXJhIGHDsWFkaXIgZW5sYWNlcyBhIHVuYSBjYWRlbmEgZGV0ZXJtaW5hZGEuIEVsIGVsZW1lbnRvIEltYWdlbiBjb250ZW1wbGEgZG9zIHRpcG9zIGRlIHJlZ2lzdHJvcy4gRWwgcHJpbWVybyBlcyBlbCBub21icmUgZGUgdW5hIGltYWdlbiAocG9yIGVqZW1wbG8gZmFxLnBuZykuIEVuIGVzdGUgY2FzbyBzZSB1dGlsaXphcsOhIGxhIHJ1dGEgZGUgaW3DoWdlbmVzIGRlIE9UUlMuIExhIHNlZ3VuZGEgcG9zaWJpbGlkYWQgZXMgaW5zZXJ0YXIgZWwgZW5sYWNlIGEgbGEgaW1hZ2VuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDb2xvciBDU1MgcGFyYSBlbCByZXN1bHRhZG8gZGUgbGEgdm90YWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnVGllbXBvIGRlIHZpZGEgZGUgbGEgY2FjaMOpIHBhcmEgbG9zIGVsZW1lbnRvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBsYXMgQ2F0ZWdvcsOtYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnTsO6bWVybyBkZSBkZWNpbWFsZXMgcGFyYSBlbCByZXN1bHRhZG8gZGUgbGEgdm90YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICdOb21icmUgcHJlZGV0ZXJtaW5hZG8gZGUgbGEgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnSWRpb21hIHBvciBvbWlzacOzbiBwYXJhIGxvcyBhcnTDrWN1bG9zIEZBUSBlbiBtb2RvIGlkaW9tYSDDum5pY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBtYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duLid9ID0KICAgICAgICAnTcOheGltbyB0YW1hw7FvIHBvciBkZWZlY3RvIGEgbW9zdHJhciBkZSBsb3MgdMOtdHVsb3MgZW4gdW4gYXJ0w61jdWxvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0KICAgICAgICAnUHJpb3JpZGFkIHBvciBvbWlzacOzbiBkZSBsb3MgdGlja2V0cyBwYXJhIGFwcm9iYWNpw7NuIGRlIGxvcyBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJ0VzdGFkbyBwb3Igb21pc2nDs24gcGFyYSBsb3MgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdFc3RhZG8gcG9yIG9taXNpw7NuIGRlIGxvcyB0aWNrZXRzIHBhcmEgYXByb2JhY2nDs24gZGUgbG9zIGFydMOtY3Vsb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdUaXBvIHBvciBkZWZlY3RvIGRlIGxvcyB0aWNrZXRzIHBhcmEgYXByb2JhY2nDs24gZGUgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPQogICAgICAgICdWYWxvciBwb3Igb21pc2nDs24gcGFyYSBlbCBwYXLDoW1ldHJvICJBY3Rpb24iIHBhcmEgbGEgaW50ZXJmYXogcMO6YmxpY2EuIEVsIHBhcsOhbWV0cm8gIkFjdGlvbiIgc2UgdXNhIGVuIGxvcyAic2NyaXB0cyIgZGVsIHNpc3RlbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBpZiB0aGUgRkFRIHRpdGxlIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gYXJ0aWNsZSBzdWJqZWN0Lid9ID0KICAgICAgICAnRGVmaW5lIHNpIGVsIHTDrXR1bG8gZGVsIEZBUSBkZWJlIGVzdGFyIGNvbmNhdGVuYWRvIGFsIGFzdW50byBkZWwgYXJ0w61jdWxvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPQogICAgICAgICdEZWZpbmUgdW4gbcOzZHVsbyBkZSB2aXN0YSBnZW5lcmFsIHBhcmEgbW9zdHJhciBsYSB2aXN0YSBwZXF1ZcOxYSBkZSBsYSBiaXTDoWNvcmEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgbGlzdC4nfSA9CiAgICAgICAgJ0RlZmluZSB1biBtw7NkdWxvIGRlIHZpc3RhIHByZXZpYSBwYXJhIG1vc3RyYXIgbGEgdmlzdGEgcGVxdWXDsWEgZGUgdW4gbGlzdGFkbyBkZSBGQVFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gdW5hIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBhdHJpYnV0byBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxvcyBhcnTDrWN1bG9zIEZBUSBlbiB1bmEgYsO6c3F1ZWRhIGRlIEZBUSBlbiBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gdW5hIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIGVsIGF0cmlidXRvIHBvciBvbWlzacOzbiBwYXJhIG9yZGVuYXIgbG9zIGFydMOtY3Vsb3MgRkFRIGVuIGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnREVmaW5lIGVsIGF0cmlidXRvIHBvciBvbWlzacOzbiBwYXJhIG9yZGVuYXIgbGFzIEZBUSBlbiBlbCBleHBsb3JhZG9yIGRlIEZBUSBkZSBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIGVsIGF0cmlidXRvIGRlIEZBUSBxdWUgc2UgdXNhcsOhIHBvciBvbWlzacOzbiBwYXJhIG9yZGVuYXIgbGFzIEZBUSBlbiBlbCBleHBsb3JhZG9yIGRlIEZBUSBkZSBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxhcyBGQVEgZW4gbG9zIHJlc3VsdGFkb3MgZGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBMb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRGVmaW5lIGVsIG9yZGVuIHBvciBvbWlzacOzbiBkZSBsYXMgRkFRIGVuIGxvcyByZXN1bHRhZG9zIGRlbCBleHBsb3JhZG9yIGRlIEZBUSBkZSBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4gQXJyaWJhOiBsb3MgbcOhcyBhbnRpZ3VvcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4gQWJham86IGxvcyBtw6FzIHJlY2llbnRlcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRGVmaW5lIGVsIG9yZGVuIHBvciBvbWlzacOzbiBkZSBsYXMgRkFRIGVuIGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IHDDumJsaWNhLiBBcnJpYmE6IGxvcyBtw6FzIGFudGlndW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLiBBYmFqbzogbG9zIG3DoXMgcmVjaWVudGVzIGVuIGxhIHBhcnRlIHN1cGVyaW9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBvcmRlbiBwb3Igb21pc2nDs24gZGUgbG9zIHJlc3VsdGFkb3MgZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZhY2UgZGVsIGNsaWVudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3Mgw7psdGltb3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYWNlIHDDumJsaWNhLiBBcnJpYmE6IGxvcyBtw6FzIGFudGlndW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLiBBYmFqbzogbG9zIMO6bHRpbW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBhdHJpYnV0byBkZSBiw7pzcXVlZGEgZGUgRkFRIG1vc3RyYWRvIHBvciBkZWZlY3RvIGVuIGxhIHBhbnRhbGxhIGRlIGLDunNxdWVkYSBkZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGluZm9ybWF0aW9uIHRvIGJlIGluc2VydGVkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4gIkZ1bGwgRkFRIiBpbmNsdWRlcyB0ZXh0LCBhdHRhY2htZW50cyBhbmQgaW5saW5lIGltYWdlcy4nfSA9CiAgICAgICAgJ0RlZmluZSBsYSBpbmZvcm1hY2nDs24gYSBpbnNlcnRhciBlbiB1biBGQVEgYmFzYWRvIGVuIHVuIHRpY2tldC4gIkZBUSBjb21wbGV0byIgaW5jbHV5ZSB0ZXh0bywgYWRqdW50b3MgZSBpbcOhZ2VuZXMgaW5jcnVzdGFkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgbGFzIGNvbHVtbmFzIHF1ZSBzZSBtb3N0cmFyw6FuIGVuIGVsIEV4cGxvcmFkb3IgZGUgRkFRLiBFc3RhIG9wY2nDs24gbm8gdGllbmUgZWZlY3RvcyBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIGNvbHVtbmFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBsYXMgY29sdW1uYXMgcXVlIHNlIG1vc3RyYXLDoW4gZW4gbGEgYml0w6Fjb3JhIGRlIEZBUS4gRXN0YSBvcGNpw7NuIG5vIHRpZW5lIGVmZWN0b3MgZW4gbGEgcG9zaWNpw7NuIGRlIGxhcyBjb2x1bW5hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBsYXMgY29sdW1uYXMgcXVlIHNlIG1vc3RyYXLDoW4gZW4gbGEgYsO6c3F1ZWRhIGRlIEZBUS4gRXN0YSBvcGNpw7NuIG5vIHRpZW5lIGVmZWN0b3MgZW4gbGEgcG9zaWNpw7NuIGRlIGxhcyBjb2x1bW5hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pY2nDs24gZGVsIGNhbXBvIMKrdGV4dG8gbGlicmXCuyBwYXJhIGxvcyBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnQm9ycmFyIGVzdGUgYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc21hbGwgZm9ybWF0IG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0VkaXRhciBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ0hhYmlsaXRhciBtw7psdGlwbGVzIGlkaW9tYXMgZW4gZWwgbcOzZHVsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdIYWJpbGl0YXIgZWwgbWVjYW5pc21vIGRlIHZvdGFjacOzbiBlbiBlbCBtw7NkdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTMOtbWl0ZSBwYXJhIGxhIHZpc3RhIGdlbmVyYWwgwqtwZXF1ZcOxYcK7IGRlIGxhIEJpdMOhY29yYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMw61taXRlIHBhcmEgbGEgdmlzdGEgZ2VuZXJhbCDCq3BlcXVlw7FhwrsgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0zDrW1pdGUgZGUgRkFRIHBvciBww6FnaW5hIHBhcmEgbGEgdmlzdGEgZ2VuZXJhbCDCq3BlcXVlw7FhwrsgZGUgbGEgQml0w6Fjb3JhIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnTMOtbWl0ZSBkZSBGQVEgcG9yIHDDoWdpbmEgcGFyYSBsYSB2aXN0YSBnZW5lcmFsIMKrcGVxdWXDsWHCuyBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0VuY2FtaW5hZG9yIHBhcmEgbGEgYsO6c3F1ZWRhIGRlIEZBUSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJ8OBcmVhLUZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDQnfSA9ICdDYW1wbzQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ1J30gPSAnQ2FtcG81JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gIkZyb250ZW5kIiBlbiBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnR3J1cG8gcGFyYSBsYSBhcHJvYmFjacOzbiBkZSBsb3MgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICdIaXN0b3JpYSBkZSBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJ0luY2x1aXIgY2FtcG9zIGludGVybm9zIGVuIGxvcyB0aWNrZXRzIGJhc2Fkb3MgZW4gdW4gYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJ0luY2x1aXIgZWwgbm9tYnJlIGRlIGNhZGEgY2FtcG8gZW4gbG9zIHRpY2tldHMgYmFzYWRvcyBlbiB1biBhcnTDrWN1bG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrIHNlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICdCaXTDoWNvcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7NuIGRlIElkaW9tYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnRW5sYXphciBvdHJvIG9iamVjdG8gYSBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gbG9zIHJlc3VsdGFkb3MgZGVsIGV4cGxvcmFkb3IgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gbG9zIHJlc3VsdGFkb3MgZGVsIGV4cGxvcmFkb3IgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBlbiBsb3MgcmVzdWx0YWRvcyBkZWwgZXhwbG9yYWRvciBGQVEgZGUgbGEgaW50ZXJmYXogcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGxhIGJpdMOhY29yYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGNvbW8gcmVzdWx0YWRvIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGNvbW8gcmVzdWx0YWRvIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgY29tbyByZXN1bHRhZG8gZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgRkFRIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPQogICAgICAgICdNw7NkdWxvIHBhcmEgZ2VuZXJhciBlbCBwZXJmaWwgaHRtbCAiT3BlblNlYXJjaCIgcGFyYSBiw7pzcXVlZGFzIGNvcnRhcyBkZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ051ZXZvIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAnTG9zIG51ZXZvcyBhcnTDrWN1bG9zIEZBUSByZXF1aWVyZW4gYXByb2JhY2nDs24gYW50ZXMgZGUgcHVibGljYXJzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOw7ptZXJvIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBlbiBlbCBleHBsb3JhZG9yIGRlIEZBUSBkZSBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gY2FkYSBww6FnaW5hIGRlIGxvcyByZXN1bHRhZG9zIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOw7ptZXJvIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBlbiBjYWRhIHDDoWdpbmEgZGUgbG9zIHJlc3VsdGFkb3MgZGUgdW5hIGLDunNxdWVkYSBlbiBsYSBpbnRlcmZheiBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICdOw7ptZXJvIGRlIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gw7psdGltb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdOw7ptZXJvIGRlIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gw7psdGltb3MgY3JlYWRvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICdOw7ptZXJvIGRlIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gZWwgVG9wIDEwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBkZSBsYXMgcMOhZ2luYXMgKGVuIGxhcyBxdWUgc2UgbXVlc3RyYW4gbG9zIGVsZW1lbnRvcyBGQVEpIGRlIGxhIHZpc3RhIGdlbmVyYWwgcGVxdWXDsWEgZGUgbGEgYml0w6Fjb3JhIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIGRlIGxhcyBww6FnaW5hcyAoZW4gbGFzIHF1ZSBzZSBtdWVzdHJhbiBsb3MgZWxlbWVudG9zIEZBUSkgZGUgbGEgdmlzdGEgZ2VuZXJhbCBkZSBGQVEgcGVxdWXDsWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAnSW1wcmltaXIgZXN0YSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnRmlsYSBwYXJhIGxhIGFwcm9iYWNpw7NuIGRlIGxvcyBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZXMgZm9yIHZvdGluZy4gS2V5IG11c3QgYmUgaW4gcGVyY2VudC4nfSA9ICdQb25kZXJhY2nDs24gcGFyYSBsYSB2b3RhY2nDs24uIExhIGNsYXZlIGRlYmUgZXhwcmVzYXJzZSBlbiBwb3JjZW50YWplLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnQsO6c3F1ZWRhIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICdFc3RhYmxlY2VyIGxhIGFsdHVyYSBwcmVkZXRlcm1pbmFkYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEFnZW50RkFRWm9vbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJ0VzdGFibGVjZXIgbGEgYWx0dXJhIHByZWRldGVybWluYWRhIChlbiBww614ZWxlcykgZGUgbG9zIGNhbXBvcyBIVE1MIMKraW5saW5lwrsgZGUgQ3VzdG9tZXJGQVFab29tICh5IFB1YmxpY0ZBUVpvb20pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICdFc3RhYmxlY2VyIGxhIGFsdHVyYSBtw6F4aW1hIChlbiBww614ZWxlcykgZGUgbG9zIGNhbXBvcyBIVE1MIMKraW5saW5lwrsgZGUgQWdlbnRGQVFab29tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnRXN0YWJsZWNlciBsYSBhbHR1cmEgbcOheGltYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEN1c3RvbWVyRkFRWm9vbSAoeSBQdWJsaWNGQVFab29tKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICdNb3N0cmFyIGJvdMOzbiDCq0luc2VydGFyIGVubGFjZSBhIEZBUcK7IGVuIEFnZW50RkFRWm9vbVNtYWxsIHBhcmEgbG9zIGFydMOtY3Vsb3MgRkFRIHDDumJsaWNvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgLyAiSW5zZXJ0IEZ1bGwgRkFRICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnwr9Nb3N0cmFyIGNvbnRlbmlkbyBIVE1MIGVuIGxvcyBhcnTDrWN1bG9zIEZBUT8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJ8K/TW9zdHJhciBsYSBydXRhIGRlIGxhIEZBUT8gc8OtL25vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnwr9Nb3N0cmFyIGxvcyBlbGVtZW50b3MgZGUgbGFzIHN1YmNhdGVnb3LDrWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIGxvcyDDumx0aW1vcyBhcnTDrWN1bG9zIGFjdHVhbGl6YWRvcyBlbiBsYXMgaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIGxvcyDDumx0aW1vcyBhcnTDrWN1bG9zIGNyZWFkb3MgZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBsb3MgYXJ0w61jdWxvcyBUb3AgMTAgZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBsYSB2b3RhY2nDs24gZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHF1ZSBwZXJtaXRlIGVubGF6YXIgYSB1biBhcnTDrWN1bG8gRkFRIGNvbiBvdHJvIG9iamV0byBlbiBzdSB2aXN0YSBhbXBsaWFkYSBkZSBlc2EgRkFRIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biBlbmxhY2UgZW4gZWwgbWVuw7ogcXVlIHBlcm1pdGUgYm9ycmFyIHVuIGFydMOtY3VsbyBGQVEgZW4gbGEgdmlzdGEgYW1wbGlhZGEgZGUgZXNhIEZBUSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgYWNjZWRlciBhbCBoaXN0b3JpYWwgZGUgdW4gYXJ0w61jdWxvIEZBUSBlbiBzdSB2aXN0YSBhbXBsaWFkYSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biBlbmxhY2UgZW4gZWwgbWVuw7ogcGFyYSBlZGl0YXIgdW4gYXJ0w61jdWxvIEZBUSBlbiBzdSB2aXN0YSBhbXBsaWFkYSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biBlbmxhY2UgZW4gZWwgbWVuw7ogcGFyYSByZXRyb2NlZGVyIGVuIGxhIHZpc3RhIGFtcGxpYWRhIGRlIEZBUSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgaW1wcmltaXIgdW4gYXJ0w61jdWxvIEZBUSBlbiBzdSB2aXN0YSBhbXBsaWFkYSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPQogICAgICAgICdFbCBpZGVudGlmaWNhZG9yIHBhcmEgdW5hIEZBUSwgcG9yIGVqZW1wbG8gRkFRIywgS0IjLCBNaUZBUSMuIEZBUSMgZXMgbGEgb3BjacOzbiBwb3Igb21pc2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBhanVzdGUgZGVmaW5lIHF1ZSB1biBvYmpldG8gwqtGQVHCuyBwdWVkZSBlbmxhemFyc2UgY29uIG90cm9zIG9iamV0b3MgwqtGQVHCuyB1dGlsaXphbmRvIGVsIHRpcG8gZGUgZW5sYWNlIMKrTm9ybWFswrsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBhanVzdGUgZGVmaW5lIHF1ZSB1biBvYmpldG8gwqtGQVHCuyBwdWVkZSBlbmxhemFyc2UgY29uIG90cm9zIG9iamV0b3MgwqtGQVHCuyB1dGlsaXphbmRvIGVsIHRpcG8gZGUgZW5sYWNlIMKrUGFyZW50Q2hpbGTCuy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBhanVzdGUgZGVmaW5lIHF1ZSB1biBvYmpldG8gwqtGQVHCuyBwdWVkZSBlbmxhemFyc2UgY29uIG90cm9zIG9iamV0b3MgwqtUaWNrZXTCuyB1dGlsaXphbmRvIGVsIHRpcG8gZGUgZW5sYWNlIMKrTm9ybWFswrsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBhanVzdGUgZGVmaW5lIHF1ZSB1biBvYmpldG8gwqtGQVHCuyBwdWVkZSBlbmxhemFyc2UgY29uIG90cm9zIG9iamV0b3MgwqtUaWNrZXTCuyB1dGlsaXphbmRvIGVsIHRpcG8gZGUgZW5sYWNlIMKrUGFyZW50Q2hpbGTCuy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0N1ZXJwbyBkZWwgdGlja2V0IHBhcmEgYXByb2JhY2nDs24gZGUgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdBc3VudG8gZGVsIHRpY2tldCBwYXJhIGFwcm9iYWNpw7NuIGRlIGFydMOtY3Vsb3MgRkFRLic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZXNfTVhfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncMO6YmxpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICdleHRlcm5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdOw7ptZXJvIGRlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAnw5psdGltb3MgYXJ0w61jdWxvcyBGQVEgbW9kaWZpY2Fkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAnw5psdGltb3MgYXJ0w61jdWxvcyBGQVEgY3JlYWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnVG9wIDEwIGRlIGFydMOtY3Vsb3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAnU3ViY2F0ZWdvcsOtYSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ8KhTm8gc2UgaGEgc2VsZWNjaW9uYWRvIG5pbmd1bmEgcHVudHVhY2nDs24hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAnRXhwbG9yYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdww7pibGljbyAodG9kb3MpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdleHRlcm5vIChjbGllbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnaW50ZXJubyAoYWdlbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdEw61hIGRlIGluaWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBtb250aCd9ID0gJ01lcyBkZSBpbmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ0HDsW8gZGUgaW5pY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdEw61hIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTWVzIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICdBw7FvIGRlIGZpbmFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnwqFHcmFjaWFzIHBvciBzdSB2b3RvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ8KhVXN0ZWQgeWEgaGEgdm90YWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJ0ltcHJpbWlyIGVsIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnQXJ0w61jdWxvcyBGQVEgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnTDrWN1bG9zIEZBUSAobnVldm9zKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0w61jdWxvcyBGQVEgKG1vZGlmaWNhZG9zIHJlY2llbnRlbWVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0FjdHVhbGl6YWRhIGNhdGVnb3LDrWEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdBw7FhZGlkYSBjYXRlZ29yw61hIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfCoUxhcyBjYXRlZ29yw61hcyBkZWJlIHRlbmVyIG5vbWJyZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ0VzdGEgY2F0ZWdvcsOtYSB5YSBleGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJ0HDsWFkaWRvIGlkaW9tYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnQWN0dWFsaXphZG8gaWRpb21hIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnRWwgbm9tYnJlIGVzIGltcHJlc2NpbmRpYmxlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0VzdGUgaWRpb21hIHlhIGV4aXN0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ltcHRvbSd9ID0gJ1PDrW50b21hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvbHV0aW9uJ30gPSAnU29sdWNpw7NuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnQcOxYWRpciBhcnTDrWN1bG8gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3Jkcyd9ID0gJ1BhbGFicmFzIENsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnU2UgcmVxdWllcmUgdW5hIGNhdGVnb3LDrWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnQXByb2JhY2nDs24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnR2VzdGnDs24gZGUgY2F0ZWdvcsOtYXMgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJ0HDsWFkaXIgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdCb3JyYXIgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ0FjZXB0YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnQcOxYWRpciBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdFZGl0YXIgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1BvciBmYXZvciwgc2VsZWNjaW9uZSBhbCBtZW5vcyB1biBncnVwbyBkZSBwZXJtaXNvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnR3J1cG9zIGRlIGFnZW50ZXMgcXVlIHB1ZWRlbiBhY2NlZGVyIGEgbG9zIGFydMOtY3Vsb3MgZGUgZXN0YSBjYXRlZ29yw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICdTZSBtb3N0cmFyw6EgY29tbyBjb21lbnRhcmlvIGVuIGVsIGV4cGxvcmFkb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICfCv1NlZ3VybyBxdWUgZGVzZWEgYm9ycmFyIGVzdGEgY2F0ZWdvcsOtYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPQogICAgICAgICdObyBwdWVkZSBib3JyYXIgZXN0YSBjYXRlZ29yw61hLiBFc3TDoSBzaWVuZG8gdXNhZGEgcG9yIGFsIG1lbm9zIHVuIGFydMOtY3VsbyBGQVEgeS9vIGVzIHBhZHJlIGRlIGFsIG1lbm9zIG90cmEgY2F0ZWdvcsOtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ0VzdGEgY2F0ZWdvcsOtYSBlc3TDoSBzaWVuZG8gdXNhZGEgcG9yIGxvcyBzaWd1aWVudGVzIGFydMOtY3Vsb3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJ0VzdGEgY2F0ZWdvcsOtYSBlcyBwYWRyZSBkZSBsYXMgc2lndWllbnRlcyBzdWJjYXRlZ29yw61hcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICfCv1NlZ3VybyBxdWUgZGVzZWEgYm9ycmFyIGVzdGUgYXJ0w61jdWxvIEZBUT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdFeHBsb3JhZG9yIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdCw7pzcXVlZGEgUsOhcGlkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxkY2FyZHMgYXJlIGFsbG93ZWQuJ30gPSAnU2UgcGVybWl0ZW4gY29tb2RpbmVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICdCw7pzcXVlZGEgQXZhbnphZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ1N1YmNhdGVnb3LDrWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ0FydMOtY3Vsb3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnTm8gc2UgZW5jb250cmFyb24gc3ViY2F0ZWdvcsOtYXMuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICdIaXN0b3JpYSBkZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBkYXRvcyBlbiBsYSBCaXTDoWNvcmEgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7NuIGRlIElkaW9tYXMgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAnVXRpbGljZSBlc3RhIGZ1bmNpb25hbGlkYWQgc2kgZGVzZWEgdHJhYmFqYXIgY29uIG3Dumx0aXBsZXMgaWRpb21hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnQcOxYWRpciBJZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAnQm9ycmFyIElkaW9tYSAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICdBw7FhZGlyIElkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnRWRpdGFyIElkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnwr9TZWd1cm8gcXVlIGRlc2VhIGJvcnJhciBlc3RlIGlkaW9tYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAnTm8gcHVlZGUgYm9ycmFyIGVzdGUgaWRpb21hLiBFc3TDoSBzaWVuZG8gdXNhZG8gcG9yIGFsIG1lbm9zIHVuIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdFc3RlIGlkaW9tYSBlc3RhIHNpZW5kbyB1c2FkbyBwb3IgbG9zIHNpZ3VpZW50ZXMgQXJ0w61jdWxvcyBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdBanVzdGVzIGRlIENvbnRleHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ0FydMOtY3Vsb3MgRkFRIHBvciBww6FnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ05vIHNlIGVuY29udHJhcm9uIGRhdG9zIGRlIEZBUS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3JkJ30gPSAnUGFsYWJyYSBjbGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIChlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjApJ30gPSAnVm90byAoZS5nLiBJZ3VhbCBhIDEwIG8gTWF5b3JRdWUgNjApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgKGUuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlKSd9ID0gJ1ZhbG9yYWNpw7NuIChlLmcuIElndWFsIGEgMjUlIG8gTWF5b3JRdWUgNzUlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJ0Fwcm9iYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ8OabHRpbW8gY2FtYmlvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ1RpZW1wbyBkZSBDcmVhY2nDs24gZGVsIEFydMOtY3VsbyBGQVEgKGFudGVzL2Rlc3B1w6lzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICdUaWVtcG8gZGUgQ3JlYWNpw7NuIGRlbCBBcnTDrWN1bG8gRkFRIChlbnRyZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICdUaWVtcG8gZGUgTW9kaWZpY2FjacOzbiBkZWwgQXJ0w61jdWxvIEZBUSAoYW50ZXMvZGVzcHXDqXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ1RpZW1wbyBkZSBNb2RpZmljYWNpw7NuIGRlbCBBcnTDrWN1bG8gRkFRIChlbnRyZSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUUZ1bGx0ZXh0J30gPSAnVGV4dG8gY29tcGxldG8gRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgU2VhcmNoJ30gPSAnQsO6c3F1ZWRhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJ1NlbGVjY2nDs24gZGUgcGVyZmlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUnfSA9ICdWb3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGUgc2V0dGluZ3MnfSA9ICdTaW4gY29uZmlndXJhY2nDs24gZGUgdm90YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHZvdGVzJ30gPSAnVm90b3MgZXNwZWPDs2lmaWNvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjAnfSA9ICdlLmcuIElndWFsIGEgMTAgbyBNYXlvclF1ZSA2MCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlJ30gPSAnVmFsb3JhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZXR0aW5ncyd9ID0gJ1NpbiBjb25maWd1cmFjacOzbiBkZSB2YWxvcmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyByYXRlJ30gPSAnVmFsb3JhY2nDs24gZXNwZWPDrWZpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUnfSA9ICdlLmcuIElndWFsIGEgMjUlIG8gTWF5b3IgUXVlIDc1JSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSd9ID0gJ1RpZW1wbyBkZSBjcmVhY2nDs24gZGVsIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgZGF0ZSd9ID0gJ0ZlY2hhIGVzcGVjw61maWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgcmFuZ2UnfSA9ICdSYW5nbyBkZSBmZWNoYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUnfSA9ICdUaWVtcG8gZGUgbW9kaWZpY2FjacOzbiBkZWwgYXJ0w61jdWxvIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2nDs24gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ1B1bnR1YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnZGUgNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1ZvdG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ8KhTm8gc2UgZW5jb250csOzIG5pbmfDum4gdm90byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ05vIHNlIGVuY29udHLDsyBuaW5nw7puIHZvdG8uIFNlYSBlbCBwcmltZXJvIGVuIHZhbG9yYXIgZXN0ZSBhcnTDrWN1bG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdEZXNjYXJnYXIgQWRqdW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJ1BhcmEgYWJyaXIgbG9zIGVubGFjZXMgZGUgbGFzIHNpZ3VpZW50ZXMgZGVzY3JpcGNpb25lcywgcHVlZGUgbmVjZXNpdGFyIHByZXNpb25hciBsYSB0ZWNsYSBDdHJsLCBDbWQgbyBTaGlmdCBtaWVudHJhcyBoYWNlIGNsaWMgZW4gZWwgZW5sYWNlIChkZXBlbmRpZW5kbyBkZWwgbmF2ZWdhZG9yIHkgU08gcXVlIGVzdMOpIHV0aWxpemFuZG8pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0KICAgICAgICAnwr9Dw7NtbyBkZSDDunRpbCBmdWUgZXN0ZSBhcnTDrWN1bG8/IFBvciBmYXZvciwgZMOpbm9zIHN1IHB1bnR1YWNpw7NuIHkgYXl1ZGUgYSBtZWpvcmFyIGxhIGJhc2UgZGUgZGF0b3MgZGUgRkFRLiBHcmFjaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ3BvY28gw7p0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAnbXV5IMO6dGlsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSB0aXRsZSB0byBhcnRpY2xlIHN1YmplY3QnfSA9ICdBZ3JlZ2FyIGVsIHTDrXR1bG8gZGVsIEZBUSBhbCBhc3VudG8gZGVsIGFydMOtY3Vsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdJbnNlcnRhciBUZXh0byBkZSBsYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRJ30gPSAnSW5zZXJ0YXIgRkFRIENvbXBsZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0luc2VydGFyIEVubGFjZSBhIGxhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnSW5zZXJ0YXIgdGV4dG8geSBFbmxhY2UgYSBsYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRICYgTGluayd9ID0gJ0luc2VydGFyIEZBUSBDb21wbGV0byAmIEVubGFjZSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ05vIHNlIGVuY29udHJhcm9uIGFydMOtY3Vsb3MgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICdCw7pzcXVlZGEgZGUgdGV4dG8gY29tcGxldG8gZW4gYXJ0w61jdWxvcyBGQVEgKGVqOiAiSm9obipuIiBvICJXaWxsKiIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgcmVzdHJpY3Rpb25zJ30gPSAnUmVzdHJpY2Npb25lcyBkZSB2b3RhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLid9ID0gJ8OabmljYW1lbnRlIGFydMOtY3Vsb3MgRkFRIGNvbiB2b3Rvcy4uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIHJlc3RyaWN0aW9ucyd9ID0gJ1Jlc3RyaWNjaW9uZXMgZGUgdmFsb3JhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCByYXRlLi4uJ30gPSAnU29sbyBhcnTDrWN1bG9zIEZBUSBjb24gdmFsb3JhY2nDs24uLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCd9ID0gJ8O6bmljYW1lbnRlIGFydMOtY3Vsb3MgRkFRIGNyZWFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCBiZXR3ZWVuJ30gPSAnw5puaWNhbWVudGUgYXJ0w61jdWxvcyBGQVEgY3JlYWRvcyBlbnRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICfCv1BlcmZpbCBkZSBiw7pzcXVlZGEgY29tbyBwbGFudGlsbGE/JzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgTnVtYmVyJ30gPSAnTsO6bWVybyBkZSBBcnTDrWN1bG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICdCdXNjYXIgYXJ0w61jdWxvcyBjb24gbGEgcGFsYWJyYSBjbGF2ZSc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICdQw7pibGljbyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnUmVncmVzYXIgYWwgRXhwbG9yYWRvciBkZSBGQVEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRSm91cm5hbC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdCaXTDoWNvcmEgZGUgRkFRJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHVwZGF0ZSd9ID0gJ8OabHRpbWEgQWN0dWFsaXphY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIER5bmFtaWMgRmllbGRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9GQVEucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgYXJ0aWNsZSBpcyBlbXB0eSEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPQogICAgICAgICdGaWx0cm8gcGFyYSBlbCBIVE1MIHJlc3VsdGFudGUgcGFyYSBhw7FhZGlyIGVubGFjZXMgYSB1bmEgY2FkZW5hIGRldGVybWluYWRhLiBFbCBlbGVtZW50byBJbWFnZW4gY29udGVtcGxhIGRvcyB0aXBvcyBkZSByZWdpc3Ryb3MuIEVsIHByaW1lcm8gZXMgZWwgbm9tYnJlIGRlIHVuYSBpbWFnZW4gKHBvciBlamVtcGxvIGZhcS5wbmcpLiBFbiBlc3RlIGNhc28gc2UgdXRpbGl6YXLDoSBsYSBydXRhIGRlIGltw6FnZW5lcyBkZSBPVFJTLiBMYSBzZWd1bmRhIHBvc2liaWxpZGFkIGVzIGluc2VydGFyIGVsIGVubGFjZSBhIGxhIGltYWdlbi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ29sb3IgQ1NTIHBhcmEgZWwgcmVzdWx0YWRvIGRlIGxhIHZvdGFjacOzbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgVGltZSBUbyBMZWF2ZSBmb3IgRkFRIGl0ZW1zLid9ID0gJ1RpZW1wbyBkZSB2aWRhIGRlIGxhIGNhY2jDqSBwYXJhIGxvcyBlbGVtZW50b3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnR2VzdGnDs24gZGUgbGFzIENhdGVnb3LDrWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ07Dum1lcm8gZGUgZGVjaW1hbGVzIHBhcmEgZWwgcmVzdWx0YWRvIGRlIGxhIHZvdGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAnTm9tYnJlIHByZWRldGVybWluYWRvIGRlIGxhIGNhdGVnb3LDrWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJ0lkaW9tYSBwb3Igb21pc2nDs24gcGFyYSBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gbW9kbyBpZGlvbWEgw7puaWNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJ03DoXhpbW8gdGFtYcOxbyBwb3IgZGVmZWN0byBhIG1vc3RyYXIgZGUgbG9zIHTDrXR1bG9zIGVuIHVuIGFydMOtY3VsbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9CiAgICAgICAgJ1ByaW9yaWRhZCBwb3Igb21pc2nDs24gZGUgbG9zIHRpY2tldHMgcGFyYSBhcHJvYmFjacOzbiBkZSBsb3MgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICdFc3RhZG8gcG9yIG9taXNpw7NuIHBhcmEgbG9zIGFydMOtY3Vsb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnRXN0YWRvIHBvciBvbWlzacOzbiBkZSBsb3MgdGlja2V0cyBwYXJhIGFwcm9iYWNpw7NuIGRlIGxvcyBhcnTDrWN1bG9zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnVGlwbyBwb3IgZGVmZWN0byBkZSBsb3MgdGlja2V0cyBwYXJhIGFwcm9iYWNpw7NuIGRlIGFydMOtY3Vsb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0KICAgICAgICAnVmFsb3IgcG9yIG9taXNpw7NuIHBhcmEgZWwgcGFyw6FtZXRybyAiQWN0aW9uIiBwYXJhIGxhIGludGVyZmF6IHDDumJsaWNhLiBFbCBwYXLDoW1ldHJvICJBY3Rpb24iIHNlIHVzYSBlbiBsb3MgInNjcmlwdHMiIGRlbCBzaXN0ZW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgaWYgdGhlIEZBUSB0aXRsZSBzaG91bGQgYmUgY29uY2F0ZW5hdGVkIHRvIGFydGljbGUgc3ViamVjdC4nfSA9CiAgICAgICAgJ0RlZmluZSBzaSBlbCB0w610dWxvIGRlbCBGQVEgZGViZSBlc3RhciBjb25jYXRlbmFkbyBhbCBhc3VudG8gZGVsIGFydMOtY3Vsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0KICAgICAgICAnRGVmaW5lIHVuIG3Ds2R1bG8gZGUgdmlzdGEgZ2VuZXJhbCBwYXJhIG1vc3RyYXIgbGEgdmlzdGEgcGVxdWXDsWEgZGUgbGEgYml0w6Fjb3JhIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPQogICAgICAgICdEZWZpbmUgdW4gbcOzZHVsbyBkZSB2aXN0YSBwcmV2aWEgcGFyYSBtb3N0cmFyIGxhIHZpc3RhIHBlcXVlw7FhIGRlIHVuIGxpc3RhZG8gZGUgRkFRcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIGVsIGF0cmlidXRvIHBvciBvbWlzacOzbiBwYXJhIG9yZGVuYXIgbG9zIGFydMOtY3Vsb3MgRkFRIGVuIHVuYSBiw7pzcXVlZGEgZGUgRkFRIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgYXRyaWJ1dG8gcG9yIG9taXNpw7NuIHBhcmEgb3JkZW5hciBsb3MgYXJ0w61jdWxvcyBGQVEgZW4gdW5hIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIGVsIGF0cmlidXRvIHBvciBvbWlzacOzbiBwYXJhIG9yZGVuYXIgbG9zIGFydMOtY3Vsb3MgRkFRIGVuIHVuYSBiw7pzcXVlZGEgZGUgRkFRIGVuIGxhIGludGVyZmF6IHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBhdHJpYnV0byBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxvcyBhcnTDrWN1bG9zIEZBUSBlbiBlbCBleHBsb3JhZG9yIGRlIEZBUSBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RFZmluZSBlbCBhdHJpYnV0byBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxhcyBGQVEgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBhdHJpYnV0byBkZSBGQVEgcXVlIHNlIHVzYXLDoSBwb3Igb21pc2nDs24gcGFyYSBvcmRlbmFyIGxhcyBGQVEgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRGVmaW5lIGVsIG9yZGVuIHBvciBvbWlzacOzbiBkZSBsYXMgRkFRIGVuIGxvcyByZXN1bHRhZG9zIGRlbCBleHBsb3JhZG9yIGRlIEZBUSBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLiBBcnJpYmE6IGxvcyBtw6FzIGFudGlndW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLiBBYmFqbzogTG9zIMO6bHRpbW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBvcmRlbiBwb3Igb21pc2nDs24gZGUgbGFzIEZBUSBlbiBsb3MgcmVzdWx0YWRvcyBkZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUuIEFycmliYTogbG9zIG3DoXMgYW50aWd1b3MgZW4gbGEgcGFydGUgc3VwZXJpb3IuIEFiYWpvOiBsb3MgbcOhcyByZWNpZW50ZXMgZW4gbGEgcGFydGUgc3VwZXJpb3IuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBvcmRlbiBwb3Igb21pc2nDs24gZGUgbGFzIEZBUSBlbiBlbCBleHBsb3JhZG9yIGRlIEZBUSBkZSBsYSBpbnRlcmZheiBww7pibGljYS4gQXJyaWJhOiBsb3MgbcOhcyBhbnRpZ3VvcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4gQWJham86IGxvcyBtw6FzIHJlY2llbnRlcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRGVmaW5lIGVsIG9yZGVuIHBvciBvbWlzacOzbiBkZSBsb3MgcmVzdWx0YWRvcyBkZSB1bmEgYsO6c3F1ZWRhIGVuIGxhIGludGVyZmFjZSBkZWwgYWdlbnRlLiBBcnJpYmE6IGxvcyBtw6FzIGFudGlndW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLiBBYmFqbzogbG9zIMO6bHRpbW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmUgZWwgb3JkZW4gcG9yIG9taXNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYWNlIGRlbCBjbGllbnRlLiBBcnJpYmE6IGxvcyBtw6FzIGFudGlndW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLiBBYmFqbzogbG9zIMO6bHRpbW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRGVmaW5lIGVsIG9yZGVuIHBvciBvbWlzacOzbiBkZSBsb3MgcmVzdWx0YWRvcyBkZSB1bmEgYsO6c3F1ZWRhIGVuIGxhIGludGVyZmFjZSBww7pibGljYS4gQXJyaWJhOiBsb3MgbcOhcyBhbnRpZ3VvcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4gQWJham86IGxvcyDDumx0aW1vcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICdEZWZpbmUgZWwgYXRyaWJ1dG8gZGUgYsO6c3F1ZWRhIGRlIEZBUSBtb3N0cmFkbyBwb3IgZGVmZWN0byBlbiBsYSBwYW50YWxsYSBkZSBiw7pzcXVlZGEgZGUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuICJGdWxsIEZBUSIgaW5jbHVkZXMgdGV4dCwgYXR0YWNobWVudHMgYW5kIGlubGluZSBpbWFnZXMuJ30gPQogICAgICAgICdEZWZpbmUgbGEgaW5mb3JtYWNpw7NuIGEgaW5zZXJ0YXIgZW4gdW4gRkFRIGJhc2FkbyBlbiB1biB0aWNrZXQuICJGQVEgY29tcGxldG8iIGluY2x1eWUgdGV4dG8sIGFkanVudG9zIGUgaW3DoWdlbmVzIGluY3J1c3RhZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBxdWUgc2UgbW9zdHJhcsOhbiBlbiBlbCBFeHBsb3JhZG9yIGRlIEZBUS4gRXN0YSBvcGNpw7NuIG5vIHRpZW5lIGVmZWN0b3MgZW4gbGEgcG9zaWNpw7NuIGRlIGxhcyBjb2x1bW5hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgbGFzIGNvbHVtbmFzIHF1ZSBzZSBtb3N0cmFyw6FuIGVuIGxhIGJpdMOhY29yYSBkZSBGQVEuIEVzdGEgb3BjacOzbiBubyB0aWVuZSBlZmVjdG9zIGVuIGxhIHBvc2ljacOzbiBkZSBsYXMgY29sdW1uYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgbGFzIGNvbHVtbmFzIHF1ZSBzZSBtb3N0cmFyw6FuIGVuIGxhIGLDunNxdWVkYSBkZSBGQVEuIEVzdGEgb3BjacOzbiBubyB0aWVuZSBlZmVjdG9zIGVuIGxhIHBvc2ljacOzbiBkZSBsYXMgY29sdW1uYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ0RlZmluaWNpw7NuIGRlbCBjYW1wbyDCq3RleHRvIGxpYnJlwrsgcGFyYSBsb3MgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ0JvcnJhciBlc3RlIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNtYWxsIGZvcm1hdCBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICdFZGl0YXIgZXN0ZSBhcnTDrWN1bG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICdIYWJpbGl0YXIgbcO6bHRpcGxlcyBpZGlvbWFzIGVuIGVsIG3Ds2R1bG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAnSGFiaWxpdGFyIGVsIG1lY2FuaXNtbyBkZSB2b3RhY2nDs24gZW4gZWwgbcOzZHVsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0zDrW1pdGUgcGFyYSBsYSB2aXN0YSBnZW5lcmFsIMKrcGVxdWXDsWHCuyBkZSBsYSBCaXTDoWNvcmEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTMOtbWl0ZSBwYXJhIGxhIHZpc3RhIGdlbmVyYWwgwqtwZXF1ZcOxYcK7IGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdMw61taXRlIGRlIEZBUSBwb3IgcMOhZ2luYSBwYXJhIGxhIHZpc3RhIGdlbmVyYWwgwqtwZXF1ZcOxYcK7IGRlIGxhIEJpdMOhY29yYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0zDrW1pdGUgZGUgRkFRIHBvciBww6FnaW5hIHBhcmEgbGEgdmlzdGEgZ2VuZXJhbCDCq3BlcXVlw7FhwrsgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdFbmNhbWluYWRvciBwYXJhIGxhIGLDunNxdWVkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICfDgXJlYS1GQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdSZWdpc3RybyBkZSBtw7NkdWxvICJGcm9udGVuZCIgZW4gbGEgaW50ZXJmYXogcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0dydXBvIHBhcmEgbGEgYXByb2JhY2nDs24gZGUgbG9zIGFydMOtY3Vsb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnSGlzdG9yaWEgZGUgZXN0ZSBhcnTDrWN1bG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdJbmNsdWlyIGNhbXBvcyBpbnRlcm5vcyBlbiBsb3MgdGlja2V0cyBiYXNhZG9zIGVuIHVuIGFydMOtY3VsbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdJbmNsdWlyIGVsIG5vbWJyZSBkZSBjYWRhIGNhbXBvIGVuIGxvcyB0aWNrZXRzIGJhc2Fkb3MgZW4gdW4gYXJ0w61jdWxvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWljayBzZWFyY2ggc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnQml0w6Fjb3JhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBJZGlvbWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJ0VubGF6YXIgb3RybyBvYmplY3RvIGEgZXN0ZSBhcnTDrWN1bG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGxvcyByZXN1bHRhZG9zIGRlbCBleHBsb3JhZG9yIEZBUSBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGxvcyByZXN1bHRhZG9zIGRlbCBleHBsb3JhZG9yIEZBUSBkZSBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ07Dum1lcm8gbcOheGltbyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gbG9zIHJlc3VsdGFkb3MgZGVsIGV4cGxvcmFkb3IgRkFRIGRlIGxhIGludGVyZmF6IHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBlbiBsYSBiaXTDoWNvcmEgZGUgRkFRIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBjb21vIHJlc3VsdGFkbyBkZSB1bmEgYsO6c3F1ZWRhIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgRkFRIGEgbW9zdHJhciBjb21vIHJlc3VsdGFkbyBkZSB1bmEgYsO6c3F1ZWRhIGVuIGxhIGludGVyZmF6IGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOw7ptZXJvIG3DoXhpbW8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGNvbW8gcmVzdWx0YWRvIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYXogcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0KICAgICAgICAnTcOzZHVsbyBwYXJhIGdlbmVyYXIgZWwgcGVyZmlsIGh0bWwgIk9wZW5TZWFyY2giIHBhcmEgYsO6c3F1ZWRhcyBjb3J0YXMgZGUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICdOdWV2byBhcnTDrWN1bG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJ0xvcyBudWV2b3MgYXJ0w61jdWxvcyBGQVEgcmVxdWllcmVuIGFwcm9iYWNpw7NuIGFudGVzIGRlIHB1YmxpY2Fyc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ07Dum1lcm8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGVsIGV4cGxvcmFkb3IgZGUgRkFRIGRlIGxhIGludGVyZmF6IGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gZWwgZXhwbG9yYWRvciBkZSBGQVEgZGUgbGEgaW50ZXJmYXogcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ07Dum1lcm8gZGUgYXJ0w61jdWxvcyBGQVEgYSBtb3N0cmFyIGVuIGNhZGEgcMOhZ2luYSBkZSBsb3MgcmVzdWx0YWRvcyBkZSB1bmEgYsO6c3F1ZWRhIGVuIGxhIGludGVyZmF6IGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTsO6bWVybyBkZSBhcnTDrWN1bG9zIEZBUSBhIG1vc3RyYXIgZW4gY2FkYSBww6FnaW5hIGRlIGxvcyByZXN1bHRhZG9zIGRlIHVuYSBiw7pzcXVlZGEgZW4gbGEgaW50ZXJmYXogcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnTsO6bWVybyBkZSBlbGVtZW50b3MgYSBtb3N0cmFyIGVuIMO6bHRpbW9zIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAnTsO6bWVybyBkZSBlbGVtZW50b3MgYSBtb3N0cmFyIGVuIMO6bHRpbW9zIGNyZWFkb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnTsO6bWVybyBkZSBlbGVtZW50b3MgYSBtb3N0cmFyIGVuIGVsIFRvcCAxMC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgZGUgbGFzIHDDoWdpbmFzIChlbiBsYXMgcXVlIHNlIG11ZXN0cmFuIGxvcyBlbGVtZW50b3MgRkFRKSBkZSBsYSB2aXN0YSBnZW5lcmFsIHBlcXVlw7FhIGRlIGxhIGJpdMOhY29yYSBkZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBkZSBsYXMgcMOhZ2luYXMgKGVuIGxhcyBxdWUgc2UgbXVlc3RyYW4gbG9zIGVsZW1lbnRvcyBGQVEpIGRlIGxhIHZpc3RhIGdlbmVyYWwgZGUgRkFRIHBlcXVlw7FhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ0ltcHJpbWlyIGVzdGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0ZpbGEgcGFyYSBsYSBhcHJvYmFjacOzbiBkZSBsb3MgYXJ0w61jdWxvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnUG9uZGVyYWNpw7NuIHBhcmEgbGEgdm90YWNpw7NuLiBMYSBjbGF2ZSBkZWJlIGV4cHJlc2Fyc2UgZW4gcG9yY2VudGFqZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJ0LDunNxdWVkYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnRXN0YWJsZWNlciBsYSBhbHR1cmEgcHJlZGV0ZXJtaW5hZGEgKGVuIHDDrXhlbGVzKSBkZSBsb3MgY2FtcG9zIEhUTUwgwqtpbmxpbmXCuyBkZSBBZ2VudEZBUVpvb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICdFc3RhYmxlY2VyIGxhIGFsdHVyYSBwcmVkZXRlcm1pbmFkYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEN1c3RvbWVyRkFRWm9vbSAoeSBQdWJsaWNGQVFab29tKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnRXN0YWJsZWNlciBsYSBhbHR1cmEgbcOheGltYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEFnZW50RkFRWm9vbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJ0VzdGFibGVjZXIgbGEgYWx0dXJhIG3DoXhpbWEgKGVuIHDDrXhlbGVzKSBkZSBsb3MgY2FtcG9zIEhUTUwgwqtpbmxpbmXCuyBkZSBDdXN0b21lckZBUVpvb20gKHkgUHVibGljRkFRWm9vbSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnTW9zdHJhciBib3TDs24gwqtJbnNlcnRhciBlbmxhY2UgYSBGQVHCuyBlbiBBZ2VudEZBUVpvb21TbWFsbCBwYXJhIGxvcyBhcnTDrWN1bG9zIEZBUSBww7pibGljb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIC8gIkluc2VydCBGdWxsIEZBUSAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIC8gIkluc2VydCBGdWxsIEZBUSIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ8K/TW9zdHJhciBjb250ZW5pZG8gSFRNTCBlbiBsb3MgYXJ0w61jdWxvcyBGQVE/Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICfCv01vc3RyYXIgbGEgcnV0YSBkZSBsYSBGQVE/IHPDrS9uby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLid9ID0gJ8K/TW9zdHJhciBsb3MgZWxlbWVudG9zIGRlIGxhcyBzdWJjYXRlZ29yw61hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBsb3Mgw7psdGltb3MgYXJ0w61jdWxvcyBhY3R1YWxpemFkb3MgZW4gbGFzIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBsb3Mgw7psdGltb3MgYXJ0w61jdWxvcyBjcmVhZG9zIGVuIGxhcyBpbnRlcmZhY2VzIGRlZmluaWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ01vc3RyYXIgbG9zIGFydMOtY3Vsb3MgVG9wIDEwIGVuIGxhcyBpbnRlcmZhY2VzIGRlZmluaWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ01vc3RyYXIgbGEgdm90YWNpw7NuIGVuIGxhcyBpbnRlcmZhY2VzIGRlZmluaWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBxdWUgcGVybWl0ZSBlbmxhemFyIGEgdW4gYXJ0w61jdWxvIEZBUSBjb24gb3RybyBvYmpldG8gZW4gc3UgdmlzdGEgYW1wbGlhZGEgZGUgZXNhIEZBUSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHF1ZSBwZXJtaXRlIGJvcnJhciB1biBhcnTDrWN1bG8gRkFRIGVuIGxhIHZpc3RhIGFtcGxpYWRhIGRlIGVzYSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBwYXJhIGFjY2VkZXIgYWwgaGlzdG9yaWFsIGRlIHVuIGFydMOtY3VsbyBGQVEgZW4gc3UgdmlzdGEgYW1wbGlhZGEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgZWRpdGFyIHVuIGFydMOtY3VsbyBGQVEgZW4gc3UgdmlzdGEgYW1wbGlhZGEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gZW5sYWNlIGVuIGVsIG1lbsO6IHBhcmEgcmV0cm9jZWRlciBlbiBsYSB2aXN0YSBhbXBsaWFkYSBkZSBGQVEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBwYXJhIGltcHJpbWlyIHVuIGFydMOtY3VsbyBGQVEgZW4gc3UgdmlzdGEgYW1wbGlhZGEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0KICAgICAgICAnRWwgaWRlbnRpZmljYWRvciBwYXJhIHVuYSBGQVEsIHBvciBlamVtcGxvIEZBUSMsIEtCIywgTWlGQVEjLiBGQVEjIGVzIGxhIG9wY2nDs24gcG9yIG9taXNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYWp1c3RlIGRlZmluZSBxdWUgdW4gb2JqZXRvIMKrRkFRwrsgcHVlZGUgZW5sYXphcnNlIGNvbiBvdHJvcyBvYmpldG9zIMKrRkFRwrsgdXRpbGl6YW5kbyBlbCB0aXBvIGRlIGVubGFjZSDCq05vcm1hbMK7Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYWp1c3RlIGRlZmluZSBxdWUgdW4gb2JqZXRvIMKrRkFRwrsgcHVlZGUgZW5sYXphcnNlIGNvbiBvdHJvcyBvYmpldG9zIMKrRkFRwrsgdXRpbGl6YW5kbyBlbCB0aXBvIGRlIGVubGFjZSDCq1BhcmVudENoaWxkwrsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYWp1c3RlIGRlZmluZSBxdWUgdW4gb2JqZXRvIMKrRkFRwrsgcHVlZGUgZW5sYXphcnNlIGNvbiBvdHJvcyBvYmpldG9zIMKrVGlja2V0wrsgdXRpbGl6YW5kbyBlbCB0aXBvIGRlIGVubGFjZSDCq05vcm1hbMK7Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYWp1c3RlIGRlZmluZSBxdWUgdW4gb2JqZXRvIMKrRkFRwrsgcHVlZGUgZW5sYXphcnNlIGNvbiBvdHJvcyBvYmpldG9zIMKrVGlja2V0wrsgdXRpbGl6YW5kbyBlbCB0aXBvIGRlIGVubGFjZSDCq1BhcmVudENoaWxkwrsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdDdWVycG8gZGVsIHRpY2tldCBwYXJhIGFwcm9iYWNpw7NuIGRlIGFydMOtY3Vsb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnQXN1bnRvIGRlbCB0aWNrZXQgcGFyYSBhcHJvYmFjacOzbiBkZSBhcnTDrWN1bG9zIEZBUS4nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZmFfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICfYotiu2LHbjNmGINin2YLZhNin2YUg2KrYudix24zZgSDYtNiv2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAn2KLYrtix24zZhiDYp9mC2YTYp9mFINin24zYrNin2K8g2LTYr9mHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICfYqNin2YTYp9iq2LHbjNmGINux27Ag2YLZhNmFJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAn2LLbjNixINmF2KzZhdmI2LnZh+KAjNuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAn2KfZhdiq24zYp9iyINix2Kcg2KfZhtiq2K7Yp9ioINmG2qnYsdiv2YfigIzYp9uM2K8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAn2LHZiNiyINii2LrYp9iyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAn2YXYp9mHINii2LrYp9iyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IHllYXInfSA9ICfYs9in2YQg2KLYutin2LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIGRheSd9ID0gJ9ix2YjYsiDZvtin24zYp9mGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBtb250aCd9ID0gJ9mF2KfZhyDZvtin24zYp9mGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB5ZWFyJ30gPSAn2LPYp9mEINm+2KfbjNin2YYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAn2KfYsiDYsdin24wg2LTZhdinINiz2b7Yp9iz2q/Ystin2LHbjNmFISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ9i02YXYpyDZgtio2YTYpyDYsdin24wg2K/Yp9iv2YfigIzYp9uM2K8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJ9in2K7YqNin2LEgRkFRICjbsduwINiq2KfbjCDYqNix2KrYsSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICfYp9iu2KjYp9ixIEZBUSAo2KzYr9uM2K/YpyDYp9uM2KzYp9ivINi02K/ZhyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJ9in2K7YqNin2LEgRkFRICjYrNiv24zYr9inINiq2LrbjNuM2LEg24zYp9mB2KrZhyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5bXB0b20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29sdXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICfYqtin24zbjNivJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUNhdGVnb3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn2KrYp9uM24zYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICfYr9ixIEV4cGxvcmVyINio2Ycg2LXZiNix2Kog24zaqSDZhdiq2YYg2KrZiNi224zYrduMINmG2YXYp9uM2LQg2K/Yp9iv2Ycg2K7ZiNin2YfZhtivINi02K8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsZGNhcmRzIGFyZSBhbGxvd2VkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZid9ID0gJ9iz2YjYp9io2YInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSm91cm5hbE92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBKb3VybmFsIGRhdGEgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn2KrZhti424zZhdin2Kog2YXZgdin2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSAoZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIChlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92ZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn2KLYrtix24zZhiDYqti624zbjNixINio2Ycg2YjYs9uM2YTZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJldHdlZW4pJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGUgc2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgdm90ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyByYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSByYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAn2KLYsdinJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICfYr9ix24zYp9mB2Kog2b7bjNmI2LPYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIHRpdGxlIHRvIGFydGljbGUgc3ViamVjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSAmIExpbmsnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIHJlc3RyaWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHZvdGVzLi4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgcmVzdHJpY3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggcmF0ZS4uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQgYmV0d2Vlbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayB0byBGQVEgRXhwbG9yZXInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRSm91cm5hbC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgdXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBEeW5hbWljIEZpZWxkcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvRkFRLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGFydGljbGUgaXMgZW1wdHkhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBpZiB0aGUgRkFRIHRpdGxlIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gYXJ0aWNsZSBzdWJqZWN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGluZm9ybWF0aW9uIHRvIGJlIGluc2VydGVkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4gIkZ1bGwgRkFRIiBpbmNsdWRlcyB0ZXh0LCBhdHRhY2htZW50cyBhbmQgaW5saW5lIGltYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc21hbGwgZm9ybWF0IG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgbXVsdGlwbGUgbGFuZ3VhZ2VzIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrIHNlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBGQVEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICfZhtmI2LTYqtmHINis2K/bjNivIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiAvICJJbnNlcnQgRnVsbCBGQVEgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiAvICJJbnNlcnQgRnVsbCBGQVEiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZmlfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ3Npc8OkaW5lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICdqdWxraW5lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ3Vsa29pbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdGQVEtbnVtZXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ1ZpaW1la3NpIHDDpGl2aXRldHl0IGFydGlra2VsaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAnVmlpbWVrc2kganVsa2Fpc3R1dCBhcnRpa2tlbGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICdUb3AgMTAgYXJ0aWtrZWxpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ0FsYWthdGVnb3JpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ0VpIHZhbGl0dHVhIGFydmlvdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAnanVsa2luZW4gKGthaWtraSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ3Vsa29pbmVuIChhc2lha2thYXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICdzaXPDpGluZW4gKGFnZW50aXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IGRheSd9ID0gJ0Fsb2l0dXNww6RpdsOkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnQWxvaXR1cyBrdXVrYXVzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnQWxvaXR1c3Z1b3NpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdMb3BwdXDDpGl2w6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTG9wcHVrdXVrYXVzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ0xvcHB1dnVvc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnS2lpdG9zIGFydm9zdGVsdXN0YXNpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ09sZXQgam8gYXJ2b3N0ZWxsdXQgdMOkbcOkbiBhcnRpa2tlbGluISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJ1R1bG9zdGEgYXJ0aWtrZWxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJ0FydGlra2VsaXQgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnRpa2tlbGkgKHV1ZGV0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0aWtrZWxpIChww6Rpdml0ZXR0eSDDpHNrZXR0w6RpbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJ30gPSAnS2F0ZWdvcmlhIHDDpGl2aXRldHR5ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgYWRkZWQhJ30gPSAnS2F0ZWdvcmlhIGxpc8OkdHR5ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICdLYXRlZ29yaWFsbGEgdHVsZWUgb2xsYSBuaW1pISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAnVMOkbcOkIGthdGVnb3JpYSBvbiBqbyBvbGVtYXNzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAnS2llbGkgbGlzw6R0dHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnS2llbGkgcMOkaXZpdGV0dHkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ05pbWkgb24gcGFrb2xsaW5lbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdUw6Rtw6Qga2llbGkgb24gam8gb2xlbWFzc2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5bXB0b20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29sdXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdMaXPDpMOkIEZBUSBhcnRpa2tlbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICdLYXRlZ29yaWEgb24gcGFrb2xsaW5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdIeXbDpGtzeW50w6QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnRkFROm4gS2F0ZWdvcmlvaWRlbiBoYWxsaW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdMaXPDpMOkIGthdGVnb3JpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdQb2lzdGEga2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnTGlzw6TDpCBrYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ011b2trYWEga2F0ZWdvcmlhYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1ZhbGl0c2UgYWluYWtpbiB5a3NpIG9pa2V1c3J5aG3DpC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJ0FnZW50dGlyeWhtw6R0LCBqb2lsbGEgb24gcMOkw6RzeSBhcnRpa2tlbGVpaGluIHTDpHNzw6Qga2F0ZWdvcmlhc3NhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICdOw6R5dGV0w6TDpG4ga29tbWVudHRpbmEgU2VsYWltZXNzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ0hhbHVhdGtvIHZhcm1hc3RpIHBvaXN0YWEgdMOkbcOkbiBrYXRlZ29yaWFuPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9CiAgICAgICAgJ0V0IHZvaSBwb2lzdGFhIHTDpHTDpCBrYXRlZ29yaWFhISBTZSBzaXPDpGx0w6TDpCBqb2tvIGFydGlra2VsZWl0YSB0YWkgc2Ugb24gdG9pc2VuIGthdGVnb3JpYW4gaXPDpG50w6RrYXRlZ29yaWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnU2V1cmFhdmF0IGFydGlra2VsaXQga3V1bHV2YXQgdMOkaMOkbiBrYXRlZ29yaWFhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdOw6Rtw6Qga2F0ZWdvcmlhdCBvdmF0IHTDpG3DpG4ga2F0ZWdvcmlhbiBhbGFrYXRlZ29yaW9pdGEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnSGFsdWF0a28gdmFybWFzdGkgcG9pc3RhYSB0w6Rtw6RuIGFydGlra2VsaW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnU2VsYWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ1Bpa2FoYWt1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnTW9uaXB1b2xpbmVuIGhha3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ0FsYWthdGVnb3JpYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnQXJ0aWtrZWxpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ0VpIGFsYWthdGVnb3Jpb2l0YS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZid9ID0gJ0hpc3RvcmlhOic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnRkFROm4ga2llbHRlbiBoYWxsaW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9CiAgICAgICAgJ0vDpHl0w6QgdMOkdMOkIG9taW5haXN1dXR0YSwgam9zIGhhbHVhdCBrw6R5dHTDpMOkIHVzZWFtcGFhIGtpZWx0w6QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ0xpc8Okw6Qga2llbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAnUG9pc3RhIGtpZWxpICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ0xpc8Okw6Qga2llbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ011b2trYWEga2llbHTDpCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnSGFsdWF0a28gdmFybWFzdGkgcG9pc3RhYSB0w6Rtw6RuIGtpZWxlbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAnRXQgdm9pIHBvaXN0YWEgdMOkdMOkIGtpZWx0w6QuIEFpbmFraW4geWtzaSBhcnRpa2tlbGkga8OkeXR0w6TDpCB0w6R0w6Qga2llbHTDpCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdTZXVyYWF2YXQgYXJ0aWtrZWxpdCBrw6R5dHTDpHbDpHQgdMOkdMOkIGtpZWx0w6QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnQXJ0aWtrZWxlaXRhIHBlciBzaXZ1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ1lodMOkw6RuIGFydGlra2VsaWEgZWkgbMO2eXR5bnl0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIChlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjApJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgKGUuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJldHdlZW4pJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdGQVEgaGFrdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGUgc2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgdm90ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyByYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSByYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdGQVEtaW5mb3JtYWF0aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnQXJ2b3N0ZWx1dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvdXQgb2YgNSd9ID0gJy8gNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ8OEw6RuZXN0eWtzZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnRWkgw6TDpG5pw6QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdFaSBhbm5ldHR1amEgw6TDpG5pw6QhIMOEw6RuZXN0w6QgdMOkdMOkIGFydGlra2VsaWEgZW5zaW1tw6Rpc2Vuw6QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdMYXRhYSBsaWl0ZXRpZWRvc3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0KICAgICAgICAnS3VpbmthIGh5w7ZkeWxsaW5lbiB0w6Rtw6QgYXJ0aWtrZWxpIG9saT8gQXJ2b3N0ZWxlIGFydGlra2VsaSwgam90dGEgdm9pbW1lIGtlaGl0dMOkw6QgRkFRLXRpZXRva2FudGFhbW1lLiBLaWl0b3MhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnaHnDtmR5dMO2bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICdoecO2ZHlsbGluZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIHRpdGxlIHRvIGFydGljbGUgc3ViamVjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdMaXPDpMOkIEZBUS10ZWtzdGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0xpc8Okw6QgRkFRLWxpbmtraSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnTGlzw6TDpCBGQVEtdGVrc3RpIGphIC1saW5ra2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRICYgTGluayd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ1lodMOkw6RuIGFydGlra2VsaWEgZWkgbMO2eXR5bnl0Lic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpJ30gPSAnSGFlIGFydGlra2VsZWlzdGEgKGVzaW0uICJNYXR0aSoiIHRhaSAiTWVpaypuZW4iKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIHJlc3RyaWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHZvdGVzLi4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgcmVzdHJpY3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggcmF0ZS4uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQgYmV0d2Vlbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljJ30gPSAnSnVsa2luZW4nOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFNob3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIHRvIEZBUSBFeHBsb3Jlcid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFKb3VybmFsLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCB1cGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIER5bmFtaWMgRmllbGRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9GQVEucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgYXJ0aWNsZSBpcyBlbXB0eSEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgVGltZSBUbyBMZWF2ZSBmb3IgRkFRIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnS2F0ZWdvcmlhaGFsbGludGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG1heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgaWYgdGhlIEZBUSB0aXRsZSBzaG91bGQgYmUgY29uY2F0ZW5hdGVkIHRvIGFydGljbGUgc3ViamVjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuICJGdWxsIEZBUSIgaW5jbHVkZXMgdGV4dCwgYXR0YWNobWVudHMgYW5kIGlubGluZSBpbWFnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiTGltaXQiIGRlZmluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc3BsYXllZCBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNtYWxsIGZvcm1hdCBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWljayBzZWFyY2ggc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdLaWVsdGVuIGhhbGxpbnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiAvICJJbnNlcnQgRnVsbCBGQVEgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiAvICJJbnNlcnQgRnVsbCBGQVEiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZnJfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncHVibGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICdleHRlcm5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdOdW3DqXJvIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdEZXJuacOocmVzIHF1ZXN0aW9ucyBtb2RpZmnDqWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ0Rlcm5pw6hyZXMgcXVlc3Rpb25zIGNyw6nDqWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICdUb3AgMTAgZGVzIHF1ZXN0aW9ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ1NvdXMgY2F0w6lnb3JpZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ1BhcyBkZSBzw6lsZWN0aW9uICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICdFeHBsb3JhdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdwdWJsaWMgKHRvdXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdleHRlcm5lIChjbGllbnQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICdpbnRlcm5lIChvcMOpcmF0ZXVyKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdKb3VyIGRlIGTDqXBhcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdNb2lzIGRlIGTDqXBhcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ0FubsOpZSBkZSBEw6lwYXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdKb3VyIGRlIEZpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdNb2lzIGRlIEZpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ0FubsOpZSBkZSBGaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnTWVyY2kgcG91ciB2b3RyZSB2b3RlICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdWb3VzIGF2ZXogZMOpasOgIHZvdMOpICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdJbXByaW1lciBBcnRpY2xlIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICdBcnRpY2xlcyBkZSBGQVEgKFRvcCAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnRpY2xlcyBkZSBGQVEgKG5vdXZlbGxlcyBxdWVzdGlvbnMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdBcnRpY2xlcyBkZSBGQVEgKGRlcm5pZXJzIGNoYW5nZW1lbnRzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdDYXTDqWdvcmllIGRlIEZBUSBtaXNlIMOgIGpvdXIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdDYXTDqWdvcmllIGRlIEZBUSBham91dMOpZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnVW5lIGNhdMOpZ29yaWUgZGV2cmFpdCBhdm9pciB1biBub20hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICdDZXR0ZSBjYXTDqWdvcmllIGV4aXN0ZSBkw6lqw6AhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdMYW5ndWUgZGUgRkFRIGFqb3V0w6khJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ0xhbmd1ZSBkZSBGQVEgbWlzZSDDoCBqb3VyISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICdMZSBub20gZXN0IHJlcXVpcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdDZXR0ZSBsYW5ndWUgZXhpc3RlIGTDqWrDoCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ltcHRvbSd9ID0gJ1N5bXB0w7RtZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2x1dGlvbid9ID0gJ1NvbHV0aW9uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnQWpvdXRlciBBcnRpY2xlIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3Jkcyd9ID0gJ01vdHMtY2zDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICdVbmUgY2F0w6lnb3JpZSBlc3QgcmVxdWlzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZhbCd9ID0gJ0F1dG9yaXNhdGlvbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIENhdMOpZ29yaWVzIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdBam91dCBDYXTDqWdvcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDYXRlZ29yeSd9ID0gJ0VmZmFjZXIgQ2F0w6lnb3JpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ0Fqb3V0IENhdMOpZ29yaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ0VkaXRlciBDYXTDqWdvcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAnTWVyY2kgZGUgU8OpbGVjdGlvbm5lciBhdSBtb2lucyB1biBncm91cGUgZGUgcGVybWlzc2lvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJ0dyb3VwZXMgZFwnYWdlbnRzIHBvdXZhbnQgYWNjw6lkZXIgYXV4IGFydGljbGVzIGRlIGNldHRlIGNhdMOpZ29yaWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICdTZXJhIGFmZmljaMOpIGNvbW1lIHVuIGNvbW1lbnRhaXJlIGRhbnMgbFwnRXhwbG9yZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICdWb3VsZXotdm91cyB2cmFpbWVudCBlZmZhY2VyIGNldHRlIGNhdMOpZ29yaWU/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0KICAgICAgICAnSW1wb3NzaWJsZSBkXCdlZmZhY2VyIGNldHRlIGNhdMOpZ29yaWUuIEVsbGUgZXN0IHV0aWxpc8OpZSBkYW5zIGF1IG1vaW5zIHVuIGFydGljbGUgZGUgRkFRIGV0L291IGVzdCBwYXJlbnRlIGRcJ2F1IG1vaW5zIHVuZSBhdXRyZSBjYXTDqWdvcmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ0NldHRlIGNhdMOpZ29yaWUgZXN0IHV0aWxpc8OpZSBkYW5zIGxlcyBhcnRpY2xlcyBkZSBGQVEgc3VpdmFudHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnQ2V0dGUgY2F0w6lnb3JpZSBlc3QgcGFyZW50ZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdWb3VsZXotdm91cyB2cmFpbWVudCBlZmZhY2VyIGNldCBhcnRpY2xlIGRlIEZBUT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdOYXZpZ2F0ZXVyIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdSZWNoZXJjaGUgcmFwaWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICdMZXMgbcOpdGFjYXJhY3TDqHJlcyBzb250IGF1dG9yaXPDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnUmVjaGVyY2hlIEF2YW5jw6llJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdTb3VzLWNhdMOpZ29yaWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ0FydGljbGVzIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ1BhcyBkZSBzb3VzLWNhdMOpZ29yaWUgdHJvdXbDqWUuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICdIaXN0b3JpcXVlIGRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJ1BhcyBkZSBqb3VybmFsIGRlIGRvbm7DqWVzIEZBUSB0cm91dsOpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb24gTGFuZ3VlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9CiAgICAgICAgJ1V0aWxpc2VyIGNldHRlIGZvbmN0aW9uIGFmaW4gZGUgdHJhdmFpbGxlciBhdmVjIGRlIG11bHRpcGxlcyBsYW5ndWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ0Fqb3V0ZXIgdW5lIGxhbmd1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgTGFuZ3VhZ2UgJXMnfSA9ICdFZmZhY2VyIHVuZSBsYW5ndWUgJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnQWpvdXRlciB1bmUgbGFuZ3VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICdFZGl0ZXIgbGEgbGFuZ3VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nfSA9ICdWb3VsZXotdm91cyB2cmFpbWVudCBlZmZhY2VyIGNldHRlIGxhbmd1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBsYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUhJ30gPQogICAgICAgICdJbXBvc3NpYmxlIGRcJ2VmZmFjZXIgY2V0dGUgbGFuZ3VlLiBFbGxlIGVzdCB1dGlsaXPDqWUgZGFucyBhdSBtb2lucyB1biBhcnRpY2xlIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJ0NldHRlIGxhbmd1ZSBlc3QgdXRpbGlzw6llIGRhbnMgbGVzIGFydGljbGVzIEZBUSBzdWl2YW50cyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ1LDqWdsYWdlcyBkZSBDb250ZXh0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICdBcnRpY2xlcyBGQVEgcGFyIHBhZ2UnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAncGFzIGRlIGRvbm7DqWVzIEZBUSB0cm91dsOpZXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3JkJ30gPSAnTW90LWNsw6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSAoZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwKSd9ID0gJ1ZvdGUgKGV4LiBFZ2FsQSAxMCBvdSBTdXBlcmlldXJBIDYwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIChlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSknfSA9ICdOb3RlIChleC4gRWdhbEEgMjUlIG91IFN1cGVyaWV1ckEgNzUlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJ0FwcHJvdXbDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdEZXJuacOocmUgbW9kaWZpY2F0aW9uIHBhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJldHdlZW4pJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ1RleHRlIEludMOpZ3JhbCBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdSZWNoZXJjaGUgZGFucyBsYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZmlsZSBTZWxlY3Rpb24nfSA9ICdTw6lsZWN0aW9uIGR1IHByb2ZpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlJ30gPSAnVm90ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlIHNldHRpbmdzJ30gPSAnUGFzIGRlIHBhcmFtw6h0cmVzIGRlIHZvdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgdm90ZXMnfSA9ICdWb3RlIHNww6ljaWZpcXVlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgcmF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgcmFuZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXRpb24gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ0NvdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICdzdXIgNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1ZvdGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ0F1Y3VuIHZvdGUgdHJvdXbDqSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ1NveWV6IGxlIHByZW1pZXIgw6Agbm90ZXIgY2V0ZSBhcnRpY2xlIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnVMOpbMOpY2hhcmdlciBGaWNoaWVyIEpvaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0KICAgICAgICAnQ2V0IEFydGljbGUgw6l0YWl0LWlsIHV0aWxlPyBNZXJjaSBkZSBkb25uZXIgdW5lIG5vdGUgZXQgZGUgcGFydGljaXBlciDDoCBsXCdhbcOpbGlvcmF0aW9uIGRlIGxhIGJhc2UgZGUgZG9ubsOpZXMuIE1lcmNpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ3BldSB1dGlsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICd0csOocyB1dGlsZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgdGl0bGUgdG8gYXJ0aWNsZSBzdWJqZWN0J30gPSAnQWpvdXRlciB1biB0aXRyZSBkZSBsYSBGQVEgYXUgc3VqZXQgZGUgbFwnYXJ0aWNsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdJbnPDqXJlciBUZXh0ZSBkYW5zIGxhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEnfSA9ICdJbnPDqXJlciB0b3V0ZSBsYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBMaW5rJ30gPSAnSW5zw6lyZXIgTGllbiBkYW5zIGxhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnSW5zw6lyZXIgVGV4dGUgJiBMaWVuIGRhbnMgbGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSAmIExpbmsnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICdQYXMgZFwnYXJ0aWNsZSBkZSBGQVEgdHJvdXbDqS4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ1JlY2hlcmNoZSB0ZXh0ZSBpbnTDqWdyYWxlIGRhbnMgbGVzIGFydGljbGVzIEZBUSAoZXguICJFbWlsaWUqIiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSByZXN0cmljdGlvbnMnfSA9ICdSZXN0cmljdGlvbnMgZGUgdm90ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHZvdGVzLi4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgcmVzdHJpY3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggcmF0ZS4uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQgYmV0d2Vlbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBOdW1iZXInfSA9ICdOdW3DqXJvIGRcJ0FydGljbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICdSZWNoZXJjaGUgZGVzIEFydGljbGVzIGF2ZWMgbW90IGNsw6knOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljJ30gPSAnUHVibGljJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayB0byBGQVEgRXhwbG9yZXInfSA9ICdSZXZlbmlyIGF1IE5hdmlnYXRldXIgRkFRJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUUpvdXJuYWwucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHVwZGF0ZSd9ID0gJ0Rlcm5pw6hyZSBtaXNlIMOgIGpvdXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIER5bmFtaWMgRmllbGRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9GQVEucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgYXJ0aWNsZSBpcyBlbXB0eSEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDb3VsZXVyIENTUyBwb3VyIGxlIHLDqXN1bHRhdCBkdSB2b3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICdEdXLDqWUgZGUgdmFsaWRpdMOpIGR1IENhY2hlIHBvdXIgbGVzIMOpbMOpbWVudHMgZGUgbGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIGRlcyBjYXTDqWdvcmllcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJ05vbSBkZSBjYXTDqWdvcmllIHBhciBkw6lmYXV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS4nfSA9ICdMYW5ndWUgcGFyIGTDqWZhdXQgcG91ciBsZXMgYXJ0aWNsZXMgZGUgbGEgRkFRIGVuIG1vZGUgbGFuZ2FnZSB1bmlxdWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJ1RhaWxsZSBtYXhpbXVtIHBhciBkw6lmYXV0IGRlcyB0aXRyZXMgZGFucyB1biBhcnRpY2xlIGRlIGxhIEZBUSDDoCBtb250cmVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICdQcmlvcml0w6kgcGFyIGTDqWZhdXQgZGVzIHRpY2tldHMgcG91ciBsXCdhcHByb2JhdGlvbiBkXCdhcnRpY2xlcyBkZSBsYSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICdFdGF0IHBhciBkw6lmYXV0IGRcJ3VuZSBlbnRyw6llIGRlIGxhIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0V0YXQgcGFyIGTDqWZhdXQgZGVzIHRpY2tldHMgcG91ciBsXCdhcHByb2JhdGlvbiBkXCdhcnRpY2xlcyBkZSBsYSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ1R5cGUgcGFyIGTDqWZhdXQgZGVzIHRpY2tldHMgcG91ciBsXCdhcHByb2JhdGlvbiBkXCdhcnRpY2xlcyBkZSBsYSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGlmIHRoZSBGQVEgdGl0bGUgc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBhcnRpY2xlIHN1YmplY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaW5mb3JtYXRpb24gdG8gYmUgaW5zZXJ0ZWQgaW4gYSBGQVEgYmFzZWQgVGlja2V0LiAiRnVsbCBGQVEiIGluY2x1ZGVzIHRleHQsIGF0dGFjaG1lbnRzIGFuZCBpbmxpbmUgaW1hZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uIG9mIEZBUSBpdGVtIGZyZWUgdGV4dCBmaWVsZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnU3VwcHJpbWVyIGNldHRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc21hbGwgZm9ybWF0IG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ01vZGlmaWVyIGNldHRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgbXVsdGlwbGUgbGFuZ3VhZ2VzIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJ0hpc3RvcmlxdWUgZGUgY2V0dGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2sgc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0pvdXJuYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb24gZGVzIGxhbmd1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgRkFRIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAnTm91dmVsIEFydGljbGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJ0xlcyBub3V2ZWF1eCBhcnRpY2xlcyBGQVEgZG9pdmVudCDDqnRyZSBhcHByb3V2w6lzIGF2YW50IGRcJ8OqdHJlIHB1Ymxpw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAnSW1wcmltZXIgY2V0dGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnUmVjaGVyY2hlIGRhbnMgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgLyAiSW5zZXJ0IEZ1bGwgRkFRICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnQWZmaWNoZXIgbGVzIMOpbMOpbWVudHMgZGVzIHNvdXMtY2F0w6lnb3JpZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aHVfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2JlbHPFkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICdueWlsdsOhbm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsJ30gPSAna8O8bHPFkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnR3lJSyBzesOhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdMZWd1dMOzYmIgZnJpc3PDrXRldHQgR3lJSyBiZWplZ3l6w6lzZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAnTGVndXTDs2JiIGzDqXRyZWhvem90dCBHeUlLIGJlamVneXrDqXNlayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnTGVnam9iYiAxMCBHeUlLIGJlamVneXrDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICdBIGvDtnZldGtlesWRIGFsa2F0ZWfDs3Jpw6FqYTonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICdOaW5jcyDDqXJ0w6lrZWzDqXMga2l2w6FsYXN6dHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBsb3Jlcid9ID0gJ0LDtm5nw6lzesWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ255aWx2w6Fub3MgKMO2c3N6ZXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdrw7xsc8WRICjDvGd5ZsOpbCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJ2JlbHPFkSAow7xneWludMOpesWRKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdLZXpkxZEgbmFwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnS2V6ZMWRIGjDs25hcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnS2V6ZMWRIMOpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAnWsOhcsOzIG5hcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdaw6Fyw7MgaMOzbmFwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB5ZWFyJ30gPSAnWsOhcsOzIMOpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICdLw7ZzesO2bmrDvGsgYSBzemF2YXphdMOhdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdNw6FyIHN6YXZhem90dCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdHeUlLIGJlamVneXrDqXMgbnlvbXRhdMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnR3lJSyBiZWplZ3l6w6lzZWsgKGxlZ2pvYmIgMTApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAnR3lJSyBiZWplZ3l6w6lzZWsgKMO6am9ubmFuIGzDqXRyZWhvenZhKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnR3lJSyBiZWplZ3l6w6lzZWsgKGxlZ3V0w7NiYiBtw7Nkb3PDrXR2YSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJ30gPSAnR3lJSyBrYXRlZ8OzcmlhIGZyaXNzw610dmUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdHeUlLIGthdGVnw7NyaWEgaG96esOhYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnRWd5IGthdGVnw7NyacOhbmFrIHJlbmRlbGtlem5pZSBrZWxsIG7DqXZ2ZWwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICdFeiBhIGthdGVnw7NyaWEgbcOhciBsw6l0ZXppayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAnR3lJSyBueWVsdiBob3p6w6FhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICdHeUlLIG55ZWx2IGZyaXNzw610dmUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ0EgbsOpdiBrw7Z0ZWxlesWRISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0V6IGEgbnllbHYgbcOhciBsw6l0ZXppayEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ltcHRvbSd9ID0gJ0plbGVuc8OpZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2x1dGlvbid9ID0gJ01lZ29sZMOhcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ0d5SUsgYmVqZWd5esOpcyBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICdLdWxjc3N6YXZhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ0VneSBrYXRlZ8OzcmlhIGvDtnRlbGV6xZEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnSsOzdsOhaGFnecOhcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdHeUlLIGthdGVnw7NyaWEga2V6ZWzDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAnS2F0ZWfDs3JpYSBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnS2F0ZWfDs3JpYSB0w7ZybMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPSyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdLYXRlZ8OzcmlhIGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAnS2F0ZWfDs3JpYSBzemVya2VzenTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAnVsOhbGFzc3pvbiBsZWdhbMOhYmIgZWd5IGpvZ29zdWx0c8OhZyBjc29wb3J0b3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICfDnGd5aW50w6l6xZFjc29wb3J0b2ssIGFtZWx5ZWsgaG96esOhZsOpcm5layBhIGJlamVneXrDqXNla2hleiBlYmJlbiBhIGthdGVnw7NyacOhYmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnQSBiw7ZuZ8Opc3rFkWJlbiBtZWdqZWd5esOpc2vDqW50IGZvZyBtZWdqZWxlbm5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAnVmFsw7NiYW4gdMO2csO2bG5pIHN6ZXJldG7DqSBlenQgYSBrYXRlZ8OzcmnDoXQ/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0KICAgICAgICAnTmVtIHTDtnLDtmxoZXRpIGV6dCBhIGthdGVnw7NyacOhdC4gTGVnYWzDoWJiIGVneSBHeUlLIGJlamVneXrDqXNiZW4gaGFzem7DoWxqw6FrIMOpcy92YWd5IGxlZ2Fsw6FiYiBlZ3kgbcOhc2lrIGthdGVnw7NyaWEgc3rDvGzFkWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnRXp0IGEga2F0ZWfDs3Jpw6F0IGEga8O2dmV0a2V6xZEgR3lJSyBiZWplZ3l6w6lzZWtuw6lsIGhhc3puw6FsasOhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdFeiBhIGthdGVnw7NyaWEgYSBrw7Z2ZXRrZXrFkSBhbGthdGVnw7NyacOhayBzesO8bMWRamUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnVmFsw7NiYW4gdMO2csO2bG5pIHN6ZXJldG7DqSBlenQgYSBHeUlLIGJlamVneXrDqXN0Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICdHeUlLJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdHeUlLIGLDtm5nw6lzesWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ0d5b3JzIGtlcmVzw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICdIZWx5ZXR0ZXPDrXTFkSBrYXJha3RlcmVrIGVuZ2Vkw6lseWV6ZXR0ZWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJ1NwZWNpw6FsaXMga2VyZXPDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ0Fsa2F0ZWfDs3Jpw6FrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ0d5SUsgYmVqZWd5esOpc2VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnTmVtIHRhbMOhbGhhdMOzayBhbGthdGVnw7NyacOhay4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZid9ID0gJ0VsxZF6bcOpbnllayc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdOZW0gdGFsw6FsaGF0w7NrIEd5SUsgbmFwbMOzIGFkYXRvay4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnR3lJSyBueWVsdmtlemVsw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAnSGFzem7DoWxqYSBlenQgYSBzem9sZ8OhbHRhdMOhc3QsIGhhIHTDtmJiIG55ZWx2dmVsIHN6ZXJldG5lIGRvbGdvem5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICdOeWVsdiBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAnJXMgbnllbHYgdMO2cmzDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ055ZWx2IGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnTnllbHYgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnVmFsw7NiYW4gdMO2csO2bG5pIHN6ZXJldG7DqSBlenQgYSBueWVsdmV0Pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBsYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUhJ30gPQogICAgICAgICdOZW0gdMO2csO2bGhldGkgZXp0IGEgbnllbHZldC4gTGVnYWzDoWJiIGVneSBHeUlLIGJlamVneXrDqXNiZW4gaGFzem7DoWxqw6FrISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJ0V6dCBhIG55ZWx2ZXQgYSBrw7Z2ZXRrZXrFkSBHeUlLIGJlamVneXrDqXNla27DqWwgaGFzem7DoWxqw6FrJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnS8O2cm55ZXpldCBiZcOhbGzDrXTDoXNvayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICdHeUlLIGJlamVneXrDqXNlayBvbGRhbGFua8OpbnQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnTmVtIHRhbMOhbGhhdMOzayBHeUlLIGFkYXRvay4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3JkJ30gPSAnS3VsY3NzesOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgKGUuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCknfSA9ICdTemF2YXrDoXMgKHDDqWxkw6F1bCBFcXVhbHMgMTAgdmFneSBHcmVhdGVyVGhhbiA2MCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSAoZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUpJ30gPSAnw4lydMOpa2Vsw6lzIChww6lsZMOhdWwgRXF1YWxzIDI1JSB2YWd5IEdyZWF0ZXJUaGFuIDc1JSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92ZWQnfSA9ICdKw7N2w6FoYWd5b3R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1V0b2xqw6FyYSBtw7Nkb3PDrXRvdHRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAnR3lJSyBiZWplZ3l6w6lzIGzDqXRyZWhvesOhc2kgaWRlamUgKGVsxZF0dC91dMOhbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJldHdlZW4pJ30gPSAnR3lJSyBiZWplZ3l6w6lzIGzDqXRyZWhvesOhc2kgaWRlamUgKGvDtnrDtnR0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ0d5SUsgYmVqZWd5esOpcyBtw7Nkb3PDrXTDoXNpIGlkZWplIChlbMWRdHQvdXTDoW4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ0d5SUsgYmVqZWd5esOpcyBtw7Nkb3PDrXTDoXNpIGlkZWplIChrw7Z6w7Z0dCknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUUZ1bGx0ZXh0J30gPSAnR3lJSyBzemFiYWQgc3phdmFzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgU2VhcmNoJ30gPSAnR3lJSyBrZXJlc8Opcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJ1Byb2ZpbCBraXbDoWxhc3p0w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUnfSA9ICdTemF2YXrDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJ05pbmNzZW5layBzemF2YXrDoXNpIGJlw6FsbMOtdMOhc29rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHZvdGVzJ30gPSAnQWRvdHQgc3phdmF6YXRvayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjAnfSA9ICdww6lsZMOhdWwgRXF1YWxzIDEwIHZhZ3kgR3JlYXRlclRoYW4gNjAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSd9ID0gJ8OJcnTDqWtlbMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNldHRpbmdzJ30gPSAnTmluY3NlbmVrIMOpcnTDqWtlbMOpc2kgYmXDoWxsw610w6Fzb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgcmF0ZSd9ID0gJ0Fkb3R0IMOpcnTDqWtlbMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSd9ID0gJ3DDqWxkw6F1bCBFcXVhbHMgMjUlIHZhZ3kgR3JlYXRlclRoYW4gNzUlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAnR3lJSyBiZWplZ3l6w6lzIGzDqXRyZWhvesOhc2kgaWRlamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgZGF0ZSd9ID0gJ0Fkb3R0IGTDoXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIHJhbmdlJ30gPSAnRMOhdHVtdGFydG9tw6FueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSd9ID0gJ0d5SUsgYmVqZWd5esOpcyBtw7Nkb3PDrXTDoXNpIGlkZWplJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0d5SUsgaW5mb3Jtw6FjacOzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcnfSA9ICfDiXJ0w6lrZWzDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICc1LWLFkWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZXMnfSA9ICdTemF2YXphdG9rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ05lbSB0YWzDoWxoYXTDs2sgc3phdmF6YXRvayEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ05lbSB0YWzDoWxoYXTDs2sgc3phdmF6YXRvayEgTGVneWVuIGF6IGVsc8WRLCBha2kgw6lydMOpa2VsaSBlenQgYSBHeUlLIGJlamVneXrDqXN0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnTWVsbMOpa2xldCBsZXTDtmx0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJ0Ega8O2dmV0a2V6xZEgbGXDrXLDoXNpIGJsb2trb2tiYW4gbMOpdsWRIGhpdmF0a296w6Fzb2sgbWVnbnlpdMOhc8OhaG96IGxlaGV0c8OpZ2VzLCBob2d5IGxlIGtlbGwgbnlvbW5pYSBhIEN0cmwgdmFneSBDbWQgdmFneSBTaGlmdCBiaWxsZW50ecWxdCwgbWlrw7Z6YmVuIGEgaGl2YXRrb3rDoXNyYSBrYXR0aW50IChhIGLDtm5nw6lzesWRasOpdMWRbCDDqXMgb3BlcsOhY2nDs3MgcmVuZHN6ZXLDqXTFkWwgZsO8Z2fFkWVuKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPQogICAgICAgICdNZW5ueWlyZSB2b2x0IGhhc3pub3MgZXogYSBiZWplZ3l6w6lzPyBLw6lyasO8ayBrw7xsZGplIGVsIG5la8O8bmsgYXogw6lydMOpa2Vsw6lzw6l0IGEgR3lJSyBhZGF0YsOhemlzIHTDtmvDqWxldGVzw610w6lzw6loZXouIEvDtnN6w7ZuasO8ayEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICduZW0gaGFzem5vcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICduYWd5b24gaGFzem5vcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgdGl0bGUgdG8gYXJ0aWNsZSBzdWJqZWN0J30gPSAnR3lJSyBjw61tIGhvenrDoWFkw6FzYSBhIGJlamVneXrDqXMgdMOhcmd5w6Fob3onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnR3lJSyBzesO2dmVnIGJlc3rDunLDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSd9ID0gJ1RlbGplcyBHeUlLIGJlc3rDunLDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0d5SUsgaGl2YXRrb3rDoXMgYmVzesO6csOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJ0d5SUsgc3rDtnZlZyDDqXMgaGl2YXRrb3rDoXMgYmVzesO6csOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRICYgTGluayd9ID0gJ1RlbGplcyBHeUlLIMOpcyBoaXZhdGtvesOhcyBiZXN6w7pyw6FzYSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ05lbSB0YWzDoWxoYXTDs2sgR3lJSyBiZWplZ3l6w6lzZWsuJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICdTemFiYWQtc3phdmFzIGtlcmVzw6lzIGEgR3lJSyBiZWplZ3l6w6lzZWtiZW4gKHDDqWxkw6F1bCDigJ5KKm5vc+KAnSB2YWd5IOKAnktvdirigJ0pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgcmVzdHJpY3Rpb25zJ30gPSAnU3phdmF6w6FzaSBrb3Jsw6F0b3rDoXNvayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHZvdGVzLi4uJ30gPSAnQ3NhayBhIHN6YXZhemF0b2trYWwgcmVuZGVsa2V6xZEgR3lJSyBiZWplZ3l6w6lzZWvigKYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSByZXN0cmljdGlvbnMnfSA9ICfDiXJ0w6lrZWzDqXMga29ybMOhdG96w6Fzb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCByYXRlLi4uJ30gPSAnQ3NhayBheiDDqXJ0w6lrZWzDqXNzZWwgcmVuZGVsa2V6xZEgR3lJSyBiZWplZ3l6w6lzZWvigKYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCd9ID0gJ0NzYWsgYXogZWtrb3IgbMOpdHJlaG96b3R0IEd5SUsgYmVqZWd5esOpc2VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQgYmV0d2Vlbid9ID0gJ0NzYWsgYXogZSBrw7Z6w7Z0dCBsw6l0cmVob3pvdHQgR3lJSyBiZWplZ3l6w6lzZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/J30gPSAnS2VyZXPDqXNpIHByb2ZpbCBzYWJsb25rw6ludD8nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBOdW1iZXInfSA9ICdCZWplZ3l6w6lzc3rDoW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICdCZWplZ3l6w6lzZWsga2VyZXPDqXNlIGt1bGNzc3phdmFra2FsJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ055aWx2w6Fub3MnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFNob3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIHRvIEZBUSBFeHBsb3Jlcid9ID0gJ1Zpc3N6YSBhIEd5SUsgYsO2bmfDqXN6xZFow7Z6JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUUpvdXJuYWwucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnR3lJSyBuYXBsw7MnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgdXBkYXRlJ30gPSAnVXRvbHPDsyBmcmlzc8OtdMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRHluYW1pYyBGaWVsZHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0ZBUS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBhcnRpY2xlIGlzIGVtcHR5ISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9CiAgICAgICAgJ0VneSBzesWxcsWRIGEgSFRNTCBraW1lbmV0aGV6LCBob2d5IGhpdmF0a296w6Fzb2thdCBhZGpvbiBlZ3kgbWVnaGF0w6Fyb3pvdHQgc3rDtnZlZyBtw7Znw6kuIEF6IEltYWdlIGVsZW0ga8OpdGbDqWxlIGJlbWVuZXRldCBmb2dhZC4gQXogZWxzxZEgYSBrw6lwIG5ldmUgKHDDqWxkw6F1bCBmYXEucG5nKS4gRWJiZW4gYXogZXNldGJlbiBheiBPVFJTIGvDqXBlayDDunR2b25hbGEgbGVzeiBmZWxoYXN6bsOhbHZhLiBBIG3DoXNvZGlrIGxlaGV0xZFzw6lnIGEga8OpcHJlIG11dGF0w7MgaGl2YXRrb3rDoXMgYmVzesO6csOhc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ1NTIHN6w61uIGEgc3phdmF6w6FzIGVyZWRtw6luecOpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnR3lvcnPDrXTDs3TDoXIgaWTFkSBhIEd5SUsgZWxlbWVrIGVsaGFnecOhc8OhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnS2F0ZWfDs3JpYWtlemVsw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ0Egc3phdmF6w6FzaSBlcmVkbcOpbnkgdGl6ZWRlc2plZ3llaW5layBzesOhbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICdBbGFww6lydGVsbWV6ZXR0IGthdGVnw7NyaWFuw6l2Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnQSBHeUlLIGJlamVneXrDqXNlayBhbGFww6lydGVsbWV6ZXR0IG55ZWx2ZSBlZ3lueWVsdsWxIG3Ds2RiYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJ0VneSBHeUlLIGJlamVneXrDqXNiZW4gbWVnamVsZW7DrXRlbmTFkSBjw61tZWsgYWxhcMOpcnRlbG1lemV0dCBsZWduYWd5b2JiIG3DqXJldGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9CiAgICAgICAgJ0EgamVneWVrIGFsYXDDqXJ0ZWxtZXpldHQgcHJpb3JpdMOhc2EgYSBHeUlLIGJlamVneXrDqXNlayBqw7N2w6FoYWd5w6Fzw6Fuw6FsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAnQSBHeUlLIGJlamVneXrDqXMgYWxhcMOpcnRlbG1lemV0dCDDoWxsYXBvdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdBIGplZ3llayBhbGFww6lydGVsbWV6ZXR0IMOhbGxhcG90YSBhIEd5SUsgYmVqZWd5esOpc2VrIGrDs3bDoWhhZ3nDoXPDoW7DoWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0EgamVneWVrIGFsYXDDqXJ0ZWxtZXpldHQgdMOtcHVzYSBhIEd5SUsgYmVqZWd5esOpc2VrIGrDs3bDoWhhZ3nDoXPDoW7DoWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPQogICAgICAgICdBIG3FsXZlbGV0IHBhcmFtw6l0ZXIgYWxhcMOpcnRlbG1lemV0dCDDqXJ0w6lrZSBhIG55aWx2w6Fub3MgZWzFkXTDqXRwcm9ncmFtbsOhbC4gQSBtxbF2ZWxldCBwYXJhbcOpdGVydCBhIHJlbmRzemVyIHBhcmFuY3Nmw6FqbGphaWJhbiBoYXN6bsOhbGrDoWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBpZiB0aGUgRkFRIHRpdGxlIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gYXJ0aWNsZSBzdWJqZWN0Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSwgaG9neSBhIEd5SUsgY8OtbcOpdCDDtnNzemUga2VsbC1lIGbFsXpuaSBhIGJlamVneXrDqXMgdMOhcmd5w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9CiAgICAgICAgJ0VneSDDoXR0ZWtpbnTFkSBtb2R1bHQgaGF0w6Fyb3ogbWVnIGVneSBHeUlLIG5hcGzDsyBraXMgbsOpemV0w6luZWsgbWVnamVsZW7DrXTDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0KICAgICAgICAnRWd5IMOhdHRla2ludMWRIG1vZHVsdCBoYXTDoXJveiBtZWcgZWd5IEd5SUsgbGlzdGEga2lzIG7DqXpldMOpbmVrIG1lZ2plbGVuw610w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgR3lJSyBhdHRyaWLDunR1bW90IGEgR3lJSyByZW5kZXrDqXNoZXogYXogw7xneWludMOpesWRaSBmZWzDvGxldCBHeUlLIGtlcmVzw6lzw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgR3lJSyBhdHRyaWLDunR1bW90IGEgR3lJSyByZW5kZXrDqXNoZXogYXogw7xneWbDqWxmZWzDvGxldCBHeUlLIGtlcmVzw6lzw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBheiBhbGFww6lydGVsbWV6ZXR0IEd5SUsgYXR0cmliw7p0dW1vdCBhIEd5SUsgcmVuZGV6w6lzaGV6IGEgbnlpbHbDoW5vcyBmZWzDvGxldCBHeUlLIGtlcmVzw6lzw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBheiBhbGFww6lydGVsbWV6ZXR0IEd5SUsgYXR0cmliw7p0dW1vdCBhIEd5SUsgcmVuZGV6w6lzaGV6IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgR3lJSyBiw7ZuZ8Opc3rFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgR3lJSyBhdHRyaWLDunR1bW90IGEgR3lJSyByZW5kZXrDqXNoZXogYXogw7xneWbDqWxmZWzDvGxldCBHeUlLIGLDtm5nw6lzesWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgR3lJSyBhdHRyaWLDunR1bW90IGEgR3lJSyByZW5kZXrDqXNoZXogYSBueWlsdsOhbm9zIGZlbMO8bGV0IEd5SUsgYsO2bmfDqXN6xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBheiBhbGFww6lydGVsbWV6ZXR0IEd5SUsgc29ycmVuZGV0IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgR3lJSyBiw7ZuZ8Opc3rFkWrDqW5layBlcmVkbcOpbnnDqWJlbi4gRmVsOiBsZWdyw6lnZWJiaSBmZWzDvGxyZS4gTGU6IGxlZ8O6amFiYiBmZWzDvGxyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgR3lJSyBzb3JyZW5kZXQgYXogw7xneWbDqWxmZWzDvGxldCBHeUlLIGLDtm5nw6lzesWRasOpbmVrIGVyZWRtw6luecOpYmVuLiBGZWw6IGxlZ3LDqWdlYmJpIGZlbMO8bHJlLiBMZTogbGVnw7pqYWJiIGZlbMO8bHJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgR3lJSyBzb3JyZW5kZXQgYSBueWlsdsOhbm9zIGZlbMO8bGV0IEd5SUsgYsO2bmfDqXN6xZFqw6luZWsgZXJlZG3DqW55w6liZW4uIEZlbDogbGVncsOpZ2ViYmkgZmVsw7xscmUuIExlOiBsZWfDumphYmIgZmVsw7xscmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgZWd5IGtlcmVzw6lzaSBlcmVkbcOpbnkgYWxhcMOpcnRlbG1lemV0dCBHeUlLIHNvcnJlbmRqw6l0IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4gRmVsOiBsZWdyw6lnZWJiaSBmZWzDvGxyZS4gTGU6IGxlZ8O6amFiYiBmZWzDvGxyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBlZ3kga2VyZXPDqXNpIGVyZWRtw6lueSBhbGFww6lydGVsbWV6ZXR0IEd5SUsgc29ycmVuZGrDqXQgYXogw7xneWbDqWxmZWzDvGxldGVuLiBGZWw6IGxlZ3LDqWdlYmJpIGZlbMO8bHJlLiBMZTogbGVnw7pqYWJiIGZlbMO8bHJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBlZ3kga2VyZXPDqXNpIGVyZWRtw6lueSBhbGFww6lydGVsbWV6ZXR0IEd5SUsgc29ycmVuZGrDqXQgYSBueWlsdsOhbm9zIGZlbMO8bGV0ZW4uIEZlbDogbGVncsOpZ2ViYmkgZmVsw7xscmUuIExlOiBsZWfDumphYmIgZmVsw7xscmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBheiBhbGFww6lydGVsbWV6ZXR0ZW4gbWVnamVsZW7DrXRldHQgR3lJSyBrZXJlc8Opc2kgYXR0cmliw7p0dW1vdCBhIEd5SUsga2VyZXPDqXMga8OpcGVybnnFkW7DqWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGluZm9ybWF0aW9uIHRvIGJlIGluc2VydGVkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4gIkZ1bGwgRkFRIiBpbmNsdWRlcyB0ZXh0LCBhdHRhY2htZW50cyBhbmQgaW5saW5lIGltYWdlcy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgZWd5IEd5SUstYWxhcMO6IGplZ3liZSBiZXN6w7pyYW5kw7MgaW5mb3Jtw6FjacOza2F0LiBBIOKAnlRlbGplcyBHeUlL4oCdIHN6w7Z2ZWdldCwgbWVsbMOpa2xldGVrZXQgw6lzIHNvcmvDtnppIGvDqXBla2V0IHRhcnRhbG1hei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiTGltaXQiIGRlZmluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc3BsYXllZCBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIHZlesOpcmzFkXB1bHQgaMOhdHTDqXJwcm9ncmFtIHBhcmFtw6l0ZXJlaXQuIEEg4oCeS29ybMOhdOKAnSBoYXTDoXJvenphIG1lZyBheiBhbGFww6lydGVsbWV6ZXR0ZW4gbWVnamVsZW7DrXRldHQgYmVqZWd5esOpc2VrIHN6w6Ftw6F0LiBBIOKAnkNzb3BvcnTigJ0gaGFzem7DoWxoYXTDsyBhIGhvenrDoWbDqXLDqXMga29ybMOhdG96w6Fzw6Fob3ogYSBixZF2w610bcOpbnlyZSAocMOpbGTDoXVsIENzb3BvcnQ6IGFkbWluO2Nzb3BvcnQxO2Nzb3BvcnQyOykuIEF6IOKAnkFsYXDDqXJ0ZWxtZXpldHTigJ0gamVsemksIGhhIGEgYsWRdsOtdG3DqW55IGFsYXDDqXJ0ZWxtZXpldHRlbiBlbmdlZMOpbHllenZlIHZhbiwgdmFneSBoYSBhIGZlbGhhc3puw6Fsw7NuYWsga8OpenplbCBrZWxsIGVuZ2Vkw6lseWV6bmllIGF6dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIG1lZ2plbGVuw610ZXR0IG9zemxvcG9rYXQgYSBHeUlLIGLDtm5nw6lzesWRYmVuLiBFbm5layBhIGJlw6FsbMOtdMOhc25hayBuaW5jcyBoYXTDoXNhIGF6IG9zemxvcCBoZWx5emV0w6lyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEgbWVnamVsZW7DrXRldHQgb3N6bG9wb2thdCBhIEd5SUsgbmFwbMOzYmFuLiBFbm5layBhIGJlw6FsbMOtdMOhc25hayBuaW5jcyBoYXTDoXNhIGF6IG9zemxvcCBoZWx5emV0w6lyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBtZWdqZWxlbsOtdGV0dCBvc3psb3Bva2F0IGEgR3lJSyBrZXJlc8WRYmVuLiBFbm5layBhIGJlw6FsbMOtdMOhc25hayBuaW5jcyBoYXTDoXNhIGF6IG9zemxvcCBoZWx5emV0w6lyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICdNZWdoYXTDoXJvenphLCBob2d5IGEg4oCeR3lJSyBiZXN6w7pyw6FzYeKAnSBoaXZhdGtvesOhcyBob2wgbGVneWVuIG1lZ2plbGVuw610dmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ0EgR3lJSyBlbGVtIHN6YWJhZCBzesO2dmVnZXMgbWV6xZFqw6luZWsgbWVnaGF0w6Fyb3rDoXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICdBIEd5SUsgdMO2cmzDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCBHeUlLIGhvenrDoWFkw6FzYSBrw6lwZXJuecWRasOpbiBtZWdqZWxlbsOtdGV0dCBkaW5hbWlrdXMgbWV6xZFrLiBMZWhldHPDqWdlcyBiZcOhbGzDrXTDoXNvazogMCA9IExldGlsdHZhLCAxID0gRW5nZWTDqWx5ZXp2ZSwgMiA9IEVuZ2Vkw6lseWV6dmUgw6lzIGvDtnRlbGV6xZEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0F6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgR3lJSyBzemVya2VzenTDqXNlIGvDqXBlcm55xZFqw6luIG1lZ2plbGVuw610ZXR0IGRpbmFtaWt1cyBtZXrFkWsuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gTGV0aWx0dmEsIDEgPSBFbmdlZMOpbHllenZlLCAyID0gRW5nZWTDqWx5ZXp2ZSDDqXMga8O2dGVsZXrFkS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0F6IMO8Z3lmw6lsZmVsw7xsZXQgR3lJSyDDoXR0ZWtpbnTFkSBrw6lwZXJuecWRasOpbiBtZWdqZWxlbsOtdGV0dCBkaW5hbWlrdXMgbWV6xZFrLiBMZWhldHPDqWdlcyBiZcOhbGzDrXTDoXNvazogMCA9IExldGlsdHZhLCAxID0gRW5nZWTDqWx5ZXp2ZSwgMiA9IEVuZ2Vkw6lseWV6dmUgw6lzIGvDtnRlbGV6xZEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnQSBueWlsdsOhbm9zIGZlbMO8bGV0IEd5SUsgw6F0dGVraW50xZEga8OpcGVybnnFkWrDqW4gbWVnamVsZW7DrXRldHQgZGluYW1pa3VzIG1lesWRay4gTGVoZXRzw6lnZXMgYmXDoWxsw610w6Fzb2s6IDAgPSBMZXRpbHR2YSwgMSA9IEVuZ2Vkw6lseWV6dmUsIDIgPSBFbmdlZMOpbHllenZlIMOpcyBrw7Z0ZWxlesWRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0F6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgR3lJSyBueW9tdGF0w6FzYSBrw6lwZXJuecWRasOpbiBtZWdqZWxlbsOtdGV0dCBkaW5hbWlrdXMgbWV6xZFrLiBMZWhldHPDqWdlcyBiZcOhbGzDrXTDoXNvazogMCA9IExldGlsdHZhLCAxID0gRW5nZWTDqWx5ZXp2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdBeiDDvGd5ZsOpbGZlbMO8bGV0IEd5SUsgbnlvbXRhdMOhc2Ega8OpcGVybnnFkWrDqW4gbWVnamVsZW7DrXRldHQgZGluYW1pa3VzIG1lesWRay4gTGVoZXRzw6lnZXMgYmXDoWxsw610w6Fzb2s6IDAgPSBMZXRpbHR2YSwgMSA9IEVuZ2Vkw6lseWV6dmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0EgbnlpbHbDoW5vcyBmZWzDvGxldCBHeUlLIG55b210YXTDoXNhIGvDqXBlcm55xZFqw6luIG1lZ2plbGVuw610ZXR0IGRpbmFtaWt1cyBtZXrFkWsuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gTGV0aWx0dmEsIDEgPSBFbmdlZMOpbHllenZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCBHeUlLIGtlcmVzw6lzIGvDqXBlcm55xZFqw6luIG1lZ2plbGVuw610ZXR0IGRpbmFtaWt1cyBtZXrFkWsuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gTGV0aWx0dmEsIDEgPSBFbmdlZMOpbHllenZlLCAyID0gRW5nZWTDqWx5ZXp2ZSDDqXMgYWxhcMOpcnRlbG1lemV0dGVuIG1lZ2plbGVuw610dmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdBeiDDvGd5ZsOpbGZlbMO8bGV0IEd5SUsga2VyZXPDqXMga8OpcGVybnnFkWrDqW4gbWVnamVsZW7DrXRldHQgZGluYW1pa3VzIG1lesWRay4gTGVoZXRzw6lnZXMgYmXDoWxsw610w6Fzb2s6IDAgPSBMZXRpbHR2YSwgMSA9IEVuZ2Vkw6lseWV6dmUsIDIgPSBFbmdlZMOpbHllenZlIMOpcyBhbGFww6lydGVsbWV6ZXR0ZW4gbWVnamVsZW7DrXR2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdBIG55aWx2w6Fub3MgZmVsw7xsZXQgR3lJSyBrZXJlc8OpcyBrw6lwZXJuecWRasOpbiBtZWdqZWxlbsOtdGV0dCBkaW5hbWlrdXMgbWV6xZFrLiBMZWhldHPDqWdlcyBiZcOhbGzDrXTDoXNvazogMCA9IExldGlsdHZhLCAxID0gRW5nZWTDqWx5ZXp2ZSwgMiA9IEVuZ2Vkw6lseWV6dmUgw6lzIGFsYXDDqXJ0ZWxtZXpldHRlbiBtZWdqZWxlbsOtdHZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNtYWxsIGZvcm1hdCBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdBeiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IEd5SUsga2lzIGZvcm3DoXR1bcO6IMOhdHRla2ludMWRIGvDqXBlcm55xZFqw6luIG1lZ2plbGVuw610ZXR0IGRpbmFtaWt1cyBtZXrFkWsuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gTGV0aWx0dmEsIDEgPSBFbmdlZMOpbHllenZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCBHeUlLIG5hZ3nDrXTDoXMga8OpcGVybnnFkWrDqW4gbWVnamVsZW7DrXRldHQgZGluYW1pa3VzIG1lesWRay4gTGVoZXRzw6lnZXMgYmXDoWxsw610w6Fzb2s6IDAgPSBMZXRpbHR2YSwgMSA9IEVuZ2Vkw6lseWV6dmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdBeiDDvGd5ZsOpbGZlbMO8bGV0IEd5SUsgbmFnecOtdMOhcyBrw6lwZXJuecWRasOpbiBtZWdqZWxlbsOtdGV0dCBkaW5hbWlrdXMgbWV6xZFrLiBMZWhldHPDqWdlcyBiZcOhbGzDrXTDoXNvazogMCA9IExldGlsdHZhLCAxID0gRW5nZWTDqWx5ZXp2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdBIG55aWx2w6Fub3MgZmVsw7xsZXQgR3lJSyBuYWd5w610w6FzIGvDqXBlcm55xZFqw6luIG1lZ2plbGVuw610ZXR0IGRpbmFtaWt1cyBtZXrFkWsuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gTGV0aWx0dmEsIDEgPSBFbmdlZMOpbHllenZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnQSBHeUlLIHN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ1TDtmJiIG55ZWx2IGVuZ2Vkw6lseWV6w6lzZSBhIEd5SUsgbW9kdWxiYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAnU3phdmF6w6FzaSBtZWNoYW5pem11cyBlbmdlZMOpbHllesOpc2UgYSBHeUlLIG1vZHVsYmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnR3lJSyBuYXBsw7Mgw6F0dGVraW50xZEg4oCea2lz4oCdIGtvcmzDoXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdHeUlLIMOhdHRla2ludMWRIOKAnmtpc+KAnSBrb3Jsw6F0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ09sZGFsYW5rw6ludGkgR3lJSyBrb3Jsw6F0IGEg4oCea2lz4oCdIEd5SUsgbmFwbMOzIMOhdHRla2ludMWRbsOpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnT2xkYWxhbmvDqW50aSBHeUlLIGtvcmzDoXQgYSDigJ5raXPigJ0gR3lJSyDDoXR0ZWtpbnTFkW7DqWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0F6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgR3lJSyBrZXJlc8Opc2kgaMOhdHTDqXJwcm9ncmFtIMO6dHbDoWxhc3p0w7NqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICdHeUlLLXRlcsO8bGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNCd9ID0gJzQuIG1lesWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNSd9ID0gJzUuIG1lesWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0VsxZF0w6l0cHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBhIG55aWx2w6Fub3MgZmVsw7xsZXRoZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0Nzb3BvcnQgYSBHeUlLIGJlamVneXrDqXNlayBqw7N2w6FoYWd5w6FzaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnQSBHeUlLIGVsxZF6bcOpbnllaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnQmVsc8WRIG1lesWRayBmZWx2w6l0ZWxlIGVneSBHeUlLLWFsYXDDuiBqZWd5ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnTWluZGVuIG1lesWRIG5ldsOpbmVrIGZlbHbDqXRlbGUgZWd5IEd5SUstYWxhcMO6IGplZ3liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrIHNlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnQXpvayBhIGZlbMO8bGV0ZWssIGFob2wgYSBneW9ycyBrZXJlc8Opc25layBtZWcga2VsbCBqZWxlbm5pZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ05hcGzDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnTnllbHZrZXplbMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICdNw6FzaWsgb2JqZWt0dW0gaG96esOha2FwY3NvbMOhc2EgZWhoZXogYSBHeUlLIGVsZW1oZXonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnw4FsbGFwb3R0w61wdXNvayBsaXN0w6FqYSwgYW1lbHllayBoYXN6bsOhbGhhdMOzayBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ8OBbGxhcG90dMOtcHVzb2sgbGlzdMOhamEsIGFtZWx5ZWsgaGFzem7DoWxoYXTDs2sgYXogw7xneWbDqWxmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnw4FsbGFwb3R0w61wdXNvayBsaXN0w6FqYSwgYW1lbHllayBoYXN6bsOhbGhhdMOzayBhIG55aWx2w6Fub3MgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCBHeUlLIGLDtm5nw6lzesWRIGVyZWRtw6luecOpYmVuIG1lZ2plbGVuw610ZW5kxZEgR3lJSyBiZWplZ3l6w6lzZWsgbGVnbmFneW9iYiBzesOhbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0F6IMO8Z3lmw6lsZmVsw7xsZXQgR3lJSyBiw7ZuZ8Opc3rFkSBlcmVkbcOpbnnDqWJlbiBtZWdqZWxlbsOtdGVuZMWRIEd5SUsgYmVqZWd5esOpc2VrIGxlZ25hZ3lvYmIgc3rDoW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQSBueWlsdsOhbm9zIGZlbMO8bGV0IEd5SUsgYsO2bmfDqXN6xZEgZXJlZG3DqW55w6liZW4gbWVnamVsZW7DrXRlbmTFkSBHeUlLIGJlamVneXrDqXNlayBsZWduYWd5b2JiIHN6w6FtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0F6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBsw6l2xZEgR3lJSyBuYXBsw7NiYW4gbWVnamVsZW7DrXRlbmTFkSBHeUlLIGJlamVneXrDqXNlayBsZWduYWd5b2JiIHN6w6FtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kga2VyZXPDqXMgZXJlZG3DqW55w6liZW4gbWVnamVsZW7DrXRlbmTFkSBHeUlLIGJlamVneXrDqXNlayBsZWduYWd5b2JiIHN6w6FtYSBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGtlcmVzw6lzIGVyZWRtw6luecOpYmVuIG1lZ2plbGVuw610ZW5kxZEgR3lJSyBiZWplZ3l6w6lzZWsgbGVnbmFneW9iYiBzesOhbWEgYXogw7xneWbDqWxmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kga2VyZXPDqXMgZXJlZG3DqW55w6liZW4gbWVnamVsZW7DrXRlbmTFkSBHeUlLIGJlamVneXrDqXNlayBsZWduYWd5b2JiIHN6w6FtYSBhIG55aWx2w6Fub3MgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBIEd5SUsgYsO2bmfDqXN6xZFiZW4gbWVnamVsZW7DrXRlbmTFkSBHeUlLIGJlamVneXrDqXNiZW4gbMOpdsWRIGPDrW1layBsZWduYWd5b2JiIG3DqXJldGUgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0EgR3lJSyBiw7ZuZ8Opc3rFkWJlbiBtZWdqZWxlbsOtdGVuZMWRIEd5SUsgYmVqZWd5esOpc2JlbiBsw6l2xZEgY8OtbWVrIGxlZ25hZ3lvYmIgbcOpcmV0ZSBheiDDvGd5ZsOpbGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0EgR3lJSyBiw7ZuZ8Opc3rFkWJlbiBtZWdqZWxlbsOtdGVuZMWRIEd5SUsgYmVqZWd5esOpc2JlbiBsw6l2xZEgY8OtbWVrIGxlZ25hZ3lvYmIgbcOpcmV0ZSBhIG55aWx2w6Fub3MgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQSBHeUlLIGtlcmVzxZFiZW4gbWVnamVsZW7DrXRlbmTFkSBHeUlLIGJlamVneXrDqXNiZW4gbMOpdsWRIGPDrW1layBsZWduYWd5b2JiIG3DqXJldGUgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBIEd5SUsga2VyZXPFkWJlbiBtZWdqZWxlbsOtdGVuZMWRIEd5SUsgYmVqZWd5esOpc2JlbiBsw6l2xZEgY8OtbWVrIGxlZ25hZ3lvYmIgbcOpcmV0ZSBheiDDvGd5ZsOpbGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBIEd5SUsga2VyZXPFkWJlbiBtZWdqZWxlbsOtdGVuZMWRIEd5SUsgYmVqZWd5esOpc2JlbiBsw6l2xZEgY8OtbWVrIGxlZ25hZ3lvYmIgbcOpcmV0ZSBhIG55aWx2w6Fub3MgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0EgR3lJSyBuYXBsw7NiYW4gbWVnamVsZW7DrXRlbmTFkSBHeUlLIGJlamVneXrDqXNiZW4gbMOpdsWRIGPDrW1layBsZWduYWd5b2JiIG3DqXJldGUgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgbW9kdWwgYSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsIGVsxZHDoWxsw610w6Fzw6Fob3ogYSByw7Z2aWQgR3lJSyBrZXJlc8Opc2hleiBhIG55aWx2w6Fub3MgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgbW9kdWwgYSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsIGVsxZHDoWxsw610w6Fzw6Fob3ogYSByw7Z2aWQgR3lJSyBrZXJlc8Opc2hleiBheiDDvGd5ZsOpbGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9CiAgICAgICAgJ0VneSBtb2R1bCBhIEhUTUwgT3BlblNlYXJjaCBwcm9maWwgZWzFkcOhbGzDrXTDoXPDoWhveiBhIHLDtnZpZCBHeUlLIGtlcmVzw6lzaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICfDmmogR3lJSyBiZWplZ3l6w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJ0F6IMO6aiBHeUlLIGJlamVneXrDqXNlayBqw7N2w6FoYWd5w6FzYSBzesO8a3PDqWdlcyBhIGvDtnp6w6l0w6l0ZWzDvGsgZWzFkXR0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBeiDDvGd5ZsOpbGZlbMO8bGV0IEd5SUsgYsO2bmfDqXN6xZFqw6liZW4gbWVnamVsZW7DrXRlbmTFkSBHeUlLIGJlamVneXrDqXNlayBzesOhbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBIG55aWx2w6Fub3MgZmVsw7xsZXQgR3lJSyBiw7ZuZ8Opc3rFkWrDqWJlbiBtZWdqZWxlbsOtdGVuZMWRIEd5SUsgYmVqZWd5esOpc2VrIHN6w6FtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGtlcmVzw6lzaSBlcmVkbcOpbnkgbWluZGVuIG9sZGFsw6FuIG1lZ2plbGVuw610ZW5kxZEgR3lJSyBiZWplZ3l6w6lzZWsgc3rDoW1hIGF6IMO8Z3lmw6lsZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBrZXJlc8Opc2kgZXJlZG3DqW55IG1pbmRlbiBvbGRhbMOhbiBtZWdqZWxlbsOtdGVuZMWRIEd5SUsgYmVqZWd5esOpc2VrIHN6w6FtYSBhIG55aWx2w6Fub3MgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICdBIG1lZ2plbGVuw610ZXR0IGVsZW1layBzesOhbWEgYSBsZWd1dMOzYmIgbcOzZG9zw610b3R0YWtiYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAnQSBtZWdqZWxlbsOtdGV0dCBlbGVtZWsgc3rDoW1hIGEgbGVndXTDs2JiIGzDqXRyZWhvem90dGFrYmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJ0EgbWVnamVsZW7DrXRldHQgZWxlbWVrIHN6w6FtYSBhIGxlZ2pvYmIgMTAgc3pvbGfDoWx0YXTDoXNiYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9CiAgICAgICAgJ1BhcmFtw6l0ZXJlayBhIGtpcyBHeUlLIG5hcGzDsyDDoXR0ZWtpbnTFkSBvbGRhbGFpaG96IChhbWVseWVrYmVuIGEgR3lJSyBlbGVtZWsgbWVnamVsZW5uZWspLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnUGFyYW3DqXRlcmVrIGEga2lzIEd5SUsgw6F0dGVraW50xZEgb2xkYWxhaWhveiAoYW1lbHlla2JlbiBhIEd5SUsgZWxlbWVrIG1lZ2plbGVubmVrKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdBIEd5SUsgbnlvbXRhdMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnVsOhcsOzbGlzdGEgYSBHeUlLIGJlamVneXrDqXNlayBqw7N2w6FoYWd5w6Fzw6Fob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnw4lydMOpa2Vsw6lzZWsgYSBzemF2YXrDoXNob3ouIEEga3VsY3NuYWsgc3rDoXphbMOpa2JhbiBrZWxsIGxlbm5pZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJ0d5SUsga2VyZXPDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJ0Egc29ya8O2emkgSFRNTCBtZXrFkWsgYWxhcMOpcnRlbG1lemV0dCBtYWdhc3PDoWfDoW5hayBiZcOhbGzDrXTDoXNhIChrw6lwcG9udGJhbikgYXogQWdlbnRGQVFab29tIGVsZW1iZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnQSBzb3Jrw7Z6aSBIVE1MIG1lesWRayBhbGFww6lydGVsbWV6ZXR0IG1hZ2Fzc8OhZ8OhbmFrIGJlw6FsbMOtdMOhc2EgKGvDqXBwb250YmFuKSBhIEN1c3RvbWVyRkFRWm9vbSAow6lzIFB1YmxpY0ZBUVpvb20pIGVsZW1iZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJ0Egc29ya8O2emkgSFRNTCBtZXrFkWsgbGVnbmFneW9iYiBtYWdhc3PDoWfDoW5hayBiZcOhbGzDrXTDoXNhIChrw6lwcG9udGJhbikgYXogQWdlbnRGQVFab29tIGVsZW1iZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnQSBzb3Jrw7Z6aSBIVE1MIG1lesWRayBsZWduYWd5b2JiIG1hZ2Fzc8OhZ8OhbmFrIGJlw6FsbMOtdMOhc2EgKGvDqXBwb250YmFuKSBhIEN1c3RvbWVyRkFRWm9vbSAow6lzIFB1YmxpY0ZBUVpvb20pIGVsZW1iZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnQSDigJ5HeUlLIGhpdmF0a296w6FzIGJlc3rDunLDoXNh4oCdIGdvbWIgbWVnamVsZW7DrXTDqXNlIGF6IEFnZW50RkFRWm9vbVNtYWxsIG7DqXpldGJlbiBhIG55aWx2w6Fub3MgR3lJSyBiZWplZ3l6w6lzZWtuw6lsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiAvICJJbnNlcnQgRnVsbCBGQVEgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICdBIOKAnkd5SUsgc3rDtnZlZyDDqXMgaGl2YXRrb3rDoXMgYmVzesO6csOhc2HigJ0gLyDigJ5UZWxqZXMgR3lJSyDDqXMgaGl2YXRrb3rDoXMgYmVzesO6csOhc2HigJ0gZ29tYiBtZWdqZWxlbsOtdMOpc2UgYXogQWdlbnRGQVFab29tU21hbGwgbsOpemV0YmVuIGEgbnlpbHbDoW5vcyBHeUlLIGJlamVneXrDqXNla27DqWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPQogICAgICAgICdBIOKAnkd5SUsgc3rDtnZlZyBiZXN6w7pyw6FzYeKAnSAvIOKAnlRlbGplcyBHeUlLIGJlc3rDunLDoXNh4oCdIGdvbWIgbWVnamVsZW7DrXTDqXNlIGEgQWdlbnRGQVFab29tU21hbGwgbsOpemV0bsOpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnR3lJSyBiZWplZ3l6w6lzIG1lZ2plbGVuw610w6lzZSBIVE1MIGZvcm3DoXrDoXNzYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJ0d5SUsgw7p0dm9uYWwgbWVnamVsZW7DrXTDqXNlIGlnZW4vbmVtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnQWxrYXRlZ8OzcmnDoWsgZWxlbWVpbmVrIG1lZ2plbGVuw610w6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnQXogdXRvbGrDoXJhIG3Ds2Rvc8OtdG90dCBlbGVtZWsgbWVnamVsZW7DrXTDqXNlIGEgbWVnaGF0w6Fyb3pvdHQgZmVsw7xsZXRla2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnQXogdXRvbGrDoXJhIGzDqXRyZWhvem90dCBlbGVtZWsgbWVnamVsZW7DrXTDqXNlIGEgbWVnaGF0w6Fyb3pvdHQgZmVsw7xsZXRla2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnQXogbGVnam9iYiAxMCBlbGVtIG1lZ2plbGVuw610w6lzZSBhIG1lZ2hhdMOhcm96b3R0IGZlbMO8bGV0ZWtlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ1N6YXZhesOhcyBtZWdqZWxlbsOtdMOpc2UgYSBtZWdoYXTDoXJvem90dCBmZWzDvGxldGVrZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiwgYW1lbHkgbGVoZXTFkXbDqSB0ZXN6aSBlZ3kgR3lJSyBob3p6w6FrYXBjc29sw6Fzw6F0IGVneSBtw6FzaWsgb2JqZWt0dW1ob3ogYXogw7xneWludMOpesWRaSBmZWzDvGxldG5layBheiBpbHllbiBHeUlLIG5hZ3nDrXTDoXNpIG7DqXpldMOpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuLCBhbWVseSBsZWhldMWRdsOpIHRlc3ppIGVneSBHeUlLIHTDtnJsw6lzw6l0IGFubmFrIG5hZ3nDrXTDoXNpIG7DqXpldMOpbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBlZ3kgR3lJSyBlbMWRem3DqW55ZWluZWsgZWzDqXLDqXPDqWhleiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gYXogZWxlbSBuYWd5w610w6FzaSBuw6l6ZXTDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4gZWd5IEd5SUsgc3plcmtlc3p0w6lzw6loZXogYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGF6IGVsZW0gbmFnecOtdMOhc2kgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgR3lJSyBuYWd5w610w6FzaSBuw6l6ZXTDqWJlIHZhbMOzIHZpc3N6YXTDqXLDqXNoZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBlZ3kgR3lJSyBueW9tdGF0w6Fzw6Fob3ogYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGF6IGVsZW0gbmFnecOtdMOhc2kgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9CiAgICAgICAgJ0VneSBHeUlLIGF6b25vc8OtdMOzamEsIHDDqWxkw6F1bCBGQVEjLCBLQiMsIE15RkFRIy4gQXogYWxhcMOpcnRlbG1lemV0dDogRkFRIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnkZBUeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBtw6FzIOKAnkZBUeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeTm9ybWFs4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeRkFR4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIG3DoXMg4oCeRkFR4oCdIG9iamVrdHVtb2trYWwgYSDigJ5QYXJlbnRDaGlsZOKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5GQVHigJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgbcOhcyDigJ5UaWNrZXTigJ0gb2JqZWt0dW1va2thbCBhIOKAnk5vcm1hbOKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnkZBUeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBtw6FzIOKAnlRpY2tldOKAnSBvYmpla3R1bW9ra2FsIGEg4oCeUGFyZW50Q2hpbGTigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnSmVneSB0w7ZyenNlIGVneSBHeUlLIGJlamVneXrDqXMgasOzdsOhaGFnecOhc8OhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnSmVneSB0w6FyZ3lhIGVneSBHeUlLIGJlamVneXrDqXMgasOzdsOhaGFnecOhc8OhaG96Lic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aXRfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncHViYmxpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICdlc3Rlcm5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdOdW1lcm8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ1VsdGltaSBhcnRpY29saSBGQVEgYWdnaW9ybmF0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdVbHRpbWkgYXJ0aWNvbGkgRkFRIGNyZWF0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnVG9wIDEwIGFydGljb2xpIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ1NvdHRvY2F0ZWdvcmlhIGRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnTmVzc3VuYSB2YWx1dGF6aW9uZSBzZWxlemlvbmF0YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICdFc3Bsb3JhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ3B1YmJsaWNvICh0dXR0aSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ2VzdGVybm8gKGNsaWVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICdpbnRlcm5vIChhZ2VudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IGRheSd9ID0gJ0RhbCBnaW9ybm8gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnRGFsIG1lc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ0RhbGxcJ2Fubm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIGRheSd9ID0gJ0FsIGdpb3Jubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdBbCBtZXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB5ZWFyJ30gPSAnQWxsXCdhbm5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rcyBmb3IgeW91ciB2b3RlISd9ID0gJ0dyYXppZSBwZXIgaWwgdHVvIHZvdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJ30gPSAnSGFpIGdpw6Agdm90YXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJ1N0YW1wYSBhcnRpY29sbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnQXJ0aWNvbGkgRkFRIChQcmltaSAxMCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnRpY29saSBGQVEgKG51b3ZpIGNyZWF0aSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJ0FydGljb2xpIEZBUSAocmVjZW50ZW1lbnRlIG1vZGlmaWNhdGkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0NhdGVnb3JpYSBGQVEgYWdnaW9ybmF0YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJ0NhdGVnb3JpYSBGQVEgYWdnaXVudGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ1VuYSBjYXRlZ29yaWEgZGV2ZSBhdmVyZSB1biBub21lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAnQ2F0ZWdvcmlhIGVzaXN0ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAnTGluZ3VhZ2dpbyBGQVEgYWdnaXVudG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ0xpbmd1YWdnaW8gRkFRIGFnZ2lvcm5hdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ0lsIG5vbWUgw6ggb2JibGlnYXRvcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0xpbmd1YWdnaW8gZXNpc3RlbnRlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTeW1wdG9tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvbHV0aW9uJ30gPSAnU29sdXppb25lJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnQWdnaXVuZ2VyZSBhcnRpY29sbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICdQYXJvbGUgY2hpYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnVW5hIGNhdGVnb3JpYSDDqCBvYmJsaWdhdG9yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdBcHByb3ZhemlvbmUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnR2VzdGlvbmkgQ2F0ZWdvcmllIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdBZ2dpdW5naSBjYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnRWxpbWluYSBjYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdBZ2dpdW5naSBDYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ01vZGlmaWNhIENhdGVnb3JpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1NlbGV6aW9uYXJlIGFsbWVubyB1biBncnVwcG8gZGkgcGVybWVzc2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICdHcnVwcG8gZGkgdGVjbmljaSB0aGUgcHXDsiBhY2NlZGVyZSBhZ2xpIGFyaXRjb2xpIGluIHF1ZXN0YSBjYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ1NhcmFubm8gdmlzaWJpbGkgY29tZSBjb21tZW50aSBpbiBFeHBsb3Jlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ1NpIGRlc2lkZXJhIHZlcmFtZW50ZSBlbGltaW5hcmUgcXVlc3RhIGNhdGVnb3JpYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPQogICAgICAgICdOb24gw6ggcG9zc2liaWxlIGVsaW1pbmFyZSBxdWVzdGEgY2F0ZWdvcmlhLiBWaWVuZSB1dGlsaXp6YXRhIGluIGFsbWVubyB1biBhcnRpY29sbyBlL28gw6ggY29sbGVnYXRhIGFkIGFsbWVubyB1blwnYWx0cmEgY2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnUXVlc3RhIGNhdGVnb3JpYSDDqCB1dGlsaXp6YXRhIG5lbChpKSBzZWd1ZW50ZShpKSBhcnRpY29saSBkZWxsYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnUXVlc3RhIGNhdGVnb3JpYSDDqCBjYXBvZ3J1cHBvIGRlbGxlIHNlZ3VlbnRpIHNvdHRvY2F0ZWdvcmllJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJ1NpIGRlc2lkZXJhIHZlcmFtZW50ZSBlbGltaW5hcmUgcXVlc3RvIGFydGljb2xvIGRpIEZBUT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdFc3Bsb3JhcnRvcmUgZGkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ1JpY2VyY2EgVmVsb2NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICdXaWxkY2FyZCBzb25vIHBlcm1lc3NpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICdSaWNlcmNhIEF2YW56YXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdTb3R0b2NhdGVnb3JpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdBcnRpY29saSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICdOZXNzdW5hIHNvdHRvY2F0ZWdvcmlhIHRyb3ZhdGEuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICdTdG9yaWNvIGRpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJ05lc3N1biBkYXRvIHRyb3ZhdG8gbmVsIFJpZXBpbG9nbyBGQVEuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb25lIExpbmd1YWdnaW8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAnVXRpbGl6emFyZSBxdWVzdGEgZnVuemlvbmUgc2Ugc2kgZGVzaWRlcmEgbGF2b3JhcmUgY29uIHBpw7kgbGluZ3VlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICdBZ2dpdW5naSBsaW5ndWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAnRWxpbWluYSBMaW5ndWEgJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnQWdnaXVuZ2kgTGluZ3VhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICdNb2RpZmljYSBkZWxsYSBsaW5ndWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ1NpIGRlc2lkZXJhIHZlcmFtZW50ZSBlbGltaW5hcmUgcXVlc3RhIGxpbmd1YT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAnTm9uIMOoIHBvc3NpYmlsZSBlbGltaW5hcmUgcXVlc3RhIGxpbmd1YS4gRVwnIHV0aWxpenphdGEgaW4gYWxtZW5vIHVuIGFydGljb2xvIGRlbGxhIEZBUSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdRdWVzdG8gbGluZ3VhZ2dpbyDDqCB1dGlsaXp6YXRvIG5lbChpKSBzZWd1ZW50ZShpKSBhcnRpY29saSBkZWxsYSBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdJbXBvc3RhemlvbmkgZGkgY29udGVzdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnQXJ0aWNvbGkgRkFRIHBlciBwYWdpbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnTmVzc3VuIGRhdG8gZGVsbGEgRkFRIHRyb3ZhdG8uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJ1Bhcm9sYSBjaGlhdmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSAoZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwKSd9ID0gJ1ZvdG8gKGVzOiBVZ3VhbGUgMTAgbyBNYWdnaW9yZSBkaSA2MCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSAoZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUpJ30gPSAnUGVyY2VudHVhbGUgKGVzOiBVZ3VhbGUgMjUlIG8gTWFnZ2lvcmUgZGkgNzUlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJ0FwcHJvdmF0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdVbHRpbWEgbW9kaWZpY2EgZWZmZXR0dWF0YSBkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ0lzdGFudGUgZGkgY3JlYXppb25lIGRlbGxcJ0FydGljb2xvIEZBUSAocHJpbWEvZG9wbyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJldHdlZW4pJ30gPSAnSXN0YW50ZSBkaSBjcmVhemlvbmUgZGVsbFwnQXJ0aWNvbG8gRkFRIChmcmEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAnSXN0YW50ZSBkaSBtb2RpZmljYSBkZWxsXCdBcnRpY29sbyBGQVEgKHByaW1hL2RvcG8pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ0lzdGFudGUgZGkgbW9kaWZpY2EgZGVsbFwnQXJ0aWNvbG8gRkFRIChmcmEpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ0ZBUUZ1bGxUZXh0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgU2VhcmNoJ30gPSAnQ2VyY2EgbmVsbGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2ZpbGUgU2VsZWN0aW9uJ30gPSAnU2VsZXppb25hIFByb2ZpbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJ1ZvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJ05lc3N1bmEgaW1wb3N0YXppb25lIHZvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgdm90ZXMnfSA9ICdWb3RpIHNwZWNpZmljaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjAnfSA9ICdlcy4gVWd1YWxlIGEgMTAgbyBNYWdnaW9yZSBkaSA2MCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlJ30gPSAnUGVyY2VudHVhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZXR0aW5ncyd9ID0gJ05vbiBjaSBzb25vIGltcG9zdGF6aW9uaSBzdWxsYSBwZXJjZW50dWFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyByYXRlJ30gPSAnUGVyY2VudHVhbGUgc3BlY2lmaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlJ30gPSAnZXMuIFVndWFsZSBhIDI1JSBvIE1hZ2dpb3JlIGRpIDc1JSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSd9ID0gJ0lzdGFudGUgZGkgQ3JlYXppb25lIGRlbGxcJ0FydGljb2xvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyBkYXRlJ30gPSAnRGF0YSBzcGVjaWZpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSByYW5nZSd9ID0gJ1BlcmlvZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUnfSA9ICdJc3RhbnRlIGRpIG1vZGlmaWNhIGRlbGxcJ0FydGljb2xvIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hemlvbmkgc3VsbGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ1ZhbHV0YXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnc3UgNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1ZvdGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnTmVzc3VuIHZvdG8gdHJvdmF0byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ05lc3N1biB2b3RvIHRyb3ZhdG8hIFB1b2kgZXNzZXJlIGlsIHByaW1vIGEgdm90YXJlIHF1ZXN0YSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdTY2FyaWNhIEFsbGVnYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0KICAgICAgICAnVmkgw6ggc3RhdG8gdXRpbGUgcXVlc3RvIGFydGljb2xvPyBWaSBwcmVnaGlhbW8gZGkgZGFyZSB1biB2b3RvIHBlciBjb250cmlidWlyZSBhIG1pZ2xpb3JhcmUgaWwgRGF0YWJhc2UgZGVsbGUgRkFRLiBHcmF6aWUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnbm9uIMOoIHN0YXRvIHV0aWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ21vbHRvIHV0aWxlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSB0aXRsZSB0byBhcnRpY2xlIHN1YmplY3QnfSA9ICdBZ2dpdW5naSBpbCB0aXRvbG8gZGVsbGEgRkFRIG5lbCBzb2dnZXR0byBkZWxsXCdhcnRpY29sbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdJbnNlcmlzY2kgaWwgdGVzdG8gZGVsbGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSd9ID0gJ0luc2VyaXNjaSB1bmEgRkFRIGNvbXBsZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0luc2VyaXNjaSBGQVEgTGluayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnSW5zZXJpcmUgVGVzdG8gZSBsaW5rIGRlbGxhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnSW5zZXJpcmUgbGEgRkFRIGNvbXBsZXRhIGUgaWwgTGluayc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ05lc3N1biBhcnRpY29sbyBGQVEgdHJvdmF0by4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ1JpY2VyY2EgdGVzdHVhbGUgbmVnbGkgYXJ0aWNvbGkgRkFRIChhZCBlc2VtcGlvICJKb2huKm4iIG9yICJXaWxsKiIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgcmVzdHJpY3Rpb25zJ30gPSAnUmVzdHJpemlvbmkgc3VsIFZvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLid9ID0gJ1NvbG8gYXJ0aWNvbGkgZGkgRkFRIGNvbiB2b3RpLi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgcmVzdHJpY3Rpb25zJ30gPSAnUmVzdHJpemlvbmkgc3VsbGUgcGVyY2VudHVhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCByYXRlLi4uJ30gPSAnU29sbyBhcnRpY29saSBkaSBGQVEgY29uIHBlcmNlbnR1YWxlLi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQnfSA9ICdTb2xvIGFydGljb2xpIGRpIEZBUSBjcmVhdGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCBiZXR3ZWVuJ30gPSAnU29sbyBhcnRpY29saSBkaSBGQVEgY3JlYXRpIGZyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICdQcm9maWxvIGRpIFJpY2VyY2EgY29tZSBNb2RlbGxvPyc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIE51bWJlcid9ID0gJ051bWVybyBBcnRpY29sbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ0NlcmNhIGFydGljb2xpIGNvbiBwYXJvbGEgY2hpYXZlJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ1B1YmJsaWNvJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayB0byBGQVEgRXhwbG9yZXInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRSm91cm5hbC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgdXBkYXRlJ30gPSAnVWx0aW1vIGFnZ2lvcm5hbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIER5bmFtaWMgRmllbGRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gUmVzdWx0ISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9GQVEucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgYXJ0aWNsZSBpcyBlbXB0eSEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPQogICAgICAgICdVbiBmaWx0cm8gcGVyIGxcJ291dHB1dCBIVE1MIHBlciBhZ2dpdW5nZXJlIGNvbGxlZ2FtZW50aSBhZCB1bmEgc3RyaW5nYSBkZWZpbml0YS4gTFwnZWxlbWVudG8gSW1tYWdpbmUgcGVybWV0dGUgZHVlIHRpcGkgZGkgaW5ncmVzc28uIFByaW1vIGlsIG5vbWUgZGkgdW5cJ2ltbWFnaW5lIChhZCBlc2VtcGlvIGZhcS5wbmcpLiBJbiBxdWVzdG8gY2FzbyB2ZXJyw6AgdXRpbGl6emF0byBpbCBwZXJjb3JzbyBkZWxsZSBpbW1hZ2luaSBkaSBPVFJTLiBMYSBzZWNvbmRhIHBvc3NpYmlsaXTDoCDDqCBxdWVsbGEgZGkgaW5zZXJpcmUgaWwgY29sbGVnYW1lbnRvIGFsbFwnaW1tYWdpbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ29sb3JlIENTUyBwZXIgaWwgcmlzdWx0YXRvIGRlbCB2b3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnVGVtcG8gZGkgZHVyYXRhIG5lbGxhIENhY2hlIGRlbGxlIHZvY2kgZGkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdDYXRlZ29yeSBNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ1Bvc2l6aW9uaSBkZWNpbWFsaSBkZWwgcmlzdWx0YXRvIGRlbCB2b3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAnTm9tZSBQcmVkZWZpbml0byBkZWxsYSBjYXRlZ29yaWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS4nfSA9ICdMaW5ndWEgcHJlZGVmaW5pdGEgcGVyIGdsaSBhcnRpY29saSAgRkFRIHBlciBsYSBtb2RhbGl0w6Agc2luZ29sYSBsaW5ndWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJ0RlZmF1bHQgbnVtZXJvIGRpIGNhdHRlcmkgZGVsIHRpdG9sbyBkaSB1bmEgRkFRIGRhIHZpc3VhbGl6emFyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICdQcmlvcml0w6AgcHJlZGVmaW5pdGEgZGVpIHRpY2tldCBwZXIgbFwnYXBwcm92YXppb25lIGRpIGFydGljb2xpIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJ1N0YXRvIGRpIGRlZmF1bHQgcGVyIGxhIHZvY2UgZGVsbGUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnU3RhdG8gUHJlZGVmaW5pdG8gZGVpIHRpY2tldCBwZXIgbFwnYXBwcm92YXppb25lIGRpIGFydGljb2xpIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnVGlwbyBwcmVkZWZpbml0byBkZWkgdGlja2V0IHBlciBsXCdhcHByb3ZhemlvbmUgZGkgYXJ0aWNvbGkgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0KICAgICAgICAnSWwgdmFsb3JlIHByZWRlZmluaXRvIHBlciBpbCBwYXJhbWV0cm8gQXppb25lIHBlciBpbCBmcm9udGVuZCBwdWJibGljby4gSWwgcGFyYW1ldHJvIEF6aW9uZSB2aWVuZSB1dGlsaXp6YXRvIG5lZ2xpIHNjcmlwdCBkZWwgc2lzdGVtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGlmIHRoZSBGQVEgdGl0bGUgc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBhcnRpY2xlIHN1YmplY3QuJ30gPQogICAgICAgICdEZWZpbmlzY2Ugc2UgaWwgdGl0b2xvIEZBUSBkb3ZyZWJiZSBlc3NlcmUgY29uY2F0ZW5hdG8gY29uIGxcJ29nZ2V0dG8gZGVsbFwnYXJ0aWNvbG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9CiAgICAgICAgJ0RlZmluaXNjZSB1biBtb2R1bG8gcGFub3JhbWljYSBwZXIgbW9zdHJhcmUgdW5hIHZpc3RhIGFiYnJldmlhdGEgZGkgdW5hIGxpc3RhIGRpIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0KICAgICAgICAnRGVmaW5pc2NlIHVuIG1vZHVsbyBwYW5vcmFtaWNhIHBlciBtb3N0cmFyZSBsYSB2aXN0YSBwaWNjb2xhIGRpIHVuYSBsaXN0YSBkaSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmlzY2UgbFwnb3JkaW5lIEZBUSBwcmVkZWZpbml0byBuZWwgcmlzdWx0YXRvIEZBUSBFeHBsb3JlciBkZWxsXCdpbnRlcmZhY2NpYSBjbGllbnRlLiBTdTogbWVubyByZWNlbnRlIHN1bGxhIHBhcnRlIHN1cGVyaW9yZS4gR2nDuTogcGnDuSByZWNlbnRlIGluIGNpbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0RlZmluaXNjZSBsXCdvcmRpbmUgRkFRIHByZWRlZmluaXRvIG5lbCByaXN1bHRhdG8gRkFRIEV4cGxvcmVyIGRlbGxcJ2ludGVyZmFjY2lhIHB1YmJsaWNhLiBTdTogbWVubyByZWNlbnRlIGluIGNpbWEuIEdpw7k6IHBpw7kgcmVjZW50ZSBpbiBjaW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmlzY2UgbFwnb3JkaW5lIEZBUSBwcmVkZWZpbml0byBuZWwgcmlzdWx0YXRvIGRlbGxhIHJpY2VyY2EgbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRlLiBTdTogbWVubyByZWNlbnRlIGluIGNpbWEuIEdpw7k6IHBpw7kgcmVjZW50ZSBpbiBjaW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmlzY2UgbFwnb3JkaW5lIEZBUSBwcmVkZWZpbml0byBuZWwgcmlzdWx0YXRvIGRlbGxhIHJpY2VyY2EgbmVsbFwnaW50ZXJmYWNjaWEgY2xpZW50ZS4gU3U6IG1lbm8gcmVjZW50ZSBpbiBjaW1hLiBHacO5OiBwacO5IHJlY2VudGUgaW4gY2ltYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0RlZmluaXNjZSBsXCdvcmRpbmUgRkFRIHByZWRlZmluaXRvIG5lbCByaXN1bHRhdG8gZGVsbGEgcmljZXJjYSBuZWxsXCdpbnRlcmZhY2NpYSBwdWJibGljYS4gU3U6IG1lbm8gcmVjZW50ZSBpbiBjaW1hLiBHacO5OiBwacO5IHJlY2VudGUgaW4gY2ltYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaW5mb3JtYXRpb24gdG8gYmUgaW5zZXJ0ZWQgaW4gYSBGQVEgYmFzZWQgVGlja2V0LiAiRnVsbCBGQVEiIGluY2x1ZGVzIHRleHQsIGF0dGFjaG1lbnRzIGFuZCBpbmxpbmUgaW1hZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluaXNjZSBsZSBjb2xvbm5lIHZpc2liaWxpIG5lbGxhIHJpY2VyY2EgRkFRLiBRdWVzdGEgb3B6aW9uZSBub24gaGEgZWZmZXR0byBuZWxsYSBwb3NpemlvbmUgZGVsbGEgY29sb25uYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICdEZWZpbmlzY2UgZG92ZSB2ZXJyw6AgdmlzdWFsaXp6YXRvIGlsIGNvbGxlZ2FtZW50byBcJ0luc2VyaXNjaSBGQVFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pemlvbmUgZGVsIGNhbXBvIHRlc3RvIGxpYmVybyBkZWxsZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnRWxpbWluYSBxdWVzdGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzbWFsbCBmb3JtYXQgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnTW9kaWZpY2EgcXVlc3RhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgbXVsdGlwbGUgbGFuZ3VhZ2VzIG9uIEZBUSBtb2R1bGUuJ30gPSAnQWJpbGl0YSBwacO5IGxpbmd1ZSBuZWwgbW9kdWxvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdBYmlsaXRhIG1lY2NhbmlzbW8gZGkgdm90byBuZWwgbW9kdWxvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnU3RvcmljbyBkaSBxdWVzdGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2sgc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiAvICJJbnNlcnQgRnVsbCBGQVEgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiAvICJJbnNlcnQgRnVsbCBGQVEiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6amFfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ+WGhemDqOWQkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICflhazplosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICflpJbpg6jlkJEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ0ZBUeODiuODs+ODkOODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICfmnIDlvozjgavmm7TmlrDjgZXjgozjgZ9GQVHpoIXnm64nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAn5pyA5b6M44Gr5L2c5oiQ44GV44KM44GfRkFR6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICdUb3AgMTAgRkFR6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAn6Kaq44Kr44OG44K044OqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAn6KmV5L6h44GM6YG45oqe44GV44KM44Gm44GE44G+44Gb44KT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAn5LiA6KanJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ+WFrOmWiyAo5YWo5ZOhKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAn5aSW6YOoICjpoaflrqIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICflhoXpg6ggKOaLheW9k+iAhSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAn6ZaL5aeL5pelJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAn6ZaL5aeL5pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IHllYXInfSA9ICfplovlp4vlubQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIGRheSd9ID0gJ+e1guS6huaXpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICfntYLkuobmnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICfntYLkuoblubQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAn6KmV5L6h44KS44GE44Gf44Gg44GN44GC44KK44GM44Go44GG44GU44GW44GE44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJ30gPSAn44GC44Gq44Gf44Gv44GZ44Gn44Gr6KmV5L6h5riI44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAn6KiY5LqL5Y2w5Yi3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJ+S4iuS9jTEw5Lu244Gu6KiY5LqLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAn5paw552A6KiY5LqLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICfmnIDov5Hmm7TmlrDjgZXjgozjgZ/oqJjkuosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJ30gPSAn44Kr44OG44K044Oq44GM5pu05paw44GV44KM44G+44GX44Gf44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICfmlrDjgZfjgYTjgqvjg4bjgrTjg6rjgYzov73liqDjgZXjgozjgb7jgZfjgZ/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAn44CM5ZCN5YmN44CN44Gv5b+F6aCI6aCF55uu44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICfjgZPjga7jgqvjg4bjgrTjg6rjga/jgZnjgafjgavlrZjlnKjjgZfjgabjgYTjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJ+iogOiqnuOBjOi/veWKoOOBleOCjOOBvuOBl+OBn+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICfoqIDoqp7jgYzmm7TmlrDjgZXjgozjgb7jgZfjgZ/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAn44CM5ZCN5YmN44CN44Gv5b+F6aCI6aCF55uu44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJ30gPSAn44GT44Gu6KiA6Kqe44Gv6Kit5a6a5riI44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5bXB0b20nfSA9ICfnl4fnirYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29sdXRpb24nfSA9ICfop6PmsbonOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdGQVHjga7mlrDopo/ov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICfjgq3jg7zjg6/jg7zjg4knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICfjgqvjg4bjgrTjg6rjga/lv4XpoIjpoIXnm67jgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICfmib/oqo0nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnRkFRIOOCq+ODhuOCtOODqueuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICfjgqvjg4bjgrTjg6rjgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAn44Kr44OG44K044Oq44KS5YmK6ZmkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn44Gv44GEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ+OCq+ODhuOCtOODquOCkui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAn44Kr44OG44K044Oq44KS57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAn44Gy44Go44Gk5Lul5LiK44Gu5qip6ZmQ44Gu44Kw44Or44O844OX44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICfjgZPjga7jgqvjg4bjgrTjg6rjgafpoIXnm67jgavjgqLjgq/jgrvjgrnjgafjgY3jgovmi4XlvZPogIXjgrDjg6vjg7zjg5cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ+S4gOimp+OBp+OCs+ODoeODs+ODiOOBqOOBl+OBpuihqOekuuOBleOCjOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAn44GT44Gu44Kr44OG44K044Oq44KS5YmK6Zmk44GX44Gm44KI44KN44GX44GE44Gn44GZ44GL77yfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0KICAgICAgICAn44GT44Gu44Kr44OG44K044Oq44KS5YmK6Zmk44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CC5LiA44Gk5Lul5LiK44GuRkFR6KiY5LqL44Gn5L2/55So44GV44KM44Gm44GE44KL44GL44CB44G+44Gf44Gv5LuW44Gu44Kr44OG44K044Oq44Gu6Kaq44Kr44OG44K044Oq44Gr44Gq44Gj44Gm44GE44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAn44GT44Gu44Kr44OG44K044Oq44Gv5Lul5LiL44Gu6KiY5LqL44Gn5L2/55So44GV44KM44Gm44GE44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJ+OBk+OBruOCq+ODhuOCtOODquOBr+S7peS4i+OBruOCq+ODhuOCtOODquOBruimquOCq+ODhuOCtOODquOBp+OBmeOAgic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICfjgZPjga7oqJjkuovjgpLliYrpmaTjgZfjgabjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdGQVHkuIDopqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVpY2sgU2VhcmNoJ30gPSAn5qSc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICfjg6/jgqTjg6vjg4njgqvjg7zjg4njgYzliKnnlKjlj6/og73jgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAn6auY5qmf6IO95qSc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICfjgrXjg5bjgqvjg4bjgrTjg6onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnRkFR6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAn5a2Q44Kr44OG44K044Oq44Gv44GC44KK44G+44Gb44KT44CCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICflsaXmrbQ6ICc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICfjgrjjg6Pjg7zjg4rjg6vjga7mg4XloLHjgYzjgYLjgorjgb7jgZvjgpPjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnRkFRIOiogOiqnueuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9CiAgICAgICAgJ+WkmuiogOiqnuOBp+S9nOalreOCkuOBl+OBn+OBhOWgtOWQiOOAgeOBk+OBrumgheebruOCkuioreWumuOBl+OBpuOBj+OBoOOBleOBhOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICfoqIDoqp7jgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAn6KiA6Kqe44KS5YmK6ZmkICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ+iogOiqnuOCkui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAn6KiA6Kqe44KS57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nfSA9ICfjgZPjga7oqIDoqp7jgpLliYrpmaTjgZfjgabjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAn44GT44Gu6KiA6Kqe44KS5YmK6Zmk44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CC5LiA44Gk5Lul5LiK44GuRkFR44Gn5L2/55So44GV44KM44Gm44GE44G+44GZ77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAn44GT44Gu6KiA6Kqe44Gv44CB5Lul5LiL44GuRkFR44Gn5L2/55So44GV44KM44Gm44GE44G+44GZ44CCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn6Kit5a6aJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ+ODmuODvOOCuOavjuOBruiomOS6i+aVsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgZGF0YSBmb3VuZC4nfSA9ICdGQVHjg4fjg7zjgr/jga/jgYLjgorjgb7jgZvjgpPjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3JkJ30gPSAn44Kt44O844Ov44O844OJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgKGUuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCknfSA9ICfmipXnpaggKOS+iy4gMTDjgavnrYnjgZfjgYQg44GC44KL44GE44GvIDYw44KI44KK5aSn44GN44GEKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIChlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSknfSA9ICfjg6zjg7zjg4ggKOS+iy4gMjUl44Gr562J44GX44GEIOOBguOCi+OBhOOBryA3NeOCiOOCiuWkp+OBjeOBhCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92ZWQnfSA9ICfmib/oqo0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn5pyA57WC5pu05paw6ICFJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAnRkFR6aCF55uu5L2c5oiQ5pel5pmCICjku6XliY0v5Lul5b6MKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICdGQVHpoIXnm67kvZzmiJDml6XmmYIgKOmWkyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICdGQVHpoIXnm67lpInmm7Tml6XmmYIgKOS7peWJjS/ku6XlvowpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ0ZBUemgheebruWkieabtOaXpeaZgiAo6ZaTKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICdGQVHlhajmlocnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdGQVHmpJzntKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZmlsZSBTZWxlY3Rpb24nfSA9ICfjg5fjg63jg5XjgqHjgqTjg6vpgbjmip4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJ+aKleelqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlIHNldHRpbmdzJ30gPSAn5oqV56Wo44Gu6Kit5a6a44GM44GC44KK44G+44Gb44KTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHZvdGVzJ30gPSAn54m55a6a44Gu5oqV56WoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCd9ID0gJ+S+iy4gMTAg44Gr562J44GX44GE44G+44Gf44GvIDYwIOOCiOOCiuWkp+OBjeOBhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlJ30gPSAn44Os44O844OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2V0dGluZ3MnfSA9ICfjgozjg7zjgajjga7oqK3lrprjgYzjgYLjgorjgb7jgZvjgpMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgcmF0ZSd9ID0gJ+eJueWumuOBruODrOODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSd9ID0gJ+S+iy4gMjUl5Lul5LiK44G+44Gf44GvNzUl5Lul5LiKJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAnRkFR6aCF55uu5L2c5oiQ5pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIGRhdGUnfSA9ICfnibnlrprjga7ml6Xku5gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSByYW5nZSd9ID0gJ+aXpeS7mOOBruevhOWbsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSd9ID0gJ0ZBUemgheebruWkieabtOaZgumWkyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdGQVHmg4XloLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAn44Os44O844OG44Kj44Oz44KwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnNeOBpOaYn+OBruOBhuOBoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1ZvdGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ+aKleelqOOBr+OBguOCiuOBvuOBm+OCk+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAn5oqV56Wo44Gv44GC44KK44G+44Gb44KT44CC44GT44Gu6KiY5LqL44Gr5aeL44KB44Gm6KmV5L6h44KS5oqV56Wo44GX44G+44GX44KH44GG44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICfmt7vku5jjg5XjgqHjgqTjg6vjgpLjg4Djgqbjg7Pjg63jg7zjg4knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJ30gPQogICAgICAgICco5LiA6YOo44GuT1PjgavjgYrjgYTjgabjga8p5LiL6KiY44Gu44Oq44Oz44Kv44KS44Kq44O844OX44Oz44GZ44KL44Gf44KB44Gr44Kv44Oq44OD44Kv5pmC44Gr44CBQ3RybCDjgYLjgovjgYTjga8gQ21kIOOBvuOBn+OBryBTaGlmdOOCreODvOOCkuaKvOS4i+OBmeOCi+W/heimgeOBjOOCi+WgtOWQiOOBjOOBguOCiuOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9CiAgICAgICAgJ+OBk+OBrkZBUemgheebruOBr+OBiuW9ueOBq+OBn+OBoeOBvuOBl+OBn+OBiz8g44CARkFR44OH44O844K/44O844OZ44O844K544Gu5pS55ZaE44Gr5b2556uL44Gm44G+44GZ44Gu44Gn44CB44Os44O844OG44Kj44Oz44Kw44Gr5Y2U5Yqb44GP44Gg44GV44GE44CC44KI44KN44GX44GP44GK6aGY44GE44GX44G+44GZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAn44GC44G+44KK5b2544Gr56uL44Gf44Gq44GL44Gj44GfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ+OBqOOBpuOCguW9ueOBq+eri+OBo+OBnyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgdGl0bGUgdG8gYXJ0aWNsZSBzdWJqZWN0J30gPSAn6aCF55uu44Gu5Li76aGM44GrRkFR44K/44Kk44OI44Or44KS6L+95Yqg44GZ44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCd9ID0gJ+iomOS6i+OCkuaMv+WFpeOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEnfSA9ICdGQVHlhajmlofjgpLmjL/lhaXjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBMaW5rJ30gPSAn44Oq44Oz44Kv44KS5oy/5YWl44GZ44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCAmIExpbmsnfSA9ICfoqJjkuovjgajjg6rjg7Pjgq/jgpLmjL/lhaXjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRICYgTGluayd9ID0gJ0ZBUeWFqOaWh+OBqOODquODs+OCr+OCkuaMv+WFpeOBmeOCiyc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ+ipsuW9k+OBmeOCi+iomOS6i+OBr+OBguOCiuOBvuOBm+OCk+OAgic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpJ30gPSAnRkFR5YWo5paH5qSc57Si77yI5L6L77yaIkpvaG4qbiLjgIEiV2lsbCoi77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgcmVzdHJpY3Rpb25zJ30gPSAn5oqV56Wo6KaP5Yi2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggdm90ZXMuLi4nfSA9ICfmipXnpajjgZXjgozjgabjgYTjgotGQVHjga7jgb8uLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSByZXN0cmljdGlvbnMnfSA9ICfjg6zjg7zjg4jopo/liLYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCByYXRlLi4uJ30gPSAn44Os44O844OI44GV44KM44Gm44GE44KLRkFR44Gu44G/Li4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQnfSA9ICfkvZzmiJDjgZXjgozjgZ9GQVHpoIXnm67jga7jgb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCBiZXR3ZWVuJ30gPSAn5pyf6ZaT5YaF44Gr5L2c5oiQ44GV44KM44GfRkFR6aCF55uu44Gu44G/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaC1Qcm9maWxlIGFzIFRlbXBsYXRlPyd9ID0gJ1NlYXJjaC1Qcm9maWxlLeaknOe0ouODl+ODreODleOCo+ODvOODq+OAgOOCkuODhuODs+ODl+ODrOODvOODiOOBq+OBl+OBvuOBmeOBiz8nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBOdW1iZXInfSA9ICcgRkFRIOmgheebruODiuODs+ODkOODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ+iomOS6i+OBruOCreODvOODr+ODvOODieaknOe0oic7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICflhazplosnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFNob3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIHRvIEZBUSBFeHBsb3Jlcid9ID0gJ0ZBUeOCqOOCr+OCueODl+ODreODvOODqeODvOOBq+aIu+OCiyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFKb3VybmFsLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ0ZBUSDjgrjjg6Pjg7zjg4rjg6snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgdXBkYXRlJ30gPSAn5pyA57WC5pu05paw5pelJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBEeW5hbWljIEZpZWxkcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvRkFRLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGFydGljbGUgaXMgZW1wdHkhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0KICAgICAgICAn44OV44Kj44Or44K/5a6a576p44CALeWumue+qeOBleOCjOOBn+aWh+Wtl+WIl++8iHN0cmluZ++8ieOBq+ODquODs+OCr+OCkui/veWKoOOBmeOCi2h0bWzjgqLjgqbjg4jjg5fjg4Pjg4gtICDjgqjjg6zjg6Hjg7Pjg4jjg7vjgqTjg6Hjg7zjgrjjga/jgIEy56iu6aGe44Gu44Kk44Oz44OX44OD44OI44GM5Y+v6IO944Gn44GZ44CCMeOBpOebruOAgeOCpOODoeODvOOCuOOBruWQjeWJjeOBp+OBmSAo5L6LLiBmYXEucG5nKeOAguOBk+OBruWgtOWQiOOAgU9UUlPjgqTjg6Hjg7zjgrjjg7vjg5HjgrnjgYzkvb/nlKjjgZXjgozjgb7jgZnjgIIy44Gk55uu44CB44Kk44Oh44O844K444Gr44Oq44Oz44Kv44KS5oy/5YWl44GZ44KL44GT44Go44GM5Y+v6IO95oCn44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAn6KmV5L6h44Gu57WQ5p6c6KGo56S644KI44GG44Gu44Kr44Op44O877yI44K544K/44Kk44Or44K344O844OI77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICdGQVHpoIXnm67jgYvjgonpm6LohLHjgZnjgovjgb7jgafjga7jgq3jg6Pjg4Pjgrfjg6XmmYLplpMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ+OCq+ODhuOCtOODquODvOeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICfmipXnpajjga7ntZDmnpzjga7lsI/mlbDngrnku6XkuIvjga7moYHmlbAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJ+aXouWumuOBruOCq+ODhuOCtOODqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAn6KaP5a6a44Gu6KiA6Kqe77yI5Y2Y5LiA6KiA6Kqe44Oi44O844OJ44Gn6YGL55So5pmC77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJ+ODh+ODleOCqeODq+ODiOOBp+ihqOekuuOBleOCjOOCi0ZBUemgheebruOCv+OCpOODiOODq+OBruODh+ODleOCqeODq+ODiOacgOWkp+WApCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICdGQVHjgbjjga7lj5bjgorovrzjgb/jgpLooYzjgYbjg4HjgrHjg4Pjg4jjga7lhKrlhYjpoIbkvY3jga7ml6LlrprlgKQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJ+iomOS6i+OCqOODs+ODiOODquODvOaZguOBruimj+WumuOBruOCueODhuODvOOCv+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnRkFR44G444Gu5Y+W44KK6L6844G/44KS6KGM44GG44OB44Kx44OD44OI44Gu5YSq5YWI6aCG5L2N44Gu5pei5a6a5YCkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0ZBUemgheebruaJv+iqjeeUqOODh+ODleOCqeODq+ODiOODgeOCseODg+ODiOOCv+OCpOODlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0KICAgICAgICAn5YWs6ZaL55S76Z2i55So44OR44Op44Oh44O844K/44Gu44OH44OV44Kp44Or44OI5YCk44CC44OR44Op44Oh44O844K/77yIQWN0aW9uPVhYWFhYWO+8ieOBr+OAgeOCueOCr+ODquODl+ODiOOBp+S9v+eUqOOBleOCjOOBpuOBhOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgaWYgdGhlIEZBUSB0aXRsZSBzaG91bGQgYmUgY29uY2F0ZW5hdGVkIHRvIGFydGljbGUgc3ViamVjdC4nfSA9CiAgICAgICAgJ0ZBUeOCv+OCpOODiOODq+OBjOiomOS6i+OBruS7tuWQjeOBq+mAo+e1kOOBmeOCi+OBi+OBqeOBhuOBi+OCkuWumue+qeOBl+OBvuOBmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPQogICAgICAgICfnsKHmmJPniYhGQVHjgrjjg6Pjg7zjg4rjg6vooajnpLrnlKjjg6Ljgrjjg6Xjg7zjg6vjga7mpoLopoHjgpLlrprnvqknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0KICAgICAgICAn57Ch5piT54mIRkFR5LiA6Kan6KGo56S655So44Oi44K444Ol44O844Or44Gu5qaC6KaB44KS5a6a576pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjgavjgYrjgZHjgovjgIFGQVHmpJzntKLntZDmnpzkuKbjgbPmm7/jgYjjgavliKnnlKjjgZnjgovlsZ7mgKfpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+mhp+WuoueUqOeUu+mdouOBq+OBiuOBkeOCi+OAgUZBUeaknOe0oue1kOaenOS4puOBs+abv+OBiOOBq+WIqeeUqOOBmeOCi+WxnuaAp+mghuOBruaXouWumuWApOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WFrOmWi+eUu+mdouOBq+OBiuOBkeOCi+OAgUZBUeaknOe0oue1kOaenOS4puOBs+abv+OBiOOBq+WIqeeUqOOBmeOCi+WxnuaAp+mghuOBruaXouWumuWApOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODvOODleOCp+OCpOOCue+8iEZBUeS4gOimp++8ieOBq+OBiuOBkeOCi+OAgUZBUeaknOe0oue1kOaenOS4puOBs+abv+OBiOOBq+WIqeeUqOOBmeOCi+WxnuaAp+mghuOBruaXouWumuWApOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+mhp+WuoueUqOeUu+mdou+8iEZBUeS4gOimp++8ieOBq+OBiuOBkeOCi+OAgUZBUeaknOe0oue1kOaenOS4puOBs+abv+OBiOOBq+WIqeeUqOOBmeOCi+WxnuaAp+mghuOBruaXouWumuWApOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICflhazplovnlLvpnaLvvIhGQVHkuIDopqfvvInjgavjgYrjgZHjgovjgIFGQVHmpJzntKLntZDmnpzkuKbjgbPmm7/jgYjjgavliKnnlKjjgZnjgovlsZ7mgKfpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjgavjgYrjgZHjgovjgIFGQVHkuIDopqfjga7ooajnpLrpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIJVcDog5Y+k44GE6aCGIC8gRG93bjog5paw44GX44GE6aCGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAn6aGn5a6i55So55S76Z2i44Gr44GK44GR44KL44CBRkFR5LiA6Kan44Gu6KGo56S66aCG44Gu5pei5a6a5YCk44KS5a6a576p44GX44G+44GZ44CCVXA6IOWPpOOBhOmghiAvIERvd246IOaWsOOBl+OBhOmghic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICflhazplovnlLvpnaLjgavjgYrjgZHjgovjgIFGQVHkuIDopqfjga7ooajnpLrpoIbjga7ml6LlrprlgKTjgpLlrprnvqnjgZfjgb7jgZnjgIJVcDog5Y+k44GE6aCGIC8gRG93bjog5paw44GX44GE6aCGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODvOODleOCp+OCpOOCue+8iEZBUeS4gOimp++8ieOBq+OBiuOBkeOCi+OAgUZBUeaknOe0oue1kOaenOS4puOBs+mghuOBruaXouWumuWApOOCkuWumue+qeOBl+OBvuOBmeOAglVwOiDlj6TjgYTpoIYgLyBEb3duOiDmlrDjgZfjgYTpoIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAn6aGn5a6i55So55S76Z2i44Gr44GK44GR44KL44CBRkFR5qSc57Si57WQ5p6c5Lim44Gz6aCG44Gu5pei5a6a5YCk44KS5a6a576p44GX44G+44GZ44CCVXA6IOWPpOOBhOmghiAvIERvd246IOaWsOOBl+OBhOmghic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAn5YWs6ZaL55S76Z2i44Gr44GK44GR44KL44CBRkFR5qSc57Si57WQ5p6c5Lim44Gz6aCG44Gu5pei5a6a5YCk44KS5a6a576p44GX44G+44GZ44CCVXA6IOWPpOOBhOmghiAvIERvd246IOaWsOOBl+OBhOmghic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJ0ZBUSDmpJzntKLnlLvpnaLjgavooajnpLrjgZXjgozjgotGQVEg5qSc57Si5bGe5oCn44Gu44OH44OV44Kp44Or44OI5YCk44KS5a6a576p44GZ44KL44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGluZm9ybWF0aW9uIHRvIGJlIGluc2VydGVkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4gIkZ1bGwgRkFRIiBpbmNsdWRlcyB0ZXh0LCBhdHRhY2htZW50cyBhbmQgaW5saW5lIGltYWdlcy4nfSA9CiAgICAgICAgJ0ZBUeiomOS6i+OBi+OCieODgeOCseODg+ODiOOBuOOBruaMv+WFpeOBleOCjOOCi+aDheWgseOCkuWumue+qeOBmeOCi+OAguOAjEZBUeOBmeOBueOBpuOAjeOBq+OBr+ODhuOCreOCueODiOODu+a3u+S7mOODu+WPiuOBs+OCpOODs+ODqeOCpOODs+OBrueUu+WDj+OBjOWQq+OBvuOCjOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuJ30gPQogICAgICAgICfjg4Djg4Pjgrfjg6Xjg5zjg7zjg4njga7jg5Djg4Pjgq/jgqjjg7Pjg4njg5Hjg6njg6Hjg7zjgr/jgpLlrprnvqnjgILjgIxMaW1pdCDjg6rjg5/jg4Pjg4jjgI3jga/mqJnmupbjgafooajnpLrjgZXjgozjgovjgqjjg7Pjg4jjg6rjg7zjgpLlrprnvqnjgZfjgb7jgZnjgILjgIxHcm91cCDjgrDjg6vjg7zjg5fjgI3jga/jg5fjg6njgrDjgqTjg7Pjgbjjga7jgqLjgq/jgrvjgrnjgpLliLbpmZDjgZfjgb7jgZnjgIIo5L6LLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMinjgILjgIxEZWZhdWx044CA44OH44OV44Kp44Or44OI44CN44Gv44OX44Op44Kw44Kk44Oz44GM5qiZ5rqW44Gn5pyJ5Yq544Gr44Gq44Gj44Gm44GE44KL44GL44CB44Om44O844K244O844GM5omL5YuV44Gn5pyJ5Yq544Gr44GZ44KL5b+F6KaB44GM44GC44KL44GL44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ+aLheW9k+iAheeUu+mdouOBq+OBiuOBkeOCi+OAgUZBUeS4gOimp+OBp+OBruihqOekuumgheebruOBruioreWumuOAguOBk+OBruioreWumuOBq+OCiOOBo+OBpumgheebruOBruS4puOBs+mghuOCkuWItuW+oeOBmeOCi+OBk+OBqOOBr+OBp+OBjeOBvuOBm+OCk+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ+mhp+WuoueUqOeUu+mdouOBq+OBiuOBkeOCi+OAgUZBUeS4gOimp+OBp+OBruihqOekuumgheebruOBruioreWumuOAguOBk+OBruioreWumuOBq+OCiOOBo+OBpumgheebruOBruS4puOBs+mghuOCkuWItuW+oeOBmeOCi+OBk+OBqOOBr+OBp+OBjeOBvuOBm+OCk+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn5YWs6ZaL55S76Z2i44Gr44GK44GR44KL44CBRkFR5LiA6Kan44Gn44Gu6KGo56S66aCF55uu44Gu6Kit5a6a44CC44GT44Gu6Kit5a6a44Gr44KI44Gj44Gm6aCF55uu44Gu5Lim44Gz6aCG44KS5Yi25b6h44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnRkFR44Oq44Oz44Kv44GM44Gp44GT44Gr6KGo56S644GV44KM44KL44GL5a6a576p44GZ44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ0ZBUeOBruODleODquODvOODhuOCreOCueODiOODleOCo+ODvOODq+ODieOBruWumue+qeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICfjgZPjga7oqJjkuovjgpLliYrpmaQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVHov73liqDnlLvpnaLjgafooajnpLrjgZXjgozjgovli5XnmoTpoJjln5/jgIIg6YG45oqe5Y+v6IO944Gq6Kit5a6a5YCkOiAwID0g54Sh5Yq5LCAxID0g5pyJ5Yq5LCAyID0g5pyJ5Yq5IOOBleOCieOBqyDlv4XpoIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44O844OV44Kn44Kk44K544GuRkFR57eo6ZuG55S76Z2i44Gn6KGo56S644GV44KM44KL5YuV55qE6aCY5Z+f44CCIOmBuOaKnuWPr+iDveOBquioreWumuWApDogMCA9IOeEoeWKuSwgMSA9IOacieWKuSwgMiA9IOacieWKuSDjgZXjgonjgasg5b+F6aCIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVHjgqrjg7zjg5Djg7zjg5Pjg6Xjg7znlLvpnaLjgafooajnpLrjgZXjgozjgovli5XnmoTpoJjln5/jgIIg6YG45oqe5Y+v6IO944Gq6Kit5a6a5YCkOiAwID0g54Sh5Yq5LCAxID0g5pyJ5Yq5LCAyID0g5pyJ5Yq5IOOBleOCieOBqyDlv4XpoIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICflhazplovjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVHov73liqDnlLvpnaLjgafooajnpLrjgZXjgozjgovli5XnmoTpoJjln5/jgIIg6YG45oqe5Y+v6IO944Gq6Kit5a6a5YCkOiAwID0g54Sh5Yq5LCAxID0g5pyJ5Yq5LCAyID0g5pyJ5Yq5IOOBleOCieOBqyDlv4XpoIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVHljbDliLfnlLvpnaLjgafooajnpLrjgZXjgozjgovli5XnmoTpoJjln5/jgIIg6YG45oqe5Y+v6IO944Gq6Kit5a6a5YCkOiAwID0g54Sh5Yq5LCAxID0g5pyJ5Yq5LCAyID0g5pyJ5Yq5IOOBleOCieOBqyDlv4XpoIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfpoaflrqLjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVHljbDliLfnlLvpnaLjgafooajnpLrjgZXjgozjgovli5XnmoTpoJjln5/jgIIg6YG45oqe5Y+v6IO944Gq6Kit5a6a5YCkOiAwID0g54Sh5Yq5LCAxID0g5pyJ5Yq5LCAyID0g5pyJ5Yq5IOOBleOCieOBqyDlv4XpoIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn5YWs6ZaL44Kk44Oz44K/44O844OV44Kn44Kk44K544GuRkFR5Y2w5Yi355S76Z2i44Gn6KGo56S644GV44KM44KL5YuV55qE6aCY5Z+f44CCIOmBuOaKnuWPr+iDveOBquioreWumuWApDogMCA9IOeEoeWKuSwgMSA9IOacieWKuSwgMiA9IOacieWKuSDjgZXjgonjgasg5b+F6aCIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVHmpJzntKLnlLvpnaLjgafooajnpLrjgZXjgozjgovli5XnmoTpoJjln5/jgIIg6YG45oqe5Y+v6IO944Gq6Kit5a6a5YCkOiAwID0g54Sh5Yq5LCAxID0g5pyJ5Yq5LCAyID0g5pyJ5Yq5IOOBleOCieOBqyDjg4fjg5Xjgqnjg6vjg4jjgafooajnpLrjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ+mhp+WuouOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBrkZBUeaknOe0oueUu+mdouOBp+ihqOekuuOBleOCjOOCi+WLleeahOmgmOWfn+OAgiDpgbjmip7lj6/og73jgaroqK3lrprlgKQ6IDAgPSDnhKHlirksIDEgPSDmnInlirksIDIgPSDmnInlirkg44GV44KJ44GrIOODh+ODleOCqeODq+ODiOOBp+ihqOekuuOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ+WFrOmWi+OCpOODs+OCv+ODvOODleOCp+OCpOOCueOBrkZBUeaknOe0oueUu+mdouOBp+ihqOekuuOBleOCjOOCi+WLleeahOmgmOWfn+OAgiDpgbjmip7lj6/og73jgaroqK3lrprlgKQ6IDAgPSDnhKHlirksIDEgPSDmnInlirksIDIgPSDmnInlirkg44GV44KJ44GrIOODh+ODleOCqeODq+ODiOOBp+ihqOekuuOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNtYWxsIGZvcm1hdCBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVEg44Kq44O844OQ44O844OT44Ol44O844CMU+ODleOCqeODvOODnuODg+ODiOOAjeOBp+ihqOekuuOBleOCjOOCi+WLleeahOmgmOWfn+OAgiDpgbjmip7lj6/og73jgaroqK3lrprlgKQ6IDAgPSDnhKHlirksIDEgPSDmnInlirknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBrkZBUSDjgrrjg7zjg6Djgrnjgq/jg6rjg7zjg7PjgafooajnpLrjgZXjgozjgovli5XnmoTpoJjln5/jgIIg6YG45oqe5Y+v6IO944Gq6Kit5a6a5YCkOiAwID0g54Sh5Yq5LCAxID0g5pyJ5Yq5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfpoaflrqLjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVHjgrrjg7zjg6DnlLvpnaLjgavooajnpLrjgZXjgozjgovli5XnmoTpoJjln5/jgIIg6YG45oqe5Y+v6IO944Gq6Kit5a6a5YCkOiAwID0g54Sh5Yq5LCAxID0g5pyJ5Yq5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn5YWs6ZaL44Kk44Oz44K/44O844OV44Kn44Kk44K544GuRkFR44K644O844Og55S76Z2i44Gr6KGo56S644GV44KM44KL5YuV55qE6aCY5Z+f44CCIOmBuOaKnuWPr+iDveOBquioreWumuWApDogMCA9IOeEoeWKuSwgMSA9IOacieWKuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAn44GT44Gu6KiY5LqL44KS57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICflpJroqIDoqp7jgpLmnInlirnjgavjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICfoqZXkvqHjga7mqZ/og73jgpLmnInlirnjgavjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0ZBUeOCuOODo+ODvOODiuODq+S4gOimpyhTKeOBruihqOekuuaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0ZBUeS4gOimpyhTKeOBruihqOekuuaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdGQVHjgrjjg6Pjg7zjg4rjg6vkuIDopqcoUynjga4x44Oa44O844K45q+O44Gu6KGo56S65pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdGQVHkuIDopqcoUynjga4x44Oa44O844K45q+O44Gu6KGo56S65pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjgavjgYrjgZHjgovjgIFGQVHmpJzntKLjga7jg5Djg4Pjgq/jgqjjg7Pjg4njg6vjg7zjgr8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICcgRkFRIOOCqOODquOCoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDQnfSA9ICdGaWVsZDQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ1J30gPSAnRmllbGQ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ+WFrOmWi+eUu+mdouOBruODleODreODs+ODiOOCqOODs+ODieODouOCuOODpeODvOODq+OBruWumue+qSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdGQVHjga7oqJjkuovjga7mib/oqo3jga7jgZ/jgoHjga7jgrDjg6vjg7zjg5cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJ+OBk+OBruiomOS6i+OBruWxpeattCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnRkFR55Sx5p2l44Gu44OB44Kx44OD44OI44Gr5ZCr44G+44KM44KL5YaF6YOo6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnRkFR55Sx5p2l44Gu44OB44Kx44OD44OI44Gr5ZCr44G+44KM44KL5YaF6YOo6aCF55uu44GZ44G544Gm44Gu5ZCN56ewJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrIHNlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAn44Kv44Kk44OD44Kv5qSc57Si44GM6KGo56S644GV44KM44KL55S76Z2iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICfjgrjjg6Pjg7zjg4rjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ+iogOiqnueuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICfjgZPjga7oqJjkuovjgYvjgonku5bjga7oqJjkuovjgbjjga7jg6rjg7Pjgq8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44O844OV44Kn44Kk44K544Gn5Yip55So5Y+v6IO944Gq44K544OG44O844OI44K/44Kk44OX44Oq44K544OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+mhp+WuoueUu+mdouOBp+WIqeeUqOWPr+iDveOBquOCueODhuODvOODiOOCv+OCpOODl+ODquOCueODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5YWs6ZaL55S76Z2i44Gn5Yip55So5Y+v6IO944Gq44K544OG44O844OI44K/44Kk44OX44Oq44K544OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBrkZBUeS4gOimp+OBp+ihqOekuuOBmeOCi+iomOS6i+OBruacgOWkp+aVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfpoaflrqLnlKjnlLvpnaLjga5GQVHkuIDopqfjgafooajnpLrjgZnjgovoqJjkuovjga7mnIDlpKfmlbAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WFrOmWi+eUu+mdouOBrkZBUeS4gOimp+OBp+ihqOekuuOBmeOCi+iomOS6i+OBruacgOWkp+aVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44O844OV44Kn44Kk44K544GuRkFR44K444Oj44O844OK44Or44Gn6KGo56S644GZ44KL6KiY5LqL44Gu5pyA5aSn5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5qSc57Si57WQ5p6c44Go44GX44Gm5ouF5b2T6ICF44Kk44Oz44K/44O844OV44Kn44Kk44K544Gn6KGo56S644GV44KM44KLRkFR6aCF55uu44Gu5pyA5aSn5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5qSc57Si57WQ5p6c44Go44GX44Gm6aGn5a6i55S76Z2i44Gn6KGo56S644GV44KM44KLRkFR6aCF55uu44Gu5pyA5aSn5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aknOe0oue1kOaenOOBqOOBl+OBpuWFrOmWi+eUu+mdouOBp+ihqOekuuOBleOCjOOCi0ZBUemgheebruOBruacgOWkp+aVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBrkZBUSBFeHBsb3JlcuOBp+ihqOekuuOBleOCjOOCi+S7tuWQjeOBrkZBUeiomOS6i+OBruacgOWkp+OCteOCpOOCuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+mhp+WuouOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBrkZBUSBFeHBsb3JlciDjgavooajnpLrjgZXjgozjgovjgIxGQVHpoIXnm67jga7ku7blkI3jgI3jga7mnIDlpKflgKTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5YWs6ZaL44Kk44Oz44K/44O844OV44Kn44Kk44K544GuRkFRIEV4cGxvcmVyIOOBq+ihqOekuuOBleOCjOOCi+OAjEZBUemgheebruOBruS7tuWQjeOAjeOBruacgOWkp+WApOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVEg5qSc57Si44Gn6KGo56S644GV44KM44KL5Lu25ZCN44GuRkFR6KiY5LqL44Gu5pyA5aSn44K144Kk44K6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+mhp+WuouOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBrkZBUSDmpJzntKIg44Gr6KGo56S644GV44KM44KL44CMRkFR6aCF55uu44Gu5Lu25ZCN44CN44Gu5pyA5aSn5YCk44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICflhazplovjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5GQVEg5qSc57SiIOOBq+ihqOekuuOBleOCjOOCi+OAjEZBUemgheebruOBruS7tuWQjeOAjeOBruacgOWkp+WApOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44O844OV44Kn44Kk44K544GuRkFRIOOCuOODo+ODvOODiuODq+OBp+ihqOekuuOBleOCjOOCi+S7tuWQjeOBrkZBUeiomOS6i+OBruacgOWkp+OCteOCpOOCuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICflhazplovjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjgavjgYrjgYTjgabjgIHjgrfjg6fjg7zjg4jjg7vjg4HjgrHjg4Pjg4jmpJzntKLjga7jgZ/jgoHjga5odG1sIE9wZW5TZWFyY2jjg5fjg63jg5XjgqPjg7zjg6vjgpLnlJ/miJDjgZnjgovjg6Ljgrjjg6Xjg7zjg6vjgafjgZknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfpoaflrqLjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjgavjgYrjgYTjgabjgIHjgrfjg6fjg7zjg4jjg7vjg4HjgrHjg4Pjg4jmpJzntKLjga7jgZ/jgoHjga5odG1sIE9wZW5TZWFyY2jjg5fjg63jg5XjgqPjg7zjg6vjgpLnlJ/miJDjgZnjgovjg6Ljgrjjg6Xjg7zjg6vjgafjgZknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0KICAgICAgICAn44K344On44O844OI5qSc57Si44GuaHRtbCBPcGVuU2VhcmNo44OX44Ot44OV44Kj44O844Or44KS55Sf5oiQ44GZ44KL44Oi44K444Ol44O844OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ+aWsOimjyBGQVEg6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJ+aWsOimjyBGQVEg6aCF55uu44KS5YWs6ZaL44GZ44KL44Gr44Gv5LqL5YmN44Gr5om/6KqN44GV44KM44KL44GT44Go44GM5b+F6KaB44Gn44GZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+mhp+WuoueUqOOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBp+ihqOekuuOBleOCjOOCiyBGQVEg6aCF55uu44Gu5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICflhazplovnlKjjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjgafooajnpLrjgZXjgozjgosgRkFRIOmgheebruOBruaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfpoaflrqLnlKjjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrkg5qSc57Si57WQ5p6c6KGo56S644Gu5ZCE55S76Z2i44Gn6KGo56S644GV44KM44KLIEZBUSDpoIXnm67jga7mlbAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WFrOmWi+OCpOODs+OCv+ODvOODleOCp+OCpOOCuSDjga7mpJzntKLntZDmnpzooajnpLrjga7lkITnlLvpnaLjgafooajnpLrjgZXjgozjgosgRkFRIOmgheebruOBruaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjaGFuZ2VzLid9ID0gJ+OAjOacgOi/keOBruWkieabtOOAjeOBq+S9leS7tuOBvuOBp+ihqOekuuOBmeOCi+OBiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjcmVhdGVkLid9ID0gJ+OAjOacgOaWsOOBruaWsOimj+S9nOaIkOOAjeOBq+S9leS7tuOBvuOBp+ihqOekuuOBmeOCi+OBiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJ+OAjOODiOODg+ODlzEw6KiY5LqL44CN44Gr5L2V5Lu244G+44Gn6KGo56S644GZ44KL44GLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9CiAgICAgICAgJ+ewoeaYk+eJiEZBUeOCuOODo+ODvOODiuODq+S4gOimp+OBruODmuODvOOCuOaMh+WumueUqOOBruODkeODqeODoeODvOOCvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn57Ch5piT54mIRkFR5qaC6KaB44Gu44Oa44O844K45oyH5a6a55So44Gu44OR44Op44Oh44O844K/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAn44GT44Gu6KiY5LqL44KS5Y2w5Yi3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ+iomOS6i+aJv+iqjeOCreODpeODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJ+ipleS+oeeOh+OAguOCreODvOOBr+OAgeODkeODvOOCu+ODs+ODiOOBp+aMh+WumuOBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnRkFR44KS5qSc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJ0FnZW50RkFRWm9vbeOBp+ihqOekuuOBleOCjOOCi+OCpOODs+ODqeOCpOODs0hUTUzjga7jg4fjg5Xjgqnjg6vjg4jpq5jjgZUo44OU44Kv44K744Or6KGo6KiYKeOCkuioreWumic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJ0N1c3RvbWVyRkFRWm9vbSAo5Y+K44GzIFB1YmxpY0ZBUVpvb20p44Gn6KGo56S644GV44KM44KL44Kk44Oz44Op44Kk44OzSFRNTOOBruODh+ODleOCqeODq+ODiOmrmOOBlSjjg5Tjgq/jgrvjg6vooajoqJgp44KS6Kit5a6aJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJ0FnZW50RkFRWm9vbeOBp+ihqOekuuOBleOCjOOCi+OCpOODs+ODqeOCpOODs0hUTUzjga7mnIDlpKfjga7pq5jjgZUo44OU44Kv44K744Or6KGo6KiYKeOCkuioreWumic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJ0N1c3RvbWVyRkFRWm9vbSAo5Y+K44GzIFB1YmxpY0ZBUVpvb20p44Gn6KGo56S644GV44KM44KL44Kk44Oz44Op44Kk44OzSFRNTOOBruacgOWkp+OBrumrmOOBlSjjg5Tjgq/jgrvjg6vooajoqJgp44KS6Kit5a6aJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnXCdBZ2VudEZBUVpvb21TbWFsbFwn44Gu6Kit5a6a44CC5YWs6ZaL55S76Z2i44Gr44GK44GE44Gm44CM44Oq44Oz44Kv44KS5oy/5YWl44GZ44KL44CN44Oc44K/44Oz44KS6KGo56S644GZ44KLL+ihqOekuuOBl+OBquOBhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiAvICJJbnNlcnQgRnVsbCBGQVEgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICflhazplovjgZXjgozjgZ9GQVHoqJjkuovjga5BZ2VudEZBUVpvb21TbWFsbOOBqyJGQVHjga7jg4bjgq3jgrnjg4jjgIHjgYrjgojjgbPjg6rjg7Pjgq/jgpLmjL/lhaUiIC8gIkZBUeOBruOBmeOBueOBpuOAgeOBiuOCiOOBs+ODquODs+OCr+OCkuaMv+WFpSIg44Oc44K/44Oz44KS6KGo56S644GZ44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPQogICAgICAgICdBZ2VudEZBUVpvb21TbWFsbOOBqyJGQVHjga7jg4bjgq3jgrnjg4jjgpLmjL/lhaUiIC8gIkZBUeOBruOBmeOBueOBpuOCkuaMv+WFpSLjg5zjgr/jg7PjgpLooajnpLrjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAn6KiY5LqL44GnSFRNTOOCv+OCsOOCkuihqOekuuOBmeOCiy/ooajnpLrjgZfjgarjgYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAn6KiY5LqL44Gu44OR44K544KS6KGo56S644GZ44KLL+ihqOekuuOBl+OBquOBhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAn44K144OW44Kr44OG44K044Oq44O844Gu44OI44OU44OD44Kv44KS6KGo56S644GZ44KLL+ihqOekuuOBl+OBquOBhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICfmnIDmlrDjga7lpInmm7TjgpLooajnpLrjgZnjgovnlLvpnaLvvIjmi4XlvZPogIXnlKgv6aGn5a6i55SoL+WFrOmWi++8ieOCkuWumue+qSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn5pyA5paw44Gu5paw6KaP5L2c5oiQ44KS6KGo56S644GZ44KL55S76Z2i77yI5ouF5b2T6ICF55SoL+mhp+WuoueUqC/lhazplovvvInjgpLlrprnvqknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ+ODiOODg+ODlzEw44KS6KGo56S644GZ44KL55S76Z2i77yI5ouF5b2T6ICF55SoL+mhp+WuoueUqC/lhazplovvvInjgpLlrprnvqknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ+ipleS+oeOCkuihqOekuuOBmeOCi+eUu+mdou+8iOaLheW9k+iAheeUqC/poaflrqLnlKgv5YWs6ZaL77yJ44KS5a6a576pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgRkFRIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIEZBUSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544Gq44Gp44Gu44K644O844Og44O744OT44Ol44O844Gn44CBRkFR44KS5LuW44Gu44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44GV44Gb44KL44Oq44Oz44Kv44KS44Oh44OL44Ol44O844Gr6KGo56S644GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44O844OV44Kn44Kk44K544Gu44K644O844Og44OT44Ol44O844GnRkFR5YmK6Zmk44Gu44Oq44Oz44Kv44KS6KGo56S644GZ44KL44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44O844OV44Kn44Kk44K544Gu44K644O844Og44OT44Ol44O844GnRkFR44Gu5bGl5q2044Gu44Oq44Oz44Kv44KS6KGo56S644GZ44KL44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga7jgrrjg7zjg6Djg5Pjg6Xjg7zjgadGQVHnt6jpm4bjga7jg6rjg7Pjgq/jgpLooajnpLrjgZnjgovjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIEZBUSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBruOCuuODvOODoOODk+ODpeODvOOBp+OAjOaIu+OCi+OAjeOBruODquODs+OCr+OCkuihqOekuuOBmeOCi+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBruOCuuODvOODoOODk+ODpeODvOOBp0ZBUeOCkuWNsOWIt+ODquODs+OCr+OCkuihqOekuuOBmeOCi+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPQogICAgICAgICdGQVHnlKjjga7orZjliKXlrZAg5L6LLiBGQVEjLCBLQiMsIE15RkFRIy4g44OH44OV44Kp44Or44OI44Gn44GvIEZBUSMg44Go44Gq44Gj44Gm44GE44G+44GZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmE5vcm1hbOKAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmEZBUeKAmeOCquODluOCuOOCp+OCr+ODiOOBjOS7luOBruKAmEZBUeKAmeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBleOCjOOCi+OCiOOBhuOBq+OAgeWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmFBhcmVudENoaWxk4oCZ44Oq44Oz44Kv44O744K/44Kk44OX44KS5L2/55So44GX44Gm44CB4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44GM5LuW44Gu4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44GV44KM44KL44KI44GG44Gr44CB5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmE5vcm1hbOKAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmEZBUeKAmeOCquODluOCuOOCp+OCr+ODiOOBjOS7luOBruKAmFRpY2tldOKAmeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBleOCjOOCi+OCiOOBhuOBq+OAgeWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmFBhcmVudENoaWxk4oCZ44Oq44Oz44Kv44O744K/44Kk44OX44KS5L2/55So44GX44Gm44CB4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44GM5LuW44Gu4oCYVGlja2V04oCZ44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44GV44KM44KL44KI44GG44Gr44CB5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdGQVHmib/oqo3jg4HjgrHjg4Pjg4jnlKjjgIDjg4HjgrHjg4Pjg4jmnKzmlocnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0ZBUeaJv+iqjeODgeOCseODg+ODiOeUqOOAgOODgeOCseODg+ODiOS7tuWQjSAnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bXNfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2RhbGFtYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAndW11bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ2x1YXJhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnTm9tYm9yIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdLZW1hc2tpbmkgQXJ0aWtlbCBGQVEgdGVyYmFydSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdNZW5jaXB0YSBhcml0a2VsIEZBUSB0ZXJiYXJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICdBcml0a2VsIEZBUSAxMCB0ZXJiYWlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAnU3ViLWthdGVnb3JpIGRhcmlwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnVGlhZGEga2FkYXIgZGlwaWxpaCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICdQZW5lcm9rYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdVbXVtIChTZW11YSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ2x1YXJhbiAocGVsYW5nZ2FuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnZGFsYW1hbiAoZWplbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAnSGFyaSBtdWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnQnVsYW4gbXVsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnVGFodW4gbXVsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAnSGFyaSBha2hpcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdCdWxhbiBha2hpcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ1RhaHVuIGFraGlyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rcyBmb3IgeW91ciB2b3RlISd9ID0gJ1RlcmltYSBrYXNpaCB1bnR1ayB1bmRpYW4gYW5kYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdBbmQgc3VkYWggbWVuZ3VuZGkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnQXJ0aWtlbCBGQVEgZGljZXRhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICdBcnRpa2VsIEZBUSAoMTAgdGVyYmFpayknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICdBcnRpa2VsIEZBUSAoYmFydSBkaWNpcHRhKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0aWtlbCBGQVEgKGJhcnUgZGl1YmFoKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdLYXRlZ29yaSBGQVEgZGlrZW1hc2tpbmkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdrYXRlZ29yaSBGQVEgZGl0YW1iYWghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0thdGVnb3JpIHBlcmx1IG1lbXB1bnlhaSBuYW1hISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAna2F0ZWdvcmkgaW5pIHN1ZGFoIHd1anVkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAnQmFoYXNhIEZBUSBkaXRhbWJhaCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnQmFoYXNhIEZBUSBkaWtlbWFza2luaSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmFtYSBkaXBlcmx1a2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0JhaGFzYSBpbmkgc3VkYWggd3VqdWQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5bXB0b20nfSA9ICdTaW1wdG9tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvbHV0aW9uJ30gPSAnUGVueWVsZXNhaWFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnVGFtYmFoIGFydGlrZWwgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzJ30gPSAnS2F0YSBrdW5jaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ0thdGVnb3JpIGRpcGVybHVrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnUGVuZ2VzYWhhbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdQZW5ndXJ1c2FuIEthdGVnb3JpIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdUYW1iYWgga2F0ZWdvcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnUGFkYW0ga2F0ZWdvcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdUYW1iYWgga2F0ZWdvcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ0F1ZGl0IEthdGVnb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAnU2lsYSBwaWxpaCBzZWt1cmFuZy1rdXJhbmdueWEgc2F0dSBwZXJtaW50YWFuIGt1bXB1bGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnS3VtcHVsYW4gZWplbiBib2xlaCBtZW5nYWtzZXMgYXJ0aWtlbCBkYWxhbSBrYXRlZ29yaSBpbmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICdBa2FuIGRpcGFwYXJrYW4gc2ViYWdhaSBrb21lbiBkYWxhbSBFeHBsb3Jlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ0FkYWthaCBhbmRhIGluZ2luIG1lbWFkYW0ga2F0ZWdvcmkgaW5pPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9CiAgICAgICAgJ0FuZGEgdGlkYWsgYm9sZWggbWVtYWRhbSBrYXRlZ29yaSBpbmkuIElhIGRpZ3VuYWthbiBkYWxhbSBzZWt1cmFuZy1rdXJhbmdueWEgc2F0dSBhdGlrZWwgRkFRIGRhbi9hdGF1IGFkYWxhaCBpYnViYXBhIGtlcGFkYSBzZWt1cmFuZy1rdXJhbmdueWEgc2F0dSBrYXRlZ29yaSBsYWluISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ0thdGVnb3JpIGluaSBkaWd1bmFrYW4gZGFsYW0gYXRpa2V0IEZBUSBiZXJpa3V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJ0thdGVnb3JpIGluaSBhZGFsYWggaWJ1YmFwYSBrZXBhZGEgc3ViLWthdGVnb3JpIGJlcmlrdXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnQWRha2FoIGFuZGEgaW5naW4gbWVtYWRhbSBhcnRpa2VsIEZBUSBpbmk/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRkFRLUV4cGxvcmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ0NhcmlhbiBQYW50YXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsZGNhcmRzIGFyZSBhbGxvd2VkLid9ID0gJ1dpbGRjYXJkcyBhZGFsYWggZGliZW5hcmthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnQ2FyaWFuIFRlcnBlcmluY2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ1N1Yi1rYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdBcnRpa2V0IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ1RpYWRhIHN1Yi1rYXRlZ29yaSBkaXRlbXVpLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mJ30gPSAnU2VqYXJhaCB1bnR1ayc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdUaWFkYSBkYXRhIEp1cm5hbCBGQVEgZGl0ZW11aS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnUGVuZ3VydXNhbiBCYWhhc2EgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAnR3VuYSBrYWVkYWggaW5pIGppa2EgYW5kYSBpbmdpbiBiZWtlcmphIGRlbmdhbiBwZWxiYWdhaSBiYWhhc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ1RhbWJhaCBiYWhhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAnUGFkYW0gYmFoYXNhICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ1RhbWJhaCBiYWhhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ0F1ZGl0IGJhaGFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnQWRha2FoIGFuZGEgaW5naW4gbWVtYWRhbWthbiBiYWhhc2EgaW5pPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBsYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUhJ30gPQogICAgICAgICdBbmRhIHRpZGFrIGJvbGVoIG1lbWFkYW0gYmFoYXNhIGluaS4gSWEgZGlndW5ha2FuIHNla3VyYW5nLWt1cmFuZ255YSBzYXR1IGFydGlrZWwgRkFRISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJ0JhaGFzYSBpbmkgZGlndW5ha2FuIGRhbGFtIEFydGlrZWwgRkFRIHlhbmcgYmVyaWt1dCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0F0dXJhbiBrb250ZWtzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ0FydGlrZWwgRkFRIHBlciBtdWthIHN1cmF0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ1RpYWRhIGRhdGEgRkFRIGRpdGVtdWkuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJ0thdGEga3VuY2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSAoZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwKSd9ID0gJ1VuZGkgKGNvbnRvaDogQmVyc2FtYWFuIDEwIGF0YXUgbGViaWggYmVzYXIgZGFyaXBhZGEgNjApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgKGUuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlKSd9ID0gJ0thZGFyIChjb250b2g6IEJlcnNhbWFhbiAyNSUgYXRhdSBsZWJpaCBiZXNhciBkYXJpcGFkYSA3NSUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmVkJ30gPSAnRGlsdWx1c2thbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdUZXJha2hpciBkaXViYWggb2xlaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ1dha3R1IGNpcHRhIGFydGlrZWwgRkFRIChzZWJlbHVtL3NlbGVwYXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ1dha3R1IGNpcHRhIGFydGlrZWwgRkFRIChkaSBhbnRhcmEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAnV2FrdHUgcGVydWJhaGFuIGFydGlrZWwgRkFRIChzZWJlbHVtL3NlbGVwYXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ1dha3R1IHBlcnViYWhhbiBhcnRpa2VsIEZBUSAoZGkgYW50YXJhKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICdGQVFUZWtzUGVudWgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdDYXJpYW4gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2ZpbGUgU2VsZWN0aW9uJ30gPSAnUGlsaWhhbiBwcm9maWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJ1VuZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJ1RpYWRhIHRldGFwYW4gdW5kaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyB2b3Rlcyd9ID0gJ1VuZGkgc3Blc2lmaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwJ30gPSAnY29udG9oOiBTYW1hIGRlbmdhbiAxMCBhdGF1IExlYmloIGJlc2FyIGRhcmlwYWRhIDYwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUnfSA9ICdLYWRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNldHRpbmdzJ30gPSAnVGlhZGEgdGV0YXBhbiBrYWRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyByYXRlJ30gPSAnS2FkYXIgc3Blc2lmaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUnfSA9ICdjb250b2g6IFNhbWEgZGVuZ2FuIDI1JSBhdGF1IGxlYmloIGJlc2FyIGRhcmlwYWRhIDc1JSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSd9ID0gJ1dha3R1IGNpcHRhIGFydGlrZWwgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIGRhdGUnfSA9ICdUYXJpa2ggc3Blc2lmaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSByYW5nZSd9ID0gJ0phcmFrIHRhcmlraCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSd9ID0gJ1dha3R1IHBlcnViYWhhbiBhcnRpa2VsIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2kgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ01lbmlsYWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICdkYXJpcGFkYSA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnVW5kaWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ1RpYWRhIHVuZGlhbiBkaXRlbXVpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnVGlhZGEgdW5kaWFuIGRpdGVtdWkhIEphZGlsYWggb3JhbmcgcGVydGFtYSBtZW5pbGFpIGFyaXRsIEZBUSBpbmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdNdWF0IHR1cnVuIGxhbXBpcmFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnVW50dWsgbWVtYnVrYSBwYXV0YW4gZGFsYW0ga2V0ZXJhbmdhbiBibG9rIGJlcmlrdXQsIGFuZGEgbXVuZ2tpbiBwZXJsdSBtZW5la2FuIGtla3VuY2kgQ3RybCBhdGF1IENtZCBhdGF1IFNoaWZ0IHNlbWFzYSBtZW5la2FuIHBhdXRhbiAoYmVyZ2FudHVuZyBrZXBhZGEgcGVsYXlhciBkYW4gc2lzdGVtIG9wZXJhc2kgYW5kYSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0KICAgICAgICAnQmVyYXBhIGJhbnlhayBhcmlrZWwgaW5pIG1lbWJhbnR1PyBTaWxhIGJlcmkga2FtaSBwZW5pbGFpYW4gYW5kYSBkYW4gYmFudHUgdW50dWsgbWVuaW5na2F0a2FuIHBhbmdrYWxhbiBkYXRhIEZBUS4gVGVyaW1hIEthc2loISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ1RpZGFrIG1lbWJhbnR1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ1NhbmdhdCBtZW1iYW50dSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgdGl0bGUgdG8gYXJ0aWNsZSBzdWJqZWN0J30gPSAnVGFtYmFoIHRhanVrIEZBUSBwYWRhIHN1YmplayBhcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCd9ID0gJ01hc3VrIFRla3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSd9ID0gJ01hc3Vra2FuIEZBUSBwZW51aCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICdNYXN1ayBwYXV0YW4gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCAmIExpbmsnfSA9ICdNYXN1ayBUZWtzIEZBUSAmIFBhdXRhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnTWFzdWtrYW4gRkFRIHBlbnVoIGRhbiBwYXV0YW4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICdUaWFkYSBhcnRpa2VsIEZBUSBkaWp1bXBhaS4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ0NhcmlhbiBUZWtzIHBlbnVoIGRhbGFtIGFydGlrZWwgRkFRIChjb250b2guICJKb2huKm4iIG9yICJXaWxsKiIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgcmVzdHJpY3Rpb25zJ30gPSAnU2VrYXRhbiB1bmRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggdm90ZXMuLi4nfSA9ICdIYW55YSBhcnRpa2VsIEZBUSBiZXJzZXJ0YSB1bmRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgcmVzdHJpY3Rpb25zJ30gPSAnU2VrYXRhbiBrYWRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHJhdGUuLi4nfSA9ICdIYW55YSBhcnRpa2VsIEZBUSBiZXJzZXJ0YSBrYWRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkJ30gPSAnSGFueWEgYXJ0aWtlbCBGQVEgeWFuZyBkaWNpcHRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQgYmV0d2Vlbid9ID0gJ0hhbnlhIGFydGlrZWwgRkFRIHlhbmcgZGljaXB0YSBkaSBhbnRhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/J30gPSAnQ2FyaWFuIGJlcnByb2ZpbCBzZWJhZ2FpIHRlbXBsYXQ/JzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgTnVtYmVyJ30gPSAnTm9tYm9yIEFydGlrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICdDYXJpYW4gdW50dWsgYXJ0aWtlbCBkZW5nYW4ga2VrdW5jaSBwZXJrYXRhYW4nOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljJ30gPSAnVW11bSc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnQmFsaWsga2VwYWRhIHBlbmVyb2thIEZBUSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFKb3VybmFsLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ2p1cm5hbCBGQVEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgdXBkYXRlJ30gPSAnS2VtYXNraW5pIGthbGkgdGVyYWtoaXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIER5bmFtaWMgRmllbGRzJ30gPSAnTWVkYW4gRGluYW1payBGQVEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnVGlhZGEgS2VwdXR1c2FuISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9GQVEucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgYXJ0aWNsZSBpcyBlbXB0eSEnfSA9ICdBcnRpa2VsIGluaSBrb3NvbmchJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0KICAgICAgICAnQXNpbmdhbiB1bnR1ayBoYXNpbCBrZWx1YXJhbiB1bnR1ayBtZW5hbWJhaCBwYXV0YW4gZGliZWxha2FuZyBqYXJpbmdhbiBzdHJpbmcuIEVsZW1lbiBnYW1iYXIgZGliZW5hcmthbiBkdWEgaW5wdXQuIHBlcnRhbWEgbmFtYSBnYW1iYXIgdGVyc2VidXQgKGZhcS5wbmcpLiBEYWxhbSBrZXMgaW5pLCBqYWxhbiBnYW1iYXIgT1RSUyBha2FuIGRpZ3VuYWthbi4ga2VkdWFueWEga2VtdW5na2luYW4gYWRhbGFoIHVudHVrIG1lbWFzdWtrYW4gcGF1dGFuIHBhZGEgZ2FtYmFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDU1MgY29sb3IgZm9yIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ1dhcm5hIENTUyB1bnR1ayBrZXB1dHVzYW4gdW5kaWFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnV2FrdHUgY2FjaGUgdW50dWsgbWVuaW5nZ2Fsa2FuIGJhZ2kgaXRlbSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ1Blbmd1cnVzYW4ga2F0ZWdvcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnVGl0aWsgcGVycHVsdWhhbiBkYXJpcGFkYSBrZXB1dHVzYW4gdW5kaWFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAnS2F0ZWdvcmkgbmFtYSBzZWRpYSBhZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS4nfSA9ICdCYWhhc2Egc2VkaWEgYWRhIHVudHVrIGFydGlrZWwgRkFRIHBhZGEgc2F0dSBtb2QgYmFoYXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG1heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24uJ30gPQogICAgICAgICdTYWl6IG1ha3NpbXVtIHRldGFwYW4gYXdhbCBkYXJpcGFkYSB0YWp1ayBkYWxhbSBhcnRpa2VsIEZBUSB1bnR1ayBkaXR1bmp1a2thbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0KICAgICAgICAnS2V1dGFtYWFuIHNlZGlhIGFkYSB0aWtldCB1bnR1ayBwZW5nZXNhaGFuIGFydGlrZWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAnS2VhZGFhbiBzZWRpYSBhZGEgdW50dWsga2VtYXN1a2FuIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0tlYWRhYW4gc2VkaWEgYWRhIHRpa2V0IHVudHVrIHBlbmdlc2FoYW4gZGFyaXBhZGEgYXJ0aWtlbCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0plbmlzIHRldGFwYW4gYXdhbCB0aWtldCB1bnR1ayBrZWx1bHVzYW4gYXJ0aWtlbCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPQogICAgICAgICdOaWxhaSBzZWRpYSBhZGEgdW50dWsgdGluZGFrYW4gcGFyYW1ldGVyIGtlcGFkYSBkZXBhbmFraGlyIHVtdW0uIFRpbmRha2FuIHBhcmFtZXRlciBkaWd1bmFrYW4gZGFsYW0gc2tyaXAgc2lzdGVtIHRlcnNlYnV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgaWYgdGhlIEZBUSB0aXRsZSBzaG91bGQgYmUgY29uY2F0ZW5hdGVkIHRvIGFydGljbGUgc3ViamVjdC4nfSA9CiAgICAgICAgJ1RlbnR1a2FuIGppa2EgdGFqdWsgRkFRIHBlcmx1IGRpcmFuZ2thaWthbiBrZXBhZGEgYXJ0aWtlbCBzdWJqZWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9CiAgICAgICAgJ0tlbmFscGFzdGkgbGloYXQgc2VtdWxhIG1vZHVsIHVudHVrIHBhcGFyIHBhcGFyYW4ga2VjaWwgZGFyaSBKdXJuYWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPQogICAgICAgICdLZW5hbHBhc3RpIGxpaGF0IHNlbXVsYSBtb2R1bCB1bnR1ayBwYXBhciBwYXBhcmFuIGtlY2lsIGRhcmkgc2VuYXJhaSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdLZW5hbHBhc3RpIHNpZmF0IHNlZGlhIGFkYSBGQVEgbWVueXVzdW4gZGFsYW0gY2FyaWFuIEZBUSBkYXJpcGFkYSBpbnRlcmZhY2UgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0tlbmFscGFzdGkgc2lmYXQgc2VkaWEgYWRhIEZBUSBtZW55dXN1biBkYWxhbSBjYXJpYW4gRkFRIGRhcmlwYWRhIGludGVyZmFjZSBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnS2VuYWxwYXN0aSBzaWZhdCBzZWRpYSBhZGEgRkFRIG1lbnl1c3VuIGRhbGFtIGNhcmlhbiBGQVEgZGFyaXBhZGEgaW50ZXJmYWNlIHVtdW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnS2VuYWxwYXN0aSBzaWZhdCBzZWRpYSBhZGEgRkFRIG1lbnl1c3VuIGRhbGFtIGNhcmlhbiBGQVEgZGFyaXBhZGEgZWplbiBpbnRlcmZhY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gdGV0YXBhbiBhd2FsIHNpZmF0IEZBUSB1bnR1ayBzdXN1bmFuIEZBUSBkYWxhbSBwZW5lcm9rYSBGQVEgYW50YXJhIG11a2EgcGVsYW5nZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiB0ZXRhcGFuIGF3YWwgc2lmYXQgRkFRIHVudHVrIHN1c3VuYW4gRkFRIGRhbGFtIHBlbmVyb2thIEZBUSBhbnRhcmEgbXVrYSBvcmFuZyBhd2FtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlcmludGFoIEZBUSBsYWxhaSBkYWxhbSBoYXNpbCBGQVEgRXhwbG9yZXIgYmFnaSBhbnRhcmEgbXVrYSBlamVuLiBBdGFzOiB0ZXJ0dWEgZGkgYXRhcy4gQmF3YWg6IHRlcmtpbmkgZGkgYXRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcGVyaW50YWggRkFRIGxhbGFpIGRhbGFtIGhhc2lsIEZBUSBFeHBsb3JlciBiYWdpIGFudGFyYSBtdWthIHBlbGFuZ2dhbi4gQXRhczogdGVydHVhIGRpIGF0YXMuIEJhd2FoOiB0ZXJraW5pIGRpIGF0YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZXJpbnRhaCBGQVEgbGFsYWkgZGFsYW0gaGFzaWwgRkFRIEV4cGxvcmVyIGJhZ2kgYW50YXJhIG11a2Egb3JhbmcgYXdhbS4gQXRhczogdGVydHVhIGRpIGF0YXMuIEJhd2FoOiB0ZXJraW5pIGRpIGF0YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZXJpbnRhaCBsYWxhaSBGQVEgaGFzaWwgY2FyaWFuIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uIEF0YXM6IHRlcnR1YSBkaSBhdGFzLiBCYXdhaDogdGVyYmFydSBkaSBhdGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcGVyaW50YWggbGFsYWkgRkFRIGhhc2lsIGNhcmlhbiBkYWxhbSBhbnRhcmEgbXVrYSBwZWxhbmdnYW4uIEF0YXM6IHRlcnR1YSBkaSBhdGFzLiBCYXdhaDogdGVyYmFydSBkaSBhdGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlcmludGFoIGxhbGFpIEZBUSBoYXNpbCBjYXJpYW4gZGFsYW0gYW50YXJhIG11a2EgYXdhbS4gQXRhczogdGVydHVhIGRpIGF0YXMuIEJhd2FoOiB0ZXJiYXJ1IGRpIGF0YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGxhbGFpIGRpdHVuanVra2FuIEZBUSBhdHJpYnV0IGNhcmlhbiB1bnR1ayBza3JpbiBGQVEgY2FyaWFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuICJGdWxsIEZBUSIgaW5jbHVkZXMgdGV4dCwgYXR0YWNobWVudHMgYW5kIGlubGluZSBpbWFnZXMuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gbWFrbHVtYXQgeWFuZyBha2FuIGRpbWFzdWtrYW4gZGFsYW0gdGlrZXQgYmVyZGFzYXJrYW4gRkFRLiAiRkFRIFBlbnVoIiB0ZXJtYXN1ayB0ZWtzLCBsYW1waXJhbiBkYW4gaW1laiBzZWJhcmlzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcGFyYW1ldGVyIHVudHVrIGJhY2tlbmQgcGFwYW4gcGVtdWthLiAiSGFkIiBtZW50YWtyaWZrYW4gYmlsYW5nYW4gcGVueWVydGFhbiBkaXBhcGFya2FuIHNlY2FyYSBsYWxhaS4gIkt1bXB1bGFuIiBkaWd1bmFrYW4gdW50dWsgbWVueWVrYXQgYWtzZXMga2VwYWRhIHBsdWdpbiAoY29udG9oOiBLdW1wdWxhbjogYWRtaW47IGdyb3VwMSA7IGdyb3VwMiA7KS4gIkRlZmF1bHQiIG1lbnVuanVra2FuIGppa2EgcGx1Z2luIGluaSBkaWFrdGlma2FuIHNlY2FyYSBsYWxhaSBhdGF1IGppa2EgcGVuZ2d1bmEgcGVybHUgdW50dWsgbWVtYm9sZWhrYW4gc2VjYXJhIG1hbnVhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGxhanVyIG1lbnVuanVra2FuIGRpIEV4cGxvcmVyIEZBUS4gUGlsaWhhbiBpbmkgdGlkYWsgbWVtcHVueWFpIGtlc2FuIGtlIGF0YXMga2VkdWR1a2FuIHRpYW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBydWFuZ2FuIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0ganVybmFsIEZBUS4gUGlsaWhhbiBpbmkgdGlkYWsgbWVtcHVueWFpIGtlc2FuIGtlIGF0YXMga2VkdWR1a2FuIHRpYW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHJ1YW5nYW4geWFuZyBkaXR1bmp1a2thbiBkYWxhbSBjYXJpYW4gRkFRLiBQaWxpaGFuIGluaSB0aWRhayBtZW1wdW55YWkga2VzYW4ga2UgYXRhcyBrZWR1ZHVrYW4gdGlhbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnTWVudGFrcmlma2FuIGRpIG1hbmEgcGF1dGFuIFwnSW5zZXJ0IEZBUVwnIGFrYW4gZGlwYXBhcmthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pc2kgaXRlbSBGQVEgcGVyY3VtYSBiaWRhbmcgdGVrcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnUGFkYW0gRkFRIGluaSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdNZWRhbiBEaW5hbWlrIGRpdHVuanVra2FuIGRhbGFtIHNrcmluIHRhbWJhaCBGQVEgZGFyaSBwYXBhcmFuIGVqZW4uIFRldGFwYW4gS2VtdW5na2luYW46IDAgPSBEaWx1bXB1aGthbiwgMSA9IERpYWt0aWZrYW4sIDIgPSBEaWFrdGlma2FuIGRhbiBEaXBlcmx1a2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdNZWRhbiBEaW5hbWlrIGRpdHVuanVra2FuIGRhbGFtIHNrcmluIGVkaXQgRkFRIGRhcmkgcGFwYXJhbiBlamVuLiBUZXRhcGFuIEtlbXVuZ2tpbmFuOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLCAyID0gRGlha3RpZmthbiBkYW4gRGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ01lZGFuIERpbmFtaWsgZGl0dW5qdWtrYW4gZGFsYW0gc2tyaW4gdGluamF1YW4gRkFRIGRhcmkgcGFwYXJhbiBlamVuLiBUZXRhcGFuIEtlbXVuZ2tpbmFuOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLCAyID0gRGlha3RpZmthbiBkYW4gRGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdNZWRhbiBEaW5hbWlrIGRpdHVuanVra2FuIGRhbGFtIHNrcmluIHRpbmphdWFuIEZBUSBkYXJpIHBhcGFyYW4gb3JhbmcgYXdhbS4gVGV0YXBhbiBLZW11bmdraW5hbjogMCA9IERpbHVtcHVoa2FuLCAxID0gRGlha3RpZmthbiwgMiA9IERpYWt0aWZrYW4gZGFuIERpcGVybHVrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiBjZXRhayBGQVEgZGFyaSBwYXBhcmFuIGVqZW4uIFRldGFwYW4gS2VtdW5na2luYW46IDAgPSBEaWx1bXB1aGthbiwgMSA9IERpYWt0aWZrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiBjZXRhayBGQVEgZGFyaSBwYXBhcmFuIGFudGFyYSBtdWthIHBlbGFuZ2dhbi4gVGV0YXBhbiBLZW11bmdraW5hbjogMCA9IERpbHVtcHVoa2FuLCAxID0gRGlha3RpZmthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiBjZXRhayBGQVEgZGFyaSBwYXBhcmFuIG9yYW5nIGF3YW0uIFRldGFwYW4gS2VtdW5na2luYW46IDAgPSBEaWx1bXB1aGthbiwgMSA9IERpYWt0aWZrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdNZWRhbiBEaW5hbWlrIGRpdHVuanVra2FuIGRhbGFtIHNrcmluIGNhcmlhbiBGQVEgZGFyaSBwYXBhcmFuIGVqZW4uIFRldGFwYW4gS2VtdW5na2luYW46IDAgPSBEaWx1bXB1aGthbiwgMSA9IERpYWt0aWZrYW4sIDIgPSBEaWFrdGlma2FuIGRhbiBEaXBlcmx1a2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiBjYXJpYW4gRkFRIGRhcmkgcGFwYXJhbiBwZWxhbmdnYW4uIFRldGFwYW4gS2VtdW5na2luYW46IDAgPSBEaWx1bXB1aGthbiwgMSA9IERpYWt0aWZrYW4sIDIgPSBEaWFrdGlma2FuIGRhbiBEaXBlcmx1a2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ01lZGFuIERpbmFtaWsgZGl0dW5qdWtrYW4gZGFsYW0gc2tyaW4gY2FyaWFuIEZBUSBkYXJpIHBhcGFyYW4gb3JhbmcgYXdhbS4gVGV0YXBhbiBLZW11bmdraW5hbjogMCA9IERpbHVtcHVoa2FuLCAxID0gRGlha3RpZmthbiwgMiA9IERpYWt0aWZrYW4gZGFuIERpcGVybHVrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc21hbGwgZm9ybWF0IG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ01lZGFuIERpbmFtaWsgZGl0dW5qdWtrYW4gZGFsYW0gc2tyaW4gdGluamF1YW4gZm9ybWF0IGtlY2lsIEZBUSBkYXJpIHBhcGFyYW4gZWplbi4gVGV0YXBhbiBLZW11bmdraW5hbjogMCA9IERpbHVtcHVoa2FuLCAxID0gRGlha3RpZmthbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiB6dW0gRkFRIGRhcmkgcGFwYXJhbiBlamVuLiBUZXRhcGFuIEtlbXVuZ2tpbmFuOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiB6dW0gRkFRIGRhcmkgcGFwYXJhbiBhbnRhcmEgbXVrYSBwZWxhbmdnYW4uIFRldGFwYW4gS2VtdW5na2luYW46IDAgPSBEaWx1bXB1aGthbiwgMSA9IERpYWt0aWZrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiB6dW0gRkFRIGRhcmkgcGFwYXJhbiBvcmFuZyBhd2FtLiBUZXRhcGFuIEtlbXVuZ2tpbmFuOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnQXVkaXQgRkFRIGluaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgbXVsdGlwbGUgbGFuZ3VhZ2VzIG9uIEZBUSBtb2R1bGUuJ30gPSAnQWt0aWZrYW4gcGVsYmFnYWkgYmFoYXNhIHBhZGEgbW9kdWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJ0FrdGlma2FuIHVuZGlhbiBtZWthbmlzbWEgcGFkYSBtb2R1bCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdKdXJuYWwgRkFRIGxpaGF0IHNlbXVsYSAiS2VjaWwiIGhhZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0xpaGF0IHNlbXVsYSBGQVEgaGFkICJrZWNpbCInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnU29hbGFuIExhemltIGhhZCBiYWdpIHNldGlhcCBoYWxhbWFuIHVudHVrIFRpbmphdWFuIEp1cm5hbCBGQVEgIktlY2lsIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ0hhZCBGQVEgc2V0aWFwIGhhbGFtYW4gdW50dWsgVGluamF1YW4gRkFRICJLZWNpbCIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdDYXJpYW4gU29hbGFuIExhemltIGJhY2tlbmQgcm91dGVyIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICdLYXdhc2FuIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDQnfSA9ICdNZWRhbjQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ1J30gPSAnTWVkYW41JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIGFudGFyYSBtdWthIGF3YW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0t1bXB1bGFuIGJhZ2kga2VsdWx1c2FuIGFydGlrZWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnU2VqYXJhaCBGQVEgaW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdUZXJtYXN1ayBiaWRhbmcgZGFsYW1hbiBUaWtldCBiZXJhc2Fza2FuIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdUZXJtYXN1ayBuYW1hIHNldGlhcCBiaWRhbmcgZGFsYW0gVGlrZXQgYmVyYXNhc2thbiBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrIHNlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnQW50YXJhIG11a2EgZGkgbWFuYSBjYXJpYW4gY2VwYXQgaGVuZGFrbGFoIGRpdHVuanVra2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnSnVybmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdQZW5ndXJ1c2FuIEJhaGFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICdGQVEgcGF1dGFuIGluaSBrZXBhZGEgb2JqZWsgbGFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTZW5hcmFpIGplbmlzIGtlYWRhYW4geWFuZyBib2xlaCBkaWd1bmFrYW4gZGFsYW0gcnVhbmcgYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2VuYXJhaSBqZW5pcyBrZWFkYWFuIHlhbmcgYm9sZWggZGlndW5ha2FuIGRhbGFtIHJ1YW5nIGFudGFyYSBtdWthIHBlbGFuZ2dhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1NlbmFyYWkgamVuaXMga2VhZGFhbiB5YW5nIGJvbGVoIGRpZ3VuYWthbiBkYWxhbSBhbnRhcmEgbXVrYSBhd2FtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCaWxhbmdhbiBtYWtzaW11bSBhcnRpa2VsIEZBUSBha2FuIGRpcGFwYXJrYW4gZGFsYW0gaGFzaWwgRkFRIEV4cGxvcmVyIG11a2EgZWplbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCaWxhbmdhbiBtYWtzaW11bSBhcnRpa2VsIEZBUSBha2FuIGRpcGFwYXJrYW4gZGFsYW0gaGFzaWwgRkFRIEV4cGxvcmVyIG11a2EgcGVsYW5nZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCaWxhbmdhbiBtYWtzaW11bSBhcnRpa2VsIEZBUSB5YW5nIGFrYW4gZGlwYXBhcmthbiBkYWxhbSBoYXNpbCBGQVEgRXhwbG9yZXIgYW50YXJhIG11a2EgYXdhbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0JpbGFuZ2FuIG1ha3NpbXVtIEZBUSBhcnRpa2VsIHVudHVrIGRpcGFwYXJrYW4gZGFsYW0ganVybmFsIEZBUSBkaSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQmlsYW5nYW4gbWFrc2ltdW0gYXJ0aWtlbCBGQVEgdW50dWsgZGlwYXBhcmthbiBkYWxhbSBoYXNpbCBjYXJpYW4gZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCaWxhbmdhbiBtYWtzaW11bSBhcnRpa2VsIEZBUSB1bnR1ayBkaXBhcGFya2FuIGRhbGFtIGhhc2lsIGNhcmlhbiBkYWxhbSBhbnRhcmEgbXVrYSBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0JpbGFuZ2FuIG1ha3NpbXVtIGFydGlrZWwgRkFRIHVudHVrIGRpcGFwYXJrYW4gZGFsYW0gaGFzaWwgY2FyaWFuIGRhbGFtIGFudGFyYSBtdWthIGF3YW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2FpeiBtYWtzaW11bSB0YWp1ayBkYWxhbSBhcnRpa2VsIEZBUSB1bnR1ayBkaXR1bmp1a2thbiBkYWxhbSBGQVEgRXhwbG9yZXIgZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTYWl6IG1ha3NpbXVtIHRhanVrIGRhbGFtIGFydGlrZWwgRkFRIHVudHVrIGRpdHVuanVra2FuIGRhbGFtIEZBUSBFeHBsb3JlciBkYWxhbSBhbnRhcmEgbXVrYSBwZWxhbmdnYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2FpeiBtYWtzaW11bSB0YWp1ayBkYWxhbSBhcnRpa2VsIEZBUSB1bnR1ayBkaXR1bmp1a2thbiBkYWxhbSBGQVEgRXhwbG9yZXIgZGFsYW0gYW50YXJhIG11a2EgYXdhbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2FpeiBtYWtzaW11bSB0YWp1ayBkYWxhbSBhcnRpa2VsIEZBUSB1bnR1ayBkaXR1bmp1a2thbiBkaSBGQVEgQ2FyaWFuIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1NhaXogbWFrc2ltdW0gdGFqdWsgZGFsYW0gYXJ0aWtlbCBGQVEgdW50dWsgZGl0dW5qdWtrYW4gZGkgRkFRIENhcmlhbiBkYWxhbSBhbnRhcmEgbXVrYSBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTYWl6IG1ha3NpbXVtIHRhanVrIGRhbGFtIGFydGlrZWwgRkFRIHVudHVrIGRpdHVuanVra2FuIGRpIEZBUSBDYXJpYW4gZGFsYW0gYW50YXJhIG11a2EgYXdhbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1NhaXogbWFrc2ltdW0gdGFqdWsgZGFsYW0gYXJ0aWtlbCBGQVEgdW50dWsgZGl0dW5qdWtrYW4gZGFsYW0ganVybmFsIEZBUSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb2R1bCB1bnR1ayBtZW5qYW5hIHByb2ZpbCBIVE1MIE9wZW5TZWFyY2ggdW50dWsgY2FyaWFuIEZBUSBwZW5kZWsgZGFsYW0gYW50YXJhIG11a2EgYXdhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vZHVsIHVudHVrIG1lbmphbmEgcHJvZmlsIEhUTUwgT3BlblNlYXJjaCB1bnR1ayBjYXJpYW4gZmFxIHBlbmRlayBkYWxhbSBhbnRhcmEgbXVrYSBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9CiAgICAgICAgJ01vZHVsIHVudHVrIG1lbmphbmEgaHRtbCBwcm9maWwgb3BlbnNlYXJjaCB1bnR1ayBjYXJpYW4gZmFxIHJpbmdrYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ1BlcmthcmEgQmFydSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAnQXJ0aWtlbCBiYXJ1IEZBUSBwZXJsdSBrZWx1bHVzYW4gc2ViZWx1bSBtZXJla2EgbWVuZGFwYXQgZGl0ZXJiaXRrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0JpbGFuZ2FuIGFydGlrZWwgRkFRIHVudHVrIGRpcGFwYXJrYW4gZGFsYW0gRXhwbG9yZXIgRkFRIGFudGFyYSBtdWthIHBlbGFuZ2dhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQmlsYW5nYW4gYXJ0aWtlbCBGQVEgdW50dWsgZGlwYXBhcmthbiBkYWxhbSBFeHBsb3JlciBGQVEgYW50YXJhIG11a2EgYXdhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCaWxhbmdhbiBhcnRpa2VsIEZBUSB1bnR1ayBkaXBhcGFya2FuIHBhZGEgc2V0aWFwIGhhbGFtYW4gaGFzaWwgY2FyaWFuIGRhbGFtIGFudGFyYSBtdWthIHBlbGFuZ2dhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQmlsYW5nYW4gYXJ0aWtlbCBGQVEgYWthbiBkaXBhcGFya2FuIHBhZGEgc2V0aWFwIGhhbGFtYW4gaGFzaWwgY2FyaWFuIGRhbGFtIGFudGFyYSBtdWthIGF3YW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnQmlsYW5nYW4gaXRlbSB5YW5nIGRpdHVuanVra2FuIGRhbGFtIHBlcnViYWhhbiB0ZXJha2hpci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdCaWxhbmdhbiBpdGVtIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0gdGVyYWtoaXIgZGljaXB0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICdCaWxhbmdhbiBpdGVtIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0gMTAgdGVyYXRhcyBjaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgbXVrYSBzdXJhdCAoZGkgbWFuYSBpdGVtIEZBUSBkaXR1bmp1a2thbikgZ2FtYmFyYW4ga2VjaWwganVybmFsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayBtdWthIHN1cmF0IChkaSBtYW5hIGl0ZW0gRkFRIGRpdHVuanVra2FuKSBnYW1iYXJhbiBrZXNlbHVydWhhbiBGQVEga2VjaWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAnQ2V0YWsgaGFsYW1hbiBGQVEgaW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0JlcmF0dXIgdW50dWsga2VsdWx1c2FuIGFydGlrZWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJ0thZGFyIHVudHVrIG1lbmd1bmRpLiBLdW5jaSBtZXN0aWxhaCBkYWxhbSBwZXJhdHVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnQ2FyaWFuIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICdNZW5ldGFwa2FuIGtldGluZ2dpYW4gbGFsYWkgKGRhbGFtIHBpa3NlbCkgYmlkYW5nIEhUTUwgc2ViYXJpcyBkYWxhbSBBZ2VudEZBUVpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnTWVuZXRhcGthbiBrZXRpbmdnaWFuIGxhbGFpIChkYWxhbSBwaWtzZWwpIGJpZGFuZyBIVE1MIHNlYmFyaXMgZGFsYW0gQ3VzdG9tZXJGQVFab29tIChkYW4gUHVibGljRkFRWm9vbSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJ01lbmV0YXBrYW4ga2V0aW5nZ2lhbiBtYWtzaW11bSAoZGFsYW0gcGlrc2VsKSBiaWRhbmcgSFRNTCBzZWJhcmlzIGRhbGFtIEFnZW50RkFRWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICdNZW5ldGFwa2FuIGtldGluZ2dpYW4gbWFrc2ltdW0gKGRhbGFtIHBpa3NlbCkgYmlkYW5nIEhUTUwgc2ViYXJpcyBkYWxhbSBDdXN0b21lckZBUVpvb20gKGRhbiBQdWJsaWNGQVFab29tKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICdUdW5qdWtrYW4gIlNpc2lwYW4gRkFRIExpbmsiIEJ1dGFuZyBkaSBBZ2VudEZBUVpvb21TbWFsbCB1bnR1ayBhd2FtIEZBUSBBcnRpa2VsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiAvICJJbnNlcnQgRnVsbCBGQVEgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICdUdW5qdWtrYW4gYnV0YW5nICJTaXNpcGFuIEZBUSBMaW5rICYgVGVrcyIvICJTaXNpcGFuIHBlbnVoIEZBUSIgZGkgQWdlbnRGQVFab29tU21hbGwgdW50dWsgYXdhbSBGQVEgQXJ0aWtlbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiAvICJJbnNlcnQgRnVsbCBGQVEiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9CiAgICAgICAgJ1R1bmp1a2thbiBidXRhbmcgIlNpc2lwYW4gVGVrcyBGQVEiIC8gIlNpc2lwYW4gUGVudWggRkFRIiBkaSBBZ2VudEZBUVpvb21TbWFsbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnUGFwYXIgRkFRIFBlcmthcmEgZGVuZ2FuIEhUTUwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJ1BhcGFyIEZBUSBqYWxhbiB5YSAvIHRpZGFrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnUGFwYXIgaXRlbSBzdWJrYXRlZ29yaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTWVudW5qdWtrYW4gaXRlbSBwZXJ1YmFoYW4gdGVyYWtoaXIgZGFsYW0gYW50YXJhIG11a2EgeWFuZyBkaXRha3JpZmthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ1R1bmp1a2thbiBha2hpciBtZW5jaXB0YSBpdGVtIGRhbGFtIGFudGFyYSBtdWthIHlhbmcgZGl0YWtyaWZrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdQYXBhciB0b3AgMTAgaXRlbSBkYWxhbSBhbnRhcmEgbXVrYSB5YW5nIGRpdGFrcmlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnUGFwYXIgbWVuZ3VuZGkgZGFsYW0gYW50YXJhIG11a2EgeWFuZyBkaXRha3JpZmthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBwYXV0YW4gZGFsYW0gbWVudSB5YW5nIG1lbWJvbGVoa2FuIG1lbmdodWJ1bmdrYW4gRkFRIGRlbmdhbiBvYmplayBsYWluIGRhbGFtIHBhbmRhbmdhbiB6b29tIEZBUSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gcGF1dGFuIGRpIGJhciBtZW51IGRhbGFtIHBhbmRhbmdhbiBkaXp1bSBkYWxhbSBhbnRhcmEgbXVrYSBwZWxhbmdnYW4geWFuZyBtZW1ib2xlaGthbiB1bnR1ayBtZW1hZGFtIGFydGlrZWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHBhdXRhbiBkaSBiYXIgbWVudSBkYWxhbSBwYW5kYW5nYW4gZGl6dW0gZGFsYW0gZWplbiB1bnR1ayBtZWxpaGF0IHNlamFyYWggYXJ0aWtlbCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBwYXV0YW4gZGkgYmFyIG1lbnUgZGFsYW0gcGFuZGFuZ2FuIGRpenVtIGRhbGFtIGFudGFyYSBtdWthIHBlbGFuZ2dhbiB5YW5nIG1lbWJvbGVoa2FuIHVudHVrIG1lbmdlZGl0IGFydGlrZWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gcGF1dGFuIGRpIGJhciBtZW51IGRhbGFtIHBhbmRhbmdhbiBkaXp1bSBkYWxhbSBhbnRhcmEgbXVrYSBwZWxhbmdnYW4geWFuZyBtZW1ib2xlaGthbiB1bnR1ayBrZW1iYWxpIGtlIGhhbGFtYW4gc2ViZWx1bW55YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBwYXV0YW4gZGkgYmFyIG1lbnUgZGFsYW0gcGFuZGFuZ2FuIGRpenVtIGRhbGFtIGFudGFyYSBtdWthIGVqZW4sIHlhbmcgbWVtYm9sZWhrYW4gdW50dWsgbWVuY2V0YWsgYXJ0aWtlbCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9CiAgICAgICAgJ1BlbmdlY2FtIHVudHVrIGl0ZW0gRkFRLCBzZXBlcnRpIEZBUSAjLCAjIEtCLCBNeUZBUSAjLiBOaWxhaSBsYWxhaSBhZGFsYWggIyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2Egb2JqZWsgXCdGQVFcJyBib2xlaCBkaXBhdXQgZGVuZ2FuIG9iamVrIFwnRkFRXCcgbGFpbiBtZW5nZ3VuYWthbiBqZW5pcyBwYXV0YW4gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gYmFoYXdhIG9iamVrIFwnRkFRXCcgYm9sZWggZGlwYXV0IGRlbmdhbiBvYmplayBcJ0ZBUVwnIGxhaW4gbWVuZ2d1bmFrYW4gamVuaXMgcGF1dGFuIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGJhaGF3YSBcJyBGQVFcJyBvYmplayBkZW5nYW4gamVuaXMgcGF1dGFuIFwnYmlhc2FcJyBsYWluIFwnVGlrZXRcJyBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIG9iamVrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2Egb2JqZWsgXCdGQVFcJyBib2xlaCBkaXBhdXQgZGVuZ2FuIFwnVGlrZXRcJyBsYWluIG1lbmdndW5ha2FuIGplbmlzIHBhdXRhbiBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdCYWRhbiB0aWtldCB1bnR1ayBtZWxlcGFza2FuIGFydGlrZWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnVGVydGFrbHVrIGtlcGFkYSB0aWtldCB1bnR1ayBtZWxlcGFza2FuIGFydGlrZWwgRkFRLic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmJfTk9fRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncHVibGlzZXJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ2Vrc3Rlcm50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdPU1MtbnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ1Npc3Qgb3BwZGF0ZXJ0ZSBPU1MtYXJ0aWtsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAnU2lzdCBvcHByZXR0ZWRlIE9TUy1hcnRpa2xlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnVG9wcCAxMCBPU1MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICdJbmdlbiByYXRpbmcgdmFsZ3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAnb2ZmZW50bGlnIChhbGxlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAna3VuIHRpbCBrdW5kZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJ2t1biBpbnRlcm50IChhZ2VudGVyKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdTdGFydGRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBtb250aCd9ID0gJ03DpW5lZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnw4VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdTbHV0dGRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdNw6VuZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICfDhXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnVGFrayBmb3IgZGluIHN0ZW1tZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdEdSBoYXIgYWxsZXJlZGUgc3RlbXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdVdHNrcmlmdCBhdiBPU1MtYXJ0aWtrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnT1NTLWFydGlrbGVyIChUb3BwIDEwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJ09TUy1hcnRpa2xlciAobnlsaWcgb3BwcmV0dGV0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnT1NTLWFydGlrbGVyIChueWxpZyBlbmRyZXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ09TUy1rYXRlZ29yaSBvcHBkYXRlcnQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdPU1Mta2F0ZWdvcmkgbGFndCB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnRW4ga2F0ZWdvcmkgbcOlIGhhIGV0IG5hdm4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICdEZW5uZSBrYXRlZ29yaWVuIGVrc2lzdGVyZXIgYWxsZXJlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJ09TUy1zcHLDpWsgbGFndCB0aWwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ09TUy1zcHLDpWsgb3BwZGF0ZXJ0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICdOYXZuIGVyIHDDpWtyZXZkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0RldHRlIHNwcsOla2V0IGZpbm5lcyBhbGxlcmVkZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ltcHRvbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2x1dGlvbid9ID0gJ0zDuHNuaW5nJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnTGVnZyB0aWwgT1NTLWFydGlra2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzJ30gPSAnTsO4a2tlbG9yZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ0thdGVnb3JpIGVyIG9ibGlnYXRvcmlzay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdHb2RramVubmluZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdLYXRlZ29yaW9wcHNldHQgZm9yIE9TUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdMZWdnIHRpbCBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdTbGV0dCBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ0xlZ2cgdGlsIGthdGVnb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdFbmRyZSBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnU2Frc2JlaGFuZGxlcmdydXBwZXIgc29tIGhhciB0aWxnYW5nIHRpbCBhcnRpa2xlciBpIGRlbm5lIGthdGVnb3JpZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ1ZpbCB2aXNlcyBzb20ga29tbWVudGFyIGkgdXRmb3Jza2VyZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ1ZpbCBkdSB2aXJrZWxpZyBzbGV0dGUgZGVubmUga2F0ZWdvcmllbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPQogICAgICAgICdEdSBrYW4gaWtrZSBzbGV0dGUgZGVubmUga2F0ZWdvcmllbiwgZm9yZGkgZGVuIGVyIGJydWt0IGkgbWluc3QgZW4gT1NTLWFydGlra2VsIG9nL2VsbGVyIGZvcmVsZHJlIHRpbCBtaW5zdCBlbiBhbm5lbiBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ0Rlbm5lIGthdGVnb3JpZW4gZXIgYnJ1a3QgaSBmw7hsZ2VuZGUgT1NTLWFydGlrbGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJ0Rlbm5lIGthdGVnb3JpZW4gZXIgZm9yZWxkcmUgdGlsIGbDuGxnZW5kZSB1bmRlcmthdGVnb3JpZXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnVmlsIGR1IHZpcmtlbGlnIHNsZXR0ZSBkZW5uZSBhcnRpa2tlbGVuPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICdPU1MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ1V0Zm9yc2tlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdIdXJ0aWdzw7hrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnQXZhbnNlcnQgc8O4ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yaWVzJ30gPSAnVW5kZXJrYXRlZ29yaWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ09mdGUgU3RpbHRlIFNww7hyc23DpWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICdJbmdlbiB1bmRlcmthdGVnb3JpZXIgZnVubmV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICdIaXN0b3Jpa2sgZm9yJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdTcHLDpWtvcHBzZXR0IGZvciBPU1MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnTGVnZyB0aWwgc3Byw6VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSAlcyd9ID0gJ1NsZXR0IHNwcsOlayAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICdMZWdnIHRpbCBzcHLDpWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ0VuZHJlIHNwcsOlayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0tvbnRla3N0dmFsZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnSW5nZW4gYXJ0aWtsZXIgZnVubmV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIChlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjApJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgKGUuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdTaXN0IGVuZHJldCBhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJldHdlZW4pJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJ09TUy1zw7hrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2ZpbGUgU2VsZWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyB2b3Rlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjAnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHJhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIHJhbmdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0luZm8gb20gT1NTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ1JhdGluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvdXQgb2YgNSd9ID0gJ2F2IDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZXMnfSA9ICdTdGVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ0luZ2VuIHN0ZW1tZXIgZnVubmV0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnSW5nZW4gc3RlbW1lciBhdmdpdHQhIEJsaSBkZW4gZsO4cnN0ZSB0aWwgw6Ugc3RlbW1lIHDDpSBkZW5uZSBhcnRpa2tlbGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnTGFzdCBuZWQgdmVkbGVnZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9CiAgICAgICAgJ1ZhciBkZW5uZSBhcnRpa2tlbGVuIHRpbCBoamVscD8gVsOmciBzbmlsbCBvZyBnaSBvc3MgZGluIHN0ZW1tZSwgc2xpayBhdCB2aSBrYW4gZm9yYmVkcmUgZGF0YWJhc2VuLiBUdXNlbiB0YWtrISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ2lra2UgdGlsIGhqZWxwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ3ZlbGRpZyBueXR0aWcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIHRpdGxlIHRvIGFydGljbGUgc3ViamVjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdTZXR0IGlubiBPU1MtdGVrc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ1NldHQgaW5uIE9TUy1sZW5rZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnU2V0dCBpbm4gT1NTLXRla3N0IG9nIC1sZW5rZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnSW5nZW4gT1NTLWFydGlrbGVyIGJsZSBmdW5uZXQnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ0Z1bGx0ZWtzdHPDuGsgaSBPU1MtYXJ0aWtsZXIgKGYuZWtzLiAiT2wqIiBlbGxlciAiQW5kcmVhcypuIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIHJlc3RyaWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHZvdGVzLi4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgcmVzdHJpY3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggcmF0ZS4uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQgYmV0d2Vlbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICdTw7hrIGV0dGVyIGFydGlrbGVyIG1lZCBuw7hra2Vsb3JkJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUUpvdXJuYWwucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnT1NTLWpvdXJuYWwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgdXBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBEeW5hbWljIEZpZWxkcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvRkFRLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGFydGljbGUgaXMgZW1wdHkhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ1NTLWZhcmdlIGZvciBhdnN0ZW1uaW5nc3Jlc3VsdGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0thdGVnb3Jpb3Bwc2V0dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdBbnRhbGwgZGVzaW1hbGVyIGZvciBhdnN0ZW1uaW5nc3Jlc3VsdGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICdGb3J2YWxndCBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICdTdGFuZGFyZCBwcmlvcml0ZXQgZm9yIHNha2VyIGZvciBnb2RramVubmluZyBhdiBPU1MtYXJ0aWtsZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICdTdGFuZGFyZCBzdGF0dXMgZm9yIGV0IE9TUy1vYmpla3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdTdGFuZGFyZCBzdGF0dXMgZm9yIHNha2VyIGZvciBnb2RramVubmluZyBhdiBPU1MtYXJ0aWtsZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBpZiB0aGUgRkFRIHRpdGxlIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gYXJ0aWNsZSBzdWJqZWN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGluZm9ybWF0aW9uIHRvIGJlIGluc2VydGVkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4gIkZ1bGwgRkFRIiBpbmNsdWRlcyB0ZXh0LCBhdHRhY2htZW50cyBhbmQgaW5saW5lIGltYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnRGVmaW5pc2pvbiBhdiBmcml0ZWtzdGZlbHQgZm9yIE9TUy1hcnRpa2xlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICdTbGV0dCBkZW5uZSBhcnRpa2tlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzbWFsbCBmb3JtYXQgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnRW5kcmUgZGVubmUgYXJ0aWtrZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgbXVsdGlwbGUgbGFuZ3VhZ2VzIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJ09TUy1vbXLDpWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNCd9ID0gJ0ZlbHQgNCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDUnfSA9ICdGZWx0IDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTW9kdWxyZWdpc3RyZXJpbmcgZm9yIGRlbiBvZmZlbnRsaWdlIGRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0dydXBwZSBzb20gc2thbCBnb2RramVubmUgT1NTLWFydGlrbGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnSGlzdG9yaWtrIG92ZXIgZGVubmUgYXJ0aWtrZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgdGhlIG5hbWUgb2YgZWFjaCBmaWVsZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrIHNlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ1NwcsOla29wcHNldHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnTGVuayBvcHAgZXQgYW5uZXQgb2JqZWt0IHRpbCBkZW5uZSBhcnRpa2tlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgRkFRIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAnTnkgT1NTLWFydGlra2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJ055ZSBhcnRpa2xlciB0cmVuZ2VyIGdvZGtqZW5uaW5nIGbDuHIgZGUga2FuIHB1Ymxpc2VyZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnQW50YWxsIG9iamVrdGVyIHZpc3QgaSBzaXN0ZSBlbmRyaW5nZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAnQW50YWxsIHZpc3RlIG9iamVrdGVyIHVuZGVyIHNpc3Qgb3BwcmV0dGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJ0FudGFsbCB2aXN0ZSBhcnRpa2xlciBpICJUb3BwIDEwIi1mdW5rc2pvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAnU2tyaXYgdXQgZGVubmUgYXJ0aWtrZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdLw7ggZm9yIGdvZGtqZW5uaW5nIGF2IE9TUy1hcnRpa2xlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZXMgZm9yIHZvdGluZy4gS2V5IG11c3QgYmUgaW4gcGVyY2VudC4nfSA9ICdSYXRlciBmb3IgYXZzdGVtbWluZy4gTsO4a2tlbCBtw6UgdsOmcmUgaSBwcm9zZW50Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgLyAiSW5zZXJ0IEZ1bGwgRkFRICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnVmlzIEhUTUwgaSBPU1MtYXJ0aWtrZWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJ1ZpcyBPU1Mtc3RpIChqYS9uZWkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICdWaXMgaW5uaG9sZCBpIHVuZGVya2F0ZWdvcmllci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnVmlzIHNpc3QgZW5kcmVkZSBhcnRpa2xlciBpIGRlZmluZXJ0ZSBncmVuc2Vzbml0dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ1ZpcyBzaXN0IG9wcHJldHRlZGUgYXJ0aWtsZXIgaSBkZWZpbmVydGUgZ3JlbnNlc25pdHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ1ZpcyAiVG9wcCAxMCIgaSBkZWZpbmVydGUgZ3JlbnNlc25pdHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdm90aW5nIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdWaXMgYXZzdGVtbWluZyBpIGRlZmluZXJ0ZSBncmVuc2Vuc25pdHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9CiAgICAgICAgJ0lkZW50aWZpa2F0b3IgZm9yIGVuIE9TUy1hcnRpa2tlbCwgZi5la3MuIEZBUSMsIEtCIywgT1NTIywgTWluT1NTIy4gU3RhbmRhcmQgZXIgRkFRIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVubmUgaW5uc3RpbGxpbmdlbiBkZWZpbmVyZXIgYXQgZW4gT1NTLWFydGlra2VsIGthbiBsZW5rZXMgdGlsIGFuZHJlIE9TUy1hcnRpa2xlciBtZWQgIk5vcm1hbCIgbGVua2V0eXBlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Rlbm5lIGlubnN0aWxsaW5nZW4gZGVmaW5lcmVyIGF0IGVuIE9TUy1hcnRpa2tlbCBrYW4gbGVua2VzIHRpbCBhbmRyZSBPU1MtYXJ0aWtsZXIgbWVkICJGb3JlbGRyZS9CYXJuIi1sZW5rZXR5cGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Rlbm5lIGlubnN0aWxsaW5nZW4gZGVmaW5lcmVyIGF0IGVuIE9TUy1hcnRpa2tlbCBrYW4gbGVua2VzIHRpbCBhbmRyZSBzYWtlciBtZWQgIk5vcm1hbCIgbGVua2V0eXBlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Rlbm5lIGlubnN0aWxsaW5nZW4gZGVmaW5lcmVyIGF0IGVuIE9TUy1hcnRpa2tlbCBrYW4gbGVua2VzIHRpbCBhbmRyZSBzYWtlciBtZWQgIkZvcmVsZHJlL0Jhcm4iLWxlbmtldHlwZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ1Nha3Npbm5ob2xkIGZvciBnb2RramVubmluZyBhdiBPU1MtYXJ0aWtsZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdTYWtzZW1uZSBmb3IgZ29ka2plbm5pbmcgYXYgT1NTLWFydGlrbGVyLic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmxfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICdwdWJsaWVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsJ30gPSAnZXh0ZXJuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdGQVEgbnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ0xhYXRzdCBnZXdpanppZ2RlIGFydGlrZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdMYWF0c3QgYWFuZ2VtYWFrdGUgYXJ0aWtlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICdQb3B1bGFpcnN0ZSBhcnRpa2VsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICdTdWJjYXRlZ29yaWUgdmFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnR2VlbiB3YWFyZGVyaW5nIGdlc2VsZWN0ZWVyZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICdPdmVyemljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAncHVibGllayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAnZXh0ZXJuIChrbGFudGVuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnaW50ZXJuIChnZWJydWlrZXJzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdFZXJzdGUgZGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnRWVyc3RlIG1hYW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IHllYXInfSA9ICdFZXJzdGUgamFhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAnTGFhdHN0ZSBkYWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTGFhdHN0ZSBtYWFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ0xhYXRzdGUgamFhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICdCZWRhbmt0IHZvb3IgdXcgc3RlbSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdVIGhlZWZ0IGFsIGdlc3RlbWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnQXJ0aWtlbCBhZmRydWtrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnQXJ0aWtlbGVuICh0b3AgMTApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAnQXJ0aWtlbGVuIChuaWV1dyBhYW5nZW1hYWt0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0aWtlbGVuIChsYWF0c3QgZ2V3aWp6aWdkKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdGQVEgY2F0ZWdvcmllIGJpamdld2Vya3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdGQVEgY2F0ZWdvcmllIHRvZWdldm9lZ2QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0dlZWYgZWVuIG5hYW0gb3Agdm9vciBkZSBjYXRlZ29yaWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICdEZXplIGNhdGVnb3JpZSBiZXN0YWF0IGFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdUYWFsIHRvZWdldm9lZ2QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ1RhYWwgYmlqZ2V3ZXJrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICdEZSBuYWFtIGlzIHZlcnBsaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdEZXplIHRhYWwgYmVzdGFhdCBhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ltcHRvbSd9ID0gJ1N5bXB0b29tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvbHV0aW9uJ30gPSAnT3Bsb3NzaW5nJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnQXJ0aWtlbCB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICdUcmVmd29vcmRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ0tpZXMgZWVuIGNhdGVnb3JpZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdHb2Vka2V1cmluZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdGQVEgY2F0ZWdvcmllYmVoZWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJ0NhdGVnb3JpZSB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnQ2F0ZWdvcmllIHZlcndpamRlcmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnQ2F0ZWdvcmllIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAnQ2F0ZWdvcmllIGJld2Vya2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAnU2VsZWN0ZWVyIHRlbm1pbnN0ZSDDqcOpbiBwZXJtaXNzaWVncm9lcC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJ0dlYnJ1aWtlcnMgbWV0IHJlY2h0ZW4gb3AgYXJ0aWtlbGVuIGluIGRlemUgY2F0ZWdvcmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnV29yZHQgaW4gd2ViaW50ZXJmYWNlIGdldG9vbmQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICdXaWx0IHUgZGV6ZSBjYXRlZ29yaWUgdmVyd2lqZGVyZW4/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0KICAgICAgICAnVSBrdW50IGRlemUgY2F0ZWdvcmllIG5pZXQgdmVyd2lqZGVyZW4uIEhpaiB3b3JkdCBnZWJydWlrdCBpbiBlZW4gb2YgbWVlciBhcnRpa2VsZW4gZW4vb2YgaGVlZnQgb25kZXJsaWdnZW5kZSBjYXRlZ29yacOrbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICdEZXplIGNhdGVnb3JpZSB3b3JkdCBnZWJydWlrdCBkb29yIGRlIHZvbGdlbmRlIGFydGlrZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICdEZXplIGNhdGVnb3JpZSBoZWVmdCBkZSB2b2xnZW5kZSBzdWJjYXRlZ29yacOrbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdXaWx0IHUgZGl0IGFydGlrZWwgdmVyd2lqZGVyZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRkFRIHZlcmtlbm5lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdab2VrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsZGNhcmRzIGFyZSBhbGxvd2VkLid9ID0gJ1dpbGRjYXJkcyB6aWpuIHRvZWdlc3RhYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJ1VpdGdlYnJlaWQgem9la2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdTdWJjYXRlZ29yacOrbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdBcnRpa2VsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICdHZWVuIHN1YmNhdGVnb3Jpw6tuIGdldm9uZGVuLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mJ30gPSAnR2VzY2hpZWRlbmlzIHZhbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdHZWVuIGRhdGEgZ2V2b25kZW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0JlaGVlciB0YWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9CiAgICAgICAgJ0dlYnJ1aWsgZGV6ZSBmZWF0dXJlIGFscyB1IG1ldCBtZWVyZGVyZSB0YWxlbiB3aWx0IHdlcmtlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnVGFhbCB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAnVGFhbCB2ZXJ3aWpkZXJlbiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICdUYWFsIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnVGFhbCBiZXdlcmtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnV2lsdCB1IGRlemUgdGFhbCB2ZXJ3aWpkZXJlbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAnVSBrdW50IGRlemUgdGFhbCBuaWV0IHZlcndpamRlcmVuLCBoaWogd29yZHQgZ2VicnVpa3QgZG9vciBlZW4gb2YgbWVlciBhcnRpa2VsZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnRGV6ZSB0YWFsIGlzIGdlYnJ1aWt0IHZvb3IgZGUgdm9sZ2VuZGUgYXJ0aWtlbGVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnQ29udGV4dCBJbnN0ZWxsaW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnQWFudGFsIGFydGlrZWxlbiBwZXIgcGFnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ0dlZW4gRkFRIGRhdGEgZ2V2b25kZW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJ1RyZWZ3b29yZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgKGUuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCknfSA9ICdTdGVtIChiaWp2LiBnZWxpamsgYWFuIDEwIG9mIGdyb3RlciBkYW4gNjApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgKGUuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlKSd9ID0gJ1ZlcmhvdWRpbmcgKHZiOiBHZWxpamsgYWFuIDI1JSBvZiBHcm90ZXIgZGFuIDc1JSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92ZWQnfSA9ICdBYW5nZW5vbWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ0xhYXRzdCBnZXdpanppZ2QgZG9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lICh2b29yL25hKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICdGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAodHVzc2VuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lICh2b29yL25hKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmV0d2VlbiknfSA9ICdGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAodHVzc2VuKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICdab2VrZW4gaW4gRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgU2VhcmNoJ30gPSAnRkFRIHpvZWtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJ1Byb2ZpZWwgc2VsZWN0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJ1N0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJ0dlZW4gaW5zdGVsbGluZ2VuIG9tIHRlIHN0ZW1tZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgdm90ZXMnfSA9ICdTcGVjaWZpZWtlIHN0ZW1tZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwJ30gPSAndmI6IEdlbGlqayBhYW4gMTAgb2YgR3JvdGVyIERhbiA2MCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlJ30gPSAnQmVvb3JkZWxpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZXR0aW5ncyd9ID0gJ0dlZW4gYmVvb3JkZWxpbmcgaW5zdGVsbGluZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHJhdGUnfSA9ICdTcGVjaWZpZWtlIGJlb29yZGVsaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlJ30gPSAnYmlqdi4gZ2VsaWprIDI1JSBvZiBncm90ZXIgZGFuIDc1JSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSd9ID0gJ0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIGRhdGUnfSA9ICdTcGVjaWZpZWtlIGRhdHVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgcmFuZ2UnfSA9ICdEYXR1bSByYW5nZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSd9ID0gJ0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnQmVvb3JkZWxpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICd2YW4gNSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ1N0ZW1tZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAnR2VlbiBzdGVtbWVuIGdldm9uZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdHZWVuIHN0ZW1tZW4gZ2V2b25kZW4uIFdlZXMgZGUgZWVyc3RlIG9tIGRpdCBhcnRpa2VsIHRlIGJlb29yZGVsZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdTbGEgYmlqbGFnZSBvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJ09tIGRlIGxpbmtzIGluIGRlIG9tc2NocmlqdmluZ2VuIHRlIG9wZW5lbiBpcyBoZXQgbW9nZWxpamsgZGF0IHUgQ3RybCBvZiBDbWQgb2YgU2hpZnQgbW9ldCBpbmRydWtrZW4gdGVyd2lqbCB1IG9wIGRlIGxpbmsga2xpa3QgKGFmaGFua2VsaWprIHZhbiB1dyBicm93c2VyIGVuIGJlc3R1cmluZ3NzeXN0ZWVtKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPQogICAgICAgICdIaWVscCBkaXQgYXJ0aWtlbCBiaWogaGV0IGJlYW50d29vcmRlbiB2YW4gdXcgdnJhYWc/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnaGVsZW1hYWwgbmlldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICdoZWVsIGVyZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgdGl0bGUgdG8gYXJ0aWNsZSBzdWJqZWN0J30gPSAnRkFRIHRpdGVsIHRvZXZvZWdlbiBhYW4gb25kZXJ3ZXJwIHZhbiBoZXQgYXJ0aWtlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdWb2VnIEZBUSB0ZWtzdCBpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEnfSA9ICdWb2xsZWRpZ2UgRkFRIGludm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ1ZvZWcgbGluayBuYWFyIEZBUSBpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnVm9lZyBGQVEgdGVrc3QgZW4gbGluayBpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnVm9sbGVkaWdlIEZBUSAmIExpbmsgaW52b2VnZW4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICdHZWVuIGFydGlrZWxlbiBnZXZvbmRlbi4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ1pvZWtlbiBpbiB0ZWtzdCB2YW4gYXJ0aWtlbGVuIChiaWp2LiAiSmFucyplbiIgb2YgIlByaW50KiIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgcmVzdHJpY3Rpb25zJ30gPSAnU3RlbW1pbmdzYmVwZXJraW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLid9ID0gJ0FsbGVlbiBGQVEgYXJ0aWtlbGVuIHdhYXJvcCBnZXN0ZW1kIHdlcmQuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSByZXN0cmljdGlvbnMnfSA9ICdCZXBlcmtpbmdlbiB2YW4gYmVvb3JkZWxpbmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHJhdGUuLi4nfSA9ICdBbGxlZW4gRkFRIGFydGlrZWxlbiBtZXQgZWVuIGJlb29yZGVsaW5nIC4uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkJ30gPSAnQWxsZWVuIEZBUSBhcnRpa2VscyBkaWUgYWFuZ2VtYWFrdCB3ZXJkZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCBiZXR3ZWVuJ30gPSAnQWxsZWVuIEZBUSBhcnRpa2VsIGRpZSBhYW5nZW1hYWt0IHdlcmRlbiB0dXNzZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/J30gPSAnWm9lay1Qcm9maWVsIGFscyB0ZW1wbGF0ZT8nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBOdW1iZXInfSA9ICdBcnRpa2VsbnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnWm9layBvcCBhcnRpa2VsZW4gbWV0IHRyZWZ3b29yZCc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICdPcGVuYmFhcic7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnVGVydWcgbmFhciBkZSBGQVEgVmVya2VubmVyJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUUpvdXJuYWwucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnRkFRIGpvdXJuYWFsJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHVwZGF0ZSd9ID0gJ0xhYXRzdGUgdXBkYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBEeW5hbWljIEZpZWxkcyd9ID0gJ0ZBUSBEeW5hbWlzY2hlIHZlbGRlbic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICdHZWVuIHJlc3VsdGFhdCEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvRkFRLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGFydGljbGUgaXMgZW1wdHkhJ30gPSAnRGl0IGl0ZW0gaGVlZnQgZ2VlbiB3YWFyZGUhJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ1NTIGtsZXVyIHZvb3IgZGUgc3RlbW1pbmdzdWl0c2xhZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgVGltZSBUbyBMZWF2ZSBmb3IgRkFRIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnQmVoZWVyIGNhdGVnb3Jpw6tuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAnU3RhbmRhYXJkIGNhdGVnb3JpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICdTdGFuZGFhcmQgcHJpb3JpdGVpdCB2YW4gdGlja2V0cyB2b29yIGdvZWRrZXVyaW5nIHZhbiBGQVEgYXJ0aWtlbHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICdTdGFuZGFhcmQgc3RhdHVzIHZvb3IgRkFRIGFydGlrZWxzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdTdGFuZGFhcmQgc3RhdHVzIHZhbiBoZXQgdGlja2V0IHZvb3IgaGV0IGdvZWRrZXVyZW4gdmFuIEZBUSBhcnRpa2Vscy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGlmIHRoZSBGQVEgdGl0bGUgc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBhcnRpY2xlIHN1YmplY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaW5mb3JtYXRpb24gdG8gYmUgaW5zZXJ0ZWQgaW4gYSBGQVEgYmFzZWQgVGlja2V0LiAiRnVsbCBGQVEiIGluY2x1ZGVzIHRleHQsIGF0dGFjaG1lbnRzIGFuZCBpbmxpbmUgaW1hZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uIG9mIEZBUSBpdGVtIGZyZWUgdGV4dCBmaWVsZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnVmVyd2lqZGVyIGRpdCBhcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzbWFsbCBmb3JtYXQgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnQmV3ZXJrIGRpdCBhcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnS25vd2xlZGdlIEJhc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ0J30gPSAnVmVsZDQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ1J30gPSAnVmVsZDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0dyb2VwIHZvb3IgZGUgZ29lZGtldXJpbmcgdmFuIEZBUSBpdGVtcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnR2VzY2hpZWRlbmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2sgc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0xvZ2JvZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0JlaGVlciB0YWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICdLb3BwZWwgZWVuIGFuZGVyIG9iamVjdCBhYW4gZGl0IGFydGlrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBGQVEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICdOaWV1dyBhcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjcmVhdGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ0FydGlrZWwgYWZkcnVra2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnWm9la2VuIGluIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIC8gIkluc2VydCBGdWxsIEZBUSAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIC8gIkluc2VydCBGdWxsIEZBUSIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ1Rvb24gRkFRIGl0ZW0gbWV0IEhUTUwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnVG9vbiBGQVEgcGFkIGphL25lZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnVG9vbiBpdGVtcyB2YW4gc3ViY2F0ZWdvcmnDq24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZvdGluZyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnVG9vbiBzdGVtLWZlYXR1cmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cGxfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ3dld27EmXRyem55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ3B1YmxpY3pueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ3pld27EmXRyem5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdOdW1lciBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAnT3N0YXRuaW8gemFrdHVhbGl6b3dhbmUgaW5mb3JtYWNqZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAnT3N0YXRuaW8gZG9kYW5lIGluZm9ybWFjamUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICdUb3AgMTAgaW5mb3JtYWNqaSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICdQb2RrYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICdOaWUgd3licmHFgmXFmyBvY2VueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICdFa3NwbG9yZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAncHVibGljem5lICh3c3p5c2N5KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCAoY3VzdG9tZXIpJ30gPSAnemV3bsSZdHJ6bmUgKGtsaWVuY2kpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICd3ZXduxJl0cnpuZSAoYWdlbmNpKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICdEemllxYQgcG9jesSFdGtvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdNaWVzacSFYyBwb2N6xIV0a293eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnUm9rIHBvY3rEhXRrb3d5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdEemllxYQga2/FhGNvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTWllc2nEhWMga2/FhGNvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICdSb2sga2/FhGNvd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnRHppxJlrdWplbXkgemEgb2RkYW5pZSBnxYJvc3UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJ30gPSAnSnXFvCByYXogZ8WCb3Nvd2HFgmXFmyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdEcnVrdWogaW5mb3JtYWNqxJkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJ0FydHlrdcWCeSBGQVEgKDEwIG5hamxlcHN6eWNoKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJ0FydHlrdcWCeSBGQVEgKG5vd2UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdBcnR5a3XFgnkgRkFRIChvc3RhdG5pbyB6bWllbmlvbmUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0thdGVnb3JpYSBGQVEgemFrdHVhbGl6b3dhbmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdLYXRlZ29yaWEgRkFRIGRvZGFuYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnS2F0ZWdvcmlhIHBvd2lubmEgcG9zaWFkYcSHIG5henfEmSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ1RhIGthdGVnb3JpYSBqdcW8IGlzdG5pZWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdKxJl6eWsgRkFRIGRvZGFueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnSsSZenlrIEZBUSB6YWt0dWFsaXpvd2FueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmF6d2EgamVzdCB3eW1hZ2FuYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdUZW4gasSZenlrIGp1xbwgaXN0bmllamUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5bXB0b20nfSA9ICdPYmphdyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2x1dGlvbid9ID0gJ1JvendpxIV6YW5pZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ0RvZGFqIGFydHlrdcWCIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3Jkcyd9ID0gJ3PFgm93YSBrbHVjem93ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ0thdGVnb3JpYSBqZXN0IHd5bWFnYW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZhbCd9ID0gJ1phdHdpZXJkemVuaWUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnWmFyesSFZHphbmllIGthdGVnb3JpYW1pIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICdEb2RhaiBrYXRlZ29yacSZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDYXRlZ29yeSd9ID0gJ1VzdcWEIGthdGVnb3JpxJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdEb2RhaiBrYXRlZ29yacSZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdFZHl0dWoga2F0ZWdvcmnEmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1phem5hY3ogcHJ6eW5ham1uaWVqIGplZG7EhSBncnVwxJkgdXByYXduaWXFhC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJ0dydXB5IGFnbmV0w7N3LCBrdMOzcmUgbWFqxIUgZG9zdMSZcCBkbyB0ZWoga2F0ZWdvcmlpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnWm9zdGFuaWUgcG9rYXphbnkgamFrbyBrb21lbnRhcnogdyBla3NwbG9yZXJ6ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ0N6eSBuYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgdMSZIGthdGVnb3JpxJk/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0KICAgICAgICAnTmllIG1vxbxlc3ogdXN1bsSFxIcgdGVqIGthdGVnb3JpaS4gSmVzdCBvbmEgdcW8eXdhbmEgcHJ6ZXogcHJ6eW5ham1uaWVqIGplZGVuIGFydHlrdcWCIEZBUSBsdWIvaSBqZXN0IHJvZHppY2VtIHByem5ham1uaWVqIGplZG5laiBpbm5laiBrYXRlZ29yaWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICdUYSBrYXRlZ29yaWEgamVzdCB1xbx5d2FuYSB3IG5hc3TEmXB1asSFY3ljaCBhcnR5a3XFgmFjaCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnVGEga2F0ZWdvcmlhIGplc3Qgcm9kemljZW0gbmFzdMSZcHVqxIVjeWNoIHBvZGthdGVnb3JpaSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdDenkgbmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIHRlbiBhcnR5a3XFgiBGQVE/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRWtzcGxvcmVyIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdTenlia2llIHd5c3p1a2l3YW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxkY2FyZHMgYXJlIGFsbG93ZWQuJ30gPSAnWm5ha2kgd2llbG96bmFjem5lIHPEhSBkb3p3b2xvbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJ1d5c3p1a2l3YW5pZSB6YWF3YW5zb3dhbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ1BvZGthdGVnb3JpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdBcnR5a3XFgnkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnQnJhayBwb2RrYXRlZ29yaWkuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICdIaXN0b3JpYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdCcmFrIGRhbnljaCB3IGR6aWVubmlrdSBGQVEuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ1phcnrEhWR6YW5pZSBqxJl6eWthbWkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAnVcW8eWogdGVqIGZ1bmtjamkgamXFm2xpIGNoY2VzeiBwcmFjb3dhxIcgeiB3aWVsb21hIGrEmXp5a2FtaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnRG9kYWogasSZenlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSAlcyd9ID0gJ1VzdcWEIGrEmXp5ayAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICdEb2RhaiBqxJl6eWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ0VkeXR1aiBqxJl6eWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ0N6eSBuYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgdGVuIGrEmXp5az8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAnTmllIG1vxbxlc3ogdXN1bsSFxIcgdGVnbyBqxJl6eWthLiBKZXN0IG9uIHXFvHl3YW55IHcgcHJ6eW5ham1uaWVqIGplZG55bSBhcnR5a3VsZSBGQVEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnVGVuIGrEmXp5ayBqZXN0IHXFvHl3YW55IHcgbmFzdMSZcHVqxIVjeWNoIGFydHVrdcWCYWNoIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ1VzdGF3aWVuaWEga29udGVrc3Rvd2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGVzIHBlciBwYWdlJ30gPSAnTGljemJhIGFydHlrdcWCw7N3IEZBUSBuYSBzdHJvbsSZJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ0JyYWsgZGFueWNoIEZBUS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3JkJ30gPSAnU8WCb3dvIGtsdWN6b3dlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgKGUuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSAoZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmVkJ30gPSAnWmF0d2llcmR6b25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ09zdGF0bmlvIHptaWVuaW9uZSBwcnpleic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ0ZBUSBDemFzIHR3b3J6ZW5pYSB6Z8WCb3N6ZW5pYSAocHJ6ZWQvcG8pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ0ZBUSBDemFzIHR3b3J6ZW5pYSB6Z8WCb3N6ZW5pYSAocG9tacSZZHp5KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ0ZBUSBDemFzIHptaWFueSB6Z8WCb3N6ZW5pYSAocHJ6ZWQvcG8pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ0ZBUSBDemFzIHptaWFueSB6Z8WCb3N6ZW5pYSAocG9tacSZZHp5KSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICdGQVEgcGXFgm5vdGVrc3Rvd28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICdXeXN6dWtpd2FuaWUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2ZpbGUgU2VsZWN0aW9uJ30gPSAnV3liw7NyIHByb2ZpbHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlIHNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHZvdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgcmF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgcmFuZ2UnfSA9ICdaYWtyZXMgZGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lJ30gPSAnRkFRIEN6YXMgem1pYW55IHpnxYJvc3plbmlhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjamUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ09jZW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAneiA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnR8WCb3N5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ0JyYWsgZ8WCb3PDs3chJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdCcmFrIGfFgm9zw7N3ISBCxIVkxbogcGllcndzenkgaSBvY2XFhCB0ZW4gYXJ0eWt1xYIgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnUG9iaWVyeiB6YcWCxIVjem5payc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9CiAgICAgICAgJ0phayBwb21vY255IGJ5xYIgdGVuIGFydHlrdcWCPyBQcm9zaW15IG8gdHdvasSFIG9jZW7EmSBpIHBvbW9jIHByenkgdWRvc2tvbmFsYW5pdSBiYXp5IEZBUS4gRHppxJlrdWplbXkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBoZWxwZnVsJ30gPSAnbmllcHJ6eWRhdG5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ3BvbW9jbmUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIHRpdGxlIHRvIGFydGljbGUgc3ViamVjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdXc3RhdyB0ZWtzdCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ1dzdGF3IG9kbm/Fm25payBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJ1dzdGF3IHRla3N0IGkgb2Rub8WbbmlrIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnTmllIHpuYWxlemlvbm8gYXJ0eWt1xYLDs3cgRkFRLic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuICJKb2huKm4iIG9yICJXaWxsKiIpJ30gPSAnV3lzenVraXdhbmllIHBlxYJub3Rla3N0b3dlIHcgYXJ0eWt1xYJhY2ggRkFRIChucC4gIk5haipwc3p5IiBsdWIgIktvd2Fsc2sqIiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSByZXN0cmljdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIHJlc3RyaWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHJhdGUuLi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkIGJldHdlZW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnU3p1a2FqIGFydHlrdcWCw7N3IHphIHBvbW9jxIUgc8WCb3dhIGtsdWN6b3dlZ28nOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljJ30gPSAnUG9ibGljem5lJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayB0byBGQVEgRXhwbG9yZXInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRSm91cm5hbC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdEemllbm5payBGQVEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgdXBkYXRlJ30gPSAnT3N0YXRuaWEgYWt0dWFsaXphY2phJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBEeW5hbWljIEZpZWxkcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvRkFRLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGFydGljbGUgaXMgZW1wdHkhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnS29sb3IgQ1NTIGRsYSB3eW5pa8OzdyBnxYJvc293YW5pYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgVGltZSBUbyBMZWF2ZSBmb3IgRkFRIGl0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnWmFyesSFZHphbmllIGthdGVnb3JpYW1pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ01pZWpzY2EgcG8gcG90cnplY2lua3UgdyB3eW5pa2FjaCBnxYJvc293YW5pYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJ0RvbXnFm2xuYSBuYXp3YSBrYXRlZ29yaWkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS4nfSA9ICdEb215xZtsbnkgasSZenlrIGRsYSBhcnR5a3XFgsOzdyBGQVEgdyB0cnliaWUgcG9qZWR5bmN6ZWdvIGrEmXp5a2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICdEb215xZtsbnkgcHJpb3J5dGV0IHpnxYJvc3plxYQgZGxhIHphdHdpZXJkemXFhCBhcnR5a3XFgsOzdyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICdEb215xZtsbnkgc3RhbiBkbGEgcG96eWNqaSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGlmIHRoZSBGQVEgdGl0bGUgc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBhcnRpY2xlIHN1YmplY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaW5mb3JtYXRpb24gdG8gYmUgaW5zZXJ0ZWQgaW4gYSBGQVEgYmFzZWQgVGlja2V0LiAiRnVsbCBGQVEiIGluY2x1ZGVzIHRleHQsIGF0dGFjaG1lbnRzIGFuZCBpbmxpbmUgaW1hZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uIG9mIEZBUSBpdGVtIGZyZWUgdGV4dCBmaWVsZC4nfSA9ICdEZWZpbmljamEgcG9sYSBmcmVlIHRleHQgcG96eWNqaSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ1VzdcWEIHRvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc21hbGwgZm9ybWF0IG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0VkeXR1aiB0byBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ1fFgsSFY3ogd2llbGUgasSZenlrw7N3IHcgbW9kdWxlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdXxYLEhWN6IG1lY2hhbml6bSBnxYJvc293YW5pYSB3IG1vZHVsZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMaW1pdCBGQVEgdyBwcnplZ2zEhWR6aWUgZHppZW5uaWthIHcgdHJ5YmllICJNYcWCZSInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMaW1pdCBGQVEgdyBwcnplZ2zEhWR6aWUgdyB0cnliaWUgIk1hxYJlIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdMaW1pdCBGQVEgbmEgc3Ryb27EmSB3IHByemVnbMSFZHppZSBkemllbm5pa2EgdyB0cnliaWUgIk1hxYJlIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnTGltaXQgRkFRIG5hIHN0cm9uxJkgdyBwcnplZ2zEhWR6aWUgdyB0cnliaWUgIk1hxYJlIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnRkFROiBjesSZc3RvIHphZGF3YW5lIHB5dGFuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnR3J1cGFhIGRsYSBha2NlcHRhY2ppIGFydHlrdcWCw7N3IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJ0hpc3RvcmlhIHRlZ28gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2sgc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0R6aWVubmlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdaYXJ6xIVkemFuaWUgasSZenlrYW1pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJ1BvxYLEhWN6IGlubnkgb2JpZWt0IHogdHltIGVsZW1lbnRlbSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBGQVEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICdOb3d5IGFydHlrdcWCIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICdOb3dlIGFydHlrdcWCeSBGQVEgd3ltYWdhasSFIHphdHdpZXJkemVuaWEgcHJ6ZWQgcHVibGlrYWNqxIUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAnV3lkcnVrdWogdG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0tvbGVqa2EgZGxhIHphdHdpZXJkemXFhCBhYXJ0eWt1xYLDs3cgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAnU3p1a2FqIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIC8gIkluc2VydCBGdWxsIEZBUSAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIC8gIkluc2VydCBGdWxsIEZBUSIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdm90aW5nIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfQlJfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncMO6YmxpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICdleHRlcm5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdOw7ptZXJvIGRhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdBcnRpZ29zIGRhIEZBUSBhdHVhbGl6YWRvcyByZWNlbnRlbWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ0FydGlnb3MgZGEgRkFRIGNyaWFkb3MgcmVjZW50ZW1lbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnVG9wIDEwIGFydGlnb3MgZGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAnU3ViY2F0ZWdvcmlhIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnTmVuaHVtYSBwb250dWHDp8OjbyBzZWxlY2lvbmFkYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICdFeHBsb3JhZG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ3DDumJsaWNvICh0b2RvcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ2V4dGVybm8gKGNsaWVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsIChhZ2VudCknfSA9ICdpbnRlcm5vIChhdGVuZGVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IGRheSd9ID0gJ0RpYSBkZSBpbsOtY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAnTcOqcyBkZSBpbsOtY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IHllYXInfSA9ICdBbm8gZGUgaW7DrWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAnRGlhIGRlIHTDqXJtaW5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBtb250aCd9ID0gJ03DqnMgZGUgdMOpcm1pbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICdBbm8gZGUgdMOpcm1pbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAnT2JyaWdhZG8gcG9yIHNldSB2b3RvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ1ZvY8OqIGrDoSB2b3RvdSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdJbXByaW1pciBhcnRpZ28gZGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJ0FydGlnb3MgZGEgRkFRIChUb3AgMTApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAnQXJ0aWdvcyBkYSBGQVEgKHJlY8OpbSBjcmlhZG9zKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0aWdvcyBkYSBGQVEgKGFsdGVyYWRvcyByZWNlbnRlbWVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0NhdGVnb3JpYSBkZSBGQVEgYXR1YWxpemFkYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJ0NhdGVnb3JpYSBkZSBGQVEgYWRpY2lvbmFkYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnVW1hIGNhdGVnb3JpYSBwcmVjaXNhIHRlciB1bSBub21lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAnRXN0YSBjYXRlZ29yaWEgasOhIGV4aXN0ZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIGFkZGVkISd9ID0gJ0lkaW9tYSBkZSBGQVEgYWRpY2lvbmFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnSWRpb21hIGRlIEZBUSBhdHVhbGl6YWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICdPIG5vbWUgw6kgb2JyaWdhdMOzcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0Vzc2UgaWRpb21hIGrDoSBleGlzdGUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5bXB0b20nfSA9ICdTaW50b21hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvbHV0aW9uJ30gPSAnU29sdcOnw6NvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAnQWRpY2lvbmFyIEFydGlnbyBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICdQYWxhdnJhcy1jaGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ1VtYSBjYXRlZ29yaWEgw6kgbmVjZXNzw6FyaWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAnQXByb3Zhw6fDo28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnR2VyZW5jaWFtZW50byBkZSBDYXRlZ29yaWEgZGUgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBjYXRlZ29yeSd9ID0gJ0FkaWNpb25hciBjYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnRXhjbHVpciBjYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICdBZGljaW9uYXIgY2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdBbHRlcmFyIGNhdGVnb3JpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1BvciBmYXZvciwgc2VsZWNpb25lIHBlbG8gbWVub3MgdW0gZ3J1cG8gZGUgcGVybWlzc8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgZ3JvdXBzIHRoYXQgY2FuIGFjY2VzcyBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5Lid9ID0gJ0dydXBvcyBkZSBhdGVuZGVudGVzIHF1ZSBwb2RlbSBhY2Vzc2FyIGFydGlnb3MgbmVzdGEgY2F0ZWdvcmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxsIGJlIHNob3duIGFzIGNvbW1lbnQgaW4gRXhwbG9yZXIuJ30gPSAnU2Vyw6EgZXhpYmlkbyBjb21vIGNvbWVudMOhcmlvIG5vIEV4cGxvcmFkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ1ZvY8OqIHJlYWxtZW50ZSBxdWVyIGFwYWdhciBlc3RhIGNhdGVnb3JpYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPQogICAgICAgICdWb2PDqiBuw6NvIHBvZGUgcmVtb3ZlciBlc3NhIGNhdGVnb3JpYS4gRWxhIMOpIHV0aWxpemFkYSBwb3IgcGVsbyBtZW5vcyB1bSBBcnRpZ28gZGEgRkFRIGUvb3Ugw6kgcGFpIGRlIHBlbG8gbWVub3MgdW1hIG91dHJhIGNhdGVnb3JpYS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnRXN0YSBjYXRlZ29yaWEgw6kgdXRpbGl6YWRhIG5vKHMpIHNlZ3VpbnRlKHMpIGFydGlnbyhzKSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnRXN0YSBjYXRlZ29yaWEgw6kgcGFpIGRhcyBzZWd1aW50ZXMgc3ViY2F0ZWdvcmlhcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdWb2PDqiByZWFsbWVudGUgcXVlciBleGNsdWlyIGVzdGUgYXJ0aWdvIEZBUT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdFeHBsb3JhZG9yIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICdCdXNjYSBSw6FwaWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICdDb3JpbmdhcyBzw6NvIHBlcm1pdGlkb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJ1Blc3F1aXNhIEF2YW7Dp2FkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yaWVzJ30gPSAnU3ViY2F0ZWdvcmlhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdBcnRpZ29zIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdWJjYXRlZ29yaWVzIGZvdW5kLid9ID0gJ1N1YmNhdGVnb3JpYXMgbsOjbyBlbmNvbnRyYWRhcy4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZid9ID0gJ0hpc3TDs3JpY28gZGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSm91cm5hbE92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBKb3VybmFsIGRhdGEgZm91bmQuJ30gPSAnTsOjbyBmb3JhbSBlbmNvbnRyYWRvcyBkYWRvcyBkZSBKb3JuYWwgRkFRLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdHZXJlbmNpYW1lbnRvIGRlIElkaW9tYXMgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAnVXNlIGVzc2UgcmVjdXJzbyBzZSB2b2PDqiBkZXNlamEgdHJhYmFsaGFyIGNvbSBtw7psdGlwbG9zIGlkaW9tYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ0FkaWNpb25hciBpZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIExhbmd1YWdlICVzJ30gPSAnRXhjbHVpciBpZGlvbWEgJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnQWRpY2lvbmFyIElkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IExhbmd1YWdlJ30gPSAnRWRpdGFyIElkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnVm9jw6ogcmVhbG1lbnRlIHF1ZXIgZXhjbHVpciBlc3RlIGlkaW9tYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAnVm9jw6ogbsOjbyBwb2RlIGV4Y2x1aXIgZXN0ZSBpZGlvbWEuIEVsZSDDqSB1c2FkbyBlbSBwZWxvIG1lbm9zIHVtIGFydGlnbyBGQVEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnRXN0ZSBpZGlvbWEgw6kgdXNhZG8gbm9zIHNlZ3VpbnRlcyBhcnRpZ28ocykgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnQ29uZmlndXJhw6fDtWVzIGRlIENvbnRleHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ0FydGlnb3MgRkFRIHBvciBww6FnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ07Do28gZm9yYW0gZW5jb250cmFkb3MgZGFkb3MgZGUgRkFRLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmQnfSA9ICdQYWxhdnJhLWNoYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgKGUuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCknfSA9ICdWb3RvIChleC4gSWd1YWwgYSAxMCBvdSBtYWlvciBxdWUgNjApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgKGUuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlKSd9ID0gJ1BvbnR1YcOnw6NvIChleC4gSWd1YWwgYSAyNSUgb3UgbWFpb3IgcXVlIDc1JSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92ZWQnfSA9ICdBcHJvdmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdBbHRlcmFkbyBwZWxhIMO6bHRpbWEgdmV6IHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ0hvcsOhcmlvIGRlIGNyaWHDp8OjbyBkZSBhcnRpZ28gZGUgRkFRIChhbnRlcy9kZXBvaXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ0hvcsOhcmlvIGRlIGNyaWHDp8OjbyBkZSBhcnRpZ28gZGUgRkFRIChlbnRyZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICdIb3LDoXJpbyBkZSBhbHRlcmHDp8OjbyBkZSBhcnRpZ28gZGUgRkFRIChhbnRlcy9kZXBvaXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ0hvcsOhcmlvIGRlIGFsdGVyYcOnw6NvIGRlIGFydGlnbyBkZSBGQVEgKGVudHJlKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICdGQVEtVGV4dG9Db21wbGV0byc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJ0J1c2NhIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJ1NlbGXDp8OjbyBkZSBwZXJmaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJ1ZvdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJ1NlbSBjb25maWd1cmHDp8O1ZXMgZGUgdm90byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyB2b3Rlcyd9ID0gJ1ZvdG9zIGVzcGVjw61maWNvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjAnfSA9ICdleC4gSWd1YWwgYSAxMCBvdSBtYWlvciBxdWUgNjAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSd9ID0gJ1BvbnR1YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2V0dGluZ3MnfSA9ICdTZW0gY29uZmlndXJhw6fDtWVzIGRlIHBvbnR1YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHJhdGUnfSA9ICdQb250dWHDp8OjbyBlc3BlY8OtZmljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSd9ID0gJ2V4LiBJZ3VhbCBhIDI1JSBvdSBtYWlvciBxdWUgNzUlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAnSG9yw6FyaW8gZGUgY3JpYcOnw6NvIGRlIGFydGlnbyBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgZGF0ZSd9ID0gJ0RhdGEgZXNwZWPDrWZpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSByYW5nZSd9ID0gJ1BlcsOtb2RvIGRlIGRhdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUnfSA9ICdIb3LDoXJpbyBkZSBhbHRlcmHDp8OjbyBkZSBhcnRpZ28gZGUgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBkbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnTm90YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvdXQgb2YgNSd9ID0gJ2RlIDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZXMnfSA9ICdWb3Rvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICdOZW5odW0gdm90byBlbmNvbnRyYWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnTmVuaHVtIHZvdG8gZW5jb250cmFkbyEgU2VqYSBvIHByaW1laXJvIGEgYXZhbGlhciBlc3RlIGFydGlnbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdCYWl4YXIgYW5leG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnUGFyYSBhYnJpciBsaW5rcyBub3MgYmxvY29zIGRlIGRlc2NyacOnw6NvIHNlZ3VpbnRlcywgdGFsdmV6IHZvY8OqIHByZWNpc2UgcHJlc3Npb25hciBDdHJsLCBDbWQgb3UgU2hpZnQgZW5xdWFudG8gY2xpY2Egbm8gbGluayAoZGVwZW5kZW5kbyBkbyBzZXUgbmF2ZWdhZG9yIG91IHNpc3RlbWEgb3BlcmFjaW9uYWwpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9CiAgICAgICAgJ0VzdGUgYXJ0aWdvIHRlIGFqdWRvdT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICdwb3VjbyDDunRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICdtdWl0byDDunRpbCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgdGl0bGUgdG8gYXJ0aWNsZSBzdWJqZWN0J30gPSAnQWRpY2lvbmFyIGFzc3VudG8gbm8gYXJ0aWdvIGRhIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnSW5zZXJpciB0ZXh0byBkbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRJ30gPSAnSW5zZXJpciB0b2RvIG8gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0luc2VyaXIgbGluayBkbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJ0luc2VyaXIgdGV4dG8gZG8gRkFRIGUgbGluayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnSW5zZXJpciB0b2RvIG8gRkFRIGUgbGluayc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ05lbmh1bSBhcnRpZ28gRkFRIGVuY29udHJhZG8uJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICdQZXNxdWlzYSBjb21wbGV0YSBkZSB0ZXh0b3MgZW0gYXJ0aWdvcyBGQVEgKHBvciBleGVtcGxvLCAiSm8qbyIgb3IgIldpbGwqIiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSByZXN0cmljdGlvbnMnfSA9ICdSZXN0cmnDp8O1ZXMgZGUgdm90byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHZvdGVzLi4uJ30gPSAnQXBlbmFzIGFydGlnb3MgZGUgRkFRIGNvbSB2b3Rvcy4uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIHJlc3RyaWN0aW9ucyd9ID0gJ1Jlc3RyacOnw7VlcyBkZSBwb250dWHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHJhdGUuLi4nfSA9ICdBcGVuYXMgYXJ0aWdvcyBkZSBGQVEgY29tIHBvbnR1YcOnw6NvLi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQnfSA9ICdBcGVuYXMgYXJ0aWdvcyBkZSBGQVEgY3JpYWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkIGJldHdlZW4nfSA9ICdBcGVuYXMgYXJ0aWdvcyBkZSBGQVEgY3JpYWRvcyBlbnRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICdQZXJmaWwgZGUgcGVzcXVpc2EgY29tbyBtb2RlbG8/JzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgTnVtYmVyJ30gPSAnTsO6bWVybyBkbyBBcnRpZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIGZvciBhcnRpY2xlcyB3aXRoIGtleXdvcmQnfSA9ICdQcm9jdXJlIHBvciBhcnRpZ29zIGNvbSBwYWxhdnJhcy1jaGF2ZSc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICdQw7pibGljbyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnVm9sdGFyIHBhcmEgbyBFeHBsb3JhZG9yIEZBUSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFKb3VybmFsLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ0pvcm5hbCBGQVEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgdXBkYXRlJ30gPSAnw5psdGltYSBhdHVhbGl6YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBEeW5hbWljIEZpZWxkcyd9ID0gJ0NhbXBvcyBkaW7Dom1pY29zIGRhIEZBUSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICdOZW5odW0gcmVzdWx0YWRvISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9GQVEucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgYXJ0aWNsZSBpcyBlbXB0eSEnfSA9ICdPIGFydGlnbyBlc3TDoSB2YXppbyEnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPQogICAgICAgICdVbSBmaWx0cm8gZGUgc2HDrWRhIEhUTUwgcGFyYSBhZGljaW9uYXIgbGlua3MgcGFyYSB0csOhcyB1bWEgc2Vxw7zDqm5jaWEgZGVmaW5pZGEuIE8gZWxlbWVudG8gZGUgaW1hZ2VtIHBlcm1pdGUgZG9pcyB0aXBvcyBkZSBlbnRyYWRhLiBQcmltZWlybywgbyBub21lIGRlIHVtYSBpbWFnZW0gKGZhcS5wbmcsIHBvciBleGVtcGxvKS4gTmVzdGUgY2FzbywgbyBjYW1pbmhvIGRhIGltYWdlbSBPVFJTIHNlcsOhIHVzYWRvLiBBIHNlZ3VuZGEgcG9zc2liaWxpZGFkZSDDqSBpbnNlcmlyIG8gbGluayBwYXJhIGEgaW1hZ2VtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDU1MgY29sb3IgZm9yIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ0NTUyBjb3IgcGFyYSBvIHJlc3VsdGFkbyBkYSB2b3Rhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICdUZW1wbyBkZSBleHBpcmHDp8OjbyBkZSBjYWNoZSBwYXJhIGl0ZW5zIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0dlcmVuY2lhbWVudG8gZGUgQ2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ0Nhc2FzIGRlY2ltYWlzIGRvIHJlc3VsdGFkbyBkYSB2b3Rhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICdOb21lIHBhZHLDo28gZGEgY2F0ZWdvcmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnSWRpb21hIHBhZHLDo28gcGFyYSBvcyBhcnRpZ29zIEZBUSBubyBtb2RvIGRlIGlkaW9tYSDDum5pY28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJ1RhbWFuaG8gbcOheGltbyBwYWRyw6NvIGRvcyB0w610dWxvcyBlbSB1bSBhcnRpZ28gZGUgRkFRIGEgc2VyZW0gZXhpYmlkb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9CiAgICAgICAgJ1ByaW9yaWRhZGUgcGFkcsOjbyBkZSBjaGFtYWRvcyBwYXJhIGEgYXByb3Zhw6fDo28gZG9zIGFydGlnb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAnRXN0YWRvIHBhZHLDo28gZGUgZW50cmFkYSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdFc3RhZG8gcGFkcsOjbyBkZSBjaGFtYWRvcyBwYXJhIGEgYXByb3Zhw6fDo28gZG9zIGFydGlnb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdUaXBvIHBhZHLDo28gZG8gY2hhbWFkb3MgcGFyYSBhIGFwcm92YcOnw6NvIGRlIGFydGlnb3MgZGEgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0KICAgICAgICAnVmFsb3IgcGFkcsOjbyBwYXJhIG8gcGFyw6JtZXRybyBkZSBSZWN1cnNvIHBhcmEgYSBpbnRlcmZhY2UgcMO6YmxpY2EuIE8gcGFyw6JtZXRybyBkZSBhw6fDo28gw6kgdXNhZG8gbm9zIHNjcmlwdHMgZG8gc2lzdGVtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGlmIHRoZSBGQVEgdGl0bGUgc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBhcnRpY2xlIHN1YmplY3QuJ30gPQogICAgICAgICdEZWZpbmUgc2UgbyB0w610dWxvIGRvIEZBUSBkZXZlIHNlciBjb25jYXRlbmFkbyBhbyBhc3N1bnRvIGRvIGFydGlnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0KICAgICAgICAnRGVmaW5lIHVtIG3Ds2R1bG8gZGUgcmVzdW1vIHBhcmEgbW9zdHJhciBhIHZpc3VhbGl6YcOnw6NvIHBlcXVlbmEgZGUgdW0gam9ybmFsIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0KICAgICAgICAnRGVmaW5lIHVtIG3Ds2R1bG8gZGUgcmVzdW1vIHBhcmEgbW9zdHJhciBhIHZpc3VhbGl6YXIgZGUgdW1hIHBlcXVlbmEgbGlzdGEgZGUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gYXRyaWJ1dG8gcGFkcsOjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBvIEZBUSBlbSB1bWEgcGVzcXVpc2EgRkFRIGRhIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgbyBhdHJpYnV0byBwYWRyw6NvIEZBUSBwYXJhIGNsYXNzaWZpY2FyIG8gRkFRIGVtIHVtYSBwZXNxdWlzYSBGQVEgZGEgaW50ZXJmYWNlIGRvIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gYXRyaWJ1dG8gcGFkcsOjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBvIEZBUSBlbSB1bWEgcGVzcXVpc2EgRkFRIGRhIGludGVyZmFjZSBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgbyBhdHJpYnV0byBwYWRyw6NvIEZBUSBwYXJhIGNsYXNzaWZpY2FyIG8gRkFRIG5vIEdlcmVuY2lhZG9yIEZBUSBkYSBpbnRlcmZhY2UgZG8gYXRlbmRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gYXRyaWJ1dG8gcGFkcsOjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBvIEZBUSBubyBHZXJlbmNpYWRvciBGQVEgZGEgaW50ZXJmYWNlIGRvIGNsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gYXRyaWJ1dG8gcGFkcsOjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBvIEZBUSBubyBHZXJlbmNpYWRvciBGQVEgZGEgaW50ZXJmYWNlIHDDumJsaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRGVmaW5lIGEgb3JkZW0gcGFkcsOjbyBkZSBGQVEgbm8gcmVzdWx0YWRvIGRvIEdlcmVuY2lhZG9yIEZBUSBkYSBpbnRlcmZhY2UgZG8gYXRlbmRlbnRlLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmUgYSBvcmRlbSBwYWRyw6NvIGRlIEZBUSBubyByZXN1bHRhZG8gZG8gR2VyZW5jaWFkb3IgRkFRIGRhIGludGVyZmFjZSBkbyBjbGllbnRlLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRGVmaW5lIGEgb3JkZW0gcGFkcsOjbyBkZSBGQVEgbm8gcmVzdWx0YWRvIGRvIEdlcmVuY2lhZG9yIEZBUSBkYSBpbnRlcmZhY2UgcMO6YmxpY2EuIEFjaW1hOiBBIG1haXMgYW50aWdhIG5vIHRvcG8uIEFiYWl4bzogbWFpcyByZWNlbnRlcyBubyB0b3BvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmUgYSBvcmRlbSBwYWRyw6NvIGRlIEZBUSBubyByZXN1bHRhZG8gZGEgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4gQWNpbWE6IEEgbWFpcyBhbnRpZ2Egbm8gdG9wby4gQWJhaXhvOiBtYWlzIHJlY2VudGVzIG5vIHRvcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0RlZmluZSBhIG9yZGVtIHBhZHLDo28gZGUgRkFRIG5vIHJlc3VsdGFkbyBkYSBwZXNxdWlzYSBuYSBpbnRlcmZhY2UgZG8gY2xpZW50ZS4gQWNpbWE6IEEgbWFpcyBhbnRpZ2Egbm8gdG9wby4gQWJhaXhvOiBtYWlzIHJlY2VudGVzIG5vIHRvcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdEZWZpbmUgYSBvcmRlbSBwYWRyw6NvIGRlIEZBUSBubyByZXN1bHRhZG8gZGEgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIHDDumJsaWNhLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICdEZWZpbmUgbyBhdHJpYnV0byBkZSBwZXNxdWlzYSBkZSBGQVEgcGFkcsOjbyBuYSB0ZWxhIGRlIHByb2N1cmEgZGUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuICJGdWxsIEZBUSIgaW5jbHVkZXMgdGV4dCwgYXR0YWNobWVudHMgYW5kIGlubGluZSBpbWFnZXMuJ30gPQogICAgICAgICdEZWZpbmUgYSBpbmZvcm1hw6fDo28gYSBzZXIgaW5zZXJpZGEgbm8gY2hhbWFkbyBiYXNlYWRvIGVtIEZBUS4gIlRvZG8gbyBGQVEiIGluY2x1aSB0ZXh0bywgYW5leG9zIGUgaW1hZ2VucyBlbWJ1dGlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBwYXLDom1ldHJvcyBwYXJhIG8gYmFja2VuZCBkbyBkYXNoYm9hcmQuICJMaW1pdGUiIGRlZmluZSBvIG7Dum1lcm8gZGUgZW50cmFkYXMgZXhpYmlkYXMgcG9yIHBhZHLDo28uICJHcnVwbyIgw6kgdXNhZG8gcGFyYSByZXN0cmluZ2lyIG8gYWNlc3NvIGFvIHBsdWdpbiAoZXguOiBHcnVwbzogYWRtaW4sIGdydXBvMSwgZ3J1cG8yKS4gIlBhZHLDo28iIGluZGljYSBzZSBvIHBsdWdpbiDDqSBoYWJpbGl0YWRvIHBvciBwYWRyw6NvIG91IHNlIG8gdXN1w6FyaW8gcHJlY2lzYSBoYWJpbGl0w6EtbG8gbWFudWFsbWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYWRhcyBubyBHZXJlbmNpYWRvciBGQVEuIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYWRhcyBubyBqb3JuYWwgRkFRLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYWRhcyBuYSBwZXNxdWlzYSBGQVEuIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJ0RlZmluZSBvbmRlIG8gbGluayAiSW5zZXJpciBGQVEiIHNlcsOhIGV4aWJpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ0RlZmluacOnw6NvIGRlIGNhbXBvcyBkZSB0ZXh0byBsaXZyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnRXhjbHVpciBlc3RlIEZBUSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdDYW1wb3MgZGluw6JtaWNvcyBtb3N0cmFkb3MgbmEgdGVsYSBkZSBhZGnDp8OjbyBkZSBGQVEgZGEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4gQ29uZmlndXJhw6fDtWVzIHBvc3PDrXZlaXM6IDAgPSBEZXNhYmlsaXRhZG8sIDEgPSBIYWJpbGl0YWRvLCAyID0gSGFiaWxpdGFkbyBlIHJlcXVlcmlkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnQ2FtcG9zIGRpbsOibWljb3MgbW9zdHJhZG9zIG5hIHRlbGEgZGUgZWRpw6fDo28gZGUgRkFRIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkbywgMiA9IEhhYmlsaXRhZG8gZSByZXF1ZXJpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdDYW1wb3MgZGluw6JtaWNvcyBtb3N0cmFkb3MgbmEgdmlzw6NvIGdlcmFsIGRlIEZBUSBkYSBpbnRlcmZhY2UgZGUgY2xpZW50ZS4gQ29uZmlndXJhw6fDtWVzIHBvc3PDrXZlaXM6IDAgPSBEZXNhYmlsaXRhZG8sIDEgPSBIYWJpbGl0YWRvLCAyID0gSGFiaWxpdGFkbyBlIHJlcXVlcmlkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdDYW1wb3MgZGluw6JtaWNvcyBtb3N0cmFkb3MgbmEgdmlzw6NvIGdlcmFsIGRlIEZBUSBkYSBpbnRlcmZhY2UgcMO6YmxpY2EuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkbywgMiA9IEhhYmlsaXRhZG8gZSByZXF1ZXJpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnQ2FtcG9zIGRpbsOibWljb3MgbW9zdHJhZG9zIG5hIHRlbGEgZGUgaW1wcmVzc8OjbyBkZSBGQVEgZGEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4gQ29uZmlndXJhw6fDtWVzIHBvc3PDrXZlaXM6IDAgPSBEZXNhYmlsaXRhZG8sIDEgPSBIYWJpbGl0YWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0NhbXBvcyBkaW7Dom1pY29zIG1vc3RyYWRvcyBuYSB0ZWxhIGRlIGltcHJlc3PDo28gZGUgRkFRIGRhIGludGVyZmFjZSBkZSBjbGllbnRlLiBDb25maWd1cmHDp8O1ZXMgcG9zc8OtdmVpczogMCA9IERlc2FiaWxpdGFkbywgMSA9IEhhYmlsaXRhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0NhbXBvcyBkaW7Dom1pY29zIG1vc3RyYWRvcyBuYSB0ZWxhIGRlIGltcHJlc3PDo28gZGUgRkFRIGRhIGludGVyZmFjZSBww7pibGljYS4gQ29uZmlndXJhw6fDtWVzIHBvc3PDrXZlaXM6IDAgPSBEZXNhYmlsaXRhZG8sIDEgPSBIYWJpbGl0YWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnQ2FtcG9zIGRpbsOibWljb3MgbW9zdHJhZG9zIG5hIHRlbGEgZGUgcGVzcXVpc2EgZGUgRkFRIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkbywgMiA9IEhhYmlsaXRhZG8gZSBleGliaWRvIHBvciBwYWRyw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnQ2FtcG9zIGRpbsOibWljb3MgbW9zdHJhZG9zIG5hIHRlbGEgZGUgcGVzcXVpc2EgZGUgRkFRIGRhIGludGVyZmFjZSBkZSBjbGllbnRlLiBDb25maWd1cmHDp8O1ZXMgcG9zc8OtdmVpczogMCA9IERlc2FiaWxpdGFkbywgMSA9IEhhYmlsaXRhZG8sIDIgPSBIYWJpbGl0YWRvIGUgZXhpYmlkbyBwb3IgcGFkcsOjby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdDYW1wb3MgZGluw6JtaWNvcyBtb3N0cmFkb3MgbmEgdGVsYSBkZSBwZXNxdWlzYSBkZSBGQVEgZGEgaW50ZXJmYWNlIHDDumJsaWNhLiBDb25maWd1cmHDp8O1ZXMgcG9zc8OtdmVpczogMCA9IERlc2FiaWxpdGFkbywgMSA9IEhhYmlsaXRhZG8sIDIgPSBIYWJpbGl0YWRvIGUgZXhpYmlkbyBwb3IgcGFkcsOjby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzbWFsbCBmb3JtYXQgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnQ2FtcG9zIGRpbsOibWljb3MgbW9zdHJhZG9zIG5hIHRlbGEgZGUgdmlzw6NvIGdlcmFsIGRlIEZBUSBlbSBmb3JtYXRvIHBlcXVlbm8gZGEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4gQ29uZmlndXJhw6fDtWVzIHBvc3PDrXZlaXM6IDAgPSBEZXNhYmlsaXRhZG8sIDEgPSBIYWJpbGl0YWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnQ2FtcG9zIGRpbsOibWljb3MgbW9zdHJhZG9zIG5hIHRlbGEgZGUgZGV0YWxoZXMgZGUgRkFRIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0NhbXBvcyBkaW7Dom1pY29zIG1vc3RyYWRvcyBuYSB0ZWxhIGRlIGRldGFsaGVzIGRlIEZBUSBkYSBpbnRlcmZhY2UgZGUgY2xpZW50ZS4gQ29uZmlndXJhw6fDtWVzIHBvc3PDrXZlaXM6IDAgPSBEZXNhYmlsaXRhZG8sIDEgPSBIYWJpbGl0YWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0NhbXBvcyBkaW7Dom1pY29zIG1vc3RyYWRvcyBuYSB0ZWxhIGRlIGRldGFsaGVzIGRlIEZBUSBkYSBpbnRlcmZhY2UgcMO6YmxpY2EuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0VkaXRhciBlc3RlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgbXVsdGlwbGUgbGFuZ3VhZ2VzIG9uIEZBUSBtb2R1bGUuJ30gPSAnUGVybWl0aXIgdsOhcmlvcyBpZGlvbWFzIG5vIG3Ds2R1bG8gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJ1Blcm1pdGlyIG1lY2FuaXNtbyBkZSBBdmFsaWHDp8OjbyBubyBtw7NkdWxvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0xpbWl0ZSBkYSBWaXPDo28gR2VyYWwgIlBlcXVlbm8iIGRvIEpvcm5hbCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMaW1pdGUgZGEgVmlzw6NvIEdlcmFsIEZBUSAiUGVxdWVubyInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiJ30gPSAnTGltaXRlIGRlIEZBUXMgcG9yIHDDoWdpbmEgZGEgVmlzw6NvIEdlcmFsICJQZXF1ZW5vIiBkbyBKb3JuYWwgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdMaW1pdGUgZGUgRkFRcyBwb3IgcMOhZ2luYSBkYSBWaXPDo28gR2VyYWwgIlBlcXVlbm8iIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnRkFRIGJ1c2NhIHNlcnZpZG9yIHJvdGVhZG9yIGRhIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnw4FyZWEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNCd9ID0gJ0NhbXBvNCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDUnfSA9ICdDYW1wbzUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnRnJvbnRlbmQgZGUgcmVnaXN0byBkbyBtw7NkdWxvIHBhcmEgYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0dydXBvIHBhcmEgYSBhcHJvdmHDp8OjbyBkb3MgYXJ0aWdvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICdIaXN0w7NyaWNvIGRlc3RlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnSW5jbHVpciBjYW1wb3MgaW50ZXJub3MgZGUgdW0gQ2hhbWFkbyBiYXNlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdJbmNsdWlyIG8gbm9tZSBkZSBjYWRhIGNhbXBvIGVtIHVtIENoYW1hZG8gYmFzZSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrIHNlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnSW50ZXJmYWNlcyBvbmRlIGEgcGVzcXVpc2EgcsOhcGlkYSBkZXZlIHNlciBtb3N0cmFkYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0pvcm5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnR2VzdMOjbyBkZSBpZGlvbWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJ0xpbmsgZGUgb3V0cm8gYXJ0aWdvIHBhcmEgZXN0ZSBpdGVtIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdMaXN0YSBkb3MgdGlwb3MgZGUgZXN0YWRvIHF1ZSBwb2RlIHNlciB1dGlsaXphZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTGlzdGEgZG9zIHRpcG9zIGRlIGVzdGFkbyBxdWUgcG9kZSBzZXIgdXRpbGl6YWRvIG5hIGludGVyZmFjZSBkZSBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTGlzdGEgZG9zIHRpcG9zIGRlIGVzdGFkbyBxdWUgcG9kZSBzZXIgdXRpbGl6YWRvIG5hIGludGVyZmFjZSBww7pibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTyBuw7ptZXJvIG3DoXhpbW8gZGUgYXJ0aWdvcyBGQVEgcGFyYSBzZXIgZXhpYmlkbyBubyByZXN1bHRhZG8gZG8gR2VyZW5jaWFkb3IgRkFRIGRhIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ08gbsO6bWVybyBtw6F4aW1vIGRlIGFydGlnb3MgRkFRIHBhcmEgc2VyIGV4aWJpZG8gbm8gcmVzdWx0YWRvIGRvIEdlcmVuY2lhZG9yIEZBUSBkYSBpbnRlcmZhY2UgZG8gY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ08gbsO6bWVybyBtw6F4aW1vIGRlIGFydGlnb3MgRkFRIHBhcmEgc2VyIGV4aWJpZG8gbm8gcmVzdWx0YWRvIGRvIEdlcmVuY2lhZG9yIEZBUSBkYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSBwYXJhIHNlciBleGliaWRvIG5vIGpvcm5hbCBGQVEgZGEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSBwYXJhIHNlciBleGliaWRvIG5vIHJlc3VsdGFkbyBkZSB1bWEgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSBwYXJhIHNlciBleGliaWRvIG5vIHJlc3VsdGFkbyBkZSB1bWEgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIGRvIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ08gbsO6bWVybyBtw6F4aW1vIGRlIGFydGlnb3MgRkFRIHBhcmEgc2VyIGV4aWJpZG8gbm8gcmVzdWx0YWRvIGRlIHVtYSBwZXNxdWlzYSBuYSBpbnRlcmZhY2UgcHVibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdUYW1hbmhvIG3DoXhpbW8gZGUgdMOtdHVsb3MgZW0gdW0gYXJ0aWdvIEZBUSBhIHNlcmVtIGV4aWJpZG9zIG5vIEV4cGxvcmFkb3IgRkFRIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVGFtYW5obyBtw6F4aW1vIGRlIHTDrXR1bG9zIGVtIHVtIGFydGlnbyBGQVEgYSBzZXJlbSBleGliaWRvcyBubyBFeHBsb3JhZG9yIEZBUSBkYSBpbnRlcmZhY2UgZGUgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVGFtYW5obyBtw6F4aW1vIGRlIHTDrXR1bG9zIGVtIHVtIGFydGlnbyBGQVEgYSBzZXJlbSBleGliaWRvcyBubyBFeHBsb3JhZG9yIEZBUSBkYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1RhbWFuaG8gbcOheGltbyBkZSB0w610dWxvcyBlbSB1bSBhcnRpZ28gRkFRIGEgc2VyZW0gZXhpYmlkb3MgbmEgUGVzcXVpc2EgZGUgRkFRIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1RhbWFuaG8gbcOheGltbyBkZSB0w610dWxvcyBlbSB1bSBhcnRpZ28gRkFRIGEgc2VyZW0gZXhpYmlkb3MgbmEgUGVzcXVpc2EgZGUgRkFRIGRhIGludGVyZmFjZSBkZSBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVGFtYW5obyBtw6F4aW1vIGRlIHTDrXR1bG9zIGVtIHVtIGFydGlnbyBGQVEgYSBzZXJlbSBleGliaWRvcyBuYSBQZXNxdWlzYSBkZSBGQVEgZGEgaW50ZXJmYWNlIHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVGFtYW5obyBtw6F4aW1vIGRlIHTDrXR1bG9zIGVtIHVtIGFydGlnbyBGQVEgYSBzZXJlbSBleGliaWRvcyBubyBKb3JuYWwgRkFRIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgRkFRIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSBnZXJhciBwZXJmaWwgSFRNTCBPcGVuU2VhcmNoIHBhcmEgcGVzcXVpc2FzIGN1cnRhcyBkZSBGQVEgbmEgaW50ZXJmYWNlIHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSBnZXJhciBwZXJmaWwgSFRNTCBPcGVuU2VhcmNoIHBhcmEgcGVzcXVpc2FzIGN1cnRhcyBkZSBGQVEgbmEgaW50ZXJmYWNlIGRlIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSBnZXJhciBodG1sICJPcGVuU2VhcmNoIiBwZXJmaWwgZGUgcGVzcXVpc2EgZmFxIGN1cnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICdOb3ZvIGFydGlnbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAnTm92b3MgYXJ0aWdvcyBGQVEgcHJlY2lzYW0gZGUgYXByb3Zhw6fDo28gYW50ZXMgZGUgc2VyIHB1YmxpY2Fkb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ07Dum1lcm8gZGUgYXJ0aWdvcyBGQVEgcGFyYSBzZXIgZXhpYmlkbyBubyBHZXJlbmNpYWRvciBGQVEgZG8gaW50ZXJmYWNlIGRvIGNsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ07Dum1lcm8gZGUgYXJ0aWdvcyBGQVEgcGFyYSBzZXIgZXhpYmlkbyBubyBHZXJlbmNpYWRvciBGQVEgZG8gaW50ZXJmYWNlIHB1YmxpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTsO6bWVybyBkZSBhcnRpZ29zIEZBUSBwYXJhIHNlciBleGliaWRvIGVtIGNhZGEgcMOhZ2luYSBkZSB1bSByZXN1bHRhZG8gZGUgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIGRvIGNsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ07Dum1lcm8gZGUgYXJ0aWdvcyBGQVEgcGFyYSBzZXIgZXhpYmlkbyBlbSBjYWRhIHDDoWdpbmEgZGUgdW0gcmVzdWx0YWRvIGRlIHBlc3F1aXNhIG5hIGludGVyZmFjZSBwdWJsaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnTsO6bWVybyBkZSBpdGVucyBtb3N0cmFkb3MgZW0gw7psdGltYXMgYWx0ZXJhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjcmVhdGVkLid9ID0gJ07Dum1lcm8gZGUgaXRlbnMgbW9zdHJhZG9zIGVtIMO6bHRpbWFzIGNyaWHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAnTsO6bWVybyBkZSBpdGVucyBtb3N0cmFkb3Mgbm8gcmVjdXJzbyB0b3AgMTAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIGRlIHDDoWdpbmFzIChuYXMgcXVhaXMgb3MgaXRlbnMgRkFRIHPDo28gbW9zdHJhZG9zKSBkYSB2aXPDo28gZ2VyYWwgcGVxdWVuYSBkbyBqb3JuYWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnUGFyw6JtZXRyb3MgZGUgcMOhZ2luYXMgKG5hcyBxdWFpcyBvcyBpdGVucyBGQVEgc8OjbyBtb3N0cmFkb3MpIGRhIHZpc8OjbyBnZXJhbCBwZXF1ZW5hIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdJbXByaW1pciBlc3RlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdGaWxhIHBhcmEgYSBhcHJvdmHDp8OjbyBkb3MgYXJ0aWdvcyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnQ29uZGnDp8OjbyBwYXJhIGEgYXZhbGlhw6fDo28uIENoYXZlIGRldmUgc2VyIGVtIHBlcmNlbnR1YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICdQZXNxdWlzYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnQ29uZmlndXJhIGEgYWx0dXJhIHBhZHLDo28gKGVtIHBpeGVscykgZGUgY2FtcG9zIEhUTUwgZW1idXRpZG9zIG5vIEFnZW50RkFRWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICdDb25maWd1cmEgYSBhbHR1cmEgcGFkcsOjbyAoZW0gcGl4ZWxzKSBkZSBjYW1wb3MgSFRNTCBlbWJ1dGlkb3MgZW0gQ3VzdG9tZXJGQVFab29tIChlIFB1YmxpY0ZBUVpvb20pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICdDb25maWd1cmEgYSBhbHR1cmEgbcOheGltYSAoZW0gcGl4ZWxzKSBkZSBjYW1wb3MgSFRNTCBlbWJ1dGlkb3Mgbm8gQWdlbnRGQVFab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJ0NvbmZpZ3VyYSBhIGFsdHVyYSBtw6F4aW1hIChlbSBwaXhlbHMpIGRlIGNhbXBvcyBIVE1MIGVtYnV0aWRvcyBlbSBDdXN0b21lckZBUVpvb20gKGUgUHVibGljRkFRWm9vbSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnTW9zdHJhIGJvdMOjbyAiSW5zZXJpciBMaW5rIEZBUSIgZW0gQW1wbGlhw6fDo28gcGVxdWVuYSBwYXJhIG8gYXJ0aWdvcyBGQVEgcMO6YmxpY29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIC8gIkluc2VydCBGdWxsIEZBUSAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJ01vc3RyYXIgYm90w7VlcyAiSW5zZXJpciB0ZXh0byBkbyBGQVEgZSBsaW5rIiAvICJJbnNlcmlyIHRvZG8gbyBGQVEgZSBsaW5rIiBlbSBBZ2VudEZBUVpvb21TbWFsbCBwYXJhIEFydGlnb3MgZGUgRkFRIHDDumJsaWNvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiAvICJJbnNlcnQgRnVsbCBGQVEiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9CiAgICAgICAgJ01vc3RyYXIgYm90w7VlcyAiSW5zZXJpciB0ZXh0byBkbyBGQVEiIC8gIkluc2VyaXIgdG9kbyBvIEZBUSIgZW0gQWdlbnRGQVFab29tU21hbGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ01vc3RyYXIgYXJ0aWdvIEZBUSBjb20gSFRNTC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnTW9zdHJhciBjYW1pbmhvIEZBUSBzaW0gLyBuw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnTW9zdHJhciBpdGVucyBkZSBzdWJjYXRlZ29yaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIGFzIMO6bHRpbWFzIGFsdGVyYcOnw7VlcyBkZSBpdGVucyBlbSBpbnRlcmZhY2VzIGRlZmluaWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ01vc3RyYXIgb3Mgw7psdGltb3MgaXRlbnMgY3JpYWRvcyBlbSBpbnRlcmZhY2VzIGRlZmluaWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ01vc3RyYXIgb3MgMTAgaXRlbnMgc3VwZXJpb3IgZW0gaW50ZXJmYWNlcyBkZWZpbmlkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdm90aW5nIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdNb3N0cmFyIHZvdGHDp8OjbyBlbSBpbnRlcmZhY2VzIGRlZmluaWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHF1ZSBwZXJtaXRlIGxpZ2FyIHVtIEZBUSBjb20gb3V0cm8gb2JqZXRvIG5vIG1vZG8gZGUgZXhpYmnDp8OjbyBhbXBsaWFkYSBuYSBpbnRlcmZhY2UgZG8gYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcXVlIHBlcm1pdGUgZXhjbHVpciB1bSBGQVEgbm8gbW9kbyBkZSBleGliacOnw6NvIGFtcGxpYWRhIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGFjZXNzYXIgbyBoaXN0w7NyaWNvIGRlIHVtIEZBUSBubyBtb2RvIGRlIGV4aWJpw6fDo28gYW1wbGlhZGEgbmEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBlZGl0YXIgdW0gRkFRIG5vIG1vZG8gZGUgZXhpYmnDp8OjbyBhbXBsaWFkYSBuYSBpbnRlcmZhY2UgZG8gYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIHZvbHRhciB1bSBGQVEgbm8gbW9kbyBkZSBleGliacOnw6NvIGFtcGxpYWRhIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGltcHJpbWlyIHVtIEZBUSBubyBtb2RvIGRlIGV4aWJpw6fDo28gYW1wbGlhZGEgbmEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0KICAgICAgICAnTyBpZGVudGlmaWNhZG9yIHBhcmEgdW0gRkFRLCBleGVtcGxvIEZBUSAjIEtCICMgIyBNeUZBUS4gTyBwYWRyw6NvIMOpIEZBUSAjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnRkFRXCcgcG9kZSBzZXIgcmVsYWNpb25hZG8gY29tIG91dHJvcyBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIG8gdGlwbyBkZSB2w61uY3VsbyBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0ZBUVwnIHBvZGUgc2VyIHJlbGFjaW9uYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgdsOtbmN1bG8gXCdQYWkgZSBmaWxob1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdGQVFcJyBwb2RlIHNlciByZWxhY2lvbmFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdDaGFtYWRvXCcgdXNhbmRvIG8gdGlwbyBkZSB2w61uY3VsbyBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0ZBUVwnIHBvZGUgc2VyIHJlbGFjaW9uYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIHbDrW5jdWxvIFwnUGFpIGUgZmlsaG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnQ29ycG8gZG8gY2hhbWFkbyBwYXJhIGFwcm92YcOnw6NvIGRlIHVtIGFydGlnbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdPIGFzc3VudG8gZG8gY2hhbWFkbyBwYXJhIGFwcm92YcOnw6NvIGRlIHVtIGFydGlnbyBGQVEuJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTIgRkNDTiAtIFJ1aSBGcmFuY2lzY28gPHJ1aS5mcmFuY2lzY29AZmNjbi5wdD4KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfUFRfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncMO6YmxpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICdleHRlcm5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBOdW1iZXInfSA9ICdOw7ptZXJvIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3RDaGFuZ2VkSXRlbXMnfSA9ICdBcnRpZ29zIG1vZGlmaWNhZG9zIHJlY2VudGVtZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3RDcmVhdGVkSXRlbXMnfSA9ICfDmmx0aW1vcyBhcnRpZ29zIGFkaWNpb25hZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcDEwSXRlbXMnfSA9ICdPcyAxMCBhcnRpZ29zIG1haXMgYWNlZGlkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViQ2F0ZWdvcnlPZid9ID0gJ1N1YmNhdGVnb3JpYSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNlbGVjdGVkISd9ID0gJ1NlbGVjaW9uZSBhIHBvbnR1YcOnw6NvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdww7pibGljbyAodG9kb3MpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdleHRlcm5vIChjbGllbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnaW50ZXJubyAoYWdlbnRlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydERheSd9ID0gJ0RpYSBkZSBpbsOtY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0TW9udGgnfSA9ICdNw6pzIGRlIGluw61jaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnRZZWFyJ30gPSAnQW5vIGRlIGluw61jaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kRGF5J30gPSAnRGlhIGRlIGZpbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmRNb250aCd9ID0gJ03DqnMgZGUgZmltJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZFllYXInfSA9ICdBbm8gZGUgZmltJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rcyBmb3IgeW91ciB2b3RlISd9ID0gJ09icmlnYWRvIHBlbGEgc3VhIGNvbGFib3Jhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICdKw6EgcGFydGljaXBvdSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdJbXByaW1pciBBcnRpZ28gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJ0FydGlnb3MgRkFRIChUb3AgMTApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAnQXJ0aWdvcyBGQVEgKGNyaWFkbyBub3ZvKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnQXJ0aWdvcyBGQVEgKGFsdGVyYWRvcyByZWNlbnRlbWVudGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0NhdGVnb3JpYSBGQVEgYXR1YWxpemFkYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJ0NhdGVnb3JpYSBGQVEgYWRpY2lvbmFkYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnQSBjYXRlZ29yaWEgcHJlY2lzYSB0ZXIgdW0gbm9tZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ0VzdGEgY2F0ZWdvcmlhIGrDoSBleGlzdGUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdJZGlvbWEgRkFRIGFkaWNpb25hZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJ0lkaW9tYSBGQVEgIGF0dWFsaXphZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ08gbm9tZSDDqSBvYnJpZ2F0w7NyaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJ30gPSAnTyBpZGlvbWEgasOhIGV4aXN0ZSEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdBZGljaW9uYXIgQXJ0aWdvIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJ0EgY2F0ZWdvcmlhIMOpIG9icmlnYXTDs3JpYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdBcHJvdmHDp8Ojbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRlIENhdGVnb3JpYSBkZSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAnQWRpY2lvbmFyIGNhdGVnb3JpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdBcGFnYXIgQ2F0ZWdvcmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnQWRpY2lvbmFyIGNhdGVnb3JpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAnQWx0ZXJhciBjYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ1NlcsOhIGV4aWJpZG8gY29tbyBjb21lbnTDoXJpbyBubyBicm93c2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAnUG9yIGZhdm9yLCBzZWxlY2lvbmUgcGVsbyBtZW5vcyB1bSBncnVwbyBkZSBwZXJtaXNzw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnR3J1cG9zIGRlIGFnZW50ZXMgcXVlIHBvZGVtIGFjZWRlciBhb3MgYXJ0aWdvcyBuZXN0YSBjYXRlZ29yaWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICdEZXNlamEgYXBhZ2FyIGVzdGEgY2F0ZWdvcmlhPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGlnbyBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0gJ07Do28gcG9kZSBhcGFnYXIgZXN0YSBjYXRlZ29yaWEuIMOJIHVzYWRhIGVtIHBlbG8gbWVub3MgdW0gYXJ0aWdvIEZBUSBlL291IMOpIHBhaSBkZSBwZWxvIG1lbm9zIHVtYSBvdXRyYSBjYXRlZ29yaWEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnRXN0YSBjYXRlZ29yaWEgw6kgdXRpbGl6YWRhIG5vKHMpIHNlZ3VpbnRlKHMpIGFydGlnbyhzKSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyBwYXJlbnQgb2YgdGhlIGZvbGxvd2luZyBzdWJjYXRlZ29yaWVzJ30gPSAnRXN0YSBjYXRlZ29yaWEgw6kgcGFpIGRhcyBzZWd1aW50ZXMgc3ViLWNhdGVnb3JpYXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnRGVzZWphIGFwYWdhciBlc3RlIGFydGlnbyBGQVE/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ0ZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnRXhwbG9yYWRvciBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVpY2sgU2VhcmNoJ30gPSAnUGVzcXVpc2EgUsOhcGlkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICdQZXNxdWlzYSBBdmFuw6dhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ1N1Yi1jYXRlZ29yaWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ0FydGlnb3MgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnU3ViY2F0ZWdvcmlhcyBuw6NvIGVuY29udHJhZGFzLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICdOw6NvIGZvcmFtIGVuY29udHJhZG9zIGRhZG9zIGRlIEpvcm5hbCBGQVEuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUxhbmd1YWdlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTGFuZ3VhZ2UgTWFuYWdlbWVudCd9ID0gJ0dlc3TDo28gZGUgSWRpb21hcyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPSAnVXRpbGl6ZSBlc3RhIGZ1bmNpb25hbEFudGlndWlkYWRlIGNhc2VvIGRlc2VqYSB0cmFiYWxoYXIgY29tIG3Dumx0aXBsb3MgaWRpb21hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnQWRpY2lvbmFyIGlkaW9tYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgTGFuZ3VhZ2UgJXMnfSA9ICdBcGFnYXIgaWRpb21hICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ0FkaWNpb25hciBpZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ0VkaXRhciBpZGlvbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ0Rlc2VqYSBhcGFnYXIgZXN0ZSBpZGlvbWE/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9ICdOw6NvIHBvZGUgYXBhZ2FyIGVzdGUgaWRpb21hLiDDiSB1c2FkbyBlbSBwZWxvIG1lbm9zIHVtIGFydGlnbyBGQVEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnRXN0ZSBpZGlvbWEgw6kgdXNhZG8gbm9zIHNlZ3VpbnRlcyBhcnRpZ28ocykgRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnQ29uZmlndXJhw6fDtWVzIGRlIENvbnRleHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ0FydGlnb3MgRkFRIHBvciBww6FnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBkYXRhIGZvdW5kLid9ID0gJ07Do28gZm9yYW0gZW5jb250cmFkb3MgZGFkb3MgZGUgRkFRLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUluZm8nfSA9ICdGQVEgSW5mb3JtYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnVm90b3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ0ZBUS1UZXh0b0NvbXBsZXRvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJ1Blc3F1aXNhIEZBUSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDo28gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ05vdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nICUnfSA9ICdOb3RhICUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICdyZWR1emlkbyBkZSA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ05lbmh1bSB2b3RvIGVuY29udHJhZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdOZW5odW0gdm90byBlbmNvbnRyYWRvISBTZWphIG8gcHJpbWVpcm8gYSBhdmFsaWFyIGVzdGUgYXJ0aWdvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJ0Rlc2NhcnJlZ2FyIGFuZXhvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlVm90aW5nUXVlc3Rpb24nfSA9ICdFc3RlIGFydGlnbyBmb2kgw7p0aWwgPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ27Do28gYWp1ZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAnbXVpdG8gw7p0aWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICdGQVEgSW5zZXJpciBUZXh0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICdGQVEgSW5zZXJpciBMaW5rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCAmIExpbmsnfSA9ICdGQVEgSW5zZXJpciBUZXh0byBlIExpbmsnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICdOZW5odW0gYXJ0aWdvIEZBUSBlbmNvbnRyYWRvLic7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFQcmludAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ1Blc3F1aXNhIGNvbXBsZXRhIGRlIHRleHRvcyBlbSBhcnRpZ29zIEZBUSAocG9yIGV4ZW1wbG8sICJKbypvIiBvciAiV2lsbCoiKSc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24KCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaFJlc3VsdFByaW50CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJ0RldGFsaGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnUGVzcXVpc2UgcG9yIGFydGlnb3MgY29tIHBhbGF2cmFzLWNoYXZlJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFFeHBsb3JlcgoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVByaW50CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICdQw7pibGljbyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0UHJpbnQKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVpvb20KCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJ1VtIGZpbHRybyBkZSBzYcOtZGEgSFRNTCBwYXJhIGFkaWNpb25hciBsaW5rcyBwYXJhIGF0csOhcyB1bWEgc2Vxw7zDqm5jaWEgZGVmaW5pZGEuIE8gZWxlbWVudG8gZGUgaW1hZ2VtIHBlcm1pdGUgZG9pcyB0aXBvcyBkZSBlbnRyYWRhLiBQcmltZWlybywgbyBub21lIGRhIGltYWdlbSAoZXg6ZmFxLnBuZykuIE5lc3RlIGNhc28sIG8gY2FtaW5obyBkYSBpbWFnZW0gT1RSUyBzZXLDoSB1dGlsaXphZG8uIEEgc2VndW5kYSBwZXJtaXRlIGluc2VyaXIgbyBsaW5rIHBhcmEgYSBpbWFnZW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NTUyBjb2xvciBmb3IgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ8O0ciBDU1MgcGFyYSBvIHJlc3VsdGFkbyBkYSB2b3Rhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRlIENhdGVnb3JpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnQ2FzYXMgZGVjaW1haXMgZG8gcmVzdWx0YWRvIGRhIHZvdGHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJ05vbWUgcG9yIG9taXNzw6NvIGRlIGNhdGVnb3JpYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJ0lkaW9tYSBwb3Igb21pc3PDo28gcGFyYSBvcyBhcnRpZ29zIEZBUSBubyBtb2RvIGRlIGlkaW9tYSDDum5pY28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdQcmlvcmlkYWRlIHBvciBvbWlzc8OjbyBkZSB0aWNrZXRzIHBhcmEgYXByb3Zhw6fDo28gZG9zIGFydGlnb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAnRXN0YWRvIHBvciBvbWlzc8OjbyBkZSBlbnRyYWRhIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0VzdGFkbyBwb3Igb21pc3PDo28gZGUgdGlja2V0cyBwYXJhIGFwcm92YcOnw6NvIGRvcyBhcnRpZ29zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9ICdWYWxvciBwb3Igb21pc3PDo28gcGFyYSBvIHBhcsOibWV0cm8gZGUgUmVjdXJzbyBuYSBpbnRlcmZhY2UgcMO6YmxpY2EuIE8gcGFyw6JtZXRybyBkZSBhw6fDo28gw6kgdXRpbGl6YWRvIG5vcyBzY3JpcHRzIGRvIHNpc3RlbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9ICdEZWZpbmUgdW0gbcOzZHVsbyBkZSByZXN1bW8gcGFyYSBtb3N0cmFyIGEgdmlzdGEgcGVxdWVuYSBkZSB1bSBqb3JuYWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPSAnRGVmaW5lIHVtIG3Ds2R1bG8gZGUgcmVzdW1vIHBhcmEgbW9zdHJhciBhIHZpc3VhbGl6YXIgZGUgdW1hIHBlcXVlbmEgbGlzdGEgZGUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBvIGF0cmlidXRvIHBvciBvbWlzc8OjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBhIEZBUSBudW1hIHBlc3F1aXNhIEZBUSBubyBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJ0RlZmluZSBvIGF0cmlidXRvIHBvciBvbWlzc8OjbyBGQVEgcGFyYSBjbGFzc2lmaWNhciBhIEZBUSBudW1hIHBlc3F1aXNhIEZBUSBubyBpbnRlcmZhY2UgZG8gY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnRGVmaW5lIG8gYXRyaWJ1dG8gcG9yIG9taXNzw6NvIEZBUSBwYXJhIGNsYXNzaWZpY2FyIGEgRkFRIGVtIHVtYSBwZXNxdWlzYSBGQVEgbmEgaW50ZXJmYWNlIHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdEZWZpbmUgbyBhdHJpYnV0byBwb3Igb21pc3PDo28gRkFRIHBhcmEgY2xhc3NpZmljYXIgbyBGQVEgbmEgZ2VzdMOjbyBGQVEgZGEgaW50ZXJmYWNlIGRvIGFnZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgbyBhdHJpYnV0byBwb3Igb21pc3PDo28gRkFRIHBhcmEgY2xhc3NpZmljYXIgbyBGQVEgbm8gR2VyZW5jaWFkb3IgRkFRIGRhIGludGVyZmFjZSBkbyBjbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICdEZWZpbmUgbyBhdHJpYnV0byBwb3Igb21pc3PDo28gRkFRIHBhcmEgY2xhc3NpZmljYXIgbyBGQVEgbmEgZ2VzdMOjbyBGQVEgZGEgaW50ZXJmYWNlIHDDumJsaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJ0RlZmluZSBhIG9yZGVtIHBvciBvbWlzc8OjbyBkZSBGQVEgbm8gcmVzdWx0YWRvIGRhIGdlc3TDo28gRkFRIGRhIGludGVyZmFjZSBkbyBhZ2VudGUuIEFjaW1hOiBBIG1haXMgYW50aWdhIG5vIHRvcG8uIEFiYWl4bzogbWFpcyByZWNlbnRlcyBubyB0b3BvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgYSBvcmRlbSBwb3Igb21pc3PDo28gZGUgRkFRIG5vIHJlc3VsdGFkbyBuYSBnZXN0w6NvIEZBUSBkYSBpbnRlcmZhY2UgZG8gY2xpZW50ZS4gQWNpbWE6IEEgbWFpcyBhbnRpZ2Egbm8gdG9wby4gQWJhaXhvOiBtYWlzIHJlY2VudGVzIG5vIHRvcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgYSBvcmRlbSBwb3Igb21pc3PDo28gZGUgRkFRIG5vIHJlc3VsdGFkbyBuYSBnZXN0w6NvIEZBUSBkYSBpbnRlcmZhY2UgcMO6YmxpY2EuIEFjaW1hOiBBIG1haXMgYW50aWdhIG5vIHRvcG8uIEFiYWl4bzogbWFpcyByZWNlbnRlcyBubyB0b3BvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5lIGEgb3JkZW0gcG9yIG9taXNzw6NvIGRlIEZBUSBubyByZXN1bHRhZG8gZGEgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIGRvIGFnZW50ZS4gQWNpbWE6IEEgbWFpcyBhbnRpZ2Egbm8gdG9wby4gQWJhaXhvOiBtYWlzIHJlY2VudGVzIG5vIHRvcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICdEZWZpbmUgYSBvcmRlbSBwb3Igb21pc3PDo28gZGUgRkFRIG5vIHJlc3VsdGFkbyBkYSBwZXNxdWlzYSBuYSBpbnRlcmZhY2UgZG8gY2xpZW50ZS4gQWNpbWE6IEEgbWFpcyBhbnRpZ2Egbm8gdG9wby4gQWJhaXhvOiBtYWlzIHJlY2VudGVzIG5vIHRvcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnRGVmaW5lIGEgb3JkZW0gcG9yIG9taXNzw6NvIGRlIEZBUSBubyByZXN1bHRhZG8gZGEgcGVzcXVpc2EgbmEgaW50ZXJmYWNlIHDDumJsaWNhLiBBY2ltYTogQSBtYWlzIGFudGlnYSBubyB0b3BvLiBBYmFpeG86IG1haXMgcmVjZW50ZXMgbm8gdG9wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYWRhcyBuYSBnZXN0w6NvIEZBUS4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYWRhcyBubyBqb3JuYWwgRkFRLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICdEZWZpbmUgYXMgY29sdW5hcyBtb3N0cmFkYXMgbmEgcGVzcXVpc2EgRkFRLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4gTm90ZTogQWdlbnRUaWNrZXRBY3Rpb25Db21tb24gaW5jbHVkZXMgQWdlbnRUaWNrZXROb3RlLCBBZ2VudFRpY2tldENsb3NlLCBBZ2VudFRpY2tldEZyZWVUZXh0LCBBZ2VudFRpY2tldE93bmVyLCBBZ2VudFRpY2tldFBlbmRpbmcsIEFnZW50VGlja2V0UHJpb3JpdHkgYW5kIEFnZW50VGlja2V0UmVzcG9uc2libGUuJ30gPSAnRGVmaW5lIG9uZGUgbyBsaW5rIFwnSW5zZXJpciBGQVFcJyBzZXLDoSBleGliaWRvLiBOb3RhOiBPcyBSZWN1cnNvIGNvbXVtcyBkbyBhZ2VudGUgaW5jbHVlbSBBYnJpciB0aWNrZXQsIEZlY2hhciB0aWNrZXQsIHRpY2tldCBkZSBUZXh0byBMaXZyZSwgcHJvcHJpZXTDoXJpbyBkbyB0aWNrZXQsIHRpY2tldCBwZW5kZW50ZSwgUHJpb3JpZGFkZSBlIHJlc3BvbnPDoXZlbCBkbyB0aWNrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ0RlZmluacOnw6NvIGRlIGNhbXBvcyBkZSB0ZXh0byBsaXZyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAnQXBhZ2FyIGVzdGEgRkFRISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAnRWRpdGFyIGVzdGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICdQZXJtaXRpciB2w6FyaW9zIGlkaW9tYXMgbm8gbcOzZHVsbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAnUGVybWl0aXIgbWVjYW5pc21vIGRlIEF2YWxpYcOnw6NvIG5vIG3Ds2R1bG8gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ0pvcm5hbCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0xpbWl0ZSBkYSB2aXN0YSAiUGVxdWVuYSIgZG8gSm9ybmFsIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0xpbWl0ZSBkYSB2aXN0YSAgRkFRICJQZXF1ZW5vIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdMaW1pdGUgZGUgRkFRcyBwb3IgcMOhZ2luYSBuYSB2aXN0YSAiUGVxdWVubyIgZG8gSm9ybmFsIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnTGltaXRlIGRlIEZBUXMgcG9yIHDDoWdpbmEgbmEgdmlzdGEgIlBlcXVlbmEiIGRlIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgcGF0aCBzZXBhcmF0b3IuJ30gPSAnRGVsaW1pdGFkb3IgZGUgY2FtaW5obyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdSb3V0ZXIgZGUgcGVzcXVpc2EgRkFRIG5hIGludGVyZmFjZSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnw4FyZWEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0Zyb250ZW5kIGRlIHJlZ2lzdG8gZG8gbcOzZHVsbyBwYXJhIGEgaW50ZXJmYWNlIHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cCBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdHcnVwbyBwYXJhIGEgYXByb3Zhw6fDo28gZG9zIGFydGlnb3MgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnSGlzdMOzcmljbyBkYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJ0luY2x1aXIgY2FtcG9zIGludGVybm9zIGRlIHVtIHRpY2tldCBiYXNlYWRvIGVtIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdJbmNsdWlyIG8gbm9tZSBkZSBjYWRhIGNhbXBvIG51bSB0aWNrZXQgYmFzZWFkbyBlbSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICdJbnRlcmZhY2VzIG9uZGUgYSBidXNjYSByw6FwaWRhIGRldmUgc2VyIHZpc3VhbGl6YWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnSm9ybmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRlIGlkaW9tYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFuZ3VhZ2VrZXkgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZSAqX0ZBUS5wbS4nfSA9ICdJZGlvbWEgY2hhdmUgcXVlIGVzdMOhIGRlZmluaWRvIG5vIGFycXVpdm8gZGUgaWRpb21hICpfRkFRLnBtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICdMaW5rIGRlIG91dHJvIGFydGlnbyBwYXJhIGVzdGEgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSB2aXN1YWxpemFkbyBuYSBnZXN0w6NvIEZBUSBkYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTyBuw7ptZXJvIG3DoXhpbW8gZGUgYXJ0aWdvcyBGQVEgdmlzdWFsaXphZG8gbmEgZ2VzdMOjbyBHZXJlbmNpYWRvciBGQVEgZGEgaW50ZXJmYWNlIGRvIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTyBuw7ptZXJvIG3DoXhpbW8gZGUgYXJ0aWdvcyBGQVEgdmlzdWFsaXphZG8gbmEgZ2VzdMOjbyBGQVEgZGEgaW50ZXJmYWNlIHDDumJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ08gbsO6bWVybyBtw6F4aW1vIGRlIGFydGlnb3MgRkFRIHZpc3VhbGl6YWRvIG5vIGpvcm5hbCBGQVEgZGEgaW50ZXJmYWNlIGRvIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnTyBuw7ptZXJvIG3DoXhpbW8gZGUgYXJ0aWdvcyBGQVEgdmlzdWFsaXphZG8gbm8gcmVzdXRsYWRvIGRlIHVtYSBwZXNxdWlzYSBubyBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBhcnRpZ29zIEZBUSB2aXN1YWxpemFkbyBubyByZXN1bHRhZG8gZGUgdW1hIHBlc3F1aXNhIG5hIGludGVyZmFjZSBkbyBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTyBuw7ptZXJvIG3DoXhpbW8gZGUgYXJ0aWdvcyBGQVEgdmlzdWFsaXphZG8gbyBubyByZXN1bHRhZG8gZGUgdW1hIHBlc3F1aXNhIG5hIGludGVyZmFjZSBwdWJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPSAnTcOzZHVsbyBwYXJhIGdlcmFyIGh0bWwgIk9wZW5TZWFyY2giZGUgcGVzcXVpc2EgZmFxIGN1cnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICdOb3ZvIGFydGlnbyBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAnTm92b3MgYXJ0aWdvcyBGQVEgcHJlY2lzYW0gZGUgYXByb3Zhw6fDo28gYW50ZXMgZGUgc2VyIHB1YmxpY2Fkb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICdOw7ptZXJvIGRlIGFydGlnb3MgRkFRIHZpc3VhbGl6YWRvIG5hIGdlc3TDo28gRkFRIGRvIGludGVyZmFjZSBkbyBjbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnRpZ29zIEZBUSB2aXN1YWxpemFkbyBuYSBnZXN0w6NvIEZBUSBkbyBpbnRlcmZhY2UgcHVibGljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnRpZ29zIEZBUSB2aXN1YWxpemFkbyBwb3IgcMOhZ2luYSBkZSByZXN1bHRhZG9zIGRlIHBlc3F1aXNhIG5hIGludGVyZmFjZSBkbyBjbGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnTsO6bWVybyBkZSBhcnRpZ29zIEZBUSB2aXN1YWxpemFkbyBwb3IgcMOhZ2luYSBkZSByZXN1bHRhZG9zIGRlIHBlc3F1aXNhIG5hIGludGVyZmFjZSBwdWJsaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnTsO6bWVybyBkZSBpdGVucyB2aXN1YWxpemFkb3MgbmFzIMO6bHRpbWFzIGFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICdOw7ptZXJvIGRlIGl0ZW5zIHZpc3VhbGl6YWRvcyBuYXMgw7psdGltYXMgY3JpYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICdOw7ptZXJvIGRlIGl0ZW5zIHZpc3VhbGl6YWRvcyBlbSB0b3AgMTAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9ICdQYXLDom1ldHJvcyBkZSBww6FnaW5hcyAobmFzIHF1YWlzIG9zIGl0ZW5zIEZBUSBzw6NvIHZpc3VhbGl6YWRvcykgZGEgdmlzdGEgcGVxdWVuYSBkbyBqb3JuYWwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIG92ZXJ2aWV3Lid9ID0gJ1BhcsOibWV0cm9zIGRlIHDDoWdpbmFzIChuYXMgcXVhaXMgb3MgaXRlbnMgRkFRIHPDo28gdmlzdWFsaXphZG9zKSBkYSB2aXN0YSBwZXF1ZW5hIGRlIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdJbXByaW1pciBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnRmlsYSBwYXJhIGFwcm92YcOnw6NvIGRvcyBhcnRpZ29zIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZXMgZm9yIHZvdGluZy4gS2V5IG11c3QgYmUgaW4gcGVyY2VudC4nfSA9ICdDb25kacOnw6NvIHBhcmEgYSBhdmFsaWHDp8Ojby4gQ2hhdmUgZW0gcGVyY2VudGFnZW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICdQZXNxdWlzYXIgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJ01vc3RyYXIgYm90w6NvICJJbnNlcmlyIExpbmsgRkFRIiBuYSB2aXN0YSBwZXF1ZW5hIGRlIGFydGlnb3MgRkFRIHDDumJsaWNvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPSAnTW9zdHJhIGJvdMOjbyAiSW5zZXJpciB0ZXh0byBlIExpbmsgRkFRIiBuYSB2aXN0YSBwZXF1ZW5hIGRlIGFydGlnb3MgRkFRIHDDumJsaWNvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9ICdNb3N0cmFyIGJvdMOjbyAiSW5zZXJpciBGQVEgVGV4dG8iIG5hIHZpc3RhIHBhcmEgbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ01vc3RyYXIgYXJ0aWdvIEZBUSBjb20gSFRNTC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnTW9zdHJhciBjYW1pbmhvIEZBUSBzaW0gLyBuw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IFdZU0lXWUcgZWRpdG9yIGluIGFnZW50IGludGVyZmFjZS4nfSA9ICdNb3N0cmFyIGVkaXRvciBXWVNJV1lHIG5hIGludGVyZmFjZSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICdNb3N0cmFyIHN1YmNhdGVnb3JpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ01vc3RyYXIgYXMgw7psdGltYXMgYWx0ZXJhw6fDtWVzIGRlIGl0ZW5zIGVtIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBvcyDDumx0aW1vcyBpdGVucyBjcmlhZG9zIGVtIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnTW9zdHJhciBhcyAxMCBtYWlzIHZpc3VhbGl6YWRhcyBlbSBpbnRlcmZhY2VzIGRlZmluaWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ01vc3RyYXIgdm90YcOnw6NvIGVtIGludGVyZmFjZXMgZGVmaW5pZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNb3N0cmEgdW0gbGluayBubyBtZW51IHF1ZSBwZXJtaXRlIGxpZ2FyIGEgRkFRIGNvbSBvdXRybyBvYmpldG8gbmEgdmlzdGEgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNb3N0cmEgdW0gbGluayBubyBtZW51IHF1ZSBwZXJtaXRlIGV4Y2x1aXIgdW0gRkFRIG5hIHZpc3RhIG5hIGludGVyZmFjZSBkbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBhY2VkZXIgYW8gaGlzdMOzcmljbyBkYSBGQVEgbmEgdmlzdGEgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBlZGl0YXIgdW1hIEZBUSBuYSB2aXN0YSBkYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSB2b2x0YXIgdW1hIEZBUSBuYSB2aXN0YSBkYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgaW1wcmltaXIgdW1hIEZBUSBuYSB2aXN0YSBkYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBGQVEsIGUuZy4gRkFRIywgS0IjLCBNeUZBUSMuIFRoZSBkZWZhdWx0IGlzIEZBUSMuJ30gPSAnTyBpZGVudGlmaWNhZG9yIHBhcmEgRkFRLCBleGVtcGxvIEZBUSAjIEtCICMgIyBNeUZBUS4gTyB2YWxvciBwb3Igb21pc3PDo28gw6kgRkFRICMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnRkFRXCcgcG9kZSBzZXIgcmVsYWNpb25hZG8gY29tIG91dHJvcyBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdGQVFcJyBwb2RlIHNlciByZWxhY2lvbmFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdGQVFcJyBjb20gbGlnYcOnw6NvIFwnUGFpIGUgZmlsaG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0ZBUVwnIHBvZGUgc2VyIHJlbGFjaW9uYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnRkFRXCcgcG9kZSBzZXIgcmVsYWNpb25hZG8gY29tIG91dHJvcyBvYmpldG9zIFwnVGlja2V0XCcgY29tIGxpZ2HDp8OjbyBcJ1BhaSBlIGZpbGhvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0NvcnBvIGRvIHRpY2tldCBwYXJhIGFwcm92YcOnw6NvIGRlIHVtIGFydGlnbyBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdPIGFzc3VudG8gZG8gdGlja2V0IHBhcmEgYXByb3Zhw6fDo28gZGUgdW0gYXJ0aWdvIEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgVGltZSBUbyBMZWF2ZSBmb3IgRkFRIGl0ZW1zLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgRXhwbG9yZXIgcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGU6ICd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBleHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBleHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgRXhwbG9yZXIgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgVGV4dCAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IFRleHQiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cnVfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ9GB0LvRg9C20LXQsdC90L7QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICfQvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ9C+0YLQutGA0YvRgtC+0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ9Cd0L7QvNC10YAgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ9Cf0L7RgdC70LXQtNC90LjQtSDQvtCx0L3QvtCy0LvQtdC90LjRjyDRgdGC0LDRgtC10LkgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ9Cd0L7QstGL0LUg0YHRgtCw0YLRjNC4IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnVG9wIDEwINGB0YLQsNGC0LXQuSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICfQn9C+0LTRgNCw0LfQtNC10LsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICfQntGG0LXQvdC60LAg0L7RgtGB0YPRgtGB0YLQstGD0LXRgiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICfQntCx0LfQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ9C+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/Qt9GL0Log0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTeW1wdG9tJ30gPSAn0KHQuNC80L/RgtC+0LzRiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2x1dGlvbid9ID0gJ9Cg0LXRiNC10L3QuNC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSBBcnRpY2xlJ30gPSAn0JTQvtCx0LDQstC40YLRjCDRgdGC0LDRgtGM0Y4gRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzJ30gPSAn0JrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAn0J3Rg9C20L3QviDQstGL0LHRgNCw0YLRjCDQutCw0YLQtdCz0L7RgNC40Y4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAn0J7QtNC+0LHRgNC10L3Qvic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQutCw0YLQtdCz0L7RgNC40Y/QvNC4IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICfQlNC+0LHQsNCy0LjRgtGMINC60LDRgtC10LPQvtGA0LjRjic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICfQo9C00LDQu9C40YLRjCDQutCw0YLQtdCz0L7RgNC40Y4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICfQlNC+0LHQsNCy0LjRgtGMINC60LDRgtC10LPQvtGA0LjRjic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAn0KPQtNCw0LvQuNGC0Ywg0LrQsNGC0LXQs9C+0YDQuNGOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gZ3JvdXAuJ30gPSAn0KPQutCw0LbQuNGC0LUg0YXQvtGC0Y8g0LHRiyDQvtC00L3RgyDQs9GA0YPQv9C/0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICfQk9GA0YPQv9C/0Ysg0LDQs9C10L3RgtC+0LIsINC40LzQtdGO0YnQuNGFINC00L7RgdGC0YPQvyDQuiDRgdGC0LDRgtGM0Y/QvCDRjdGC0L7QuSDQutCw0YLQtdCz0L7RgNC40LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICfQkdGD0LTQtdGCINC/0L7QutCw0LfQsNC90L4g0LIgRXhwbG9yZXIg0LrQsNC6INC60L7QvNC80LXQvdGC0LDRgNC40LkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjYXRlZ29yeT8nfSA9ICfQn9C+0LTRgtCy0LXRgNC00LjRgtC1INGD0LTQsNC70LXQvdC40LUg0Y3RgtC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9CiAgICAgICAgJ9Ct0YLRgyDQutCw0YLQtdCz0L7RgNC40Y4g0YPQtNCw0LvRj9GC0Ywg0L3QtdC70YzQt9GPISDQkiDQvdC10Lkg0YHQvtC00LXRgNC20LjRgtGB0Y8g0LrQsNC6INC80LjQvdC40LzRg9C8INC+0LTQvdCwINGB0YLQsNGC0YzRjyBGQVEg0Lgv0LjQu9C4INC+0L3QsCDRj9Cy0LvRj9C10YLRgdGPINGA0L7QtNC40YLQtdC70YzRgdC60L7QuSDQtNC70Y8g0LTRgNGD0LPQuNGFINC60LDRgtC10LPQvtGA0LjQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ9CSINGN0YLQvtC5INC60LDRgtC10LPQvtGA0LjQuCDQuNC80LXRjtGC0YHRjyDRgdC70LXQtNGD0Y7RidC40LUg0YHRgtCw0YLRjNC4IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICfQrdGC0LAg0LrQsNGC0LXQs9C+0YDQuNGPINGP0LLQu9GP0LXRgtGB0Y8g0YDQvtC00LjRgtC10LvRjNGB0LrQvtC5INC00LvRjyDRgdC70LXQtNGD0Y7RidC40YUg0L/QvtC00YDQsNC30LTQtdC70L7Qsic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICfQn9C+0LTRgtCy0LXRgNC00LjRgtC1INGD0LTQsNC70LXQvdC40LUg0Y3RgtC+0Lkg0YHRgtCw0YLRjNC4IEZBUSEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRXhwbG9yZXInfSA9ICdGQVEg0J7QsdC30L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICfQkdGL0YHRgtGA0YvQuSDQv9C+0LjRgdC6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGRjYXJkcyBhcmUgYWxsb3dlZC4nfSA9ICfQoNCw0LfRgNC10YjQtdC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0YHQuNC80LLQvtC70L7QsiDRiNCw0LHQu9C+0L3QsCDRgtC40L/QsCBcJypcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAn0KDQsNGB0YjQuNGA0LXQvdC90YvQuSDQv9C+0LjRgdC6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICfQn9C+0LTRgNCw0LfQtNC10LvRiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICfQodGC0LDRgtGM0LggRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAn0J/QvtC00YDQsNC30LTQtdC70Ysg0L3QtSDQvdCw0LnQtNC10L3Riy4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZid9ID0gJ9CY0YHRgtC+0YDQuNGPINC00LvRjyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFKb3VybmFsT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4nfSA9ICfQlNCw0L3QvdGL0YUg0LbRg9GA0L3QsNC70LAgRkFRINC90LXRgi4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0Y/Qt9GL0LrQsNC80LggRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAn0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDRjdGC0YMg0YTRg9C90LrRhtC40Y4g0L/RgNC4INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4INGA0LDQsdC+0YLRiyDRgSDQvdC10YHQutC+0LvRjNC60LjQvNC4INGP0LfRi9C60LDQvNC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbGFuZ3VhZ2UnfSA9ICfQlNC+0LHQsNCy0LjRgtGMINGP0LfRi9C6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSAlcyd9ID0gJ9Cj0LTQsNC70LjRgtGMINGP0LfRi9C6ICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0Y/Qt9GL0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ9CY0LfQvNC10L3QuNGC0Ywg0Y/Qt9GL0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ9Cf0L7QtNGC0LLQtdGA0LTQuNGC0LUg0YPQtNCw0LvQtdC90LjQtSDRjdGC0L7Qs9C+INGP0LfRi9C60LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9CiAgICAgICAgJ9Ct0YLQvtGCINGP0LfRi9C6INGD0LTQsNC70Y/RgtGMINC90LXQu9GM0LfRjy4g0J3QsCDQvdGR0Lwg0L3QsNC/0LjRgdCw0L3QsCDQutCw0Log0LzQuNC90LjQvNGD0Lwg0L7QtNC90LAg0YHRgtCw0YLRjNGPIEZBUSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICfQrdGC0L7RgiDRj9C30YvQuiDQuNGB0L/QvtC70YzQt9C+0LLQsNC9INCyINGB0LvQtdC00YPRjtGJ0LjRhSDRgdGC0LDRgtGM0Y/RhSBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICfQn9Cw0YDQsNC80LXRgtGA0Ysg0LrQvtC90YLQtdC60YHRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAn0JTQsNC90L3Ri9C1IEZBUSDQvdC1INC90LDQudC00LXQvdGLLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmQnfSA9ICfQmtC70Y7Rh9C10LLQvtC1INGB0LvQvtCy0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSAoZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwKSd9ID0gJ9CT0L7Qu9C+0YHQvtCy0LDQvdC40LUgKNC90LDQv9GA0LjQvNC10YAsINGA0LDQstC90L4gMTAg0LjQu9C4INCx0L7Qu9C10LUg0YfQtdC8IDYwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIChlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSknfSA9ICfQntGG0LXQvdC40YLRjCAo0L3QsNC/0YDQuNC80LXRgCwg0YDQsNCy0L3QviAyNSUg0LjQu9C4INCx0L7Qu9C10LUg0YfQtdC8IDc1JSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92ZWQnfSA9ICfQo9GC0LLQtdGA0LbQtNC10L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfQn9C+0YHQu9C10LTQvdC40Lwg0LjQt9C80LXQvdC40LsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICfQktGA0LXQvNGPINGB0L7Qt9C00LDQvdC40Y8g0YHRgtCw0YLRjNC4IEZBUSAo0LTQvi/Qv9C+0YHQu9C1KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICfQktGA0LXQvNGPINGB0L7Qt9C00LDQvdC40Y8g0YHRgtCw0YLRjNC4IEZBUSAo0LzQtdC20LTRgyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICfQktGA0LXQvNGPINC40LfQvNC10L3QtdC90LjRjyDRgdGC0LDRgtGM0LggRkFRICjQtNC+L9C/0L7RgdC70LUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ9CS0YDQtdC80Y8g0LjQt9C80LXQvdC10L3QuNGPINGB0YLQsNGC0YzQuCBGQVEgKNC80LXQttC00YMpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ9Cf0L7Qu9C90L7RgtC10LrRgdGC0L7QstGL0Lkg0L/QvtC40YHQuiDQsiBGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICfQn9C+0LjRgdC6INCyIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJ9CS0YvQsdC+0YAg0YjQsNCx0LvQvtC90LAg0L/QvtC40YHQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUnfSA9ICfQk9C+0LvQvtGB0L7QstCw0YLRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlIHNldHRpbmdzJ30gPSAn0J3QsNGB0YLRgNC+0LnQutC4INCz0L7Qu9C+0YHQvtCy0LDQvdC40Y8g0L3QtSDQt9Cw0LTQsNC90YsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgdm90ZXMnfSA9ICfQntC/0YDQtdC00LXQu9C10L3QvdGL0LUg0LPQvtC70L7RgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCd9ID0gJ9C90LDQv9GA0LjQvNC10YAsINGA0LDQstC90L4gMTAg0LjQu9C4INCx0L7Qu9C10LUg0YfQtdC8IDYwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUnfSA9ICfQntGG0LXQvdC40YLRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNldHRpbmdzJ30gPSAn0J3QsNGB0YLRgNC+0LnQutC4INC00LvRjyDQvtGG0LXQvdC60Lgv0YDQtdC50YLQuNC90LPQsCDQvdC1INC30LDQtNCw0L3Riyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyByYXRlJ30gPSAn0J7Qv9GA0LXQtNC10LTQtdC70LXQvdC90YvQtSDQvtGG0LXQvdC60LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUnfSA9ICfQvdCw0L/RgNC40LzQtdGALCDRgNCw0LLQvdC+IDI1JSDQuNC70Lgg0LHQvtC70LXQtSDRh9C10LwgNzUlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAn0JLRgNC10LzRjyDRgdC+0LfQtNCw0L3QuNGPINGB0YLQsNGC0YzQuCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgZGF0ZSd9ID0gJ9Ce0L/RgNC10LTQtdC70LXQvdC90LDRjyDQtNCw0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIHJhbmdlJ30gPSAn0JTQuNCw0L/QsNC30L7QvSDQtNCw0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUnfSA9ICfQktGA0LXQvNGPINC40LfQvNC10L3QtdC90LjRjyDRgdGC0LDRgtGM0LggRkFRJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGPIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRpbmcnfSA9ICfQntGG0LXQvdC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICfQuNC3IDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZXMnfSA9ICfQk9C+0LvQvtGB0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAn0JPQvtC70L7RgdC+0LIg0L3QtSDQvdCw0LnQtNC10L3QviEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ9Ce0YbQtdC90L7QuiDQvdC1INC90LDQudC00LXQvdC+ISDQntGG0LXQvdC40YLQtSDRjdGC0YMg0YHRgtCw0YLRjNGOIEZBUSDQv9C10YDQstGL0LwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICfQodC60LDRh9Cw0YLRjCDQstC70L7QttC10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAn0JTQu9GPINC+0YLQutGA0YvRgtC40Y8g0YHRgdGL0LvQutC4INCyINGB0LvQtdC00YPRjtGJ0LXQvCDRgdC+0L7QsdGJ0LXQvdC40Lgv0LfQsNC80LXRgtC60LUg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L3QsNC20LDRgtGMINC4INGD0LTQtdGA0LbQuNCy0LDRgtGMINC60LvQsNCy0LjRiNGDIEN0cmwg0LjQu9C4IENtZCDQuNC70LggU2hpZnQg0Lgg0LrQu9C40LrQvdGD0YLRjCDQv9C+INGB0YHRi9C70LrQtSAo0LfQsNCy0LjRgdC40YIg0L7RgiDQstCw0YjQtdCz0L4g0LHRgNCw0YPQt9C10YDQsCDQuCDQntChKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPQogICAgICAgICfQndCw0YHQutC+0LvRjNC60L4g0LHRi9C70LAg0L/QvtC70LXQt9C90LAg0Y3RgtCwINGB0YLQsNGC0YzRjz8g0J/QvtC20LDQu9GD0LnRgdGC0LAsINC+0YbQtdC90LjRgtC1INC10ZEsINGH0YLQvtCx0Ysg0LzRiyDQvNC+0LPQu9C4INGD0LvRg9GH0YjQuNGC0Ywg0LHQsNC30YMgRkFRLiDQodC/0LDRgdC40LHQviEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICfQsdC10YHQv9C+0LvQtdC30L3QsNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ9C+0YfQtdC90Ywg0L/QvtC70LXQt9C90LDRjyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgdGl0bGUgdG8gYXJ0aWNsZSBzdWJqZWN0J30gPSAn0JTQvtCx0LDQstC40YLRjCDQt9Cw0LPQvtC70L7QstC+0Log0Log0YHRgtCw0YLRjNC1IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICfQktGB0YLQsNCy0LjRgtGMINGC0LXQutGB0YIgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSd9ID0gJ9CS0YHRgtCw0LLQuNGC0Ywg0L/QvtC70L3QvtGB0YLRjNGOIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICfQktGB0YLQsNCy0LjRgtGMINGB0YHRi9C70LrRgyDQvdCwIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAn0JLRgdGC0LDQstC40YLRjCDRgtC10LrRgdGCIEZBUSDQuCDRgdGB0YvQu9C60YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRICYgTGluayd9ID0gJ9CS0YHRgtCw0LLQuNGC0Ywg0L/QvtC70L3QvtGB0YLRjNGOIEZBUSDQuCDRgdGB0YvQu9C60YMnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICfQodGC0LDRgtGM0LggRkFRINC90LUg0L3QsNC50LTQtdC90YsuJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICfQn9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C5INC/0L7QuNGB0Log0LIg0YHRgtCw0YLRjNGP0YUgRkFRICjQvdCw0L/RgNC40LzQtdGALCAi0LDQstGC0L7QvCrQutC4IiDQuNC70LggItCc0L7RgdC6KiIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgcmVzdHJpY3Rpb25zJ30gPSAn0J7Qs9GA0LDQvdC40YfQtdC90LjRjyDQvdCwINCz0L7Qu9C+0YHQvtCy0LDQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLid9ID0gJ9Ci0L7Qu9GM0LrQviDRgdGC0LDRgtGM0LggRkFRINGBINCz0L7Qu9C+0YHQsNC80LguLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSByZXN0cmljdGlvbnMnfSA9ICfQntCz0YDQsNC90LjRh9C10L3QuNGPINC+0YbQtdC90L7Quic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHJhdGUuLi4nfSA9ICfQotC+0LvRjNC60L4g0YHRgtCw0YLRjNC4IEZBUSDRgSDQvtGG0LXQvdC60L7QuS4uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkJ30gPSAn0KLQvtC70YzQutC+INGB0YLQsNGC0YzQuCBGQVEg0YHQvtC30LTQsNC90L3Ri9C1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQgYmV0d2Vlbid9ID0gJ9Ci0L7Qu9GM0LrQviDRgdGC0LDRgtGM0LggRkFRLCDRgdC+0LfQtNCw0L3QvdGL0LUg0LzQtdC20LTRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICfQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L/QsNGA0LDQvNC10YLRgNGLINC/0L7QuNGB0LrQsCDQutCw0Log0YjQsNCx0LvQvtC9Pyc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIE51bWJlcid9ID0gJ9Cd0L7QvNC10YAg0YHRgtCw0YLRjNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAn0J/QvtC40YHQuiDRgdGC0LDRgtC10Lkg0L/QviDQutC70Y7Rh9C10LLQvtC80YMg0YHQu9C+0LLRgyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICfQntCx0YnQtdC00L7RgdGC0YPQv9C90L7QtSc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAn0JLQtdGA0L3Rg9GC0YzRgdGPINCyINC+0LHQt9C+0YAgRkFRJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUUpvdXJuYWwucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAn0JbRg9GA0L3QsNC7IEZBUSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCB1cGRhdGUnfSA9ICfQn9C+0YHQu9C10LTQvdC10LUg0L7QsdC90L7QstC70LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIER5bmFtaWMgRmllbGRzJ30gPSAn0JTQuNC90LDQvNC40YfQtdGB0LrQuNC1INC/0L7Qu9GPINC00LvRjyBGQVEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAn0J3QtdGCINGA0LXQt9GD0LvRjNGC0LDRgtCwL9Cg0LXRiNC10L3QuNGPISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9GQVEucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgYXJ0aWNsZSBpcyBlbXB0eSEnfSA9ICfQrdGC0LAg0YHRgtCw0YLRjNGPINC/0YPRgdGC0LAhJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0KICAgICAgICAn0KTQuNC70YzRgtGAINC00LvRjyBIVE1MINC00LvRjyDQtNC+0LHQsNCy0LvQtdC90LjRjyDRgdGB0YvQu9C60Lgg0L/QvtC30LDQtNC4INC30LDQtNCw0L3QvdC+0Lkg0YHRgtGA0L7QutC4LiDQrdC70LXQvNC10L3RgiBJbWFnZSDQvNC+0LbQtdGCINCx0YvRgtGMINCy0LLQtdC00LXQvSDQtNCy0YPQvNGPINGB0L/QvtGB0L7QsdCw0LzQuC4g0J/QtdGA0LLRi9C5IC0g0Y3RgtC+INC40LzRjyDRhNCw0LnQu9CwKNGCLtC1LiBmYXEucG5nKS4g0JIg0Y3RgtC+0Lwg0YHQu9GD0YfQsNC1INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQv9GD0YLRjCDQuiDRhNCw0LnQu9Cw0Lwg0LjQt9C+0LHRgNCw0LbQtdC90LjQuSBPVFJTLiDQktGC0L7RgNC+0Lkg0LLQsNGA0LjQsNC90YIg0LIg0YPQutCw0LfQsNC90LjQuCDRgdGB0YvQu9C60Lgg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1KNC90LDQv9GA0LjQvNC10YAsIGh0dHA6Ly9vdHJzLm9yZy9mYXEucG5nKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDU1Mt0YbQstC10YIg0LTQu9GPINGA0LXQt9GD0LvRjNGC0LDRgtCwINCz0L7Qu9C+0YHQvtCy0LDQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIFRpbWUgVG8gTGVhdmUgZm9yIEZBUSBpdGVtcy4nfSA9ICfQktGA0LXQvNGPINC00LvRjyDQstGL0YXQvtC00LAg0LjQtyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPIEZBUSDQv9GD0L3QutGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC60LDRgtC10LPQvtGA0LjRj9C80LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAn0JTQtdGB0Y/RgtC40YfQvdGL0YUg0LfQvdCw0LrQvtCyINCyINGA0LXQt9GD0LvRjNGC0LDRgtC1INCz0L7Qu9C+0YHQvtCy0LDQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJ9Cd0LDQt9Cy0LDQvdC40LUg0LrQsNGC0LXQs9C+0YDQuNC4INC/0L4t0YPQvNC+0LvRh9Cw0L3QuNGOLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAn0K/Qt9GL0Log0YHRgtCw0YLQtdC5IEZBUSDQv9C+LdGD0LzQvtC70YfQsNC90LjRjiDQsiDQvtC00L3QvtGP0LfRi9GH0L3QvtC8INGA0LXQttC40LzQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBtYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duLid9ID0KICAgICAgICAn0JzQsNC60YHQuNC80LDQu9GM0L3Ri9C5INGA0LDQt9C80LXRgCDQt9Cw0LPQvtC70L7QstC60L7Qsiwg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4sINC/0L7QutCw0LfRi9Cy0LDQtdC80YvRhSDQsiDRgdGC0LDRgtGM0Y/RhSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9CiAgICAgICAgJ9Cf0YDQuNC+0YDQuNGC0LXRgiDQt9Cw0Y/QstC+0Log0L3QsCDQvtC00L7QsdGA0LXQvdC40LUg0YHRgtCw0YLQtdC5IEZBUSDQv9C+LdGD0LzQvtC70YfQsNC90LjRji4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJ9Ch0YLQsNGC0YPRgSDQt9Cw0L/QuNGB0LggRkFRINC/0L4t0YPQvNC+0LvRh9Cw0L3QuNGOLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAn0KHRgtCw0YLRg9GBINC30LDRj9Cy0L7QuiDQvdCwINC+0LTQvtCx0YDQtdC90LjQtSDRgdGC0LDRgtC10LkgRkFRINC/0L4t0YPQvNC+0LvRh9Cw0L3QuNGOLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICfQotC40L8g0LfQsNGP0LLQvtC6INC90LAg0L7QtNC+0LHRgNC10L3QuNC1INGB0YLQsNGC0LXQuSBGQVEg0L/Qvi3Rg9C80L7Qu9GH0LDQvdC40Y4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPQogICAgICAgICfQl9C90LDRh9C10L3QuNC1INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC/0LDRgNCw0LzQtdGC0YDQsCBBY3Rpb24g0LTQu9GPINC+0LHRidC10LTQvtGB0YLRg9C/0L3QvtCz0L4g0YTRgNC+0L3RgtC10L3QtNCwLiDQn9Cw0YDQsNC80LXRgtGAIEFjdGlvbiDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LIg0YHQutGA0LjQv9GC0LDRhSDRgdC40YHRgtC10LzRiy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGlmIHRoZSBGQVEgdGl0bGUgc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBhcnRpY2xlIHN1YmplY3QuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIsINC00L7Qu9C20LXQvSDQu9C4INC30LDQs9C+0LvQvtCy0L7QuiBGQVEg0L7QsdGK0LXQtNC40L3Rj9GC0YzRgdGPINGBINGC0LXQvNC+0Lkg0YHRgtCw0YLRjNC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0LzQvtC00YPQu9GMINC/0YDQvtGB0LzQvtGC0YDQsCDQtNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQttGD0YDQvdCw0LvQsCBGQVEg0LIgc21hbGwg0YTQvtGA0LzQsNGC0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC80L7QtNGD0LvRjCDQv9GA0L7RgdC80L7RgtGA0LAg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0YHQv9C40YHQutCwINGB0YLQsNGC0LXQuSBGQVEg0LIgc21hbGwg0YTQvtGA0LzQsNGC0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cj0LrQsNC20LjRgtC1INGB0YLQsNC90LTQsNGA0YLQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQsNGC0YDQuNCx0YPRgtCwIEZBUSDQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60Lgg0YDQtdC30YPQu9GM0YLQsNGC0L7QsiDQv9C+0LjRgdC60LAg0LIgRkFRINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cj0LrQsNC20LjRgtC1INGB0YLQsNC90LTQsNGA0YLQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQsNGC0YDQuNCx0YPRgtCwIEZBUSDQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60Lgg0YDQtdC30YPQu9GM0YLQsNGC0L7QsiDQv9C+0LjRgdC60LAg0LIgRkFRINCyINC40L3RgtC10YDRhNC10LnRgdC1INC60LvQuNC10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cj0LrQsNC20LjRgtC1INGB0YLQsNC90LTQsNGA0YLQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQsNGC0YDQuNCx0YPRgtCwINGB0L7RgNGC0LjRgNC+0LLQutC4INGA0LXQt9GD0LvRjNGC0LDRgtCwINC/0L7QuNGB0LrQsCDQsiDQvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QvCDQuNC90YLQtdGA0YTQtdC50YHQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQo9C60LDQttC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LDRgtGA0LjQsdGD0YLQsCDRgdC+0YDRgtC40YDQvtCy0LrQuCDQsiBGQVEgRXhwbG9yZXJlINC40L3RgtC10YDRhNC10LnRgdCwINCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQo9C60LDQttC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LDRgtGA0LjQsdGD0YLQsCDRgdC+0YDRgtC40YDQvtCy0LrQuCDQsiBGQVEgRXhwbG9yZXJlINC40L3RgtC10YDRhNC10LnRgdCwINC60LvQuNC10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQo9C60LDQttC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LDRgtGA0LjQsdGD0YLQsCDRgdC+0YDRgtC40YDQvtCy0LrQuCDQsiBGQVEgRXhwbG9yZXJlINCyINC+0LHRidC10LTQvtGB0YLRg9C/0L3QvtC8ICDQuNC90YLQtdGA0YTQtdC50YHQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICfQo9C60LDQttC40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgNGP0LTQvtC6INCyINGA0LXQt9GD0LvRjNGC0LDRgtCw0YUgRkFRIEV4cGxvcmVyINC40L3RgtC10YDRhNC10LnRgdCwINCw0LPQtdC90YLQsC4gVXA6INC/0L7Qt9C00L3QtdC1INC90LDQstC10YDRhdGDLiBEb3duOiDQvdC+0LLQvtC1INC90LDQstC10YDRhdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ9Cj0LrQsNC20LjRgtC1INGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0L/QvtGA0Y/QtNC+0Log0LIg0YDQtdC30YPQu9GM0YLQsNGC0LDRhSBGQVEgRXhwbG9yZXIg0LjQvdGC0LXRgNGE0LXQudGB0LAg0LrQu9C40LXQvdGC0LAuIFVwOiDQv9C+0LfQtNC90LXQtSDQvdCw0LLQtdGA0YXRgy4gRG93bjog0L3QvtCy0L7QtSDQvdCw0LLQtdGA0YXRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAn0KPQutCw0LbQuNGC0LUg0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQv9C+0YDRj9C00L7QuiDQsiDRgNC10LfRg9C70YzRgtCw0YLQsNGFIEZBUSBFeHBsb3JlciDQsiDQvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QvCDQuNC90YLQtdGA0YTQtdC50YHQtS4gVXA6INC/0L7Qt9C00L3QtdC1INC90LDQstC10YDRhdGDLiBEb3duOiDQvdC+0LLQvtC1INC90LDQstC10YDRhdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQv9C+0YDRj9C00L7QuiDRgdC+0YDRgtC40YDQvtCy0LrQuCDQsiDRgNC10LfRg9C70YzRgtCw0YLQsNGFINC/0L7QuNGB0LrQsCDQsiBGQVEg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLiBVcDog0YHRgtCw0YDRi9C1INCy0LLQtdGA0YXRgy4gRG93bjog0L3QvtCy0YvQtSDQstCy0LXRgNGF0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgNGP0LTQvtC6INGB0L7RgNGC0LjRgNC+0LLQutC4INCyINGA0LXQt9GD0LvRjNGC0LDRgtCw0YUg0L/QvtC40YHQutCwINCyIEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQutC70LjQtdC90YLQsC4gVXA6INGB0YLQsNGA0YvQtSDQstCy0LXRgNGF0YMuIERvd246INC90L7QstGL0LUg0LLQstC10YDRhdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0L/QvtGA0Y/QtNC+0Log0YHQvtGA0YLQuNGA0L7QstC60Lgg0LIg0YDQtdC30YPQu9GM0YLQsNGC0LDRhSDQv9C+0LjRgdC60LAg0LIgRkFRINCyINC+0LHRidC10Lwv0L/Rg9Cx0LvQuNGH0L3QvtC8INC40L3RgtC10YDRhNC10LnRgdC1LiBVcDog0YHRgtCw0YDRi9C1INCy0LLQtdGA0YXRgy4gRG93bjog0L3QvtCy0YvQtSDQstCy0LXRgNGF0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINCw0YLRgNC40LHRg9GCIEZBUSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQtNC70Y8g0L/QvtC60LDQt9CwINC90LAg0Y3QutGA0LDQvdC1INC/0L7QuNGB0LrQvtCy0L7Qs9C+INC30LDQv9GA0L7RgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuICJGdWxsIEZBUSIgaW5jbHVkZXMgdGV4dCwgYXR0YWNobWVudHMgYW5kIGlubGluZSBpbWFnZXMuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDQv9C10YDQtdGH0LXQvdGMINC40L3RhNC+0YDQvNCw0YbQuNC4INCy0LrQu9GO0YfQsNC10LzQvtC5INCyINC30LDRj9Cy0LrRgyDQuNC3IEZBUS4gIkZ1bGwgRkFRIiDQstC60LvRjtGH0LDQtdGCINGC0LrQtdGB0YIsINCy0LvQvtC20LXQvdC40Y8g0Lgg0LLRgdGC0YDQvtC10L3QvdGL0LUg0LjQt9C+0LHRgNCw0LbQtdC90LjRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiTGltaXQiIGRlZmluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc3BsYXllZCBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC/0LDRgNCw0LzQtdGC0YDRiyDQtNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQsiDQlNCw0LnQtNC20LXRgdGC0LUuICJMaW1pdCIg0LfQsNC00LDQtdGCINC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLiAiR3JvdXAiINC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8g0L7Qs9GA0LDQvdC40YfQtdC90LjRjyDQtNC+0YHRgtGD0L/QsCDQuiDQtNCw0L3QvdGL0Lwg0LzQvtC00YPQu9GPICjQvdCw0L/RgNC40LzQtdGALCBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIg0L7Qt9C90LDRh9Cw0LXRgiwg0YfRgtC+INC80L7QtNGD0LvRjCDQu9C40LHQviDQstC60LvRjtGH0LXQvSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiwg0LvQuNCx0L4g0LDQs9C10L3Rgiwg0L/RgNC4INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4LCDQvNC+0LbQtdGCINC10LPQviDQstC60LvRjtGH0LjRgtGMINCy0YDRg9GH0L3Rg9GOLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0L/QtdGA0LXRh9C10L3RjCDQutC+0LvQvtC90L7Quiwg0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINCyINCe0LHQt9C+0YDQtSBGQVEuINCt0YLQvtGCINC/0LDRgNCw0LzQtdGC0YAg0L3QtSDQstC70LjRj9C10YIg0L3QsCDQv9C+0YDRj9C00L7QuiDQutC+0LvQvtC90L7Qui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0L/QtdGA0LXRh9C10L3RjCDQutC+0LvQvtC90L7Quiwg0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINCyINCY0YHRgtC+0YDQuNC4IEZBUS4g0K3RgtC+0YIg0L/QsNGA0LDQvNC10YLRgCDQvdC1INCy0LvQuNGP0LXRgiDQvdCwINC/0L7RgNGP0LTQvtC6INC60L7Qu9C+0L3QvtC6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC/0LXRgNC10YfQtdC90Ywg0LrQvtC70L7QvdC+0LosINC+0YLQvtCx0YDQsNC20LDQtdC80YvRhSDQsiDRgNC10LfRg9C70YzRgtCw0YLQsNGFINC/0L7QuNGB0LrQsCDQsiBGQVEuINCt0YLQvtGCINC/0LDRgNCw0LzQtdGC0YAg0L3QtSDQstC70LjRj9C10YIg0L3QsCDQv9C+0YDRj9C00L7QuiDQutC+0LvQvtC90L7Qui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0LPQtNC1INCx0YPQtNC10YIg0L7RgtC+0LHRgNCw0LbQsNGC0YzRgdGPINGB0YHRi9C70LrQsCAi0JLRgdGC0LDQstC40YLRjCDQuNC3IEZBUSIvXCdJbnNlcnQgRkFRXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAn0J7Qv9GA0LXQtNC10LvQtdC90LjQtSDRgdCy0L7QsdC+0LTQvdGL0YUg0L/QvtC70LXQuSDRjdC70LXQvNC10L3RgtC+0LIgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICfQo9C00LDQu9C40YLRjCDRjdGC0L7RgiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC60LDQt9CwINC00LjQvdCw0LzQuNGH0LXRgdC60LjRhSDQv9C+0LvQtdC5INC90LAg0Y3QutGA0LDQvdC1INC00L7QsdCw0LLQu9C10L3QuNGPINGB0YLQsNGC0YzQuCDQsiBGQVEg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLiDQktC+0LfQvNC+0LbQvdGL0LUg0LfQvdCw0YfQtdC90LjRjzogMCA9INC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsIDEgPSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMiA9INC/0L7QutCw0LfRi9Cy0LDRgtGMINC4INC00L7Qu9C20L3QviDQsdGL0YLRjCDQt9Cw0L/QvtC70L3QtdC90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LrQsNC30LAg0LTQuNC90LDQvNC40YfQtdGB0LrQuNGFINC/0L7Qu9C10Lkg0L3QsCDRjdC60YDQsNC90LUg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRgdGC0LDRgtGM0LggRkFRINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4g0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IDAgPSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAxID0g0L/QvtC60LDQt9GL0LLQsNGC0YwsIDIgPSDQv9C+0LrQsNC30YvQstCw0YLRjCDQuCDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LfQsNC/0L7Qu9C90LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QutCw0LfQsCDQtNC40L3QsNC80LjRh9C10YHQutC40YUg0L/QvtC70LXQuSDQvdCwINGN0LrRgNCw0L3QtSDQvtCx0LfQvtGA0LAg0YHRgtCw0YLQtdC5INCyIEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQutC70LjQtdC90YLQsC4g0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IDAgPSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAxID0g0L/QvtC60LDQt9GL0LLQsNGC0YwsIDIgPSDQv9C+0LrQsNC30YvQstCw0YLRjCDQuCDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LfQsNC/0L7Qu9C90LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LrQsNC30LAg0LTQuNC90LDQvNC40YfQtdGB0LrQuNGFINC/0L7Qu9C10Lkg0L3QsCDRjdC60YDQsNC90LUg0L7QsdC30L7RgNCwINGB0YLQsNGC0LXQuSDQsiBGQVEg0LIg0L/Rg9Cx0LvQuNGH0L3QvtC8L9C+0LHRidC10LTQvtGB0YLRg9C/0L3QvtC8INC40L3RgtC10YDRhNC10LnRgdC1LiDQktC+0LfQvNC+0LbQvdGL0LUg0LfQvdCw0YfQtdC90LjRjzogMCA9INC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsIDEgPSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMiA9INC/0L7QutCw0LfRi9Cy0LDRgtGMINC4INC00L7Qu9C20L3QviDQsdGL0YLRjCDQt9Cw0L/QvtC70L3QtdC90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QutCw0LfQsCDQtNC40L3QsNC80LjRh9C10YHQutC40YUg0L/QvtC70LXQuSDQvdCwINGN0LrRgNCw0L3QtSDQv9C10YfQsNGC0Lgg0YHRgtCw0YLRjNC4IEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuINCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiAwID0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMSA9INC/0L7QutCw0LfRi9Cy0LDRgtGMLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LrQsNC30LAg0LTQuNC90LDQvNC40YfQtdGB0LrQuNGFINC/0L7Qu9C10Lkg0L3QsCDRjdC60YDQsNC90LUg0L/QtdGH0LDRgtC4INGB0YLQsNGC0YzQuCBGQVEg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LrQu9C40LXQvdGC0LAuINCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiAwID0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMSA9INC/0L7QutCw0LfRi9Cy0LDRgtGMLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC60LDQt9CwINC00LjQvdCw0LzQuNGH0LXRgdC60LjRhSDQv9C+0LvQtdC5INC90LAg0Y3QutGA0LDQvdC1INC/0LXRh9Cw0YLQuCDRgdGC0LDRgtGM0LggRkFRINCyINC/0YPQsdC70LjRh9C90L7QvC/QvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QvCDQuNC90YLQtdGA0YTQtdC50YHQtS4g0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IDAgPSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAxID0g0L/QvtC60LDQt9GL0LLQsNGC0YwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC60LDQt9CwINC00LjQvdCw0LzQuNGH0LXRgdC60LjRhSDQv9C+0LvQtdC5INC90LAg0Y3QutGA0LDQvdC1INGA0LXQt9GD0LvRjNGC0LDRgtC+0LIg0L/QvtC40YHQutCwINCyIEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuINCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiAwID0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMSA9INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAyID0g0L/QvtC60LDQt9GL0LLQsNGC0Ywg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC60LDQt9CwINC00LjQvdCw0LzQuNGH0LXRgdC60LjRhSDQv9C+0LvQtdC5INC90LAg0Y3QutGA0LDQvdC1INGA0LXQt9GD0LvRjNGC0LDRgtC+0LIg0L/QvtC40YHQutCwINCyIEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQutC70LjQtdC90YLQsC4g0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IDAgPSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAxID0g0L/QvtC60LDQt9GL0LLQsNGC0YwsIDIgPSDQv9C+0LrQsNC30YvQstCw0YLRjCDQv9C+INGD0LzQvtC70YfQsNC90LjRji4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC60LDQt9CwINC00LjQvdCw0LzQuNGH0LXRgdC60LjRhSDQv9C+0LvQtdC5INC90LAg0Y3QutGA0LDQvdC1INGA0LXQt9GD0LvRjNGC0LDRgtC+0LIg0L/QvtC40YHQutCwINCyIEZBUSDQsiDQv9GD0LHQu9C40YfQvdC+0Lwv0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdC+0Lwg0LjQvdGC0LXRgNGE0LXQudGB0LUuINCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiAwID0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMSA9INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAyID0g0L/QvtC60LDQt9GL0LLQsNGC0Ywg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc21hbGwgZm9ybWF0IG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LrQsNC30LAg0LTQuNC90LDQvNC40YfQtdGB0LrQuNGFINC/0L7Qu9C10Lkg0L3QsCDRjdC60YDQsNC90LUg0L7QsdC30L7RgNCwIEZBUSDQsiBzbWFsbCDRhNC+0YDQvNCw0YLQtSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuINCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiAwID0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMSA9INC/0L7QutCw0LfRi9Cy0LDRgtGMLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QutCw0LfQsCDQtNC40L3QsNC80LjRh9C10YHQutC40YUg0L/QvtC70LXQuSDQvdCwINGN0LrRgNCw0L3QtSDQv9GA0L7RgdC80L7RgtGA0LAg0YHRgtCw0YLRjNC4IEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuINCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiAwID0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMSA9INC/0L7QutCw0LfRi9Cy0LDRgtGMLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QutCw0LfQsCDQtNC40L3QsNC80LjRh9C10YHQutC40YUg0L/QvtC70LXQuSDQvdCwINGN0LrRgNCw0L3QtSDQv9GA0L7RgdC80L7RgtGA0LAg0YHRgtCw0YLRjNC4IEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQutC70LjQtdC90YLQsC4g0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IDAgPSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAxID0g0L/QvtC60LDQt9GL0LLQsNGC0YwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QutCw0LfQsCDQtNC40L3QsNC80LjRh9C10YHQutC40YUg0L/QvtC70LXQuSDQvdCwINGN0LrRgNCw0L3QtSDQv9GA0L7RgdC80L7RgtGA0LAg0YHRgtCw0YLRjNC4IEZBUSDQsiDQv9GD0LHQu9C40YfQvdC+0Lwv0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdC+0Lwg0LjQvdGC0LXRgNGE0LXQudGB0LUuINCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiAwID0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMSA9INC/0L7QutCw0LfRi9Cy0LDRgtGMLtC/0YPQsdC70LjRh9C90L7QvC/QvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QvCAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ9CY0LfQvNC10L3QuNGC0Ywg0Y3RgtC+0YIgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICfQoNCw0LfRgNC10YjQuNGC0Ywg0LzQvdC+0LPQvtGP0LfRi9GH0L3QvtGB0YLRjCDQsiDQvNC+0LTRg9C70LUgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJ9Cg0LDQt9GA0LXRiNC40YLRjCDRhNGD0L3QutGG0LjRjiDQvtGG0LXQvdC60Lgg0LIg0LzQvtC00YPQu9C1IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0JbRg9GA0L3QsNC70LAgRkFRINCyICJTbWFsbCIg0YTQvtGA0LzQsNGC0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICfQmtC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10LksINC+0YLQvtCx0YDQsNC20LDQtdC80YvRhSDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INCe0LHQt9C+0YDQsCBGQVEg0LIgIlNtYWxsIiDRhNC+0YDQvNCw0YLQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICfQmtC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10Lkg0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSDQltGD0YDQvdCw0LvQsCBGQVEg0LIgIlNtYWxsIiDRhNC+0YDQvNCw0YLQtSDQvdCwINGB0YLRgNCw0L3QuNGG0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0JbRg9GA0L3QsNC70LAgRkFRINCyICJTbWFsbCIg0YTQvtGA0LzQsNGC0LUg0L3QsCDRgdGC0YDQsNC90LjRhtGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICfQktC60LvRjtGH0LjRgtGMINC4INC90LDRgdGC0YDQvtC40YLRjCDQvNC+0LTRg9C70Ywg0L/QvtC40YHQutCwIEZBUSDQtNC70Y8g0LjQvdGC0LXRgNGE0LXQudGB0LAg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJ9Ce0LHQu9Cw0YHRgtGMIEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDQnfSA9ICfQn9C+0LvQtTQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ1J30gPSAn0J/QvtC70LU1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC/0YPQsdC70LjRh9C90L7Qs9C+L9C+0LHRidC10LTQvtGB0YLRg9C/0L3QvtCz0L4g0LjQvdGC0LXRgNGE0LXQudGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ9CT0YDRg9C/0L/QsCDQtNC70Y8g0L7QtNC+0LHRgNC10L3QuNGPINGB0YLQsNGC0LXQuSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICfQmNGB0YLQvtGA0LjRjyDRjdGC0L7Qs9C+IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAn0JLQutC70Y7Rh9C40YLRjCDQstC90YPRgtGA0LXQvdC90LjQtSDQv9C+0LvRjyDQsiDQt9Cw0Y/QstC60YMsINC+0YHQvdC+0LLQsNC90L3Rg9GOINC90LAg0YHRgtCw0YLRjNC1IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICfQktC60LvRjtGH0LjRgtGMINC40LzRjyDQutCw0LbQtNC+0LPQviDQv9C+0LvRjyDQsiDQt9Cw0Y/QstC60YMsINC+0YHQvdC+0LLQsNC90L3Rg9GOINC90LAg0YHRgtCw0YLRjNC1IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2sgc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICfQmNC90YLQtdGA0YTQtdC50YHRiywg0LIg0LrQvtGC0L7RgNGL0YUg0L/QsNC90LXQu9GMINCx0YvRgdGC0YDQvtCz0L4g0L/QvtC40YHQutCwINC80L7QttC10YIg0L7RgtC+0LHRgNCw0LbQsNGC0YzRgdGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAn0JbRg9GA0L3QsNC7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDRj9C30YvQutCw0LzQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoaXMgRkFRIGl0ZW0nfSA9ICfQn9GA0LjQstGP0LfQsNGC0Ywg0LTRgNGD0LPQvtC5INC+0LHRitC10LrRgiDQuiDRjdGC0L7QvNGDINGN0LvQtdC80LXQvdGC0YMgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ch0L/QuNGB0L7QuiDRgtC40L/QvtCyINGB0L7RgdGC0L7Rj9C90LjQuSwg0LrQvtGC0L7RgNGL0LUg0LzQvtCz0YPRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KHQv9C40YHQvtC6INGC0LjQv9C+0LIg0YHQvtGB0YLQvtGP0L3QuNC5LCDQutC+0YLQvtGA0YvQtSDQvNC+0LPRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LrQu9C40LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQodC/0LjRgdC+0Log0YLQuNC/0L7QsiDRgdC+0YHRgtC+0Y/QvdC40LksINC60L7RgtC+0YDRi9C1INC80L7Qs9GD0YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDQsiDQv9GD0LHQu9C40YfQvdC+0Lwv0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdC+0Lwg0LjQvdGC0LXRgNGE0LXQudGB0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10LksINCy0YvQstC+0LTQuNC80L7QtSDQsiBGQVEgRXhwbG9yZXIg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtCw0YLQtdC5LCDQstGL0LLQvtC00LjQvNC+0LUg0LIgRkFRIEV4cGxvcmVyINCyINC40L3RgtC10YDRhNC10LnRgdC1INC60LvQuNC10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0LLRi9Cy0L7QtNC40LzQvtC1INCyIEZBUSBFeHBsb3JlciDQsiDQvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QvCDQuNC90YLQtdGA0YTQtdC50YHQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10LksINCy0YvQstC+0LTQuNC80YvRhSDQsiDQttGD0YDQvdCw0LvQtSBGQVEg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10LksINCy0YvQstC+0LTQuNC80YvRhSDQsiDRgNC10LfRg9C70YzRgtCw0YLQtSDQv9C+0LjRgdC60LAg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10LksINCy0YvQstC+0LTQuNC80YvRhSDQsiDRgNC10LfRg9C70YzRgtCw0YLQtSDQv9C+0LjRgdC60LAg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LrQu9C40LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LDRgtC10LksINCy0YvQstC+0LTQuNC80YvRhSDQsiDRgNC10LfRg9C70YzRgtCw0YLQtSDQv9C+0LjRgdC60LAg0LIg0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdC+0Lwg0LjQvdGC0LXRgNGE0LXQudGB0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JzQsNC60YHQuNC80LDQu9GM0L3Ri9C5INGA0LDQt9C80LXRgCDQt9Cw0LPQvtC70L7QstC60L7QsiDQsiDRgdGC0LDRgtGM0LUgRkFRINC/0L7QutCw0LfRi9Cy0LDQtdC80YvRhSDQsiDQvtCx0LfQvtGA0LUgRkFRINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0YDQsNC30LzQtdGAINC30LDQs9C+0LvQvtCy0LrQvtCyINCyINGB0YLQsNGC0YzQtSBGQVEg0L/QvtC60LDQt9GL0LLQsNC10LzRi9GFINCyINC+0LHQt9C+0YDQtSBGQVEg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LrQu9C40LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw0LfQvNC10YAg0LfQsNCz0L7Qu9C+0LLQutC+0LIg0LIg0YHRgtCw0YLRjNC1IEZBUSDQv9C+0LrQsNC30YvQstCw0LXQvNGL0YUg0LIg0L7QsdC30L7RgNC1IEZBUSDQsiDQv9GD0LHQu9C40YfQvdC+0Lwg0LjQvdGC0LXRgNGE0LXQudGB0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw0LfQvNC10YAg0LfQsNCz0L7Qu9C+0LLQutC+0LIg0LIg0YHRgtCw0YLRjNC1IEZBUSDQv9C+0LrQsNC30YvQstCw0LXQvNGL0YUg0LIg0L7QutC90LUg0L/QvtC40YHQutCwIEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw0LfQvNC10YAg0LfQsNCz0L7Qu9C+0LLQutC+0LIg0LIg0YHRgtCw0YLRjNC1IEZBUSDQv9C+0LrQsNC30YvQstCw0LXQvNGL0YUg0LIg0L7QutC90LUg0L/QvtC40YHQutCwIEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQutC70LjQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw0LfQvNC10YAg0LfQsNCz0L7Qu9C+0LLQutC+0LIg0LIg0YHRgtCw0YLRjNC1IEZBUSDQv9C+0LrQsNC30YvQstCw0LXQvNGL0YUg0LIg0L7QutC90LUg0L/QvtC40YHQutCwIEZBUSDQsiDQvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QvCDQuNC90YLQtdGA0YTQtdC50YHQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw0LfQvNC10YAg0LfQsNCz0L7Qu9C+0LLQutC+0LIg0LIg0YHRgtCw0YLRjNC1IEZBUSDQv9C+0LrQsNC30YvQstCw0LXQvNGL0YUg0LIg0LbRg9GA0L3QsNC70LUgRkFRINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBGQVEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JzQvtC00YPQu9GMINC00LvRjyDQs9C10L3QtdGA0LDRhtC40LggSFRNTCBPcGVuU2VhcmNoINGI0LDQsdC70L7QvdC+0LIg0LTQu9GPINCx0YvRgdGC0YDQvtCz0L4g0L/QvtC40YHQutCwINCyIEZBUSDQsiDQvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QvCDQuNC90YLQtdGA0YTQtdC50YHQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNC+0LTRg9C70Ywg0LTQu9GPINCz0LXQvdC10YDQsNGG0LjQuCBIVE1MIE9wZW5TZWFyY2gg0YjQsNCx0LvQvtC90L7QsiDQtNC70Y8g0LHRi9GB0YLRgNC+0LPQviDQv9C+0LjRgdC60LAg0LIgRkFRINCyINC40L3RgtC10YDRhNC10LnRgdC1INC60LvQuNC10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IGZhcSBzZWFyY2guJ30gPQogICAgICAgICfQnNC+0LTRg9C70Ywg0LTQu9GPINCz0LXQvdC10YDQsNGG0LjQuCBIVE1MIE9wZW5TZWFyY2gg0YjQsNCx0LvQvtC90L7QsiDQtNC70Y8g0LHRi9GB0YLRgNC+0LPQviDQv9C+0LjRgdC60LAg0LIgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICfQndC+0LLQsNGPINGB0YLQsNGC0YzRjyDQsiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAn0J3QvtCy0LDRjyDRgdGC0LDRgtGM0Y8gRkFRINC/0LXRgNC10LQg0L/Rg9Cx0LvQuNC60LDRhtC40LXQuSDRgtGA0LXQsdGD0LXRgiDQvtC00L7QsdGA0LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0LLRi9Cy0L7QtNC40LzRi9GFINCyIEZBUSBFeHBsb3JlciDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQutC70LjQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQsNGC0LXQuSwg0LLRi9Cy0L7QtNC40LzRi9GFINCyIEZBUSBFeHBsb3JlciDQsiDQvtCx0YnQtdC00L7RgdGC0YPQv9C90L7QvCDQuNC90YLQtdGA0YTQtdC50YHQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtCw0YLQtdC5LCDQstGL0LLQvtC00LjQvNGL0YUg0L3QsCDQutCw0LbQtNC+0Lkg0YHRgtGA0LDQvdC40YbQtSDRgNC10LfRg9C70YzRgtCw0YLQsCDQv9C+0LjRgdC60LAg0LIgINC40L3RgtC10YDRhNC10LnRgdC1INC60LvQuNC10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtCw0YLQtdC5LCDQstGL0LLQvtC00LjQvNGL0YUg0L3QsCDQutCw0LbQtNC+0Lkg0YHRgtGA0LDQvdC40YbQtSDRgNC10LfRg9C70YzRgtCw0YLQsCDQv9C+0LjRgdC60LAg0LIg0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdC+0Lwg0LjQvdGC0LXRgNGE0LXQudGB0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAn0JrQvtC70LjRh9C10YHRgtCy0L4g0L7RgtC+0LHRgNCw0LbQsNC10LzRi9GFINC/0L7Qt9C40YbQuNC5INCyINC/0L7RgdC70LXQtNC90LjRhSDQuNC30LzQtdC90LXQvdC40Y/RhS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICfQmtC+0LvQuNGH0LXRgdGC0LLQviDQvtGC0L7QsdGA0LDQttCw0LXQvNGL0YUg0L/QvtC30LjRhtC40Lkg0LIg0L3QvtCy0YvRhSDRgdGC0LDRgtGM0Y/RhS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICfQmtC+0LvQuNGH0LXRgdGC0LLQviDQvtGC0L7QsdGA0LDQttCw0LXQvNGL0YUg0L/QvtC30LjRhtC40Lkg0LIg0YTRg9C90LrRhtC40LggVG9wIDEwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Ysg0LTQu9GPINGB0YLRgNCw0L3QuNGG0YsgKNC90LAg0LrQvtGC0L7RgNC+0Lkg0L7RgtC+0LHRgNCw0LbQsNGO0YLRgdGPINGN0LvQtdC80LXQvdGC0YsgRkFRKSDQv9GA0Lgg0L7QsdC30L7RgNC1INC20YPRgNC90LDQu9CwIEZBUSDQsiBzbWFsbCDRhNC+0YDQvNCw0YLQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDRiyDQtNC70Y8g0YHRgtGA0LDQvdC40YbRiyAo0L3QsCDQutC+0YLQvtGA0L7QuSDQvtGC0L7QsdGA0LDQttCw0Y7RgtGB0Y8g0Y3Qu9C10LzQtdC90YLRiyBGQVEpINC/0YDQuCDQvtCx0LfQvtGA0LUgRkFRINCyIHNtYWxsINGE0L7RgNC80LDRgtC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ9Cf0LXRh9Cw0YLRjCDRjdGC0L7Qs9C+IEZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICfQntGH0LXRgNC10LTRjCDQvdCwINC+0LTQvtCx0YDQtdC90LjQtSDRgdGC0LDRgtC10LkgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlcyBmb3Igdm90aW5nLiBLZXkgbXVzdCBiZSBpbiBwZXJjZW50Lid9ID0gJ9Ce0YbQtdC90LrQuCDQtNC70Y8g0LPQvtC70L7RgdC+0LLQsNC90LjRjy4g0JrQu9GO0Ycg0LTQvtC70LbQtdC9INCx0YvRgtGMINC30LDQtNCw0L0g0LIg0L/RgNC+0YbQtdC90YLQsNGFLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggRkFRJ30gPSAn0J/QvtC40YHQuiDQsiBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINCy0YvRgdC+0YLRgyAo0LIg0L/QuNC60YHQtdC70LDRhSkg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0LTQu9GPIGlubGluZSBIVE1MINC/0L7Qu9C10Lkg0LIgQWdlbnRGQVFab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQstGL0YHQvtGC0YMgKNCyINC/0LjQutGB0LXQu9Cw0YUpINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC00LvRjyBpbmxpbmUgSFRNTCDQv9C+0LvQtdC5INCyIEN1c3RvbWVyRkFRWm9vbSAo0LggUHVibGljRkFRWm9vbSkuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0LzQsNC60YHQuNC80LDQu9GM0L3Rg9GOINCy0YvRgdC+0YLRgyAo0LIg0L/QuNC60YHQtdC70LDRhSkg0LTQu9GPIGlubGluZSBIVE1MINC/0L7Qu9C10Lkg0LIgQWdlbnRGQVFab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQvNCw0LrRgdC40LzQsNC70YzQvdGD0Y4g0LLRi9GB0L7RgtGDICjQsiDQv9C40LrRgdC10LvQsNGFKSDQtNC70Y8gaW5saW5lIEhUTUwg0L/QvtC70LXQuSDQsiBDdXN0b21lckZBUVpvb20gKNC4IFB1YmxpY0ZBUVpvb20pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDICJJbnNlcnQgRkFRIExpbmsv0JLQutC70Y7Rh9C40YLRjCDRgdGB0YvQu9C60YMg0L3QsCBGQVEiINCyIEFnZW50RkFRWm9vbVNtYWxsINC00LvRjyDQv9GD0LHQu9C40YfQvdGL0YUg0YHRgtCw0YLQtdC5IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgLyAiSW5zZXJ0IEZ1bGwgRkFRICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAn0J/QvtC60LDQt9Cw0YLRjCDQutC90L7Qv9C60YMgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIC8gIkluc2VydCBGdWxsIEZBUSAmIExpbmsiLyLQktGB0YLQsNCy0LjRgtGMINGC0LXQutGB0YIgRkFRINC4INGB0LLRj9C30LDRgtGMIi/QktGB0YLQsNCy0LjRgtGMINC/0L7Qu9C90YvQuSBGQVEg0Lgg0YHQstGP0LfQsNGC0YwiINCyIEFnZW50RkFRWm9vbVNtYWxsINC00LvRjyDQv9GD0LHQu9C40YfQvdGL0YUg0YHRgtCw0YLQtdC5IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiAvICJJbnNlcnQgRnVsbCBGQVEiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9CiAgICAgICAgJ9Cf0L7QutCw0LfRi9Cy0LDRgtGMINC60L3QvtC/0LrRgyAi0JLRgdGC0LDQstC40YLRjCDRgtC10LrRgdGCIEZBUSEgLyAi0JLRgdGC0LDQstC40YLRjCDRgdGC0LDRgtGM0Y4gRkFRINC/0L7Qu9C90L7RgdGC0YzRjiIg0L3QsCDRjdC60YDQsNC90LUgQWdlbnRGQVFab29tU21hbGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJ9Cf0L7QutCw0LfRi9Cy0LDRgtGMINGB0YLQsNGC0YzRjiBGQVEg0LIgSFRNTC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAn0J/QvtC60LDQt9GL0LLQsNGC0Ywg0L/Rg9GC0YwgRkFRINC00LAv0L3QtdGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAn0J/QvtC60LDQt9GL0LLQsNGC0Ywg0YHQvtC00LXRgNC20LjQvNC+0LUg0L/QvtC00YDQsNC30LTQtdC70L7Qsi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNoYW5nZSBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn0J/QvtC60LDQt9GL0LLQsNGC0Ywg0L/QvtGB0LvQtdC00L3QuNC1INC40LfQvNC10L3QtdC90LjRjyDQsiDRg9C60LDQt9Cw0L3Ri9GFINC40L3RgtC10YDRhNC10LnRgdCw0YUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICfQn9C+0LrQsNC30YvQstCw0YLRjCDQvdC+0LLRi9C1INC/0YPQvdC60YLRiyDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0LjQvdGC0LXRgNGE0LXQudGB0LDRhS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ9Cf0L7QutCw0LfRi9Cy0LDRgtGMIFRvcCAxMCDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0LjQvdGC0LXRgNGE0LXQudGB0LDRhS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ9Cf0L7QutCw0LfRi9Cy0LDRgtGMINC+0YbQtdC90LrRgyDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0LjQvdGC0LXRgNGE0LXQudGB0LDRhS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0LrQsNC30YvQstCw0LXRgiDQv9GD0L3QutGCINC80LXQvdGOLCDQv9C+0LfQstC+0LvRj9GO0YnQuNC5INGB0LLRj9C30LDRgtGMINGB0YLQsNGC0YzRjiBGQVEg0YEg0LTRgNGD0LPQuNC8INC+0LHRitC10LrRgtC+0Lwg0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSDRjdGC0L7QuSDRgdGC0LDRgtGM0Lgg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7QutCw0LfRi9Cy0LDQtdGCINC/0YPQvdC60YIg0LzQtdC90Y4sINC/0L7Qt9Cy0L7Qu9GP0Y7RidC40Lkg0YPQtNCw0LvQuNGC0Ywg0YHRgtCw0YLRjNGOIEZBUSDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INGN0YLQvtC5INGB0YLQsNGC0YzQuCDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtC60LDQt9GL0LLQsNC10YIg0L/Rg9C90LrRgiDQvNC10L3Rjiwg0L/QvtC30LLQvtC70Y/RjtGJ0LjQuSDQtNC+0YHRgtGD0L8g0Log0LjRgdGC0L7RgNC40Lgg0YHRgtCw0YLRjNC4IEZBUSDQv9GA0Lgg0LXQtSDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtC60LDQt9GL0LLQsNC10YIg0L/Rg9C90LrRgiDQvNC10L3Rjiwg0L/QvtC30LLQvtC70Y/RjtGJ0LjQuSDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgdGC0LDRgtGM0Y4gRkFRINC/0YDQuCDQtdC1INC/0YDQvtGB0LzQvtGC0YDQtSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0LrQsNC30YvQstCw0LXRgiDQv9GD0L3QutGCINC80LXQvdGOLCDQv9C+0LfQstC+0LvRj9GO0YnQuNC5INCy0LXRgNC90YPRgtGM0YHRjyDQvdCw0LfQsNC0INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0YHRgtCw0YLRjNC4IEZBUSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtC60LDQt9GL0LLQsNC10YIg0L/Rg9C90LrRgiDQvNC10L3RjiDQn9C10YfQsNGC0Ywg0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSDRgdGC0LDRgtGM0LggRkFRINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0KICAgICAgICAn0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAgRkFRLCDQvdCw0L/RgNC40LzQtdGALCBGQVEjLCBLQiMsIE15RkFRIy4g0J/QviDRg9C80L7Qu9GH0LDQvdC40Y4gLSBGQVEjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQrdGC0L7RgiDQv9Cw0YDQsNC80LXRgtGAINC30LDQtNCw0LXRgiDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINGB0LLRj9C30LDRgtGMINC+0LHRitC10LrRgiBcJ0ZBUVwnINGBINC00YDRg9Cz0LjQvCDQv9C+0LTQvtCx0L3Ri9C8INC+0LHRitC10LrRgtC+0Lwg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0K3RgtC+0YIg0L/QsNGA0LDQvNC10YLRgCDQt9Cw0LTQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDRgdCy0Y/Qt9Cw0YLRjCDQvtCx0YrQtdC60YIgXCdGQVFcJyDRgSDQtNGA0YPQs9C40Lwg0L/QvtC00L7QsdC90YvQvCDQvtCx0YrQtdC60YLQvtC8INC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ct0YLQvtGCINC/0LDRgNCw0LzQtdGC0YAg0LfQsNC00LDQtdGCINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0YHQstGP0LfQsNGC0Ywg0L7QsdGK0LXQutGCIFwnRkFRXCcg0YEg0LTRgNGD0LPQuNC80Lgg0L7QsdGK0LXQutGC0LDQvNC4INGC0LjQv9CwICLQl9Cw0Y/QstC60LAiINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ct0YLQvtGCINC/0LDRgNCw0LzQtdGC0YAg0LfQsNC00LDQtdGCINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0YHQstGP0LfQsNGC0Ywg0L7QsdGK0LXQutGCIFwnRkFRXCcg0YEg0LTRgNGD0LPQuNC80Lgg0L7QsdGK0LXQutGC0LDQvNC4INGC0LjQv9CwICLQl9Cw0Y/QstC60LAiINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICfQotC10LvQviDQt9Cw0Y/QstC60Lgg0L3QsCDQvtC00L7QsdGA0LXQvdC40LUg0YHRgtCw0YLRjNC4IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ9Ci0LXQvNCwINC30LDRj9Cy0LrQuCDQvdCwINC+0LTQvtCx0YDQtdC90LjQtSDRgdGC0LDRgtGM0LggRkFRLic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3JfQ3lybF9GQVE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFGQVEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVybmFsJ30gPSAn0LjQvdGC0LXRgNC90L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAn0ZjQsNCy0L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydleHRlcm5hbCd9ID0gJ9C10LrRgdGC0LXRgNC90L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ9Cn0J/QnyDQsdGA0L7RmCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICfQn9C+0YHQu9C10LTRmtC1INCw0LbRg9GA0LjRgNCw0L3QuCDQp9Cf0J8g0YfQu9Cw0L3RhtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ9Cf0L7RgdC70LXQtNGa0LUg0LrRgNC10LjRgNCw0L3QuCDQp9Cf0J8g0YfQu9Cw0L3RhtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICfQn9GA0LLQuNGFIDEwINCn0J/QnyDRh9C70LDQvdCw0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ9Cf0L7QtNC60LDRgtC10LPQvtGA0LjRmNCwINC+0LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICfQndC40ZjQtSDQuNC30LDQsdGA0LDQvdCwINC90Lgg0ZjQtdC00L3QsCDQvtGG0LXQvdCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBsb3Jlcid9ID0gJ9CY0YHRgtGA0LDQttC40LLQsNGHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ9GY0LDQstC90L4gKNGB0LLQtSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwgKGN1c3RvbWVyKSd9ID0gJ9C10LrRgdGC0LXRgNC90L4gKNC60LvQuNGY0LXQvdGCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAn0LjQvdGC0LXRgNC90L4gKNC+0L/QtdGA0LDRgtC10YApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IGRheSd9ID0gJ9CU0LDQvSDQv9C+0YfQtdGC0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBtb250aCd9ID0gJ9Cc0LXRgdC10YYg0L/QvtGH0LXRgtC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ9CT0L7QtNC40L3QsCDQv9C+0YfQtdGC0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAn0JTQsNC9INC30LDQstGA0YjQtdGC0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICfQnNC10YHQtdGGINC30LDQstGA0YjQtdGC0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ9CT0L7QtNC40L3QsCDQt9Cw0LLRgNGI0LXRgtC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAn0KXQstCw0LvQsCDQvdCwINCy0LDRiNC10Lwg0LPQu9Cw0YHRgyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSB2b3RlZCEnfSA9ICfQktC10Zsg0YHRgtC1INCz0LvQsNGB0LDQu9C4ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJ9Co0YLQsNC80L/QsCDQp9Cf0J8g0YfQu9Cw0L3QutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAoVG9wIDEwKSd9ID0gJ9Cn0J/QnyDRh9C70LDQvdGG0LggKNC/0YDQstC40YUgMTApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAn0KfQn9CfINGH0LvQsNC90YbQuCAo0L3QvtCy0L7QutGA0LXQuNGA0LDQvdC4KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAn0KfQn9CfINGH0LvQsNC90YbQuCAo0L3QtdC00LDQstC90L4g0LzQtdGa0LDQvdC4KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICfQp9Cf0J8g0LrQsNGC0LXQs9C+0YDQuNGY0LAg0LDQttGD0YDQuNGA0LDQvdCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgYWRkZWQhJ30gPSAn0KfQn9CfINC60LDRgtC10LPQvtGA0LjRmNCwINC00L7QtNCw0YLQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAn0JrQsNGC0LXQs9C+0YDQuNGY0LAg0YLRgNC10LHQsCDQtNCwINC40LzQsCDQuNC80LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnfSA9ICfQntCy0LAg0LrQsNGC0LXQs9C+0YDQuNGY0LAg0LLQtdGbINC/0L7RgdGC0L7RmNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICfQlNC+0LTQsNGCINCn0J/QnyDRmNC10LfQuNC6ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICfQkNC20YPRgNC40YDQsNC9INCn0J/QnyDRmNC10LfQuNC6ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICfQmNC80LUg0ZjQtSDQvtCx0LDQstC10LfQvdC+ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ9Ce0LLQsNGYINGY0LXQt9C40Log0LLQtdGbINC/0L7RgdGC0L7RmNC4ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTeW1wdG9tJ30gPSAn0KHQuNC80L/RgtC+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29sdXRpb24nfSA9ICfQoNC10YjQtdGa0LUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICfQlNC+0LTQsNGYINCn0J/QnyDRh9C70LDQvdCw0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICfQmtGZ0YPRh9C90LUg0YDQtdGH0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICfQmtCw0YLQtdCz0L7RgNC40ZjQsCDRmNC1INC+0LHQsNCy0LXQt9C90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAn0J7QtNC+0LHRgNC10ZrQtSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0ZnQsNGa0LUg0KfQn9CfINC60LDRgtC10LPQvtGA0LjRmNCw0LzQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICfQlNC+0LTQsNGYINC60LDRgtC10LPQvtGA0LjRmNGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDYXRlZ29yeSd9ID0gJ9Ce0LHRgNC40YjQuCDQutCw0YLQtdCz0L7RgNC40ZjRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ9CjINGA0LXQtNGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ9CU0L7QtNCw0Zgg0LrQsNGC0LXQs9C+0YDQuNGY0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJ9CY0LfQvNC10L3QuCDQutCw0YLQtdCz0L7RgNC40ZjRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ9Cc0L7Qu9C40LzQviDQtNCwINC40LfQsNCx0LXRgNC10YLQtSDQsdCw0YAg0ZjQtdC00L3RgyDQs9GA0YPQv9GDINC00L7Qt9Cy0L7Qu9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAn0JPRgNGD0L/QtSDQvtC/0LXRgNCw0YLQtdGA0LAg0LrQvtGY0LUg0LzQvtCz0YMg0L/RgNC40YHRgtGD0L/QuNGC0Lgg0YfQu9Cw0L3RhtC40LzQsCDRgyDQvtCy0L7RmCDQutCw0YLQtdCz0L7RgNC40ZjQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ9CR0LjRm9C1INC/0YDQuNC60LDQt9Cw0L3QviDQutCw0L4g0LrQvtC80LXQvdGC0LDRgCDRgyDQmNGB0YLRgNCw0LbQuNCy0LDRh9GDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/J30gPSAn0JTQsCDQu9C4INGB0YLQstCw0YDQvdC+INC20LXQu9C40YLQtSDQtNCwINC+0LHRgNC40YjQtdGC0LUg0L7QstGDINC60LDRgtC10LPQvtGA0LjRmNGDPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9CiAgICAgICAgJ9Cd0LUg0LzQvtC20LXRgtC1INC+0LHRgNC40YHQsNGC0Lgg0L7QstCw0YMg0LrQsNGC0LXQs9C+0YDQuNGY0YMuINCj0L/QvtGC0YDQtdCx0ZnQtdC90LAg0ZjQtSDRgyDQsdCw0YAg0ZjQtdC00L3QvtC8INCn0J/QnyDRh9C70LDQvdC60YMg0Lgv0LjQu9C4INGY0LUg0YDQvtC00LjRgtC10Zkg0L3QsNGY0LzQsNGa0LUg0ZjQtdC00L3QvtGYINC00YDRg9Cz0L7RmCDQutCw0YLQtdCz0L7RgNC40ZjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ9Ce0LLQsCDQutCw0YLQtdCz0L7RgNC40ZjQsCDRmNC1INGD0L/QvtGC0YDQtdCx0ZnQtdC90LAg0YMg0YHQu9C10LTQtdGb0LjQvCDQp9Cf0J8g0YfQu9Cw0L3RhtC40LzQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICfQntCy0LAg0LrQsNGC0LXQs9C+0YDQuNGY0LAg0ZjQtSDRgNC+0LTQuNGC0LXRmSDRgdC70LXQtNC10ZvQuNC8INC/0L7QtNC60LDRgtC10LPQvtGA0LjRmNCw0LzQsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICfQlNCwINC70Lgg0YHRgtCy0LDRgNC90L4g0LbQtdC70LjRgtC1INC00LAg0L7QsdGA0LjRiNC10YLQtSDQvtCy0LDRmCDQp9Cf0J8g0YfQu9Cw0L3QsNC6Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICfQp9Cf0J8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ9Cn0J/QnyDQmNGB0YLRgNCw0LbQuNCy0LDRhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICfQkdGA0LfQviDRgtGA0LDQttC10ZrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxkY2FyZHMgYXJlIGFsbG93ZWQuJ30gPSAn0I/QvtC60LXRgNGB0LrQuCDQt9C90LDRhtC4INGB0YMg0LTQvtC30LLQvtGZ0LXQvdC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICfQndCw0L/RgNC10LTQvdCwINC/0YDQtdGC0YDQsNCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ9Cf0L7QtNC60LDRgtC10LPQvtGA0LjRmNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ9Cn0J/QnyDRh9C70LDQvdGG0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICfQn9C+0LTQutCw0YLQtdCz0L7RgNC40ZjQtSDQvdC40YHRgyDQv9GA0L7QvdCw0ZLQtdC90LUuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICfQmNGB0YLQvtGA0LjRmNCwINC+0LQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSm91cm5hbE92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBKb3VybmFsIGRhdGEgZm91bmQuJ30gPSAn0J3QuNGB0YMg0L/RgNC+0L3QsNGS0LXQvdC4INC/0L7QtNCw0YbQuCDQp9Cf0J8g0LTQvdC10LLQvdC40LrQsC4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstGZ0LDRmtC1INCn0J/QnyDRmNC10LfQuNGG0LjQvNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAn0KPQv9C+0YLRgNC10LHQuNGC0LUg0L7QstGDINGE0YPQvdC60YbQuNGY0YMg0LDQutC+INC20LXQu9C40YLQtSDQtNCwINC60L7RgNC40YHRgtC40YLQtSDQstC40YjQtSDRmNC10LfQuNC60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ9CU0L7QtNCw0Zgg0ZjQtdC30LjQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgTGFuZ3VhZ2UgJXMnfSA9ICfQntCx0YDQuNGI0Lgg0ZjQtdC30LjQuiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICfQlNC+0LTQsNGYINCI0LXQt9C40LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJ9Cj0YDQtdC00Lgg0IjQtdC30LjQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAn0JTQsCDQu9C4INC30LDQuNGB0YLQsCDQttC10LvQuNGC0LUg0LTQsCDQuNC30LHRgNC40YjQtdGC0LUg0L7QstCw0Zgg0ZjQtdC30LjQuj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAn0J3QtSDQvNC+0LbQtdGC0LUg0L7QsdGA0LjRgdCw0YLQuCDQvtCy0LDRmCDRmNC10LfQuNC6LiDQo9C/0L7RgtGA0LXQsdGZ0LXQvSDRmNC1INGDINCx0LDRgCDRmNC10LTQvdC+0Lwg0KfQn9CfINGH0LvQsNC90LrRgyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICfQntCy0LDRmCDRmNC10LfQuNC6INGY0LUg0YPQv9C+0YLRgNC10LHRmdC10L0g0YMg0YHQu9C10LTQtdGb0LjQvCDQp9Cf0J8g0YfQu9Cw0L3RhtC40LzQsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ9Cf0L7QtNC10YjQsNCy0LDRmtC1INC60L7QvdGC0LXQutGB0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICfQp9Cf0J8g0YfQu9Cw0L3QsNC60LAg0L/QviDRgdGC0YDQsNC90LgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAn0J3QuNGB0YMg0L/RgNC+0L3QsNGS0LXQvdC4INCn0J/QnyDQv9C+0LTQsNGG0LguJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJ9Ca0ZnRg9GH0L3QsCDRgNC10YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSAoZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwKSd9ID0gJ9CT0LvQsNGB0LDRmCAo0L3Qv9GAINGY0LXQtNC90LDQutC+IDEwINC40LvQuCDQstC10ZvQtSDQvtC0IDYwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIChlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSknfSA9ICfQntGG0LXQvdC4ICjQvdC/0YAg0ZjQtdC00L3QsNC60L4gMjUlINC40LvQuCDQstC10ZvQtSDQvtC0IDc1JSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92ZWQnfSA9ICfQntC00L7QsdGA0LXQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ9Cf0L7RgdC70LXQtNGa0Lgg0ZjQtSDQvNC10ZrQsNC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAn0JLRgNC10LzQtSDQutGA0LXQuNGA0LDRmtCwINCn0J/QnyDRh9C70LDQvdC60LAgKNC/0YDQtS/Qv9C+0YHQu9C1KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICfQktGA0LXQvNC1INC60YDQtdC40YDQsNGa0LAg0KfQn9CfINGH0LvQsNC90LrQsCAo0LjQt9C80LXRktGDKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ9CS0YDQtdC80LUg0L/RgNC+0LzQtdC90LUg0KfQn9CfINGH0LvQsNC90LrQsCAo0L/RgNC1L9C/0L7RgdC70LUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ9CS0YDQtdC80LUg0L/RgNC+0LzQtdC90LUg0KfQn9CfINGH0LvQsNC90LrQsCAo0LjQt9C80LXRktGDKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICfQp9Cf0J8g0LrQvtC80L/Qu9C10YLQsNC9INGC0LXQutGB0YInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICfQp9Cf0J8g0L/RgNC10YLRgNCw0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJ9CY0LfQsdC+0YAg0L/RgNC+0YTQuNC70LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJ9CT0LvQsNGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGUgc2V0dGluZ3MnfSA9ICfQndC10LzQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsCDQt9CwINCz0LvQsNGB0LDRmtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHZvdGVzJ30gPSAn0KHQv9C10YbQuNGE0LjRh9C90Lgg0LPQu9Cw0YHQvtCy0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwJ30gPSAn0L3Qv9GAINGY0LXQtNC90LDQutC+IDEwINC40LvQuCDQstC10ZvQtSDQvtC0IDYwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUnfSA9ICfQntGG0LXQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2V0dGluZ3MnfSA9ICfQndC10LzQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsCDQt9CwINC+0YbQtdGa0LjQstCw0ZrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyByYXRlJ30gPSAn0KHQv9C10YbQuNGE0LjRh9C90LAg0L7RhtC10L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSd9ID0gJ9C90L/RgCDRmNC10LTQvdCw0LrQviAyNSUg0LjQu9C4INCy0LXRm9C1INC+0LQgNzUlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAn0JLRgNC10LzQtSDQutGA0LXQuNGA0LDRmtCwINCn0J/QnyDRh9C70LDQvdC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgZGF0ZSd9ID0gJ9Ch0L/QtdGG0LjRhNC40YfQsNC9INC00LDRgtGD0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSByYW5nZSd9ID0gJ9Cg0LDRgdC/0L7QvSDQtNCw0YLRg9C80LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUnfSA9ICfQktGA0LXQvNC1INC/0YDQvtC80LXQvdC1INCn0J/QnyDRh9C70LDQvdC60LAnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAn0KfQn9CfINC40L3RhNC+0YDQvNCw0YbQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAn0J7RhtC10ZrQuNCy0LDRmtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAn0L7QtCA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAn0JPQu9Cw0YHQvtCy0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhJ30gPSAn0JPQu9Cw0YHQvtCy0Lgg0L3QuNGB0YMg0L/RgNC+0L3QsNGS0LXQvdC4ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAn0JPQu9Cw0YHQvtCy0Lgg0L3QuNGB0YMg0L/RgNC+0L3QsNGS0LXQvdC4ISDQkdGD0LTQuNGC0LUg0L/RgNCy0Lgg0LrQvtGY0Lgg0ZvQtSDQvtGG0LXQvdC40YLQuCDQvtCy0LDRmCDQp9Cf0J8g0YfQu9Cw0L3QsNC6ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAn0J/RgNC10YPQt9C80Lgg0L/RgNC40LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAn0JTQsCDQsdC40YHRgtC1INC+0YLQstC+0YDQuNC70Lgg0LLQtdC30LUg0YMg0YHQu9C10LTQtdGb0LjQvCDQsdC70L7QutC+0LLQuNC80LAg0L7Qv9C40YHQsCwg0LzQvtC20LTQsCDRm9C10YLQtSDRgtGA0LXQsdCw0YLQuCDQtNCwINC/0YDQuNGC0LjRgdC90LXRgtC1IOKAnkN0cmzigJ0g0LjQu9C4IOKAnkNtZOKAnSDQuNC70Lgg4oCeU2hpZnTigJ0g0YLQsNGB0YLQtdGAINC00L7QuiDQuNGB0YLQvtCy0YDQtdC80LXQvdC+INC60LvQuNC60L3QtdGC0LUg0L3QsCDQstC10LfRgyAo0LfQsNCy0LjRgdC4INC+0LQg0LLQsNGI0LXQsyDQntChINC4INC/0YDQtdCz0LvQtdC00LDRh9CwKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPQogICAgICAgICfQmtC+0LvQuNC60L4g0ZjQtSDQutC+0YDQuNGB0YLQsNC9INC+0LLQsNGYINGH0LvQsNC90LDQuj8g0JzQvtC70LjQvNC+INCy0LDRgSDQtNCwINC00LDRgtC1INCy0LDRiNGDINC+0YbQtdC90YMg0Lgg0L/QvtC80L7Qs9C90LXRgtC1INC/0L7QtNC40LfQsNGa0YMg0LrQstCw0LvQuNGC0LDRgtCwINCx0LDQt9C1INGH0LXRgdGC0L4g0L/QvtGB0YLQsNCy0ZnQsNC90LjRhSDQv9C40YLQsNGa0LAuINCl0LLQsNC70LAg0JLQsNC8ISAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICfQvdC40ZjQtSDQutC+0YDQuNGB0L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICfQstGA0LvQviDQutC+0YDQuNGB0L3Qvic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgdGl0bGUgdG8gYXJ0aWNsZSBzdWJqZWN0J30gPSAn0JTQvtC00LDRmCDQp9Cf0J8g0YfQu9Cw0L3QutGDINC90LDRgdC70L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQnfSA9ICfQo9C90LXRgdC4INCn0J/QnyDRgtC10LrRgdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSd9ID0gJ9Cj0L3QtdGB0Lgg0LrQvtC80L/Qu9C10YLQsNC9INCn0J/Qnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICfQo9C90LXRgdC4INCn0J/QnyDQstC10LfRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAn0KPQvdC10YHQuCDQp9Cf0J8g0YLQtdC60YHRgiDQuCDQstC10LfRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAn0KPQvdC10YHQuCDQutC+0LzQv9C70LXRgtCw0L0g0KfQn9CfINC4INCy0LXQt9GDJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAn0J3QuNGB0YMg0L/RgNC+0L3QsNGS0LXQvdC4INCn0J/QnyDRh9C70LDQvdGG0LguJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICfQn9C+0YLQv9GD0L3QsCDRgtC10LrRgdGC0YPQsNC70L3QsCDQv9GA0LXRgtGA0LDQs9CwINGDINCn0J/QnyDRh9C70LDQvdGG0LjQvNCwICjQvdC/0YAuICJKb2huKm4iINC40LvQuCAiV2lsbCoiKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIHJlc3RyaWN0aW9ucyd9ID0gJ9Ce0LPRgNCw0L3RmNGH0LXRmtCwINCz0LvQsNGB0LDRmtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggdm90ZXMuLi4nfSA9ICfQodCw0LzQviDQp9Cf0J8g0YfQu9Cw0L3RhtC4INGB0LAg0LPQu9Cw0YHQvtCy0LjQvNCwLi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgcmVzdHJpY3Rpb25zJ30gPSAn0J7Qs9GA0LDQvdC40YfQtdGa0LAg0L7RhtC10ZrQuNCy0LDRmtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggcmF0ZS4uLid9ID0gJ9Ch0LDQvNC+INCn0J/QnyDRh9C70LDQvdGG0Lgg0YHQsCDQvtGG0LXQvdC+0LwuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCd9ID0gJ9Ch0LDQvNC+INCn0J/QnyDRh9C70LDQvdGG0Lgg0LrRgNC10LjRgNCw0L3QuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkIGJldHdlZW4nfSA9ICfQodCw0LzQviDQp9Cf0J8g0YfQu9Cw0L3RhtC4INC60YDQtdC40YDQsNC90Lgg0LjQt9C80LXRktGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaC1Qcm9maWxlIGFzIFRlbXBsYXRlPyd9ID0gJ9Cf0YDQvtGE0LjQuyDQv9GA0LXRgtGA0LDQs9C1INC60LDQviDRiNCw0LHQu9C+0L0/JzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgTnVtYmVyJ30gPSAn0JHRgNC+0Zgg0YfQu9Cw0L3QutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAn0KLRgNCw0LbQuCDRh9C70LDQvdC60LUg0YHQsCDQutGZ0YPRh9C90L7QvCDRgNC10YfQuCc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMnfSA9ICfQiNCw0LLQvdC+JzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hSZXN1bHRTaG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayB0byBGQVEgRXhwbG9yZXInfSA9ICfQndC90LDQt9Cw0LQg0L3QsCDQp9Cf0J8g0JjRgdGC0YDQsNC20LjQstCw0YcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRSm91cm5hbC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICfQp9Cf0J8g0LTQvdC10LLQvdC40LonOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgdXBkYXRlJ30gPSAn0J/QvtGB0LvQtdC00ZrQtSDQsNC20YPRgNC40YDQsNGa0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIER5bmFtaWMgRmllbGRzJ30gPSAn0KfQn9CfINC00LjQvdCw0LzQuNGH0LrQsCDQv9C+0ZnQsCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICfQndC10LzQsCDRgNC10LfRg9C70YLQsNGC0LAhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0ZBUS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBhcnRpY2xlIGlzIGVtcHR5ISd9ID0gJ9Cn0LvQsNC90LDQuiDRmNC1INC/0YDQsNC30LDQvSEnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGZpbHRlciBmb3IgSFRNTCBvdXRwdXQgdG8gYWRkIGxpbmtzIGJlaGluZCBhIGRlZmluZWQgc3RyaW5nLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBGaXJzdCB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPQogICAgICAgICfQpNC40LvRgtC10YAg0LfQsCDigJ5IVE1M4oCdINC40LfQu9Cw0Lcg0LfQsCDQtNC+0LTQsNCy0LDRmtC1INCy0LXQt9C1INC40LfQsCDQtNC10YTQuNC90LjRgdCw0L3QvtCzINC90LjQt9CwINC30L3QsNC60L7QstCwLiDQldC70LXQvNC10L3RgiDRgdC70LjQutCwINC00L7Qt9Cy0L7RmdCw0LLQsCDQtNCy0LAg0L3QsNGH0LjQvdCwINGD0L3QvtGB0LAuINCf0YDQstC4INGY0LUg0L3QsNC30LjQsiDRgdC70LjQutC1ICjQvdC/0YAgZmFxLnBuZykuINGDINC+0LLQvtC8INGB0LvRg9GH0LDRmNGDINCx0LjRm9C1INC60L7RgNC40YjRm9C10L3QsCDigJ5PVFJT4oCdINC/0YPRgtCw0ZrQsCDQtNC+INGB0LvQuNC60LUuICDQlNGA0YPQs9CwINC80L7Qs9GD0ZvQvdC+0YHRgiDRmNC1INGD0L3QvtGBINCy0LXQt9C1INC00L4g0YHQu9C40LrQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdDU1Mg0LHQvtGY0LAg0LfQsCDRgNC10LfRg9C70YLQsNGCINCz0LvQsNGB0LDRmtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0ZnQsNGa0LUg0LrQsNGC0LXQs9C+0YDQuNGY0LDQvNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2ltYWwgcGxhY2VzIG9mIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJ9CR0YDQvtGYINC00LXRhtC40LzQsNC70LAg0YMg0YDQtdC30YPQu9GC0LDRgtGDINCz0LvQsNGB0LDRmtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAn0J3QsNC30LjQsiDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDQutCw0YLQtdCz0L7RgNC40ZjQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJ9Cf0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC4INGY0LXQt9C40Log0KfQn9CfINGH0LvQsNC90LDQutCwINGDINGY0LXQtNC90L7RmNC10LfQuNGH0LrQvtC8INC90LDRh9C40L3RgyDRgNCw0LTQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBtYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duLid9ID0KICAgICAgICAn0J/QvtC00YDQsNC30YPQvNC10LLQsNC90LAg0LzQsNC60YHQuNC80LDQu9C90LAg0LTRg9C20LjQvdCwINC90LDRgdC70L7QstCwINCn0J/QnyDRh9C70LDQvdC60LAg0LrQvtGY0LAg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcHJpb3JpdHkgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9CiAgICAgICAgJ9Cf0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC4INC/0YDQuNC+0YDQuNGC0LXRgiDRgtC40LrQtdGC0LAg0LfQsCDQvtC00L7QsdGA0LDQstCw0ZrQtSDQp9Cf0J8g0YfQu9Cw0L3QsNC60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICfQn9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDRgdGC0LDRgtGD0YEg0KfQn9CfINGD0L3QvtGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICfQn9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDRgdGC0LDRmtC1INGC0LjQutC10YLQsCDQt9CwINC+0LTQvtCx0YDQsNCy0LDRmtC1INCn0J/QnyDRh9C70LDQvdCw0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAn0J/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0YLQuNC/INGC0LjQutC10YLQsCDQt9CwINC+0LTQvtCx0YDQsNCy0LDRmtC1INCn0J/QnyDRh9C70LDQvdCw0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9CiAgICAgICAgJ9Cf0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdCwINCy0YDQtdC00L3QvtGB0YIg0LfQsCBBY3Rpb24g0L/QsNGA0LDQvNC10YLQsNGAINGDINGY0LDQstC90L7QvCDRhNGA0L7QvdGC0LXQvdC00YMuINCe0LLQsNGYINC/0LDRgNCw0LzQtdGC0LDRgCDQutC+0YDQuNGB0YLQtSDRgdC60YDQuNC/0YLQtSDRgdC40YHRgtC10LzQsC4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBpZiB0aGUgRkFRIHRpdGxlIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gYXJ0aWNsZSBzdWJqZWN0Lid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0L3QsNGB0LvQvtCyINCn0J/QnyDRgtGA0LXQsdCwINC00LAg0LHRg9C00LUg0LTQvtC00LDRgiDQvdCwINGC0LXQvNGDINGH0LvQsNC90LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQvNC+0LTRg9C7INC/0YDQtdCz0LvQtdC00LAg0LfQsCDQvNCw0LvQuCDQv9GA0LjQutCw0Lcg0KfQn9CfINC00L3QtdCy0L3QuNC60LAuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC80L7QtNGD0Lsg0L/RgNC10LPQu9C10LTQsCDQt9CwINC80LDQu9C4INC/0YDQuNC60LDQtyDQp9Cf0J8g0LvQuNGB0YLQtS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC4INCw0YLRgNC40LHRg9GCINC30LAg0YHQvtGA0YLQuNGA0LDRmtC1INCn0J/QnyDRgyDQv9GA0LXRgtGA0LDQt9C4INCn0J/QnyAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMgINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0LDRgtGA0LjQsdGD0YIg0LfQsCDRgdC+0YDRgtC40YDQsNGa0LUg0KfQn9CfINGDINC/0YDQtdGC0YDQsNC30Lgg0KfQn9CfICDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyAg0LrQvtGA0LjRgdC90LjQutCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0LDRgtGA0LjQsdGD0YIg0LfQsCDRgdC+0YDRgtC40YDQsNGa0LUg0KfQn9CfINGDINC/0YDQtdGC0YDQsNC30Lgg0KfQn9CfICDRgyDRmNCw0LLQvdC+0Lwg0LjQvdGC0LXRgNGE0LXRmNGB0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQsNGC0YDQuNCx0YPRgiDQt9CwINGB0L7RgNGC0LjRgNCw0ZrQtSDQp9Cf0J8g0YMg0KfQn9CfINC40YHRgtGA0LDQttC40LLQsNGH0YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0LDRgtGA0LjQsdGD0YIg0LfQsCDRgdC+0YDRgtC40YDQsNGa0LUg0KfQn9CfINGDINCn0J/QnyDQuNGB0YLRgNCw0LbQuNCy0LDRh9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC60L7RgNC40YHQvdC40LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQsNGC0YDQuNCx0YPRgiDQt9CwINGB0L7RgNGC0LjRgNCw0ZrQtSDQp9Cf0J8g0YMg0KfQn9CfINC40YHRgtGA0LDQttC40LLQsNGH0YMg0YMg0ZjQsNCy0L3QvtC8INC40L3RgtC10YDRhNC10ZjRgdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0YDQtdC00L7RgdC70LXQtCDQp9Cf0J8g0YMg0YDQtdC30YPQu9GC0LDRgtC40LzQsCDQp9Cf0J8g0LjRgdGC0YDQsNC20LjQstCw0YfQsCAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9GA0LXRgNCw0YLQtdGA0LAuINCT0L7RgNC1OiDQndCw0ZjRgdGC0LDRgNC40ZjQuCDQvdCwINCy0YDRhdGDLiDQlNC+0LvQtTog0J3QsNGY0L3QvtCy0LjRmNC1INC90LAg0LLRgNGF0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDRgNC10LTQvtGB0LvQtdC0INCn0J/QnyDRgyDRgNC10LfRg9C70YLQsNGC0LjQvNCwINCn0J/QnyDQuNGB0YLRgNCw0LbQuNCy0LDRh9CwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC60L7RgNC40YHQvdC40LrQsC4g0JPQvtGA0LU6INCd0LDRmNGB0YLQsNGA0LjRmNC4INC90LAg0LLRgNGF0YMuINCU0L7Qu9C1OiDQndCw0ZjQvdC+0LLQuNGY0LUg0L3QsCDQstGA0YXRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDRgNC10LTQvtGB0LvQtdC0INCn0J/QnyDRgyDRgNC10LfRg9C70YLQsNGC0LjQvNCwINCn0J/QnyDQuNGB0YLRgNCw0LbQuNCy0LDRh9CwINGDINGY0LDQstC90L7QvCDQuNC90YLQtdGA0YTQtdGY0YHRgy4g0JPQvtGA0LU6INCd0LDRmNGB0YLQsNGA0LjRmNC4INC90LAg0LLRgNGF0YMuINCU0L7Qu9C1OiDQndCw0ZjQvdC+0LLQuNGY0LUg0L3QsCDQstGA0YXRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDRgNC10LTQvtGB0LvQtdC0INCn0J/QnyDRgyDRgNC10LfRg9C70YLQsNGC0LjQvNCwINC/0YDQtdGC0YDQsNCz0LUg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9GA0LXRgNCw0YLQtdGA0LAuINCT0L7RgNC1OiDQndCw0ZjRgdGC0LDRgNC40ZjQuCDQvdCwINCy0YDRhdGDLiDQlNC+0LvQtTog0J3QsNGY0L3QvtCy0LjRmNC1INC90LAg0LLRgNGF0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0YDQtdC00L7RgdC70LXQtCDQp9Cf0J8g0YMg0YDQtdC30YPQu9GC0LDRgtC40LzQsCDQv9GA0LXRgtGA0LDQs9C1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC60L7RgNC40YHQvdC40LrQsC4g0JPQvtGA0LU6INCd0LDRmNGB0YLQsNGA0LjRmNC4INC90LAg0LLRgNGF0YMuINCU0L7Qu9C1OiDQndCw0ZjQvdC+0LLQuNGY0LUg0L3QsCDQstGA0YXRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0YDQtdC00L7RgdC70LXQtCDQp9Cf0J8g0YMg0YDQtdC30YPQu9GC0LDRgtC40LzQsCDQv9GA0LXRgtGA0LDQs9C1INGDINGY0LDQstC90L7QvCDQuNC90YLQtdGA0YTQtdGY0YHRgy4g0JPQvtGA0LU6INCd0LDRmNGB0YLQsNGA0LjRmNC4INC90LAg0LLRgNGF0YMuINCU0L7Qu9C1OiDQndCw0ZjQvdC+0LLQuNGY0LUg0L3QsCDQstGA0YXRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC4INC/0YDQuNC60LDQt9Cw0L3QuCDQp9Cf0J8g0LDRgtGA0LjQsdGD0YIg0L/RgNC10YLRgNCw0LPQtSDQt9CwINCn0J/QnyDQv9GA0L7Qt9C+0YAg0LfQsCDQv9GA0LXRgtGA0LDQs9GDLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaW5mb3JtYXRpb24gdG8gYmUgaW5zZXJ0ZWQgaW4gYSBGQVEgYmFzZWQgVGlja2V0LiAiRnVsbCBGQVEiIGluY2x1ZGVzIHRleHQsIGF0dGFjaG1lbnRzIGFuZCBpbmxpbmUgaW1hZ2VzLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQuNC90YTQvtGA0LzQsNGG0LjRmNC1INC60L7RmNC1INGb0LUg0LHQuNGC0Lgg0YPQsdCw0YfQtdC90LUg0YMg0KfQn9CfINCx0LDQt9C40YDQsNC90Lgg0YLQuNC60LXRgi4g4oCe0JrQvtC80L/Qu9C10YLQsNC9INCn0J/Qn+KAnSDRg9C60ZnRg9GH0YPRmNC1INGC0LXQutGB0YIsINC/0YDQuNC70L7Qs9C1INC4INGD0LzQtdGC0L3Rg9GC0LUg0YHQu9C40LrQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiTGltaXQiIGRlZmluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc3BsYXllZCBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5Lid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LfQsNC00LjQvdGB0LrQtSDQv9Cw0YDQsNC80LXRgtGA0LUg0LfQsCDQutC+0L3RgtGA0L7Qu9C90YMg0YLQsNCx0LvRgy4gItCb0LjQvNC40YIiINC00LXRhNC40L3QuNGI0LUg0LHRgNC+0Zgg0L/QvtC00YDQtdC30YPQvNC10LLQsNC90L4g0L/RgNC40LrQsNC30LDQvdC40YUg0YPQvdC+0YHQsC4gItCT0YDRg9C/0LAiINGB0LUg0LrQvtGA0LjRgdGC0Lgg0LTQsCDQvtCz0YDQsNC90LjRh9C4INC/0YDQuNGB0YLRg9C/INC00L7QtNCw0YLQutGDICjQvdC/0YAuINCT0YDRg9C/0LA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4i0J/QvtC00YDQsNC30YPQvNC10LLQsNC90L4iINGD0LrQsNC30YPRmNC1INC90LAg0YLQviDQtNCwINC70Lgg0ZjQtSDQtNC+0LTQsNGC0LDQuiDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDQsNC60YLQuNCy0LjRgNCw0L0g0LjQu9C4INC00LAg0ZjQtSDQv9C+0YLRgNC10LHQvdC+INC00LAg0LPQsCDQutC+0YDQuNGB0L3QuNC6INC80LDQvdGD0LXQu9C90L4g0LDQutGC0LjQstC40YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9GA0LjQutCw0LfQsNC90LUg0LrQvtC70L7QvdC1INGDINCn0J/QnyDQuNGB0YLRgNCw0LbQuNCy0LDRh9GDLiDQntCy0LAg0L7Qv9GG0LjRmNC1INC90LXQvNCwINGD0YLQuNGG0LDRmCDQvdCwINC/0L7Qt9C40YbQuNGY0LUg0LrQvtC70L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/RgNC40LrQsNC30LDQvdC1INC60L7Qu9C+0L3QtSDRgyDQp9Cf0J8g0LTQvdC10LLQvdC40LrRgy4g0J7QstCwINC+0L/RhtC40ZjQtSDQvdC10LzQsCDRg9GC0LjRhtCw0Zgg0L3QsCDQv9C+0LfQuNGG0LjRmNC1INC60L7Qu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/RgNC40LrQsNC30LDQvdC1INC60L7Qu9C+0L3QtSDRgyDQp9Cf0J8g0L/RgNC10YLRgNCw0LfQuC4g0J7QstCwINC+0L/RhtC40ZjQtSDQvdC10LzQsCDRg9GC0LjRhtCw0Zgg0L3QsCDQv9C+0LfQuNGG0LjRmNC1INC60L7Qu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICfQlNC10YTQuNC90LjRiNC1INCz0LTQtSDRm9C1IOKAntGD0LHQsNGG0Lgg0KfQn9Cf4oCdINCy0LXQt9CwINCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAn0JTQtdGE0LjQvdC40YbQuNGY0LAg0L/QvtGZ0LAg0YHQu9C+0LHQvtC00L3QvtCzINGC0LXQutGB0YLQsCDQt9CwINCn0J/QnyDRgdGC0LDQstC60YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ9Ce0LHRgNC40YjQuCDQvtCy0L4g0KfQn9CfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAn0JTQuNC90LDQvNC40YfQutCwINC/0L7RmdCwINC/0YDQuNC60LDQt9Cw0L3QsCDQvdCwINC10LrRgNCw0L3RgyDQtNC+0LTQsNCy0LDRmtCwINCn0J/QnyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuINCc0L7Qs9GD0ZvQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsDogMCA9INCe0L3QtdC80L7Qs9GD0ZvQtdC90L4sIDEgPSDQntC80L7Qs9GD0ZvQtdC90L4sIDIgPSDQntC80L7Qs9GD0ZvQtdC90L4g0Lgg0L3QtdC+0L/RhdC+0LTQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAg0L/RgNC40LrQsNC30LDQvdCwINC90LAg0LXQutGA0LDQvdGDINC40LfQvNC10L3QtSDQp9Cf0J8g0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLiDQnNC+0LPRg9Gb0LAg0L/QvtC00LXRiNCw0LLQsNGa0LA6IDAgPSDQntC90LXQvNC+0LPRg9Gb0LXQvdC+LCAxID0g0J7QvNC+0LPRg9Gb0LXQvdC+LCAyID0g0J7QvNC+0LPRg9Gb0LXQvdC+INC4INC90LXQvtC/0YXQvtC00L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LrQsCDQv9C+0ZnQsCDQv9GA0LjQutCw0LfQsNC90LAg0L3QsCDQtdC60YDQsNC90YMg0L/RgNC10LPQu9C10LTQsCDQp9Cf0J8g0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0LrQvtGA0LjRgdC90LjQutCwLiDQnNC+0LPRg9Gb0LAg0L/QvtC00LXRiNCw0LLQsNGa0LA6IDAgPSDQntC90LXQvNC+0LPRg9Gb0LXQvdC+LCAxID0g0J7QvNC+0LPRg9Gb0LXQvdC+LCAyID0g0J7QvNC+0LPRg9Gb0LXQvdC+INC4INC90LXQvtC/0YXQvtC00L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAg0L/RgNC40LrQsNC30LDQvdCwINC90LAg0LXQutGA0LDQvdGDINC/0YDQtdCz0LvQtdC00LAg0KfQn9CfINGDINGY0LDQstC90L7QvCDQuNC90YLQtdGA0YTQtdGY0YHRgy4g0JzQvtCz0YPRm9CwINC/0L7QtNC10YjQsNCy0LDRmtCwOiAwID0g0J7QvdC10LzQvtCz0YPRm9C10L3QviwgMSA9INCe0LzQvtCz0YPRm9C10L3QviwgMiA9INCe0LzQvtCz0YPRm9C10L3QviDQuCDQvdC10L7Qv9GF0L7QtNC90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn0JTQuNC90LDQvNC40YfQutCwINC/0L7RmdCwINC/0YDQuNC60LDQt9Cw0L3QsCDQvdCwINC10LrRgNCw0L3RgyDQt9CwINGI0YLQsNC80L/RgyDQp9Cf0J8g0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLiDQnNC+0LPRg9Gb0LAg0L/QvtC00LXRiNCw0LLQsNGa0LA6IDAgPSDQntC90LXQvNC+0LPRg9Gb0LXQvdC+LCAxID0g0J7QvNC+0LPRg9Gb0LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LrQsCDQv9C+0ZnQsCDQv9GA0LjQutCw0LfQsNC90LAg0L3QsCDQtdC60YDQsNC90YMg0LfQsCDRiNGC0LDQvNC/0YMg0KfQn9CfINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC60L7RgNC40YHQvdC40LrQsC4g0JzQvtCz0YPRm9CwINC/0L7QtNC10YjQsNCy0LDRmtCwOiAwID0g0J7QvdC10LzQvtCz0YPRm9C10L3QviwgMSA9INCe0LzQvtCz0YPRm9C10L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn0JTQuNC90LDQvNC40YfQutCwINC/0L7RmdCwINC/0YDQuNC60LDQt9Cw0L3QsCDQvdCwINC10LrRgNCw0L3RgyDQt9CwINGI0YLQsNC80L/RgyDQp9Cf0J8g0YMg0ZjQsNCy0L3QvtC8INC40L3RgtC10YDRhNC10ZjRgdGDLiDQnNC+0LPRg9Gb0LAg0L/QvtC00LXRiNCw0LLQsNGa0LA6IDAgPSDQntC90LXQvNC+0LPRg9Gb0LXQvdC+LCAxID0g0J7QvNC+0LPRg9Gb0LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn0JTQuNC90LDQvNC40YfQutCwINC/0L7RmdCwINC/0YDQuNC60LDQt9Cw0L3QsCDQvdCwINC10LrRgNCw0L3RgyDQv9GA0LXRgtGA0LDQs9C1INCn0J/QnyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuINCc0L7Qs9GD0ZvQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsDogMCA9INCe0L3QtdC80L7Qs9GD0ZvQtdC90L4sIDEgPSDQntC80L7Qs9GD0ZvQtdC90L4sIDIgPSDQntC80L7Qs9GD0ZvQtdC90L4g0Lgg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4g0YHQtSDQv9GA0LjQutCw0LfRg9GY0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAg0L/RgNC40LrQsNC30LDQvdCwINC90LAg0LXQutGA0LDQvdGDINC/0YDQtdGC0YDQsNCz0LUg0KfQn9CfINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC60L7RgNC40YHQvdC40LrQsC4g0JzQvtCz0YPRm9CwINC/0L7QtNC10YjQsNCy0LDRmtCwOiAwID0g0J7QvdC10LzQvtCz0YPRm9C10L3QviwgMSA9INCe0LzQvtCz0YPRm9C10L3QviwgMiA9INCe0LzQvtCz0YPRm9C10L3QviDQuCDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDRgdC1INC/0YDQuNC60LDQt9GD0ZjQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAg0L/RgNC40LrQsNC30LDQvdCwINC90LAg0LXQutGA0LDQvdGDINC/0YDQtdGC0YDQsNCz0LUg0KfQn9CfINGDINGY0LDQstC90L7QvCDQuNC90YLQtdGA0YTQtdGY0YHRgy4g0JzQvtCz0YPRm9CwINC/0L7QtNC10YjQsNCy0LDRmtCwOiAwID0g0J7QvdC10LzQvtCz0YPRm9C10L3QviwgMSA9INCe0LzQvtCz0YPRm9C10L3QviwgMiA9INCe0LzQvtCz0YPRm9C10L3QviDQuCDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDRgdC1INC/0YDQuNC60LDQt9GD0ZjQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzbWFsbCBmb3JtYXQgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn0JTQuNC90LDQvNC40YfQutCwINC/0L7RmdCwINC/0YDQuNC60LDQt9Cw0L3QsCDQvdCwINC10LrRgNCw0L3RgyDQv9GA0LXQs9C70LXQtNCwINCn0J/QnyDQvNCw0LvQvtCzINGE0L7RgNC80LDRgtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4g0JzQvtCz0YPRm9CwINC/0L7QtNC10YjQsNCy0LDRmtCwOiAwID0g0J7QvdC10LzQvtCz0YPRm9C10L3QviwgMSA9INCe0LzQvtCz0YPRm9C10L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LrQsCDQv9C+0ZnQsCDQv9GA0LjQutCw0LfQsNC90LAg0L3QsCDQtdC60YDQsNC90YMg0LTQtdGC0LDRmdC90L7QsyDQv9GA0LXQs9C70LXQtNCwINCn0J/QnyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuINCc0L7Qs9GD0ZvQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsDogMCA9INCe0L3QtdC80L7Qs9GD0ZvQtdC90L4sIDEgPSDQntC80L7Qs9GD0ZvQtdC90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAg0L/RgNC40LrQsNC30LDQvdCwINC90LAg0LXQutGA0LDQvdGDINC00LXRgtCw0ZnQvdC+0LMg0L/RgNC10LPQu9C10LTQsCDQp9Cf0J8g0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0LrQvtGA0LjRgdC90LjQutCwLiDQnNC+0LPRg9Gb0LAg0L/QvtC00LXRiNCw0LLQsNGa0LA6IDAgPSDQntC90LXQvNC+0LPRg9Gb0LXQvdC+LCAxID0g0J7QvNC+0LPRg9Gb0LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LrQsCDQv9C+0ZnQsCDQv9GA0LjQutCw0LfQsNC90LAg0L3QsCDQtdC60YDQsNC90YMg0LTQtdGC0LDRmdC90L7QsyDQv9GA0LXQs9C70LXQtNCwINCn0J/QnyDRgyDRmNCw0LLQvdC+0Lwg0LjQvdGC0LXRgNGE0LXRmNGB0YMuINCc0L7Qs9GD0ZvQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsDogMCA9INCe0L3QtdC80L7Qs9GD0ZvQtdC90L4sIDEgPSDQntC80L7Qs9GD0ZvQtdC90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICfQo9GA0LXQtNC4INC+0LLQviDQp9Cf0J8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJ9CQ0LrRgtC40LLQuNGA0LDRmtC1INCy0LjRiNC1INGY0LXQt9C40LrQsCDQvdCwINCn0J/QnyDQvNC+0LTRg9C70YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSB2b3RpbmcgbWVjaGFuaXNtIG9uIEZBUSBtb2R1bGUuJ30gPSAn0JDQutGC0LjQstC40YDQsNGa0LUg0LzQtdGF0LDQvdC40LfQvNCwINC30LAg0LPQu9Cw0YHQsNGa0LUg0L3QsCDQp9Cf0J8g0LzQvtC00YPQu9GDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAn0J7Qs9GA0LDQvdC40YfQtdGa0LUg0L/RgNC10LPQu9C10LTQsCDQp9Cf0J8g0LbRg9GA0L3QsNC70LAgLSAi0LzQsNC70L4iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAn0J7Qs9GA0LDQvdC40YfQtdGa0LUg0L/RgNC10LPQu9C10LTQsCDQp9Cf0J8gLSAi0LzQsNC70L4iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ9Ce0LPRgNCw0L3QuNGH0LXRmtC1INCx0YDQvtGY0LAg0KfQn9CfINC/0L4g0YHRgtGA0LDQvdC4INC30LAg0L/RgNC10LPQu9C10LQg0KfQn9CfINC00L3QtdCy0L3QuNC60LAgLSAi0LzQsNC70L4iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICfQntCz0YDQsNC90LjRh9C10ZrQtSDQsdGA0L7RmNCwINCn0J/QnyDQv9C+INGB0YLRgNCw0L3QuCDQt9CwINC/0YDQtdCz0LvQtdC0INCn0J/QnyAtICLQvNCw0LvQviInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ9Cn0J/Qn9C/0YDQtdGC0YDQsNCz0LAg0L/QvtC30LDQtNC40L3RgdC60L7QsyDRgNGD0YLQtdGA0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEtQXJlYSd9ID0gJ9Cn0J/QnyDQv9GA0L7RgdGC0L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDQnfSA9ICfQn9C+0ZnQtTQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ1J30gPSAn0J/QvtGZ0LU1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ9Cg0LXQs9C40YHRgtGA0LDRhtC40ZjQsCDQv9GA0LjRgdGC0YPQv9C90L7QsyDQvNC+0LTRg9C70LAg0LfQsCDRmNCw0LLQvdC4INC40L3RgtC10YDRhNC10ZjRgS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAn0JPRgNGD0L/QsCDQt9CwINC+0LTQvtCx0YDQsNCy0LDRmtC1INCn0J/QnyDRh9C70LDQvdCw0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiB0aGlzIEZBUSd9ID0gJ9CY0YHRgtC+0YDQuNGY0LDRgiDQvtCy0L7QsyDQp9Cf0J8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJ9Cj0LrRmdGD0YfQuCDQuNC90YLQtdGA0L3QsCDQv9C+0ZnQsCDRgyDQp9Cf0J8g0LHQsNC30LjRgNCw0L0g0YLQuNC60LXRgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICfQo9C60ZnRg9GH0Lgg0L3QsNC30LjQsiDRgdCy0LDQutC+0LMg0L/QvtGZ0LAg0YMg0KfQn9CfINCx0LDQt9C40YDQsNC9INGC0LjQutC10YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrIHNlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAn0JjQvdGC0LXRgNGE0LXRmNGBINC90LAg0LrQvtC8INGC0YDQtdCx0LAg0L/RgNC40LrQsNC30LDRgtC4INCx0YDQt9GDINC/0YDQtdGC0YDQsNCz0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0pvdXJuYWwnfSA9ICfQlNC90LXQstC90LjQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstGZ0LDRmtC1INGY0LXQt9C40YbQuNC80LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAn0J/QvtCy0LXQttC4INC+0LHRmNC10LrQsNGCINGB0LAg0L7QstC+0Lwg0YHRgtCw0LLQutC+0Lwg0KfQn9CfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cb0LjRgdGC0LAg0YLQuNC/0L7QstCwINGB0YLQsNGC0YPRgdCwINC60L7RmNC4INGB0LUg0LzQvtCz0YMg0LrQvtGA0LjRgdGC0LjRgtC4INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JvQuNGB0YLQsCDRgtC40L/QvtCy0LAg0YHRgtCw0YLRg9GB0LAg0LrQvtGY0Lgg0YHQtSDQvNC+0LPRgyDQutC+0YDQuNGB0YLQuNGC0Lgg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0LrQvtGA0LjRgdC90LjQutCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JvQuNGB0YLQsCDRgtC40L/QvtCy0LAg0YHRgtCw0YLRg9GB0LAg0LrQvtGY0Lgg0YHQtSDQvNC+0LPRgyDQutC+0YDQuNGB0YLQuNGC0Lgg0YMg0ZjQsNCy0L3QvtC8INC40L3RgtC10YDRhNC10ZjRgdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNCw0LrRgdC40LzQsNC70L3QuCDQsdGA0L7RmCDQp9Cf0J8g0YfQu9Cw0L3QsNC60LAg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90Lgg0YMg0YDQtdC30YPQu9GC0LDRgtGDINCn0J/QnyDQuNGB0YLRgNCw0LbQuNCy0LDRh9CwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JzQsNC60YHQuNC80LDQu9C90Lgg0LHRgNC+0Zgg0KfQn9CfINGH0LvQsNC90LDQutCwINC60L7RmNC4INGb0LUg0LHQuNGC0Lgg0L/RgNC40LrQsNC30LDQvdC4INGDINGA0LXQt9GD0LvRgtCw0YLRgyDQp9Cf0J8g0LjRgdGC0YDQsNC20LjQstCw0YfQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQutC+0YDQuNGB0L3QuNC60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNCw0LrRgdC40LzQsNC70L3QuCDQsdGA0L7RmCDQp9Cf0J8g0YfQu9Cw0L3QsNC60LAg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90Lgg0YMg0YDQtdC30YPQu9GC0LDRgtGDINCn0J/QnyDQuNGB0YLRgNCw0LbQuNCy0LDRh9CwINGDINGY0LDQstC90L7QvCDQuNC90YLQtdGA0YTQtdGY0YHRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvQvdC4INCx0YDQvtGYINCn0J/QnyDRh9C70LDQvdCw0LrQsCDQutC+0ZjQuCDRm9C1INCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L3QuCDRgyDQp9Cf0J8g0LTQvdC10LLQvdC40LrRgyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JzQsNC60YHQuNC80LDQu9C90Lgg0LHRgNC+0Zgg0KfQn9CfINGH0LvQsNC90LDQutCwINC60L7RmNC4INGb0LUg0LHQuNGC0Lgg0L/RgNC40LrQsNC30LDQvdC4INGDINGA0LXQt9GD0LvRgtCw0YLRgyDQv9GA0LXRgtGA0LDQs9C1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNCw0LrRgdC40LzQsNC70L3QuCDQsdGA0L7RmCDQp9Cf0J8g0YfQu9Cw0L3QsNC60LAg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90Lgg0YMg0YDQtdC30YPQu9GC0LDRgtGDINC/0YDQtdGC0YDQsNCz0LUg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0LrQvtGA0LjRgdC90LjQutCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNCw0LrRgdC40LzQsNC70L3QuCDQsdGA0L7RmCDQp9Cf0J8g0YfQu9Cw0L3QsNC60LAg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90Lgg0YMg0YDQtdC30YPQu9GC0LDRgtGDINC/0YDQtdGC0YDQsNCz0LUg0YMg0ZjQsNCy0L3QvtC8INC40L3RgtC10YDRhNC10ZjRgdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvQvdCwINC00YPQttC40L3QsCDQvdCw0YHQu9C+0LLQsCDRgyDQp9Cf0J8g0YfQu9Cw0L3QsNC60YMg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90Lgg0YMg0KfQn9CfINC40YHRgtGA0LDQttC40LLQsNGH0YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvQvdCwINC00YPQttC40L3QsCDQvdCw0YHQu9C+0LLQsCDRgyDQp9Cf0J8g0YfQu9Cw0L3QsNC60YMg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90Lgg0YMg0KfQn9CfINC40YHRgtGA0LDQttC40LLQsNGH0YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0LrQu9C40ZjQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JzQsNC60YHQuNC80LDQu9C90LAg0LTRg9C20LjQvdCwINC90LDRgdC70L7QstCwINGDINCn0J/QnyDRh9C70LDQvdCw0LrRgyDQutC+0ZjQuCDRm9C1INCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L3QuCDRgyDQp9Cf0J8g0LjRgdGC0YDQsNC20LjQstCw0YfRgyDRgyDRmNCw0LLQvdC+0Lwg0LjQvdGC0LXRgNGE0LXRmNGB0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvQvdCwINC00YPQttC40L3QsCDQvdCw0YHQu9C+0LLQsCDRgyDQp9Cf0J8g0YfQu9Cw0L3QsNC60YMg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90Lgg0YMg0KfQn9CfINC/0YDQtdGC0YDQsNC30Lgg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNCw0LrRgdC40LzQsNC70L3QsCDQtNGD0LbQuNC90LAg0L3QsNGB0LvQvtCy0LAg0YMg0KfQn9CfINGH0LvQsNC90LDQutGDINC60L7RmNC4INGb0LUg0LHQuNGC0Lgg0L/RgNC40LrQsNC30LDQvdC4INGDINCn0J/QnyDQv9GA0LXRgtGA0LDQt9C4INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC60LvQuNGY0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNCw0LrRgdC40LzQsNC70L3QsCDQtNGD0LbQuNC90LAg0L3QsNGB0LvQvtCy0LAg0YMg0KfQn9CfINGH0LvQsNC90LDQutGDINC60L7RmNC4INGb0LUg0LHQuNGC0Lgg0L/RgNC40LrQsNC30LDQvdC4INGDINCn0J/QnyDQv9GA0LXRgtGA0LDQt9C4INGDINGY0LDQstC90L7QvCDQuNC90YLQtdGA0YTQtdGY0YHRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cc0LDQutGB0LjQvNCw0LvQvdCwINC00YPQttC40L3QsCDQvdCw0YHQu9C+0LLQsCDRgyDQp9Cf0J8g0YfQu9Cw0L3QsNC60YMg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90Lgg0YMg0KfQn9CfINC00L3QtdCy0L3QuNC60YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNC+0LTRg9C7INC30LAg0LPQtdC90LXRgNC40YHQsNGa0LUg4oCeSFRNTCBPcGVuU2VhcmNo4oCdINC/0YDQvtGE0LjQu9CwINC30LAg0LrRgNCw0YLQutGDINCn0J/QnyDQv9GA0LXRgtGA0LDQs9GDINGDINGY0LDQstC90L7QvCDQv9GA0L7RhNC40LvRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQnNC+0LTRg9C7INC30LAg0LPQtdC90LXRgNC40YHQsNGa0LUg4oCeSFRNTCBPcGVuU2VhcmNo4oCdINC/0YDQvtGE0LjQu9CwINC30LAg0LrRgNCw0YLQutGDINCn0J/QnyDQv9GA0LXRgtGA0LDQs9GDINGDINC/0YDQvtGE0LjQu9GDINC60LvQuNGY0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9CiAgICAgICAgJ9Cc0L7QtNGD0Lsg0LfQsCDQs9C10L3QtdGA0LjRgdCw0ZrQtSDigJ5IVE1MIE9wZW5TZWFyY2jigJ0g0L/RgNC+0YTQuNC70LAg0LfQsCDQutGA0LDRgtC60YMg0KfQn9CfINC/0YDQtdGC0YDQsNCz0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ9Cd0L7QstC4INCn0J/QnyDRh9C70LDQvdCw0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBhcnRpY2xlcyBuZWVkIGFwcHJvdmFsIGJlZm9yZSB0aGV5IGdldCBwdWJsaXNoZWQuJ30gPSAn0J3QvtCy0Lgg0KfQn9CfINGH0LvQsNC90YbQuCDRgtGA0LXQsdCw0ZjRgyDQsdC40YLQuCDQvtC00L7QsdGA0LXQvdC4INC/0YDQtSDQvtCx0ZjQsNCy0ZnQuNCy0LDRmtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQkdGA0L7RmCDQp9Cf0J8g0YfQu9Cw0L3QsNC60LAg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90Lgg0YMg0KfQn9CfINCY0YHRgtGA0LDQttC40LLQsNGH0YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0LrQu9C40ZjQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CR0YDQvtGYINCn0J/QnyDRh9C70LDQvdCw0LrQsCDQutC+0ZjQuCDRm9C1INCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L3QuCDRgyDQp9Cf0J8g0JjRgdGC0YDQsNC20LjQstCw0YfRgyDRgyDRmNCw0LLQvdC+0Lwg0LjQvdGC0LXRgNGE0LXRmNGB0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CR0YDQvtGYINCn0J/QnyDRh9C70LDQvdCw0LrQsCDQutC+0ZjQuCDRm9C1INCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L3QuCDQvdCwINGB0LLQsNC60L7RmCDRgdGC0YDQsNC90Lgg0YDQtdC30YPQu9GC0LDRgtCwINC/0YDQtdGC0YDQsNCz0LUg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0LrQu9C40ZjQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CR0YDQvtGYINCn0J/QnyDRh9C70LDQvdCw0LrQsCDQutC+0ZjQuCDRm9C1INCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L3QuCDQvdCwINGB0LLQsNC60L7RmCDRgdGC0YDQsNC90Lgg0YDQtdC30YPQu9GC0LDRgtCwINC/0YDQtdGC0YDQsNCz0LUg0YMg0ZjQsNCy0L3QvtC8INC40L3RgtC10YDRhNC10ZjRgdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjaGFuZ2VzLid9ID0gJ9CR0YDQvtGYINC/0YDQuNC60LDQt9Cw0L3QuNGFINGB0YLQsNCy0LrQuCDRgyDQv9C+0YHQu9C10LTRmtC40Lwg0LjQt9C80LXQvdCw0LzQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICfQkdGA0L7RmCDQv9GA0LjQutCw0LfQsNC90LjRhSDRgdGC0LDQstC60Lgg0YMg0L/QvtGB0LvQtdC00ZrQtSDQutGA0LXQuNGA0LDQvdC40LwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiB0aGUgdG9wIDEwIGZlYXR1cmUuJ30gPSAn0JHRgNC+0Zgg0L/RgNC40LrQsNC30LDQvdC40YUg0YHRgtCw0LLQutC4INGDICLQv9GA0LLQuNGFIDEwIiAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDRgdGC0YDQsNC90LjRhtCwICjQvdCwINC60L7RmNC40LzQsCDRgdGDINCn0J/QnyDRgdGC0LDQstC60LUg0L/RgNC40LrQsNC30LDQvdC1KSDQvdCwINC80LDQu9C+0Lwg0L/RgNC40LrQsNC30YMg0L/RgNC10LPQu9C10LTQsCDQp9Cf0J8g0LTQvdC10LLQvdC40LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDRgdGC0YDQsNC90LjRhtCwICjQvdCwINC60L7RmNC40LzQsCDRgdGDINCy0LjQtNGZ0LjQstC1INCn0J/QnyDRgdGC0LDQstC60LUpINGB0LzQsNGa0LXQvdC+0LMg0L/RgNC10LPQu9C10LTQsCDQp9Cf0J8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoaXMgRkFRJ30gPSAn0KjRgtCw0LzQv9Cw0Zgg0L7QstC+INCn0J/Qnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICfQoNC10LQg0LfQsCDQvtC00L7QsdGA0LDQstCw0ZrQtSDQp9Cf0J8g0YfQu9Cw0L3QsNC60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAn0J7RhtC10L3QtSDQt9CwINCz0LvQsNGB0LDRmtC1LiDQmtGZ0YPRhyDQvNC+0YDQsCDQsdC40YLQuCDRgyDQv9GA0L7RhtC10L3RgtC40LzQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJ9Cf0YDQtdGC0YDQsNC20Lgg0KfQn9CfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgLyAiSW5zZXJ0IEZ1bGwgRkFRICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAn0J/RgNC40LrQsNC3INCn0J/QnyDRh9C70LDQvdGG0Lgg0LrQsNC+IOKAnkhUTUzigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJ9Cf0YDQuNC60LDQttC4INC/0YPRgtCw0ZrRgyDQtNC+INCn0J/QnyDQtNCwL9C90LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICfQn9GA0LjQutCw0LbQuCDRgdGC0LDQstC60LUg0YMg0YHRg9Cx0LrQsNGC0LXQs9C+0YDQuNGY0LDQvNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICfQn9GA0LjQutCw0LbQuCDQt9Cw0LTRmtC1INC/0YDQvtC80LXRmtC10L3QtSDRgdGC0LDQstC60LUg0YMg0LTQtdGE0LjQvdC40YHQsNC90LjQvCDQuNC90YLQtdGA0YTQtdGY0YHQuNC80LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjcmVhdGVkIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICfQn9GA0LjQutCw0LbQuCDQt9Cw0LTRmtC1INC60YDQtdC40YDQsNC90LUg0YHRgtCw0LLQutC1INGDINC00LXRhNC40L3QuNGB0LDQvdC40Lwg0LjQvdGC0LXRgNGE0LXRmNGB0LjQvNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAn0J/RgNC40LrQsNC20Lgg0L/RgNCy0LjRhSAxMCDRgdGC0LDQstC60Lgg0YMg0LTQtdGE0LjQvdC40YHQsNC90LjQvCDQuNC90YLQtdGA0YTQtdGY0YHQuNC80LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdm90aW5nIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICfQn9GA0LjQutCw0LbQuCDQs9C70LDRgdCw0ZrQtSDRgyDQtNC10YTQuNC90LjRgdCw0L3QuNC8INC40L3RgtC10YDRhNC10ZjRgdC40LzQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC60L7RmNCwINC+0LzQvtCz0LjRm9Cw0LLQsCDQv9C+0LLQtdC30LjQstCw0ZrQtSDQp9Cf0J8g0YHQsCDQtNGA0YPQs9C40Lwg0L7QsdGY0LXQutGC0L7QvCDRgyDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGC0L7QsyDQp9Cf0J8g0YMg0L7Qv9C10YDQsNGC0LXRgNGB0LrQvtC8INC40L3RgtC10YDRhNC10ZjRgdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LrQvtGY0LAg0L7QvNC+0LPQuNGb0LDQstCwINCx0YDQuNGB0LDRmtC1INCn0J/QnyDRgyDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINC+0L/QtdGA0LDRgtC10YDRgdC60L7QsyDQuNC90YLQtdGA0YTQtdGY0YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC30LAg0L/RgNC40YHRgtGD0L8g0LjRgdGC0L7RgNC40ZjQsNGC0YMg0KfQn9CfINGDINC00LXRgtCw0ZnQvdC+0Lwg0L/RgNC40LrQsNC30YMg0L7Qv9C10YDQsNGC0LXRgNGB0LrQvtCzINC40L3RgtC10YDRhNC10ZjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQt9CwINC40LfQvNC10L3RgyDQp9Cf0J8g0YMg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDQvtC/0LXRgNCw0YLQtdGA0YHQutC+0LMg0LjQvdGC0LXRgNGE0LXRmNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC30LAg0L/QvtCy0YDQsNGC0LDQuiDRgyDQtNC10YLQsNGZ0L3QuCDQv9GA0LjQutCw0Lcg0KfQn9CfINGDINC+0L/QtdGA0LDRgtC10YDRgdC60L7QvCDQuNC90YLQtdGA0YTQtdGY0YHRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC30LAg0YjRgtCw0LzQv9Cw0ZrQtSDQp9Cf0J8g0YMg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDQvtC/0LXRgNCw0YLQtdGA0YHQutC+0LMg0LjQvdGC0LXRgNGE0LXRmNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9CiAgICAgICAgJ9CY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC30LAg0KfQn9CfLCDQvdC/0YAg0KfQn9CfIywg0JHQlyMsINCc0L7RmNCn0J/QnyMuINCf0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC+INGY0LUg0KfQn9CfIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC00LXRhNC40L3QuNGI0LUg0LTQsCDQp9Cf0J8g0L7QsdGY0LXQutGCINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQtNGA0YPQs9C40Lwg0KfQn9CfINC+0LHRmNC10LrRgtC40LzQsCDQutC+0YDQuNGB0YLQtdGb0Lgg4oCe0L3QvtGA0LzQsNC70L3Rg+KAnSDQstC10LfRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0LTQtdGE0LjQvdC40YjQtSDQtNCwINCn0J/QnyDQvtCx0ZjQtdC60YIg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC00YDRg9Cz0LjQvCDQp9Cf0J8g0L7QsdGY0LXQutGC0LjQvNCwINC60L7RgNC40YHRgtC10ZvQuCDQstC10LfRgyDRgtC40L/QsCDigJ7RgNC+0LTQuNGC0LXRmS/Qv9C+0YLQvtC80LDQuuKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC00LXRhNC40L3QuNGI0LUg0LTQsCDQp9Cf0J8g0L7QsdGY0LXQutGCINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQtNGA0YPQs9C40Lwg0YLQuNC60LXRgiDQvtCx0ZjQtdC60YLQuNC80LAg0LrQvtGA0LjRgdGC0LXRm9C4IOKAntC90L7RgNC80LDQu9C90YPigJ0g0LLQtdC30YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC00LXRhNC40L3QuNGI0LUg0LTQsCDQp9Cf0J8g0L7QsdGY0LXQutGCINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQtNGA0YPQs9C40Lwg0YLQuNC60LXRgiDQvtCx0ZjQtdC60YLQuNC80LAg0LrQvtGA0LjRgdGC0LXRm9C4INCy0LXQt9GDINGC0LjQv9CwIOKAntGA0L7QtNC40YLQtdGZL9C/0L7RgtC+0LzQsNC64oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgYm9keSBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAn0KHQsNC00YDQttCw0Zgg0YLQuNC60LXRgtCwINC30LAg0L7QtNC+0LHRgNCw0LLQsNGa0LUg0KfQn9CfINGH0LvQsNC90LDQutCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAn0J/RgNC10LTQvNC10YIg0YLQuNC60LXRgtCwINC30LAg0L7QtNC+0LHRgNCw0LLQsNGa0LUg0KfQn9CfINGH0LvQsNC90LDQutCwLic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3ZfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ2ludGVybic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICdvZmZlbnRsaWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICdleHRlcm4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ0ZBUS1udW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAnU2VuYXN0IHVwcGRhdGVyYWRlIEZBUS1hcnRpa2xhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICdTZW5hc3Qgc2thcGFkZSBGQVEtYXJ0aWtsYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9wIDEwIEZBUSBhcnRpY2xlcyd9ID0gJ1RvcHAgMTAgRkFRLWFydGlrbGFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3J5IG9mJ30gPSAnVW5kZXJrYXRlZ29yaSB0aWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAnVXRmb3Jza2FyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMgKGFsbCknfSA9ICdvZmZlbnRsaWcgKGFsbGEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICdleHRlcm4gKGt1bmRlciknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJ2ludGVybiAoYWdlbnQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IGRheSd9ID0gJ1N0YXJ0IGRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBtb250aCd9ID0gJ1N0YXJ0IG3DpW5hZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAnU3RhcnQgw6VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBkYXknfSA9ICdTbHV0IGRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICdTbHV0IG3DpW5hZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ1NsdXQgw6VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rcyBmb3IgeW91ciB2b3RlISd9ID0gJ1RhY2sgZsO2ciBkaW4gcsO2c3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJ30gPSAnRHUgaGFyIHJlZGFuIHLDtnN0YXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnRkFRLWFydGlrZWwgdXRza3JpZnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnRkFRLWFydGlrbGFyIChUb3BwIDEwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJ0ZBUS1hcnRpa2xhciAobnlsaWdlbiBza2FwYWQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdGQVEtYXJ0aWtsYXIgKG55bGlnZW4gw6RuZHJhZGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSB1cGRhdGVkISd9ID0gJ0ZBUS1rYXRlZ29yaSB1cHBkYXRlcmFkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgYWRkZWQhJ30gPSAnRkFRLWthdGVnb3JpIHRpbGxhZ2QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0VuIGthdGVnb3JpIGJlaMO2dmVyIGV0dCBuYW1uISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAnRGVubmEga2F0ZWdvcmkgZmlubnMgcmVkYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdGQVEtc3Byw6VrIHNrYXBhdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxhbmd1YWdlIHVwZGF0ZWQhJ30gPSAnRkFRLXNwcsOlayB1cHBkYXRlcmF0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICdOYW1uIGtyw6R2cyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICdEZXR0YSBzcHLDpWsgZmlubnMgcmVkYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5bXB0b20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29sdXRpb24nfSA9ICdMw7ZzbmluZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJ1NrYXBhIEZBUSBhcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzJ30gPSAnTnlja2Vsb3JkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgaXMgcmVxdWlyZWQuJ30gPSAnRW4ga2F0ZWdvcmkga3LDpHZzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZhbCd9ID0gJ0dvZGvDpG5uYW5kZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdGQVEga2F0ZWdvcmloYW50ZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAnU2thcGEga2F0ZWdvcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAnVGEgYm9ydCBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRlZ29yeSd9ID0gJ1NrYXBhIGthdGVnb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICdSZWRpZ2VyYSBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1bDpG5saWdlbiB2w6RsaiBtaW5zdCBlbiByw6R0dGlnaGV0c2dydXBwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICdBZ2VudC1ncnVwcGVyIG1lZCDDpXRrb21zdCB0aWxsIGFydGlrbGFybmEgaSBkZW5uYSBrYXRlZ29yaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ1Zpc2FzIHNvbSBrb21tZW50YXIgaSBVdGZvcnNrYXJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ1ZpbGwgZHUgdmVya2xpZ2VuIHRhIGJvcnQgZGVubmEga2F0ZWdvcmk/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBhcnRpY2xlKHMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBGQVEgYXJ0aWNsZT8nfSA9ICdWaWxsIGR1IHZlcmtsaWdlbiB0YSBib3J0IGRlbm5hIEZBUS1hcnRpa2VsPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICdGQVEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ0ZBUS11dGZvcnNrYXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1aWNrIFNlYXJjaCd9ID0gJ1NuYWJic8O2ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxkY2FyZHMgYXJlIGFsbG93ZWQuJ30gPSAnSm9rZXJ0ZWNrZW4gw6RyIHRpbGzDpXRuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWR2YW5jZWQgU2VhcmNoJ30gPSAnQXZhbmNlcmFkIHPDtmtuaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1YmNhdGVnb3JpZXMnfSA9ICdVbmRlcmthdGVnb3JpZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzJ30gPSAnRkFRLWFydGlrbGFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnSW5nYSB1bmRlcmthdGVnb3JpZXIgaGl0dGFkZXMuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICdIaXN0b3JpayBmw7ZyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdGQVEgc3Byw6VraGFudGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoIG11bHRpcGxlIGxhbmd1Z2VzLid9ID0KICAgICAgICAnQW52w6RuZCBkZW4gaMOkciBmdW5rdGlvbmVuIG9tIGR1IHZpbGwgYXJiZXRhIG1lZCBmbGVyYSBzcHLDpWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ0zDpGdnIHRpbGwgc3Byw6VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSAlcyd9ID0gJ1RhIGJvcnQgc3Byw6VrICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBMYW5ndWFnZSd9ID0gJ0zDpGdnIHRpbGwgc3Byw6VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICdSZWRpZ2VyYSBzcHLDpWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ1ZpbGwgZHUgdmVya2xpZ2VuIHRhIGJvcnQgZGV0dGEgc3Byw6VrPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBsYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUhJ30gPQogICAgICAgICdEdSBrYW4gaW50ZSB0YSBib3J0IGRldHRhIHNwcsOlay4gRGV0IGFudsOkbmRzIGkgbWluc3QgZW4gRkFRLWFydGlrZWwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnQW5wYXNzYSB2eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICdGQVEtYXJ0aWtsYXIgcGVyIHNpZGEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnSW5nZW4gRkFRLWluZm9ybWF0aW9uIGhpdHRhZGVzLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmQnfSA9ICdOeWNrZWxvcmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSAoZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIChlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92ZWQnfSA9ICdHb2Rrw6RuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdTZW5hc3Qgw6RuZHJhZCBhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJldHdlZW4pJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJ0ZBUSBzw7ZrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2ZpbGUgU2VsZWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUnfSA9ICdSw7ZzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJ0luZ2EgcsO2c3RpbnN0w6RsbG5pbmdhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyB2b3Rlcyd9ID0gJ1NwZWNpZmlrYSByw7ZzdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCd9ID0gJ2UuZy4gTGlrYSBtZWQgMTAgZWxsZXIgU3TDtnJyZcOEbiA2MCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlJ30gPSAnQmV0eWdzw6R0dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyByYXRlIHNldHRpbmdzJ30gPSAnSW5nYSBiZXR5Z3NpbnN0w6RsbG5pbmdhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyByYXRlJ30gPSAnU3BlY2lmaWt0IGJldHlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlJ30gPSAnZS5nLiBMaWthIG1lZCAyNSUgZWxsZXIgU3TDtnJyZcOEbiA3NSUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgZGF0ZSd9ID0gJ1NwZWNpZmlrdCBkYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIHJhbmdlJ30gPSAnRGF0dW1pbnRlcnZhbGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUnfSA9ICdGQVEgYXJ0aWtlbCDDpG5kcmluZ3N0aWRwdW5rdCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdGQVEtSW5mb3JtYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAnQmV0eWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICdhdiA1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAnUsO2c3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEnfSA9ICdJbmdhIHLDtnN0ZXIgZnVubmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISBCZSB0aGUgZmlyc3Qgb25lIHRvIHJhdGUgdGhpcyBGQVEgYXJ0aWNsZS4nfSA9ICdJbmdhIHLDtnN0ZXIgZnVubmEhIEJsaSBkZW4gZsO2cnN0YSBhdHQgYmV0eWdzw6R0dGEgZGVubmEgRkFRLWFydGlrZWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdMYWRkYSBuZXIgYmlsYWdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISd9ID0KICAgICAgICAnSHVyIGhqw6RscHNhbSB2YXIgZGVuIGjDpHIgYXJ0aWtlbG4/IFbDpG5saWdlbiBnZSBvc3MgZGl0dCBiZXR5ZyBvY2ggaGrDpGxwIG9zcyBmw7ZyYsOkdHRyYSBGQVEtZGF0YWJhc2VuLiBUYWNrISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ2ludGUgaGrDpGxwc2FtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ZlcnkgaGVscGZ1bCd9ID0gJ3bDpGxkaWd0IGhqw6RscHNhbSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgdGl0bGUgdG8gYXJ0aWNsZSBzdWJqZWN0J30gPSAnTMOkZ2cgdGlsbCBGQVEtdGl0ZWxuIHRpbGwgYXJ0aWtlbG5zIMOkbW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgVGV4dCd9ID0gJ0tsaXN0cmEgaW4gRkFRLXRleHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRJ30gPSAnS2xpc3RyYSBpbiBmdWxsc3TDpG5kaWcgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGQVEgTGluayd9ID0gJ0tsaXN0cmEgaW4gbMOkbmsgdGlsbCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJ0tsaXN0cmEgaW4gRkFRLXRleHQgJiBsw6Ruayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnS2xpc3RyYSBpbiBmdWxsc3TDpG5kaWcgRkFRICYgbMOkbmsnOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBhcnRpY2xlcyBmb3VuZC4nfSA9ICdJbmdhIEZBUSBhcnRpa2xhciBmdW5uYS4nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiAiSm9obipuIiBvciAiV2lsbCoiKSd9ID0gJ0Z1bGx0ZXh0LXPDtmsgaSBGQVEtYXJ0aWtsYXIgKGUuIGcuICJKb2huKm4iIGVsbGVyICJXaWxsKiIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgcmVzdHJpY3Rpb25zJ30gPSAnUsO2c3QtcmVzdHJpa3Rpb25lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHZvdGVzLi4uJ30gPSAnRW5kYXN0IEZBUSBhcnRpa2xhciBtZWQgcsO2c3Rlci4uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIHJlc3RyaWN0aW9ucyd9ID0gJ0JldHlncy1yZXN0cmlrdGlvbmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggcmF0ZS4uLid9ID0gJ0VuZGFzdCBGQVEgYXJ0aWtsYXIgbWVkIGJldHlnLi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQnfSA9ICdFbmRhc3QgRkFRIGFydGlrbGFyIHNrYXBhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCBiZXR3ZWVuJ30gPSAnRW5kYXN0IEZBUSBhcnRpa2xhciBza2FwYWRlIG1lbGxhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2gtUHJvZmlsZSBhcyBUZW1wbGF0ZT8nfSA9ICdTw7ZrLXByb2ZpbCBzb20gbWFsbD8nOwoKICAgICMgVGVtcGxhdGU6IEN1c3RvbWVyRkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBOdW1iZXInfSA9ICdBcnRpa2VsbnVtbWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnU8O2ayBlZnRlciBhcnRpa2xhciBtZWQgbnlja2Vsb3JkJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ09mZmVudGxpZyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnVGlsbGJha2EgdGlsbCBGQVEtdXRmb3Jza2FyZW4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRSm91cm5hbC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwnfSA9ICdGQVEgSm91cm5hbCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCB1cGRhdGUnfSA9ICdTZW5hc3QgdXBwZGF0ZXJhZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRHluYW1pYyBGaWVsZHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0ZBUS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBhcnRpY2xlIGlzIGVtcHR5ISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDU1MgY29sb3IgZm9yIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdLYXRlZ29yaWhhbnRlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNpbWFsIHBsYWNlcyBvZiB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBjYXRlZ29yeSBuYW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBmb3IgRkFRIGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlIGZvciB0aGUgQWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIEFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBpZiB0aGUgRkFRIHRpdGxlIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gYXJ0aWNsZSBzdWJqZWN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2hvd24gRkFRIHNlYXJjaCBhdHRyaWJ1dGUgZm9yIEZBUSBzZWFyY2ggc2NyZWVuLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGluZm9ybWF0aW9uIHRvIGJlIGluc2VydGVkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4gIkZ1bGwgRkFRIiBpbmNsdWRlcyB0ZXh0LCBhdHRhY2htZW50cyBhbmQgaW5saW5lIGltYWdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQuICJMaW1pdCIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGluZGljYXRlcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIEV4cGxvcmVyLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGVyZSB0aGUgXCdJbnNlcnQgRkFRXCcgbGluayB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5pdGlvbiBvZiBGQVEgaXRlbSBmcmVlIHRleHQgZmllbGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIEZBUSd9ID0gJ1JhZGVyYSBkZW5uYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNtYWxsIGZvcm1hdCBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICdSZWRpZ2VyYSBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgdGhpcyBGQVEnfSA9ICdGQVEtaGlzdG9yaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBpbnRlcm5hbCBmaWVsZHMgb24gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIHRoZSBuYW1lIG9mIGVhY2ggZmllbGQgaW4gYSBGQVEgYmFzZWQgVGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2VzIHdoZXJlIHRoZSBxdWljayBzZWFyY2ggc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKb3VybmFsJ30gPSAnSm91cm5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnU3Byw6VraGFudGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJ0zDpG5rYSBldHQgYW5uYXQgb2JqZWt0IHRpbGwgZGVubmEgRkFRLWFydGlrZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgam91cm5hbCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBGQVEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBIVE1MIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgZmFxIHNlYXJjaC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIEFydGljbGUnfSA9ICdOeSBGQVEtQXJ0aWtlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY3JlYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICdTa3JpdiB1dCBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnS8O2IGbDtnIgZ29ka8Okbm5hbmRlIGF2IEZBUS1hcnRpa2xhci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZXMgZm9yIHZvdGluZy4gS2V5IG11c3QgYmUgaW4gcGVyY2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJ1PDtmsgRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0ICYgTGluayIgLyAiSW5zZXJ0IEZ1bGwgRkFRICYgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnVmlzYSBGQVEtYXJ0aWtlbCBtZWQgSFRNTC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgcGF0aCB5ZXMvbm8uJ30gPSAnVmlzYSBGQVEgc8O2a3bDpGcgamEvbmVqLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIEZBUSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBGQVEgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgRkFRIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBGQVEgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgRkFRLCBlLmcuIEZBUSMsIEtCIywgTXlGQVEjLiBUaGUgZGVmYXVsdCBpcyBGQVEjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgc3ViamVjdCBmb3IgYXBwcm92YWwgb2YgRkFRIGFydGljbGUuJ30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3dfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ25kYW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ3VtbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICduamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ2lkYWRpIHlhIG1hc3dhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAnTWFyZWtlYmlzaG8gbWFweWEgeWEgbWFrYWxhIHlhIG1hc3dhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAnTWFrYWxhIG1weWEgeWEgbWFzd2FsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3AgMTAgRkFRIGFydGljbGVzJ30gPSAnTWFrYWxhIDEwIGJvcmEgeWEgTWFzd2FsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yeSBvZid9ID0gJ0tpamlzZWhlbXUgY2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2VsZWN0ZWQhJ30gPSAnSGFrdW5hIGNoYWd1byBsYSBraXdhbmdvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAnS2ljaHVuZ3V6YWppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ1VtbWEgKHdvdGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICduamUgKG10ZWphKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAnbmRhbmkgKHdha2FsYSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAnU2lrdSB5YSBrdWFuemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgbW9udGgnfSA9ICdNd2V6aSB3YSBrdWFuemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgeWVhcid9ID0gJ013YWthIHdhIGt1YW56YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgZGF5J30gPSAnU2lrdSB5YSBrdWlzaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAnTXdlemkgd2Ega3Vpc2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB5ZWFyJ30gPSAnTXdha2Egd2Ega3Vpc2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rcyBmb3IgeW91ciB2b3RlISd9ID0gJ0FzYW50ZSBrd2EgS3VyYSB5YWtvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ1VtZXNoYXBpZ2Ega3VyYSB0YXlhcmkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIFByaW50J30gPSAnQ2hhcGlzaGEgbWFrYWxhIHlhIG1hc3dhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnTWFrYWxhIHlhIG1hc3dhbGkgKDEwIGJvcmEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJ30gPSAnTWFrYWxhIHlhIG1hc3dhbGkgKE1weWEgaWxpeW90ZW5nZW5lendhKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJ30gPSAnTWFrYWxhIHlhIG1hc3dhbGkgKElsaXlvYmFkaWxpc2h3YSBoaXZpIGthcmlidW5pKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdTZWhlbXUgeWEgbWFzd2FsaSBpbGl5b2JhZGlsaXNod2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdTZWhlbXUgeWEgbWFzd2FsaSBpbGl5b29uZ2V6d2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ3NlaGVtdSBpd2UgbmEgamluYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJ30gPSAnSGlpIHNlaGVtdSB0YXlhcmkgaXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSBhZGRlZCEnfSA9ICdMdWdoYSB5YSBtYXN3YWxpICBpbWVvbmdlendhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICdMdWdoYSB5YSBtYXN3YWxpIGltZWJhZGlsaXNod2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ0ppbmEgbGluYWhpdGFqaWthISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzISd9ID0gJ0x1Z2hhIGlwbyB0YXlhcmkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5bXB0b20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29sdXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICdPbmdlemEgbWFrYWxhIHlhIG1hc3dhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICdNYW5lbm8gbWFrdXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICdTZWhlbXUgaW5haGl0YWppa2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwcm92YWwnfSA9ICdJZGhpbmknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQ2F0ZWdvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBDYXRlZ29yeSBNYW5hZ2VtZW50J30gPSAnU2VoZW11IHlhIG1lbmVqaW1lbnRpIHlhIG1hc3dhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAnT25nZXphIHNlaGVtdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ2F0ZWdvcnknfSA9ICdGdXRhIHNlaGVtdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ1Nhd2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAnT25nZXphIHNlaGVtdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGVnb3J5J30gPSAnSGFyaXJpIHNlaGVtdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJ1RhZmFkaGFsaSBjaGFndWEgamFwbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnTWFrdW5kaSB5YSB3YWthbGEgeWVueWUgcnVodXNhIGt3YSBoaWkgbWFrYWxhIGthdGlrYSBrYXRlZ29yaSBoaWkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICdJdGFvbnllc2h3YSBrYW1hIHRhbWtvIGt3ZW55ZSBFeHBsb3Jlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ0plIHVuYXRha2Ega3VmdXRhIGhpaSBzZWhlbXU/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGNhdGVnb3J5LiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSBhbmQvb3IgaXMgcGFyZW50IG9mIGF0IGxlYXN0IG9uZSBvdGhlciBjYXRlZ29yeSd9ID0KICAgICAgICAnSHV3ZXppIGt1ZnV0YSBzZWhlbXUgaGlpLkltZXR1bWlrYSBuYSBtYWthbGEgeWEgbWFzd2FsaSBzaSBjaGluaSB5YSBtb2phIG5hL2F1IGlwbyBuZGFuaSB5YSBrYXRlZ29yaSBueWluZ2luZSBzaSBjaGluaSB5YSBtb2phLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocyknfSA9ICdIaWkgc2VoZW11IGluYXR1bWlrYSBrYXRpa2EgbWFrYWxhIHlhIG1hc3dhbGkgaWZ1YXRheW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyd9ID0gJ0hpaSBuaSBzZWhlbXUgbWFtYSB5YSB2aWppc2VoZW11IHZpZnVhdGF2eW8gJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPyd9ID0gJ0plIHVuYXRha2EgS3VmdXRhIGhpaSBtYWthbGEgeWEgbWFzd2FsaT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRJ30gPSAnTWFzd2FsaSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEV4cGxvcmVyJ30gPSAnS2ljaHVuZ3V6YWppIG1hc3dhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVpY2sgU2VhcmNoJ30gPSAnVGFmdXRhIGhhcmFrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWxkY2FyZHMgYXJlIGFsbG93ZWQuJ30gPSAnV2lsZGNhcmQgaGF6aXJ1aHVzaXdpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkdmFuY2VkIFNlYXJjaCd9ID0gJ1RhZnV0YSB6YWlkaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJjYXRlZ29yaWVzJ30gPSAnS2lqaWtpc2VoZW11JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyd9ID0gJ01ha2FsYSB5YSBNYXN3YWxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN1YmNhdGVnb3JpZXMgZm91bmQuJ30gPSAnSGFrdW5hIHZpamlzZWhlbXUgdmlsaXZ5b3BhdGlrYW5hLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mJ30gPSAnSGlzdG9yaWEgeWEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSm91cm5hbE92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBKb3VybmFsIGRhdGEgZm91bmQuJ30gPSAnRGF0YSB6YSBqYXJpZGEgbGEgbWFzd2FsaSBoYXppamFwYXRpa2FuYS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRTGFuZ3VhZ2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnTWVuZWppbWVudGkgeWEgbHVnaGEgeWEgbWFzd2FsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4nfSA9CiAgICAgICAgJ1R1bWlhIGtpcGVuZ2VsZSBoaWtpIGthbWEgdW5hdGFrYSBrdXR1bWlhIGx1Z2hhIG55aW5naSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnT25nZXphIGx1Z2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSAlcyd9ID0gJ0Z1dGEgTHVnaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAnT25nZXphIEx1Z2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICdIYXJpcmkgTHVnaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ0plIHVuYXRha2Ega3VmdXRhIGhpaSBsdWdoYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAnSHV3ZXppIGt1ZnV0YSBsdWdoYSBoaWkuIEltZXR1bWlrYSBrd2VueWUgbWFrYWxhIHlhIG1hc3dhbGkgemFpZGkgeWEgbW9qYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIEFydGljbGUocyknfSA9ICdIaWkgbHVnaGEgaW1ldHVtaWthIGthdGlrYSBtYWthbGEgeWEoemEpIG1hc3dhbGkgaWZ1YXRheW8uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnTWlwYW5naWxpbyB5YSBtdWt0YWRoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICdNYWthbGEgeWEgbWFzd2FsaSBrd2EgdWt1cmFzYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgZGF0YSBmb3VuZC4nfSA9ICdIYWt1bmEgZGF0YSB6YSBtYXN3YWxpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJ05lbm8ga3V1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgKGUuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCknfSA9ICdLdXJhIChtZmFuby4gc2F3YSBuYSAxMCBhdSBaYWlkaSB5YSA2MCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSAoZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUpJ30gPSAnS2l3YW5nbyAobWZhbm8gU2F3YSBuYSAyNSUgYXUgWmFpZGkgeWEgNzUlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJ0t1aWRoaW5pc2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ01hcmEgeWEgbXdpc2hvIGltZWJhZGlsaXNod2EgbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICdNdWRhIHdhIGt1dGVuZ2VuZXphIG1ha2FsYSB5YSBtYXN3YWxpIChrYWJsYS9iYWFkYSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJldHdlZW4pJ30gPSAnTXVkYSB3YSBrdXRlbmdlbmV6YSBNYWthbGEgeWEgbWFzd2FsaSAoa2F0aWthdGkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAnTXVkYSB3YSBrdWJhZGlsaXNoYSBtYWthbGEgeWEgbWFzd2FsaSAoa2FibGEvYmFhZGEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ011ZGEgd2Ega3ViYWRpbGlzaGEgbWFrYWxhIHlhIG1hc3dhbGkgKGthdGlrYXRpKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICdOYWthbGEgbnppbWEgeWEgbWFzd2FsaSB5YW5heW8gdWxpendhIG1hcmEga3dhIG1hcmEuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaFNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgU2VhcmNoJ30gPSAnVGFmdXRhIG1hc3dhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZmlsZSBTZWxlY3Rpb24nfSA9ICdDaGFndW8gbGEgbWFlbGV6byBtYWZ1cGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJ0t1cmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZSBzZXR0aW5ncyd9ID0gJ0hha3VuYSBNaXBhbmdpbGlvIHlhIGt1cmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgdm90ZXMnfSA9ICdLdXJhIG1hYWx1bXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwJ30gPSAnTWFmYW5vIFNhd2EgbmEgMTAgYXUgWmFpZGkgeWEgNjAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSd9ID0gJ0tpd2FuZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZXR0aW5ncyd9ID0gJ0hha3VuYSBtaXBhbmdpbGlvIHlhIGtpd2FuZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgcmF0ZSd9ID0gJ0tpd2FuZ28gbWFhbHVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlJ30gPSAnTWZhbm8gU2F3YSBuYSAyNSUgYXUgWmFpZGkgeWEgNzUlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAnTXVkYSB3YSBrdXRlbmdlbmV6YSBtYWthbGEgeWEgbWFzd2FsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyBkYXRlJ30gPSAnVGFyZWhlIG1hYWx1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIHJhbmdlJ30gPSAndGFyZWhlIG1iYWxpbWJhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUnfSA9ICdNdWRhIHdhIGt1YmFkaWxpIG1ha2FsYSB5YSBtYXN3YWxpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBJbmZvcm1hdGlvbid9ID0gJ0hhYmFyaSB6YSBNYXN3YWxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJ1RoYW1pbmlzaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3V0IG9mIDUnfSA9ICdLYXRpIHlhIDUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZXMnfSA9ICdLdXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ0hha3VuYSBLdXJhIHppbGl6b3BhdGlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnSGFrdW5hIGt1cmEuIEt1d2Egd2Ega3dhbnphIGt1dGhhbWluaXNoYSBtYWthbGEgaGlpIHlhIG1hc3dhbGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdEb3dubG9hZCBLaWFtYmF0YW5pc2h3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEnfSA9CiAgICAgICAgJ05pIGt3YSBraWFzaSBnYW4gbWFrYWxhIGhpaSBpbWVzYWlkaWE/IFRhZmFkaGFsaSB0dXNhaWRpZSBrdXRoYW1pbmlzaGEga3VsZXRhIG1hYmFkaWxpa28ga2F0aWthIGRhdGFiYXNlIHlhIE1hc3dhbGkuIEFzYW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgaGVscGZ1bCd9ID0gJ0hhaW5hIE1zYWFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2ZXJ5IGhlbHBmdWwnfSA9ICdJbmEgbXNhYWRhIHNhbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbVNtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIHRpdGxlIHRvIGFydGljbGUgc3ViamVjdCd9ID0gJ09uZ2V6YSBraWNod2EgY2hhIGhhYmFyaSBjaGEgbWFzd2FsaSBrYXRpa2Egc29tbyB5YSBtYWthbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnSW5naXphIG1hdGluaSB5YSBtYXN3YWxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSd9ID0gJ0luZ2l6YSBtYXN3YWxpIHlvdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBMaW5rJ30gPSAnSW5naXphIGxpbmsgeWEgbWFzd2FsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIFRleHQgJiBMaW5rJ30gPSAnSW5naXphIG5ha2FsYSB5YSBtYXN3YWxpIG5hIExpbmsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZ1bGwgRkFRICYgTGluayd9ID0gJ0luZ2l6YSBtYXN3YWxpIHlvdGUgbmEgbGluayc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFFeHBsb3JlcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGFydGljbGVzIGZvdW5kLid9ID0gJ0hha3VuYSBtYWthbGEgeWEgbWFzd2FsaSBpbGl5b3BhdGlrYW5hJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICdUYWZ1dGEgbmFrYWxhIGthbWlsaSBrYXRpa2EgbWFzd2FsaSB5YW5heW9vdWxpendhIG1hcmEga3dhIG1hcmEgKG1mYW5vICJKb2huIiBhdSAiV2lsbCIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgcmVzdHJpY3Rpb25zJ30gPSAnVml6dWl6aSB2eWEga3VyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHZvdGVzLi4uJ30gPSAnTWFrYWxhIHlhIG1hc3dhbGkgeWVueWUga3VyYSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSByZXN0cmljdGlvbnMnfSA9ICdWaXp1aXppIHZ5YSB0aGFtYW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIHdpdGggcmF0ZS4uLid9ID0gJ01ha2FsYSB5YSBtYXN3YWxpIHlhbGl5b3RoYW1pbmlzaHdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQnfSA9ICdNYWthbGEgeWEgbWFzd2FsaSB5YWxpeW90ZW5nZW5lendhIHR1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQgYmV0d2Vlbid9ID0gJ01ha2FsYSB5YSBtYXN3YWxpIHlhbGl0ZW5nZW5lendhIGthdGkgeWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/J30gPSAnVGFmdXRhIG1hZWxlem8gbWFmdXBpIGthbWEga2llbGV6byc7CgogICAgIyBUZW1wbGF0ZTogQ3VzdG9tZXJGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIE51bWJlcid9ID0gJ05hbWJhIHlhIG1ha2FsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCd9ID0gJ1RhZnV0YSBNYWthbGEga3dhIG5lbm8ga3V1JzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ1VtbWEnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY0ZBUVNlYXJjaFJlc3VsdFNob3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIHRvIEZBUSBFeHBsb3Jlcid9ID0gJ0JhY2sgdG8gRkFRIG1jaHVuZ3V6aSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFKb3VybmFsLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCd9ID0gJ0phcmlkYSBsYSBtYXN3YWxpJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHVwZGF0ZSd9ID0gJ01hYmFkaWxpa28geWEgbXdpc2hvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBEeW5hbWljIEZpZWxkcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRGQVFTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFJlc3VsdCEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvRkFRLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGFydGljbGUgaXMgZW1wdHkhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBmaWx0ZXIgZm9yIEhUTUwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gRmlyc3QgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJpbGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0KICAgICAgICAnS2ljaHVqaW8gY2hhIG1hdG9rZW8geWEgSFRNTCBpbGkga3VvbmdlemEgdml1bmdvIGt3YSB0dW5nbyB6aWxpem8gZmFmYW51bGl3YS4gU3VyYSB5YSBlbGVtbnRpIGhpaSBpbmFydWh1c3UgbWFpbmdpem8geWEgYWluYSBtYmlsaS4gS3dhbnphIGppbmFsYSBzdXJhIChtZi4gZmFxLnBuZykuIEt3YSBrZXNpIGhpaSBzdXJhIHlhIG5qaWEgeWEgT1RSUyBpdGF0dW1pa2EuIE5qaWEgeWEgcGlsaSBuaSBrdWluZ2l6YSBraXVuZ28gY2hhIGhpeW8gc3VyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NTIGNvbG9yIGZvciB0aGUgdm90aW5nIHJlc3VsdC4nfSA9ICdSYW5naSB5YSBDU1Mga3dhIG1hdG9rZW8geWEga3VyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnTXVkYSB3YSBtYXN3YWxpIHlhbGl5eW91bGl6d2EgbWFyYSBteWluZ2kga3VmdXRpa2Ega3V0b2thIGt3ZW55ZSBrdW1idWt1bWJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICdVc2ltYW1pemkgd2Ega2F0ZWdvcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnTXdvbmdvIHdhIG1hdG9rZW8geWEga3VyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAnSmluYSBsYSBjaGFndW8tbXNpbmdpIGxhIGthdGVnb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbGFuZ3VhZ2UgZm9yIEZBUSBhcnRpY2xlcyBvbiBzaW5nbGUgbGFuZ3VhZ2UgbW9kZS4nfSA9ICdDaGFndW8tbXNpbmdpIGxhIGx1Z2hhIHlhIG1ha2FsYSB5YSBtYXN3YWxpIHlhbGl5b3VsaXp3YSBtYXJhIG55aW5naSBrYXRpa2EgbHVnaGEgbW9qYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBtYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duLid9ID0KICAgICAgICAnVWt1YndhIHdhIHVwZW8gd2EganV1IGNoYWd1byBtc2luZ2kgd2EgdmljaHdhIGthdGlrYSBtYWthbGEgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrdW9ueWVzaHdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICdLaXBhdW1iZWxlIGNoYSBjaGFndW8tbXNpbmdpIGNoYSB0aWtldGkga3dhIGlkaGluaSB5YSBtYWthbGEgeWEgbWFzd2FsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIGZvciBGQVEgZW50cnkuJ30gPSAnSGFsaSB5YSBjaGFndW8tbXNpbmdpIHlhIGluZ2l6byBsYSBtYXN3YWxpIHlhbGl5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXRlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnSGFsaSB5YSBjaGFndW8tbXNpbmdpIGt3YSB0aWtldGkgemEgaWRoaW5pIHlhIG1ha2FsYSB5YSBtYXN3YWxpIHlhbGl5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICdIYWxpIHlhIGNoYWd1by1tc2luZ2kga3dhIHRpa2V0aSB6YSBtYWthbGEgeWEgbWFzd2FsaSB5YWxpeW91bGl6d2EgbWFyYSBrd2EgbWFyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9CiAgICAgICAgJ1RoYW1hbmkgeWEgY2hhZ3VvLW1zaW5naSBrd2EgcGF0YW1ldGEgYW1pbGlmdSBrd2EgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBpZiB0aGUgRkFRIHRpdGxlIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gYXJ0aWNsZSBzdWJqZWN0Lid9ID0KICAgICAgICAnRWxlemEga2FtYSBraWNod2EgY2hhIGhhYmFyaSBjaGEgbWFzd2FsaSB5YWxpeW91bGl6d2EgbWFyYW55aW5naSBraXVuZ2FuaXNod2UgbmEgc29tbyBsYSBtYWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgam91cm5hbC4nfSA9CiAgICAgICAgJ0luYWVsZXphIG1hcGl0aW8geWEgbW9kdWxpIGt1b255ZXNoYSAgbXVvbmVrYW5vIG1kb2dvIHdhIGphcmlkYSBsYSBtYXN3YWxpIHlhbGl5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGxpc3QuJ30gPQogICAgICAgICdJbmFlbGV6YSBtYXBpdGlvIHlhIG1vZHVsaSBrdW9ueWVzaGEgbXVvbmVrYW5vIG1kb2dvIHdhIG9yb2RoYSB5YSBtYXN3YWxpIHlhbGl5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGtpdW1iaSBjaGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrd2EgYWppbGkgeWEgdXBhbmdhamkgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrYXRpa2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB0YWZ1dGkgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kga2l1bWJpIGNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGt3YSBhamlsaSB5YSB1cGFuZ2FqaSB3YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHRhZnV0aSB5YSBraW9sZXN1cmEgY2hhIG10ZWphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgY2hhZ3VvLW1zaW5naSBraXVtYmkgY2hhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga3dhIGFqaWxpIHlhIHVwYW5nYWppIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgdGFmdXRpIHlhIGtpb2xlc3VyYSBjaGEgdW1tYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kga2l1bWJpIGNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGt3YSBhamlsaSB5YSB1cGFuZ2FqaSB3YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGthdGlrYSBraWNodW5ndXppIGNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgY2hhZ3VvLW1zaW5naSBraXVtYmkgY2hhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga3dhIGFqaWxpIHlhIHVwYW5nYWppIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga2F0aWthIGtpY2h1bmd1emkgY2hhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSBtdGVqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGtpdW1iaSBjaGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrd2EgYWppbGkgeWEgdXBhbmdhamkgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrYXRpa2Ega2ljaHVuZ3V6aSBjaGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSBraW9sZXN1cmEgY2hhIHVtbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRmFmYW51YSBjaGFndW8tbXNpbmdpIHdhIG1wYW5naWxpbyB3YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGthdGlrYSBtYXRva2VvIHlhIGtpY2h1bmd1emkgY2hhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuIEp1dTogS29uZ3dlIGp1dS4gQ2hpbmk6IHlhIHNhc2FoaXZpIGp1dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0ZhZmFudWEgY2hhZ3VvLW1zaW5naSB3YSBtcGFuZ2lsaW8gd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrYXRpa2EgbWF0b2tlbyB5YSBraWNodW5ndXppIGNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIGtpb2xlc3VyYSBjaGEgbXRlamEuIEp1dTogS29uZ3dlIGp1dS4gQ2hpbmk6IHlhIHNhc2FoaXZpIGp1dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdGYWZhbnVhIGNoYWd1by1tc2luZ2kgd2EgbXBhbmdpbGlvIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga2F0aWthIG1hdG9rZW8geWEga2ljaHVuZ3V6aSBjaGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSBraW9sZXN1cmEgY2hhIHVtbWEuIEp1dTogS29uZ3dlIGp1dS4gQ2hpbmk6IHlhIHNhc2FoaXZpIGp1dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICdGYWZhbnVhIGNoYWd1by1tc2luZ2kgd2EgbXBhbmdpbGlvIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga2F0aWthIG1hdG9rZW8geWEga3V0YWZ1dGEga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLiBKdXU6IEtvbmd3ZSBqdXUuIENoaW5pOiB5YSBzYXNhaGl2aSBqdXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnRmFmYW51YSBjaGFndW8tbXNpbmdpIHdhIG1wYW5naWxpbyB3YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGthdGlrYSBtYXRva2VvIHlhIGt1dGFmdXRhIGthdGlrYSBraW9sZXN1cmEgY2hhIG10ZWphLiBKdXU6IEtvbmd3ZSBqdXUuIENoaW5pOiB5YSBzYXNhaGl2aSBqdXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJ0ZhZmFudWEgY2hhZ3VvLW1zaW5naSB3YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIG1hamlidSB5YSB1dGFmdXRhamkga2F0aWthIGludGFmYXNlIHlhIHVtbWEuIEp1dTogS29uZ3dlIHphaWRpIGp1dS4gQ2hpbmk6IFlhIHNhc2EgaGl2aSBqdXUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICdJbmFmYWZhbmEgc2lmYSB5YSB1dGFmdXRhamkgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrd2EgYWppbGkgeWEgc2tyaW5pIHlhIHV0YWZ1dGFqaSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuICJGdWxsIEZBUSIgaW5jbHVkZXMgdGV4dCwgYXR0YWNobWVudHMgYW5kIGlubGluZSBpbWFnZXMuJ30gPQogICAgICAgICdGYWZhbnVhIHRhYXJpZmEgaXRha2F5b2luZ2l6d2Ega3dlbnllIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga3dhIG1pc2luZ2kgeWEgdGlrZXRpLiAiTWFzd2FsaSB5YWxpeW9qYWEgbmF5YXlvdWxpendhIG1hcmEga3dhIG1hcmEiIHlhbmF5b2p1bXVpc2hhIG5ha2FsYSwgdmlhbWJhdGFuaXNoaSBuYSB0YXN3YWlyYSB5YSBtc3Rhcmkgd2EgbmRhbmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdGYWZhbnVhIHNhZnUgemlsaXpvb255ZXNod2Ega2F0aWthIGtpdGFmdXRhIG1hc3dhbGkuIEhpbGkgY2hhZ3VvIGhhbGluYSBtYWRoYXJhIGthdGlrYSBuYWZhc2kga3dlbnllIHNhZnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBqb3VybmFsLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRmFmYW51YSBzYWZ1IHppbGl6b29ueWVzaHdhIGthdGlrYSBqYXJpZGEgbGEgbWFzd2FsaS4gSGlsaSBjaGFndW8gaGFsaW5hIG1hZGhhcmEga2F0aWthIG5hZmFzaSBrd2VueWUgc2FmdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0ZhZmFudWEgc2FmdSB6aWxpem9vbnllc2h3YSBrYXRpa2EgbWFrYWxhIHlhIG1hc3dhbGkuIEhpbGkgY2hhZ3VvIGhhbGluYSBtYWRoYXJhIGthdGlrYSBuYWZhc2kga3dlbnllIHNhZnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJ1VmYWZhbnV6aSB3YSB1Z2EgeWEgbWF0aW5pIGh1cnUgeWEga2lwZW5nZWxlIGNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICdGdXRhIGhheWEgbWFzd2FsaSB5YWxpeW91bGl6d2EgbWFyYSBrd2EgbWFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ1VnYSB3ZW55ZSB1d2V6byBpbWVvbnllc2h3YSBrYXRpa2Egc2tyaW5pIHlhIGt1b25nZXphIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuIE1pcGFuZ28gaW5heW93ZXpla2FuYTogMD0gTGVtYXp3YSwgMSA9IHdlemVzaGEsIDIgPSB3ZXplc2hhIGFuZCB0YWtpd2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ1VnYSB3ZW55ZSB1d2V6byBpbWVvbnllc2h3YSBrYXRpa2Egc2tyaW5pIHlhIGt1aGFyaXJpIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuTWlwYW5nbyBpbmF5b3dlemVrYW5hOiAwPSBMZW1hendhLCAxID0gd2V6ZXNoYSwgMiA9IHdlemVzaGEgYW5kIHRha2l3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ1VnYSB3ZW55ZSB1d2V6byBpbWVvbnllc2h3YSBrYXRpa2Egc2tyaW5pIHlhIG1hcGl0aW8geWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gTWlwYW5nbyBpbmF5b3dlemVrYW5hOiAwPSBMZW1hendhLCAxID0gd2V6ZXNoYSwgMiA9IHdlemVzaGEgYW5kIHRha2l3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdVZ2Egd2VueWUgdXdlem8gaW1lb255ZXNod2Ega2F0aWthIHNrcmluaSB5YSBtYXBpdGlvIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSB1bW1hLiBNaXBhbmdvIGluYXlvd2V6ZWthbmE6IDA9IExlbWF6d2EsIDEgPSB3ZXplc2hhLCAyID0gd2V6ZXNoYSBhbmQgdGFraXdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ1VnYSB3ZW55ZSB1d2V6byBpbWVvbnllc2h3YSBrYXRpa2Egc2tyaW5pIHlhIGt1Y2hhcGlzaGEgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gTWlwYW5nbyBpbmF5b3dlemVrYW5hOiAwPSBMZW1hendhLCAxID0gd2V6ZXNoYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdVZ2Egd2VueWUgdXdlem8gaW1lb255ZXNod2Ega2F0aWthIHNrcmluaSB5YSBtYXBpdGlvIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSBtdGVqYS4gTWlwYW5nbyBpbmF5b3dlemVrYW5hOiAwPSBMZW1hendhLCAxID0gd2V6ZXNoYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnVWdhIHdlbnllIHV3ZXpvIGltZW9ueWVzaHdhIGthdGlrYSBza3JpbmkgeWEgbWFwaXRpbyB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIGtpb2xlc3VyYSBjaGEgdW1tYS4gTWlwYW5nbyBpbmF5b3dlemVrYW5hOiAwPSBMZW1hendhLCAxID0gd2V6ZXNoYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ1VnYSB3ZW55ZSB1d2V6byBpbWVvbnllc2h3YSBrYXRpa2Egc2tyaW5pIHlhIGt1dGFmdXRhICBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLiBNaXBhbmdvIGluYXlvd2V6ZWthbmE6IDA9IExlbWF6d2EsIDEgPSB3ZXplc2hhLCAyID0gd2V6ZXNoYSBhbmQgaWxpdnlvb255ZXNod2EgbmEgY2hhZ3VvLW1zaW5naS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ1VnYSB3ZW55ZSB1d2V6byBpbWVvbnllc2h3YSBrYXRpa2Egc2tyaW5pIHlhIGt1dGFmdXRhICBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIGtpb2xlc3VyYSBjaGEgbXRlamEuIE1pcGFuZ28gaW5heW93ZXpla2FuYTogMD0gTGVtYXp3YSwgMSA9IHdlemVzaGEsIDIgPSB3ZXplc2hhIGFuZCBpbGl2eW9vbnllc2h3YSBuYSBjaGFndW8tbXNpbmdpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ1VnYSB3ZW55ZSB1d2V6byBpbWVvbnllc2h3YSBrYXRpa2Egc2tyaW5pIHlhIGt1dGFmdXRhICBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIGtpb2xlc3VyYSBjaGEgdW1tYS4gTWlwYW5nbyBpbmF5b3dlemVrYW5hOiAwPSBMZW1hendhLCAxID0gd2V6ZXNoYSwgMiA9IHdlemVzaGEgYW5kIGlsaXZ5b29ueWVzaHdhIG5hIGNoYWd1by1tc2luZ2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc21hbGwgZm9ybWF0IG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ1VnYSB3ZW55ZSB1d2V6byBpbWVvbnllc2h3YSBrYXRpa2Egc2tyaW5pIHlhIG1hdW1iaXpvIG1hZG9nbyB5YSBtYXBpdGlvIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuIDA9IExlbWF6d2EsIDEgPSB3ZXplc2hhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnVWdhIHdlbnllIHV3ZXpvIGltZW9ueWVzaHdhIGthdGlrYSBza3JpbmkgaWxpa3V6d2EgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gMD0gTGVtYXp3YSwgMSA9IHdlemVzaGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdVZ2Egd2VueWUgdXdlem8gaW1lb255ZXNod2Ega2F0aWthIHNrcmluaSBpbGlrdXp3YSB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIGtpb2xlc3VyYSBjaGEgbXRlamEuIDA9IExlbWF6d2EsIDEgPSB3ZXplc2hhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ1VnYSB3ZW55ZSB1d2V6byBpbWVvbnllc2h3YSBrYXRpa2Egc2tyaW5pIGlsaWt1endhIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSB1bW1hLiAwPSBMZW1hendhLCAxID0gd2V6ZXNoYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGlzIEZBUSd9ID0gJ0hhcmlyaSBtYWthbGEgaGlpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICdXZXplc2hhIEx1Z2hhIG55aW5naSBueWluZ2kga2F0aWthIG1hc3dhbGkgaGF5YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICdXZXplc2hhICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnIEtpa29tbyAia2lkb2dvIiBjaGEgbWFwaXRpbyB5YSBqYXJpZGEgbGEgbWFzd2FsaSB5YWxpeW91bGl6d2EgbWFyYSBrd2EgbWFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0tpa29tbyAia2lkb2dvIiBjaGEgbWFwaXRpbyB5YSBtYXN3YWxpIHlhbGl5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdVcGVvIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga3dhIHVrdXJhc2Ega3dhIG1hcGl0aW8geWEgamFyaWRhIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEuIFwnXCdOZG9nb1wnXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdVcGVvIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga3dhIHVrdXJhc2Ega3dhIG1hcGl0aW8gIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEuIFwnXCdOZG9nb1wnXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHRhZnV0YSBiYWNrZW5kIHJ1dGEgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnU2VoZW11IHlhIG1hc3dhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmllbGQ0J30gPSAnU2VoZW11NCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDUnfSA9ICdTZWhlbXU1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0gJ01vZHVsaSB5YSB1c2FqaWxpIHlhIGZyb250ZW5kIGt3YSBhamlsaSB5YSBraW9sZXN1cmEgY2hhIHVtbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ01ha3VuZGkgeWEgaWRoaW5pIGt3YSBtYXN3YWxpIHlhbGl5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnSGlzdG9yaWEgeWEgbWFzd2FsaSBoYXlhIHlhbGl5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIGludGVybmFsIGZpZWxkcyBvbiBhIEZBUSBiYXNlZCBUaWNrZXQuJ30gPSAnSnVtdWlzaGEgc2VoZW11IHphIG5kYW5pIHphIG1hc3dhbGkgeWFsaXlvdWxpendhIG1hcmEga3dhIG1hcmEga3VsaW5nYW5hIG5hIHRpa2V0aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICdKdW11aXNoYSBqaW5hIGxhIGtpbGEgc2VoZW11IHlhIG1hc3dhbGkgeWFsaXlvdWxpendhIG1hcmEgbnlpbmdpIGt1bGluZ2FuYSBuYSB0aWtldGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVyZmFjZXMgd2hlcmUgdGhlIHF1aWNrIHNlYXJjaCBzaG91bGQgYmUgc2hvd24uJ30gPSAnS2lvbGVzdXJhIGFtYmFjaG8gdXRhZnV0YWppIHdhIGhhcmFrYSB1bmF0YWtpd2Ega3Vvbnllc2h3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ0phcmlkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnTWVuZWppbWVudGkgeWEgbHVnaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGlzIEZBUSBpdGVtJ30gPSAnVW5nYW5pc2hnYSBraXR1IGtpbmdpbmUgbmEga2lwZW5nZWxlIGhpa2kgY2hhICBtYXN3YWxpIHlhbGl5b3VsaXp3YSBtYXJhIGt3YSBtYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09yb2RoYSB5YSBhaW5hIHlhIGhhbGkgYW1iYXpvIHppbmF3ZXphIGt1dHVtaWthIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnT3JvZGhhIHlhIGFpbmEgeWEgaGFsaSBhbWJhem8gemluYXdlemEga3V0dW1pa2Ega2F0aWthIGtpb2xlc3VyYSBjaGEgbXRlamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPcm9kaGEgeWEgYWluYSB5YSBoYWxpIGFtYmF6byB6aW5hd2V6YSBrdXR1bWlrYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB1bW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOYW1iYSB5YSB1cGVvIHdhIGp1dSB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhbmF5YXRheW9vbnllc2h3YSBrYXRpa2EgbWFqaWJ1IHlhIGtpY2h1bmd1emkgY2hhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ05hbWJhIHlhIHVwZW8gd2EganV1IHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWFuYXlhdGF5b29ueWVzaHdhIGthdGlrYSBtYWppYnUgeWEga2ljaHVuZ3V6aSBjaGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSBraW9sZXN1cmEgY2hhIG10ZWphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTmFtYmEgeWEgdXBlbyB3YSBqdXUgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YW5heWF0YXlvb255ZXNod2Ega2F0aWthIG1hamlidSB5YSBraWNodW5ndXppIGNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIGtpb2xlc3VyYSBjaGEgdW1tYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ05hbWJhIHlhIHVwZW8gd2EganV1IHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWFuYXlhdGF5b29ueWVzaHdhIGthdGlrYSAgbWFrYWxhIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ05hbWJhIHlhIHVwZW8gd2EganV1IHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWFuYXlhdGF5b29ueWVzaHdhIGthdGlrYSBtYWppYnUgeWEgdWNodW5ndXppICB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOYW1iYSB5YSB1cGVvIHdhIGp1dSB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhbmF5YXRheW9vbnllc2h3YSBrYXRpa2EgbWFqaWJ1IHlhIHVjaHVuZ3V6aSAgeWEga2lvbGVzdXJhIGNoYSBtdGVqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTmFtYmEgeWEgdXBlbyB3YSBqdXUgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YW5heWF0YXlvb255ZXNod2Ega2F0aWthIG1hamlidSB5YSB1Y2h1bmd1emkgIHlhIGtpb2xlc3VyYSBjaGEgdW1tYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVcGVvIHdhIGp1dSB3YSB1a3Vid2Egd2EgdmljaHdhIGthdGlrYSBtYWthbGEgeWEgbWFzd2FsaSBpbmF5b29ueWVzaHdhIGthdGlrYSBraXZpbmphcmkgY2hhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgRXhwbG9yZXIgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VwZW8gd2EganV1IHdhIHVrdWJ3YSB3YSB2aWNod2Ega2F0aWthIG1ha2FsYSB5YSBtYXN3YWxpIGluYXlvb255ZXNod2Ega2F0aWthIGtpdmluamFyaSBjaGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSBtdGVqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIEV4cGxvcmVyIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXBlbyB3YSBqdXUgd2EgdWt1YndhIHdhIHZpY2h3YSBrYXRpa2EgbWFrYWxhIHlhIG1hc3dhbGkgaW5heW9vbnllc2h3YSBrYXRpa2Ega2l2aW5qYXJpIGNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGthdGlrYSBraW9sZXN1cmEgY2hhIHVtbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VwZW8gd2EganV1IHdhIHVrdWJ3YSB3YSB2aWNod2Ega2F0aWthIG1ha2FsYSB5YSBtYXN3YWxpIGluYXlvb255ZXNod2Ega2F0aWthIHV0YWZ1dGFqaSB3YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXBlbyB3YSBqdXUgd2EgdWt1YndhIHdhIHZpY2h3YSBrYXRpa2EgbWFrYWxhIHlhIG1hc3dhbGkgaW5heW9vbnllc2h3YSBrYXRpa2EgdXRhZnV0YWppIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgIGthdGlrYSBraW9sZXN1cmEgY2hhIG10ZWphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXBlbyB3YSBqdXUgd2EgdWt1YndhIHdhIHZpY2h3YSBrYXRpa2EgbWFrYWxhIHlhIG1hc3dhbGkgaW5heW9vbnllc2h3YSBrYXRpa2EgdXRhZnV0YWppIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga2F0aWthIGtpb2xlc3VyYSBjaGEgdW1tYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VwZW8gd2EganV1IHdhIHVrdWJ3YSB3YSB2aWNod2Ega2F0aWthIG1ha2FsYSB5YSBtYXN3YWxpIGluYXlvb255ZXNod2Ega2F0aWthIGphcmlkYSBsYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBGQVEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9kdWxpIHlhIGt1emFsaXNoYSBtYWVsZXpvIG1hZnVwaSB5YSB1dGFmdXRhamkgd2Egd2F6aSB3YSBIVE1MIGt3YSB1dGFmdXRhamkgbWZ1cGkgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB1bW1hLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb2R1bGkgeWEga3V6YWxpc2hhIG1hZWxlem8gbWFmdXBpIHlhIHV0YWZ1dGFqaSB3YSB3YXppIHdhIEhUTUwga3dhIHV0YWZ1dGFqaSBtZnVwaSB3YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGthdGlrYSBraW9sZXN1cmEgY2hhIG10ZWphLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0KICAgICAgICAnTW9kdWxpIHlhIGt1emFsaXNoYSBtYWVsZXpvIG1hZnVwaSB5YSB1dGFmdXRhamkgd2Egd2F6aSB3YSBIVE1MIGt3YSB1dGFmdXRhamkgbWZ1cGkgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEZBUSBBcnRpY2xlJ30gPSAnTWFrYWxhIG1weWEgeWEgbWFzd2FsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICdNYWthbGEgbXB5YSB5YSBtYXN3YWxpIHlhbmFoaXRhamkgaWRoaW5pc2hvIGthYmxhIGhheWF0b2xld2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ05hbWJhIHlhIG1ha2FsYSB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhdGFrYXlvb255ZXNod2Ega2F0aWthIGtpdGFmdXRhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSBtdGVqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ05hbWJhIHlhIG1ha2FsYSB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhdGFrYXlvb255ZXNod2Ega2F0aWthIGtpdGFmdXRhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEga2lvbGVzdXJhIGNoYSB1bW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOYW1iYSB5YSBtYWthbGEgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YXRha2F5b29ueWVzaHdhIGthdGlrYSBraWxhIHVrdXJhc2Egd2EgbWF0b2tlbyB5YSB1dGFmdXRhamkgeWEga2lvbGVzdXJhIGNoYSBtdGVqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ05hbWJhIHlhIG1ha2FsYSB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhdGFrYXlvb255ZXNod2Ega2F0aWthIGtpbGEgdWt1cmFzYSB3YSBtYXRva2VvIHlhIHV0YWZ1dGFqaSB5YSBraW9sZXN1cmEgY2hhIHVtbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNoYW5nZXMuJ30gPSAnTmFtYmEgeWEgdml0dSB2aWxpdm9vbnl3ZXNod2Ega2F0aWthIG1hYmFkaWxpa28geWEgbXdpc2hvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjcmVhdGVkLid9ID0gJ05hbWJhIHlhIHZpdHUgdmlsaXZvdGVuZ2VuZXp3YSBtd2lzaG9uaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIHRoZSB0b3AgMTAgZmVhdHVyZS4nfSA9ICdOYW1iYSB5YSB2aXR1IHZpbGl2b29ueXdlc2h3YSBrYXRpa2EgdmlwZW5nZWxlIDEwIGJvcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgam91cm5hbCBvdmVydmlldy4nfSA9CiAgICAgICAgJ1BhcmFtZXRhIHphIGt1cmFzYSAoYW1iYXpvIHZpcGVuZ2VlIHZ5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHppbWVvbnllc2h3YSkgemEgbWFwaXRpbyBtYWRvZ28geWEgamFyaWRhIGxhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXJhbWV0YSB6YSBrdXJhc2EgKGFtYmF6byB2aXBlbmdlZSB2eWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB6aW1lb255ZXNod2EpIHphIG1hcGl0aW8gbWFkb2dvIHlhICBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJ0NoYXBpc2hhIG1hc3dhbGkgaGF5YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnRm9sZW5pIHlhIGlkaGluaSB5YSBtYWthbGEgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBha3dhIG1hcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAnVGhhbWluaXNobyBsYSBrdXJhLiBGdW5ndW8gbGF6aW1hIGl3ZSBrd2VueWUgYXNpbGltaWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICdUYWZ1dGEgbWFzd2FsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICdTZXRpIHVyZWZ1IHdhIGNoYWd1by1tc2luZ2kgKGthdGlrYSBwaWtzZWxpKSB5YSBuZGFuaSB5YSBtc3Rhcmkgd2EgdWdvIHdhIEhUTUwga2F0aWthIHVrdXphamkgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnU2V0aSB1cmVmdSB3YSBjaGFndW8tbXNpbmdpIChrYXRpa2EgcGlrc2VsaSkgeWEgbmRhbmkgeWEgbXN0YXJpIHdhIHVnbyB3YSBIVE1MIGthdGlrYSB1a3V6YWppIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEgbXRlamEuKG5hIHVrdXphamkgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYXlhIHVtbWEgKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICdTZXRpIHVwZW8gd2EganV1IHdhIHVyZWZ1IChrYXRpa2EgcGlrc2VsaSkgeWEgbmRhbmkgeWEgbXN0YXJpIHdhIHVnbyB3YSBIVE1MIGthdGlrYSB1a3V6YWppIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJ1NldGkgdXBlbyB3YSBqdXUgd2EgdXJlZnUgKGthdGlrYSBwaWtzZWxpKSB5YSBuZGFuaSB5YSBtc3Rhcmkgd2EgdWdvIHdhIEhUTUwga2F0aWthIHVrdXphamkgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSBtdGVqYS4oYW5kIHVrdXphamkgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSB1bW1hKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICdJbmFvbnllc2hhIGtpdHVmZSBjaGEgXCdcJyBJbmdpemEga2l1bmdhbmlzaGkgY2hhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmFcJ1wnIGthdGlrYSB3YWthbGEgZmlmaXphIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga3dhIG1ha2FsYSB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIHVtbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIC8gIkluc2VydCBGdWxsIEZBUSAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJ0luYW9ueWVzaGEga2l0dWZlIGNoYSBcJ1wnSW5naXphIG1hdGluaSB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhICYga2l1bmdhbmlzaGlcJ1wnIC8gXCdcJ2luZ2l6YSBtYXdhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeW90ZSAma2l1bmdhbmlzaGlcJ1wnIGthdGlrYSB3YWthbGEgZmlmaXphIHdhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga3dhIG1ha2FsYSB5YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIHVtbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCIgLyAiSW5zZXJ0IEZ1bGwgRkFRIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwuJ30gPQogICAgICAgICdJbmFvbnllc2hhIGtpdHVmZSBjaGEgXCdcJyBJbmdpemEgbWF0aW5pIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmFcJ1wnIC8gXCdcJ0luZ2l6YSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlvdGVcJ1wnICBrYXRpa2Egd2FrYWxhICBmaWZpemEgd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBGQVEgQXJ0aWNsZSB3aXRoIEhUTUwuJ30gPSAnT255ZXNoYSBtYWthbGEgeWEgbWFzd2FsaSBuYSBIVE1MJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIHBhdGggeWVzL25vLid9ID0gJ09ueWVzaGEgbmppYSB5YSBtYXN3YWxpIG5kaW8vaGFwYW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGl0ZW1zIG9mIHN1YmNhdGVnb3JpZXMuJ30gPSAnSW5hb255ZXNoYSB2aXBlbmdlbGUgdnlhIGthdGVnb3JpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdJbmFvbnllc2hhIHZpcGVuZ2VsZSB2aWxpdnlvYmFkaWxpc2h3YSBrYXRpa2Ega2lvbGVzdXJhIGtpbGljaG9mYWZhbnVsaXdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY3JlYXRlZCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnSW5hb255ZXNoYSB2aXBlbmdlbGUgdmlsaXZ5b3RlbmdlbmV6d2EgbXdpc2hvbmkga2F0aWthIGtpb2xlc3VyYSAga2lsaWNob2ZhZmFudWxpd2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdG9wIDEwIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICdJbmFvbnllc2hhIHZpcGVuZ2VsZSAgMTAgIGJvcmEga2F0aWthIGtpb2xlc3VyYSBraWxpY2hvZmFmYW51bGl3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ0luYW9ueWVzaGEga3VwaWdhIGt1cmEga2F0aWthIGtpb2xlc3VyYSBraWxpY2hvZmFmYW51bGl3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFvbnllc2hhIGtpdW5nYW5pc2hpIGthdGlrYSBvcm9kaGEgYW1iYWNobyBraW5hcnVodXN1IGt1dW5nYW5pc2h3YSBrd2EgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBuYSBraXBlbmdlbGUga2luZ2luZSBrYXRpa2EgbWFuZGhhcmkga3V6d2EgeWEgaGF5byBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIHlhIHdha2FsYSB3YSBraW9sZXN1cmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0byBkZWxldGUgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBraXVuZ2FuaXNoaSBrYXRpa2Egb3JvZGhhIGFtYWJjaG8ga2luYXJ1aHVzdSBrdWZ1dGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrYXRpa2EgbWFuZGhhbmkga3V6d2Ega2F0aWthIHdha2FsYSB3YSBraW9sZXN1cmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBGQVEgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBraXVuZ2FuaXNoaSBrYXRpa2Egb3JvZGhhIGt1ZmlraWEgaGlzdG9yaWEgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrYXRpa2EgbWFuZGhhcmkga3V6d2EgeWEgd2FrYWxhIHdhIGtpb2xlc3VyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYW9ueWVzaGEga3VpbmdhbmlzaGkga2F0aWthIG9yb2RoYSBrdWhhcmlyaSBrYXRpa2EgbWFuZGhhcmkga3V6d2EgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSB5YSB3YWthbGEgd2Ega2lvbGVzdXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBraXVuZ2FuaXNoaSBrYXRpa2Egb3JvZGhhIGNoYSBrdXJ1ZGkgbnl1bWEga2F0aWthIG1hbmRoYXJpIGt1endhIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEgeWEgd2FrYWxhIHdhIGtpb2xlc3VyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgRkFRIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFvbnllc2hhIGtpdW5nYW5pc2hpIGthdGlrYSBvcm9kaGEga3VjaGFwaXNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGthdGlrYSBtYW5kaGFyaSBpbGl5b2t1endhIHlhIHdha2FsYSB3YSBraW9sZXN1cmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9CiAgICAgICAgJ0tpdGFtYnVsaXNoaSBjaGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSwgbWZhbm8gbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSMsS0IjLCBNeUZBUSMuIENoYWd1byBtc2luZ2kgbmkgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWxlIGNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlbGUga2luZ2luZSBjaGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBrd2Ega3V0dW1pYSBraXVuZ2FuaXNoaSBhaW5hIHlhIFwna2F3YWlkYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWxlIGNoYSBtYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlbGUga2luZ2luZSBjaGEgdGlrZXRpIGt3YSBrdXR1bWlhIGtpdW5nYW5pc2hpIGFpbmEgeWEgXCdaYXppTXRvdG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlbGUgY2hhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VsZSBraW5naW5lIGNoYSB0aWtldGkga3dhIGt1dHVtaWEga2l1bmdhbmlzaGkgYWluYSB5YSBcJ2thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VsZSBjaGEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYSBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWxlIGtpbmdpbmUgY2hhIHRpa2V0aSBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nYW5pc2hpIGtpemF6aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ0tpaW5pIGNoYSB0aWtldGkga3dhIElkaGluaSB5YSBtYWthbGEgeWEgbWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJ1NvbW8gbGEgdGlrZXRpIGt3YSBJZGhpbmkgeWEgbWFrYWxhIHlhIG1hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmEuJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6dWtfRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ9Cy0L3Rg9GC0YDRltGI0L3RltC5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ9Cf0YPQsdC70LjRh9C90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICfQl9C+0LLQvWnRiNC90LjQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgTnVtYmVyJ30gPSAnRkFRICDQutGW0LvRjNC60ZbRgdGC0YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJ30gPSAn0J7RgdGC0LDQvdC90Y8g0LfQvNGW0L3QtdC90LAg0YHRgtCw0YLRgtGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcyd9ID0gJ9Ce0YHRgtCw0L3QvdGPINGB0YLQstC+0YDQtdC90LAg0YHRgtCw0YLRgtGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICfQotC+0L8gMTAg0YHRgtCw0YLRgtC10LknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICfQn9GW0LTQutCw0YLQtdCz0L7RgNGW0ZcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICfQndC10LzQsNGUINC+0LHRgNCw0L3QvtGXINC60LDRgtC10LPQvtGA0ZbRlyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwbG9yZXInfSA9ICfQn9GA0L7QstGW0LTQvdC40LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljIChhbGwpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZXJuYWwgKGFnZW50KSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBkYXknfSA9ICfQn9C+0YfQsNGC0L7QuiDQtNC+0LHQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBtb250aCd9ID0gJ9Cf0L7Rh9Cw0YLQvtC6INC80ZbRgdGP0YbRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB5ZWFyJ30gPSAn0J/QvtGH0LDRgtC+0Log0YDQvtC60YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIGRheSd9ID0gJ9Ca0ZbQvdC10YbRjCDQtNC90Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIG1vbnRoJ30gPSAn0JrRltC90LXRhtGMINC80ZbRgdGP0YbRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgeWVhcid9ID0gJ9Ca0ZbQvdC10YbRjCDRgNC+0LrRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFua3MgZm9yIHlvdXIgdm90ZSEnfSA9ICfQlNGP0LrRg9GU0LzQviwg0LfQsCDRgtC1LCDRidC+INC/0YDQvtCz0L7Qu9C+0YHRg9Cy0LDQu9C4ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ9CS0Lgg0LLQttC1INCz0L7Qu9C+0YHRg9Cy0LDQu9C4ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBQcmludCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKFRvcCAxMCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGNhdGVnb3J5IGFkZGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsYW5ndWFnZSB1cGRhdGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmFtZSBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ltcHRvbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb2x1dGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBGQVEgQXJ0aWNsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3Jkcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZhbCd9ID0gJ9Cj0YLQvtGH0L3QuNGC0Ywg0YHQvNGL0YHQuyDQuCDQuNC30LzQtdC90LjRgtGMKEFwcHJvdmFsKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFDYXRlZ29yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIENhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGNhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRlZ29yeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4nfSA9ICfQkdGD0LTQtSDQv9C+0LrQsNC30LDQvdC+LCDRj9C6INC60L7QvNC10L3RgtCw0YAg0YMg0J/RgNC+0LLRltC00L3QuNC60YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBjYXRlZ29yeS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUgYW5kL29yIGlzIHBhcmVudCBvZiBhdCBsZWFzdCBvbmUgb3RoZXIgY2F0ZWdvcnknfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSd9ID0gJ9CR0LDQt9CwINC30L3QsNC90YwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsZGNhcmRzIGFyZSBhbGxvd2VkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZid9ID0gJ9CG0YHRgtC+0YDRltGPJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgSm91cm5hbCBkYXRhIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGxhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBMYW5ndWFnZSAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBMYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbGFuZ3VhZ2U/J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIGxhbmd1YWdlLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBGQVEgYXJ0aWNsZSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgQXJ0aWNsZShzKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgYXJ0aWNsZXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRkFRIGRhdGEgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIChlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjApJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUgKGUuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJldHdlZW4pJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRRnVsbHRleHQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRU2VhcmNoU21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvZmlsZSBTZWxlY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlIHNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIHZvdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHJhdGUgc2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgcmF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyBkYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgcmFuZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvdXQgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3Rlcyd9ID0gJ9CT0L7Qu9C+0YHRltCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSB0aXRsZSB0byBhcnRpY2xlIHN1YmplY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSByZXN0cmljdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIHJlc3RyaWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHJhdGUuLi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkIGJldHdlZW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUUpvdXJuYWwucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHVwZGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRHluYW1pYyBGaWVsZHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0ZBUS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBhcnRpY2xlIGlzIGVtcHR5ISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDU1MgY29sb3IgZm9yIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgY2F0ZWdvcnkgbmFtZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBsYW5ndWFnZSBmb3IgRkFRIGFydGljbGVzIG9uIHNpbmdsZSBsYW5ndWFnZSBtb2RlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG1heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBwcmlvcml0eSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgb2YgdGlja2V0cyBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEFjdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBwdWJsaWMgZnJvbnRlbmQuIFRoZSBBY3Rpb24gcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIHNjcmlwdHMgb2YgdGhlIHN5c3RlbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgaWYgdGhlIEZBUSB0aXRsZSBzaG91bGQgYmUgY29uY2F0ZW5hdGVkIHRvIGFydGljbGUgc3ViamVjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgRkFRIGpvdXJuYWwuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIEZBUSBzZWFyY2ggYXR0cmlidXRlIGZvciBGQVEgc2VhcmNoIHNjcmVlbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbiBhIEZBUSBiYXNlZCBUaWNrZXQuICJGdWxsIEZBUSIgaW5jbHVkZXMgdGV4dCwgYXR0YWNobWVudHMgYW5kIGlubGluZSBpbWFnZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiTGltaXQiIGRlZmluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc3BsYXllZCBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIEZBUSBFeHBsb3Jlci4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgam91cm5hbC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hlcmUgdGhlIFwnSW5zZXJ0IEZBUVwnIGxpbmsgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluaXRpb24gb2YgRkFRIGl0ZW0gZnJlZSB0ZXh0IGZpZWxkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBvdmVydmlldyBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBwcmludCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgc2hvd24gYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNtYWxsIGZvcm1hdCBvdmVydmlldyBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhpcyBGQVEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG11bHRpcGxlIGxhbmd1YWdlcyBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgdm90aW5nIG1lY2hhbmlzbSBvbiBGQVEgbW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSm91cm5hbCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBsaW1pdCBwZXIgcGFnZSBmb3IgRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRLUFyZWEnfSA9ICfQkdCw0LfQsCDQt9C90LDQvdGMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2sgc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ9C90L7QstCwINGB0YLQsNGC0YLRjyDQkdCXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgYXJ0aWNsZXMgbmVlZCBhcHByb3ZhbCBiZWZvcmUgdGhleSBnZXQgcHVibGlzaGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gbGFzdCBjcmVhdGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBGQVEgaXRlbXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgRkFRIGpvdXJuYWwgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGlzIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSBmb3IgdGhlIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZXMgZm9yIHZvdGluZy4gS2V5IG11c3QgYmUgaW4gcGVyY2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIEZBUSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudEZBUVpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQ3VzdG9tZXJGQVFab29tIChhbmQgUHVibGljRkFRWm9vbSkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgTGluayIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsIGZvciBwdWJsaWMgRkFRIEFydGljbGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgIkluc2VydCBGQVEgVGV4dCAmIExpbmsiIC8gIkluc2VydCBGdWxsIEZBUSAmIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQiIC8gIkluc2VydCBGdWxsIEZBUSIgQnV0dG9uIGluIEFnZW50RkFRWm9vbVNtYWxsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRkFRIEFydGljbGUgd2l0aCBIVE1MLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBpdGVtcyBvZiBzdWJjYXRlZ29yaWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGxhc3QgY2hhbmdlIGl0ZW1zIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRvcCAxMCBpdGVtcyBpbiBkZWZpbmVkIGludGVyZmFjZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdm90aW5nIGluIGRlZmluZWQgaW50ZXJmYWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHN1YmplY3QgZm9yIGFwcHJvdmFsIG9mIEZBUSBhcnRpY2xlLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfQ05fRkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBRkFRCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCd9ID0gJ+WGhemDqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwdWJsaWMnfSA9ICflhazlvIAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXh0ZXJuYWwnfSA9ICflpJbpg6gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIE51bWJlcid9ID0gJ0ZBUee8luWPtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnfSA9ICfmnIDov5Hkv67mlLnnmoRGQVHmlofnq6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJ30gPSAn5pyA6L+R5Yib5bu655qERkFR5paH56ugJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvcCAxMCBGQVEgYXJ0aWNsZXMnfSA9ICfmnIDluLjnlKjnmoTmlofnq6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcnkgb2YnfSA9ICflrZDnsbvliKvkuo4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZWxlY3RlZCEnfSA9ICfmsqHmnInpgInmi6nmipXnpaghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGxvcmVyJ30gPSAn5rWP6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyAoYWxsKSd9ID0gJ+WFrOW8gCjlhoXlpJYpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V4dGVybmFsIChjdXN0b21lciknfSA9ICflpJbpg6go55So5oi3KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlcm5hbCAoYWdlbnQpJ30gPSAn5YaF6YOoKOacjeWKoeS6uuWRmCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgZGF5J30gPSAn5byA5aeL5pel5pyfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG1vbnRoJ30gPSAn5byA5aeL5pyI5Lu9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IHllYXInfSA9ICflvIDlp4vlubTku70nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIGRheSd9ID0gJ+e7k+adn+aXpeacnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgbW9udGgnfSA9ICflvIDlp4vmnIjku70nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHllYXInfSA9ICfnu5PmnZ/lubTku70nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmtzIGZvciB5b3VyIHZvdGUhJ30gPSAn5oSf6LCi5oKo55qE5oqV56WoISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkISd9ID0gJ+aCqOW3sue7j+aKleelqCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgUHJpbnQnfSA9ICdGQVHmlofnq6DmiZPljbAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGVzIChUb3AgMTApJ30gPSAnRkFR5paH56ugKOWJjTEw5ZCNKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSd9ID0gJ0ZBUeaWh+eroCjmlrDliJvlu7rnmoQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlcyAocmVjZW50bHkgY2hhbmdlZCknfSA9ICdGQVHmlofnq6Ao5pyA6L+R5L+u5pS555qEKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgY2F0ZWdvcnkgdXBkYXRlZCEnfSA9ICdGQVHnsbvliKvlt7Lmm7TmlrAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBjYXRlZ29yeSBhZGRlZCEnfSA9ICdGQVHnsbvliKvlt7Lmt7vliqAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0ZWdvcnkgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ+W/hemcgOi+k+WFpeexu+WIq+WQjeensCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyd9ID0gJ+exu+WIq+W3suWtmOWcqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgYWRkZWQhJ30gPSAnRkFR6K+t6KiA5bey5re75YqgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGFuZ3VhZ2UgdXBkYXRlZCEnfSA9ICdGQVHor63oqIDlt7Lmm7TmlrAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuYW1lIGlzIHJlcXVpcmVkISd9ID0gJ+WQjeensOaYr+W/hemcgOeahCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnfSA9ICfor6Xor63oqIDlt7Lnu4/lrZjlnKghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5bXB0b20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU29sdXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgRkFRIEFydGljbGUnfSA9ICfmt7vliqBGQVHmlofnq6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZHMnfSA9ICflhbPplK7lrZcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4nfSA9ICfnsbvliKvmmK/lv4XpnIDnmoQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcHJvdmFsJ30gPSAn5a6h5om5JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUNhdGVnb3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCd9ID0gJ0ZBUeexu+WIq+euoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgY2F0ZWdvcnknfSA9ICfmt7vliqDnsbvliKsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENhdGVnb3J5J30gPSAn5Yig6Zmk57G75YirJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGVnb3J5J30gPSAn5re75Yqg57G75YirJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0ZWdvcnknfSA9ICfnvJbovpHnsbvliKsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBncm91cC4nfSA9ICfor7foh7PlsJHpgInmi6nkuIDkuKrnu4TmnYPpmZAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGdyb3VwcyB0aGF0IGNhbiBhY2Nlc3MgYXJ0aWNsZXMgaW4gdGhpcyBjYXRlZ29yeS4nfSA9ICfog73orr/pl67mraTnsbvliKvmlofnq6DnmoTmnI3liqHkurrlkZjnu4QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsbCBiZSBzaG93biBhcyBjb21tZW50IGluIEV4cGxvcmVyLid9ID0gJ+WwhuS9nOS4uuazqOmHiuWcqOa1j+iniOaXtuaYvuekui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyd9ID0gJ+S9oOehruWumuimgeWIoOmZpOi/meS4quexu+WIq+WQlz8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5J30gPQogICAgICAgICfkvaDkuI3og73liKDpmaTov5nkuKrnsbvliKsuIOivpeexu+WIq+iHs+WwkeWMheWQq+S4gOevh0ZBUeaWh+eroO+8jOaIluiAheiHs+WwkeWMheWQq+S4gOS4quWtkOexu+WIq+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBGQVEgYXJ0aWNsZShzKSd9ID0gJ+S4i+WIl0ZBUeaWh+eroOS9v+eUqOivpeexu+WIqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGNhdGVnb3J5IGlzIHBhcmVudCBvZiB0aGUgZm9sbG93aW5nIHN1YmNhdGVnb3JpZXMnfSA9ICfor6XnsbvliKvmmK/kuIvliJflrZDnsbvliKvnmoTniLbnsbvliKsnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/J30gPSAn5L2g56Gu5a6a6KaB5Yig6Zmk6K+lRkFR5paH56ug5ZCXPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEnfSA9ICdGQVHnn6Xor4blupMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRRXhwbG9yZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBFeHBsb3Jlcid9ID0gJ0ZBUea1j+iniOWZqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWljayBTZWFyY2gnfSA9ICflv6vpgJ/mkJzntKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lsZGNhcmRzIGFyZSBhbGxvd2VkLid9ID0gJ+WFgeiuuOS9v+eUqOmAmumFjeespuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZHZhbmNlZCBTZWFyY2gnfSA9ICfpq5jnuqfmkJzntKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViY2F0ZWdvcmllcyd9ID0gJ+WtkOexu+WIqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZXMnfSA9ICdGQVHmlofnq6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4nfSA9ICfmsqHmnInmib7liLDlrZDnsbvliKsuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YnfSA9ICfljoblj7InOwoKICAgICMgVGVtcGxhdGU6IEFnZW50RkFRSm91cm5hbE92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEZBUSBKb3VybmFsIGRhdGEgZm91bmQuJ30gPSAn5rKh5pyJ5om+5YiwRkFR5pel5b+X5pWw5o2uLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFMYW5ndWFnZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQnfSA9ICdGQVHor63oqIDnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlIHRoaXMgZmVhdHVyZSBpZiB5b3Ugd2FudCB0byB3b3JrIHdpdGggbXVsdGlwbGUgbGFuZ3VnZXMuJ30gPQogICAgICAgICflpoLmnpzpnIDopoHmlK/mjIHlpJrnp43or63oqIDvvIzor7fkvb/nlKjmraTlip/og70uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBsYW5ndWFnZSd9ID0gJ+a3u+WKoOivreiogCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgTGFuZ3VhZ2UgJXMnfSA9ICfliKDpmaTor63oqIAgJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIExhbmd1YWdlJ30gPSAn5re75Yqg6K+t6KiAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgTGFuZ3VhZ2UnfSA9ICfnvJbovpHor63oqIAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyd9ID0gJ+S9oOehruWumuimgeWIoOmZpOi/meS4quivreiogOWQlz8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgbGFuZ3VhZ2UuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlISd9ID0KICAgICAgICAn5L2g5LiN6IO95Yig6Zmk6L+Z5Liq6K+t6KiALiDoh7PlsJHmnInkuIDnr4dGQVHmlofnq6Dkvb/nlKjor6Xor63oqIAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpJ30gPSAn5LiL5YiXRkFR5paH56ug5L2/55So6K+l6K+t6KiAJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn5LiK5LiL5paH6K6+572uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBhcnRpY2xlcyBwZXIgcGFnZSd9ID0gJ+avj+mhteaYvuekuueahEZBUeaWh+eroOS4quaVsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgZGF0YSBmb3VuZC4nfSA9ICfmsqHmnInmib7liLBGQVHmlbDmja4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnS2V5d29yZCd9ID0gJ+WFs+mUruWtlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIChlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjApJ30gPSAn5oqV56Wo5qyh5pWwICjkvovlpoLvvIw9IDEwIOaIliA+PSA2MCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0ZSAoZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUpJ30gPSAn6K+E5YiGICjkvovlpoLvvIw9IDEwJSDmiJYgPj0gNzUlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHByb3ZlZCd9ID0gJ+mAmui/h+WuoeaJuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfkuIrmrKHkv67mlLnkuronOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJlZm9yZS9hZnRlciknfSA9ICdGQVHmlofnq6DliJvlu7rml7bpl7Qo55u45a+5KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSAoYmV0d2VlbiknfSA9ICdGQVHmlofnq6DliJvlu7rml7bpl7Qo57ud5a+5KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSAoYmVmb3JlL2FmdGVyKSd9ID0gJ0ZBUeaWh+eroOWIm+W7uuaXtumXtCjnm7jlr7kpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZXR3ZWVuKSd9ID0gJ0ZBUeaWh+eroOWIm+W7uuaXtumXtCjnu53lr7kpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVFGdWxsdGV4dCd9ID0gJ0ZBUeWFqOaWhyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFTZWFyY2hTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIFNlYXJjaCd9ID0gJ0ZBUeaQnOe0oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9maWxlIFNlbGVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlJ30gPSAn5oqV56WoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGUgc2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWMgdm90ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGUnfSA9ICfor4TliIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcmF0ZSBzZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpYyByYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lJ30gPSAnRkFR5paH56ug5Yib5bu65pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmljIGRhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSByYW5nZSd9ID0gJ+aXpeacn+iMg+WbtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgQXJ0aWNsZSBDaGFuZ2UgVGltZSd9ID0gJ0ZBUeaWh+eroOS/ruaUueaXtumXtCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRGQVFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgSW5mb3JtYXRpb24nfSA9ICdGQVHor6bnu4bkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmF0aW5nJ30gPSAn5oqV56WoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J291dCBvZiA1J30gPSAnKDXliIbliLYpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGVzJ30gPSAn5oqV56Wo5qyh5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHZvdGVzIGZvdW5kISd9ID0gJ+ayoeacieaJvuWIsOaKleelqCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLid9ID0gJ+ayoeacieaJvuWIsOaKleelqCEg6L+Z5bCG5piv6K+lIEZBUSDmlofnq6DnmoTnrKzkuIDkuKrmipXnpaguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICfkuIvovb3pmYTku7YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG93IGhlbHBmdWwgd2FzIHRoaXMgYXJ0aWNsZT8gUGxlYXNlIGdpdmUgdXMgeW91ciByYXRpbmcgYW5kIGhlbHAgdG8gaW1wcm92ZSB0aGUgRkFRIERhdGFiYXNlLiBUaGFuayBZb3UhJ30gPQogICAgICAgICfmraTmlofmoaPlr7nmgqjmnInluK7liqnlkJfvvJ/or7fnu5nlh7rmgqjnmoTor4Tku7fvvIzosKLosKLvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGhlbHBmdWwnfSA9ICfmsqHmnInluK7liqknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmVyeSBoZWxwZnVsJ30gPSAn5b6I5pyJ5biu5YqpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudEZBUVpvb21TbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEZBUSB0aXRsZSB0byBhcnRpY2xlIHN1YmplY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0J30gPSAn5o+S5YWlRkFR5paH5pysJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc2VydCBGdWxsIEZBUSd9ID0gJ+aPkuWFpUZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRkFRIExpbmsnfSA9ICfmj5LlhaVGQVHpk77mjqUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zZXJ0IEZBUSBUZXh0ICYgTGluayd9ID0gJ+aPkuWFpUZBUeato+aWh+WSjOmTvuaOpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgRnVsbCBGQVEgJiBMaW5rJ30gPSAn5o+S5YWlRkFR5ZKM6ZO+5o6lJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUUV4cGxvcmVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBGQVEgYXJ0aWNsZXMgZm91bmQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbHRleHQgc2VhcmNoIGluIEZBUSBhcnRpY2xlcyAoZS4gZy4gIkpvaG4qbiIgb3IgIldpbGwqIiknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSByZXN0cmljdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYXRlIHJlc3RyaWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyB3aXRoIHJhdGUuLi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkIGJldHdlZW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoLVByb2ZpbGUgYXMgVGVtcGxhdGU/J30gPSAn5pCc57Si6YWN572u5L2c5Li65qih5p2/77yfJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lckZBUVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgTnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyd9ID0gJ+WFrOW8gCc7CgogICAgIyBUZW1wbGF0ZTogUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgdG8gRkFRIEV4cGxvcmVyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUUpvdXJuYWwucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUSBKb3VybmFsJ30gPSAnRkFR5pel5b+XJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudEZBUVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHVwZGF0ZSd9ID0gJ+S4iuasoeabtOaWsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgRHluYW1pYyBGaWVsZHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50RkFRU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBSZXN1bHQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0ZBUS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBhcnRpY2xlIGlzIGVtcHR5ISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgZmlsdGVyIGZvciBIVE1MIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEZpcnN0IHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2liaWxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDU1MgY29sb3IgZm9yIHRoZSB2b3RpbmcgcmVzdWx0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSBUaW1lIFRvIExlYXZlIGZvciBGQVEgaXRlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGVnb3J5IE1hbmFnZW1lbnQnfSA9ICfnrqHnkIbnsbvliKsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZvdGluZyByZXN1bHQuJ30gPSAn5Lul5Y2B5YiG5Yi25pi+56S66K+E5YiG57uT5p6cLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGNhdGVnb3J5IG5hbWUuJ30gPSAn6buY6K6k55qE55uu5b2V5ZCNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxhbmd1YWdlIGZvciBGQVEgYXJ0aWNsZXMgb24gc2luZ2xlIGxhbmd1YWdlIG1vZGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHByaW9yaXR5IG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPQogICAgICAgICdGQVEg5paH56ug5om55YeG6K+35rGC55qEIFRpY2tldCDnmoTkvJjlhYjnuqcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdGUgZm9yIEZBUSBlbnRyeS4nfSA9ICfpu5jorqTnmoQgRkFRIOe7n+iuoeadoeebri4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0ZSBvZiB0aWNrZXRzIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ0ZBUSDmlofnq6Dmibnlh4bor7fmsYLnmoQgVGlja2V0IOeahOm7mOiupOeKtuaAgS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIG9mIHRpY2tldHMgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUgZm9yIHRoZSBBY3Rpb24gcGFyYW1ldGVyIGZvciB0aGUgcHVibGljIGZyb250ZW5kLiBUaGUgQWN0aW9uIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBzY3JpcHRzIG9mIHRoZSBzeXN0ZW0uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGlmIHRoZSBGQVEgdGl0bGUgc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBhcnRpY2xlIHN1YmplY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIEZBUSBqb3VybmFsLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBGQVEgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBhdHRyaWJ1dGUgZm9yIEZBUSBzb3J0aW5nIGluIGEgRkFRIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIGF0dHJpYnV0ZSBmb3IgRkFRIHNvcnRpbmcgaW4gYSBGQVEgc2VhcmNoIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiBhIEZBUSBzZWFyY2ggb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgYXR0cmlidXRlIGZvciBGQVEgc29ydGluZyBpbiB0aGUgRkFRIEV4cGxvcmVyIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IEZBUSBvcmRlciBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBGQVEgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgRkFRIG9yZGVyIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4gVXA6IG9sZGVzdCBvbiB0b3AuIERvd246IGxhdGVzdCBvbiB0b3AuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzaG93biBGQVEgc2VhcmNoIGF0dHJpYnV0ZSBmb3IgRkFRIHNlYXJjaCBzY3JlZW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaW5mb3JtYXRpb24gdG8gYmUgaW5zZXJ0ZWQgaW4gYSBGQVEgYmFzZWQgVGlja2V0LiAiRnVsbCBGQVEiIGluY2x1ZGVzIHRleHQsIGF0dGFjaG1lbnRzIGFuZCBpbmxpbmUgaW1hZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZC4gIkxpbWl0IiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBGQVEgRXhwbG9yZXIuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIGpvdXJuYWwuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgRkFRIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXJlIHRoZSBcJ0luc2VydCBGQVFcJyBsaW5rIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbml0aW9uIG9mIEZBUSBpdGVtIGZyZWUgdGV4dCBmaWVsZC4nfSA9ICflrprkuYkgRkFRIOmhueebrueahOS4jeWPl+mZkOaWh+Wtl+Wtl+autS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgRkFRJ30gPSAn5Yig6ZmkRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIG92ZXJ2aWV3IHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgcHJpbnQgc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCBzaG93biBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgc2VhcmNoIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHNob3duIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSBzbWFsbCBmb3JtYXQgb3ZlcnZpZXcgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBGQVEgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIEZBUSB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgRkFRIHpvb20gc2NyZWVuIG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoaXMgRkFRJ30gPSAn57yW6L6RRkFRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBtdWx0aXBsZSBsYW5ndWFnZXMgb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIHZvdGluZyBtZWNoYW5pc20gb24gRkFRIG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIEpvdXJuYWwgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgbGltaXQgcGVyIHBhZ2UgZm9yIEZBUSBKb3VybmFsIE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGxpbWl0IHBlciBwYWdlIGZvciBGQVEgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGQVEgc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZBUS1BcmVhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpZWxkNCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWVsZDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyb3VwIGZvciB0aGUgYXBwcm92YWwgb2YgRkFRIGFydGljbGVzLid9ID0gJ+aJueWHhiBGQVEg5paH56ug6K+35rGC55qE576k57uELic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mIHRoaXMgRkFRJ30gPSAnRkFR5paH56ug5Y6G5Y+y5L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgaW50ZXJuYWwgZmllbGRzIG9uIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSB0aGUgbmFtZSBvZiBlYWNoIGZpZWxkIGluIGEgRkFRIGJhc2VkIFRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJmYWNlcyB3aGVyZSB0aGUgcXVpY2sgc2VhcmNoIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSm91cm5hbCd9ID0gJ+aXpeW/lyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYW5ndWFnZSBNYW5hZ2VtZW50J30gPSAn566h55CG6K+t6KiAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhpcyBGQVEgaXRlbSd9ID0gJ+mTvuaOpeWvueixoeiHs0ZBUSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIHN0YXRlIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBzdGF0ZSB0eXBlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2Ygc3RhdGUgdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgRkFRIEV4cGxvcmVyIHJlc3VsdCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciByZXN1bHQgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgcmVzdWx0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBqb3VybmFsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgRkFRIGFydGljbGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBFeHBsb3JlciBpbiB0aGUgcHVibGljIGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgb2YgdGhlIHRpdGxlcyBpbiBhIEZBUSBhcnRpY2xlIHRvIGJlIHNob3duIGluIHRoZSBGQVEgU2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIFNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gc2l6ZSBvZiB0aGUgdGl0bGVzIGluIGEgRkFRIGFydGljbGUgdG8gYmUgc2hvd24gaW4gdGhlIEZBUSBTZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBzaXplIG9mIHRoZSB0aXRsZXMgaW4gYSBGQVEgYXJ0aWNsZSB0byBiZSBzaG93biBpbiB0aGUgRkFRIGpvdXJuYWwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgSFRNTCBPcGVuU2VhcmNoIHByb2ZpbGUgZm9yIHNob3J0IEZBUSBzZWFyY2ggaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIEhUTUwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCBmYXEgc2VhcmNoLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBGQVEgQXJ0aWNsZSd9ID0gJ+WIm+W7ukZBUeaWh+eroCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRkFRIGFydGljbGVzIG5lZWQgYXBwcm92YWwgYmVmb3JlIHRoZXkgZ2V0IHB1Ymxpc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEZBUSBFeHBsb3JlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBGQVEgRXhwbG9yZXIgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIEZBUSBhcnRpY2xlcyB0byBiZSBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlIG9mIGEgc2VhcmNoIHJlc3VsdCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBGQVEgYXJ0aWNsZXMgdG8gYmUgZGlzcGxheWVkIG9uIGVhY2ggcGFnZSBvZiBhIHNlYXJjaCByZXN1bHQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIHNob3duIGl0ZW1zIGluIGxhc3QgY2hhbmdlcy4nfSA9ICfmmL7npLrmnIDov5Hmm7TmlLnpobnnm67nmoTmlbDph48uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBzaG93biBpdGVtcyBpbiBsYXN0IGNyZWF0ZWQuJ30gPSAn5pi+56S65pyA5paw5Yib5bu66aG555uu55qE5pWw6YePLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOdW1iZXIgb2Ygc2hvd24gaXRlbXMgaW4gdGhlIHRvcCAxMCBmZWF0dXJlLid9ID0gJ+aYvuekuueCueWHu+mHj+WJjeWNgeS9jemhueebrueahOaVsOmHjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgRkFRIGl0ZW1zIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIEZBUSBqb3VybmFsIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIEZBUSBpdGVtcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBGQVEgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyBGQVEnfSA9ICfmiZPljbBGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWUgZm9yIHRoZSBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZXMuJ30gPSAn5om55YeGIEZBUSDmlofnq6Dor7fmsYLnmoTpmJ/liJcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhdGVzIGZvciB2b3RpbmcuIEtleSBtdXN0IGJlIGluIHBlcmNlbnQuJ30gPSAn5aW96K+E546HLCDplK7lgLzlv4XpobvlnKjnmb7liIbmr5Tku6XlhoUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBGQVEnfSA9ICfmkJzntKJGQVEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRGQVFab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEN1c3RvbWVyRkFRWm9vbSAoYW5kIFB1YmxpY0ZBUVpvb20pLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50RkFRWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBDdXN0b21lckZBUVpvb20gKGFuZCBQdWJsaWNGQVFab29tKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIExpbmsiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbCBmb3IgcHVibGljIEZBUSBBcnRpY2xlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIiAvICJJbnNlcnQgRnVsbCBGQVEgJiBMaW5rIiBCdXR0b24gaW4gQWdlbnRGQVFab29tU21hbGwgZm9yIHB1YmxpYyBGQVEgQXJ0aWNsZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAiSW5zZXJ0IEZBUSBUZXh0IiAvICJJbnNlcnQgRnVsbCBGQVEiIEJ1dHRvbiBpbiBBZ2VudEZBUVpvb21TbWFsbC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBBcnRpY2xlIHdpdGggSFRNTC4nfSA9ICfku6UgSFRNTCDmoLzlvI/mmL7npLogRkFRIOaWh+eroCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEZBUSBwYXRoIHllcy9uby4nfSA9ICfmmK8v5ZCm5pi+56S6IEZBUSDot6/lvoQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgaXRlbXMgb2Ygc3ViY2F0ZWdvcmllcy4nfSA9ICfmmL7npLrlrZDnm67lvZXnmoTmlbDph48uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbGFzdCBjaGFuZ2UgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ+WcqOS7i+mdouS4iuaYvuekuuacgOi/keabtOaUueeahOmhueebri4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBsYXN0IGNyZWF0ZWQgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ+WcqOS7i+mdouS4iuaYvuekuuacgOaWsOWIm+W7uueahOmhueebri4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0b3AgMTAgaXRlbXMgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ+WcqOS7i+mdouS4iuaYvuekuueCueWHu+mHj+WJjeWNgeS9jS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2b3RpbmcgaW4gZGVmaW5lZCBpbnRlcmZhY2VzLid9ID0gJ+WumuS5ieaYvuekuuivhOWIhueahOS7i+mdoi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBGQVEgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggRkFRIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIEZBUSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBGQVEgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgRkFRIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIEZBUSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIEZBUSwgZS5nLiBGQVEjLCBLQiMsIE15RkFRIy4gVGhlIGRlZmF1bHQgaXMgRkFRIy4nfSA9CiAgICAgICAgJ0ZBUSDnmoTmoIfor4bnrKYsIOS+i+WmgiAo5bi46KeB6Zeu6aKYKUZBUSMsICjnn6Xor4blupMpS0IjLCDpu5jorqTkuLogRkFRIyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdGQVFcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnRkFRXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0ZBUVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdGQVEg5paH56ug5om55YeG6K+35rGC55qEIFRpY2tldCDlhoXlrrkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBzdWJqZWN0IGZvciBhcHByb3ZhbCBvZiBGQVEgYXJ0aWNsZS4nfSA9ICdGQVEg5paH56ug5om55YeG6K+35rGC55qEIFRpY2tldCDkuLvpopguJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUFkZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJGQVE6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKSB8fCAnJzsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiAnRkFRJywKICAgICAgICBGaWVsZEZpbHRlciA9PiAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9IHx8IHt9LAogICAgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSd30gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgcncgcGVybWlzc2lvbiEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgcGFyYW1ldGVycwogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRQYXJhbU5hbWUgKAogICAgICAgIHF3KFRpdGxlIENhdGVnb3J5SUQgU3RhdGVJRCBMYW5ndWFnZUlEIFZhbGlkSUQgS2V5d29yZHMgQXBwcm92ZWQgRmllbGQxIEZpZWxkMiBGaWVsZDMgRmllbGQ0IEZpZWxkNSBGaWVsZDYpCiAgICAgICAgKQogICAgewogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgb2JqZWN0CiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICMgZ2V0IGNhdGVnb3JpZXMgKHdpdGggY2F0ZWdvcnkgbG9uZyBuYW1lcykgd2hlcmUgdXNlciBoYXMgcmlnaHRzCiAgICBteSAkVXNlckNhdGVnb3JpZXNMb25nTmFtZXMgPSAkRkFRT2JqZWN0LT5HZXRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIHRoYXQgdGhlcmUgYXJlIGNhdGVnb3JpZXMgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXIKICAgIGlmICgKICAgICAgICAhJFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzCiAgICAgICAgfHwgcmVmICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcyBuZSAnSEFTSCcKICAgICAgICB8fCAhJXskVXNlckNhdGVnb3JpZXNMb25nTmFtZXN9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gY2F0ZWdvcmllcyBmb3VuZCB3aGVyZSB1c2VyIGhhcyByZWFkL3dyaXRlIHBlcm1pc3Npb25zIScsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbi4nLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCB2YWx1ZXMgZm9ybSBodHRwIHJlcXVlc3QKICAgIG15ICVEeW5hbWljRmllbGRWYWx1ZXM7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBiYWNrZW5kIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvcm0gdGhlIHdlYiByZXF1ZXN0CiAgICAgICAgJER5bmFtaWNGaWVsZFZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHVwbG9hZCBjYWNoZSBvYmplY3QKICAgIG15ICRVcGxvYWRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CgogICAgIyBnZXQgZm9ybSBpZAogICAgbXkgJEZvcm1JRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtSUQnICk7CgogICAgIyBjcmVhdGUgZm9ybSBpZAogICAgaWYgKCAhJEZvcm1JRCApIHsKICAgICAgICAkRm9ybUlEID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURDcmVhdGUoKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFF1ZXVlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBzZXQgY29udGVudCB0eXBlCiAgICBteSAkQ29udGVudFR5cGUgPSAndGV4dC9wbGFpbic7CiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICYmICRDb25maWdPYmplY3QtPkdldCgnRkFROjpJdGVtOjpIVE1MJykgKSB7CiAgICAgICAgJENvbnRlbnRUeXBlID0gJ3RleHQvaHRtbCc7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzaG93IHRoZSBGQVEgYWRkIHNjcmVlbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAhJFNlbGYtPntTdWJhY3Rpb259ICkgewoKICAgICAgICAjIGNyZWF0ZSBIVE1MIHN0cmluZ3MgZm9yIGFsbCBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICVEeW5hbWljRmllbGRIVE1MOwoKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIGdldCBmaWVsZCBIVE1MCiAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkUmVuZGVyKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBNYW5kYXRvcnkgPT4KICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID09IDIsCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFwcHJvdmFsUmVxdWlyZWQnKSApIHsKCiAgICAgICAgICAgICMgZ2V0IEFwcHJvdmFsIHF1ZXVlIG5hbWUKICAgICAgICAgICAgbXkgJEFwcHJvdmFsUXVldWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QXBwcm92YWxRdWV1ZScpIHx8ICcnOwoKICAgICAgICAgICAgIyBjaGVjayBpZiBBcHByb3ZhbCBxdWV1ZSBleGlzdHMKICAgICAgICAgICAgbXkgJEFwcHJvdmFsUXVldWVJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoCiAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkQXBwcm92YWxRdWV1ZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBub3RpZmljYXRpb24gaWYgQXBwcm92YWwgcXVldWUgZG9lcyBub3QgZXhpc3RzCiAgICAgICAgICAgIGlmICggISRBcHByb3ZhbFF1ZXVlSUQgKSB7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICJGQVEgQXBwcm92YWwgaXMgZW5hYmxlZCBidXQgcXVldWUgJyRBcHByb3ZhbFF1ZXVlJyBkb2VzIG5vdCBleGlzdHMiLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgID0+ICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAgICAgLiAnQWN0aW9uPUFkbWluU3lzQ29uZmlnO1N1YmFjdGlvbj1FZGl0OycKICAgICAgICAgICAgICAgICAgICAgICAgLiAnU3lzQ29uZmlnU3ViR3JvdXA9Q29yZSUzQSUzQUFwcHJvdmFsO1N5c0NvbmZpZ0dyb3VwPUZBUScsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEhUTUwgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgID0+ICRGb3JtSUQsCiAgICAgICAgICAgIFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzID0+ICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcywKICAgICAgICAgICAgRHluYW1pY0ZpZWxkSFRNTCAgICAgICAgPT4gXCVEeW5hbWljRmllbGRIVE1MLAoKICAgICAgICAgICAgIyBsYXN0IHZpZXdlZCBjYXRlZ29yeSBmcm9tIHNlc3Npb24gKHdyaXR0ZW4gYnkgRkFRIGV4cGxvcmVyKQogICAgICAgICAgICBDYXRlZ29yeUlEICA9PiAkU2VsZi0+e0xhc3RWaWV3ZWRDYXRlZ29yeX0sCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICRDb250ZW50VHlwZSwKICAgICAgICApOwoKICAgICAgICAjIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2F2ZSB0aGUgRkFRCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2F2ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGNoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMKICAgICAgICBteSAlRXJyb3I7CiAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFRpdGxlIENhdGVnb3J5SUQpKSB7CgogICAgICAgICAgICAjIGlmIHJlcXVpcmVkIGZpZWxkIGlzIG5vdCBnaXZlbiwgYWRkIHNlcnZlciBlcnJvciBjbGFzcwogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7ICRQYXJhbU5hbWUgLiAnU2VydmVyRXJyb3InIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIGFuIGF0dGFjaG1lbnQgbXVzdCBiZSBkZWxldGVkCiAgICAgICAgbXkgQEF0dGFjaG1lbnRJRHMgPSBtYXAgewogICAgICAgICAgICBteSAoJElEKSA9ICRfID1+IG17IFxBIEF0dGFjaG1lbnREZWxldGUgKFxkKykgXHogfXhtczsKICAgICAgICAgICAgJElEID8gJElEIDogKCk7CiAgICAgICAgfSAkUGFyYW1PYmplY3QtPkdldFBhcmFtTmFtZXMoKTsKCiAgICAgICAgQ09VTlQ6CiAgICAgICAgZm9yIG15ICRDb3VudCAoIHJldmVyc2Ugc29ydCBAQXR0YWNobWVudElEcyApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIGRlbGV0ZSBidXR0b24gd2FzIHByZXNzZWQgZm9yIHRoaXMgYXR0YWNobWVudAogICAgICAgICAgICBteSAkRGVsZXRlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIkF0dGFjaG1lbnREZWxldGUkQ291bnQiICk7CgogICAgICAgICAgICAjIGNoZWNrIG5leHQgYXR0YWNobWVudCBpZiBpdCB3YXMgbm90IHByZXNzZWQKICAgICAgICAgICAgbmV4dCBDT1VOVCBpZiAhJERlbGV0ZTsKCiAgICAgICAgICAgICMgcmVtZW1iZXIgdGhhdCB3ZSBuZWVkIHRvIHNob3cgdGhlIHBhZ2UgYWdhaW4KICAgICAgICAgICAgJEVycm9ye0F0dGFjaG1lbnR9ID0gMTsKCiAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBhdHRhY2htZW50IGZyb20gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZUZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJEZvcm1JRCwKICAgICAgICAgICAgICAgIEZpbGVJRCA9PiAkQ291bnQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIHdhcyBhbiBhdHRhY2htZW50IHVwbG9hZAogICAgICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0F0dGFjaG1lbnRVcGxvYWQnICkgKSB7CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgd2UgbmVlZCB0byBzaG93IHRoZSBwYWdlIGFnYWluCiAgICAgICAgICAgICRFcnJvcntBdHRhY2htZW50fSA9IDE7CgogICAgICAgICAgICAjIGdldCB0aGUgdXBsb2FkZWQgYXR0YWNobWVudAogICAgICAgICAgICBteSAlVXBsb2FkU3R1ZmYgPSAkUGFyYW1PYmplY3QtPkdldFVwbG9hZEFsbCgKICAgICAgICAgICAgICAgIFBhcmFtICA9PiAnRmlsZVVwbG9hZCcsCiAgICAgICAgICAgICAgICBTb3VyY2UgPT4gJ3N0cmluZycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50IHRvIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRGb3JtSUQsCiAgICAgICAgICAgICAgICAlVXBsb2FkU3R1ZmYsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBIVE1MIHN0cmluZ3MgZm9yIGFsbCBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICVEeW5hbWljRmllbGRIVE1MOwoKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICBteSAkVmFsaWRhdGlvblJlc3VsdDsKCiAgICAgICAgICAgICMgZG8gbm90IHZhbGlkYXRlIG9uIGF0dGFjaG1lbnQgdXBsb2FkCiAgICAgICAgICAgIGlmICggISRFcnJvcntBdHRhY2htZW50fSApIHsKCiAgICAgICAgICAgICAgICAkVmFsaWRhdGlvblJlc3VsdCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZVZhbGlkYXRlKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFZhbGlkYXRpb25SZXN1bHQpICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBwZXJmb3JtIHZhbGlkYXRpb24gb24gZmllbGQgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSEiLAogICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcHJvcGFnYXRlIHZhbGlkYXRpb24gZXJyb3IgdG8gdGhlIEVycm9yIHZhcmlhYmxlIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSBmcm9udGVuZAogICAgICAgICAgICAgICAgaWYgKCAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJyBTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGZpZWxkIEhUTUwKICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0KICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE1hbmRhdG9yeSA9PgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgICAgIFNlcnZlckVycm9yICA9PiAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSAgfHwgJycsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFZhbGlkYXRpb25SZXN1bHQtPntFcnJvck1lc3NhZ2V9IHx8ICcnLAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2VuZCBzZXJ2ZXIgZXJyb3IgaWYgYW55IHJlcXVpcmVkIHBhcmFtZXRlciBpcyBtaXNzaW5nCiAgICAgICAgIyBvciBhbiBhdHRhY2htZW50IHdhcyBkZWxldGVkIG9yIHVwbG9hZGVkCiAgICAgICAgaWYgKCVFcnJvcikgewoKICAgICAgICAgICAgIyBpZiB0aGVyZSB3YXMgYW4gYXR0YWNobWVudCBkZWxldGUgb3IgdXBsb2FkCiAgICAgICAgICAgICMgd2UgZG8gbm90IHdhbnQgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9ycyBmb3Igb3RoZXIgZmllbGRzCiAgICAgICAgICAgIGlmICggJEVycm9ye0F0dGFjaG1lbnR9ICkgewogICAgICAgICAgICAgICAgJUVycm9yID0gKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBtZXRhIGRhdGEKICAgICAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJEZvcm1JRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFwcHJvdmFsUmVxdWlyZWQnKSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBBcHByb3ZhbCBxdWV1ZSBuYW1lCiAgICAgICAgICAgICAgICBteSAkQXBwcm92YWxRdWV1ZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbFF1ZXVlJykgfHwgJyc7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBBcHByb3ZhbCBxdWV1ZSBleGlzdHMKICAgICAgICAgICAgICAgIG15ICRBcHByb3ZhbFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKAogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRBcHByb3ZhbFF1ZXVlLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNob3cgbm90aWZpY2F0aW9uIGlmIEFwcHJvdmFsIHF1ZXVlIGRvZXMgbm90IGV4aXN0cwogICAgICAgICAgICAgICAgaWYgKCAhJEFwcHJvdmFsUXVldWVJRCApIHsKICAgICAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBUSBBcHByb3ZhbCBpcyBlbmFibGVkIGJ1dCBxdWV1ZSAnJEFwcHJvdmFsUXVldWUnIGRvZXMgbm90IGV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgPT4gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnQWN0aW9uPUFkbWluU3lzQ29uZmlnO1N1YmFjdGlvbj1FZGl0OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ1N5c0NvbmZpZ1N1Ykdyb3VwPUNvcmUlM0ElM0FBcHByb3ZhbDtTeXNDb25maWdHcm91cD1GQVEnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgICAgICBVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcyA9PiAkVXNlckNhdGVnb3JpZXNMb25nTmFtZXMsCiAgICAgICAgICAgICAgICBBdHRhY2htZW50cyAgICAgICAgICAgICA9PiBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICA9PiAkRm9ybUlELAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkSFRNTCA9PiBcJUR5bmFtaWNGaWVsZEhUTUwsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgID0+ICRDb250ZW50VHlwZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CgogICAgICAgICMgYWRkIHRoZSBuZXcgRkFRIGFydGljbGUKICAgICAgICBteSAkRkFRSUQgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJENvbnRlbnRUeXBlLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGVycm9yIGlmIEZBUSBjb3VsZCBub3QgYmUgYWRkZWQKICAgICAgICBpZiAoICEkRkFRSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIGZyb20gdXBsb2FkIGNhY2hlCiAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc0RhdGEoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkRm9ybUlELAogICAgICAgICk7CgogICAgICAgICMgd3JpdGUgYXR0YWNobWVudHMKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAjIGNoZWNrIGlmIGF0dGFjaG1lbnQgaXMgYW4gaW5saW5lIGF0dGFjaG1lbnQKICAgICAgICAgICAgbXkgJElubGluZSA9IDA7CiAgICAgICAgICAgIGlmICggJEF0dGFjaG1lbnQtPntDb250ZW50SUR9ICkgewoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgdGhhdCBpdCBpcyBpbmxpbmUKICAgICAgICAgICAgICAgICRJbmxpbmUgPSAxOwoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgaWYgdGhpcyBpbmxpbmUgYXR0YWNobWVudCBpcyB1c2VkIGluIGFueSBGQVEgYXJ0aWNsZQogICAgICAgICAgICAgICAgbXkgJENvbnRlbnRJREZvdW5kOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgYWxsIGZpZWxkcyBmb3IgY29udGVudCBpZAogICAgICAgICAgICAgICAgRklFTEQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJE51bWJlciAoIDEgLi4gNiApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgRkFRIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgbXkgJEZpZWxkID0gJEdldFBhcmFteyAnRmllbGQnIC4gJE51bWJlciB9OwoKICAgICAgICAgICAgICAgICAgICAjIHNraXAgZW1wdHkgZmllbGRzCiAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZpZWxkOwoKICAgICAgICAgICAgICAgICAgICAjIHNraXAgZmllbGRzIHRoYXQgZG8gbm90IGNvbnRhaW4gdGhlIGNvbnRlbnQgaWQKICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEIGlmICRGaWVsZCAhfiBteyAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gfXhtczsKCiAgICAgICAgICAgICAgICAgICAgIyBmb3VuZCB0aGUgY29udGVudCBpZAogICAgICAgICAgICAgICAgICAgICRDb250ZW50SURGb3VuZCA9IDE7CgogICAgICAgICAgICAgICAgICAgICMgd2UgZG8gbm90IG5lZWQgdG8gc2VhcmNoIGZ1cnRoZXIKICAgICAgICAgICAgICAgICAgICBsYXN0IEZJRUxEOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgd2UgZG8gbm90IHdhbnQgdG8ga2VlcCB0aGlzIGF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQgd2FzIGRlbGV0ZWQgaW4gdGhlIHJpY2gtdGV4dCBlZGl0b3IKICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJENvbnRlbnRJREZvdW5kOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICRGaWxlSUQgPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50QWRkKAogICAgICAgICAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgSW5saW5lID0+ICRJbmxpbmUsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICBpZiAoICEkRmlsZUlEICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkSW5saW5lOwogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9OwoKICAgICAgICAgICAgIyByZXdyaXRlIHRoZSBVUkxzIG9mIHRoZSBpbmxpbmUgaW1hZ2VzIGZvciB0aGUgdXBsb2FkZWQgcGljdHVyZXMKICAgICAgICAgICAgbXkgJE9LID0gJEZBUU9iamVjdC0+RkFRSW5saW5lQXR0YWNobWVudFVSTFVwZGF0ZSgKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gJEF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgID0+ICRGb3JtSUQsCiAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgIEZpbGVJRCAgICAgPT4gJEZpbGVJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICBpZiAoICEkT0sgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgdXBkYXRlIHRoZSBpbmxpbmUgaW1hZ2UgVVJMcyBmb3IgRkFRIEl0ZW0jICckRkFRSUQnISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURSZW1vdmUoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkRm9ybUlELAogICAgICAgICk7CgogICAgICAgICMgc2V0IGR5bmFtaWMgZmllbGRzCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgIyBzZXQgdGhlIG9iamVjdCBJRCBkZXBlbmRpbmcgb24gdGhlIGZpZWxkIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgbXkgJE9iamVjdElEID0gJEZBUUlEOwoKICAgICAgICAgICAgIyBzZXQgdGhlIHZhbHVlCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJE9iamVjdElELAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVkaXJlY3QgdG8gRkFRIHpvb20KICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICdBY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0nIC4gJEZBUUlEICk7CiAgICB9Cn0KCnN1YiBfTWFza05ldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGxpc3QgdHlwZQogICAgbXkgJFRyZWVWaWV3ID0gMDsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpIGVxICd0cmVlJyApIHsKICAgICAgICAkVHJlZVZpZXcgPSAxOwogICAgfQoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgbXkgJURhdGE7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGJ1aWxkIHZhbGlkIHNlbGVjdGlvbgogICAgJERhdGF7VmFsaWRPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBzZXQgbm8gc2VydmVyIGVycm9yIGNsYXNzIGFzIGRlZmF1bHQKICAgICRQYXJhbXtDYXRlZ29yeUlEU2VydmVyRXJyb3J9IHx8PSAnJzsKCiAgICAjIGJ1aWxkIGNhdGVnb3J5IHNlbGVjdGlvbgogICAgJERhdGF7Q2F0ZWdvcnlPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRQYXJhbXtVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lc30sCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdDYXRlZ29yeUlEJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIENsYXNzICAgICAgICA9PiAnVmFsaWRhdGVfUmVxdWlyZWQgTW9kZXJuaXplICcgLiAkUGFyYW17Q2F0ZWdvcnlJRFNlcnZlckVycm9yfSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBUcmVlVmlldyAgICAgPT4gMSwKICAgICk7CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGdldCB0aGUgbGFuZ3VhZ2UgbGlzdAogICAgbXkgJUxhbmd1YWdlcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UKICAgIG15ICRTZWxlY3RlZExhbmd1YWdlOwogICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2VJRH0gJiYgJExhbmd1YWdlc3sgJFBhcmFte0xhbmd1YWdlSUR9IH0gKSB7CgogICAgICAgICMgZ2V0IGxhbmd1YWdlIGZyb20gZ2l2ZW4gbGFuZ3VhZ2UgaWQKICAgICAgICAkU2VsZWN0ZWRMYW5ndWFnZSA9ICRMYW5ndWFnZXN7ICRQYXJhbXtMYW5ndWFnZUlEfSB9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgdXNlIHRoZSB1c2VyIGxhbmd1YWdlLCBvciBpZiBub3QgZm91bmQgJ2VuJwogICAgICAgICRTZWxlY3RlZExhbmd1YWdlID0gJExheW91dE9iamVjdC0+e1VzZXJMYW5ndWFnZX0gfHwgJ2VuJzsKCiAgICAgICAgIyBnZXQgdXNlciBsYW5ndWFnZSBJRAogICAgICAgIG15ICRTZWxlY3RlZExhbmd1YWdlSUQgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAkU2VsZWN0ZWRMYW5ndWFnZSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIExhbmR1YWdlSUQgZG9lcyBub3QgZXhpc3RzCiAgICAgICAgaWYgKCAhJFNlbGVjdGVkTGFuZ3VhZ2VJRCApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBsb3dlc3QgbGFuZ3VhZ2UgSUQKICAgICAgICAgICAgbXkgQExhbmd1YWdlSURzID0gc29ydCBrZXlzICVMYW5ndWFnZXM7CiAgICAgICAgICAgICRTZWxlY3RlZExhbmd1YWdlSUQgPSAkTGFuZ3VhZ2VJRHNbMF07CgogICAgICAgICAgICAjIHNldCB0aGUgbGFuZ3VhZ2Ugd2l0aCBsb3dlc3QgbGFuZ3VhZ2UgSUQgYXMgc2VsZWN0ZWQgbGFuZ3VhZ2UKICAgICAgICAgICAgJFNlbGVjdGVkTGFuZ3VhZ2UgPSAkTGFuZ3VhZ2VzeyRTZWxlY3RlZExhbmd1YWdlSUR9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIHRoZSBsYW5ndWFnZSBzZWxlY3Rpb24KICAgICREYXRhe0xhbmd1YWdlT3B0aW9ufSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVMYW5ndWFnZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnTGFuZ3VhZ2VJRCcsCiAgICAgICAgU2VsZWN0ZWRWYWx1ZSA9PiAkU2VsZWN0ZWRMYW5ndWFnZSwKICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgdGhlIHN0YXRlcyBsaXN0CiAgICBteSAlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBzZWxlY3RlZCBzdGF0ZQogICAgbXkgJFNlbGVjdGVkU3RhdGU7CiAgICBpZiAoICRQYXJhbXtTdGF0ZUlEfSAmJiAkU3RhdGVzeyAkUGFyYW17U3RhdGVJRH0gfSApIHsKCiAgICAgICAgIyBnZXQgc3RhdGUgZnJvbSBnaXZlbiBzdGF0ZSBpZAogICAgICAgICRTZWxlY3RlZFN0YXRlID0gJFN0YXRlc3sgJFBhcmFte1N0YXRlSUR9IH07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgZGVmYXVsdCBzdGF0ZQogICAgICAgICRTZWxlY3RlZFN0YXRlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkRlZmF1bHQ6OlN0YXRlJykgfHwgJ2ludGVybmFsIChhZ2VudCknOwogICAgfQoKICAgICMgYnVpbGQgdGhlIHN0YXRlIHNlbGVjdGlvbgogICAgJERhdGF7U3RhdGVPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVN0YXRlcywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRTZWxlY3RlZFN0YXRlLAogICAgICAgIFRyYW5zbGF0aW9uICAgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIHNob3cgRkFRIGFkZCBzY3JlZW4KICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZBUUFkZCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzaG93IGxhbmd1YWdlcyBmaWVsZAogICAgbXkgJE11bHRpTGFuZ3VhZ2UgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwogICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IGRlZmF1bHQgbGFuZ3VhZ2UKICAgICAgICBteSAkRGVmYXVsdExhbmd1YWdlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkRlZmF1bHQ6Okxhbmd1YWdlJykgfHwgJ2VuJzsKCiAgICAgICAgIyBnZXQgZGVmYXVsdCBsYW5ndWFnZSBJRAogICAgICAgIG15ICRMYW5ndWFnZUlEID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VMb29rdXAoCiAgICAgICAgICAgIE5hbWUgPT4gJERlZmF1bHRMYW5ndWFnZSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBkZWZhdWx0IGxhbmd1YWdlIGlmIGl0IHdhcyBkZWxldGVkIG9yIGRvZXMgbm90IGV4aXN0cwogICAgICAgIGlmICggISRMYW5ndWFnZUlEICkgewogICAgICAgICAgICBteSAkSW5zZXJ0TGFuZ3VhZ2UgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUFkZCgKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkRGVmYXVsdExhbmd1YWdlLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkSW5zZXJ0TGFuZ3VhZ2UgKSB7CgogICAgICAgICAgICAgICAgIyByZXR1cm4gd2l0aCBlcnJvciBzY3JlZW4KICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJObyBkZWZhdWx0IGxhbmd1YWdlIGZvdW5kIGFuZCBjYW4ndCBjcmVhdGUgYSBuZXcgb25lLiIsCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBkZWZhdWx0IGxhbmd1YWdlIElECiAgICAgICAgICAgICRMYW5ndWFnZUlEID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VMb29rdXAoCiAgICAgICAgICAgICAgICBOYW1lID0+ICREZWZhdWx0TGFuZ3VhZ2UsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkUGFyYW17TGFuZ3VhZ2VJRH0gPSAkTGFuZ3VhZ2VJRDsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vTGFuZ3VhZ2UnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGFwcHJvdmFsIGZpZWxkCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbFJlcXVpcmVkJykgKSB7CgogICAgICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgICAgIG15ICVHcm91cHMgPSByZXZlcnNlICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICA9PiAncm8nLAogICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRoZSBGQVEgYXBwcm92YWwgZ3JvdXAgZnJvbSBjb25maWcKICAgICAgICBteSAkQXBwcm92YWxHcm91cCA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbEdyb3VwJykgfHwgJyc7CgogICAgICAgICMgYnVpbGQgdGhlIGFwcHJvdmFsIHNlbGVjdGlvbiBpZiB1c2VyIGlzIGluIHRoZSBhcHByb3ZhbCBncm91cAogICAgICAgIGlmICggJEdyb3Vwc3skQXBwcm92YWxHcm91cH0gKSB7CgogICAgICAgICAgICAkRGF0YXtBcHByb3ZhbE9wdGlvbn0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FwcHJvdmVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIDAgPT4gJ05vJywKICAgICAgICAgICAgICAgICAgICAxID0+ICdZZXMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0FwcHJvdmVkfSB8fCAwLAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQXBwcm92YWwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgdGhlIGF0dGFjaG1lbnQgdXBsb2FkIGJ1dHRvbgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudFVwbG9hZCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIHNob3cgYXR0YWNobWVudHMKICAgIEFUVEFDSE1FTlQ6CiAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCBAeyAkUGFyYW17QXR0YWNobWVudHN9IH0gKSB7CgogICAgICAgICMgZG8gbm90IHNob3cgaW5saW5lIGltYWdlcyBhcyBhdHRhY2htZW50cwogICAgICAgICMgKHRoZXkgaGF2ZSBhIGNvbnRlbnQgaWQpCiAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gJiYgJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50JywKICAgICAgICAgICAgRGF0YSA9PiAkQXR0YWNobWVudCwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpIHx8ICcnOwoKICAgICMgYWRkIHJpY2ggdGV4dCBlZGl0b3IgSmF2YVNjcmlwdAogICAgIyBvbmx5IGlmIGFjdGl2YXRlZCBhbmQgdGhlIGJyb3dzZXIgY2FuIGhhbmRsZSBpdAogICAgIyBvdGhlcndpc2UganVzdCBhIHRleHQtYXJlYSBpcyBzaG93bgogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpICkgewoKICAgICAgICAjIHVzZSBoZWlnaHQvd2lkdGggZGVmaW5lZCBmb3IgdGhpcyBzY3JlZW4KICAgICAgICAkUGFyYW17UmljaFRleHRIZWlnaHR9ID0gJENvbmZpZy0+e1JpY2hUZXh0SGVpZ2h0fSB8fCAwOwogICAgICAgICRQYXJhbXtSaWNoVGV4dFdpZHRofSAgPSAkQ29uZmlnLT57UmljaFRleHRXaWR0aH0gIHx8IDA7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSaWNoVGV4dCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgIG15ICRJbnRlcmZhY2VTdGF0ZXMgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QWdlbnQ6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgRkFRIENvbnRlbnQKICAgICRMYXlvdXRPYmplY3QtPkZBUUNvbnRlbnRTaG93KAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgIEZBUURhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgRHluYW1pYyBmaWVsZHMKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgc2tpcCBmaWVsZHMgdGhhdCBIVE1MIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoCiAgICAgICAgICAgICRQYXJhbXtEeW5hbWljRmllbGRIVE1MfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRoZSBIVE1MIHN0cmluZ3MgZm9ybSAkUGFyYW0KICAgICAgICBteSAkRHluYW1pY0ZpZWxkSFRNTCA9ICRQYXJhbXtEeW5hbWljRmllbGRIVE1MfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgTGFiZWwgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntMYWJlbH0sCiAgICAgICAgICAgICAgICBGaWVsZCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0ZpZWxkfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGV4YW1wbGUgb2YgZHluYW1pYyBmaWVsZHMgb3JkZXIgY3VzdG9taXphdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEZpZWxkID0+ICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUFkZCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUNhdGVnb3J5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSd30gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgcncgcGVybWlzc2lvbiEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgcGFyYW1ldGVycwogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KENhdGVnb3J5SUQgTmFtZSBQYXJlbnRJRCBDb21tZW50IFZhbGlkSUQpKSB7CiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgY2F0ZWdvcnkgaWQKICAgICRHZXRQYXJhbXtDYXRlZ29yeUlEfSB8fD0gMDsKCiAgICAjIHNldCBkZWZhdWx0IHBhcmVudCBpZAogICAgJEdldFBhcmFte1BhcmVudElEfSB8fD0gMDsKCiAgICAjIGdldCBhcnJheSBwYXJhbWV0ZXJzCiAgICBAeyAkR2V0UGFyYW17UGVybWlzc2lvbkdyb3Vwc30gfSA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdQZXJtaXNzaW9uR3JvdXBzJyApOwoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjaGFuZ2UKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2UnICkgewoKICAgICAgICAjIGNoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMKICAgICAgICBpZiAoICEkR2V0UGFyYW17Q2F0ZWdvcnlJRH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gJ05lZWQgQ2F0ZWdvcnlJRCEnICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBjYXRlZ29yeSBkYXRhCiAgICAgICAgbXkgJUNhdGVnb3J5RGF0YSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5R2V0KAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRHZXRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgcGVybWlzc2lvbiBncm91cHMKICAgICAgICAkQ2F0ZWdvcnlEYXRhe1Blcm1pc3Npb25Hcm91cHN9ID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlHcm91cEdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkR2V0UGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIEhUTUwgb3V0cHV0CiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0NoYW5nZScsCiAgICAgICAgICAgICVDYXRlZ29yeURhdGEsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUNhdGVnb3J5JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNoYW5nZSBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2VBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFBhcmVudElEIFZhbGlkSUQpKSB7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewoKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgbXkgJUVycm9yOwogICAgICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhOYW1lIENvbW1lbnQgUGVybWlzc2lvbkdyb3VwcykpIHsKCiAgICAgICAgICAgICMgaWYgcmVxdWlyZWQgZmllbGQgaXMgbm90IGdpdmVuCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskUGFyYW1OYW1lfSApIHsKCiAgICAgICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgICAgICRFcnJvcnsgJFBhcmFtTmFtZSAuICdTZXJ2ZXJFcnJvcicgfSA9ICdTZXJ2ZXJFcnJvcic7CgogICAgICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIHN0cmluZyBmb3IgY2F0ZWdvcnkgbmFtZSBmaWVsZAogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW1OYW1lIGVxICdOYW1lJyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPSAnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZW5kIHNlcnZlciBlcnJvciBpZiBhbnkgcmVxdWlyZWQgcGFyYW1ldGVyIGlzIG1pc3NpbmcKICAgICAgICBpZiAoJUVycm9yKSB7CgogICAgICAgICAgICAjIEhUTUwgb3V0cHV0CiAgICAgICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVFcnJvciwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRQ2F0ZWdvcnknLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZvb3RlcgogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBkdXBsaWNhdGUgY2F0ZWdvcnkgbmFtZSB3aXRoIHRoZSBzYW1lIHBhcmVudCBjYXRlZ29yeQogICAgICAgIG15ICRDYXRlZ29yeUV4aXN0c0FscmVhZHkgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUR1cGxpY2F0ZUNoZWNrKAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRHZXRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkR2V0UGFyYW17TmFtZX0sCiAgICAgICAgICAgIFBhcmVudElEICAgPT4gJEdldFBhcmFte1BhcmVudElEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IHRoZSBlZGl0IHNjcmVlbiBhZ2FpbgogICAgICAgIGlmICgkQ2F0ZWdvcnlFeGlzdHNBbHJlYWR5KSB7CgogICAgICAgICAgICAjIHNldCBzZXJ2ZXIgZXJyb3JzCiAgICAgICAgICAgICRHZXRQYXJhbXtOYW1lU2VydmVyRXJyb3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRHZXRQYXJhbXtOYW1lU2VydmVyRXJyb3JNZXNzYWdlfSA9ICdUaGlzIGNhdGVnb3J5IGFscmVhZHkgZXhpc3RzJzsKCiAgICAgICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICdDaGFuZ2UnLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIGNhdGVnb3J5CiAgICAgICAgbXkgJENhdGVnb3J5VXBkYXRlU3VjY2Vzc2Z1bCA9ICRGQVFPYmplY3QtPkNhdGVnb3J5VXBkYXRlKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRDYXRlZ29yeVVwZGF0ZVN1Y2Nlc3NmdWwgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgY2F0ZWdvcnkgZ3JvdXAKICAgICAgICAkRkFRT2JqZWN0LT5TZXRDYXRlZ29yeUdyb3VwKAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRHZXRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgR3JvdXBJRHMgICA9PiAkR2V0UGFyYW17UGVybWlzc2lvbkdyb3Vwc30sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBub3RpZmljYXRpb24KICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggSW5mbyA9PiAnRkFRIGNhdGVnb3J5IHVwZGF0ZWQhJyApOwoKICAgICAgICAjIHNob3cgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGQnICkgewoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBIVE1MIG91dHB1dAogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdBZGQnLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUNhdGVnb3J5JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZCBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFBhcmVudElEIFZhbGlkSUQpKSB7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIk5lZWQgJFBhcmFtTmFtZSEiICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgICAgIG15ICVFcnJvcjsKICAgICAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoTmFtZSBDb21tZW50IFBlcm1pc3Npb25Hcm91cHMpKSB7CgogICAgICAgICAgICAjIGlmIHJlcXVpcmVkIGZpZWxkIGlzIG5vdCBnaXZlbgogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgdmFsaWRhdGlvbiBjbGFzcyBhbmQgc2VydmVyIGVycm9yIGVycm9yIGNsYXNzCiAgICAgICAgICAgICAgICBpZiAoICRQYXJhbU5hbWUgZXEgJ1Blcm1pc3Npb25Hcm91cHMnICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnsgJFBhcmFtTmFtZSAuICdTZXJ2ZXJFcnJvcicgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIHN0cmluZyBmb3IgY2F0ZWdvcnkgbmFtZSBmaWVsZAogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW1OYW1lIGVxICdOYW1lJyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPSAnQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZW5kIHNlcnZlciBlcnJvciBpZiBhbnkgcmVxdWlyZWQgcGFyYW1ldGVycyBhcmUgbWlzc2luZwogICAgICAgIGlmICglRXJyb3IpIHsKCiAgICAgICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICdBZGQnLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIGR1cGxpY2F0ZSBjYXRlZ29yeSBuYW1lIHdpdGggdGhlIHNhbWUgcGFyZW50IGNhdGVnb3J5CiAgICAgICAgbXkgJENhdGVnb3J5RXhpc3RzQWxyZWFkeSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RHVwbGljYXRlQ2hlY2soCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJEdldFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRHZXRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgUGFyZW50SUQgICA9PiAkR2V0UGFyYW17UGFyZW50SUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgdGhlIGVkaXQgc2NyZWVuIGFnYWluCiAgICAgICAgaWYgKCRDYXRlZ29yeUV4aXN0c0FscmVhZHkpIHsKCiAgICAgICAgICAgICMgc2V0IHNlcnZlciBlcnJvcnMKICAgICAgICAgICAgJEdldFBhcmFte05hbWVTZXJ2ZXJFcnJvcn0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEdldFBhcmFte05hbWVTZXJ2ZXJFcnJvck1lc3NhZ2V9ID0gJ1RoaXMgY2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMhJzsKCiAgICAgICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICdBZGQnLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CgogICAgICAgICMgYWRkIG5ldyBjYXRlZ29yeQogICAgICAgIG15ICRDYXRlZ29yeUlEID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJENhdGVnb3J5SUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgY2F0ZWdvcnkgZ3JvdXAKICAgICAgICAkRkFRT2JqZWN0LT5TZXRDYXRlZ29yeUdyb3VwKAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBHcm91cElEcyAgID0+ICRHZXRQYXJhbXtQZXJtaXNzaW9uR3JvdXBzfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IG5vdGlmaWNhdGlvbgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+ICdGQVEgY2F0ZWdvcnkgYWRkZWQhJyApOwoKICAgICAgICAjIHNob3cgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWxldGUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWxldGUnICkgewoKICAgICAgICAjIGdldCB0aGUgQ2F0ZWdvcnlJRAogICAgICAgIG15ICRDYXRlZ29yeUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NhdGVnb3J5SUQnICkgfHwgJyc7CgogICAgICAgICMgY2hlY2sgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgICAgIGlmICggISRDYXRlZ29yeUlEICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdObyBDYXRlZ29yeUlEIGlzIGdpdmVuIScsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY2F0ZWdvcnkgZGF0YQogICAgICAgIG15ICVDYXRlZ29yeURhdGEgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJUNhdGVnb3J5RGF0YSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgYWZmZWN0ZWQgRkFRIGFydGljbGVzCiAgICAgICAgbXkgQEFmZmVjdGVkSXRlbXMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCiAgICAgICAgICAgIENhdGVnb3J5SURzID0+IFskQ2F0ZWdvcnlJRF0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYWxsIGFmZmVjdGVkIFN1YkNjYXRlZ29yaWVzCiAgICAgICAgbXkgJEFmZmVjdGVkU3ViQ2F0ZWdvcmllcyA9ICRGQVFPYmplY3QtPkNhdGVnb3J5U3ViQ2F0ZWdvcnlJRExpc3QoCiAgICAgICAgICAgIFBhcmVudElEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBNb2RlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgY2FsbCBEZWxldGUgYmxvY2sKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGVsZXRlJywKICAgICAgICAgICAgRGF0YSA9PiB7JUNhdGVnb3J5RGF0YX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgdGhlIGRpYWxvZyB0eXBlLiBBcyBkZWZhdWx0LCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgICAgICBteSAkRGlhbG9nVHlwZSA9ICdDb25maXJtYXRpb24nOwoKICAgICAgICAjIGRpc3BsYXkgbGlzdCBvZiBhZmZlY3RlZCBGQVEgYXJ0aWNsZXMgb3IgU3ViQ2F0ZWdvcmllcwogICAgICAgIGlmICggQEFmZmVjdGVkSXRlbXMgfHwgQHskQWZmZWN0ZWRTdWJDYXRlZ29yaWVzfSApIHsKCiAgICAgICAgICAgICMgc2V0IHRoZSBkaWFsb2cgdHlwZSB0byBoYXZlIG9ubHkgMSBidXR0b246IE9LCiAgICAgICAgICAgICREaWFsb2dUeXBlID0gJ01lc3NhZ2UnOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBZmZlY3RlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkaXNwbGF5IEFmZmVjdGVkIEZBUSBhcnRpY2xlcwogICAgICAgICAgICBpZiAoQEFmZmVjdGVkSXRlbXMpIHsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBZmZlY3RlZEl0ZW1zJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBJVEVNSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEl0ZW1JRCAoQEFmZmVjdGVkSXRlbXMpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgRkFRIGFydGljbGUKICAgICAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSXRlbUlELAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgRkFRIGFydGljbGUKICAgICAgICAgICAgICAgICAgICBuZXh0IElURU1JRCBpZiAhJUZBUURhdGE7CgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBZmZlY3RlZEl0ZW1zUm93JywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGRpc3BsYXkgQWZmZWN0ZWQgU3ViY2F0ZWdvcmllcwogICAgICAgICAgICBpZiAoIEB7JEFmZmVjdGVkU3ViQ2F0ZWdvcmllc30gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgY2F0ZWdvcmllcyBsb25nIG5hbWVzCiAgICAgICAgICAgICAgICBteSAkQ2F0ZWdvcnlMb25nTmFtZXMgPSAkRkFRT2JqZWN0LT5HZXRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgICAgICAgICAgICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBZmZlY3RlZFN1YkNhdGVnb3JpZXMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgQ0FURUdPUllJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIEB7JEFmZmVjdGVkU3ViQ2F0ZWdvcmllc30gKSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IGNhdGVnb3J5CiAgICAgICAgICAgICAgICAgICAgbXkgJUNhdGVnb3J5RGF0YSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5R2V0KAogICAgICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHNldCBjYXRlZ29yeSBsb25nIG5hbWUKICAgICAgICAgICAgICAgICAgICAkQ2F0ZWdvcnlEYXRhe0xvbmdOYW1lfSA9ICRDYXRlZ29yeUxvbmdOYW1lcy0+eyRDYXRlZ29yeUlEfTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjYXRlZ29yeQogICAgICAgICAgICAgICAgICAgIG5leHQgQ0FURUdPUllJRCBpZiAhJUNhdGVnb3J5RGF0YTsKCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FmZmVjdGVkU3ViQ2F0ZWdvcmllc1JvdycsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJUNhdGVnb3J5RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0FmZmVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVDYXRlZ29yeURhdGF9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgY29udGVudAogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7fSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHRoZSByZXR1cm5lZCBkYXRhIHN0cnVjdHVyZQogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICBIVE1MICAgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIERpYWxvZ1R5cGUgPT4gJERpYWxvZ1R5cGUsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXR1cm4gSlNPTi1TdHJpbmcgYmVjYXVzZSBvZiBBSkFYLU1vZGUKICAgICAgICBteSAkT3V0cHV0SlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoIERhdGEgPT4gXCVEYXRhICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0SlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGRlbGV0ZSBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWxldGVBY3Rpb24nICkgewoKICAgICAgICAjIGdldCB0aGUgQ2F0ZWdvcnlJRAogICAgICAgIG15ICRDYXRlZ29yeUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NhdGVnb3J5SUQnICkgfHwgJyc7CgogICAgICAgICMgY2hlY2sgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgICAgIGlmICggISRDYXRlZ29yeUlEICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdObyBDYXRlZ29yeUlEIGlzIGdpdmVuIScsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY2F0ZWdvcnkgZGF0YQogICAgICAgIG15ICVDYXRlZ29yeURhdGEgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJUNhdGVnb3J5RGF0YSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0aGUgY2F0ZWdvcnkKICAgICAgICBteSAkQ291bGREZWxldGVDYXRlZ29yeSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RGVsZXRlKAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJENvdWxkRGVsZXRlQ2F0ZWdvcnkpIHsKCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gZXhwbG9yZXIsIHdoZW4gdGhlIGRlbGV0aW9uIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRGQVFDYXRlZ29yeSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gZGVsZXRlIGZhaWxlZAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjYXRlZ29yeSAkQ2F0ZWdvcnlJRCEiLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFDYXRlZ29yeScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9FZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHNob3cgb3ZlcnZpZXcKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3IGJsb2NrcwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQWN0aW9uTGlzdCcsCiAgICAgICAgRGF0YSA9PiB7fSwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7fSwKICAgICk7CgogICAgIyBnZXQgdGhlIHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgbXkgJURhdGE7CgogICAgIyBidWlsZCB0aGUgdmFsaWQgc2VsZWN0aW9uCiAgICAkRGF0YXtWYWxpZE9wdGlvbn0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1ZhbGlkSUR9IHx8ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCBhbGwgdmFsaWQgZ3JvdXBzCiAgICBteSAlR3JvdXBzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTGlzdCgKICAgICAgICBWYWxpZCA9PiAxLAogICAgKTsKCiAgICAjIHNldCBubyBzZXJ2ZXIgZXJyb3IgY2xhc3MgYXMgZGVmYXVsdAogICAgJFBhcmFte1Blcm1pc3Npb25Hcm91cHNTZXJ2ZXJFcnJvcn0gfHw9ICcnOwoKICAgICMgYnVpbGQgdGhlIGdyb3VwIHNlbGVjdGlvbgogICAgJERhdGF7R3JvdXBPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJUdyb3VwcywKICAgICAgICBOYW1lICAgICAgID0+ICdQZXJtaXNzaW9uR3JvdXBzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnVmFsaWRhdGVfUmVxdWlyZWQgTW9kZXJuaXplICcgLiAkUGFyYW17UGVybWlzc2lvbkdyb3Vwc1NlcnZlckVycm9yfSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtQZXJtaXNzaW9uR3JvdXBzfSwKICAgICk7CgogICAgIyBnZXQgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGVpciBsb25nIG5hbWVzCiAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpLT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgYnVpbGQgdGhlIGNhdGVnb3J5IHNlbGVjdGlvbgogICAgJERhdGF7Q2F0ZWdvcnlPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgICAgPT4gJENhdGVnb3J5VHJlZSwKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnUGFyZW50SUQnLAogICAgICAgIFNlbGVjdGVkSUQgICAgID0+ICRQYXJhbXtQYXJlbnRJRH0sCiAgICAgICAgUG9zc2libGVOb25lICAgPT4gMSwKICAgICAgICBEaXNhYmxlZEJyYW5jaCA9PiAkQ2F0ZWdvcnlUcmVlLT57ICRQYXJhbXtDYXRlZ29yeUlEfSB9IHx8ICcnLAogICAgICAgIFRyYW5zbGF0aW9uICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3VXBkYXRlJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlRGF0YSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIHNob3cgaGVhZGVyCiAgICBpZiAoICRQYXJhbXtBY3Rpb259IGVxICdDaGFuZ2UnICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJFZGl0JywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckFkZCcsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9PdmVydmlldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdXRwdXQgPSAnJzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3IGJsb2NrcwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4ge30sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQWN0aW9uTGlzdCcsCiAgICAgICAgRGF0YSA9PiB7fSwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25BZGQnLAogICAgICAgIERhdGEgPT4ge30sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnLAogICAgICAgIERhdGEgPT4ge30sCiAgICApOwoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyBnZXQgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGVpciBsb25nIG5hbWVzCiAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlUcmVlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGlmIHRoZXJlIGFyZSBhbnkgY2F0ZWdvcmllcywgdGhleSBhcmUgc2hvd24KICAgIGlmICggJENhdGVnb3J5VHJlZSAmJiByZWYgJENhdGVnb3J5VHJlZSBlcSAnSEFTSCcgJiYgJXskQ2F0ZWdvcnlUcmVlfSApIHsKCiAgICAgICAgIyBnZXQgdGhlIHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwoKICAgICAgICAjIHNvcnQgdGhlIGNhdGVnb3J5IGlkcyBieSB0aGUgbG9uZyBjYXRlZ29yeSBuYW1lCiAgICAgICAgbXkgQENhdGVnb3J5SURzU29ydGVkID0gc29ydCB7ICRDYXRlZ29yeVRyZWUtPnskYX0gY21wICRDYXRlZ29yeVRyZWUtPnskYn0gfSBrZXlzICV7JENhdGVnb3J5VHJlZX07CgogICAgICAgICMgc2hvdyBhbGwgY2F0ZWdvcmllcwogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoQENhdGVnb3J5SURzU29ydGVkKSB7CgogICAgICAgICAgICAjIGdldCBjYXRlZ29yeSBkYXRhCiAgICAgICAgICAgIG15ICVDYXRlZ29yeURhdGEgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHZhbGlkIHN0cmluZyBiYXNlZCBvbiBWYWxpZElECiAgICAgICAgICAgICRDYXRlZ29yeURhdGF7VmFsaWR9ID0gJFZhbGlkTGlzdHsgJENhdGVnb3J5RGF0YXtWYWxpZElEfSB9OwoKICAgICAgICAgICAgIyBvdmVyd3JpdGUgdGhlIG5hbWUgd2l0aCB0aGUgbG9uZyBuYW1lCiAgICAgICAgICAgICRDYXRlZ29yeURhdGF7TmFtZX0gPSAkQ2F0ZWdvcnlUcmVlLT57JENhdGVnb3J5SUR9OwoKICAgICAgICAgICAgIyBvdXRwdXQgdGhlIGNhdGVnb3J5IGRhdGEKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslQ2F0ZWdvcnlEYXRhfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUURlbGV0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgIGlmICggISRTZWxmLT57QWNjZXNzUm99ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBuZWVkIHJvIHBlcm1pc3Npb24hJywKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgICMgZ2V0IG5lZWRlZCBJdGVtIGlkCiAgICAkR2V0UGFyYW17SXRlbUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJdGVtSUQnICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRHZXRQYXJhbXtJdGVtSUR9ICkgewoKICAgICAgICAjIGVycm9yIHBhZ2UKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIk5vIEl0ZW1JRCBpcyBnaXZlbiEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGdldCBGQVEgaXRlbSBkYXRhCiAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgIEl0ZW1GaWVsZHMgPT4gMCwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgIH0KCiAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgbXkgJFBlcm1pc3Npb24gPSAkRkFRT2JqZWN0LT5DaGVja0NhdGVnb3J5VXNlclBlcm1pc3Npb24oCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICk7CgogICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgIGlmICggISRQZXJtaXNzaW9uICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBoYXZlIG5vIHBlcm1pc3Npb24gZm9yIHRoaXMgY2F0ZWdvcnkhJywKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWxldGUnICkgewoKICAgICAgICAjIGRlbGV0ZSB0aGUgRkFRIGFydGljbGUKICAgICAgICBteSAkQ291bGREZWxldGVJdGVtID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgICAgICAgICBJdGVtSUQgPT4gJEZBUURhdGF7SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJENvdWxkRGVsZXRlSXRlbSkgewoKICAgICAgICAgICAgIyByZWRpcmVjdCB0byBleHBsb3Jlciwgd2hlbiB0aGUgZGVsZXRpb24gd2FzIHN1Y2Nlc3NmdWwKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudEZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9JEZBUURhdGF7Q2F0ZWdvcnlJRH0iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlLCB3aGVuIGRlbGV0ZSBmYWlsZWQKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgRkFRIGFydGljbGUgJEZBUURhdGF7SXRlbUlEfSEiLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgdGhlIGRpYWxvZyB0eXBlLiBBcyBkZWZhdWx0LCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgIG15ICREaWFsb2dUeXBlID0gJ0NvbmZpcm1hdGlvbic7CgogICAgIyBvdXRwdXQgY29udGVudAogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRRGVsZXRlJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYnVpbGQgdGhlIHJldHVybmVkIGRhdGEgc3RydWN0dXJlCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBIVE1MICAgICAgID0+ICRPdXRwdXQsCiAgICAgICAgRGlhbG9nVHlwZSA9PiAkRGlhbG9nVHlwZSwKICAgICk7CgogICAgIyByZXR1cm4gSlNPTi1TdHJpbmcgYmVjYXVzZSBvZiBBSkFYLU1vZGUKICAgIG15ICRPdXRwdXRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSggRGF0YSA9PiBcJURhdGEgKTsKCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXRKU09OLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUVkaXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiRkFROjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259IikgfHwgJyc7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgJFNlbGYtPntEeW5hbWljRmllbGR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgIGlmICggISRTZWxmLT57QWNjZXNzUnd9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBuZWVkIHJ3IHBlcm1pc3Npb24hJywKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHBhcmFtZXRlcnMKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkUGFyYW1OYW1lICgKICAgICAgICBxdyhJdGVtSUQgVGl0bGUgQ2F0ZWdvcnlJRCBTdGF0ZUlEIExhbmd1YWdlSUQgVmFsaWRJRCBLZXl3b3JkcyBBcHByb3ZlZCBGaWVsZDEgRmllbGQyIEZpZWxkMyBGaWVsZDQgRmllbGQ1IEZpZWxkNikKICAgICAgICApCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkR2V0UGFyYW17SXRlbUlEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIEl0ZW1JRCBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyBnZXQgRkFRIGl0ZW0gZGF0YQogICAgbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgSXRlbUlEICAgICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBJdGVtRmllbGRzICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgIH0KCiAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgbXkgJFBlcm1pc3Npb24gPSAkRkFRT2JqZWN0LT5DaGVja0NhdGVnb3J5VXNlclBlcm1pc3Npb24oCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICk7CgogICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgIGlmICggISRQZXJtaXNzaW9uICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBoYXZlIG5vIHBlcm1pc3Npb24gZm9yIHRoaXMgY2F0ZWdvcnkhJywKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgdmFsdWVzIGZvcm0gaHR0cCByZXF1ZXN0CiAgICBteSAlRHluYW1pY0ZpZWxkVmFsdWVzOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvcm0gdGhlIHdlYiByZXF1ZXN0CiAgICAgICAgJER5bmFtaWNGaWVsZFZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHVwbG9hZCBjYWNoZSBvYmplY3QKICAgIG15ICRVcGxvYWRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CgogICAgIyBnZXQgZm9ybSBpZAogICAgbXkgJEZvcm1JRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtSUQnICk7CgogICAgIyBjcmVhdGUgZm9ybSBpZAogICAgaWYgKCAhJEZvcm1JRCApIHsKICAgICAgICAkRm9ybUlEID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURDcmVhdGUoKTsKICAgIH0KCiAgICAjIGdldCBzY3JlZW4gdHlwZQogICAgbXkgJFNjcmVlblR5cGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2NyZWVuVHlwZScgKSB8fCAnJzsKCiAgICAjIGdldCBxdWV1ZSBvYmplY3QKICAgIG15ICRRdWV1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2hvdyB0aGUgRkFRIGVkaXQgc2NyZWVuCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICEkU2VsZi0+e1N1YmFjdGlvbn0gKSB7CgogICAgICAgIG15ICRPdXRwdXQ7CgogICAgICAgICMgc2hvdyBhIHBvcC11cCBzY3JlZW4KICAgICAgICBpZiAoICRTY3JlZW5UeXBlIGVxICdQb3B1cCcgKSB7CgogICAgICAgICAgICAjIHNob3cgdGhlIHNtYWxsIHBvcC11cCBzY3JlZW4gaGVhZGVyCiAgICAgICAgICAgICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1NtYWxsJywKICAgICAgICAgICAgICAgIEJvZHlDbGFzcyA9PiAnUG9wdXAnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGFydFNtYWxsJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBhIG5vcm1hbCB3aW5kb3cKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2hvdyB0aGUgbm9ybWFsIHNjcmVlbiBoZWFkZXIgd2l0aCBuYXZpZ2F0aW9uIGJhcgogICAgICAgICAgICAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGFydE5vcm1hbCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgZXhpc3RpbmcgYXR0YWNobWVudHMgKHdpdGhvdXQgaW5saW5lIGF0dGFjaG1lbnRzKQogICAgICAgIG15IEBFeGlzdGluZ0F0dGFjaG1lbnRzID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEluZGV4KAogICAgICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBTaG93SW5saW5lID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY29weSBhbGwgZXhpc3RpbmcgYXR0YWNobWVudHMgdG8gdXBsb2FkIGNhY2hlCiAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChARXhpc3RpbmdBdHRhY2htZW50cykgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGV4aXN0aW5nIGF0dGFjaG1lbnQgZGF0YQogICAgICAgICAgICBteSAlRmlsZSA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBGaWxlSUQgPT4gJEF0dGFjaG1lbnQtPntGaWxlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGNvbnRlbnQgZGlzcG9zaXRpb24gKGlmIGl0cyBhbiBpbmxpbmUgYXR0YWNobWVudCkKICAgICAgICAgICAgbXkgJERpc3Bvc2l0aW9uID0gJEF0dGFjaG1lbnQtPntJbmxpbmV9ID8gJ2lubGluZScgOiAnJzsKCiAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREFkZEZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkRm9ybUlELAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGV7RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEZpbGV7Q29udGVudH0sCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkRmlsZXtDb250ZW50VHlwZX0sCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAkRGlzcG9zaXRpb24sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhIGZyb20gdXBsb2FkIGNhY2hlCiAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkRm9ybUlELAogICAgICAgICk7CgogICAgICAgICMgcmV3cml0ZSBvbGQgc3R5bGUgaW5saW5lIGltYWdlIFVSTHMKICAgICAgICBGSUVMRDoKICAgICAgICBmb3IgbXkgJEZpZWxkIChxdyhGaWVsZDEgRmllbGQyIEZpZWxkMyBGaWVsZDQgRmllbGQ1IEZpZWxkNikpIHsKCiAgICAgICAgICAgIG5leHQgRklFTEQgaWYgISRGQVFEYXRheyRGaWVsZH07CgogICAgICAgICAgICAjIHJld3JpdGUgaGFuZGxlIGFuZCBhY3Rpb24sIHRha2UgY2FyZSBvZiBvbGQgc3R5bGUgYmVmb3JlIEZBUSAyLjAueAogICAgICAgICAgICAkRkFRRGF0YXskRmllbGR9ID1+IHN7CiAgICAgICAgICAgICAgICBBY3Rpb249QWdlbnRGQVEgWyZdKGFtcDspPyBTdWJhY3Rpb249RG93bmxvYWQgWyZdKGFtcDspPwogICAgICAgICAgICB9e0FjdGlvbj1BZ2VudEZBUVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDt9Z3htczsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIEhUTUwgc3RyaW5ncyBmb3IgYWxsIGR5bmFtaWMgZmllbGRzCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZEhUTUw7CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICMgdG8gc3RvcmUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIGRhdGFiYXNlIChvciB1bmRlZmluZWQpCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRGQVFEYXRheyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfTsKCiAgICAgICAgICAgICMgZ2V0IGZpZWxkIEhUTUwKICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0KICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICBNYW5kYXRvcnkgPT4KICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID09IDIsCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QXBwcm92YWxSZXF1aXJlZCcpICkgewoKICAgICAgICAgICAgIyBnZXQgQXBwcm92YWwgcXVldWUgbmFtZQogICAgICAgICAgICBteSAkQXBwcm92YWxRdWV1ZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbFF1ZXVlJykgfHwgJyc7CgogICAgICAgICAgICAjIGNoZWNrIGlmIEFwcHJvdmFsIHF1ZXVlIGV4aXN0cwogICAgICAgICAgICBteSAkQXBwcm92YWxRdWV1ZUlEID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRBcHByb3ZhbFF1ZXVlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IG5vdGlmaWNhdGlvbiBpZiBBcHByb3ZhbCBxdWV1ZSBkb2VzIG5vdCBleGlzdHMKICAgICAgICAgICAgaWYgKCAhJEFwcHJvdmFsUXVldWVJRCApIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgSW5mbyAgICAgPT4gIkZBUSBBcHByb3ZhbCBpcyBlbmFibGVkIGJ1dCBxdWV1ZSAnJEFwcHJvdmFsUXVldWUnIGRvZXMgbm90IGV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgPT4gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWRtaW5TeXNDb25maWc7U3ViYWN0aW9uPUVkaXQ7JwogICAgICAgICAgICAgICAgICAgICAgICAuICdTeXNDb25maWdTdWJHcm91cD1Db3JlJTNBJTNBQXBwcm92YWw7U3lzQ29uZmlnR3JvdXA9RkFRJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgIEF0dGFjaG1lbnRzICAgICAgPT4gXEBBdHRhY2htZW50cywKICAgICAgICAgICAgU2NyZWVuVHlwZSAgICAgICA9PiAkU2NyZWVuVHlwZSwKICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICA9PiAkRm9ybUlELAogICAgICAgICAgICBEeW5hbWljRmllbGRIVE1MID0+IFwlRHluYW1pY0ZpZWxkSFRNTCwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgYSBwb3AtdXAgc2NyZWVuIGZvb3RlcgogICAgICAgIGlmICggJFNjcmVlblR5cGUgZXEgJ1BvcHVwJyApIHsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRW5kU21hbGwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKCiAgICAgICAgfQoKICAgICAgICAjIHNob3cgYSBub3JtYWwgZm9vdGVyCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0VuZE5vcm1hbCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2F2ZSB0aGUgRkFRCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2F2ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15ICRPdXRwdXQ7CgogICAgICAgICMgc2hvdyBhIHBvcC11cCBzY3JlZW4KICAgICAgICBpZiAoICRTY3JlZW5UeXBlIGVxICdQb3B1cCcgKSB7CgogICAgICAgICAgICAjIHNob3cgdGhlIHNtYWxsIHBvcC11cCBzY3JlZW4gaGVhZGVyCiAgICAgICAgICAgICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1NtYWxsJywKICAgICAgICAgICAgICAgIEJvZHlDbGFzcyA9PiAnUG9wdXAnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGFydFNtYWxsJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBhIG5vcm1hbCB3aW5kb3cKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2hvdyB0aGUgbm9ybWFsIHNjcmVlbiBoZWFkZXIgd2l0aCBuYXZpZ2F0aW9uIGJhcgogICAgICAgICAgICAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGFydE5vcm1hbCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMKICAgICAgICBteSAlRXJyb3I7CiAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFRpdGxlIENhdGVnb3J5SUQpKSB7CgogICAgICAgICAgICAjIGlmIHJlcXVpcmVkIGZpZWxkIGlzIG5vdCBnaXZlbiwgYWRkIHNlcnZlciBlcnJvciBjbGFzcwogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7ICRQYXJhbU5hbWUgLiAnU2VydmVyRXJyb3InIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIGFuIGF0dGFjaG1lbnQgbXVzdCBiZSBkZWxldGVkCiAgICAgICAgbXkgQEF0dGFjaG1lbnRJRHMgPSBtYXAgewogICAgICAgICAgICBteSAoJElEKSA9ICRfID1+IG17IFxBIEF0dGFjaG1lbnREZWxldGUgKFxkKykgXHogfXhtczsKICAgICAgICAgICAgJElEID8gJElEIDogKCk7CiAgICAgICAgfSAkUGFyYW1PYmplY3QtPkdldFBhcmFtTmFtZXMoKTsKCiAgICAgICAgQ09VTlQ6CiAgICAgICAgZm9yIG15ICRDb3VudCAoIHJldmVyc2Ugc29ydCBAQXR0YWNobWVudElEcyApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIGRlbGV0ZSBidXR0b24gd2FzIHByZXNzZWQgZm9yIHRoaXMgYXR0YWNobWVudAogICAgICAgICAgICBteSAkRGVsZXRlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIkF0dGFjaG1lbnREZWxldGUkQ291bnQiICk7CgogICAgICAgICAgICAjIGNoZWNrIG5leHQgYXR0YWNobWVudCBpZiBpdCB3YXMgbm90IHByZXNzZWQKICAgICAgICAgICAgbmV4dCBDT1VOVCBpZiAhJERlbGV0ZTsKCiAgICAgICAgICAgICMgcmVtZW1iZXIgdGhhdCB3ZSBuZWVkIHRvIHNob3cgdGhlIHBhZ2UgYWdhaW4KICAgICAgICAgICAgJEVycm9ye0F0dGFjaG1lbnR9ID0gMTsKCiAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBhdHRhY2htZW50IGZyb20gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZUZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJEZvcm1JRCwKICAgICAgICAgICAgICAgIEZpbGVJRCA9PiAkQ291bnQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIHdhcyBhbiBhdHRhY2htZW50IHVwbG9hZAogICAgICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0F0dGFjaG1lbnRVcGxvYWQnICkgKSB7CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgd2UgbmVlZCB0byBzaG93IHRoZSBwYWdlIGFnYWluCiAgICAgICAgICAgICRFcnJvcntBdHRhY2htZW50fSA9IDE7CgogICAgICAgICAgICAjIGdldCB0aGUgdXBsb2FkZWQgYXR0YWNobWVudAogICAgICAgICAgICBteSAlVXBsb2FkU3R1ZmYgPSAkUGFyYW1PYmplY3QtPkdldFVwbG9hZEFsbCgKICAgICAgICAgICAgICAgIFBhcmFtICA9PiAnRmlsZVVwbG9hZCcsCiAgICAgICAgICAgICAgICBTb3VyY2UgPT4gJ3N0cmluZycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50IHRvIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRGb3JtSUQsCiAgICAgICAgICAgICAgICAlVXBsb2FkU3R1ZmYsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBIVE1MIHN0cmluZ3MgZm9yIGFsbCBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICVEeW5hbWljRmllbGRIVE1MOwoKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICBteSAkVmFsaWRhdGlvblJlc3VsdDsKCiAgICAgICAgICAgICMgZG8gbm90IHZhbGlkYXRlIG9uIGF0dGFjaG1lbnQgdXBsb2FkCiAgICAgICAgICAgIGlmICggISRFcnJvcntBdHRhY2htZW50fSApIHsKCiAgICAgICAgICAgICAgICAkVmFsaWRhdGlvblJlc3VsdCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZVZhbGlkYXRlKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFZhbGlkYXRpb25SZXN1bHQpICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBwZXJmb3JtIHZhbGlkYXRpb24gb24gZmllbGQgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSEiLAogICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcHJvcGFnYXRlIHZhbGlkYXRpb24gZXJyb3IgdG8gdGhlIEVycm9yIHZhcmlhYmxlIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSBmcm9udGVuZAogICAgICAgICAgICAgICAgaWYgKCAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJyBTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGZpZWxkIEhUTUwKICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0KICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE1hbmRhdG9yeSA9PgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgICAgIFNlcnZlckVycm9yICA9PiAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSAgfHwgJycsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFZhbGlkYXRpb25SZXN1bHQtPntFcnJvck1lc3NhZ2V9IHx8ICcnLAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2VuZCBzZXJ2ZXIgZXJyb3IgaWYgYW55IHJlcXVpcmVkIHBhcmFtZXRlciBpcyBtaXNzaW5nCiAgICAgICAgIyBvciBhbiBhdHRhY2htZW50IHdhcyBkZWxldGVkIG9yIHVwbG9hZGVkCiAgICAgICAgaWYgKCVFcnJvcikgewoKICAgICAgICAgICAgIyBpZiB0aGVyZSB3YXMgYW4gYXR0YWNobWVudCBkZWxldGUgb3IgdXBsb2FkCiAgICAgICAgICAgICMgd2UgZG8gbm90IHdhbnQgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9ycyBmb3Igb3RoZXIgZmllbGRzCiAgICAgICAgICAgIGlmICggJEVycm9ye0F0dGFjaG1lbnR9ICkgewogICAgICAgICAgICAgICAgJUVycm9yID0gKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBtZXRhIGRhdGEKICAgICAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgID0+ICRGb3JtSUQsCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRIVE1MID0+IFwlRHluYW1pY0ZpZWxkSFRNTCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFwcHJvdmFsUmVxdWlyZWQnKSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBBcHByb3ZhbCBxdWV1ZSBuYW1lCiAgICAgICAgICAgICAgICBteSAkQXBwcm92YWxRdWV1ZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbFF1ZXVlJykgfHwgJyc7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBBcHByb3ZhbCBxdWV1ZSBleGlzdHMKICAgICAgICAgICAgICAgIG15ICRBcHByb3ZhbFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKAogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRBcHByb3ZhbFF1ZXVlLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNob3cgbm90aWZpY2F0aW9uIGlmIEFwcHJvdmFsIHF1ZXVlIGRvZXMgbm90IGV4aXN0cwogICAgICAgICAgICAgICAgaWYgKCAhJEFwcHJvdmFsUXVldWVJRCApIHsKICAgICAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBUSBBcHByb3ZhbCBpcyBlbmFibGVkIGJ1dCBxdWV1ZSAnJEFwcHJvdmFsUXVldWUnIGRvZXMgbm90IGV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgPT4gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnQWN0aW9uPUFkbWluU3lzQ29uZmlnO1N1YmFjdGlvbj1FZGl0OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ1N5c0NvbmZpZ1N1Ykdyb3VwPUNvcmUlM0ElM0FBcHByb3ZhbDtTeXNDb25maWdHcm91cD1GQVEnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgICAgICBBdHRhY2htZW50cyA9PiBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICAgICAgU2NyZWVuVHlwZSAgICAgICA9PiAkU2NyZWVuVHlwZSwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgPT4gJEZvcm1JRCwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZEhUTUwgPT4gXCVEeW5hbWljRmllbGRIVE1MLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IGEgcG9wLXVwIHNjcmVlbiBmb290ZXIKICAgICAgICAgICAgaWYgKCAkU2NyZWVuVHlwZSBlcSAnUG9wdXAnICkgewoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0VuZFNtYWxsJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CgogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNob3cgYSBub3JtYWwgZm9vdGVyCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0VuZE5vcm1hbCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgY29udGVudCB0eXBlCiAgICAgICAgbXkgJENvbnRlbnRUeXBlID0gJ3RleHQvcGxhaW4nOwogICAgICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gJiYgJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6Okl0ZW06OkhUTUwnKSApIHsKICAgICAgICAgICAgJENvbnRlbnRUeXBlID0gJ3RleHQvaHRtbCc7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgbmV3IEZBUSBhcnRpY2xlCiAgICAgICAgbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFVcGRhdGUoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJENvbnRlbnRUeXBlLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGVycm9yIGlmIEZBUSBjb3VsZCBub3QgYmUgdXBkYXRlZAogICAgICAgIGlmICggISRVcGRhdGVTdWNjZXNzICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBmcm9tIHVwbG9hZCBjYWNoZQogICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNEYXRhKAogICAgICAgICAgICBGb3JtSUQgPT4gJEZvcm1JRCwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGEgbG9va3VwIGxvb2t1cCBoYXNoIG9mIHRoZSBuZXcgYXR0YWNobWVudHMKICAgICAgICBteSAlTmV3QXR0YWNobWVudDsKICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50cykgewoKICAgICAgICAgICAgIyB0aGUga2V5IGlzIHRoZSBmaWxlbmFtZSArIGZpbGVzaXplICsgY29udGVudCB0eXBlCiAgICAgICAgICAgIG15ICRLZXkgPSAkQXR0YWNobWVudC0+e0ZpbGVuYW1lfQogICAgICAgICAgICAgICAgLiAkQXR0YWNobWVudC0+e0ZpbGVzaXplfQogICAgICAgICAgICAgICAgLiAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfTsKCiAgICAgICAgICAgICMgYXBwZW5kIGNvbnRlbnQgaWQgaWYgYXZhaWxhYmxlIChmb3IgbmV3IGlubGluZSBpbWFnZXMpCiAgICAgICAgICAgIGlmICggJEF0dGFjaG1lbnQtPntDb250ZW50SUR9ICkgewogICAgICAgICAgICAgICAgJEtleSAuPSAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RvcmUgYWxsIG9mIHRoZSBuZXcgYXR0YWNobWVudCBkYXRhCiAgICAgICAgICAgICROZXdBdHRhY2htZW50eyRLZXl9ID0gJEF0dGFjaG1lbnQ7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgZXhpc3RpbmcgYXR0YWNobWVudHMsIHdpdGhvdXQgaW5saW5lIGF0dGFjaG1lbnRzCiAgICAgICAgbXkgQEV4aXN0aW5nQXR0YWNobWVudHMgPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIFNob3dJbmxpbmUgPT4gMCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayB0aGUgZXhpc3RpbmcgYXR0YWNobWVudHMKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICMgdGhlIGtleSBpcyB0aGUgZmlsZW5hbWUgKyBmaWxlc2l6ZSArIGNvbnRlbnQgdHlwZQogICAgICAgICAgICAjIChubyBjb250ZW50IGlkLCBhcyBleGlzdGluZyBhdHRhY2htZW50cyBkb24ndCBoYXZlIGl0KQogICAgICAgICAgICBteSAkS2V5ID0gJEF0dGFjaG1lbnQtPntGaWxlbmFtZX0KICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnQtPntGaWxlc2l6ZX0KICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX07CgogICAgICAgICAgICAjIGF0dGFjaG1lbnQgaXMgYWxyZWFkeSBleGlzdGluZywgd2UgY2FuIGRlbGV0ZSBpdCBmcm9tIHRoZSBuZXcgYXR0YWNobWVudCBoYXNoCiAgICAgICAgICAgIGlmICggJE5ld0F0dGFjaG1lbnR7JEtleX0gKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJE5ld0F0dGFjaG1lbnR7JEtleX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZXhpc3RpbmcgYXR0YWNobWVudCBpcyBubyBsb25nZXIgaW4gbmV3IGF0dGFjaG1lbnRzIGhhc2gKICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBkZWxldGUgdGhlIGV4aXN0aW5nIGF0dGFjaG1lbnQKICAgICAgICAgICAgICAgIG15ICREZWxldGVTdWNjZXNzZnVsID0gJEZBUU9iamVjdC0+QXR0YWNobWVudERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgRmlsZUlEID0+ICRBdHRhY2htZW50LT57RmlsZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICBpZiAoICEkRGVsZXRlU3VjY2Vzc2Z1bCApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHdyaXRlIHRoZSBuZXcgYXR0YWNobWVudHMKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoIHZhbHVlcyAlTmV3QXR0YWNobWVudCApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgYXR0YWNobWVudCBpcyBhbiBpbmxpbmUgYXR0YWNobWVudAogICAgICAgICAgICBteSAkSW5saW5lID0gMDsKICAgICAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gKSB7CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IGl0IGlzIGlubGluZQogICAgICAgICAgICAgICAgJElubGluZSA9IDE7CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciBpZiB0aGlzIGlubGluZSBhdHRhY2htZW50IGlzIHVzZWQgaW4gYW55IEZBUSBhcnRpY2xlCiAgICAgICAgICAgICAgICBteSAkQ29udGVudElERm91bmQ7CgogICAgICAgICAgICAgICAgIyBjaGVjayBhbGwgZmllbGRzIGZvciBjb250ZW50IGlkCiAgICAgICAgICAgICAgICBOVU1CRVI6CiAgICAgICAgICAgICAgICBmb3IgbXkgJE51bWJlciAoIDEgLi4gNiApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgRkFRIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgbXkgJEZpZWxkID0gJEdldFBhcmFteyAnRmllbGQnIC4gJE51bWJlciB9OwoKICAgICAgICAgICAgICAgICAgICAjIHNraXAgZW1wdHkgZmllbGRzCiAgICAgICAgICAgICAgICAgICAgbmV4dCBOVU1CRVIgaWYgISRGaWVsZDsKCiAgICAgICAgICAgICAgICAgICAgIyBza2lwIGZpZWxkcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBjb250ZW50IGlkCiAgICAgICAgICAgICAgICAgICAgbmV4dCBOVU1CRVIgaWYgJEZpZWxkICF+IG17ICRBdHRhY2htZW50LT57Q29udGVudElEfSB9eG1zOwoKICAgICAgICAgICAgICAgICAgICAjIGZvdW5kIHRoZSBjb250ZW50IGlkCiAgICAgICAgICAgICAgICAgICAgJENvbnRlbnRJREZvdW5kID0gMTsKCiAgICAgICAgICAgICAgICAgICAgIyB3ZSBkbyBub3QgbmVlZCB0byBzZWFyY2ggZnVydGhlcgogICAgICAgICAgICAgICAgICAgIGxhc3QgTlVNQkVSOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgd2UgZG8gbm90IHdhbnQgdG8ga2VlcCB0aGlzIGF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQgd2FzIGRlbGV0ZWQgaW4gdGhlIHJpY2gtdGV4dCBlZGl0b3IKICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJENvbnRlbnRJREZvdW5kOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICRGaWxlSUQgPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50QWRkKAogICAgICAgICAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBJbmxpbmUgPT4gJElubGluZSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgIGlmICggISRGaWxlSUQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRJbmxpbmU7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH07CgogICAgICAgICAgICAjIHJld3JpdGUgdGhlIFVSTHMgb2YgdGhlIGlubGluZSBpbWFnZXMgZm9yIHRoZSB1cGxvYWRlZCBwaWN0dXJlcwogICAgICAgICAgICBteSAkT0sgPSAkRkFRT2JqZWN0LT5GQVFJbmxpbmVBdHRhY2htZW50VVJMVXBkYXRlKAogICAgICAgICAgICAgICAgQXR0YWNobWVudCA9PiAkQXR0YWNobWVudCwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgPT4gJEZvcm1JRCwKICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBGaWxlSUQgICAgID0+ICRGaWxlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgaWYgKCAhJE9LICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IHVwZGF0ZSB0aGUgaW5saW5lIGltYWdlIFVSTHMgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJmb3IgRkFRIEl0ZW0jICckR2V0UGFyYW17SXRlbUlEfSchIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZSggRm9ybUlEID0+ICRGb3JtSUQgKTsKCiAgICAgICAgIyBzZXQgZHluYW1pYyBmaWVsZHMKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIHNldCB0aGUgb2JqZWN0IElEIGRlcGVuZGluZyBvbiB0aGUgZmllbGQgY29uZmlndXJhdGlvbgogICAgICAgICAgICBteSAkT2JqZWN0SUQgPSAkR2V0UGFyYW17SXRlbUlEfTsKCiAgICAgICAgICAgICMgc2V0IHRoZSB2YWx1ZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRPYmplY3RJRCwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIGlmIHdlIG5lZWQgdG8gY2xvc2UgYSBwb3AtdXAgc2NyZWVuIG9yIG5vdAogICAgICAgIGlmICggJFNjcmVlblR5cGUgZXEgJ1BvcHVwJyApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlBvcHVwQ2xvc2UoCiAgICAgICAgICAgICAgICBVUkwgPT4gIkFjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPSRHZXRQYXJhbXtJdGVtSUR9IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0kR2V0UGFyYW17SXRlbUlEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQp9CgpzdWIgX01hc2tOZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRUcmVlVmlldyA9IDA7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgKSB7CiAgICAgICAgJFRyZWVWaWV3ID0gMTsKICAgIH0KCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgIG15ICVEYXRhOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBidWlsZCB2YWxpZCBzZWxlY3Rpb24KICAgICREYXRhe1ZhbGlkT3B0aW9ufSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17VmFsaWRJRH0gfHwgJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyBnZXQgY2F0ZWdvcmllcyAod2l0aCBjYXRlZ29yeSBsb25nIG5hbWVzKSB3aGVyZSB1c2VyIGhhcyByaWdodHMKICAgIG15ICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcyA9ICRGQVFPYmplY3QtPkdldFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2V0IG5vIHNlcnZlciBlcnJvciBjbGFzcyBhcyBkZWZhdWx0CiAgICAkUGFyYW17Q2F0ZWdvcnlJRFNlcnZlckVycm9yfSB8fD0gJyc7CgogICAgIyBidWlsZCBjYXRlZ29yeSBzZWxlY3Rpb24KICAgICREYXRhe0NhdGVnb3J5T3B0aW9ufSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiAkVXNlckNhdGVnb3JpZXNMb25nTmFtZXMsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdDYXRlZ29yeUlEJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIENsYXNzICAgICAgICA9PiAnVmFsaWRhdGVfUmVxdWlyZWQgTW9kZXJuaXplICcgLiAkUGFyYW17Q2F0ZWdvcnlJRFNlcnZlckVycm9yfSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBUcmVlVmlldyAgICAgPT4gJFRyZWVWaWV3LAogICAgKTsKCiAgICAjIGdldCB0aGUgbGFuZ3VhZ2UgbGlzdAogICAgbXkgJUxhbmd1YWdlcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UKICAgIG15ICRTZWxlY3RlZExhbmd1YWdlOwogICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2VJRH0gJiYgJExhbmd1YWdlc3sgJFBhcmFte0xhbmd1YWdlSUR9IH0gKSB7CgogICAgICAgICMgZ2V0IGxhbmd1YWdlIGZyb20gZ2l2ZW4gbGFuZ3VhZ2UgaWQKICAgICAgICAkU2VsZWN0ZWRMYW5ndWFnZSA9ICRMYW5ndWFnZXN7ICRQYXJhbXtMYW5ndWFnZUlEfSB9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgdXNlIHRoZSB1c2VyIGxhbmd1YWdlLCBvciBpZiBub3QgZm91bmQgJ2VuJwogICAgICAgICRTZWxlY3RlZExhbmd1YWdlID0gJExheW91dE9iamVjdC0+e1VzZXJMYW5ndWFnZX0gfHwgJ2VuJzsKCiAgICAgICAgIyBnZXQgdXNlciBsYW5ndWFnZSBJRAogICAgICAgIG15ICRTZWxlY3RlZExhbmd1YWdlSUQgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAkU2VsZWN0ZWRMYW5ndWFnZSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIExhbmR1YWdlSUQgZG9lcyBub3QgZXhpc3RzCiAgICAgICAgaWYgKCAhJFNlbGVjdGVkTGFuZ3VhZ2VJRCApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBsb3dlc3QgbGFuZ3VhZ2UgSUQKICAgICAgICAgICAgbXkgQExhbmd1YWdlSURzID0gc29ydCBrZXlzICVMYW5ndWFnZXM7CiAgICAgICAgICAgICRTZWxlY3RlZExhbmd1YWdlSUQgPSAkTGFuZ3VhZ2VJRHNbMF07CgogICAgICAgICAgICAjIHNldCB0aGUgbGFuZ3VhZ2Ugd2l0aCBsb3dlc3QgbGFuZ3VhZ2UgSUQgYXMgc2VsZWN0ZWQgbGFuZ3VhZ2UKICAgICAgICAgICAgJFNlbGVjdGVkTGFuZ3VhZ2UgPSAkTGFuZ3VhZ2VzeyRTZWxlY3RlZExhbmd1YWdlSUR9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIHRoZSBsYW5ndWFnZSBzZWxlY3Rpb24KICAgICREYXRhe0xhbmd1YWdlT3B0aW9ufSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVMYW5ndWFnZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnTGFuZ3VhZ2VJRCcsCiAgICAgICAgU2VsZWN0ZWRWYWx1ZSA9PiAkU2VsZWN0ZWRMYW5ndWFnZSwKICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgdGhlIHN0YXRlcyBsaXN0CiAgICBteSAlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBzZWxlY3RlZCBzdGF0ZQogICAgbXkgJFNlbGVjdGVkU3RhdGU7CiAgICBpZiAoICRQYXJhbXtTdGF0ZUlEfSAmJiAkU3RhdGVzeyAkUGFyYW17U3RhdGVJRH0gfSApIHsKCiAgICAgICAgIyBnZXQgc3RhdGUgZnJvbSBnaXZlbiBzdGF0ZSBpZAogICAgICAgICRTZWxlY3RlZFN0YXRlID0gJFN0YXRlc3sgJFBhcmFte1N0YXRlSUR9IH07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgZGVmYXVsdCBzdGF0ZQogICAgICAgICRTZWxlY3RlZFN0YXRlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkRlZmF1bHQ6OlN0YXRlJykgfHwgJ2ludGVybmFsIChhZ2VudCknOwogICAgfQoKICAgICMgYnVpbGQgdGhlIHN0YXRlIHNlbGVjdGlvbgogICAgJERhdGF7U3RhdGVPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVN0YXRlcywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRTZWxlY3RlZFN0YXRlLAogICAgICAgIFRyYW5zbGF0aW9uICAgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCBzY3JlZW4gdHlwZQogICAgbXkgJFNjcmVlblR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnU2NyZWVuVHlwZScgKSB8fCAnJzsKCiAgICBteSAkRmllbGRzZXRDbGFzcyA9ICcnOwogICAgaWYgKCAkU2NyZWVuVHlwZSBlcSAnUG9wdXAnICkgewogICAgICAgICRGaWVsZHNldENsYXNzID0gJ0ZpeGVkTGFiZWwnOwogICAgfQoKICAgICMgc2hvdyBGQVEgZWRpdCBzY3JlZW4KICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZBUUVkaXQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICBGaWVsZHNldENsYXNzID0+ICRGaWVsZHNldENsYXNzLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyBsYW5ndWFnZXMgZmllbGQKICAgIG15ICRNdWx0aUxhbmd1YWdlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6Ok11bHRpTGFuZ3VhZ2UnKTsKICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBhcHByb3ZhbCBmaWVsZAogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QXBwcm92YWxSZXF1aXJlZCcpICkgewoKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgICAgICBteSAlR3JvdXBzID0gcmV2ZXJzZSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgRkFRIGFwcHJvdmFsIGdyb3VwIGZyb20gY29uZmlnCiAgICAgICAgbXkgJEFwcHJvdmFsR3JvdXAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QXBwcm92YWxHcm91cCcpIHx8ICcnOwoKICAgICAgICAjIGJ1aWxkIHRoZSBhcHByb3ZhbCBzZWxlY3Rpb24gaWYgdXNlciBpcyBpbiB0aGUgYXBwcm92YWwgZ3JvdXAKICAgICAgICBpZiAoICRHcm91cHN7JEFwcHJvdmFsR3JvdXB9ICkgewoKICAgICAgICAgICAgJERhdGF7QXBwcm92YWxPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBcHByb3ZlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAwID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgMSA9PiAnWWVzJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtBcHByb3ZlZH0gfHwgMCwKICAgICAgICAgICAgICAgIENsYXNzID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FwcHJvdmFsJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVEYXRhfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IHRoZSBhdHRhY2htZW50IHVwbG9hZCBidXR0b24KICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRVcGxvYWQnLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgc2hvdyBhdHRhY2htZW50cwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkQXR0YWNobWVudCAoIEB7ICRQYXJhbXtBdHRhY2htZW50c30gfSApIHsKCiAgICAgICAgIyBkbyBub3Qgc2hvdyBpbmxpbmUgaW1hZ2VzIGFzIGF0dGFjaG1lbnRzCiAgICAgICAgIyAodGhleSBoYXZlIGEgY29udGVudCBpZCkKICAgICAgICBpZiAoICRBdHRhY2htZW50LT57Q29udGVudElEfSAmJiAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnQnLAogICAgICAgICAgICBEYXRhID0+ICRBdHRhY2htZW50LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiRkFROjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259IikgfHwgJyc7CgogICAgIyBhZGQgcmljaCB0ZXh0IGVkaXRvciBKYXZhU2NyaXB0CiAgICAjIG9ubHkgaWYgYWN0aXZhdGVkIGFuZCB0aGUgYnJvd3NlciBjYW4gaGFuZGxlIGl0CiAgICAjIG90aGVyd2lzZSBqdXN0IGEgdGV4dC1hcmVhIGlzIHNob3duCiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICYmICRDb25maWdPYmplY3QtPkdldCgnRkFROjpJdGVtOjpIVE1MJykgKSB7CgogICAgICAgICMgdXNlIGhlaWdodC93aWR0aCBkZWZpbmVkIGZvciB0aGlzIHNjcmVlbgogICAgICAgICRQYXJhbXtSaWNoVGV4dEhlaWdodH0gPSAkQ29uZmlnLT57UmljaFRleHRIZWlnaHR9IHx8IDA7CiAgICAgICAgJFBhcmFte1JpY2hUZXh0V2lkdGh9ICA9ICRDb25maWctPntSaWNoVGV4dFdpZHRofSAgfHwgMDsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1JpY2hUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICBteSAkSW50ZXJmYWNlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFnZW50OjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBzaG93IEZBUSBDb250ZW50CiAgICAkTGF5b3V0T2JqZWN0LT5GQVFDb250ZW50U2hvdygKICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJEZBUU9iamVjdCwKICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJEludGVyZmFjZVN0YXRlcywKICAgICAgICBGQVFEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBEeW5hbWljIGZpZWxkcwogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBza2lwIGZpZWxkcyB0aGF0IEhUTUwgY291bGQgbm90IGJlIHJldHJpZXZlZAogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgKICAgICAgICAgICAgJFBhcmFte0R5bmFtaWNGaWVsZEhUTUx9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGhlIEhUTUwgc3RyaW5ncyBmb3JtICRQYXJhbQogICAgICAgIG15ICREeW5hbWljRmllbGRIVE1MID0gJFBhcmFte0R5bmFtaWNGaWVsZEhUTUx9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEZpZWxkID0+ICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZXhhbXBsZSBvZiBkeW5hbWljIGZpZWxkcyBvcmRlciBjdXN0b21pemF0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgIExhYmVsID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgRmllbGQgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRTY3JlZW5UeXBlIG5lICdQb3B1cCcgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0VuZE5vcm1hbCcsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRTY3JlZW5UeXBlIGVxICdQb3B1cCcgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0VuZFNtYWxsJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFFZGl0JywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUV4cGxvcmVyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSb30gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgcm8gcGVybWlzc2lvbiEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJGQVE6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCBjb25maWcgZGF0YQogICAgbXkgJFN0YXJ0SGl0ID0gaW50KCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnRIaXQnICkgfHwgMSApOwogICAgbXkgJFNlYXJjaExpbWl0ID0gJENvbmZpZy0+e1NlYXJjaExpbWl0fSB8fCA1MDA7CiAgICBteSAkRmlsdGVyID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnJzsKICAgIG15ICRWaWV3ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVmlldycgKSAgIHx8ICcnOwogICAgbXkgJFNvcnRCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkQ29uZmlnLT57J1NvcnRCeTo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0ZBUUlEJzsKICAgIG15ICRPcmRlckJ5ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ09yZGVyQnknICkKICAgICAgICB8fCAkQ29uZmlnLT57J09yZGVyOjpEZWZhdWx0J30KICAgICAgICB8fCAnRG93bic7CgogICAgIyBnZXQgY2F0ZWdvcnkgaWQKICAgIG15ICRDYXRlZ29yeUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NhdGVnb3J5SUQnICkgfHwgMDsKCiAgICAjIGNoZWNrIGZvciBub24gbnVtZXJpYyBDYXRlZ29yeUlECiAgICBpZiAoICRDYXRlZ29yeUlEICF+IC9cZCsvICkgewogICAgICAgICRDYXRlZ29yeUlEID0gMDsKICAgIH0KCiAgICAjIGdldCBjYXRlZ29yeSBieSBuYW1lCiAgICBteSAkQ2F0ZWdvcnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2F0ZWdvcnknICkgfHwgJyc7CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIHRyeSB0byBnZXQgdGhlIENhdGVnb3J5IElEIGZyb20gY2F0ZWdvcnkgbmFtZSBpZiBubyBDYXRlZ29yeSBJRAogICAgaWYgKCAkQ2F0ZWdvcnkgJiYgISRDYXRlZ29yeUlEICkgewoKICAgICAgICAjIGdldCB0aGUgY2F0ZWdvcnkgdHJlZQogICAgICAgIG15ICRDYXRlZ29yeVRyZWUgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmV2ZXJzZSB0aGUgaGFzIGZvciBlYXN5IGxvb2t1cAogICAgICAgIG15ICVSZXZlcnNlQ2F0ZWdvcnlUcmVlID0gcmV2ZXJzZSAleyRDYXRlZ29yeVRyZWV9OwoKICAgICAgICAkQ2F0ZWdvcnlJRCA9ICRSZXZlcnNlQ2F0ZWdvcnlUcmVleyRDYXRlZ29yeX0gfHwgMDsKICAgIH0KCiAgICAjIGdldCBuYXZpZ2F0aW9uIGJhciBvcHRpb24KICAgIG15ICROYXYgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTmF2JyApIHx8ICcnOwoKICAgICMgZ2V0IHNlc3Npb24gb2JqZWN0CiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgc2F2ZSBjYXRlZ29yeSBpZCB0byBzZXNzaW9uLCB0byBiZSB1c2VkIGluIEZBUSBhZGQgc2NyZWVuCiAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0Vmlld2VkQ2F0ZWdvcnknLAogICAgICAgIFZhbHVlICAgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICk7CgogICAgIyBzdG9yZSBsYXN0IG92ZXJ2aWV3IHNjcmVlbiAoZm9yIGJhY2sgbWVudSBhY3Rpb24pCiAgICAjIGJ1dCBvbmx5IGlmIHRoZSBGQVEgZXhwbG9yZXIgaXMgbm90IHNob3duIGFzIG92ZXJsYXkKICAgIGlmICggISROYXYgfHwgJE5hdiBuZSAnTm9uZScgKSB7CgogICAgICAgIG15ICRVUkwgPSAiQWN0aW9uPUFnZW50RkFRRXhwbG9yZXI7U29ydEJ5PSRTb3J0QnkiCiAgICAgICAgICAgIC4gIjtDYXRlZ29yeUlEPSRDYXRlZ29yeUlEO05hdj0kTmF2IgogICAgICAgICAgICAuICI7T3JkZXJCeT0kT3JkZXJCeTtTdGFydEhpdD0kU3RhcnRIaXQiOwogICAgICAgICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbk92ZXJ2aWV3JywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVUkwsCiAgICAgICAgKTsKICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVUkwsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRyeSB0byBnZXQgdGhlIGNhdGVnb3J5IGRhdGEKICAgIG15ICVDYXRlZ29yeURhdGE7CiAgICBpZiAoJENhdGVnb3J5SUQpIHsKCiAgICAgICAgIyBnZXQgY2F0ZWdvcnkgZGF0YQogICAgICAgICVDYXRlZ29yeURhdGEgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICElQ2F0ZWdvcnlEYXRhICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJUaGUgQ2F0ZWdvcnlJRCAkQ2F0ZWdvcnlJRCBpcyBpbnZhbGlkLiIsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdXNlciBwZXJtaXNzaW9uCiAgICAgICAgbXkgJFBlcm1pc3Npb24gPSAkRkFRT2JqZWN0LT5DaGVja0NhdGVnb3J5VXNlclBlcm1pc3Npb24oCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgaWYgKCAhJFBlcm1pc3Npb24gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgaGF2ZSBubyBwZXJtaXNzaW9uIGZvciB0aGlzIGNhdGVnb3J5IScsCiAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkT3V0cHV0OwogICAgaWYgKCAkTmF2ICYmICROYXYgZXEgJ05vbmUnICkgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgc21hbGwgYW5kIG5vIE5hdmlnYXRpb24gYmFyCiAgICAgICAgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICAgICAgVHlwZSA9PiAnU21hbGwnLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZpZ2F0aW9uIGJhcgogICAgICAgICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgIH0KCiAgICAjIHNob3cgRkFRIHBhdGgKICAgICRMYXlvdXRPYmplY3QtPkZBUVBhdGhTaG93KAogICAgICAgIEZBUU9iamVjdCAgPT4gJEZBUU9iamVjdCwKICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIE5hdiAgICAgICAgPT4gJE5hdiwKICAgICk7CgogICAgIyBnZXQgYWxsIGRpcmVjdCBzdWJjYXRlZ29yaWVzIG9mIHRoZSBzZWxlY3RlZCBjYXRlZ29yeQogICAgbXkgJENhdGVnb3J5SURzUmVmID0gJEZBUU9iamVjdC0+QWdlbnRDYXRlZ29yeVNlYXJjaCgKICAgICAgICBQYXJlbnRJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2hvdyBzdWJjYXRlZ29yaWVzIGxpc3QKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1N1YmNhdGVnb3JpZXMnLAogICAgICAgIERhdGEgPT4ge30sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnLAogICAgICAgIERhdGEgPT4ge30sCiAgICApOwoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICBteSAkSW50ZXJmYWNlID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlR2V0KAogICAgICAgIE5hbWUgICA9PiAnaW50ZXJuYWwnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgbXkgJEludGVyZmFjZVN0YXRlcyA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBZ2VudDo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgdGhlcmUgYXJlIHN1YmNhdGVnb3JpZXMKICAgIGlmICggJENhdGVnb3J5SURzUmVmICYmIHJlZiAkQ2F0ZWdvcnlJRHNSZWYgZXEgJ0FSUkFZJyAmJiBAeyRDYXRlZ29yeUlEc1JlZn0gKSB7CgogICAgICAgICMgc2hvdyBkYXRhIGZvciBlYWNoIHN1YmNhdGVnb3J5CiAgICAgICAgZm9yIG15ICRTdWJDYXRlZ29yeUlEICggQHskQ2F0ZWdvcnlJRHNSZWZ9ICkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGNhdGVnb3J5IGRhdGEKICAgICAgICAgICAgbXkgJVN1YkNhdGVnb3J5RGF0YSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5R2V0KAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkU3ViQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIG51bWJlciBvZiBzdWJjYXRlZ29yaWVzIG9mIHRoaXMgc3ViY2F0ZWdvcnkKICAgICAgICAgICAgJFN1YkNhdGVnb3J5RGF0YXtTdWJDYXRlZ29yeUNvdW50fSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5Q291bnQoCiAgICAgICAgICAgICAgICBQYXJlbnRJRHMgPT4gWyRTdWJDYXRlZ29yeUlEXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCB0aGUgbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5CiAgICAgICAgICAgICRTdWJDYXRlZ29yeURhdGF7QXJ0aWNsZUNvdW50fSA9ICRGQVFPYmplY3QtPkZBUUNvdW50KAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRHMgID0+IFskU3ViQ2F0ZWdvcnlJRF0sCiAgICAgICAgICAgICAgICBJdGVtU3RhdGVzICAgPT4gJEludGVyZmFjZVN0YXRlcywKICAgICAgICAgICAgICAgIE9ubHlBcHByb3ZlZCA9PiAwLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IHRoZSBjYXRlZ29yeSBkYXRhCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHRSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmF2ID0+ICROYXYsCiAgICAgICAgICAgICAgICAgICAgJVN1YkNhdGVnb3J5RGF0YSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlzIGRpc3BsYXllZAogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICApOwogICAgfQoKICAgICMgc2VhcmNoIGFsbCBGQVEgYXJ0aWNsZXMgd2l0aGluIHRoZSBnaXZlbiBjYXRlZ29yeQogICAgbXkgQFZpZXdhYmxlRkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyRTb3J0QnldLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyRPcmRlckJ5XSwKICAgICAgICBMaW1pdCAgICAgICAgICAgID0+ICRTZWFyY2hMaW1pdCwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBTdGF0ZXMgICAgICAgICAgID0+ICRJbnRlcmZhY2VTdGF0ZXMsCiAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgICAgIENhdGVnb3J5SURzICAgICAgPT4gWyRDYXRlZ29yeUlEXSwKICAgICk7CgogICAgIyBidWlsZCBuZWNlc3Nhcnkgc3R1ZmYgZm9yIHRoZSBGQVEgYXJ0aWNsZSBsaXN0CiAgICBteSAkTGlua1BhZ2UgPSAnRmlsdGVyPScKICAgICAgICAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJEZpbHRlcikKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkVmlldykKICAgICAgICAuICc7TmF2PScgLiAkTmF2CiAgICAgICAgLiAnO1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkU29ydEJ5KQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRPcmRlckJ5KQogICAgICAgIC4gJztDYXRlZ29yeUlEPScgLiAkQ2F0ZWdvcnlJRAogICAgICAgIC4gJzsnOwogICAgbXkgJExpbmtTb3J0ID0gJ0ZpbHRlcj0nCiAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRGaWx0ZXIpCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFZpZXcpCiAgICAgICAgLiAnO05hdj0nIC4gJE5hdgogICAgICAgIC4gJztDYXRlZ29yeUlEPScgLiAkQ2F0ZWdvcnlJRAogICAgICAgIC4gJzsnOwogICAgbXkgJEZpbHRlckxpbmsgPSAnU29ydEJ5PScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRTb3J0QnkpCiAgICAgICAgLiAnO09yZGVyQnk9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJE9yZGVyQnkpCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFZpZXcpCiAgICAgICAgLiAnO05hdj0nIC4gJE5hdgogICAgICAgIC4gJztDYXRlZ29yeUlEPScgLiAkQ2F0ZWdvcnlJRAogICAgICAgIC4gJzsnOwoKICAgICMgZmluZCBvdXQgd2hpY2ggY29sdW1ucyBzaG91bGQgYmUgc2hvd24KICAgIG15IEBTaG93Q29sdW1uczsKICAgIGlmICggJENvbmZpZy0+e1Nob3dDb2x1bW5zfSApIHsKCiAgICAgICAgIyBnZXQgYWxsIHBvc3NpYmxlIGNvbHVtbnMgZnJvbSBjb25maWcKICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkQ29uZmlnLT57U2hvd0NvbHVtbnN9IH07CgogICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgIGZvciBteSAkTmFtZSAoIHNvcnQga2V5cyAlUG9zc2libGVDb2x1bW4gKSB7CiAgICAgICAgICAgIG5leHQgQ09MVU1OTkFNRSBpZiAhJFBvc3NpYmxlQ29sdW1ueyROYW1lfTsKICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICROYW1lOwogICAgICAgIH0KCiAgICAgICAgIyBlbmZvcmNlIEZBUSBudW1iZXIgY29sdW1uIHNpbmNlIGlzIHRoZSBsaW5rIE1hc3RlckFjdGlvbiBob29rCiAgICAgICAgaWYgKCAhJFBvc3NpYmxlQ29sdW1ueydOdW1iZXInfSApIHsKICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICdOdW1iZXInOwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIHRoZSB0aXRsZSB2YWx1ZSAob24gdG9wIG9mIHRoZSBhcnRpY2xlIGxpc3QpCiAgICBteSAkVGl0bGUgPSAkQ2F0ZWdvcnlEYXRhe05hbWV9CiAgICAgICAgfHwgJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkRlZmF1bHQ6OlJvb3RDYXRlZ29yeU5hbWUnKQogICAgICAgIHx8ICcnOwoKICAgICMgYnVpbGQgdGhlIEhUTUwgZm9yIHRoZSBsaXN0IG9mIEZBUSBhcnRpY2xlcyBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkKICAgIG15ICRGQVFJdGVtTGlzdEhUTUwgPSAkTGF5b3V0T2JqZWN0LT5GQVFMaXN0U2hvdygKICAgICAgICBGQVFJRHMgICAgID0+IFxAVmlld2FibGVGQVFJRHMsCiAgICAgICAgVG90YWwgICAgICA9PiBzY2FsYXIgQFZpZXdhYmxlRkFRSURzLAogICAgICAgIFZpZXcgICAgICAgPT4gJFZpZXcsCiAgICAgICAgRW52ICAgICAgICA9PiAkU2VsZiwKICAgICAgICBMaW5rUGFnZSAgID0+ICRMaW5rUGFnZSwKICAgICAgICBMaW5rU29ydCAgID0+ICRMaW5rU29ydCwKICAgICAgICBMaW5rRmlsdGVyID0+ICRGaWx0ZXJMaW5rLAoKICAgICAgICBUaXRsZU5hbWUgID0+ICdGQVEgQXJ0aWNsZXMnLAogICAgICAgIFRpdGxlVmFsdWUgPT4gJFRpdGxlLAoKICAgICAgICBMaW1pdCAgICAgICAgPT4gJFNlYXJjaExpbWl0LAogICAgICAgIEZpbHRlciAgICAgICA9PiAkRmlsdGVyLAogICAgICAgIEZpbHRlckxpbmsgICA9PiAkRmlsdGVyTGluaywKICAgICAgICBPcmRlckJ5ICAgICAgPT4gJE9yZGVyQnksCiAgICAgICAgU29ydEJ5ICAgICAgID0+ICRTb3J0QnksCiAgICAgICAgU2hvd0NvbHVtbnMgID0+IFxAU2hvd0NvbHVtbnMsCiAgICAgICAgT3V0cHV0ICAgICAgID0+IDEsCiAgICAgICAgTmF2ICAgICAgICAgID0+ICROYXYsCiAgICAgICAgRkFRVGl0bGVTaXplID0+ICRDb25maWctPntUaXRsZVNpemV9LAogICAgKTsKCiAgICAjIHNob3cgdGhlIEZBUSBhcnRpY2xlIGxpc3QKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZBUUl0ZW1MaXN0JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgRkFRSXRlbUxpc3RIVE1MID0+ICRGQVFJdGVtTGlzdEhUTUwsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzZXQgUXVpY2tTZWFyY2ggbW9kZQogICAgbXkgJE1vZGUgPSAnQWdlbnQnOwogICAgaWYgKCAkTmF2IGVxICdOb25lJyApIHsKICAgICAgICAkTW9kZSA9ICdBZ2VudFNtYWxsJzsKICAgIH0KCiAgICAjIHNob3cgUXVpY2tTZWFyY2gKICAgICRMYXlvdXRPYmplY3QtPkZBUVNob3dRdWlja1NlYXJjaCgKICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJE1vZGUsCiAgICAgICAgSW50ZXJmYWNlICAgICAgID0+ICRJbnRlcmZhY2UsCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRJbnRlcmZhY2VTdGF0ZXMsCiAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBOYXYgICAgICAgICAgICAgPT4gJE5hdiwKICAgICk7CgogICAgbXkgJUluZm9Cb3hSZXN1bHRzOwoKICAgICMgc2hvdyBsYXN0IGFkZGVkIGFuZCBsYXN0IHVwZGF0ZWQgYXJ0aWNsZXMKICAgIGZvciBteSAkVHlwZSAocXcoTGFzdENyZWF0ZSBMYXN0Q2hhbmdlKSkgewoKICAgICAgICBteSAkU2hvd09rID0gJExheW91dE9iamVjdC0+RkFRU2hvd0xhdGVzdE5ld3NCb3goCiAgICAgICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJFR5cGUsCiAgICAgICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBDYXRlZ29yeUlEICAgICAgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJEludGVyZmFjZVN0YXRlcywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgTmF2ICAgICAgICAgICAgID0+ICROYXYsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRTaG93T2sgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSB0aGUgTmV3c0JveFJlc3VsdAogICAgICAgICRJbmZvQm94UmVzdWx0c3skVHlwZX0gPSAkU2hvd09rOwogICAgfQoKICAgICMgc2hvdyB0b3AgdGVuIGFydGljbGVzCiAgICBteSAkU2hvd09rID0gJExheW91dE9iamVjdC0+RkFRU2hvd1RvcDEwKAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LAogICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnQWdlbnQnLAogICAgICAgIENhdGVnb3J5SUQgICAgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICBJbnRlcmZhY2UgICAgICAgPT4gJEludGVyZmFjZSwKICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJEludGVyZmFjZVN0YXRlcywKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIE5hdiAgICAgICAgICAgICA9PiAkTmF2LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkU2hvd09rICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgfQoKICAgICMgc3RvcmUgdGhlIE5ld3NCb3hSZXN1bHQKICAgICRJbmZvQm94UmVzdWx0c3tUb3AxMH0gPSAkU2hvd09rOwoKICAgICMgc2V0IHRoZSBTaWRlYmFyIHdpZHRoCiAgICBteSAkU2lkZWJhckNsYXNzID0gJ0xhcmdlJzsKCiAgICAjIGNoZWNrIGlmIGFsbCBJbmZvQm94ZXMgYXJlIGVtcHR5IGFuZCBoaWRlIHRoZSBTaWRlYmFyCiAgICBpZiAoCiAgICAgICAgJEluZm9Cb3hSZXN1bHRze0xhc3RDcmVhdGV9IGVxIC0xCiAgICAgICAgJiYgJEluZm9Cb3hSZXN1bHRze0xhc3RDaGFuZ2V9IGVxIC0xCiAgICAgICAgJiYgJEluZm9Cb3hSZXN1bHRze1RvcDEwfSBlcSAtMQogICAgICAgICkKICAgIHsKICAgICAgICAkU2lkZWJhckNsYXNzID0gJ0hpZGRlbic7CiAgICB9CgogICAgaWYgKCAkTmF2ICYmICROYXYgZXEgJ05vbmUnICkgewogICAgICAgICRTaWRlYmFyQ2xhc3MgPSAnTWVkaXVtJzsKICAgIH0KCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUV4cGxvcmVyJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIENhdGVnb3J5SUQgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgU2lkZWJhckNsYXNzID0+ICRTaWRlYmFyQ2xhc3MsCiAgICAgICAgICAgICVDYXRlZ29yeURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICBpZiAoICROYXYgJiYgJE5hdiBlcSAnTm9uZScgKSB7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoCiAgICAgICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIH0KCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUhpc3Rvcnk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICBpZiAoICEkU2VsZi0+e0FjY2Vzc1JvfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBybyBwZXJtaXNzaW9uIScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGdldCBuZWVkZWQgSXRlbSBpZAogICAgJEdldFBhcmFte0l0ZW1JRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnSXRlbUlEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkR2V0UGFyYW17SXRlbUlEfSApIHsKCiAgICAgICAgIyBlcnJvciBwYWdlCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJDYW4ndCBzaG93IGhpc3RvcnksIGFzIG5vIEl0ZW1JRCBpcyBnaXZlbiEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGdldCBGQVEgaXRlbSBkYXRhCiAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgIEl0ZW1GaWVsZHMgPT4gMCwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgIH0KCiAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgbXkgJFBlcm1pc3Npb24gPSAkRkFRT2JqZWN0LT5DaGVja0NhdGVnb3J5VXNlclBlcm1pc3Npb24oCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICk7CgogICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgIGlmICggISRQZXJtaXNzaW9uICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBoYXZlIG5vIHBlcm1pc3Npb24gZm9yIHRoaXMgY2F0ZWdvcnkhJywKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEZBUSBhcnRpY2xlIGhpc3RvcnkKICAgIG15ICRIaXN0b3J5ID0gJEZBUU9iamVjdC0+RkFRSGlzdG9yeUdldCgKICAgICAgICBJdGVtSUQgPT4gJEZBUURhdGF7SXRlbUlEfSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBmb3IgbXkgJEhpc3RvcnlFbnRyeSAoIEB7JEhpc3Rvcnl9ICkgewoKICAgICAgICAjIHJlcGxhY2UgSUQgdG8gZnVsbCB1c2VyIG5hbWUgb24gQ3JlYXRlZEJ5IGtleQogICAgICAgIG15ICVVc2VyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkSGlzdG9yeUVudHJ5LT57Q3JlYXRlZEJ5fSwKICAgICAgICAgICAgQ2FjaGVkID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkSGlzdG9yeUVudHJ5LT57Q3JlYXRlZEJ5fSA9ICIkVXNlcntVc2VyTG9naW59ICgkVXNlcntVc2VyRmlyc3RuYW1lfSAkVXNlcntVc2VyTGFzdG5hbWV9KSI7CgogICAgICAgICMgY2FsbCBSb3cgYmxvY2sKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUm93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAleyRIaXN0b3J5RW50cnl9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICAgICAgVGl0bGUgPT4gJ0ZBUUhpc3RvcnknLAogICAgKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUhpc3RvcnknLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigKICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUpvdXJuYWw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBmb3IgZnJvbnRlbmQKICAgIG15ICRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IGpvdXJuYWwgbGltaXQgZGF0YQogICAgbXkgJEpvdXJuYWxMaW1pdCA9ICRDb25maWctPntKb3VybmFsTGltaXR9IHx8IDUwMDsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSb30gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgcm8gcGVybWlzc2lvbiEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgSm91cm5hbCBlbnRyaWVzCiAgICBteSAkSm91cm5hbCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKS0+SGlzdG9yeUdldCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGZpbmQgb3V0IHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHNob3duCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRDb25maWctPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgbXkgJVBvc3NpYmxlQ29sdW1uID0gJXsgJENvbmZpZy0+e1Nob3dDb2x1bW5zfSB9OwoKICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgQ09MVU1OTkFNRToKICAgICAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJVBvc3NpYmxlQ29sdW1uICkgewogICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkTmFtZTsKICAgICAgICB9CgogICAgICAgICMgZW5mb3JjZSBGQVEgbnVtYmVyIGNvbHVtbiBzaW5jZSBpcyB0aGUgbGluayBNYXN0ZXJBY3Rpb24gaG9vawogICAgICAgIGlmICggISRQb3NzaWJsZUNvbHVtbnsnTnVtYmVyJ30gKSB7CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAnTnVtYmVyJzsKICAgICAgICB9CiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFZhbHVlID0+ICdGQVEgSm91cm5hbCcsCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBvdXRwdXQgSm91cm5hbAogICAgJE91dHB1dCAuPSAkU2VsZi0+X0ZBUUpvdXJuYWxTaG93KAogICAgICAgIEpvdXJuYWwgICAgICAgICAgPT4gJEpvdXJuYWwsCiAgICAgICAgVG90YWwgICAgICAgICAgICA9PiBzY2FsYXIgQHskSm91cm5hbH0sCiAgICAgICAgVGl0bGVOYW1lICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUSBKb3VybmFsJyksCiAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAkSm91cm5hbExpbWl0LAogICAgICAgIFNob3dDb2x1bW5zICAgICAgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICBKb3VybmFsVGl0bGVTaXplID0+ICRDb25maWctPntUaXRsZVNpemV9LAogICAgKTsKCiAgICAjIGJ1aWxkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9GQVFKb3VybmFsU2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgbG9va3VwIGxhdGVzdCB1c2VkIHZpZXcgbW9kZQogICAgaWYgKCAhJFBhcmFte1ZpZXd9ICYmICRTZWxmLT57ICdVc2VyRkFRSm91cm5hbE92ZXJ2aWV3JyAuICRTZWxmLT57QWN0aW9ufSB9ICkgewogICAgICAgICRQYXJhbXtWaWV3fSA9ICRTZWxmLT57ICdVc2VyRkFRSm91cm5hbE92ZXJ2aWV3JyAuICRTZWxmLT57QWN0aW9ufSB9OwogICAgfQoKICAgICMgc2V0IGZyb250ZW5kCiAgICBteSAkRnJvbnRlbmQgPSAnQWdlbnQnOwoKICAgICMgc2V0IGRlZmF1bHQgdmlldyBtb2RlIHRvICdzbWFsbCcKICAgIG15ICRWaWV3ID0gJFBhcmFte1ZpZXd9IHx8ICdTbWFsbCc7CgogICAgIyBnZXQgc2Vzc2lvbiBvYmplY3QKICAgIG15ICRTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyk7CgogICAgIyBzdG9yZSBsYXRlc3QgdmlldyBtb2RlCiAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdVc2VyRkFRSm91cm5hbE92ZXJ2aWV3JyAuICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBWYWx1ZSAgICAgPT4gJFZpZXcsCiAgICApOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgYmFja2VuZCBmcm9tIGNvbmZpZwogICAgbXkgJEJhY2tlbmRzID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkZyb250ZW5kOjpKb3VybmFsT3ZlcnZpZXcnKTsKICAgIGlmICggISRCYWNrZW5kcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTmVlZCBjb25maWcgb3B0aW9uIEZBUTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3JywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGhhc2gtcmVmCiAgICBpZiAoIHJlZiAkQmFja2VuZHMgbmUgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICdDb25maWcgb3B0aW9uIEZBUTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3IG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGNvbmZpZyBrZXkKICAgIGlmICggISRCYWNrZW5kcy0+eyRWaWV3fSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgJyRWaWV3JyEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBuYXZpZ2F0aW9uIGJhcgogICAgbXkgJFN0YXJ0SGl0ID0gaW50KCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnRIaXQnICkgfHwgMSApOwoKICAgICMgZ2V0IHBlcnNvbmFsIHBhZ2Ugc2hvd24gY291bnQKICAgIG15ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSA9ICdVc2VyRkFRSm91cm5hbE92ZXJ2aWV3JyAuICRWaWV3IC4gJ1BhZ2VTaG93bic7CiAgICBteSAkUGFnZVNob3duICAgICAgICAgICAgICAgPSAkU2VsZi0+eyRQYWdlU2hvd25QcmVmZXJlbmNlc0tleX0gfHwgMTA7CiAgICBteSAkR3JvdXAgICAgICAgICAgICAgICAgICAgPSAnRkFRSm91cm5hbE92ZXJ2aWV3JyAuICRWaWV3IC4gJ1BhZ2VTaG93bic7CgogICAgIyBjaGVjayBzdGFydCBvcHRpb24sIGlmIGhpZ2hlciB0aGVuIGVsZW1lbnRzIGF2YWlsYWJsZSwgc2V0CiAgICAjIGl0IHRvIHRoZSBsYXN0IG92ZXJ2aWV3IHBhZ2UgKFRoYW5rcyB0byBTdGVmYW4gU2NobWlkdCEpCiAgICBpZiAoICRTdGFydEhpdCA+ICRQYXJhbXtUb3RhbH0gKSB7CiAgICAgICAgbXkgJFBhZ2VzID0gaW50KCAoICRQYXJhbXtUb3RhbH0gLyAkUGFnZVNob3duICkgKyAwLjk5OTk5ICk7CiAgICAgICAgJFN0YXJ0SGl0ID0gKCAoICRQYWdlcyAtIDEgKSAqICRQYWdlU2hvd24gKSArIDE7CiAgICB9CgogICAgIyBnZXQgZGF0YSBzZWxlY3Rpb24KICAgIG15ICVEYXRhOwogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgnUHJlZmVyZW5jZXNHcm91cHMnKTsKICAgIGlmICggJENvbmZpZyAmJiAkQ29uZmlnLT57JEdyb3VwfSAmJiAkQ29uZmlnLT57JEdyb3VwfS0+e0RhdGF9ICkgewogICAgICAgICVEYXRhID0gJXsgJENvbmZpZy0+eyRHcm91cH0tPntEYXRhfSB9OwogICAgfQoKICAgICMgc2V0IHBhZ2UgbGltaXQgYW5kIGJ1aWxkIHBhZ2UgbmF2aWdhdGlvbgogICAgbXkgJExpbWl0ID0gJFBhcmFte0xpbWl0fSB8fCAyMF8wMDA7CiAgICBteSAlUGFnZU5hdiA9ICRMYXlvdXRPYmplY3QtPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgQWN0aW9uICAgID0+ICdBY3Rpb249JyAuICRMYXlvdXRPYmplY3QtPntBY3Rpb259LAogICAgICAgIExpbmsgICAgICA9PiAkUGFyYW17TGlua1BhZ2V9LAogICAgKTsKCiAgICAjIGJ1aWxkIHNob3duIEZBUSBhcnRpY2xlcyBvbiBhIHBhZ2UKICAgICRQYXJhbXtSZXF1ZXN0ZWRVUkx9ICAgID0gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iOwogICAgJFBhcmFte0dyb3VwfSAgICAgICAgICAgPSAkR3JvdXA7CiAgICAkUGFyYW17UHJlZmVyZW5jZXNLZXl9ICA9ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleTsKICAgICRQYXJhbXtQYWdlU2hvd25TdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgTmFtZSAgICAgICA9PiAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXksCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFnZVNob3duLAogICAgICAgIERhdGEgICAgICAgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHN0b3JlIGxhc3Qgb3ZlcnZpZXcgc2NyZWVuIChmb3IgYmFjayBtZW51IGFjdGlvbikKICAgICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgVmFsdWUgICAgID0+ICRQYXJhbXtSZXF1ZXN0ZWRVUkx9LAogICAgKTsKICAgICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFBhcmFte1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgYnVpbGQgbmF2aWdhdGlvbiBiYXIgY29udGVudAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgIyBsb29wIG92ZXIgY29uZmlndXJlZCBiYWNrLWVuZHMKICAgIGZvciBteSAkQmFja2VuZCAoIHNvcnQga2V5cyAleyRCYWNrZW5kc30gKSB7CgogICAgICAgICMgYnVpbGQgbmF2aWdhdGlvbiBiYXIgdmlldyBtb2RlCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY3VycmVudCB2aWV3IGlzIGNvbmZpZ3VyZWQgaW4gYmFja2VuZAogICAgICAgIGlmICggJFZpZXcgZXEgJEJhY2tlbmQgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZU5vdFNlbGVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBwYWdlIG5hdmlnYXRpb24gaXMgYXZhaWxhYmxlCiAgICBpZiAoJVBhZ2VOYXYpIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhZ2VOYXYsCiAgICAgICAgKTsKCiAgICAgICAgIyBkb24ndCBzaG93IGNvbnRleHQgc2V0dGluZ3MgaW4gQUpBWCBjYXNlIChlLiBnLiBpbiBjdXN0b21lciBGQVEgaGlzdG9yeSksCiAgICAgICAgIyBiZWNhdXNlIHRoZSBzdWJtaXQgd2l0aCBwYWdlIHJlbG9hZCB3aWxsIG5vdCB3b3JrIHRoZXJlCiAgICAgICAgaWYgKCAhJFBhcmFte0FKQVh9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NvbnRleHRTZXR0aW5ncycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFnZU5hdiwKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIEhUTUwgY29udGVudAogICAgbXkgJE91dHB1dE5hdkJhciA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRT3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFZpZXcgPT4gJFZpZXcsCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNyZWF0ZSBvdXRwdXQKICAgIG15ICRPdXRwdXRSYXcgPSAkT3V0cHV0TmF2QmFyOwoKICAgICMgbG9hZCBtb2R1bGUKICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0gKSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGJhY2tlbmQgb2JqZWN0CiAgICBteSAkT2JqZWN0ID0gJEJhY2tlbmRzLT57JFZpZXd9LT57TW9kdWxlfS0+bmV3KCAleyRTZWxmfSApOwogICAgcmV0dXJuIGlmICEkT2JqZWN0OwoKICAgICMgcnVuIG1vZHVsZQogICAgbXkgJE91dHB1dCA9ICRPYmplY3QtPlJ1bigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgRnJvbnRlbmQgID0+ICRGcm9udGVuZCwKICAgICAgICBUaXRsZVNpemUgPT4gJFBhcmFte0pvdXJuYWxUaXRsZVNpemV9LAogICAgKTsKCiAgICAkT3V0cHV0UmF3IC49ICRPdXRwdXQ7CgogICAgIyBjcmVhdGUgb3ZlcnZpZXcgbmF2aWdhdGlvbiBiYXIKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIHJldHVybiBjb250ZW50IGlmIGF2YWlsYWJsZQogICAgcmV0dXJuICRPdXRwdXRSYXc7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUUxhbmd1YWdlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSd30gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgcncgcGVybWlzc2lvbiEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJUdldFBhcmFtOwoKICAgIG15ICRNdWx0aUxhbmd1YWdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGQVE6Ok11bHRpTGFuZ3VhZ2UnKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJEZBUU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2hhbmdlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlJyAmJiAkTXVsdGlMYW5ndWFnZSApIHsKCiAgICAgICAgIyBnZXQgdGhlIExhbmd1YWdlSUQKICAgICAgICBteSAkTGFuZ3VhZ2VJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdMYW5ndWFnZUlEJyApIHx8ICcnOwoKICAgICAgICAjIGNoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMKICAgICAgICBpZiAoICEkTGFuZ3VhZ2VJRCApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gTGFuZ3VhZ2VJRCBpcyBnaXZlbiEnLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGxhbmd1YWdlIGRhdGEKICAgICAgICBteSAlTGFuZ3VhZ2VEYXRhID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VHZXQoCiAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJExhbmd1YWdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIG91dHB1dCBjaGFuZ2UgbGFuZ3VhZ2Ugc2NyZWVuCiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0NoYW5nZScsCiAgICAgICAgICAgICVMYW5ndWFnZURhdGEsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRTGFuZ3VhZ2UnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjaGFuZ2UgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlQWN0aW9uJyAmJiAkTXVsdGlMYW5ndWFnZSApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgY2hlY2sgZm9yIG5hbWUgYW5kIGxhbmd1YWdlIGlkCiAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KExhbmd1YWdlSUQgTmFtZSkpIHsKCiAgICAgICAgICAgICMgc3RvcmUgbmVlZGVkIHBhcmFtZXRlcnMgaW4gJUdldFBhcmFtIHRvIG1ha2UgaXQgcmUtbG9hZGFibGUKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwoKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewoKICAgICAgICAgICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAgICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgID0+ICdDaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgIE5hbWVTZXJ2ZXJFcnJvciAgICAgICAgPT4gJ1NlcnZlckVycm9yJywKICAgICAgICAgICAgICAgICAgICBOYW1lU2VydmVyRXJyb3JNZXNzYWdlID0+ICdUaGUgbmFtZSBpcyByZXF1aXJlZCEnLAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGZvb3RlcgogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBmb3IgZHVwbGljYXRlIGxhbmd1YWdlIG5hbWUKICAgICAgICBteSAkTGFuZ3VhZ2VFeGlzdHNBbHJlYWR5ID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VEdXBsaWNhdGVDaGVjaygKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkR2V0UGFyYW17TmFtZX0sCiAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJEdldFBhcmFte0xhbmd1YWdlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgdGhlIGVkaXQgc2NyZWVuIGFnYWluCiAgICAgICAgaWYgKCRMYW5ndWFnZUV4aXN0c0FscmVhZHkpIHsKCiAgICAgICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgICA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgICAgIE5hbWVTZXJ2ZXJFcnJvciAgICAgICAgPT4gJ1NlcnZlckVycm9yJywKICAgICAgICAgICAgICAgIE5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UgPT4gJ1RoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhJywKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZvb3RlcgogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UKICAgICAgICBteSAkTGFuZ3VhZ2VVcGRhdGVTdWNjZXNzZnVsID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VVcGRhdGUoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJExhbmd1YWdlVXBkYXRlU3VjY2Vzc2Z1bCApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgIEluZm8gPT4gJ0ZBUSBsYW5ndWFnZSB1cGRhdGVkIScsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUxhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FkZCcgJiYgJE11bHRpTGFuZ3VhZ2UgKSB7CgogICAgICAgICMgZ2V0IHRoZSBuZXcgbmFtZQogICAgICAgICRHZXRQYXJhbXtOYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBIVE1MIG91dHB1dAogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdBZGQnLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUxhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYWRkIGFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FkZEFjdGlvbicgJiYgJE11bHRpTGFuZ3VhZ2UgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGdldCB0aGUgbmFtZQogICAgICAgICRHZXRQYXJhbXtOYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwoKICAgICAgICAjIGNoZWNrIGZvciBuYW1lCiAgICAgICAgaWYgKCAhJEdldFBhcmFte05hbWV9ICkgewoKICAgICAgICAgICAgIyBIVE1MIG91dHB1dAogICAgICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgID0+ICdBZGQnLAogICAgICAgICAgICAgICAgTmFtZVNlcnZlckVycm9yICAgICAgICA9PiAnU2VydmVyRXJyb3InLAogICAgICAgICAgICAgICAgTmFtZVNlcnZlckVycm9yTWVzc2FnZSA9PiAnVGhlIG5hbWUgaXMgcmVxdWlyZWQhJywKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZvb3RlcgogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBkdXBsaWNhdGUgbGFuZ3VhZ2UgbmFtZQogICAgICAgIG15ICRMYW5ndWFnZUV4aXN0c0FscmVhZHkgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUR1cGxpY2F0ZUNoZWNrKAogICAgICAgICAgICBOYW1lICAgPT4gJEdldFBhcmFte05hbWV9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyB0aGUgZWRpdCBzY3JlZW4gYWdhaW4KICAgICAgICBpZiAoJExhbmd1YWdlRXhpc3RzQWxyZWFkeSkgewogICAgICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgID0+ICdBZGQnLAogICAgICAgICAgICAgICAgTmFtZVNlcnZlckVycm9yICAgICAgICA9PiAnU2VydmVyRXJyb3InLAogICAgICAgICAgICAgICAgTmFtZVNlcnZlckVycm9yTWVzc2FnZSA9PiAiVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEiLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFMYW5ndWFnZScsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CgogICAgICAgICMgYWRkIHRoZSBuZXcgbGFuZ3VhZ2UKICAgICAgICBteSAkTGFuZ3VhZ2VBZGRTdWNjZXNzZnVsID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VBZGQoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJExhbmd1YWdlQWRkU3VjY2Vzc2Z1bCApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgb3ZlcnZpZXcKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgSW5mbyA9PiAnRkFRIGxhbmd1YWdlIGFkZGVkIScsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGRlbGV0ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0RlbGV0ZScgJiYgJE11bHRpTGFuZ3VhZ2UgKSB7CgogICAgICAgICMgZ2V0IHRoZSBMYW5ndWFnZUlECiAgICAgICAgbXkgJExhbmd1YWdlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTGFuZ3VhZ2VJRCcgKSB8fCAnJzsKCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgaWYgKCAhJExhbmd1YWdlSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIExhbmd1YWdlSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBsYW5ndWFnZSBkYXRhCiAgICAgICAgbXkgJUxhbmd1YWdlRGF0YSA9ICRGQVFPYmplY3QtPkxhbmd1YWdlR2V0KAogICAgICAgICAgICBMYW5ndWFnZUlEID0+ICRMYW5ndWFnZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICElTGFuZ3VhZ2VEYXRhICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgIG15IEBBZmZlY3RlZEl0ZW1zID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgICAgICAgICBMYW5ndWFnZUlEcyA9PiBbJExhbmd1YWdlSURdLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgY2FsbCBEZWxldGUgYmxvY2sKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGVsZXRlJywKICAgICAgICAgICAgRGF0YSA9PiB7JUxhbmd1YWdlRGF0YX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgdGhlIGRpYWxvZyB0eXBlLiBBcyBkZWZhdWx0LCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgICAgICBteSAkRGlhbG9nVHlwZSA9ICdDb25maXJtYXRpb24nOwoKICAgICAgICAjIGRpc3BsYXkgbGlzdCBvZiBhZmZlY3RlZCBGQVEgYXJ0aWNsZXMKICAgICAgICBpZiAoQEFmZmVjdGVkSXRlbXMpIHsKCiAgICAgICAgICAgICMgc2V0IHRoZSBkaWFsb2cgdHlwZSB0byBoYXZlIG9ubHkgMSBidXR0b246IE9LCiAgICAgICAgICAgICREaWFsb2dUeXBlID0gJ01lc3NhZ2UnOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBZmZlY3RlZEl0ZW1zJywKICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkSXRlbUlEIChAQWZmZWN0ZWRJdGVtcykgewoKICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBhcnRpY2xlCiAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIEZBUSBhcnRpY2xlCiAgICAgICAgICAgICAgICBuZXh0IElURU1JRCBpZiAhJUZBUURhdGE7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQWZmZWN0ZWRJdGVtc1JvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9BZmZlY3RlZEl0ZW1zJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVMYW5ndWFnZURhdGF9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgY29udGVudAogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7fSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHRoZSByZXR1cm5lZCBkYXRhIHN0cnVjdHVyZQogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICBIVE1MICAgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIERpYWxvZ1R5cGUgPT4gJERpYWxvZ1R5cGUsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXR1cm4gSlNPTi1TdHJpbmcgYmVjYXVzZSBvZiBBSkFYLU1vZGUKICAgICAgICBteSAkT3V0cHV0SlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoIERhdGEgPT4gXCVEYXRhICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0SlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGRlbGV0ZSBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWxldGVBY3Rpb24nICYmICRNdWx0aUxhbmd1YWdlICkgewoKICAgICAgICAjIGdldCB0aGUgTGFuZ3VhZ2VJRAogICAgICAgIG15ICRMYW5ndWFnZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0xhbmd1YWdlSUQnICkgfHwgJyc7CgogICAgICAgICMgY2hlY2sgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgICAgIGlmICggISRMYW5ndWFnZUlEICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdObyBMYW5ndWFnZUlEIGlzIGdpdmVuIScsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbGFuZ3VhZ2UgZGF0YQogICAgICAgIG15ICVMYW5ndWFnZURhdGEgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUdldCgKICAgICAgICAgICAgTGFuZ3VhZ2VJRCA9PiAkTGFuZ3VhZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJUxhbmd1YWdlRGF0YSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0aGUgbGFuZ3VhZ2UKICAgICAgICBteSAkQ291bGREZWxldGVMYW5ndWFnZSA9ICRGQVFPYmplY3QtPkxhbmd1YWdlRGVsZXRlKAogICAgICAgICAgICBMYW5ndWFnZUlEID0+ICRMYW5ndWFnZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJENvdWxkRGVsZXRlTGFuZ3VhZ2UpIHsKCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gZXhwbG9yZXIsIHdoZW4gdGhlIGRlbGV0aW9uIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRGQVFMYW5ndWFnZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gZGVsZXRlIGZhaWxlZAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBsYW5ndWFnZSAkTGFuZ3VhZ2VJRCEiLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgSFRNTCBvdXRwdXQKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9FZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25MaXN0JywKICAgICAgICBEYXRhID0+IHt9LAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHt9LAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1VwZGF0ZScsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIHNob3dzIGhlYWRlcgogICAgaWYgKCAkUGFyYW17QWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyRWRpdCcsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJBZGQnLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfT3ZlcnZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkT3V0cHV0ID0gJyc7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIG91dHB1dCBvdmVydmlldyBibG9ja3MKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHt9LAogICAgKTsKCiAgICBteSAkTXVsdGlMYW5ndWFnZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CiAgICBpZiAoJE11bHRpTGFuZ3VhZ2UpIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uTGlzdCcsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uQWRkJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdCcsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgZ2V0IGxhbmd1YWdlcyBsaXN0CiAgICAgICAgbXkgJUxhbmd1YWdlcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZXJlIGFyZSBhbnkgbGFuZ3VhZ2VzLCB0aGV5IGFyZSBzaG93bgogICAgICAgIGlmICglTGFuZ3VhZ2VzKSB7CiAgICAgICAgICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIHNvcnQgeyAkTGFuZ3VhZ2VzeyRhfSBjbXAgJExhbmd1YWdlc3skYn0gfSBrZXlzICVMYW5ndWFnZXMgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgbGFuZ3VhZ2VzIHJlc3VsdAogICAgICAgICAgICAgICAgbXkgJUxhbmd1YWdlRGF0YSA9ICRGQVFPYmplY3QtPkxhbmd1YWdlR2V0KAogICAgICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJExhbmd1YWdlSUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICNvdXRwdXQgcmVzdWx0cwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHRSb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyVMYW5ndWFnZURhdGF9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGlzYWJsZWQnLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUVByaW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSb30gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgcm8gcGVybWlzc2lvbiEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJE91dHB1dDsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKICAgICRHZXRQYXJhbXtJdGVtSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ0l0ZW1JRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJEdldFBhcmFte0l0ZW1JRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBJdGVtSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgb2JqZWN0CiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICMgZ2V0IEZBUSBpdGVtIGRhdGEKICAgIG15ICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICggISVGQVFEYXRhICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgfQoKICAgICMgY2hlY2sgdXNlciBwZXJtaXNzaW9uCiAgICBteSAkUGVybWlzc2lvbiA9ICRGQVFPYmplY3QtPkNoZWNrQ2F0ZWdvcnlVc2VyUGVybWlzc2lvbigKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBDYXRlZ29yeUlEID0+ICRGQVFEYXRhe0NhdGVnb3J5SUR9LAogICAgKTsKCiAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgaWYgKCAhJFBlcm1pc3Npb24gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IGhhdmUgbm8gcGVybWlzc2lvbiBmb3IgdGhpcyBjYXRlZ29yeSEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbGluayBvYmplY3QKICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKCiAgICAjIGdldCBsaW5rZWQgb2JqZWN0cwogICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSAkTGlua09iamVjdC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICBPYmplY3QgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxpbmsgdHlwZSBsaXN0CiAgICBteSAlTGlua1R5cGVMaXN0ID0gJExpbmtPYmplY3QtPlR5cGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBsaW5rIGRhdGEKICAgIG15ICVMaW5rRGF0YTsKICAgIGlmICggJExpbmtMaXN0V2l0aERhdGEgJiYgcmVmICRMaW5rTGlzdFdpdGhEYXRhIGVxICdIQVNIJyAmJiAleyRMaW5rTGlzdFdpdGhEYXRhfSApIHsKICAgICAgICAlTGlua0RhdGEgPSAkTGF5b3V0T2JqZWN0LT5MaW5rT2JqZWN0VGFibGVDcmVhdGUoCiAgICAgICAgICAgIExpbmtMaXN0V2l0aERhdGEgPT4gJExpbmtMaXN0V2l0aERhdGEsCiAgICAgICAgICAgIFZpZXdNb2RlICAgICAgICAgPT4gJ1NpbXBsZVJhdycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIHByZXBhcmUgZmllbGRzIGRhdGEKICAgIEZJRUxEOgogICAgZm9yIG15ICRGaWVsZCAocXcoRmllbGQxIEZpZWxkMiBGaWVsZDMgRmllbGQ0IEZpZWxkNSBGaWVsZDYpKSB7CiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZBUURhdGF7JEZpZWxkfTsKCiAgICAgICAgIyBubyBxdW90aW5nIGlmIEhUTUwgdmlldyBpcyBlbmFibGVkCiAgICAgICAgbmV4dCBGSUVMRCBpZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpOwoKICAgICAgICAjIEhUTUwgcXVvdGluZwogICAgICAgICRGQVFEYXRheyRGaWVsZH0gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBOZXdMaW5lICAgICAgICA9PiAwLAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkRkFRRGF0YXskRmllbGR9LAogICAgICAgICAgICBWTWF4ICAgICAgICAgICA9PiA1MDAwLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdXNlciBvYmplY3QKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIGdldCB1c2VyIGluZm8gKENyZWF0ZWRCeSkKICAgIG15ICVVc2VySW5mbyA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJEZBUURhdGF7Q3JlYXRlZEJ5fQogICAgKTsKICAgICRQYXJhbXtDcmVhdGVkQnlMb2dpbn0gPSAkVXNlckluZm97VXNlckxvZ2lufTsKCiAgICAjIGdldCB1c2VyIGluZm8gKENoYW5nZWRCeSkKICAgICVVc2VySW5mbyA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJEZBUURhdGF7Q2hhbmdlZEJ5fQogICAgKTsKICAgICRQYXJhbXtDaGFuZ2VkQnlMb2dpbn0gPSAkVXNlckluZm97VXNlckxvZ2lufTsKCiAgICAjIGdldCBQREYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgZ2VuZXJhdGUgUERGIG91dHB1dAogICAgbXkgJFByaW50ZWRCeSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgncHJpbnRlZCBieScpOwogICAgbXkgJFRpbWUgICAgICA9ICRMYXlvdXRPYmplY3QtPntUaW1lfTsKICAgIG15ICVQYWdlOwoKICAgICMgZ2V0IG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCiAgICAkUGFnZXtNYXhQYWdlc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgJFBhZ2V7TWF4UGFnZXN9ID0gMTAwOwogICAgfQogICAgbXkgJEhlYWRlclJpZ2h0ICA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpGQVFIb29rJykgLiAkRkFRRGF0YXtOdW1iZXJ9OwogICAgbXkgJEhlYWRsaW5lTGVmdCA9ICRIZWFkZXJSaWdodDsKICAgIG15ICRUaXRsZSAgICAgICAgPSAkSGVhZGVyUmlnaHQ7CiAgICBpZiAoICRGQVFEYXRhe1RpdGxlfSApIHsKICAgICAgICAkSGVhZGxpbmVMZWZ0ID0gJEZBUURhdGF7VGl0bGV9OwogICAgICAgICRUaXRsZSAuPSAnIC8gJyAuICRGQVFEYXRhe1RpdGxlfTsKICAgIH0KCiAgICAkUGFnZXtNYXJnaW5Ub3B9ICAgID0gMzA7CiAgICAkUGFnZXtNYXJnaW5SaWdodH0gID0gNDA7CiAgICAkUGFnZXtNYXJnaW5Cb3R0b219ID0gNDA7CiAgICAkUGFnZXtNYXJnaW5MZWZ0fSAgID0gNDA7CiAgICAkUGFnZXtIZWFkZXJSaWdodH0gID0gJEhlYWRlclJpZ2h0OwogICAgJFBhZ2V7Rm9vdGVyTGVmdH0gICA9ICcnOwogICAgJFBhZ2V7UGFnZVRleHR9ICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUGFnZScpOwogICAgJFBhZ2V7UGFnZUNvdW50fSAgICA9IDE7CgogICAgIyBjcmVhdGUgbmV3IFBERiBkb2N1bWVudAogICAgJFBERk9iamVjdC0+RG9jdW1lbnROZXcoCiAgICAgICAgVGl0bGUgID0+ICRDb25maWdPYmplY3QtPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRUaXRsZSwKICAgICAgICBFbmNvZGUgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICk7CgogICAgIyBjcmVhdGUgZmlyc3QgUERGIHBhZ2UKICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgJVBhZ2UsCiAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICk7CiAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgdGl0bGUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJEZBUURhdGF7VGl0bGV9LAogICAgICAgIEZvbnRTaXplID0+IDEzLAogICAgKTsKCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC02LAogICAgKTsKCiAgICAjIG91dHB1dCAicHJpbnRlZCBieSIKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCA9PiAkUHJpbnRlZEJ5IC4gJyAnCiAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRmlyc3RuYW1lfSAuICcgJwogICAgICAgICAgICAuICRTZWxmLT57VXNlckxhc3RuYW1lfSAuICcgKCcKICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJFbWFpbH0gLiAnKScKICAgICAgICAgICAgLiAnLCAnIC4gJFRpbWUsCiAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTQsCiAgICApOwoKICAgICMgb3V0cHV0IEZBUSBpbmZvcm1hdGlvbgogICAgJFNlbGYtPl9QREZPdXRwdXRGQVFIZWFkZXJJbmZvKAogICAgICAgIFBhZ2VEYXRhID0+IFwlUGFnZSwKICAgICAgICBGQVFEYXRhICA9PiBcJUZBUURhdGEsCiAgICApOwoKICAgIGlmICggJEZBUURhdGF7S2V5d29yZHN9ICkgewogICAgICAgICRTZWxmLT5fUERGT3V0cHV0S2V5d29yZHMoCiAgICAgICAgICAgIFBhZ2VEYXRhID0+IFwlUGFnZSwKICAgICAgICAgICAgRkFRRGF0YSAgPT4gXCVGQVFEYXRhLAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgRkFRIGR5bmFtaWMgZmllbGRzCiAgICAkU2VsZi0+X1BERk91dHB1dEZBUUR5bmFtaWNGaWVsZHMoCiAgICAgICAgUGFnZURhdGEgPT4gXCVQYWdlLAogICAgICAgIEZBUURhdGEgID0+IFwlRkFRRGF0YSwKICAgICk7CgogICAgJFNlbGYtPl9QREZPdXB1dEZBUUNvbnRlbnQoCiAgICAgICAgUGFnZURhdGEgPT4gXCVQYWdlLAogICAgICAgIEZBUURhdGEgID0+IFwlRkFRRGF0YSwKICAgICk7CgogICAgIyBvdXRwdXQgbGlua2VkIG9iamVjdHMKICAgIGlmICglTGlua0RhdGEpIHsKICAgICAgICAkU2VsZi0+X1BERk91dHB1dExpbmtlZE9iamVjdHMoCiAgICAgICAgICAgIFBhZ2VEYXRhICAgICA9PiBcJVBhZ2UsCiAgICAgICAgICAgIExpbmtEYXRhICAgICA9PiBcJUxpbmtEYXRhLAogICAgICAgICAgICBMaW5rVHlwZUxpc3QgPT4gXCVMaW5rVHlwZUxpc3QsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB0aW1lIG9iamVjdAogICAgbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKICAgICMgcmV0dXJuIHRoZSBQREYgZG9jdW1lbnQKICAgIG15ICRGaWxlbmFtZSA9ICdGQVFfJyAuICRGQVFEYXRhe051bWJlcn07CiAgICBteSAoICRzLCAkbSwgJGgsICRELCAkTSwgJFkgKSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpLAogICAgKTsKICAgICRNID0gc3ByaW50ZiggIiUwMmQiLCAkTSApOwogICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICRtID0gc3ByaW50ZiggIiUwMmQiLCAkbSApOwogICAgbXkgJFBERlN0cmluZyA9ICRQREZPYmplY3QtPkRvY3VtZW50T3V0cHV0KCk7CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBGaWxlbmFtZSAgICA9PiAkRmlsZW5hbWUgLiAiXyIgLiAiJFktJE0tJEQiIC4gIl8iIC4gIiRoLSRtLnBkZiIsCiAgICAgICAgQ29udGVudFR5cGUgPT4gImFwcGxpY2F0aW9uL3BkZiIsCiAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICk7Cgp9CgpzdWIgX1BERk91dHB1dEZBUUhlYWRlckluZm8gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VEYXRhIEZBUURhdGEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCggJFBhcmFteyROZWVkZWR9ICkgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgbXkgJUZBUURhdGEgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKICAgIG15ICVQYWdlICAgID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjcmVhdGUgbGVmdCB0YWJsZQogICAgbXkgJFRhYmxlTGVmdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ2F0ZWdvcnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRkFRRGF0YXtDYXRlZ29yeU5hbWV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU3RhdGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRkFRRGF0YXtTdGF0ZX0gKSwKICAgICAgICB9LAogICAgXTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGxhbmd1YWdlIHJvdywgZmVhdHVyZSBpcyBlbmFibGVkCiAgICBteSAkTXVsdGlMYW5ndWFnZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CiAgICBpZiAoJE11bHRpTGFuZ3VhZ2UpIHsKICAgICAgICBteSAkUm93ID0gewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0xhbmd1YWdlJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJEZBUURhdGF7TGFuZ3VhZ2V9ICksCiAgICAgICAgfTsKICAgICAgICBwdXNoIEB7JFRhYmxlTGVmdH0sICRSb3c7CiAgICB9CgogICAgIyBhcHByb3ZhbCBzdGF0ZSByb3csIGZlYXR1cmUgaXMgZW5hYmxlZAogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QXBwcm92YWxSZXF1aXJlZCcpICkgewogICAgICAgICRGQVFEYXRhe0FwcHJvdmFsfSA9ICRGQVFEYXRhe0FwcHJvdmVkfSA/ICdZZXMnIDogJ05vJzsKICAgICAgICBteSAkUm93ID0gewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0FwcHJvdmFsJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJEZBUURhdGF7QXBwcm92YWx9ICksCiAgICAgICAgfTsKICAgICAgICBwdXNoIEB7JFRhYmxlTGVmdH0sICRSb3c7CiAgICB9CgogICAgIyBjcmVhdGUgcmlnaHQgdGFibGUKICAgIG15ICRUYWJsZVJpZ2h0OwoKICAgIG15ICRWb3RpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6Vm90aW5nJyk7CgogICAgIyB2b3Rpbmcgcm93cywgZmVhdHVyZSBpcyBlbmFibGVkCiAgICBpZiAoJFZvdGluZykgewogICAgICAgICRUYWJsZVJpZ2h0ID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1ZvdGVzJykgLiAnOicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtWb3Rlc30sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUmVzdWx0JykgLiAnOicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtWb3RlUmVzdWx0fSAuICIgJSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgXTsKICAgIH0KCiAgICAjIGxhc3QgdXBkYXRlIHJvdwogICAgcHVzaCBAeyRUYWJsZVJpZ2h0fSwgewogICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTGFzdCB1cGRhdGUnKSAuICc6JywKICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5Gb3JtYXRUaW1lU3RyaW5nKAogICAgICAgICAgICAkRkFRRGF0YXtDaGFuZ2VkfSwKICAgICAgICAgICAgJ0RhdGVGb3JtYXRMb25nJywKICAgICAgICApLAogICAgfTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsyXXtXaWR0aH0gPSA0OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bM117V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVs0XXtXaWR0aH0gPSAxNzAuNTsKCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFnZXtQYWdlQ291bnR9IC4uICRQYWdle01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBnZXQgUERGIG9iamVjdAogICAgICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgbGFzdCBQQUdFOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dExpbmtlZE9iamVjdHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VEYXRhIExpbmtEYXRhIExpbmtUeXBlTGlzdCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVQYWdlICAgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKICAgIG15ICVUeXBlTGlzdCA9ICV7ICRQYXJhbXtMaW5rVHlwZUxpc3R9IH07CiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3cgPSAwOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgZm9yIG15ICRMaW5rVHlwZUxpbmtEaXJlY3Rpb24gKCBzb3J0IHsgbGMgJGEgY21wIGxjICRiIH0ga2V5cyAleyAkUGFyYW17TGlua0RhdGF9IH0gKSB7CgogICAgICAgICMgaW52ZXN0aWdhdGUgbGluayB0eXBlIG5hbWUKICAgICAgICBteSBATGlua0RhdGEgPSBzcGxpdCBxezo6fSwgJExpbmtUeXBlTGlua0RpcmVjdGlvbjsKICAgICAgICBteSAkTGlua1R5cGVOYW1lID0gJFR5cGVMaXN0eyAkTGlua0RhdGFbMF0gfS0+eyAkTGlua0RhdGFbMV0gLiAnTmFtZScgfTsKICAgICAgICAkTGlua1R5cGVOYW1lID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRMaW5rVHlwZU5hbWUpOwoKICAgICAgICAjIGRlZmluZSBoZWFkbGluZQogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSA9ICRMaW5rVHlwZU5hbWUgLiAnOic7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICcnOwoKICAgICAgICAjIGV4dHJhY3Qgb2JqZWN0IGxpc3QKICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRQYXJhbXtMaW5rRGF0YX0tPnskTGlua1R5cGVMaW5rRGlyZWN0aW9ufTsKCiAgICAgICAgZm9yIG15ICRPYmplY3QgKCBzb3J0IHsgbGMgJGEgY21wIGxjICRiIH0ga2V5cyAleyRPYmplY3RMaXN0fSApIHsKCiAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIEB7ICRPYmplY3RMaXN0LT57JE9iamVjdH0gfSApIHsKCiAgICAgICAgICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gfHw9ICcnOwogICAgICAgICAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ID0gJEl0ZW0tPntUaXRsZX0gfHwgJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGludWUgewogICAgICAgICAgICAgICAgJFJvdysrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gNDMxOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMaW5rZWQgT2JqZWN0cycpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgdGFibGUgcGFyYW1zCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCAlVGFibGVQYXJhbSwgKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgIGxhc3QgUEFHRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAlUGFnZSwKICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYWdle1BhZ2VDb3VudH0rKzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRLZXl3b3JkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZURhdGEgRkFRRGF0YSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgbXkgJUZBUURhdGEgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKICAgIG15ICVQYWdlICAgID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwogICAgbXkgJVRhYmxlUGFyYW07CgogICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WzBdWzBde0NvbnRlbnR9ID0gJEZBUURhdGF7S2V5d29yZHN9IHx8ICcnOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gNTExOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0tleXdvcmRzJyksCiAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNCwKICAgICk7CgogICAgIyB0YWJsZSBwYXJhbXMKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgPSAzOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yICggJFBhZ2V7UGFnZUNvdW50fSAuLiAkUGFnZXtNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgbGFzdCBQQUdFOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dEZBUUR5bmFtaWNGaWVsZHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VEYXRhIEZBUURhdGEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCggJFBhcmFteyROZWVkZWR9ICkgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIG15ICRPdXRwdXQgPSAwOwogICAgbXkgJUZBUSAgICA9ICV7ICRQYXJhbXtGQVFEYXRhfSB9OwogICAgbXkgJVBhZ2UgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKCiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3cgPSAwOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBmcm9udGVuZCBtb2R1bGUKICAgIG15ICREeW5hbWljRmllbGRGaWx0ZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIkZBUTo6RnJvbnRlbmQ6OkFnZW50RkFRUHJpbnQiKS0+e0R5bmFtaWNGaWVsZH07CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciBGQVEgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydGQVEnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiAkRHluYW1pY0ZpZWxkRmlsdGVyIHx8IHt9LAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2VuZXJhdGUgdGFibGUKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIEZBUSBvYmplY3QKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAgICAgbXkgJFZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRGQVF7RkFRSUR9LAogICAgICAgICk7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkVmFsdWU7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJFZhbHVlIGVxICIiOwoKICAgICAgICAjIGdldCBwcmludCBzdHJpbmcgZm9yIHRoaXMgZHluYW1pYyBmaWVsZAogICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgSFRNTE91dHB1dCAgICAgICAgID0+IDAsCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICk7CgogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fQogICAgICAgICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSApCiAgICAgICAgICAgIC4gJzonOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gPSAkVmFsdWVTdHJnLT57VmFsdWV9OwoKICAgICAgICAkUm93Kys7CiAgICAgICAgJE91dHB1dCA9IDE7CiAgICB9CgogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSA0MzE7CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIG91dHB1dCBGQVEgZHluYW1pYyBmaWVsZHMKICAgIGlmICgkT3V0cHV0KSB7CgogICAgICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgWSAgICA9PiAtMTUsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgICAgICBUZXh0ICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUSBEeW5hbWljIEZpZWxkcycpLAogICAgICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICBZICAgID0+IC00LAogICAgICAgICk7CgogICAgICAgICMgdGFibGUgcGFyYW1zCiAgICAgICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgPSAwOwogICAgICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICA9IDE7CiAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgICAgICMgb3V0cHV0IHRhYmxlCiAgICAgICAgUEFHRToKICAgICAgICBmb3IgKCAkUGFnZXtQYWdlQ291bnR9IC4uICRQYWdle01heFBhZ2VzfSApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCAlVGFibGVQYXJhbSwgKTsKCiAgICAgICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgICAgIGxhc3QgUEFHRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXB1dEZBUUNvbnRlbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHBhcmFtZXRlcnMKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhQYWdlRGF0YSBGQVFEYXRhKSkgewogICAgICAgIGlmICggISRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVGQVFEYXRhID0gJXsgJFBhcmFte0ZBUURhdGF9IH07CiAgICBteSAlUGFnZSAgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKCiAgICAjIGdldCB0aGUgY29uZmlnIG9mIEZBUSBmaWVsZHMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgIG15ICVGaWVsZHM7CiAgICBGSUVMRDoKICAgIGZvciBteSAkTnVtYmVyICggMSAuLiA2ICkgewoKICAgICAgICAjIGdldCBjb25maWcgb2YgRkFRIGZpZWxkCiAgICAgICAgbXkgJENvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCggJ0ZBUTo6SXRlbTo6RmllbGQnIC4gJE51bWJlciApOwoKICAgICAgICAjIHNraXAgb3ZlciBub3Qgc2hvd24gZmllbGRzCiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJENvbmZpZy0+e1Nob3d9OwoKICAgICAgICAjIHN0b3JlIG9ubHkgdGhlIGNvbmZpZyBvZiBmaWVsZHMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICAkRmllbGRzeyAiRmllbGQiIC4gJE51bWJlciB9ID0gJENvbmZpZzsKICAgIH0KCiAgICAjIHNvcnQgc2hvd24gZmllbGRzIGJ5IHByaW9yaXR5CiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKCBzb3J0IHsgJEZpZWxkc3skYX0tPntQcmlvfSA8PT4gJEZpZWxkc3skYn0tPntQcmlvfSB9IGtleXMgJUZpZWxkcyApIHsKCiAgICAgICAgIyBnZXQgdGhlIHN0YXRlIHR5cGUgZGF0YSBvZiB0aGlzIGZpZWxkCiAgICAgICAgbXkgJFN0YXRlVHlwZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyktPlN0YXRlVHlwZUdldCgKICAgICAgICAgICAgTmFtZSAgID0+ICRGaWVsZHN7JEZpZWxkfS0+e1Nob3d9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIG15ICVUYWJsZVBhcmFtOwoKICAgICAgICAjIGNvbnZlcnQgSFRNTCB0byBBU0NJSQogICAgICAgIG15ICRBc2NpaUZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0FzY2lpKAogICAgICAgICAgICBTdHJpbmcgPT4gJEZBUURhdGF7JEZpZWxkfSwKICAgICAgICApOwoKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bMF1bMF17Q29udGVudH0gPSAkQXNjaWlGaWVsZCB8fCAnJzsKICAgICAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA1MTE7CgogICAgICAgICMgZ2V0IFBERiBvYmplY3QKICAgICAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgIFkgICAgPT4gLTE1LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgICAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICAgICAjIHRyYW5zbGF0ZSB0aGUgZmllbGQgbmFtZSBhbmQgc3RhdGUKICAgICAgICBteSAkRmllbGROYW1lID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRmllbGRzeyRGaWVsZH0tPnsnQ2FwdGlvbid9ICkKICAgICAgICAgICAgLiAnICgnCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkU3RhdGVUeXBlRGF0YS0+e05hbWV9ICkKICAgICAgICAgICAgLiAnKSc7CgogICAgICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAgICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICAgICAgVGV4dCAgICAgPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgICAgICk7CgogICAgICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgWSAgICA9PiAtNCwKICAgICAgICApOwoKICAgICAgICAjIHRhYmxlIHBhcmFtcwogICAgICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgPSAnQ3V0JzsKICAgICAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNEREREREQnOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgPSAzOwoKICAgICAgICAjIG91dHB1dCB0YWJsZQogICAgICAgIFBBR0U6CiAgICAgICAgZm9yICggJFBhZ2V7UGFnZUNvdW50fSAuLiAkUGFnZXtNYXhQYWdlc30gKSB7CgogICAgICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgICAgICBsYXN0IFBBR0U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUVJpY2hUZXh0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1JTUU6OkJhc2U2NCBxdygpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkS2V5IChxdyhJdGVtSUQpKSB7CiAgICAgICAgJEdldFBhcmFteyRLZXl9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEtleSApOwogICAgICAgIGlmICggISRHZXRQYXJhbXskS2V5fSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiTm8gJEtleSBpcyBnaXZlbiEiLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyBnZXQgdGhlIHJlcXVlc3RlZCBGQVEgaXRlbQogICAgbXkgJUZBUUl0ZW0gPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRTY3JpcHRBbGlhcyA9ICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKSB8fCAnb3Rycy8nOwogICAgbXkgJFVSTFJlZ2V4ID0gJy8nIC4gJFNjcmlwdEFsaWFzIC4gJ2luZGV4LnBsXD9BY3Rpb249QWdlbnRGQVFab29tOycKICAgICAgICAuICdTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O0l0ZW1JRD0nIC4gJEdldFBhcmFte0l0ZW1JRH0gLiAnO0ZpbGVJRD1bMC05XSsnOwogICAgbXkgJEVsZW1SZWdleCA9ICdzcmM9IignIC4gJFVSTFJlZ2V4IC4gJykiJzsKCiAgICBteSBARmllbGRzOwoKICAgIG15ICRMb2FkZWQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKAogICAgICAgICdLZXJuZWw6Okxhbmd1YWdlJywKICAgICk7CgogICAgaWYgKCAhJExvYWRlZCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0NhbiBub3QgbG9hZCBMYW5ndWFnZU9iamVjdCEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgIG15ICRGQVFMYW5ndWFnZU9iamVjdCA9IEtlcm5lbDo6TGFuZ3VhZ2UtPm5ldygKICAgICAgICBVc2VyTGFuZ3VhZ2UgPT4gJEZBUUl0ZW17TGFuZ3VhZ2V9LAogICAgKTsKCiAgICAjIGdldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFRpY2tldCBDb21wb3NlCiAgICBteSAkVGlja2V0Q29tcG9zZUNvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpUaWNrZXRDb21wb3NlJyk7CgogICAgIyBnZXQgdGhlIGludGVybmFsIHN0YXRlIHR5cGUKICAgIG15ICRJbnRlcm5hbFN0YXRlVHlwZSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2ludGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCB0aGUgaW50ZXJuYWwgc3RhdGUgdHlwZSBJRAogICAgbXkgJEludGVybmFsU3RhdGVJRCA9ICRJbnRlcm5hbFN0YXRlVHlwZS0+e1N0YXRlSUR9OwoKICAgICMgZ2V0IHVwbG9hZCBjYWNoZSBvYmplY3QKICAgIG15ICRVcGxvYWRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CgogICAgIyBnZXQgZm9ybSBpZAogICAgbXkgJEZvcm1JRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtSUQnICk7CgogICAgIyBjcmVhdGUgZm9ybSBpZAogICAgaWYgKCAhJEZvcm1JRCApIHsKICAgICAgICAkRm9ybUlEID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURDcmVhdGUoKTsKICAgIH0KCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKCAxIC4uIDYgKSB7CgogICAgICAgICMgZG9uJ3Qgd2FzdGUgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZyBwb3dlciwgaWYgdGhlIGN1cnJlbnQgZmllbGQgZG9lc24ndCBoYXZlIGFueSBjb250ZW50CiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZBUUl0ZW17ICdGaWVsZCcgLiAkRmllbGQgfTsKCiAgICAgICAgbXkgJEZpZWxkQ29udGVudCA9ICRGQVFJdGVteyAnRmllbGQnIC4gJEZpZWxkIH07CgogICAgICAgICMgZ2V0IGNvbmZpZyBvZiBjdXJyZW50IEZBUSBmaWVsZCBmcm9tIFN5c0NvbmZpZwogICAgICAgIG15ICRGaWVsZENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCggJ0ZBUTo6SXRlbTo6RmllbGQnIC4gJEZpZWxkICk7CgogICAgICAgIG5leHQgRklFTEQgaWYgISRGaWVsZENvbmZpZzsKICAgICAgICBuZXh0IEZJRUxEIGlmIHJlZiAkRmllbGRDb25maWcgbmUgJ0hBU0gnOwogICAgICAgIG5leHQgRklFTEQgaWYgISRGaWVsZENvbmZpZy0+e1Nob3d9OwoKICAgICAgICAjIGdldCB0aGUgc3RhdGUgdHlwZSBkYXRhIG9mIHRoaXMgZmllbGQKICAgICAgICBteSAkU3RhdGVUeXBlRGF0YSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICAgICAgTmFtZSAgID0+ICRGaWVsZENvbmZpZy0+e1Nob3d9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgY3VycmVudCBmaWVsZCBpcyBpbnRlcm5hbAogICAgICAgIG15ICRJc0ludGVybmFsOwogICAgICAgIGlmICggJFN0YXRlVHlwZURhdGEtPntTdGF0ZUlEfSA9PSAkSW50ZXJuYWxTdGF0ZUlEICkgewogICAgICAgICAgICAkSXNJbnRlcm5hbCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgZmllbGQgc2hvdWxkIGJlIHZpc2libGUgdG8gdGhlIHB1YmxpYywgdGh1cyBiZSBpbnNlcnRlZCBpbnRvIGEKICAgICAgICAjIHJlc3BvbnNlIHRvIGEgY3VzdG9tZXIgb3Igbm90CiAgICAgICAgaWYgKCAhJFRpY2tldENvbXBvc2VDb25maWctPntJbmNsdWRlSW50ZXJuYWx9ICYmICRJc0ludGVybmFsICkgewogICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgIH0KCiAgICAgICAgIyBleHRyYWN0IGFsbCBVUkxzIHdoaWNoIHBvaW50IHRvIGFuIGVtYmVkZGVkIGltYWdlCiAgICAgICAgbXkgQE1hdGNoZWRVUkxzID0gKCAkRmllbGRDb250ZW50ID1+IG17JEVsZW1SZWdleH14Z21zICk7CiAgICAgICAgZm9yIG15ICRVUkwgKEBNYXRjaGVkVVJMcykgewoKICAgICAgICAgICAgIyBleHRyYWN0IHRoZSBpZCBvZiB0aGUgYXR0YWNobWVudAogICAgICAgICAgICBteSAoJEZpbGVJRCkgPSAkVVJMID1+IG17IEZpbGVJRD0oWzAtOV0rKSB9bXN4OwoKICAgICAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT57RGVidWd9ID4gMCApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZpbGVJRDogJEZpbGVJRCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB0aGUgYXR0YWNobWVudCB0byB3aGljaCB0aGUgY3VycmVudCBVUkwgcG9pbnRzCiAgICAgICAgICAgIG15ICVBdHRhY2htZW50ID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgICAgIEZpbGVJRCA9PiAkRmlsZUlELAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15IEBBdHRhY2htZW50TWV0YSA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRGb3JtSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkRmlsZW5hbWVUbXAgICAgPSAkQXR0YWNobWVudHtGaWxlbmFtZX07CiAgICAgICAgICAgIG15ICRTdWZmaXhUbXAgICAgICA9IDA7CiAgICAgICAgICAgIG15ICRVbmlxdWVGaWxlbmFtZSA9ICcnOwoKICAgICAgICAgICAgIyBjcmVhdGUgbm93IGFuIGFydGljbGUgYXR0YWNobWVudCAoaW5saW5lKSBiYXNlZCBvbiB0aGUgZGF0YSBvZiAlQXR0YWNobWVudCAoRkFRKQogICAgICAgICAgICBpZiAoJUF0dGFjaG1lbnQpIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIG5hbWUgYWxyZWFkeSBleGlzdHMKICAgICAgICAgICAgICAgIHdoaWxlICggISRVbmlxdWVGaWxlbmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAkVW5pcXVlRmlsZW5hbWUgPSAkRmlsZW5hbWVUbXA7CiAgICAgICAgICAgICAgICAgICAgTkVXTkFNRToKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCByZXZlcnNlIEBBdHRhY2htZW50TWV0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBORVdOQU1FIGlmICRGaWxlbmFtZVRtcCBuZSAkQXR0YWNobWVudC0+e0ZpbGVuYW1lfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgbmFtZSBleGlzdHMgLT4gY2hhbmdlCiAgICAgICAgICAgICAgICAgICAgICAgICsrJFN1ZmZpeFRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXR0YWNobWVudHtGaWxlbmFtZX0gPX4gbXtcQSAoLiopIFwuICguKz8pIFx6fW1zeCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGaWxlbmFtZVRtcCA9ICIkMS0kU3VmZml4VG1wLiQyIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGaWxlbmFtZVRtcCA9ICIkQXR0YWNobWVudHtGaWxlbmFtZX0tJFN1ZmZpeFRtcCI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJFVuaXF1ZUZpbGVuYW1lID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgTkVXTkFNRTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnR7RmlsZW5hbWV9ID0gJEZpbGVuYW1lVG1wOwogICAgICAgICAgICAgICAgZGVsZXRlICRBdHRhY2htZW50e0NvbnRlbnRJRH07CgogICAgICAgICAgICAgICAgIyBhZGQgdGhlIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZSBvZiB0aGUgY3VycmVudCB0aWNrZXQKICAgICAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkRm9ybUlELAogICAgICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdpbmxpbmUnLAogICAgICAgICAgICAgICAgICAgICVBdHRhY2htZW50LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NvdWxkblwndCBnZXQgRkFRIGF0dGFjaG1lbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAuICIoSXRlbUlEOiAkR2V0UGFyYW17SXRlbUlEfSwgRmlsZUlEOiAkRmlsZUlEKSEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBuZXcgY29udGVudCBpZAogICAgICAgICAgICBteSAkQ29udGVudElETmV3ID0gJyc7CiAgICAgICAgICAgIEBBdHRhY2htZW50TWV0YSA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRGb3JtSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50TWV0YSkgewogICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICRGaWxlbmFtZVRtcCBuZSAkQXR0YWNobWVudC0+e0ZpbGVuYW1lfTsKICAgICAgICAgICAgICAgICRDb250ZW50SUROZXcgPSAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH07CiAgICAgICAgICAgICAgICBsYXN0IEFUVEFDSE1FTlQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJENvbnRlbnRJRE5ldyBlcSAnJyApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkbid0IGRldGVybWluZSBhIG5ldyBDb250ZW50SUQhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBleHRyYWN0IHRoZSBhY3R1YWwgTUlNRSB0eXBlIGZyb20gdGhlIGNvbnRlbnQgdHlwZSwgd2hpY2ggYWxzbyBjb250YWlucyB0aGUgZmlsZW5hbWUKICAgICAgICAgICAgbXkgKCRNaW1lVHlwZSkgPSAkQXR0YWNobWVudHtDb250ZW50VHlwZX0gPX4gbXteKC4rLy4rKTsgWyBdIG5hbWU9LiskfXhtczsKCiAgICAgICAgICAgIG15ICRTZXNzaW9uID0gJyc7CiAgICAgICAgICAgIGlmICggJFNlbGYtPntTZXNzaW9uSUR9ICYmICEkU2VsZi0+e1Nlc3Npb25JRENvb2tpZX0gKSB7CiAgICAgICAgICAgICAgICAkU2Vzc2lvbiA9ICcmJyAuICRTZWxmLT57U2Vzc2lvbk5hbWV9IC4gJz0nIC4gJFNlbGYtPntTZXNzaW9uSUR9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNyZWF0ZSB0aGUgbmV3IGlubGluZSBpbWFnZSBVUkwKICAgICAgICAgICAgbXkgJElubGluZUltYWdlID0gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgLiAiQWN0aW9uPVBpY3R1cmVVcGxvYWQ7Rm9ybUlEPSRGb3JtSUQ7Q29udGVudElEPSRDb250ZW50SUROZXckU2Vzc2lvbiI7CgogICAgICAgICAgICAjIHJlcGxhY2UgdGhlIGltYWdlIFVSTCB3aXRoIHRoZSBpbmxpbmUgaW1hZ2UKICAgICAgICAgICAgJEZpZWxkQ29udGVudCA9fiBze1xRJFVSTFxFfXskSW5saW5lSW1hZ2V9eG1zOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIGFzIGhlYWRlcgogICAgICAgIGlmICggJEZpZWxkQ29uZmlnLT57Q2FwdGlvbn0gJiYgJFRpY2tldENvbXBvc2VDb25maWctPntTaG93RmllbGROYW1lc30gKSB7CgogICAgICAgICAgICAjIHRyYW5zbGF0ZSB0aGUgY2FwdGlvbiB0byB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIEZBUSBpdGVtCiAgICAgICAgICAgIG15ICRUcmFuc2xhdGVkQ2FwdGlvbiA9ICRGQVFMYW5ndWFnZU9iamVjdC0+R2V0KCAkRmllbGRDb25maWctPntDYXB0aW9ufSApOwoKICAgICAgICAgICAgaWYgKCRUcmFuc2xhdGVkQ2FwdGlvbikgewogICAgICAgICAgICAgICAgJEZpZWxkQ29udGVudCA9ICc8aDI+JyAuICRUcmFuc2xhdGVkQ2FwdGlvbiAuICc6PC9oMj4nIC4gJEZpZWxkQ29udGVudDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwdXNoIEBGaWVsZHMsICRGaWVsZENvbnRlbnQ7CiAgICB9CgogICAgbXkgJEZBUUhUTUwgPSBqb2luKCAnPGJyIC8+JywgQEZpZWxkcyApOwoKICAgICMgZ2V0IGFsbCBub24taW5saW5lIGF0dGFjaG1lbnRzIG9mIHRoZSBGQVEgaXRlbQogICAgbXkgQEF0dGFjaG1lbnRzID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEluZGV4KAogICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgU2hvd0lubGluZSA9PiAwLAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBmb3IgbXkgJEF0dGFjaG1lbnREYXRhIChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgIyBnZXQgdGhlIGF0dGFjaG1lbnQKICAgICAgICBteSAlQXR0YWNobWVudCA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgRmlsZUlEID0+ICRBdHRhY2htZW50RGF0YS0+e0ZpbGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCVBdHRhY2htZW50KSB7CgogICAgICAgICAgICAjIGFkZCB0aGUgYXR0YWNobWVudCB0byB0aGUgdXBsb2FkIGNhY2hlIG9mIHRoZSBjdXJyZW50IHRpY2tldAogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREFkZEZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJEZvcm1JRCwKICAgICAgICAgICAgICAgICVBdHRhY2htZW50LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NvdWxkblwndCBnZXQgRkFRIGF0dGFjaG1lbnQgJwogICAgICAgICAgICAgICAgICAgIC4gIihJdGVtSUQ6ICRHZXRQYXJhbXtJdGVtSUR9LCBGaWxlSUQ6ICRBdHRhY2htZW50RGF0YS0+e0ZpbGVJRH0pISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNlbmQgYSBsaXN0IG9mIGF0dGFjaG1lbnRzIGluIHRoZSB1cGxvYWQgY2FjaGUgYmFjayB0byB0aGUgY2xpZW50IHNpZGUgSmF2YVNjcmlwdCB3aGljaAogICAgIyByZW5kZXJzIHRoZW4gdGhlIGxpc3Qgb2YgY3VycmVudGx5IHVwbG9hZGVkIGF0dGFjaG1lbnRzCiAgICBteSBAVGlja2V0QXR0YWNobWVudHMgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzTWV0YSgKICAgICAgICBGb3JtSUQgPT4gJEZvcm1JRCwKICAgICk7CgogICAgbXkgQEZpbHRlcmVkVGlja2V0QXR0YWNobWVudHM7CgogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpSaWNoVGV4dCcpICkgewoKICAgICAgICAjIHJlbW92ZSB0aGUgaW5saW5lLWF0dGFjaG1lbnRzIHdoaWNoIHNob3VsZG4ndCBiZSBzaG93biBpbiB0aGUgcmVndWxhciBhdHRhY2htZW50IGxpc3QKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQFRpY2tldEF0dGFjaG1lbnRzKSB7CiAgICAgICAgICAgIGlmICggZGVmaW5lZCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gJiYgJEF0dGFjaG1lbnQtPntDb250ZW50SUR9ID1+IG17XEEgaW5saW5lfW1zeCApIHsKICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICAgICAgfQogICAgICAgICAgICBwdXNoIEBGaWx0ZXJlZFRpY2tldEF0dGFjaG1lbnRzLCAkQXR0YWNobWVudDsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBpZiByaWNoLXRleHQgaXMgbm90IGFjdGl2ZSB0aGVuIHNldCBhbHNvIGlubGluZSBhdHRhY2htZW50cyBhcyByZWd1bGFyIGF0dGFjaG1lbnRzCiAgICAgICAgQEZpbHRlcmVkVGlja2V0QXR0YWNobWVudHMgPSBAVGlja2V0QXR0YWNobWVudHM7CiAgICB9CgogICAgIyBjcmVhdGUgYSBKU09OIHN0cmluZwogICAgbXkgJEpTT04gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpLT5FbmNvZGUoCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEZBUVRpdGxlICAgICAgICAgID0+ICRGQVFJdGVte1RpdGxlfSwKICAgICAgICAgICAgRkFRQ29udGVudCAgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0FzY2lpKCBTdHJpbmcgPT4gJEZBUUhUTUwgKSB8fCAnJywKICAgICAgICAgICAgRkFRSFRNTENvbnRlbnQgICAgPT4gJEZBUUhUTUwsCiAgICAgICAgICAgIFRpY2tldEF0dGFjaG1lbnRzID0+IFxARmlsdGVyZWRUaWNrZXRBdHRhY2htZW50cywKICAgICAgICAgICAgTG9jYWxpemF0aW9uICAgICAgPT4gewogICAgICAgICAgICAgICAgRGVsZXRlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRGVsZXRlJyksCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUVNlYXJjaDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgY29uZmlnIGZvciBmcm9udGVuZAogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJGQVE6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIEZBUSBvYmplY3QKICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+ICdGQVEnLAogICAgICAgIEZpZWxkRmlsdGVyID0+ICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdXRwdXQ7CgogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IGNvbmZpZyBmcm9tIGNvbnN0cnVjdG9yCiAgICBteSAkQ29uZmlnID0gJFNlbGYtPntDb25maWd9OwoKICAgICMgZ2V0IGNvbmZpZyBkYXRhCiAgICBteSAkU3RhcnRIaXQgPSBpbnQoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxICk7CiAgICBteSAkU2VhcmNoTGltaXQgPSAkQ29uZmlnLT57U2VhcmNoTGltaXR9IHx8IDUwMDsKICAgIG15ICRTb3J0QnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApCiAgICAgICAgfHwgJENvbmZpZy0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdGQVFJRCc7CiAgICBteSAkT3JkZXJCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlckJ5JyApCiAgICAgICAgfHwgJENvbmZpZy0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0Rvd24nOwogICAgbXkgJFByb2ZpbGUgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Byb2ZpbGUnICkgICAgICAgIHx8ICcnOwogICAgbXkgJFNhdmVQcm9maWxlICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVQcm9maWxlJyApICAgIHx8ICcnOwogICAgbXkgJFRha2VMYXN0U2VhcmNoID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Rha2VMYXN0U2VhcmNoJyApIHx8ICcnOwogICAgbXkgJEVyYXNlVGVtcGxhdGUgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VyYXNlVGVtcGxhdGUnICkgIHx8ICcnOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBidWlsZCBvdXRwdXQgZm9yIG9wZW4gc2VhcmNoIGRlc2NyaXB0aW9uIGJ5IEZBUSBudW1iZXIKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXInICkgewogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXInLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyLnhtbCcsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIG91dHB1dCBmb3Igb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gYnkgZnVsbC10ZXh0CiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQnICkgewogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dC54bWwnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZWFyY2ggd2l0aCBhIHNhdmVkIHRlbXBsYXRlCiAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZWFyY2hUZW1wbGF0ZScgKSAmJiAkUHJvZmlsZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPUFnZW50RkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7VGFrZUxhc3RTZWFyY2g9MTtTYXZlUHJvZmlsZT0xO1Byb2ZpbGU9JFByb2ZpbGUiLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgc2luZ2xlIHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgZ2V0IHNlYXJjaCBwcm9maWxlIG9iamVjdAogICAgbXkgJFNlYXJjaFByb2ZpbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VhcmNoUHJvZmlsZScpOwoKICAgICMgbG9hZCBwcm9maWxlcyBzdHJpbmcgcGFyYW1zIChwcmVzcyBsb2FkIHByb2ZpbGUpCiAgICBpZiAoICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdMb2FkUHJvZmlsZScgJiYgJFByb2ZpbGUgKSB8fCAkVGFrZUxhc3RTZWFyY2ggKSB7CiAgICAgICAgJUdldFBhcmFtID0gJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVHZXQoCiAgICAgICAgICAgIEJhc2UgICAgICA9PiAnRkFRU2VhcmNoJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRQcm9maWxlLAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgc2VhcmNoIHN0cmluZyBwYXJhbXMgKGdldCBzdWJtaXR0ZWQgcGFyYW1zKQogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IHNjYWxhciBzZWFyY2ggcGFyYW1zCiAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKAogICAgICAgICAgICBxdyhOdW1iZXIgVGl0bGUgS2V5d29yZCBGdWxsdGV4dCBSZXN1bHRGb3JtIFZvdGVTZWFyY2ggVm90ZVNlYXJjaFR5cGUgUmF0ZVNlYXJjaAogICAgICAgICAgICBSYXRlU2VhcmNoVHlwZSBBcHByb3ZlZFNlYXJjaAogICAgICAgICAgICBUaW1lU2VhcmNoVHlwZSBDaGFuZ2VUaW1lU2VhcmNoVHlwZQogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVBvaW50Rm9ybWF0IEl0ZW1DcmVhdGVUaW1lUG9pbnQKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVQb2ludFN0YXJ0CiAgICAgICAgICAgIEl0ZW1DcmVhdGVUaW1lU3RhcnQgSXRlbUNyZWF0ZVRpbWVTdGFydERheSBJdGVtQ3JlYXRlVGltZVN0YXJ0TW9udGgKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVTdGFydFllYXIKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVTdG9wIEl0ZW1DcmVhdGVUaW1lU3RvcERheSBJdGVtQ3JlYXRlVGltZVN0b3BNb250aAogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVN0b3BZZWFyCiAgICAgICAgICAgIEl0ZW1DaGFuZ2VUaW1lUG9pbnRGb3JtYXQgSXRlbUNoYW5nZVRpbWVQb2ludAogICAgICAgICAgICBJdGVtQ2hhbmdlVGltZVBvaW50U3RhcnQKICAgICAgICAgICAgSXRlbUNoYW5nZVRpbWVTdGFydCBJdGVtQ2hhbmdlVGltZVN0YXJ0RGF5IEl0ZW1DaGFuZ2VUaW1lU3RhcnRNb250aAogICAgICAgICAgICBJdGVtQ2hhbmdlVGltZVN0YXJ0WWVhcgogICAgICAgICAgICBJdGVtQ2hhbmdlVGltZVN0b3AgSXRlbUNoYW5nZVRpbWVTdG9wRGF5IEl0ZW1DaGFuZ2VUaW1lU3RvcE1vbnRoCiAgICAgICAgICAgIEl0ZW1DaGFuZ2VUaW1lU3RvcFllYXIKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CgogICAgICAgICAgICAjIHJlbW92ZSB3aGl0ZXNwYWNlIG9uIHRoZSBzdGFydCBhbmQgZW5kCiAgICAgICAgICAgIGlmICggJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID1+IHN7IFxBIFxzKyB9e314bXM7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPX4gc3sgXHMrIFx6IH17fXhtczsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYXJyYXkgc2VhcmNoIHBhcmFtcwogICAgICAgIGZvciBteSAkU2VhcmNoUGFyYW0gKAogICAgICAgICAgICBxdyhDYXRlZ29yeUlEcyBMYW5ndWFnZUlEcyBWYWxpZElEcyBTdGF0ZUlEcyBDcmVhdGVkVXNlcklEcyBMYXN0Q2hhbmdlZFVzZXJJRHMpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBBcnJheSA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICRTZWFyY2hQYXJhbSApOwogICAgICAgICAgICBpZiAoQEFycmF5KSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFNlYXJjaFBhcmFtfSA9IFxAQXJyYXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IER5bmFtaWMgZmllbGRzIGZyb20gcGFyYW0gb2JqZWN0CiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgIyBnZXQgc2VhcmNoIGZpZWxkIHByZWZlcmVuY2VzCiAgICAgICAgICAgIG15ICRTZWFyY2hGaWVsZFByZWZlcmVuY2VzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUHJlZmVyZW5jZXMoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0FycmF5UmVmV2l0aERhdGEoJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMpOwoKICAgICAgICAgICAgUFJFRkVSRU5DRToKICAgICAgICAgICAgZm9yIG15ICRQcmVmZXJlbmNlICggQHskU2VhcmNoRmllbGRQcmVmZXJlbmNlc30gKSB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gdGhlIHdlYiByZXF1ZXN0CiAgICAgICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgICAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICAgICAgUmV0dXJuUHJvZmlsZVN0cnVjdHVyZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgID0+ICRQcmVmZXJlbmNlLT57VHlwZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IHRoZSBjb21wbGV0ZSB2YWx1ZSBzdHJ1Y3R1cmUgaW4gR2V0UGFyYW0gdG8gc3RvcmUgaXQgbGF0ZXIgaW4gdGhlIHNlYXJjaCBwcm9maWxlCiAgICAgICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRWYWx1ZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtID0gKCAlR2V0UGFyYW0sICV7JER5bmFtaWNGaWVsZFZhbHVlfSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGFwcHJvdmVkIG9wdGlvbgogICAgaWYgKCAkR2V0UGFyYW17QXBwcm92ZWRTZWFyY2h9ICYmICRHZXRQYXJhbXtBcHByb3ZlZFNlYXJjaH0gZXEgJ1llcycgKSB7CiAgICAgICAgJEdldFBhcmFte0FwcHJvdmVkfSA9IDE7CiAgICB9CiAgICBlbHNpZiAoICRHZXRQYXJhbXtBcHByb3ZlZFNlYXJjaH0gJiYgJEdldFBhcmFte0FwcHJvdmVkU2VhcmNofSBlcSAnTm8nICkgewogICAgICAgICRHZXRQYXJhbXtBcHByb3ZlZH0gPSAwOwogICAgfQoKICAgICMgZ2V0IGNyZWF0ZSB0aW1lIG9wdGlvbgogICAgaWYgKCAhJEdldFBhcmFte1RpbWVTZWFyY2hUeXBlfSApIHsKICAgICAgICAkR2V0UGFyYW17J1RpbWVTZWFyY2hUeXBlOjpOb25lJ30gPSAxOwogICAgfQogICAgZWxzaWYgKCAkR2V0UGFyYW17VGltZVNlYXJjaFR5cGV9IGVxICdUaW1lUG9pbnQnICkgewogICAgICAgICRHZXRQYXJhbXsnVGltZVNlYXJjaFR5cGU6OlRpbWVQb2ludCd9ID0gMTsKICAgIH0KICAgIGVsc2lmICggJEdldFBhcmFte1RpbWVTZWFyY2hUeXBlfSBlcSAnVGltZVNsb3QnICkgewogICAgICAgICRHZXRQYXJhbXsnVGltZVNlYXJjaFR5cGU6OlRpbWVTbG90J30gPSAxOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSB0aW1lIG9wdGlvbgogICAgaWYgKCAhJEdldFBhcmFte0NoYW5nZVRpbWVTZWFyY2hUeXBlfSApIHsKICAgICAgICAkR2V0UGFyYW17J0NoYW5nZVRpbWVTZWFyY2hUeXBlOjpOb25lJ30gPSAxOwogICAgfQogICAgZWxzaWYgKCAkR2V0UGFyYW17Q2hhbmdlVGltZVNlYXJjaFR5cGV9IGVxICdUaW1lUG9pbnQnICkgewogICAgICAgICRHZXRQYXJhbXsnQ2hhbmdlVGltZVNlYXJjaFR5cGU6OlRpbWVQb2ludCd9ID0gMTsKICAgIH0KICAgIGVsc2lmICggJEdldFBhcmFte0NoYW5nZVRpbWVTZWFyY2hUeXBlfSBlcSAnVGltZVNsb3QnICkgewogICAgICAgICRHZXRQYXJhbXsnQ2hhbmdlVGltZVNlYXJjaFR5cGU6OlRpbWVTbG90J30gPSAxOwogICAgfQoKICAgICMgc2V0IHJlc3VsdCBmb3JtIEVOVgogICAgaWYgKCAhJEdldFBhcmFte1Jlc3VsdEZvcm19ICkgewogICAgICAgICRHZXRQYXJhbXtSZXN1bHRGb3JtfSA9ICcnOwogICAgfQoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyBzaG93IHJlc3VsdCBzaXRlCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VhcmNoJyAmJiAhJEVyYXNlVGVtcGxhdGUgKSB7CgogICAgICAgICMgZmlsbCB1cCBwcm9maWxlIG5hbWUgKGUuZy4gd2l0aCBsYXN0LXNlYXJjaCkKICAgICAgICBpZiAoICEkUHJvZmlsZSB8fCAhJFNhdmVQcm9maWxlICkgewogICAgICAgICAgICAkUHJvZmlsZSA9ICdsYXN0LXNlYXJjaCc7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzZXNzaW9uIG9iamVjdAogICAgICAgIG15ICRTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyk7CgogICAgICAgICMgc3RvcmUgbGFzdCBvdmVydmlldyBzY3JlZW4KICAgICAgICBteSAkVVJMID0gIkFjdGlvbj1BZ2VudEZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO1Byb2ZpbGU9JFByb2ZpbGU7U29ydEJ5PSRTb3J0QnkiCiAgICAgICAgICAgIC4gIjtPcmRlckJ5PSRPcmRlckJ5O1Rha2VMYXN0U2VhcmNoPTE7U3RhcnRIaXQ9JFN0YXJ0SGl0IjsKICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CiAgICAgICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CgogICAgICAgICMgc2F2ZSBzZWFyY2ggcHJvZmlsZSAodW5kZXIgbGFzdC1zZWFyY2ggb3IgcmVhbCBwcm9maWxlIG5hbWUpCiAgICAgICAgJFNhdmVQcm9maWxlID0gMTsKCiAgICAgICAgIyByZW1lbWJlciBsYXN0IHNlYXJjaCB2YWx1ZXMKICAgICAgICBpZiAoICRTYXZlUHJvZmlsZSAmJiAkUHJvZmlsZSApIHsKCiAgICAgICAgICAgICMgcmVtb3ZlIG9sZCBwcm9maWxlIHN0dWZmCiAgICAgICAgICAgICRTZWFyY2hQcm9maWxlT2JqZWN0LT5TZWFyY2hQcm9maWxlRGVsZXRlKAogICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRQcm9maWxlLAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBwcm9maWxlIHBhcmFtcwogICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlR2V0UGFyYW0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZUFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFByb2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEdldFBhcmFteyRLZXl9LAogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICVUaW1lTWFwID0gKAogICAgICAgICAgICBJdGVtQ3JlYXRlID0+ICdUaW1lJywKICAgICAgICAgICAgSXRlbUNoYW5nZSA9PiAnQ2hhbmdlVGltZScsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRUaW1lVHlwZSAoIHNvcnQga2V5cyAlVGltZU1hcCApIHsKCiAgICAgICAgICAgICMgZ2V0IGNyZWF0ZSB0aW1lIHNldHRpbmdzCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXsgJFRpbWVNYXB7JFRpbWVUeXBlfSAuICdTZWFyY2hUeXBlJyB9ICkgewoKICAgICAgICAgICAgICAgICMgZG8gbm90aGluZyB3aXRoIHRpbWUgc3R1ZmYKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVNYXB7JFRpbWVUeXBlfSAuICdTZWFyY2hUeXBlJyB9IGVxICdUaW1lU2xvdCcgKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAocXcoTW9udGggRGF5KSkgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydCcgLiAkS2V5IH0KICAgICAgICAgICAgICAgICAgICAgICAgPSBzcHJpbnRmKCAiJTAyZCIsICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydCcgLiAkS2V5IH0gKTsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcCcgLiAkS2V5IH0KICAgICAgICAgICAgICAgICAgICAgICAgPSBzcHJpbnRmKCAiJTAyZCIsICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wJyAuICRLZXkgfSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydERheScgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydE1vbnRoJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0WWVhcicgfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lTmV3ZXJEYXRlJyB9ID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0WWVhcicgfSAuICctJwogICAgICAgICAgICAgICAgICAgICAgICAuICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydE1vbnRoJyB9IC4gJy0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0RGF5JyB9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJyAwMDowMDowMCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BEYXknIH0KICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcE1vbnRoJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BZZWFyJyB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVPbGRlckRhdGUnIH0gPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcFllYXInIH0gLiAnLScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcE1vbnRoJyB9IC4gJy0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BEYXknIH0KICAgICAgICAgICAgICAgICAgICAgICAgLiAnIDIzOjU5OjU5JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVNYXB7JFRpbWVUeXBlfSAuICdTZWFyY2hUeXBlJyB9IGVxICdUaW1lUG9pbnQnICkgewogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludFN0YXJ0JyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRUaW1lID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAnbWludXRlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWUgPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9IGVxICdob3VyJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWUgPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH0gKiA2MDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ2RheScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9ICogNjAgKiAyNDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ3dlZWsnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfSAqIDYwICogMjQgKiA3OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAnbW9udGgnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfSAqIDYwICogMjQgKiAzMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ3llYXInICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfSAqIDYwICogMjQgKiAzNjU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50U3RhcnQnIH0gZXEgJ0JlZm9yZScgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIG1vcmUgdGhhbiAuLi4gYWdvCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVPbGRlck1pbnV0ZXMnIH0gPSAkVGltZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRTdGFydCcgfSBlcSAnTmV4dCcgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHdpdGhpbiBuZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVOZXdlck1pbnV0ZXMnIH0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lT2xkZXJNaW51dGVzJyB9ID0gLSRUaW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyB3aXRoaW4gbGFzdCAuLi4KICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU9sZGVyTWludXRlcycgfSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVOZXdlck1pbnV0ZXMnIH0gPSAkVGltZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZHluYW1pYyBmaWVsZHMgc2VhcmNoIHBhcmFtZXRlcnMgZm9yIEZBUSBzZWFyY2gKICAgICAgICBteSAlRHluYW1pY0ZpZWxkU2VhcmNoUGFyYW1ldGVyczsKCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgIyBnZXQgc2VhcmNoIGZpZWxkIHByZWZlcmVuY2VzCiAgICAgICAgICAgIG15ICRTZWFyY2hGaWVsZFByZWZlcmVuY2VzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUHJlZmVyZW5jZXMoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0FycmF5UmVmV2l0aERhdGEoJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMpOwoKICAgICAgICAgICAgUFJFRkVSRU5DRToKICAgICAgICAgICAgZm9yIG15ICRQcmVmZXJlbmNlICggQHskU2VhcmNoRmllbGRQcmVmZXJlbmNlc30gKSB7CgogICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZFZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgPT4gJFByZWZlcmVuY2UtPntUeXBlfSwKICAgICAgICAgICAgICAgICAgICBSZXR1cm5Qcm9maWxlU3RydWN0dXJlID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IHRoZSBjb21wbGV0ZSB2YWx1ZSBzdHJ1Y3R1cmUgaW4gJUR5bmFtaWNGaWVsZFZhbHVlcyB0byBkaXNjYXJkIHRob3NlIHdoZXJlIHRoZQogICAgICAgICAgICAgICAgIyB2YWx1ZSB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBnZXQKICAgICAgICAgICAgICAgIG5leHQgUFJFRkVSRU5DRSBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZFZhbHVlKTsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgcHJvZmlsZQogICAgICAgICAgICAgICAgbXkgJFNlYXJjaFBhcmFtZXRlciA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFBhcmFtZXRlckJ1aWxkKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFByb2ZpbGUgICAgICAgICAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBzZWFyY2ggcGFyYW1ldGVyCiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQgJFNlYXJjaFBhcmFtZXRlciApIHsKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkU2VhcmNoUGFyYW1ldGVyc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgPSAkU2VhcmNoUGFyYW1ldGVyLT57UGFyYW1ldGVyfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIGZ1bGwtdGV4dCBzZWFyY2gKICAgICAgICBpZiAoICRHZXRQYXJhbXtGdWxsdGV4dH0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtDb250ZW50U2VhcmNofSA9ICdPUic7CiAgICAgICAgICAgICRHZXRQYXJhbXtXaGF0fSAgICAgICAgICA9ICRHZXRQYXJhbXtGdWxsdGV4dH07CiAgICAgICAgfQoKICAgICAgICAjIGdldCB2YWxpZCBsaXN0CiAgICAgICAgbXkgJVZhbGlkTGlzdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgICAgIG15IEBBbGxWYWxpZElEcyA9IGtleXMgJVZhbGlkTGlzdDsKCiAgICAgICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgICAgIG15ICRJbnRlcmZhY2UgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgICAgIE5hbWUgICA9PiAnaW50ZXJuYWwnLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgbXkgJEludGVyZmFjZVN0YXRlcyA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgICAgIFR5cGVzICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QWdlbnQ6OlN0YXRlVHlwZXMnKSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHByZXBhcmUgc2VhcmNoIHN0YXRlcwogICAgICAgIG15ICRTZWFyY2hTdGF0ZXM7CiAgICAgICAgaWYgKCAhSXNBcnJheVJlZldpdGhEYXRhKCAkR2V0UGFyYW17U3RhdGVJRHN9ICkgKSB7CiAgICAgICAgICAgICRTZWFyY2hTdGF0ZXMgPSAkSW50ZXJmYWNlU3RhdGVzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgU1RBVEVUWVBFSUQ6CiAgICAgICAgICAgIGZvciBteSAkU3RhdGVUeXBlSUQgKCBAeyAkR2V0UGFyYW17U3RhdGVJRHN9IH0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IFNUQVRFVFlQRUlEIGlmICEkU3RhdGVUeXBlSUQ7CiAgICAgICAgICAgICAgICBuZXh0IFNUQVRFVFlQRUlEIGlmICEkSW50ZXJmYWNlU3RhdGVzLT57JFN0YXRlVHlwZUlEfTsKICAgICAgICAgICAgICAgICRTZWFyY2hTdGF0ZXMtPnskU3RhdGVUeXBlSUR9ID0gJEludGVyZmFjZVN0YXRlcy0+eyRTdGF0ZVR5cGVJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggSXNOdW1iZXIoICRHZXRQYXJhbXtWb3RlU2VhcmNofSApICkgewogICAgICAgICAgICAkR2V0UGFyYW17Vm90ZXN9ID0gewogICAgICAgICAgICAgICAgJEdldFBhcmFte1ZvdGVTZWFyY2hUeXBlfSA9PiAkR2V0UGFyYW17Vm90ZVNlYXJjaH0KICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGlmICggSXNOdW1iZXIoICRHZXRQYXJhbXtSYXRlU2VhcmNofSApICkgewogICAgICAgICAgICAkR2V0UGFyYW17UmF0ZX0gPSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17UmF0ZVNlYXJjaFR5cGV9ID0+ICRHZXRQYXJhbXtSYXRlU2VhcmNofQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgVXNlckNhdGVnb3J5R3JvdXAgSGFzaAogICAgICAgICMgVGhpcyByZXR1cm5zIGEgSGFzaCBvZiB0aGUgZm9sbG93aW5nIHNhbXBsZSBkYXRhIHN0cnVjdHVyZToKICAgICAgICAjCiAgICAgICAgIyAkVXNlckNhdEdyb3VwID0gewogICAgICAgICMgICAnMScgPT4gewogICAgICAgICMgICAgICAgICAgJzMnID0+ICdNaXNjU3ViJwogICAgICAgICMgICAgICAgIH0sCiAgICAgICAgIyAgICczJyA9PiB7fSwKICAgICAgICAjICAgJzAnID0+IHsKICAgICAgICAjICAgICAgICAgICAgJzEnID0+ICdNaXNjJywKICAgICAgICAjICAgICAgICAgICAgJzInID0+ICdzZWNyZXQnCiAgICAgICAgIyAgICAgICAgICB9LAogICAgICAgICMgICAnMicgPT4ge30KICAgICAgICAjIH07CiAgICAgICAgIwogICAgICAgICMgS2V5cyBvZiB0aGUgb3V0ZXIgaGFzaCBpbmZvcm0gYWJvdXQgc3ViY2F0ZWdvcmllcwogICAgICAgICMgMCBTaG93cyB0b3AgbGV2ZWwgQ2F0ZWdvcnlJRHMuCiAgICAgICAgIyAxIFNob3dzIHRoZSBTdWJjYXRlZ29yeUlEcyBvZiBDYXRlZ29yeSAxLgogICAgICAgICMgMiBhbmQgMyBhcmUgZW1wdHkgaGFzaGVzIGJlY2F1c2UgdGhlc2UgY2F0ZWdvcmllcyBkb24ndCBoYXZlIHN1YmNhdGVnb3JpZXMuCiAgICAgICAgIwogICAgICAgICMgS2V5cyBvZiB0aGUgaW5uZXIgaGFzaGVzIGFyZSBDYXRlZ29yeUlEcyBhIHVzZXIgaXMgYWxsb3dlZCB0byBoYXZlIHJ3IGFjY2VzcyB0by4KICAgICAgICAjIFZhbHVlcyBhcmUgdGhlIENhdGVnb3J5IG5hbWVzLgoKICAgICAgICBteSAkVXNlckNhdEdyb3VwID0gJEZBUU9iamVjdC0+R2V0VXNlckNhdGVnb3JpZXMoCiAgICAgICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgRmluZCBDYXRlZ29yeUlEcyB0aGUgY3VycmVudCBVc2VyIGlzIGFsbG93ZWQgdG8gdmlldwogICAgICAgIG15ICVBbGxvd2VkQ2F0ZWdvcnlJRHMgPSAoKTsKCiAgICAgICAgaWYgKCAkVXNlckNhdEdyb3VwICYmIHJlZiAkVXNlckNhdEdyb3VwIGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICMgU28gbm93IHdlIGhhdmUgdG8gZXh0cmFjdCBhbGwgQ2F0ZWdvcnkgSUQncyBvZiB0aGUgImlubmVyIGhhc2hlcyIuCiAgICAgICAgICAgICMgLT4gTG9vcCB0aHJvdWdoIHRoZSBvdXRlciBjYXRlZ29yeSBJRCdzCiAgICAgICAgICAgIGZvciBteSAkTGV2ZWwgKCBzb3J0IGtleXMgJXskVXNlckNhdEdyb3VwfSApIHsKCiAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSBWYWx1ZSBvZiB0aGUgY3VycmVudCBoYXNoIGtleSBpcyBhIGhhc2ggcmVmCiAgICAgICAgICAgICAgICBpZiAoICRVc2VyQ2F0R3JvdXAtPnskTGV2ZWx9ICYmIHJlZiAkVXNlckNhdEdyb3VwLT57JExldmVsfSBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICAgICAgICAgICMgTWFwIHRoZSBrZXlzIG9mIHRoZSBpbm5lciBoYXNoIHRvIGEgVGVtcElEcyBoYXNoCiAgICAgICAgICAgICAgICAgICAgIyBPcmlnaW5hbCBEYXRhIHN0cnVjdHVyZToKICAgICAgICAgICAgICAgICAgICAjIHsKICAgICAgICAgICAgICAgICAgICAjICAnMScgPT4gJ01pc2MnLAogICAgICAgICAgICAgICAgICAgICMgICcyJyA9PiAnc2VjcmV0JwogICAgICAgICAgICAgICAgICAgICMgfQogICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAgICAjIGFmdGVyIG1hcHBpbmc6CiAgICAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICAgICMgewogICAgICAgICAgICAgICAgICAgICMgICcxJyA9PiAxLAogICAgICAgICAgICAgICAgICAgICMgICcyJyA9PiAxJwogICAgICAgICAgICAgICAgICAgICMgfQoKICAgICAgICAgICAgICAgICAgICBteSAlVGVtcElEcyA9IG1hcCB7ICRfID0+IDEgfSBrZXlzICV7ICRVc2VyQ2F0R3JvdXAtPnskTGV2ZWx9IH07CgogICAgICAgICAgICAgICAgICAgICMgUHV0IHRoZSBUZW1wSURzIG92ZXIgdGhlIGZvcm1hbGx5IGZvdW5kIEFsbG93ZWRDYXRlZ29yeXMKICAgICAgICAgICAgICAgICAgICAjIHRvIHByb2R1Y2UgYSBoYXNoIHRoYXQgaG9sZHMgYWxsIENhdGVnb3J5SUQgYXMga2V5cwogICAgICAgICAgICAgICAgICAgICMgYW5kIHRoZSBudW1iZXIgMSBhcyB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgJUFsbG93ZWRDYXRlZ29yeUlEcyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgJUFsbG93ZWRDYXRlZ29yeUlEcywKICAgICAgICAgICAgICAgICAgICAgICAgJVRlbXBJRHMKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEZvciB0aGUgZGF0YWJhc2UgcXVlcnkgaXQncyBuZWNlc3NhcnkgdG8gaGF2ZSBhbiBhcnJheQogICAgICAgICMgb2YgQ2F0ZWdvcnlJRHMKICAgICAgICBteSBAQ2F0ZWdvcnlJRHMgPSAoKTsKCiAgICAgICAgaWYgKCVBbGxvd2VkQ2F0ZWdvcnlJRHMpIHsKICAgICAgICAgICAgQENhdGVnb3J5SURzID0gc29ydCBrZXlzICVBbGxvd2VkQ2F0ZWdvcnlJRHM7CiAgICAgICAgfQoKICAgICAgICAjIENhdGVnb3JpZXMgZ290IGZyb20gdGhlIHdlYiByZXF1ZXN0IGNvdWxkIGluY2x1ZGUgYSBub3QgYWxsb3dlZCBjYXRlZ29yeSBpZiB0aGUgdXNlcgogICAgICAgICMgICAgdGVtcGVyIHdpdGggdGhlIGNhdGVnb3JpZXMgZHJvcC1ib3gsIGEgY2hlY2sgaXMgbmVlZGVkLgogICAgICAgICMKICAgICAgICAjICJNYXAiIGNvcHkgZnJvbSBvbmUgYXJyYXkgdG8gYW5vdGhlciwgd2hpbGUgImdyZXAiIHdpbGwgb25seSBsZXQgcGFzcyB0aGUgY2F0ZWdvcmllcwogICAgICAgICMgICAgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgJUFsbG93ZWRDYXRlZ29yeUlEcyBoYXNoCiAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRHZXRQYXJhbXtDYXRlZ29yeUlEc30gKSApIHsKICAgICAgICAgICAgQHsgJEdldFBhcmFte0NhdGVnb3J5SURzfSB9ID0gbWFwIHskX30gZ3JlcCB7ICRBbGxvd2VkQ2F0ZWdvcnlJRHN7JF99IH0gQHsgJEdldFBhcmFte0NhdGVnb3J5SURzfSB9OwogICAgICAgIH0KCiAgICAgICAgIyBKdXN0IHNlYXJjaCBpZiB3ZSBkbyBoYXZlIGNhdGVnb3JpZXMsIHdlIGhhdmUgYWNjZXNzIHRvLgogICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IGNhdGVnb3J5LCBhIHNlYXJjaCB3aXRoIG5vIENhdGVnb3J5SURzCiAgICAgICAgIyB3b3VsZCByZXN1bHQgaW4gZmluZGluZyBhbGwgY2F0ZWdvcmllcy4KICAgICAgICAjCiAgICAgICAgIyBJdCBpcyBub3QgcG9zc2libGUgdG8gY3JlYXRlIEZBUSdzIHdpdGhvdXQgY2F0ZWdvcmllcwogICAgICAgICMgc28gYXQgbGVhc3Qgb25lIGNhdGVnb3J5IGhhcyB0byBiZSBwcmVzZW50CgogICAgICAgIG15IEBWaWV3YWJsZUZBUUlEcyA9ICgpOwoKICAgICAgICBpZiAoQENhdGVnb3J5SURzKSB7CgogICAgICAgICAgICAjIHBlcmZvcm0gRkFRIHNlYXJjaAogICAgICAgICAgICAjIGRlZmF1bHQgc2VhcmNoIG9uIGFsbCB2YWxpZCBpZHMsIHRoaXMgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5ICVHZXRQYXJhbQogICAgICAgICAgICBAVmlld2FibGVGQVFJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgICAgID0+IFskU29ydEJ5XSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gICAgPT4gWyRPcmRlckJ5XSwKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgICAgPT4gJFNlYXJjaExpbWl0LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBTdGF0ZXMgICAgICAgICAgICAgID0+ICRTZWFyY2hTdGF0ZXMsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgICAgID0+ICRJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICBDb250ZW50U2VhcmNoUHJlZml4ID0+ICcqJywKICAgICAgICAgICAgICAgIENvbnRlbnRTZWFyY2hTdWZmaXggPT4gJyonLAogICAgICAgICAgICAgICAgVmFsaWRJRHMgICAgICAgICAgICA9PiBcQEFsbFZhbGlkSURzLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRHMgICAgICAgICA9PiBcQENhdGVnb3J5SURzLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJUR5bmFtaWNGaWVsZFNlYXJjaFBhcmFtZXRlcnMsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aW1lIG9iamVjdAogICAgICAgIG15ICRUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKCiAgICAgICAgbXkgJE11bHRpTGFuZ3VhZ2UgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwoKICAgICAgICAjIENTViBvdXRwdXQKICAgICAgICBpZiAoICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnQ1NWJyApIHsKICAgICAgICAgICAgbXkgQFRtcENTVkhlYWQ7CiAgICAgICAgICAgIG15IEBDU1ZIZWFkOwogICAgICAgICAgICBteSBAQ1NWRGF0YTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBGQVEgZHluYW1pYyBmaWVsZHMgZm9yIENTViBkaXNwbGF5CiAgICAgICAgICAgIG15ICRDU1ZEeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgICAgICAgICBGaWVsZEZpbHRlciA9PiAkQ29uZmlnLT57U2VhcmNoQ1NWRHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGZvciBteSAkRkFRSUQgKEBWaWV3YWJsZUZBUUlEcykgewoKICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBkYXRhIGRldGFpbHMKICAgICAgICAgICAgICAgIG15ICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZ2V0IGluZm8gZm9yIENTViBvdXRwdXQKICAgICAgICAgICAgICAgIG15ICVDU1ZJbmZvID0gKCVGQVFEYXRhKTsKCiAgICAgICAgICAgICAgICAkQ1NWSW5mb3tDaGFuZ2VkfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkZvcm1hdFRpbWVTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgJEZBUURhdGF7Q2hhbmdlZH0sCiAgICAgICAgICAgICAgICAgICAgJ0RhdGVGb3JtYXQnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIENTViBxdW90ZQogICAgICAgICAgICAgICAgaWYgKCAhQENTVkhlYWQgKSB7CiAgICAgICAgICAgICAgICAgICAgQFRtcENTVkhlYWQgPSBxdyggRkFRTnVtYmVyIFRpdGxlIENhdGVnb3J5KTsKICAgICAgICAgICAgICAgICAgICBAQ1NWSGVhZCAgICA9IHF3KCBGQVFOdW1iZXIgVGl0bGUgQ2F0ZWdvcnkpOwoKICAgICAgICAgICAgICAgICAgICAjIGluc2VydCBsYW5ndWFnZSBoZWFkZXIKICAgICAgICAgICAgICAgICAgICBpZiAoJE11bHRpTGFuZ3VhZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAVG1wQ1NWSGVhZCwgJ0xhbmd1YWdlJzsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgICAgJ0xhbmd1YWdlJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQFRtcENTVkhlYWQsIHF3KFN0YXRlIENoYW5nZWQpOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICAgIHF3KFN0YXRlIENoYW5nZWQpOwoKICAgICAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdGhlIHNlbGVjdGVkIGR5bmFtaWMgZmllbGRzIG9uIENWUyByZXN1bHRzCiAgICAgICAgICAgICAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskQ1NWRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9OwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gZXEgJyc7CgogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBUbXBDU1ZIZWFkLCAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICAgICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaW5zZXJ0IGRhdGEKICAgICAgICAgICAgICAgIG15IEBEYXRhOwogICAgICAgICAgICAgICAgZm9yIG15ICRIZWFkZXIgKEBUbXBDU1ZIZWFkKSB7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgaGVhZGVyIGlzIGEgZHluYW1pYyBmaWVsZCBhbmQgZ2V0IHRoZSB2YWx1ZSBmcm9tIGR5bmFtaWMgZmllbGQKICAgICAgICAgICAgICAgICAgICAjIGJhY2tlbmQKICAgICAgICAgICAgICAgICAgICBpZiAoICRIZWFkZXIgPX4gbXtcQSBEeW5hbWljRmllbGRfICggW2EtekEtWlxkXSsgKSBcen14bXMgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGxvb3Agb3ZlciB0aGUgZHluYW1pYyBmaWVsZHMgY29uZmlndXJlZCBmb3IgQ1NWIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskQ1NWRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGFsbCBmaWVsZHMgdGhhdCBkb2VzIG5vdCBtYXRjaCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSAoJDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdpdGggb3V0IHRoZSAnRHluYW1pY0ZpZWxkXycgcHJlZml4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gbmUgJDE7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGhlIHZhbHVlIGFzIGZvciBwcmludCAodG8gY29ycmVjdGx5IGRpc3BsYXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJENTVkluZm97JEhlYWRlcn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTE91dHB1dCAgICAgICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARGF0YSwgJFZhbHVlU3RyZy0+e1ZhbHVlfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlcm1pbmF0ZSB0aGUgRFlOQU1JQ0ZJRUxEIGxvb3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgRFlOQU1JQ0ZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSByZXRyaWV2ZSBkYXRhIGZyb20gRkFRIGl0ZW0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSGVhZGVyIGVxICdGQVFOdW1iZXInICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARGF0YSwgJENTVkluZm97J051bWJlcid9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEhlYWRlciBlcSAnQ2F0ZWdvcnknICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARGF0YSwgJENTVkluZm97J0NhdGVnb3J5TmFtZSd9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARGF0YSwgJENTVkluZm97JEhlYWRlcn07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEBDU1ZEYXRhLCBcQERhdGE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQ1NWIHF1b3RlCiAgICAgICAgICAgICMgdHJhbnNsYXRlIG5vbiBleGlzdGluZyBoZWFkZXIgbWF5IHJlc3VsdCBpbiBhIGdhcmJhZ2UgZmlsZQogICAgICAgICAgICBpZiAoICFAQ1NWSGVhZCApIHsKICAgICAgICAgICAgICAgIEBUbXBDU1ZIZWFkID0gcXcoRkFRTnVtYmVyIFRpdGxlIENhdGVnb3J5KTsKICAgICAgICAgICAgICAgIEBDU1ZIZWFkICAgID0gcXcoRkFRTnVtYmVyIFRpdGxlIENhdGVnb3J5KTsKCiAgICAgICAgICAgICAgICAjIGluc2VydCBsYW5ndWFnZSBoZWFkZXIKICAgICAgICAgICAgICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFRtcENTVkhlYWQsICdMYW5ndWFnZSc7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgICAgJ0xhbmd1YWdlJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwdXNoIEBUbXBDU1ZIZWFkLCBxdyhTdGF0ZSBDaGFuZ2VkKTsKICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICAgIHF3KFN0YXRlIENoYW5nZWQpOwoKICAgICAgICAgICAgICAgICMgaW5jbHVkZSB0aGUgc2VsZWN0ZWQgZHluYW1pYyBmaWVsZHMgb24gQ1ZTIHJlc3VsdHMKICAgICAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskQ1NWRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gZXEgJyc7CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQFRtcENTVkhlYWQsICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCAgICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHRyYW5zbGF0ZSBoZWFkZXJzCiAgICAgICAgICAgIGZvciBteSAkSGVhZGVyIChAQ1NWSGVhZCkgewoKICAgICAgICAgICAgICAgICMgcmVwbGFjZSBGQVFOdW1iZXIgaGVhZGVyIHdpdGggdGhlIGN1cnJlbnQgRkFRSG9vayBmcm9tIGNvbmZpZwogICAgICAgICAgICAgICAgaWYgKCAkSGVhZGVyIGVxICdGQVFOdW1iZXInICkgewogICAgICAgICAgICAgICAgICAgICRIZWFkZXIgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6RkFRSG9vaycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEhlYWRlciA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkSGVhZGVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhc3NlbWJsZSBDU1YgZGF0YQogICAgICAgICAgICBteSAkQ1NWID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNTVicpLT5BcnJheTJDU1YoCiAgICAgICAgICAgICAgICBIZWFkICAgICAgPT4gXEBDU1ZIZWFkLAogICAgICAgICAgICAgICAgRGF0YSAgICAgID0+IFxAQ1NWRGF0YSwKICAgICAgICAgICAgICAgIFNlcGFyYXRvciA9PiAkU2VsZi0+e1VzZXJDU1ZTZXBhcmF0b3J9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZXR1cm4gQ1NWIHRvIGRvd25sb2FkCiAgICAgICAgICAgIG15ICRDU1ZGaWxlID0gJ0ZBUV9zZWFyY2gnOwogICAgICAgICAgICBteSAoICRzLCAkbSwgJGgsICRELCAkTSwgJFkgKSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRNID0gc3ByaW50ZiggIiUwMmQiLCAkTSApOwogICAgICAgICAgICAkRCA9IHNwcmludGYoICIlMDJkIiwgJEQgKTsKICAgICAgICAgICAgJGggPSBzcHJpbnRmKCAiJTAyZCIsICRoICk7CiAgICAgICAgICAgICRtID0gc3ByaW50ZiggIiUwMmQiLCAkbSApOwogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRDU1ZGaWxlIC4gIl8iIC4gIiRZLSRNLSREIiAuICJfIiAuICIkaC0kbS5jc3YiLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gInRleHQvY3N2OyBjaGFyc2V0PSIgLiAkTGF5b3V0T2JqZWN0LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJENTViwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gZXEgJ1ByaW50JyApIHsKCiAgICAgICAgICAgICMgZ2V0IFBERiBvYmplY3QKICAgICAgICAgICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAgICAgICAgIG15IEBQREZEYXRhOwogICAgICAgICAgICBmb3IgbXkgJEZBUUlEIChAVmlld2FibGVGQVFJRHMpIHsKCiAgICAgICAgICAgICAgICAjIGdldCBGQVEgZGF0YSBkZXRhaWxzCiAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IGNoYW5nZSBkYXRlIHRvIGxvbmcgZm9ybWF0CiAgICAgICAgICAgICAgICBteSAkQ2hhbmdlZCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkZvcm1hdFRpbWVTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgJEZBUURhdGF7Q2hhbmdlZH0sCiAgICAgICAgICAgICAgICAgICAgJ0RhdGVGb3JtYXRMb25nJywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgUERGIFJvd3MKICAgICAgICAgICAgICAgIG15IEBQREZSb3c7CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICRGQVFEYXRhe051bWJlcn07CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICRGQVFEYXRhe1RpdGxlfTsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgJEZBUURhdGF7Q2F0ZWdvcnlOYW1lfTsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBsYW5ndWFnZSByb3cKICAgICAgICAgICAgICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgJEZBUURhdGF7TGFuZ3VhZ2V9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRGQVFEYXRhe1N0YXRlfTsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRDaGFuZ2VkOwogICAgICAgICAgICAgICAgcHVzaCBAUERGRGF0YSwgXEBQREZSb3c7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgUERGIE91dHB1dAogICAgICAgICAgICBteSAkVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUScpIC4gJyAnCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU2VhcmNoJyk7CiAgICAgICAgICAgIG15ICRQcmludGVkQnkgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ3ByaW50ZWQgYnknKTsKICAgICAgICAgICAgbXkgJFBhZ2UgICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUGFnZScpOwogICAgICAgICAgICBteSAkVGltZSAgICAgID0gJExheW91dE9iamVjdC0+e1RpbWV9OwoKICAgICAgICAgICAgIyBnZXQgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKICAgICAgICAgICAgbXkgJE1heFBhZ2VzID0gJENvbmZpZ09iamVjdC0+R2V0KCdQREY6Ok1heFBhZ2VzJyk7CiAgICAgICAgICAgIGlmICggISRNYXhQYWdlcyB8fCAkTWF4UGFnZXMgPCAxIHx8ICRNYXhQYWdlcyA+IDEwMDAgKSB7CiAgICAgICAgICAgICAgICAkTWF4UGFnZXMgPSAxMDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3JlYXRlIHRoZSBoZWFkZXIKICAgICAgICAgICAgbXkgJENlbGxEYXRhOwoKICAgICAgICAgICAgIyBvdXRwdXQgJ05vIFJlc3VsdCcsIGlmIG5vIGNvbnRlbnQgd2FzIGdpdmVuCiAgICAgICAgICAgIGlmIChAUERGRGF0YSkgewoKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMF0tPntDb250ZW50fSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpGQVFIb29rJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzBdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzFdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1RpdGxlJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzFdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzJdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NhdGVnb3J5Jyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzJdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CgogICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgY29ycmVjdCBoZWFkZXIgaW5kZXgKICAgICAgICAgICAgICAgIG15ICROZXh0SGVhZGVySW5kZXggPSAzOwoKICAgICAgICAgICAgICAgICMgYWRkIGxhbmd1YWdlIGhlYWRlcgogICAgICAgICAgICAgICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlszXS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMYW5ndWFnZScpOwogICAgICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bM10tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAgICAgICAgICAgICAkTmV4dEhlYWRlckluZGV4ICAgICAgICAgICAgICAgPSA0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bJE5leHRIZWFkZXJJbmRleF0tPntDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU3RhdGUnKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bJE5leHRIZWFkZXJJbmRleF0tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKCiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WyAkTmV4dEhlYWRlckluZGV4ICsgMSBdLT57Q29udGVudH0KICAgICAgICAgICAgICAgICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ2hhbmdlZCcpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsgJE5leHRIZWFkZXJJbmRleCArIDEgXS0+e0ZvbnR9ID0gJ1Byb3BvcnRpb25hbEJvbGQnOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBjb250ZW50IGFycmF5CiAgICAgICAgICAgICAgICBteSAkQ291bnRlclJvdyA9IDE7CiAgICAgICAgICAgICAgICBmb3IgbXkgJFJvdyAoQFBERkRhdGEpIHsKICAgICAgICAgICAgICAgICAgICBteSAkQ291bnRlckNvbHVtbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb250ZW50ICggQHskUm93fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bJENvdW50ZXJSb3ddLT5bJENvdW50ZXJDb2x1bW5dLT57Q29udGVudH0gPSAkQ29udGVudDsKICAgICAgICAgICAgICAgICAgICAgICAgJENvdW50ZXJDb2x1bW4rKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJENvdW50ZXJSb3crKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMF0tPntDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTm8gUmVzdWx0IScpOwoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwYWdlIHBhcmFtcwogICAgICAgICAgICBteSAlUGFnZVBhcmFtOwogICAgICAgICAgICAkUGFnZVBhcmFte1BhZ2VPcmllbnRhdGlvbn0gPSAnbGFuZHNjYXBlJzsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5Ub3B9ICAgICAgID0gMzA7CiAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luUmlnaHR9ICAgICA9IDQwOwogICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpbkJvdHRvbX0gICAgPSA0MDsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5MZWZ0fSAgICAgID0gNDA7CiAgICAgICAgICAgICRQYWdlUGFyYW17SGVhZGVyUmlnaHR9ICAgICA9ICRUaXRsZTsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtIZWFkbGluZUxlZnR9ICAgID0gJFRpdGxlOwoKICAgICAgICAgICAgIyB0YWJsZSBwYXJhbXMKICAgICAgICAgICAgbXkgJVRhYmxlUGFyYW07CiAgICAgICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfSAgICAgICAgICAgID0gJENlbGxEYXRhOwogICAgICAgICAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgICAgICAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgICAgICA9IDY7CiAgICAgICAgICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgICAgID0gMDsKICAgICAgICAgICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gPSAnI0RERERERCc7CiAgICAgICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgID0gMTsKICAgICAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgPSAzOwogICAgICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICA9IDM7CgogICAgICAgICAgICAjIGNyZWF0ZSBuZXcgUERGIGRvY3VtZW50CiAgICAgICAgICAgICRQREZPYmplY3QtPkRvY3VtZW50TmV3KAogICAgICAgICAgICAgICAgVGl0bGUgID0+ICRDb25maWdPYmplY3QtPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRUaXRsZSwKICAgICAgICAgICAgICAgIEVuY29kZSA9PiAkTGF5b3V0T2JqZWN0LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzdGFydCB0YWJsZSBvdXRwdXQKICAgICAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgICAgICVQYWdlUGFyYW0sCiAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZSAuICcgMScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICAgICAgWSAgICA9PiAtNiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IHRpdGxlCiAgICAgICAgICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgICAgICAgICBUZXh0ICAgICA9PiAkVGl0bGUsCiAgICAgICAgICAgICAgICBGb250U2l6ZSA9PiAxMywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgICAgICBZICAgID0+IC02LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgInByaW50ZWQgYnkiCiAgICAgICAgICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgICAgICAgICBUZXh0ID0+ICRQcmludGVkQnkgLiAnICcKICAgICAgICAgICAgICAgICAgICAuICRTZWxmLT57VXNlckZpcnN0bmFtZX0gLiAnICcKICAgICAgICAgICAgICAgICAgICAuICRTZWxmLT57VXNlckxhc3RuYW1lfSAuICcgKCcKICAgICAgICAgICAgICAgICAgICAuICRTZWxmLT57VXNlckVtYWlsfSAuICcpJwogICAgICAgICAgICAgICAgICAgIC4gJywgJyAuICRUaW1lLAogICAgICAgICAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgICAgICBZICAgID0+IC0xNCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIFBBR0U6CiAgICAgICAgICAgIGZvciAoIDIgLi4gJE1heFBhZ2VzICkgewoKICAgICAgICAgICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICAgICAgICAgIyBzdG9wIG91dHB1dCBvciBhbm90aGVyIHBhZ2UKICAgICAgICAgICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICAgICAgICAgIGxhc3QgUEFHRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAgICAgICAgICVQYWdlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdlIC4gJyAnIC4gJF8sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZXR1cm4gdGhlIFBERiBkb2N1bWVudAogICAgICAgICAgICBteSAkRmlsZW5hbWUgPSAnRkFRX3NlYXJjaCc7CiAgICAgICAgICAgIG15ICggJHMsICRtLCAkaCwgJEQsICRNLCAkWSApID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CiAgICAgICAgICAgIG15ICRQREZTdHJpbmcgPSAkUERGT2JqZWN0LT5Eb2N1bWVudE91dHB1dCgpOwogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSAuICJfIiAuICIkWS0kTS0kRCIgLiAiXyIgLiAiJGgtJG0ucGRmIiwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJhcHBsaWNhdGlvbi9wZGYiLAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc3RhcnQgSFRNTCBwYWdlCiAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPlByaW50KAogICAgICAgICAgICAgICAgT3V0cHV0ID0+IFwkT3V0cHV0LAogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0ID0gJyc7CgogICAgICAgICAgICBteSAkRmlsdGVyID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnJzsKICAgICAgICAgICAgbXkgJFZpZXcgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdWaWV3JyApICAgfHwgJyc7CgogICAgICAgICAgICAjIHNob3cgRkFRJ3MKICAgICAgICAgICAgbXkgJExpbmtQYWdlID0gJ0ZpbHRlcj0nCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJEZpbHRlcikKICAgICAgICAgICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRWaWV3KQogICAgICAgICAgICAgICAgLiAnO1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkU29ydEJ5KQogICAgICAgICAgICAgICAgLiAnO09yZGVyQnk9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJE9yZGVyQnkpCiAgICAgICAgICAgICAgICAuICc7UHJvZmlsZT0nIC4gJFByb2ZpbGUgLiAnO1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaCcKICAgICAgICAgICAgICAgIC4gJzsnOwogICAgICAgICAgICBteSAkTGlua1NvcnQgPSAnRmlsdGVyPScKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkRmlsdGVyKQogICAgICAgICAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFZpZXcpCiAgICAgICAgICAgICAgICAuICc7UHJvZmlsZT0nIC4gJFByb2ZpbGUgLiAnO1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaCcKICAgICAgICAgICAgICAgIC4gJzsnOwogICAgICAgICAgICBteSAkTGlua0ZpbHRlciA9ICdUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2g7UHJvZmlsZT0nCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFByb2ZpbGUpCiAgICAgICAgICAgICAgICAuICc7JzsKICAgICAgICAgICAgbXkgJExpbmtCYWNrID0gJ1N1YmFjdGlvbj1Mb2FkUHJvZmlsZTtQcm9maWxlPScKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkUHJvZmlsZSkKICAgICAgICAgICAgICAgIC4gJztUYWtlTGFzdFNlYXJjaD0xOyc7CgogICAgICAgICAgICBteSAkRmlsdGVyTGluayA9ICdTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFNvcnRCeSkKICAgICAgICAgICAgICAgIC4gJztPcmRlckJ5PScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRPcmRlckJ5KQogICAgICAgICAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFZpZXcpCiAgICAgICAgICAgICAgICAuICc7UHJvZmlsZT0nIC4gJFByb2ZpbGUgLiAnO1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaCcKICAgICAgICAgICAgICAgIC4gJzsnOwoKICAgICAgICAgICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgICAgICAgICBteSBAU2hvd0NvbHVtbnM7CiAgICAgICAgICAgIGlmICggJENvbmZpZy0+e1Nob3dDb2x1bW5zfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBhbGwgcG9zc2libGUgY29sdW1ucyBmcm9tIGNvbmZpZwogICAgICAgICAgICAgICAgbXkgJVBvc3NpYmxlQ29sdW1uID0gJXsgJENvbmZpZy0+e1Nob3dDb2x1bW5zfSB9OwoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICAgICAgICAgIENPTFVNTk5BTUU6CiAgICAgICAgICAgICAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJVBvc3NpYmxlQ29sdW1uICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OTkFNRSBpZiAhJFBvc3NpYmxlQ29sdW1ueyROYW1lfTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJE5hbWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBlbmZvcmNlIEZBUSBudW1iZXIgY29sdW1uIHNpbmNlIGlzIHRoZSBsaW5rIE1hc3RlckFjdGlvbiBob29rCiAgICAgICAgICAgICAgICBpZiAoICEkUG9zc2libGVDb2x1bW57J051bWJlcid9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAnTnVtYmVyJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5GQVFMaXN0U2hvdygKICAgICAgICAgICAgICAgIEZBUUlEcyA9PiBcQFZpZXdhYmxlRkFRSURzLAogICAgICAgICAgICAgICAgVG90YWwgID0+IHNjYWxhciBAVmlld2FibGVGQVFJRHMsCgogICAgICAgICAgICAgICAgVmlldyA9PiAkVmlldywKCiAgICAgICAgICAgICAgICBFbnYgICAgICAgID0+ICRTZWxmLAogICAgICAgICAgICAgICAgTGlua1BhZ2UgICA9PiAkTGlua1BhZ2UsCiAgICAgICAgICAgICAgICBMaW5rU29ydCAgID0+ICRMaW5rU29ydCwKICAgICAgICAgICAgICAgIExpbmtGaWx0ZXIgPT4gJExpbmtGaWx0ZXIsCiAgICAgICAgICAgICAgICBMaW5rQmFjayAgID0+ICRMaW5rQmFjaywKICAgICAgICAgICAgICAgIFByb2ZpbGUgICAgPT4gJFByb2ZpbGUsCgogICAgICAgICAgICAgICAgVGl0bGVOYW1lID0+ICdTZWFyY2ggUmVzdWx0JywKICAgICAgICAgICAgICAgIExpbWl0ICAgICA9PiAkU2VhcmNoTGltaXQsCgogICAgICAgICAgICAgICAgRmlsdGVyICAgICA9PiAkRmlsdGVyLAogICAgICAgICAgICAgICAgRmlsdGVyTGluayA9PiAkRmlsdGVyTGluaywKCiAgICAgICAgICAgICAgICBPcmRlckJ5ID0+ICRPcmRlckJ5LAogICAgICAgICAgICAgICAgU29ydEJ5ICA9PiAkU29ydEJ5LAoKICAgICAgICAgICAgICAgIFNob3dDb2x1bW5zICA9PiBcQFNob3dDb2x1bW5zLAogICAgICAgICAgICAgICAgRkFRVGl0bGVTaXplID0+ICRDb25maWctPntUaXRsZVNpemV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBidWlsZCBmb290ZXIKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQogICAgfQoKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBSkFYUHJvZmlsZURlbGV0ZScgKSB7CiAgICAgICAgbXkgJFByb2ZpbGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvZmlsZScgKTsKCiAgICAgICAgIyByZW1vdmUgb2xkIHByb2ZpbGUgc3R1ZmYKICAgICAgICAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZURlbGV0ZSgKICAgICAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFByb2ZpbGUsCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiAxLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBSkFYJyApIHsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT5fTWFza0Zvcm0oCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENoYXJzZXQgICAgID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGRlZmF1bHQgc2VhcmNoIHNjcmVlbgogICAgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZWFyY2gnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRU2VhcmNoJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgcmV0dXJuICRPdXRwdXQ7Cgp9CgpzdWIgX01hc2tGb3JtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnICkgewogICAgICAgICRUcmVlVmlldyA9IDE7CiAgICB9CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgbXkgJFByb2ZpbGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvZmlsZScgKSB8fCAnJzsKICAgIG15ICRFbXB0eVNlYXJjaCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdFbXB0eVNlYXJjaCcgKTsKICAgIGlmICggISRQcm9maWxlICkgewogICAgICAgICRFbXB0eVNlYXJjaCA9IDE7CiAgICB9CgogICAgIyBnZXQgc2VhcmNoIHByb2ZpbGUgb2JqZWN0CiAgICBteSAkU2VhcmNoUHJvZmlsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZWFyY2hQcm9maWxlJyk7CgogICAgbXkgJUdldFBhcmFtID0gJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVHZXQoCiAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgIE5hbWUgICAgICA9PiAkUHJvZmlsZSwKICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgKTsKCiAgICAjIGdldCBjb25maWcgZnJvbSBjb25zdHJ1Y3RvcgogICAgbXkgJENvbmZpZyA9ICRTZWxmLT57Q29uZmlnfTsKCiAgICAjIGlmIG5vIHByb2ZpbGUgaXMgdXNlZCwgc2V0IGRlZmF1bHQgcGFyYW1zIG9mIGRlZmF1bHQgYXR0cmlidXRlcwogICAgaWYgKCAhJFByb2ZpbGUgKSB7CiAgICAgICAgaWYgKCAkQ29uZmlnLT57RGVmYXVsdHN9ICkgewogICAgICAgICAgICBBVFRSSUJVVEU6CiAgICAgICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRDb25maWctPntEZWZhdWx0c30gfSApIHsKICAgICAgICAgICAgICAgIG5leHQgQVRUUklCVVRFIGlmICEkQ29uZmlnLT57RGVmYXVsdHN9LT57JEF0dHJpYnV0ZX07CiAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAkQXR0cmlidXRlIGVxICdEeW5hbWljRmllbGQnOwogICAgICAgICAgICAgICAgJEdldFBhcmFteyRBdHRyaWJ1dGV9ID0gJENvbmZpZy0+e0RlZmF1bHRzfS0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGF0dHJpYnV0ZXMgc3RyaW5nCiAgICBteSBAQXR0cmlidXRlcyA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdOdW1iZXInLAogICAgICAgICAgICBWYWx1ZSA9PiAnRkFRIE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdGdWxsdGV4dCcsCiAgICAgICAgICAgIFZhbHVlID0+ICdGdWxsdGV4dCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdUaXRsZScsCiAgICAgICAgICAgIFZhbHVlID0+ICdUaXRsZScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdLZXl3b3JkJywKICAgICAgICAgICAgVmFsdWUgPT4gJ0tleXdvcmQnLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyBMYW5ndWFnZXMgYXR0cmlidXRlCiAgICBteSAkTXVsdGlMYW5ndWFnZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CiAgICBpZiAoJE11bHRpTGFuZ3VhZ2UpIHsKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICdMYW5ndWFnZUlEcycsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnTGFuZ3VhZ2UnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcHVzaCBAQXR0cmlidXRlcywgKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0NhdGVnb3J5SURzJywKICAgICAgICAgICAgVmFsdWUgPT4gJ0NhdGVnb3J5JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1ZhbGlkSURzJywKICAgICAgICAgICAgVmFsdWUgPT4gJ1ZhbGlkaXR5JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1N0YXRlSURzJywKICAgICAgICAgICAgVmFsdWUgPT4gJ1N0YXRlJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1ZvdGVTZWFyY2hUeXBlJywKICAgICAgICAgICAgVmFsdWUgPT4gJ1ZvdGVzJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1JhdGVTZWFyY2hUeXBlJywKICAgICAgICAgICAgVmFsdWUgPT4gJ1JhdGUnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQXBwcm92ZWRTZWFyY2gnLAogICAgICAgICAgICBWYWx1ZSA9PiAnQXBwcm92ZWQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ3JlYXRlZFVzZXJJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiAnQ3JlYXRlZCBieScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdMYXN0Q2hhbmdlZFVzZXJJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiAnTGFzdCBDaGFuZ2VkIGJ5JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0l0ZW1DcmVhdGVUaW1lUG9pbnQnLAogICAgICAgICAgICBWYWx1ZSA9PiAnRkFRIEl0ZW0gQ3JlYXRlIFRpbWUgKGJlZm9yZS9hZnRlciknLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSXRlbUNyZWF0ZVRpbWVTbG90JywKICAgICAgICAgICAgVmFsdWUgPT4gJ0ZBUSBJdGVtIENyZWF0ZSBUaW1lIChiZXR3ZWVuKScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdJdGVtQ2hhbmdlVGltZVBvaW50JywKICAgICAgICAgICAgVmFsdWUgPT4gJ0ZBUSBJdGVtIENoYW5nZSBUaW1lIChiZWZvcmUvYWZ0ZXIpJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0l0ZW1DaGFuZ2VUaW1lU2xvdCcsCiAgICAgICAgICAgIFZhbHVlID0+ICdGQVEgSXRlbSBDaGFuZ2UgVGltZSAoYmV0d2VlbiknLAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICREeW5hbWljRmllbGRTZXBhcmF0b3IgPSAxOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY3JlYXRlIGR5bmFtaWMgZmllbGRzIHNlYXJjaCBvcHRpb25zIGZvciBhdHRyaWJ1dGUgc2VsZWN0CiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gZXEgJyc7CgogICAgICAgICMgY3JlYXRlIGEgc2VwYXJhdG9yIGZvciBkeW5hbWljIGZpZWxkcyBhdHRyaWJ1dGVzCiAgICAgICAgaWYgKCREeW5hbWljRmllbGRTZXBhcmF0b3IpIHsKICAgICAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgID0+ICctJywKICAgICAgICAgICAgICAgICAgICBEaXNhYmxlZCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICREeW5hbWljRmllbGRTZXBhcmF0b3IgPSAwOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2VhcmNoIGZpZWxkIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRQcmVmZXJlbmNlcygKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSgkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyk7CgogICAgICAgICMgdHJhbnNsYXRlIHRoZSBkeW5hbWljIGZpZWxkIGxhYmVsCiAgICAgICAgbXkgJFRyYW5zbGF0ZWREeW5hbWljRmllbGRMYWJlbCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSwKICAgICAgICApOwoKICAgICAgICBQUkVGRVJFTkNFOgogICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgIyB0cmFuc2xhdGUgdGhlIHN1ZmZpeAogICAgICAgICAgICBteSAkVHJhbnNsYXRlZFN1ZmZpeCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICRQcmVmZXJlbmNlLT57TGFiZWxTdWZmaXh9LAogICAgICAgICAgICApIHx8ICcnOwoKICAgICAgICAgICAgaWYgKCRUcmFuc2xhdGVkU3VmZml4KSB7CiAgICAgICAgICAgICAgICAkVHJhbnNsYXRlZFN1ZmZpeCA9ICcgKCcgLiAkVHJhbnNsYXRlZFN1ZmZpeCAuICcpJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9PiAnU2VhcmNoX0R5bmFtaWNGaWVsZF8nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJFByZWZlcmVuY2UtPntUeXBlfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVHJhbnNsYXRlZER5bmFtaWNGaWVsZExhYmVsIC4gJFRyYW5zbGF0ZWRTdWZmaXgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBhIHNlcGFyYXRvciBpZiBhIGR5bmFtaWMgZmllbGQgYXR0cmlidXRlIHdhcyBwdXNoZWQKICAgIGlmICggISREeW5hbWljRmllbGRTZXBhcmF0b3IgKSB7CiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICAgICA9PiAnJywKICAgICAgICAgICAgICAgIFZhbHVlICAgID0+ICctJywKICAgICAgICAgICAgICAgIERpc2FibGVkID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNyZWF0ZSBIVE1MIHN0cmluZ3MgZm9yIGFsbCBkeW5hbWljIGZpZWxkcwogICAgbXkgJUR5bmFtaWNGaWVsZEhUTUw7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICApOwoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgUFJFRkVSRU5DRToKICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGZpZWxkIEhUTUwKICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfQogICAgICAgICAgICAgICAgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRSZW5kZXIoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIFByb2ZpbGUgICAgICAgICAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0+CiAgICAgICAgICAgICAgICAgICAgJENvbmZpZy0+e0RlZmF1bHRzfS0+e0R5bmFtaWNGaWVsZH0KICAgICAgICAgICAgICAgICAgICAtPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBkcm9wLWRvd24gbWVudSBmb3IgJ2F0dHJpYnV0ZXMnCiAgICAkUGFyYW17QXR0cmlidXRlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgPT4gXEBBdHRyaWJ1dGVzLAogICAgICAgIE5hbWUgICAgID0+ICdBdHRyaWJ1dGUnLAogICAgICAgIE11bHRpcGxlID0+IDAsCiAgICAgICAgQ2xhc3MgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwogICAgJFBhcmFte0F0dHJpYnV0ZXNPcmlnU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICA9PiBcQEF0dHJpYnV0ZXMsCiAgICAgICAgTmFtZSAgICAgPT4gJ0F0dHJpYnV0ZU9yaWcnLAogICAgICAgIE11bHRpcGxlID0+IDAsCiAgICAgICAgQ2xhc3MgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyBnZXQgbGFuZ3VhZ2VzIGxpc3QKICAgIG15ICVMYW5ndWFnZXMgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBkcm9wLWRvd24gbWVudSBmb3IgJ2xhbmd1YWdlcycKICAgICRQYXJhbXtMYW5ndWFnZXNTZWxlY3Rpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVMYW5ndWFnZXMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnTGFuZ3VhZ2VJRHMnLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17TGFuZ3VhZ2VJRHN9IHx8IFtdLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgZ2V0IGNhdGVnb3JpZXMgKHdpdGggY2F0ZWdvcnkgbG9uZyBuYW1lcykgd2hlcmUgdXNlciBoYXMgcmlnaHRzCiAgICBteSAkVXNlckNhdGVnb3JpZXNMb25nTmFtZXMgPSAkRkFRT2JqZWN0LT5HZXRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGJ1aWxkIHRoZSBjYXRlZ29yeSBzZWxlY3Rpb24KICAgICRQYXJhbXtDYXRlZ29yaWVzU2VsZWN0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiAkVXNlckNhdGVnb3JpZXNMb25nTmFtZXMsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0NhdGVnb3J5SURzJywKICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRHZXRQYXJhbXtDYXRlZ29yeUlEc30gfHwgW10sCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgIFRyZWVWaWV3ICAgID0+ICRUcmVlVmlldywKICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKCiAgICAjIGJ1aWxkIHRoZSB2YWxpZCBzZWxlY3Rpb24KICAgICRQYXJhbXtWYWxpZFNlbGVjdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ1ZhbGlkSURzJywKICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRHZXRQYXJhbXtWYWxpZElEc30gfHwgW10sCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGNyZWF0ZSBhIG1peCBvZiBzdGF0ZSBhbmQgc3RhdGUgdHlwZXMgaGFzaCBpbiBvcmRlciB0byBoYXZlIHRoZSBzdGF0ZSB0eXBlIElEcyB3aXRoIHN0YXRlCiAgICAjIG5hbWVzCiAgICBteSAlU3RhdGVMaXN0ID0gJEZBUU9iamVjdC0+U3RhdGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVTdGF0ZXM7CiAgICBmb3IgbXkgJFN0YXRlSUQgKCBzb3J0IGtleXMgJVN0YXRlTGlzdCApIHsKICAgICAgICBteSAlU3RhdGVEYXRhID0gJEZBUU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJFN0YXRlc3sgJFN0YXRlRGF0YXtUeXBlSUR9IH0gPSAkU3RhdGVEYXRhe05hbWV9CiAgICB9CgogICAgJFBhcmFte1N0YXRlU2VsZWN0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVN0YXRlcywKICAgICAgICBOYW1lICAgICAgICA9PiAnU3RhdGVJRHMnLAogICAgICAgIFNpemUgICAgICAgID0+IDMsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJEdldFBhcmFte1N0YXRlSURzfSB8fCBbXSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgIG15ICVWb3RpbmdPcGVyYXRvcnMgPSAoCiAgICAgICAgRXF1YWxzICAgICAgICAgICAgPT4gJ0VxdWFscycsCiAgICAgICAgR3JlYXRlclRoYW4gICAgICAgPT4gJ0dyZWF0ZXJUaGFuJywKICAgICAgICBHcmVhdGVyVGhhbkVxdWFscyA9PiAnR3JlYXRlclRoYW5FcXVhbHMnLAogICAgICAgIFNtYWxsZXJUaGFuICAgICAgID0+ICdTbWFsbGVyVGhhbicsCiAgICAgICAgU21hbGxlclRoYW5FcXVhbHMgPT4gJ1NtYWxsZXJUaGFuRXF1YWxzJywKICAgICk7CgogICAgJFBhcmFte1ZvdGVTZWFyY2hUeXBlU2VsZWN0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVZvdGluZ09wZXJhdG9ycywKICAgICAgICBOYW1lICAgICAgICA9PiAnVm90ZVNlYXJjaFR5cGUnLAogICAgICAgIFNpemUgICAgICAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJEdldFBhcmFte1ZvdGVTZWFyY2hUeXBlfSB8fCAnJywKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE11bHRpcGxlICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICRQYXJhbXtSYXRlU2VhcmNoVHlwZVNlbGVjdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgPT4gXCVWb3RpbmdPcGVyYXRvcnMsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ1JhdGVTZWFyY2hUeXBlJywKICAgICAgICBTaXplICAgICAgICA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRHZXRQYXJhbXtSYXRlU2VhcmNoVHlwZX0gfHwgJycsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICBNdWx0aXBsZSAgICA9PiAwLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKICAgICRQYXJhbXtSYXRlU2VhcmNoU2VsZWN0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgMCAgID0+ICcwJScsCiAgICAgICAgICAgIDI1ICA9PiAnMjUlJywKICAgICAgICAgICAgNTAgID0+ICc1MCUnLAogICAgICAgICAgICA3NSAgPT4gJzc1JScsCiAgICAgICAgICAgIDEwMCA9PiAnMTAwJScsCiAgICAgICAgfSwKICAgICAgICBTb3J0ICAgICAgICA9PiAnTnVtZXJpY0tleScsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ1JhdGVTZWFyY2gnLAogICAgICAgIFNpemUgICAgICAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJEdldFBhcmFte1JhdGVTZWFyY2h9IHx8ICcnLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMCwKICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgJFBhcmFte0FwcHJvdmVkU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgTm8gID0+ICdObycsCiAgICAgICAgICAgIFllcyA9PiAnWWVzJywKICAgICAgICB9LAogICAgICAgIE5hbWUgICAgICAgID0+ICdBcHByb3ZlZFNlYXJjaCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJEdldFBhcmFte0FwcHJvdmVkU2VhcmNofSB8fCAnWWVzJywKICAgICAgICBNdWx0aXBsZSAgICA9PiAwLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgZ2V0IGEgbGlzdCBvZiBhbGwgdXNlcnMgdG8gZGlzcGxheQogICAgbXkgJVNob3duVXNlcnMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTGlzdCgKICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgdGhlIFVzZXJJRHMgZnJvbSBGQVEgYW5kIGZhcV9hZG1pbiBtZW1iZXJzCiAgICBteSAlR3JvdXBVc2VyczsKICAgIGZvciBteSAkR3JvdXAgKHF3KGZhcSBmYXFfYWRtaW4pKSB7CgogICAgICAgICMgZ2V0IGdyb3VwIG9iamVjdAogICAgICAgIG15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKICAgICAgICBteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBMb29rdXAoIEdyb3VwID0+ICRHcm91cCApOwogICAgICAgIG15ICVVc2VycyA9ICRHcm91cE9iamVjdC0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICBHcm91cElEID0+ICRHcm91cElELAogICAgICAgICAgICBUeXBlICAgID0+ICdydycsCiAgICAgICAgICAgIFJlc3VsdCAgPT4gJ0hBU0gnLAogICAgICAgICk7CiAgICAgICAgJUdyb3VwVXNlcnMgPSAoICVHcm91cFVzZXJzLCAlVXNlcnMgKTsKICAgIH0KCiAgICAjIHJlbW92ZSBhbGwgdXNlcnMgdGhhdCBhcmUgbm90IGluIHRoZSBGQVEgb3IgZmFxX2FkbWluIGdyb3VwcwogICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJVNob3duVXNlcnMgKSB7CiAgICAgICAgaWYgKCAhJEdyb3VwVXNlcnN7JFVzZXJJRH0gKSB7CiAgICAgICAgICAgIGRlbGV0ZSAkU2hvd25Vc2Vyc3skVXNlcklEfTsKICAgICAgICB9CiAgICB9CiAgICAkUGFyYW17Q3JlYXRlZFVzZXJTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NyZWF0ZWRVc2VySURzJywKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFte0NyZWF0ZWRVc2VySURzfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKICAgICRQYXJhbXtMYXN0Q2hhbmdlZFVzZXJTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0xhc3RDaGFuZ2VkVXNlcklEcycsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtMYXN0Q2hhbmdlZFVzZXJJRHN9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50U3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFsgMSAuLiA1OSBdLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0l0ZW1DcmVhdGVUaW1lUG9pbnQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnR9LAogICAgKTsKICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50U3RhcnRTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAnTGFzdCcgICA9PiAnd2l0aGluIHRoZSBsYXN0IC4uLicsCiAgICAgICAgICAgICdCZWZvcmUnID0+ICdtb3JlIHRoYW4gLi4uIGFnbycsCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdJdGVtQ3JlYXRlVGltZVBvaW50U3RhcnQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnRTdGFydH0gfHwgJ0xhc3QnLAogICAgKTsKICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50Rm9ybWF0U3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgbWludXRlID0+ICdtaW51dGUocyknLAogICAgICAgICAgICBob3VyICAgPT4gJ2hvdXIocyknLAogICAgICAgICAgICBkYXkgICAgPT4gJ2RheShzKScsCiAgICAgICAgICAgIHdlZWsgICA9PiAnd2VlayhzKScsCiAgICAgICAgICAgIG1vbnRoICA9PiAnbW9udGgocyknLAogICAgICAgICAgICB5ZWFyICAgPT4gJ3llYXIocyknLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnSXRlbUNyZWF0ZVRpbWVQb2ludEZvcm1hdCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17SXRlbUNyZWF0ZVRpbWVQb2ludEZvcm1hdH0sCiAgICApOwogICAgJFBhcmFte0l0ZW1DcmVhdGVUaW1lU3RhcnRTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgUHJlZml4ICAgPT4gJ0l0ZW1DcmVhdGVUaW1lU3RhcnQnLAogICAgICAgIEZvcm1hdCAgID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgIERpZmZUaW1lID0+IC0oICggNjAgKiA2MCAqIDI0ICkgKiAzMCApLAogICAgKTsKICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZVN0b3BTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgUHJlZml4ID0+ICdJdGVtQ3JlYXRlVGltZVN0b3AnLAogICAgICAgIEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0JywKICAgICk7CgogICAgJFBhcmFte0l0ZW1DaGFuZ2VUaW1lUG9pbnRTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gWyAxIC4uIDU5IF0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnSXRlbUNoYW5nZVRpbWVQb2ludCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17SXRlbUNoYW5nZVRpbWVQb2ludH0sCiAgICApOwogICAgJFBhcmFte0l0ZW1DaGFuZ2VUaW1lUG9pbnRTdGFydFN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICdMYXN0JyAgID0+ICd3aXRoaW4gdGhlIGxhc3QgLi4uJywKICAgICAgICAgICAgJ0JlZm9yZScgPT4gJ21vcmUgdGhhbiAuLi4gYWdvJywKICAgICAgICB9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ0l0ZW1DaGFuZ2VUaW1lUG9pbnRTdGFydCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17SXRlbUNoYW5nZVRpbWVQb2ludFN0YXJ0fSB8fCAnTGFzdCcsCiAgICApOwogICAgJFBhcmFte0l0ZW1DaGFuZ2VUaW1lUG9pbnRGb3JtYXRTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBtaW51dGUgPT4gJ21pbnV0ZShzKScsCiAgICAgICAgICAgIGhvdXIgICA9PiAnaG91cihzKScsCiAgICAgICAgICAgIGRheSAgICA9PiAnZGF5KHMpJywKICAgICAgICAgICAgd2VlayAgID0+ICd3ZWVrKHMpJywKICAgICAgICAgICAgbW9udGggID0+ICdtb250aChzKScsCiAgICAgICAgICAgIHllYXIgICA9PiAneWVhcihzKScsCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdJdGVtQ2hhbmdlVGltZVBvaW50Rm9ybWF0JywKICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtJdGVtQ2hhbmdlVGltZVBvaW50Rm9ybWF0fSwKICAgICk7CiAgICAkUGFyYW17SXRlbUNoYW5nZVRpbWVTdGFydFN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICVHZXRQYXJhbSwKICAgICAgICBQcmVmaXggICA9PiAnSXRlbUNoYW5nZVRpbWVTdGFydCcsCiAgICAgICAgRm9ybWF0ICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICAgICAgRGlmZlRpbWUgPT4gLSggKCA2MCAqIDYwICogMjQgKSAqIDMwICksCiAgICApOwogICAgJFBhcmFte0l0ZW1DaGFuZ2VUaW1lU3RvcFN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICVHZXRQYXJhbSwKICAgICAgICBQcmVmaXggPT4gJ0l0ZW1DaGFuZ2VUaW1lU3RvcCcsCiAgICAgICAgRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgKTsKCiAgICBteSAlUHJvZmlsZXMgPSAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZUxpc3QoCiAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICApOwogICAgZGVsZXRlICRQcm9maWxlc3snJ307CiAgICBkZWxldGUgJFByb2ZpbGVzeydsYXN0LXNlYXJjaCd9OwogICAgaWYgKCRFbXB0eVNlYXJjaCkgewogICAgICAgICRQcm9maWxlc3snJ30gPSAnLSc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkUHJvZmlsZXN7J2xhc3Qtc2VhcmNoJ30gPSAnLSc7CiAgICB9CiAgICAkUGFyYW17UHJvZmlsZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVQcm9maWxlcywKICAgICAgICBOYW1lICAgICAgID0+ICdQcm9maWxlJywKICAgICAgICBJRCAgICAgICAgID0+ICdTZWFyY2hQcm9maWxlJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQcm9maWxlLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICRQYXJhbXtSZXN1bHRGb3JtU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgTm9ybWFsID0+ICdOb3JtYWwnLAogICAgICAgICAgICBQcmludCAgPT4gJ1ByaW50JywKICAgICAgICAgICAgQ1NWICAgID0+ICdDU1YnLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnUmVzdWx0Rm9ybScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gfHwgJ05vcm1hbCcsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBIVE1MIHNlYXJjaCBtYXNrIG91dHB1dAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2VhcmNoQUpBWCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBFbXB0eVNlYXJjaCA9PiAkRW1wdHlTZWFyY2gsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBvdXRwdXQgRHluYW1pYyBmaWVsZHMgYmxvY2tzCiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IHNlYXJjaCBmaWVsZCBwcmVmZXJlbmNlcwogICAgICAgIG15ICRTZWFyY2hGaWVsZFByZWZlcmVuY2VzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUHJlZmVyZW5jZXMoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICk7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0FycmF5UmVmV2l0aERhdGEoJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMpOwoKICAgICAgICBQUkVGRVJFTkNFOgogICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgIyBza2lwIGZpZWxkcyB0aGF0IEhUTUwgY291bGQgbm90IGJlIHJldHJpZXZlZAogICAgICAgICAgICBuZXh0IFBSRUZFUkVOQ0UgaWYgIUlzSGFzaFJlZldpdGhEYXRhKAogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfQogICAgICAgICAgICAgICAgICAgICAgICAtPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgRmllbGQgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfQogICAgICAgICAgICAgICAgICAgICAgICAtPntGaWVsZH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgYXR0cmlidXRlcwogICAgbXkgJUFscmVhZHlTaG93bjsKICAgIElURU06CiAgICBmb3IgbXkgJEl0ZW0gKEBBdHRyaWJ1dGVzKSB7CiAgICAgICAgbXkgJEtleSA9ICRJdGVtLT57S2V5fTsKICAgICAgICBuZXh0IElURU0gaWYgISRLZXk7CiAgICAgICAgbmV4dCBJVEVNIGlmICFkZWZpbmVkICRHZXRQYXJhbXskS2V5fTsKICAgICAgICBuZXh0IElURU0gaWYgJEdldFBhcmFteyRLZXl9IGVxICcnOwoKICAgICAgICBuZXh0IElURU0gaWYgJEFscmVhZHlTaG93bnskS2V5fTsKICAgICAgICAkQWxyZWFkeVNob3dueyRLZXl9ID0gMTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU2VhcmNoQUpBWFNob3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAkS2V5LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBpZiBubyBhdHRyaWJ1dGUgaXMgc2hvd24sIHNob3cgZnVsbC10ZXh0IHNlYXJjaAogICAgaWYgKCAhJFByb2ZpbGUgKSB7CgogICAgICAgICMgTWVyZ2UgcmVndWxhciBzaG93L2hpZGUgc2V0dGluZ3MgYW5kIHRoZSBzZXR0aW5ncyBmb3IgdGhlIGR5bmFtaWMgZmllbGRzCiAgICAgICAgbXkgJURlZmF1bHRzID0gJXsgJENvbmZpZy0+e0RlZmF1bHRzfSB8fCB7fSB9OwoKICAgICAgICBkZWxldGUgJERlZmF1bHRze0R5bmFtaWNGaWVsZH07CgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkSXRlbSAoIHNvcnQga2V5cyAleyAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfSB8fCB7fSB9ICkgewogICAgICAgICAgICBpZiAoICRDb25maWctPntEeW5hbWljRmllbGR9LT57JER5bmFtaWNGaWVsZEl0ZW19ID09IDIgKSB7CiAgICAgICAgICAgICAgICAkRGVmYXVsdHN7IlNlYXJjaF9EeW5hbWljRmllbGRfJER5bmFtaWNGaWVsZEl0ZW0ifSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICglRGVmYXVsdHMpIHsKICAgICAgICAgICAgREVGQVVMVDoKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJURlZmF1bHRzICkgewogICAgICAgICAgICAgICAgbmV4dCBERUZBVUxUIGlmICRLZXkgZXEgJ0R5bmFtaWNGaWVsZCc7ICAgICMgSWdub3JlIGVudHJ5IGZvciBERiBjb25maWcKICAgICAgICAgICAgICAgIG5leHQgREVGQVVMVCBpZiAkQWxyZWFkeVNob3dueyRLZXl9OwogICAgICAgICAgICAgICAgJEFscmVhZHlTaG93bnskS2V5fSA9IDE7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VhcmNoQUpBWFNob3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJEtleSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTZWFyY2hBSkFYU2hvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJ0Z1bGx0ZXh0JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgb3V0cHV0CiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFTZWFyY2gnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUVNlYXJjaFNtYWxsOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBjb25maWcgZm9yIGZyb250ZW5kCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgRkFRIG9iamVjdAogICAgJFNlbGYtPntEeW5hbWljRmllbGR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgY29uZmlnIGZyb20gdGhlIGNvbnN0cnVjdG9yCiAgICBteSAkQ29uZmlnID0gJFNlbGYtPntDb25maWd9OwoKICAgICMgZ2V0IGNvbmZpZyBkYXRhCiAgICBteSAkU3RhcnRIaXQgPSBpbnQoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxICk7CiAgICBteSAkU2VhcmNoTGltaXQgPSAkQ29uZmlnLT57U2VhcmNoTGltaXR9IHx8IDUwMDsKICAgIG15ICRTb3J0QnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApCiAgICAgICAgfHwgJENvbmZpZy0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdGQVFJRCc7CiAgICBteSAkT3JkZXJCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlckJ5JyApCiAgICAgICAgfHwgJENvbmZpZy0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0Rvd24nOwogICAgbXkgJFByb2ZpbGUgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Byb2ZpbGUnICkgICAgICAgIHx8ICcnOwogICAgbXkgJFNhdmVQcm9maWxlICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVQcm9maWxlJyApICAgIHx8ICcnOwogICAgbXkgJFRha2VMYXN0U2VhcmNoID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Rha2VMYXN0U2VhcmNoJyApIHx8ICcnOwogICAgbXkgJEVyYXNlVGVtcGxhdGUgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VyYXNlVGVtcGxhdGUnICkgIHx8ICcnOwogICAgbXkgJE5hdiAgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ05hdicgKSAgICAgICAgICAgIHx8ICcnOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzZWFyY2ggd2l0aCBhIHNhdmVkIHRlbXBsYXRlCiAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZWFyY2hUZW1wbGF0ZScgKSAmJiAkUHJvZmlsZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPUFnZW50RkFRU2VhcmNoU21hbGw7U3ViYWN0aW9uPVNlYXJjaDtUYWtlTGFzdFNlYXJjaD0xO1NhdmVQcm9maWxlPTE7UHJvZmlsZT0kUHJvZmlsZTtOYXY9JE5hdiIKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNpbmdsZSBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGJhY2tlbmQgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGdldCBzZWFyY2ggcHJvZmlsZSBvYmplY3QKICAgIG15ICRTZWFyY2hQcm9maWxlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlYXJjaFByb2ZpbGUnKTsKCiAgICAjIGxvYWQgcHJvZmlsZXMgc3RyaW5nIHBhcmFtcyAocHJlc3MgbG9hZCBwcm9maWxlKQogICAgaWYgKCAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTG9hZFByb2ZpbGUnICYmICRQcm9maWxlICkgfHwgJFRha2VMYXN0U2VhcmNoICkgewogICAgICAgICVHZXRQYXJhbSA9ICRTZWFyY2hQcm9maWxlT2JqZWN0LT5TZWFyY2hQcm9maWxlR2V0KAogICAgICAgICAgICBCYXNlICAgICAgPT4gJ0ZBUVNlYXJjaCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkUHJvZmlsZSwKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNlYXJjaCBzdHJpbmcgcGFyYW1zIChnZXQgc3VibWl0dGVkIHBhcmFtcykKICAgIGVsc2UgewoKICAgICAgICAjIGdldCBzY2FsYXIgc2VhcmNoIHBhcmFtcwogICAgICAgIGZvciBteSAkUGFyYW1OYW1lICgKICAgICAgICAgICAgcXcoTnVtYmVyIFRpdGxlIEtleXdvcmQgRnVsbHRleHQgUmVzdWx0Rm9ybSBWb3RlU2VhcmNoIFZvdGVTZWFyY2hUeXBlIFZvdGVTZWFyY2hPcHRpb24KICAgICAgICAgICAgUmF0ZVNlYXJjaCBSYXRlU2VhcmNoVHlwZSBSYXRlU2VhcmNoT3B0aW9uIEFwcHJvdmVkU2VhcmNoCiAgICAgICAgICAgIFRpbWVTZWFyY2hUeXBlIENoYW5nZVRpbWVTZWFyY2hUeXBlCiAgICAgICAgICAgIEl0ZW1DcmVhdGVUaW1lUG9pbnRGb3JtYXQgSXRlbUNyZWF0ZVRpbWVQb2ludAogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVBvaW50U3RhcnQKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVTdGFydCBJdGVtQ3JlYXRlVGltZVN0YXJ0RGF5IEl0ZW1DcmVhdGVUaW1lU3RhcnRNb250aAogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVN0YXJ0WWVhcgogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVN0b3AgSXRlbUNyZWF0ZVRpbWVTdG9wRGF5IEl0ZW1DcmVhdGVUaW1lU3RvcE1vbnRoCiAgICAgICAgICAgIEl0ZW1DcmVhdGVUaW1lU3RvcFllYXIKICAgICAgICAgICAgSXRlbUNoYW5nZVRpbWVQb2ludEZvcm1hdCBJdGVtQ2hhbmdlVGltZVBvaW50CiAgICAgICAgICAgIEl0ZW1DaGFuZ2VUaW1lUG9pbnRTdGFydAogICAgICAgICAgICBJdGVtQ2hhbmdlVGltZVN0YXJ0IEl0ZW1DaGFuZ2VUaW1lU3RhcnREYXkgSXRlbUNoYW5nZVRpbWVTdGFydE1vbnRoCiAgICAgICAgICAgIEl0ZW1DaGFuZ2VUaW1lU3RhcnRZZWFyCiAgICAgICAgICAgIEl0ZW1DaGFuZ2VUaW1lU3RvcCBJdGVtQ2hhbmdlVGltZVN0b3BEYXkgSXRlbUNoYW5nZVRpbWVTdG9wTW9udGgKICAgICAgICAgICAgSXRlbUNoYW5nZVRpbWVTdG9wWWVhcgogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKCiAgICAgICAgICAgICMgcmVtb3ZlIHdoaXRlc3BhY2Ugb24gdGhlIHN0YXJ0IGFuZCBlbmQKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPX4gc3sgXEEgXHMrIH17fXhtczsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9fiBzeyBccysgXHogfXt9eG1zOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhcnJheSBzZWFyY2ggcGFyYW1zCiAgICAgICAgZm9yIG15ICRTZWFyY2hQYXJhbSAoCiAgICAgICAgICAgIHF3KENhdGVnb3J5SURzIExhbmd1YWdlSURzIFZhbGlkSURzIFN0YXRlSURzIENyZWF0ZWRVc2VySURzIExhc3RDaGFuZ2VkVXNlcklEcykKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgQEFycmF5ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFNlYXJjaFBhcmFtICk7CiAgICAgICAgICAgIGlmIChAQXJyYXkpIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskU2VhcmNoUGFyYW19ID0gXEBBcnJheTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgRHluYW1pYyBmaWVsZHMgZnJvbSBwYXJhbSBvYmplY3QKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICAgICAgbXkgJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSgkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyk7CgogICAgICAgICAgICBQUkVGRVJFTkNFOgogICAgICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgd2ViIHJlcXVlc3QKICAgICAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgICAgICBSZXR1cm5Qcm9maWxlU3RydWN0dXJlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgPT4gJFByZWZlcmVuY2UtPntUeXBlfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGNvbXBsZXRlIHZhbHVlIHN0cnVjdHVyZSBpbiBHZXRQYXJhbSB0byBzdG9yZSBpdCBsYXRlciBpbiB0aGUgc2VhcmNoIHByb2ZpbGUKICAgICAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZFZhbHVlKSApIHsKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0gPSAoICVHZXRQYXJhbSwgJXskRHluYW1pY0ZpZWxkVmFsdWV9ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgYXBwcm92ZWQgb3B0aW9uCiAgICBpZiAoICRHZXRQYXJhbXtBcHByb3ZlZFNlYXJjaH0gJiYgJEdldFBhcmFte0FwcHJvdmVkU2VhcmNofSBlcSAnWWVzJyApIHsKICAgICAgICAkR2V0UGFyYW17QXBwcm92ZWR9ID0gMTsKICAgIH0KICAgIGVsc2lmICggJEdldFBhcmFte0FwcHJvdmVkU2VhcmNofSAmJiAkR2V0UGFyYW17QXBwcm92ZWRTZWFyY2h9IGVxICdObycgKSB7CiAgICAgICAgJEdldFBhcmFte0FwcHJvdmVkfSA9IDA7CiAgICB9CgogICAgIyBnZXQgdm90ZSBvcHRpb24KICAgIGlmICggISRHZXRQYXJhbXtWb3RlU2VhcmNoT3B0aW9ufSApIHsKICAgICAgICAkR2V0UGFyYW17J1ZvdGVTZWFyY2hPcHRpb246Ok5vbmUnfSA9ICdjaGVja2VkPSJjaGVja2VkIic7CiAgICB9CiAgICBlbHNpZiAoICRHZXRQYXJhbXtWb3RlU2VhcmNoT3B0aW9ufSBlcSAnVm90ZVBvaW50JyApIHsKICAgICAgICAkR2V0UGFyYW17J1ZvdGVTZWFyY2hPcHRpb246OlZvdGVQb2ludCd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KCiAgICAjIGdldCByYXRlIG9wdGlvbgogICAgaWYgKCAhJEdldFBhcmFte1JhdGVTZWFyY2hPcHRpb259ICkgewogICAgICAgICRHZXRQYXJhbXsnUmF0ZVNlYXJjaE9wdGlvbjo6Tm9uZSd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KICAgIGVsc2lmICggJEdldFBhcmFte1JhdGVTZWFyY2hPcHRpb259IGVxICdSYXRlUG9pbnQnICkgewogICAgICAgICRHZXRQYXJhbXsnUmF0ZVNlYXJjaE9wdGlvbjo6UmF0ZVBvaW50J30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQoKICAgICMgZ2V0IGNyZWF0ZSB0aW1lIG9wdGlvbgogICAgaWYgKCAhJEdldFBhcmFte1RpbWVTZWFyY2hUeXBlfSApIHsKICAgICAgICAkR2V0UGFyYW17J1RpbWVTZWFyY2hUeXBlOjpOb25lJ30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQogICAgZWxzaWYgKCAkR2V0UGFyYW17VGltZVNlYXJjaFR5cGV9IGVxICdUaW1lUG9pbnQnICkgewogICAgICAgICRHZXRQYXJhbXsnVGltZVNlYXJjaFR5cGU6OlRpbWVQb2ludCd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KICAgIGVsc2lmICggJEdldFBhcmFte1RpbWVTZWFyY2hUeXBlfSBlcSAnVGltZVNsb3QnICkgewogICAgICAgICRHZXRQYXJhbXsnVGltZVNlYXJjaFR5cGU6OlRpbWVTbG90J30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSB0aW1lIG9wdGlvbgogICAgaWYgKCAhJEdldFBhcmFte0NoYW5nZVRpbWVTZWFyY2hUeXBlfSApIHsKICAgICAgICAkR2V0UGFyYW17J0NoYW5nZVRpbWVTZWFyY2hUeXBlOjpOb25lJ30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQogICAgZWxzaWYgKCAkR2V0UGFyYW17Q2hhbmdlVGltZVNlYXJjaFR5cGV9IGVxICdUaW1lUG9pbnQnICkgewogICAgICAgICRHZXRQYXJhbXsnQ2hhbmdlVGltZVNlYXJjaFR5cGU6OlRpbWVQb2ludCd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KICAgIGVsc2lmICggJEdldFBhcmFte0NoYW5nZVRpbWVTZWFyY2hUeXBlfSBlcSAnVGltZVNsb3QnICkgewogICAgICAgICRHZXRQYXJhbXsnQ2hhbmdlVGltZVNlYXJjaFR5cGU6OlRpbWVTbG90J30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQoKICAgICMgc2V0IHJlc3VsdCBmb3JtIEVOVgogICAgaWYgKCAhJEdldFBhcmFte1Jlc3VsdEZvcm19ICkgewogICAgICAgICRHZXRQYXJhbXtSZXN1bHRGb3JtfSA9ICcnOwogICAgfQoKICAgICMgc2hvdyByZXN1bHQgc2l0ZQogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlYXJjaCcgJiYgISRFcmFzZVRlbXBsYXRlICkgewoKICAgICAgICAjIGZpbGwgdXAgcHJvZmlsZSBuYW1lIChlLmcuIHdpdGggbGFzdC1zZWFyY2gpCiAgICAgICAgaWYgKCAhJFByb2ZpbGUgfHwgISRTYXZlUHJvZmlsZSApIHsKICAgICAgICAgICAgJFByb2ZpbGUgPSAnbGFzdC1zZWFyY2gnOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2Vzc2lvbiBvYmplY3QKICAgICAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICAgICAjIHN0b3JlIGxhc3Qgb3ZlcnZpZXcgc2NyZWVuCiAgICAgICAgbXkgJFVSTCA9ICJBY3Rpb249QWdlbnRGQVFTZWFyY2hTbWFsbDtTdWJhY3Rpb249U2VhcmNoO1Byb2ZpbGU9JFByb2ZpbGU7U29ydEJ5PSRTb3J0QnkiCiAgICAgICAgICAgIC4gIjtPcmRlckJ5PSRPcmRlckJ5O1Rha2VMYXN0U2VhcmNoPTE7U3RhcnRIaXQ9JFN0YXJ0SGl0O05hdj0kTmF2IjsKICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CiAgICAgICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CgogICAgICAgICMgc2F2ZSBzZWFyY2ggcHJvZmlsZSAodW5kZXIgbGFzdC1zZWFyY2ggb3IgcmVhbCBwcm9maWxlIG5hbWUpCiAgICAgICAgJFNhdmVQcm9maWxlID0gMTsKCiAgICAgICAgIyByZW1lbWJlciBsYXN0IHNlYXJjaCB2YWx1ZXMKICAgICAgICBpZiAoICRTYXZlUHJvZmlsZSAmJiAkUHJvZmlsZSApIHsKCiAgICAgICAgICAgICMgcmVtb3ZlIG9sZCBwcm9maWxlIHN0dWZmCiAgICAgICAgICAgICRTZWFyY2hQcm9maWxlT2JqZWN0LT5TZWFyY2hQcm9maWxlRGVsZXRlKAogICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRQcm9maWxlLAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBwcm9maWxlIHBhcmFtcwogICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlR2V0UGFyYW0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZUFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFByb2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEdldFBhcmFteyRLZXl9LAogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcHJlcGFyZSB2b3RlcyBzZWFyY2gKICAgICAgICBpZiAoIElzTnVtYmVyKCAkR2V0UGFyYW17Vm90ZVNlYXJjaH0gKSAmJiAkR2V0UGFyYW17Vm90ZVNlYXJjaE9wdGlvbn0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtWb3Rlc30gPSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17Vm90ZVNlYXJjaFR5cGV9ID0+ICRHZXRQYXJhbXtWb3RlU2VhcmNofQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIHJhdGUgc2VhcmNoCiAgICAgICAgaWYgKCBJc051bWJlciggJEdldFBhcmFte1JhdGVTZWFyY2h9ICkgJiYgJEdldFBhcmFte1JhdGVTZWFyY2hPcHRpb259ICkgewogICAgICAgICAgICAkR2V0UGFyYW17UmF0ZX0gPSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17UmF0ZVNlYXJjaFR5cGV9ID0+ICRHZXRQYXJhbXtSYXRlU2VhcmNofQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgbXkgJVRpbWVNYXAgPSAoCiAgICAgICAgICAgIEl0ZW1DcmVhdGUgPT4gJ1RpbWUnLAogICAgICAgICAgICBJdGVtQ2hhbmdlID0+ICdDaGFuZ2VUaW1lJywKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJFRpbWVUeXBlICggc29ydCBrZXlzICVUaW1lTWFwICkgewoKICAgICAgICAgICAgIyBnZXQgY3JlYXRlIHRpbWUgc2V0dGluZ3MKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyAkVGltZU1hcHskVGltZVR5cGV9IC4gJ1NlYXJjaFR5cGUnIH0gKSB7CgogICAgICAgICAgICAgICAgIyBkbyBub3RoaW5nIHdpdGggdGltZSBzdHVmZgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZU1hcHskVGltZVR5cGV9IC4gJ1NlYXJjaFR5cGUnIH0gZXEgJ1RpbWVTbG90JyApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkS2V5IChxdyhNb250aCBEYXkpKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0JyAuICRLZXkgfQogICAgICAgICAgICAgICAgICAgICAgICA9IHNwcmludGYoICIlMDJkIiwgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0JyAuICRLZXkgfSApOwogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wJyAuICRLZXkgfQogICAgICAgICAgICAgICAgICAgICAgICA9IHNwcmludGYoICIlMDJkIiwgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3AnIC4gJEtleSB9ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0RGF5JyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0TW9udGgnIH0KICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RhcnRZZWFyJyB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVOZXdlckRhdGUnIH0gPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RhcnRZZWFyJyB9IC4gJy0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0TW9udGgnIH0gLiAnLScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RhcnREYXknIH0KICAgICAgICAgICAgICAgICAgICAgICAgLiAnIDAwOjAwOjAwJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcERheScgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wTW9udGgnIH0KICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcFllYXInIH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU9sZGVyRGF0ZScgfSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wWWVhcicgfSAuICctJwogICAgICAgICAgICAgICAgICAgICAgICAuICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wTW9udGgnIH0gLiAnLScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcERheScgfQogICAgICAgICAgICAgICAgICAgICAgICAuICcgMjM6NTk6NTknOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZU1hcHskVGltZVR5cGV9IC4gJ1NlYXJjaFR5cGUnIH0gZXEgJ1RpbWVQb2ludCcgKSB7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50U3RhcnQnIH0KICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJFRpbWUgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9IGVxICdtaW51dGUnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ2hvdXInICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfSAqIDYwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAnZGF5JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWUgPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH0gKiA2MCAqIDI0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAnd2VlaycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9ICogNjAgKiAyNCAqIDc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9IGVxICdtb250aCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9ICogNjAgKiAyNCAqIDMwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAneWVhcicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9ICogNjAgKiAyNCAqIDM2NTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRTdGFydCcgfSBlcSAnQmVmb3JlJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgbW9yZSB0aGFuIC4uLiBhZ28KICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU9sZGVyTWludXRlcycgfSA9ICRUaW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludFN0YXJ0JyB9IGVxICdOZXh0JyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgd2l0aGluIG5leHQKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU5ld2VyTWludXRlcycgfSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVPbGRlck1pbnV0ZXMnIH0gPSAtJFRpbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAjIHdpdGhpbiBsYXN0IC4uLgogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lT2xkZXJNaW51dGVzJyB9ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU5ld2VyTWludXRlcycgfSA9ICRUaW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIGZ1bGwtdGV4dCBzZWFyY2gKICAgICAgICBpZiAoICRHZXRQYXJhbXtGdWxsdGV4dH0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtDb250ZW50U2VhcmNofSA9ICdPUic7CiAgICAgICAgICAgICRHZXRQYXJhbXtXaGF0fSAgICAgICAgICA9ICRHZXRQYXJhbXtGdWxsdGV4dH07CiAgICAgICAgfQoKICAgICAgICAjIGdldCB2YWxpZCBsaXN0CiAgICAgICAgbXkgJVZhbGlkTGlzdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgICAgIG15IEBBbGxWYWxpZElEcyA9IGtleXMgJVZhbGlkTGlzdDsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICAgICAgbXkgJEludGVyZmFjZSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICAgICAgTmFtZSAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBteSAkSW50ZXJmYWNlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgICAgICAgICAgVHlwZXMgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBZ2VudDo6U3RhdGVUeXBlcycpLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcHJlcGFyZSBzZWFyY2ggc3RhdGVzCiAgICAgICAgbXkgJFNlYXJjaFN0YXRlczsKICAgICAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoICRHZXRQYXJhbXtTdGF0ZUlEc30gKSApIHsKICAgICAgICAgICAgJFNlYXJjaFN0YXRlcyA9ICRJbnRlcmZhY2VTdGF0ZXM7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBTVEFURVRZUEVJRDoKICAgICAgICAgICAgZm9yIG15ICRTdGF0ZVR5cGVJRCAoIEB7ICRHZXRQYXJhbXtTdGF0ZUlEc30gfSApIHsKICAgICAgICAgICAgICAgIG5leHQgU1RBVEVUWVBFSUQgaWYgISRTdGF0ZVR5cGVJRDsKICAgICAgICAgICAgICAgIG5leHQgU1RBVEVUWVBFSUQgaWYgISRJbnRlcmZhY2VTdGF0ZXMtPnskU3RhdGVUeXBlSUR9OwogICAgICAgICAgICAgICAgJFNlYXJjaFN0YXRlcy0+eyRTdGF0ZVR5cGVJRH0gPSAkSW50ZXJmYWNlU3RhdGVzLT57JFN0YXRlVHlwZUlEfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIHZvdGVzIHNlYXJjaAogICAgICAgIGlmICggSXNOdW1iZXIoICRHZXRQYXJhbXtWb3RlU2VhcmNofSApICYmICRHZXRQYXJhbXtWb3RlU2VhcmNoT3B0aW9ufSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1ZvdGVzfSA9IHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtWb3RlU2VhcmNoVHlwZX0gPT4gJEdldFBhcmFte1ZvdGVTZWFyY2h9CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIHByZXBhcmUgcmF0ZSBzZWFyY2gKICAgICAgICBpZiAoIElzTnVtYmVyKCAkR2V0UGFyYW17UmF0ZVNlYXJjaH0gKSAmJiAkR2V0UGFyYW17UmF0ZVNlYXJjaE9wdGlvbn0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtSYXRlfSA9IHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtSYXRlU2VhcmNoVHlwZX0gPT4gJEdldFBhcmFte1JhdGVTZWFyY2h9CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIGR5bmFtaWMgZmllbGRzIHNlYXJjaCBwYXJhbWV0ZXJzIGZvciBGQVEgc2VhcmNoCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZFNlYXJjaFBhcmFtZXRlcnM7CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICMgZ2V0IHNlYXJjaCBmaWVsZCBwcmVmZXJlbmNlcwogICAgICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBwcm9maWxlCiAgICAgICAgICAgICAgICBteSAkU2VhcmNoUGFyYW1ldGVyID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUGFyYW1ldGVyQnVpbGQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUHJvZmlsZSAgICAgICAgICAgID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgID0+ICRQcmVmZXJlbmNlLT57VHlwZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IHNlYXJjaCBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCAkU2VhcmNoUGFyYW1ldGVyICkgewogICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRTZWFyY2hQYXJhbWV0ZXJzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICAgICAgICAgICAgICA9ICRTZWFyY2hQYXJhbWV0ZXItPntQYXJhbWV0ZXJ9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEdldCBVc2VyQ2F0ZWdvcnlHcm91cCBIYXNoCiAgICAgICAgIyBUaGlzIHJldHVybnMgYSBIYXNoIG9mIHRoZSBmb2xsb3dpbmcgc2FtcGxlIGRhdGEgc3RydWN0dXJlOgogICAgICAgICMKICAgICAgICAjICRVc2VyQ2F0R3JvdXAgPSB7CiAgICAgICAgIyAgICcxJyA9PiB7CiAgICAgICAgIyAgICAgICAgICAnMycgPT4gJ01pc2NTdWInCiAgICAgICAgIyAgICAgICAgfSwKICAgICAgICAjICAgJzMnID0+IHt9LAogICAgICAgICMgICAnMCcgPT4gewogICAgICAgICMgICAgICAgICAgICAnMScgPT4gJ01pc2MnLAogICAgICAgICMgICAgICAgICAgICAnMicgPT4gJ3NlY3JldCcKICAgICAgICAjICAgICAgICAgIH0sCiAgICAgICAgIyAgICcyJyA9PiB7fQogICAgICAgICMgfTsKICAgICAgICAjCiAgICAgICAgIyBLZXlzIG9mIHRoZSBvdXRlciBoYXNoIGluZm9ybSBhYm91dCBzdWJjYXRlZ29yaWVzCiAgICAgICAgIyAwIFNob3dzIHRvcCBsZXZlbCBDYXRlZ29yeUlEcy4KICAgICAgICAjIDEgU2hvd3MgdGhlIFN1YmNhdGVnb3J5SURzIG9mIENhdGVnb3J5IDEuCiAgICAgICAgIyAyIGFuZCAzIGFyZSBlbXB0eSBoYXNoZXMgYmVjYXVzZSB0aGVzZSBjYXRlZ29yaWVzIGRvbid0IGhhdmUgc3ViY2F0ZWdvcmllcy4KICAgICAgICAjCiAgICAgICAgIyBLZXlzIG9mIHRoZSBpbm5lciBoYXNoZXMgYXJlIENhdGVnb3J5SURzIGEgdXNlciBpcyBhbGxvd2VkIHRvIGhhdmUgcncgYWNjZXNzIHRvLgogICAgICAgICMgVmFsdWVzIGFyZSB0aGUgQ2F0ZWdvcnkgbmFtZXMuCgogICAgICAgIG15ICRVc2VyQ2F0R3JvdXAgPSAkRkFRT2JqZWN0LT5HZXRVc2VyQ2F0ZWdvcmllcygKICAgICAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBGaW5kIENhdGVnb3J5SURzIHRoZSBjdXJyZW50IFVzZXIgaXMgYWxsb3dlZCB0byB2aWV3CiAgICAgICAgbXkgJUFsbG93ZWRDYXRlZ29yeUlEcyA9ICgpOwoKICAgICAgICBpZiAoICRVc2VyQ2F0R3JvdXAgJiYgcmVmICRVc2VyQ2F0R3JvdXAgZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgIyBTbyBub3cgd2UgaGF2ZSB0byBleHRyYWN0IGFsbCBDYXRlZ29yeSBJRCdzIG9mIHRoZSAiaW5uZXIgaGFzaGVzIi4KICAgICAgICAgICAgIyAtPiBMb29wIHRocm91Z2ggdGhlIG91dGVyIGNhdGVnb3J5IElEJ3MKICAgICAgICAgICAgZm9yIG15ICRMZXZlbCAoIHNvcnQga2V5cyAleyRVc2VyQ2F0R3JvdXB9ICkgewoKICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlIFZhbHVlIG9mIHRoZSBjdXJyZW50IGhhc2gga2V5IGlzIGEgaGFzaCByZWYKICAgICAgICAgICAgICAgIGlmICggJFVzZXJDYXRHcm91cC0+eyRMZXZlbH0gJiYgcmVmICRVc2VyQ2F0R3JvdXAtPnskTGV2ZWx9IGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBNYXAgdGhlIGtleXMgb2YgdGhlIGlubmVyIGhhc2ggdG8gYSBUZW1wSURzIGhhc2gKICAgICAgICAgICAgICAgICAgICAjIE9yaWdpbmFsIERhdGFzdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgICAgIyB7CiAgICAgICAgICAgICAgICAgICAgIyAgJzEnID0+ICdNaXNjJywKICAgICAgICAgICAgICAgICAgICAjICAnMicgPT4gJ3NlY3JldCcKICAgICAgICAgICAgICAgICAgICAjIH0KICAgICAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgICAgIyBhZnRlciBtYXBwaW5nOgogICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAgICAjIHsKICAgICAgICAgICAgICAgICAgICAjICAnMScgPT4gMSwKICAgICAgICAgICAgICAgICAgICAjICAnMicgPT4gMScKICAgICAgICAgICAgICAgICAgICAjIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJVRlbXBJRHMgPSBtYXAgeyAkXyA9PiAxIH0ga2V5cyAleyAkVXNlckNhdEdyb3VwLT57JExldmVsfSB9OwoKICAgICAgICAgICAgICAgICAgICAjIFB1dCB0aGUgVGVtcElEcyBvdmVyIHRoZSBmb3JtYWxseSBmb3VuZCBBbGxvd2VkQ2F0ZWdvcnlzCiAgICAgICAgICAgICAgICAgICAgIyB0byBwcm9kdWNlIGEgaGFzaCB0aGF0IGhvbGRzIGFsbCBDYXRlZ29yeUlEIGFzIGtleXMKICAgICAgICAgICAgICAgICAgICAjIGFuZCB0aGUgbnVtYmVyIDEgYXMgdmFsdWVzLgogICAgICAgICAgICAgICAgICAgICVBbGxvd2VkQ2F0ZWdvcnlJRHMgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICVBbGxvd2VkQ2F0ZWdvcnlJRHMsCiAgICAgICAgICAgICAgICAgICAgICAgICVUZW1wSURzCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBGb3IgdGhlIGRhdGFiYXNlIHF1ZXJ5IGl0J3MgbmVjZXNzYXJ5IHRvIGhhdmUgYW4gYXJyYXkKICAgICAgICAjIG9mIENhdGVnb3J5SURzCiAgICAgICAgbXkgQENhdGVnb3J5SURzID0gKCk7CgogICAgICAgIGlmICglQWxsb3dlZENhdGVnb3J5SURzKSB7CiAgICAgICAgICAgIEBDYXRlZ29yeUlEcyA9IHNvcnQga2V5cyAlQWxsb3dlZENhdGVnb3J5SURzOwogICAgICAgIH0KCiAgICAgICAgIyBDYXRlZ29yaWVzIGdvdCBmcm9tIHRoZSB3ZWIgcmVxdWVzdCBjb3VsZCBpbmNsdWRlIGEgbm90IGFsbG93ZWQgY2F0ZWdvcnkgaWYgdGhlIHVzZXIKICAgICAgICAjICAgIHRlbXBlciB3aXRoIHRoZSBjYXRlZ29yaWVzIGRyb3AtYm94LCBhIGNoZWNrIGlzIG5lZWRlZC4KICAgICAgICAjCiAgICAgICAgIyAiTWFwIiBjb3B5IGZyb20gb25lIGFycmF5IHRvIGFub3RoZXIsIHdoaWxlICJncmVwIiB3aWxsIG9ubHkgbGV0IHBhc3MgdGhlIGNhdGVnb3JpZXMKICAgICAgICAjICAgIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlICVBbGxvd2VkQ2F0ZWdvcnlJRHMgaGFzaAogICAgICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkR2V0UGFyYW17Q2F0ZWdvcnlJRHN9ICkgKSB7CiAgICAgICAgICAgIEB7ICRHZXRQYXJhbXtDYXRlZ29yeUlEc30gfSA9IG1hcCB7JF99IGdyZXAgeyAkQWxsb3dlZENhdGVnb3J5SURzeyRffSB9IEB7ICRHZXRQYXJhbXtDYXRlZ29yeUlEc30gfTsKICAgICAgICB9CgogICAgICAgICMgSnVzdCBzZWFyY2ggaWYgd2UgZG8gaGF2ZSBjYXRlZ29yaWVzLCB3ZSBoYXZlIGFjY2VzcyB0by4KICAgICAgICAjIElmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIGFueSBjYXRlZ29yeSwgYSBzZWFyY2ggd2l0aCBubyBDYXRlZ29yeUlEcwogICAgICAgICMgd291bGQgcmVzdWx0IGluIGZpbmRpbmcgYWxsIGNhdGVnb3JpZXMuCiAgICAgICAgIwogICAgICAgICMgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBGQVEncyB3aXRob3V0IGNhdGVnb3JpZXMKICAgICAgICAjIHNvIGF0IGxlYXN0IG9uZSBjYXRlZ29yeSBoYXMgdG8gYmUgcHJlc2VudAoKICAgICAgICBteSBAVmlld2FibGVGQVFJRHMgPSAoKTsKCiAgICAgICAgaWYgKEBDYXRlZ29yeUlEcykgewoKICAgICAgICAgICAgIyBwZXJmb3JtIEZBUSBzZWFyY2gKICAgICAgICAgICAgIyBkZWZhdWx0IHNlYXJjaCBvbiBhbGwgdmFsaWQgaWRzLCB0aGlzIGNhbiBiZSBvdmVyd3JpdHRlbiBieSAlR2V0UGFyYW0KICAgICAgICAgICAgQFZpZXdhYmxlRkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICAgICA9PiBbJFNvcnRCeV0sCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICAgID0+IFskT3JkZXJCeV0sCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgICAgID0+ICRTZWFyY2hMaW1pdCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgU3RhdGVzICAgICAgICAgICAgICA9PiAkU2VhcmNoU3RhdGVzLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICAgICAgICAgICAgICBDb250ZW50U2VhcmNoU3VmZml4ID0+ICcqJywKICAgICAgICAgICAgICAgIFZhbGlkSURzICAgICAgICAgICAgPT4gXEBBbGxWYWxpZElEcywKICAgICAgICAgICAgICAgIENhdGVnb3J5SURzICAgICAgICAgPT4gXEBDYXRlZ29yeUlEcywKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVEeW5hbWljRmllbGRTZWFyY2hQYXJhbWV0ZXJzLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzdGFydCBIVE1MIHBhZ2UKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5QcmludCgKICAgICAgICAgICAgT3V0cHV0ID0+IFwkT3V0cHV0LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCA9ICcnOwoKICAgICAgICBteSAkRmlsdGVyID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnJzsKICAgICAgICBteSAkVmlldyAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZpZXcnICkgICB8fCAnJzsKCiAgICAgICAgIyBzaG93IEZBUSdzCiAgICAgICAgbXkgJExpbmtQYWdlID0gJ0ZpbHRlcj0nCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkRmlsdGVyKQogICAgICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkVmlldykKICAgICAgICAgICAgLiAnO1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkU29ydEJ5KQogICAgICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkT3JkZXJCeSkKICAgICAgICAgICAgLiAnO1Byb2ZpbGU9JyAuICRQcm9maWxlIC4gJztUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2gnCiAgICAgICAgICAgIC4gJztOYXY9JyAuICROYXYKICAgICAgICAgICAgLiAnOyc7CiAgICAgICAgbXkgJExpbmtTb3J0ID0gJ0ZpbHRlcj0nCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkRmlsdGVyKQogICAgICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkVmlldykKICAgICAgICAgICAgLiAnO1Byb2ZpbGU9JyAuICRQcm9maWxlIC4gJztUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2gnCiAgICAgICAgICAgIC4gJztOYXY9JyAuICROYXYKCiAgICAgICAgICAgIC4gJzsnOwogICAgICAgIG15ICRMaW5rRmlsdGVyID0gJ1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaDtQcm9maWxlPScKICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRQcm9maWxlKQogICAgICAgICAgICAuICc7TmF2PScgLiAkTmF2CiAgICAgICAgICAgIC4gJzsnOwogICAgICAgIG15ICRMaW5rQmFjayA9ICdTdWJhY3Rpb249TG9hZFByb2ZpbGU7UHJvZmlsZT0nCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkUHJvZmlsZSkKICAgICAgICAgICAgLiAnO05hdj0nIC4gJE5hdgogICAgICAgICAgICAuICc7VGFrZUxhc3RTZWFyY2g9MTsnOwoKICAgICAgICBteSAkRmlsdGVyTGluayA9ICdTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFNvcnRCeSkKICAgICAgICAgICAgLiAnO09yZGVyQnk9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJE9yZGVyQnkpCiAgICAgICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRWaWV3KQogICAgICAgICAgICAuICc7UHJvZmlsZT0nIC4gJFByb2ZpbGUgLiAnO1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaCcKICAgICAgICAgICAgLiAnO05hdj0nIC4gJE5hdgogICAgICAgICAgICAuICc7JzsKCiAgICAgICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgICAgIG15IEBTaG93Q29sdW1uczsKICAgICAgICBpZiAoICRDb25maWctPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICAgICAjIGdldCBhbGwgcG9zc2libGUgY29sdW1ucyBmcm9tIGNvbmZpZwogICAgICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkQ29uZmlnLT57U2hvd0NvbHVtbnN9IH07CgogICAgICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgICAgIENPTFVNTk5BTUU6CiAgICAgICAgICAgIGZvciBteSAkTmFtZSAoIHNvcnQga2V5cyAlUG9zc2libGVDb2x1bW4gKSB7CiAgICAgICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJE5hbWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZW5mb3JjZSBGQVEgbnVtYmVyIGNvbHVtbiBzaW5jZSBpcyB0aGUgbGluayBNYXN0ZXJBY3Rpb24gaG9vawogICAgICAgICAgICBpZiAoICEkUG9zc2libGVDb2x1bW57J051bWJlcid9ICkgewogICAgICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICdOdW1iZXInOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZBUUxpc3RTaG93KAogICAgICAgICAgICBGQVFJRHMgPT4gXEBWaWV3YWJsZUZBUUlEcywKICAgICAgICAgICAgVG90YWwgID0+IHNjYWxhciBAVmlld2FibGVGQVFJRHMsCgogICAgICAgICAgICBWaWV3ID0+ICRWaWV3LAoKICAgICAgICAgICAgRW52ICAgICAgICA9PiAkU2VsZiwKICAgICAgICAgICAgTGlua1BhZ2UgICA9PiAkTGlua1BhZ2UsCiAgICAgICAgICAgIExpbmtTb3J0ICAgPT4gJExpbmtTb3J0LAogICAgICAgICAgICBMaW5rRmlsdGVyID0+ICRMaW5rRmlsdGVyLAogICAgICAgICAgICBMaW5rQmFjayAgID0+ICRMaW5rQmFjaywKICAgICAgICAgICAgUHJvZmlsZSAgICA9PiAkUHJvZmlsZSwKCiAgICAgICAgICAgIFRpdGxlTmFtZSA9PiAnU2VhcmNoIFJlc3VsdCcsCiAgICAgICAgICAgIExpbWl0ICAgICA9PiAkU2VhcmNoTGltaXQsCgogICAgICAgICAgICBGaWx0ZXIgICAgID0+ICRGaWx0ZXIsCiAgICAgICAgICAgIEZpbHRlckxpbmsgPT4gJEZpbHRlckxpbmssCgogICAgICAgICAgICBPcmRlckJ5ID0+ICRPcmRlckJ5LAogICAgICAgICAgICBTb3J0QnkgID0+ICRTb3J0QnksCgogICAgICAgICAgICBTaG93Q29sdW1ucyA9PiBcQFNob3dDb2x1bW5zLAogICAgICAgICAgICBOYXYgICAgICAgICA9PiAkTmF2LAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoCiAgICAgICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICAgICApOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgIGVsc2UgewogICAgICAgICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza0Zvcm0oCiAgICAgICAgICAgIE5hdiA9PiAkTmF2LAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigKICAgICAgICAgICAgVHlwZSA9PiAnU21hbGwnLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgX01hc2tGb3JtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnICkgewogICAgICAgICRUcmVlVmlldyA9IDE7CiAgICB9CgogICAgIyBnZXQgcHJvZmlsZXMgbGlzdAogICAgbXkgJVByb2ZpbGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlYXJjaFByb2ZpbGUnKS0+U2VhcmNoUHJvZmlsZUxpc3QoCiAgICAgICAgQmFzZSAgICAgID0+ICdGQVFTZWFyY2gnLAogICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBidWlsZCBwcm9maWxlcyBvdXRwdXQgbGlzdAogICAgJFBhcmFte1Byb2ZpbGVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4geyVQcm9maWxlc30sCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdQcm9maWxlJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1Byb2ZpbGV9LAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGdldCBsYW5ndWFnZXMgbGlzdAogICAgbXkgJUxhbmd1YWdlcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGRyb3AtZG93biBtZW51IGZvciAnbGFuZ3VhZ2VzJwogICAgJFBhcmFte0xhbmd1YWdlc1NlbGVjdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJUxhbmd1YWdlcywKICAgICAgICBOYW1lICAgICAgID0+ICdMYW5ndWFnZUlEcycsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtMYW5ndWFnZUlEc30gfHwgW10sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgY2F0ZWdvcmllcyAod2l0aCBjYXRlZ29yeSBsb25nIG5hbWVzKSB3aGVyZSB1c2VyIGhhcyByaWdodHMKICAgIG15ICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcyA9ICRGQVFPYmplY3QtPkdldFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgYnVpbGQgdGhlIGNhdGVnb3J5IHNlbGVjdGlvbgogICAgJFBhcmFte0NhdGVnb3JpZXNTZWxlY3Rpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+ICRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcywKICAgICAgICBOYW1lICAgICAgICA9PiAnQ2F0ZWdvcnlJRHMnLAogICAgICAgIFNpemUgICAgICAgID0+IDUsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte0NhdGVnb3J5SURzfSB8fCBbXSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgVHJlZVZpZXcgICAgPT4gJFRyZWVWaWV3LAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwoKICAgICMgYnVpbGQgdGhlIHZhbGlkIHNlbGVjdGlvbgogICAgJFBhcmFte1ZhbGlkU2VsZWN0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgICA9PiAnVmFsaWRJRHMnLAogICAgICAgIFNpemUgICAgICAgID0+IDUsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte1ZhbGlkSURzfSB8fCBbXSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgY3JlYXRlIGEgbWl4IG9mIHN0YXRlIGFuZCBzdGF0ZSB0eXBlcyBoYXNoIGluIG9yZGVyIHRvIGhhdmUgdGhlIHN0YXRlIHR5cGUgSURzIHdpdGggc3RhdGUKICAgICMgbmFtZXMKICAgIG15ICVTdGF0ZUxpc3QgPSAkRkFRT2JqZWN0LT5TdGF0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgbXkgJVN0YXRlczsKICAgIGZvciBteSAkU3RhdGVJRCAoIHNvcnQga2V5cyAlU3RhdGVMaXN0ICkgewogICAgICAgIG15ICVTdGF0ZURhdGEgPSAkRkFRT2JqZWN0LT5TdGF0ZUdldCgKICAgICAgICAgICAgU3RhdGVJRCA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkU3RhdGVzeyAkU3RhdGVEYXRhe1R5cGVJRH0gfSA9ICRTdGF0ZURhdGF7TmFtZX0KICAgIH0KCiAgICAkUGFyYW17U3RhdGVTZWxlY3Rpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFwlU3RhdGVzLAogICAgICAgIE5hbWUgICAgICAgID0+ICdTdGF0ZUlEcycsCiAgICAgICAgU2l6ZSAgICAgICAgPT4gMywKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17U3RhdGVJRHN9IHx8IFtdLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgbXkgJVZvdGluZ09wZXJhdG9ycyA9ICgKICAgICAgICBFcXVhbHMgICAgICAgICAgICA9PiAnRXF1YWxzJywKICAgICAgICBHcmVhdGVyVGhhbiAgICAgICA9PiAnR3JlYXRlclRoYW4nLAogICAgICAgIEdyZWF0ZXJUaGFuRXF1YWxzID0+ICdHcmVhdGVyVGhhbkVxdWFscycsCiAgICAgICAgU21hbGxlclRoYW4gICAgICAgPT4gJ1NtYWxsZXJUaGFuJywKICAgICAgICBTbWFsbGVyVGhhbkVxdWFscyA9PiAnU21hbGxlclRoYW5FcXVhbHMnLAogICAgKTsKCiAgICAkUGFyYW17Vm90ZVNlYXJjaFR5cGVTZWxlY3Rpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFwlVm90aW5nT3BlcmF0b3JzLAogICAgICAgIE5hbWUgICAgICAgID0+ICdWb3RlU2VhcmNoVHlwZScsCiAgICAgICAgU2l6ZSAgICAgICAgPT4gMSwKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17Vm90ZVNlYXJjaFR5cGV9IHx8ICcnLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMCwKICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgJFBhcmFte1JhdGVTZWFyY2hUeXBlU2VsZWN0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVZvdGluZ09wZXJhdG9ycywKICAgICAgICBOYW1lICAgICAgICA9PiAnUmF0ZVNlYXJjaFR5cGUnLAogICAgICAgIFNpemUgICAgICAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte1JhdGVTZWFyY2hUeXBlfSB8fCAnJywKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE11bHRpcGxlICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwogICAgJFBhcmFte1JhdGVTZWFyY2hTZWxlY3Rpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAwICAgPT4gJzAlJywKICAgICAgICAgICAgMjUgID0+ICcyNSUnLAogICAgICAgICAgICA1MCAgPT4gJzUwJScsCiAgICAgICAgICAgIDc1ICA9PiAnNzUlJywKICAgICAgICAgICAgMTAwID0+ICcxMDAlJywKICAgICAgICB9LAogICAgICAgIFNvcnQgICAgICAgID0+ICdOdW1lcmljS2V5JywKICAgICAgICBOYW1lICAgICAgICA9PiAnUmF0ZVNlYXJjaCcsCiAgICAgICAgU2l6ZSAgICAgICAgPT4gMSwKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17UmF0ZVNlYXJjaH0gfHwgJycsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICBNdWx0aXBsZSAgICA9PiAwLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAkUGFyYW17QXBwcm92ZWRTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBObyAgPT4gJ05vJywKICAgICAgICAgICAgWWVzID0+ICdZZXMnLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdBcHByb3ZlZFNlYXJjaCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtBcHByb3ZlZFNlYXJjaH0gfHwgJycsCiAgICAgICAgTXVsdGlwbGUgICAgID0+IDAsCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCBhIGxpc3Qgb2YgYWxsIHVzZXJzIHRvIGRpc3BsYXkKICAgIG15ICVTaG93blVzZXJzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxpc3QoCiAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgICMgZ2V0IHRoZSBVc2VySURzIGZyb20gRkFRIGFuZCBmYXFfYWRtaW4gbWVtYmVycwogICAgbXkgJUdyb3VwVXNlcnM7CiAgICBmb3IgbXkgJEdyb3VwIChxdyhmYXEgZmFxX2FkbWluKSkgewoKICAgICAgICAjIGdldCBncm91cCBvYmplY3QKICAgICAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAgICAgbXkgJEdyb3VwSUQgPSAkR3JvdXBPYmplY3QtPkdyb3VwTG9va3VwKCBHcm91cCA9PiAkR3JvdXAgKTsKICAgICAgICBteSAlVXNlcnMgPSAkR3JvdXBPYmplY3QtPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgR3JvdXBJRCA9PiAkR3JvdXBJRCwKICAgICAgICAgICAgVHlwZSAgICA9PiAncncnLAogICAgICAgICAgICBSZXN1bHQgID0+ICdIQVNIJywKICAgICAgICApOwogICAgICAgICVHcm91cFVzZXJzID0gKCAlR3JvdXBVc2VycywgJVVzZXJzICk7CiAgICB9CgogICAgIyByZW1vdmUgYWxsIHVzZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgRkFRIG9yIGZhcV9hZG1pbiBncm91cHMKICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVTaG93blVzZXJzICkgewogICAgICAgIGlmICggISRHcm91cFVzZXJzeyRVc2VySUR9ICkgewogICAgICAgICAgICBkZWxldGUgJFNob3duVXNlcnN7JFVzZXJJRH07CiAgICAgICAgfQogICAgfQogICAgJFBhcmFte0NyZWF0ZWRVc2VyU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlU2hvd25Vc2VycywKICAgICAgICBOYW1lICAgICAgID0+ICdDcmVhdGVkVXNlcklEcycsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtDcmVhdGVkVXNlcklEc30sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CiAgICAkUGFyYW17TGFzdENoYW5nZWRVc2VyU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlU2hvd25Vc2VycywKICAgICAgICBOYW1lICAgICAgID0+ICdMYXN0Q2hhbmdlZFVzZXJJRHMnLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17TGFzdENoYW5nZWRVc2VySURzfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAkUGFyYW17SXRlbUNyZWF0ZVRpbWVQb2ludFN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBbIDEgLi4gNTkgXSwKICAgICAgICBOYW1lICAgICAgID0+ICdJdGVtQ3JlYXRlVGltZVBvaW50JywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50fSwKICAgICk7CiAgICAkUGFyYW17SXRlbUNyZWF0ZVRpbWVQb2ludFN0YXJ0U3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJ0xhc3QnICAgPT4gJ3dpdGhpbiB0aGUgbGFzdCAuLi4nLAogICAgICAgICAgICAnQmVmb3JlJyA9PiAnbW9yZSB0aGFuIC4uLiBhZ28nLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnSXRlbUNyZWF0ZVRpbWVQb2ludFN0YXJ0JywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50U3RhcnR9IHx8ICdMYXN0JywKICAgICk7CiAgICAkUGFyYW17SXRlbUNyZWF0ZVRpbWVQb2ludEZvcm1hdFN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIG1pbnV0ZSA9PiAnbWludXRlKHMpJywKICAgICAgICAgICAgaG91ciAgID0+ICdob3VyKHMpJywKICAgICAgICAgICAgZGF5ICAgID0+ICdkYXkocyknLAogICAgICAgICAgICB3ZWVrICAgPT4gJ3dlZWsocyknLAogICAgICAgICAgICBtb250aCAgPT4gJ21vbnRoKHMpJywKICAgICAgICAgICAgeWVhciAgID0+ICd5ZWFyKHMpJywKICAgICAgICB9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ0l0ZW1DcmVhdGVUaW1lUG9pbnRGb3JtYXQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnRGb3JtYXR9LAogICAgKTsKICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZVN0YXJ0U3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJVBhcmFtLAogICAgICAgIFByZWZpeCAgID0+ICdJdGVtQ3JlYXRlVGltZVN0YXJ0JywKICAgICAgICBGb3JtYXQgICA9PiAnRGF0ZUlucHV0Rm9ybWF0JywKICAgICAgICBEaWZmVGltZSA9PiAtKCAoIDYwICogNjAgKiAyNCApICogMzAgKSwKICAgICk7CiAgICAkUGFyYW17SXRlbUNyZWF0ZVRpbWVTdG9wU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJVBhcmFtLAogICAgICAgIFByZWZpeCA9PiAnSXRlbUNyZWF0ZVRpbWVTdG9wJywKICAgICAgICBGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICApOwoKICAgICRQYXJhbXtJdGVtQ2hhbmdlVGltZVBvaW50U3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFsgMSAuLiA1OSBdLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0l0ZW1DaGFuZ2VUaW1lUG9pbnQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0l0ZW1DaGFuZ2VUaW1lUG9pbnR9LAogICAgKTsKICAgICRQYXJhbXtJdGVtQ2hhbmdlVGltZVBvaW50U3RhcnRTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAnTGFzdCcgICA9PiAnd2l0aGluIHRoZSBsYXN0IC4uLicsCiAgICAgICAgICAgICdCZWZvcmUnID0+ICdtb3JlIHRoYW4gLi4uIGFnbycsCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdJdGVtQ2hhbmdlVGltZVBvaW50U3RhcnQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0l0ZW1DaGFuZ2VUaW1lUG9pbnRTdGFydH0gfHwgJ0xhc3QnLAogICAgKTsKICAgICRQYXJhbXtJdGVtQ2hhbmdlVGltZVBvaW50Rm9ybWF0U3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgbWludXRlID0+ICdtaW51dGUocyknLAogICAgICAgICAgICBob3VyICAgPT4gJ2hvdXIocyknLAogICAgICAgICAgICBkYXkgICAgPT4gJ2RheShzKScsCiAgICAgICAgICAgIHdlZWsgICA9PiAnd2VlayhzKScsCiAgICAgICAgICAgIG1vbnRoICA9PiAnbW9udGgocyknLAogICAgICAgICAgICB5ZWFyICAgPT4gJ3llYXIocyknLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnSXRlbUNoYW5nZVRpbWVQb2ludEZvcm1hdCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17SXRlbUNoYW5nZVRpbWVQb2ludEZvcm1hdH0sCiAgICApOwogICAgJFBhcmFte0l0ZW1DaGFuZ2VUaW1lU3RhcnRTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAlUGFyYW0sCiAgICAgICAgUHJlZml4ICAgPT4gJ0l0ZW1DaGFuZ2VUaW1lU3RhcnQnLAogICAgICAgIEZvcm1hdCAgID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgIERpZmZUaW1lID0+IC0oICggNjAgKiA2MCAqIDI0ICkgKiAzMCApLAogICAgKTsKICAgICRQYXJhbXtJdGVtQ2hhbmdlVGltZVN0b3BTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAlUGFyYW0sCiAgICAgICAgUHJlZml4ID0+ICdJdGVtQ2hhbmdlVGltZVN0b3AnLAogICAgICAgIEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0JywKICAgICk7CgogICAgIyBjcmVhdGUgSFRNTCBzdHJpbmdzIGZvciBhbGwgZHluYW1pYyBmaWVsZHMKICAgIG15ICVEeW5hbWljRmllbGRIVE1MOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgc2VhcmNoIGZpZWxkIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRQcmVmZXJlbmNlcygKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSgkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyk7CgogICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgZm9yIG15ICRQcmVmZXJlbmNlICggQHskU2VhcmNoRmllbGRQcmVmZXJlbmNlc30gKSB7CgogICAgICAgICAgICAjIGdldCBmaWVsZCBIVE1MCiAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAkUHJlZmVyZW5jZS0+e1R5cGV9IH0KICAgICAgICAgICAgICAgID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUmVuZGVyKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBQcm9maWxlICAgICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Q29uZmlnfS0+e0RlZmF1bHRzfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBIVE1MIHNlYXJjaCBtYXNrIG91dHB1dAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2VhcmNoJywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIHNob3cgbGFuZ3VhZ2VzIHNlbGVjdAogICAgbXkgJE11bHRpTGFuZ3VhZ2UgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwogICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IER5bmFtaWMgZmllbGRzIGJsb2NrcwogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICApOwoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgUFJFRkVSRU5DRToKICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICMgc2tpcCBmaWVsZHMgdGhhdCBIVE1MIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQKICAgICAgICAgICAgbmV4dCBQUkVGRVJFTkNFIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAkUHJlZmVyZW5jZS0+e1R5cGV9IH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIExhYmVsID0+CiAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAkUHJlZmVyZW5jZS0+e1R5cGV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgIEZpZWxkID0+CiAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAkUHJlZmVyZW5jZS0+e1R5cGV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgLT57RmllbGR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBIVE1MIHNlYXJjaCBtYXNrIG91dHB1dAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50RkFRU2VhcmNoU21hbGwnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEZBUVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIG15ICVVc2VyUHJlZmVyZW5jZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICFkZWZpbmVkICRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSApIHsKICAgICAgICBpZiAoICRVc2VyUHJlZmVyZW5jZXN7VXNlckFnZW50RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSApIHsKICAgICAgICAgICAgJFNlbGYtPntEb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICBpZiAoICEkU2VsZi0+e0FjY2Vzc1JvfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBybyBwZXJtaXNzaW9uIScsCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKICAgICRHZXRQYXJhbXtJdGVtSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0l0ZW1JRCcgKTsKICAgICRHZXRQYXJhbXtSYXRlfSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1JhdGUnICk7CgogICAgIyBnZXQgbmF2aWdhdGlvbiBiYXIgb3B0aW9uCiAgICBteSAkTmF2ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ05hdicgKSB8fCAnJzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJEdldFBhcmFte0l0ZW1JRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBJdGVtSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgb2JqZWN0CiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICMgZ2V0IEZBUSBpdGVtIGRhdGEKICAgIG15ICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgSXRlbUZpZWxkcyAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICk7CiAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgIH0KCiAgICAjIGNoZWNrIHVzZXIgcGVybWlzc2lvbgogICAgbXkgJFBlcm1pc3Npb24gPSAkRkFRT2JqZWN0LT5DaGVja0NhdGVnb3J5VXNlclBlcm1pc3Npb24oCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICk7CgogICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgIGlmICggISRQZXJtaXNzaW9uICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBoYXZlIG5vIHBlcm1pc3Npb24gZm9yIHRoaXMgY2F0ZWdvcnkhJywKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEhUTUwgdXRpbHMgb2JqZWN0CiAgICBteSAkSFRNTFV0aWxzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEhUTUxWaWV3IFN1Yi1hY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSFRNTFZpZXcnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkRmllbGQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiRmllbGQiICk7CgogICAgICAgICMgbmVlZGVkIHBhcmFtcwogICAgICAgIGZvciBteSAkTmVlZGVkIChxdyggSXRlbUlEIEZpZWxkICkpIHsKICAgICAgICAgICAgaWYgKCAhJE5lZWRlZCApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkZWQgUGFyYW06ICROZWVkZWQhIiwKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIEZpZWxkIGNvbnRlbnQKICAgICAgICBteSAkRmllbGRDb250ZW50ID0gJEZBUU9iamVjdC0+SXRlbUZpZWxkR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIEZpZWxkICA9PiAkRmllbGQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXdyaXRlIGhhbmRsZSBhbmQgYWN0aW9uLCB0YWtlIGNhcmUgb2Ygb2xkIHN0eWxlIGJlZm9yZSBGQVEgMi4wLngKICAgICAgICAkRmllbGRDb250ZW50ID1+IHN7CiAgICAgICAgICAgIEFjdGlvbj1BZ2VudEZBUSBbJl0oYW1wOyk/IFN1YmFjdGlvbj1Eb3dubG9hZCBbJl0oYW1wOyk/CiAgICAgICAgfXtBY3Rpb249QWdlbnRGQVFab29tO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7fWd4bXM7CgogICAgICAgICMgYnVpbGQgYmFzZSBVUkwgZm9yIGluLWxpbmUgaW1hZ2VzCiAgICAgICAgbXkgJFNlc3Npb25JRCA9ICcnOwogICAgICAgIGlmICggJFNlbGYtPntTZXNzaW9uSUR9ICYmICEkU2VsZi0+e1Nlc3Npb25JRENvb2tpZX0gKSB7CiAgICAgICAgICAgICRTZXNzaW9uSUQgPSAnOycgLiAkU2VsZi0+e1Nlc3Npb25OYW1lfSAuICc9JyAuICRTZWxmLT57U2Vzc2lvbklEfTsKICAgICAgICAgICAgJEZpZWxkQ29udGVudCA9fiBzewogICAgICAgICAgICAgICAgKEFjdGlvbj1BZ2VudEZBUVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtJdGVtSUQ9XGQrO0ZpbGVJRD1cZCspCiAgICAgICAgICAgIH17JDEkU2Vzc2lvbklEfWdtc3g7CiAgICAgICAgfQoKICAgICAgICAjIGNvbnZlcnQgY29udGVudCB0byBIVE1MIGlmIG5lZWRlZAogICAgICAgIGlmICgKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGQVE6Okl0ZW06OkhUTUwnKQogICAgICAgICAgICAmJiAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fQogICAgICAgICAgICAmJiAkRkFRRGF0YXtDb250ZW50VHlwZX0gbmUgJ3RleHQvaHRtbCcKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEZpZWxkQ29udGVudCA9ICRIVE1MVXRpbHNPYmplY3QtPlRvSFRNTCgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkRmllbGRDb250ZW50LAogICAgICAgICAgICApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBkZXRlY3QgYWxsIHBsYWluIHRleHQgbGlua3MgYW5kIHB1dCB0aGVtIGludG8gYW4gSFRNTCA8YT4gdGFnCiAgICAgICAgJEZpZWxkQ29udGVudCA9ICRIVE1MVXRpbHNPYmplY3QtPkxpbmtRdW90ZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRGaWVsZENvbnRlbnQsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgdGFyZ2V0PSJfYmxhbmsiIGF0dHJpYnV0ZSB0byBhbGwgSFRNTCA8YT4gdGFncwogICAgICAgICMgdGhlIExpbmtRdW90ZSBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQgYWdhaW4KICAgICAgICAkRmllbGRDb250ZW50ID0gJEhUTUxVdGlsc09iamVjdC0+TGlua1F1b3RlKAogICAgICAgICAgICBTdHJpbmcgICAgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICAgICAgVGFyZ2V0QWRkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgbmVlZGVkIEhUTUwgaGVhZGVycwogICAgICAgICRGaWVsZENvbnRlbnQgPSAkSFRNTFV0aWxzT2JqZWN0LT5Eb2N1bWVudENvbXBsZXRlKAogICAgICAgICAgICBTdHJpbmcgID0+ICRGaWVsZENvbnRlbnQsCiAgICAgICAgICAgIENoYXJzZXQgPT4gJ3V0Zi04JywKICAgICAgICApOwoKICAgICAgICAjIHJldHVybiBjb21wbGV0ZSBIVE1MIGFzIGFuIGF0dGFjaG1lbnQKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkRmllbGRDb250ZW50LAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgRG93bmxvYWRBdHRhY2htZW50IFN1Yi1hY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRG93bmxvYWRBdHRhY2htZW50JyApIHsKCiAgICAgICAgIyBtYW5hZ2UgcGFyYW1ldGVycwogICAgICAgICRHZXRQYXJhbXtGaWxlSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbGVJRCcgKTsKCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkR2V0UGFyYW17RmlsZUlEfSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gJ05lZWQgRmlsZUlEJyApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYXR0YWNobWVudHMKICAgICAgICBteSAlRmlsZSA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgRmlsZUlEID0+ICRHZXRQYXJhbXtGaWxlSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCVGaWxlKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KCVGaWxlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHN1Y2ggYXR0YWNobWVudCAoJEdldFBhcmFte0ZpbGVJRH0pISBNYXkgYmUgYW4gYXR0YWNrISEhIiwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBvdGhlciBzdWItYWN0aW9ucyBjb250aW51ZXMgaGVyZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIG15ICRPdXRwdXQ7CiAgICBpZiAoICROYXYgZXEgJ05vbmUnICkgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgc21hbGwgYW5kIG5vIE5hdmJhcgogICAgICAgICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2aWdhdGlvbiBiYXIKICAgICAgICAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtUaXRsZX0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgIH0KCiAgICAjIGRlZmluZSBkaWZmZXJlbnQgbm90aWZpY2F0aW9ucwogICAgbXkgJU5vdGlmaWNhdGlvbnMgPSAoCiAgICAgICAgVGhhbmtzID0+IHsKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0luZm8nLAogICAgICAgICAgICBJbmZvICAgICA9PiAnVGhhbmtzIGZvciB5b3VyIHZvdGUhJwogICAgICAgIH0sCiAgICAgICAgQWxyZWFkeVZvdGVkID0+IHsKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJ1lvdSBoYXZlIGFscmVhZHkgdm90ZWQhJywKICAgICAgICB9LAogICAgICAgIE5vUmF0ZSA9PiB7CiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgIEluZm8gICAgID0+ICdObyByYXRlIHNlbGVjdGVkIScsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBvdXRwdXQgbm90aWZpY2F0aW9ucyBpZiBhbnkKICAgIG15ICROb3RpZnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTm90aWZ5JyApIHx8ICcnOwogICAgaWYgKCAkTm90aWZ5ICYmIElzSGFzaFJlZldpdGhEYXRhKCAkTm90aWZpY2F0aW9uc3skTm90aWZ5fSApICkgewogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAleyAkTm90aWZpY2F0aW9uc3skTm90aWZ5fSB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgZGVmYXVsdCBvcHRpb25zCiAgICBteSAkTXVsdGlMYW5ndWFnZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CiAgICBteSAkVm90aW5nICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpWb3RpbmcnKTsKCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgbXkgJEludGVyZmFjZSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2ludGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIG15ICRJbnRlcmZhY2VTdGF0ZXMgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QWdlbnQ6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBGQVEgdm90ZSBpbmZvcm1hdGlvbgogICAgbXkgJFZvdGVEYXRhOwogICAgaWYgKCRWb3RpbmcpIHsKICAgICAgICAkVm90ZURhdGEgPSAkRkFRT2JqZWN0LT5Wb3RlR2V0KAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBJdGVtSUQgICAgPT4gJEZBUURhdGF7SXRlbUlEfSwKICAgICAgICAgICAgSW50ZXJmYWNlID0+ICRJbnRlcmZhY2UtPntTdGF0ZUlEfSwKICAgICAgICAgICAgSVAgICAgICAgID0+ICRFTlZ7J1JFTU9URV9BRERSJ30sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIHVzZXIgYWxyZWFkeSB2b3RlZCB0aGlzIEZBUSBpdGVtCiAgICBteSAkQWxyZWFkeVZvdGVkOwogICAgaWYgKCRWb3RlRGF0YSkgewoKICAgICAgICAjIGdldCB0aW1lIG9iamVjdAogICAgICAgIG15ICRUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKCiAgICAgICAgIyBpdGVtL2NoYW5nZV90aW1lID4gdm90aW5nL2NyZWF0ZV90aW1lCiAgICAgICAgbXkgJEl0ZW1DaGFuZ2VkU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRGQVFEYXRhe0NoYW5nZWR9IHx8ICcnLAogICAgICAgICk7CiAgICAgICAgbXkgJFZvdGVDcmVhdGVkU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRWb3RlRGF0YS0+e0NyZWF0ZWR9IHx8ICcnLAogICAgICAgICk7CgogICAgICAgIGlmICggJEl0ZW1DaGFuZ2VkU3lzdGVtVGltZSA8PSAkVm90ZUNyZWF0ZWRTeXN0ZW1UaW1lICkgewogICAgICAgICAgICAkQWxyZWFkeVZvdGVkID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgVm90ZSBTdWItYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1ZvdGUnICkgewoKICAgICAgICAjIHVzZXIgY2FuJ3QgdXNlIHRoaXMgc3ViLWFjdGlvbiBpZiBpcyBub3QgZW5hYmxlZAogICAgICAgIGlmICggISRWb3RpbmcgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIlRoZSB2b3RpbmcgbWVjaGFuaXNtIGlzIG5vdCBlbmFibGVkISIgKTsKICAgICAgICB9CgogICAgICAgICMgdXNlciBjYW4gdm90ZSBvbmx5IG9uY2UgcGVyIEZBUSByZXZpc2lvbgogICAgICAgIGlmICgkQWxyZWFkeVZvdGVkKSB7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIEZBUSB6b29tCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICdBY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0nCiAgICAgICAgICAgICAgICAgICAgLiAkR2V0UGFyYW17SXRlbUlEfQogICAgICAgICAgICAgICAgICAgIC4gJztOYXY9JE5hdjtOb3RpZnk9QWxyZWFkeVZvdGVkJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgdGhlIHZvdGUgaWYgYW55CiAgICAgICAgZWxzaWYgKCBkZWZpbmVkICRHZXRQYXJhbXtSYXRlfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHJhdGVzIGNvbmZpZwogICAgICAgICAgICBteSAkVm90aW5nUmF0ZXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6SXRlbTo6Vm90aW5nOjpSYXRlcycpOwogICAgICAgICAgICBteSAkUmF0ZSAgICAgICAgPSAkR2V0UGFyYW17UmF0ZX07CgogICAgICAgICAgICAjIHNlbmQgZXJyb3IgaWYgcmF0ZSBpcyBub3QgZGVmaW5lZCBpbiBjb25maWcKICAgICAgICAgICAgaWYgKCAhJFZvdGluZ1JhdGVzLT57JFJhdGV9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiVGhlIHZvdGUgcmF0ZSBpcyBub3QgZGVmaW5lZCEiICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3RoZXJ3aXNlIGFkZCB0aGUgdm90ZQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRGQVFPYmplY3QtPlZvdGVBZGQoCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZEJ5ID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgSVAgICAgICAgID0+ICRFTlZ7J1JFTU9URV9BRERSJ30sCiAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICRJbnRlcmZhY2UtPntTdGF0ZUlEfSwKICAgICAgICAgICAgICAgICAgICBSYXRlICAgICAgPT4gJEdldFBhcmFte1JhdGV9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZG8gbm90IHNob3cgdGhlIHZvdGluZyBmb3JtCiAgICAgICAgICAgICAgICAkQWxyZWFkeVZvdGVkID0gMTsKCiAgICAgICAgICAgICAgICAjIHJlZnJlc2ggRkFRIGl0ZW0gZGF0YQogICAgICAgICAgICAgICAgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISVGQVFEYXRhICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gRkFRIHpvb20KICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgICAgICBPUCA9PiAnQWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9JwogICAgICAgICAgICAgICAgICAgICAgICAuICRHZXRQYXJhbXtJdGVtSUR9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJztOYXY9JE5hdjtOb3RpZnk9VGhhbmtzJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB1c2VyIGlzIGFibGUgdG8gdm90ZSBidXQgbm8gcmF0ZSBoYXMgYmVlbiBzZWxlY3RlZAogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIEZBUSB6b29tCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICdBY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0nIC4gJEdldFBhcmFte0l0ZW1JRH0gLiAnO05hdj0kTmF2O05vdGlmeT1Ob1JhdGUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgcHJlcGFyZSBmaWVsZHMgZGF0YSAoU3RpbGwgbmVlZGVkIGZvciBQbGFpblRleHQpCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKHF3KEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNCBGaWVsZDUgRmllbGQ2KSkgewogICAgICAgIG5leHQgRklFTEQgaWYgISRGQVFEYXRheyRGaWVsZH07CgogICAgICAgICMgcmV3cml0ZSBoYW5kbGUgYW5kIGFjdGlvbiwgdGFrZSBjYXJlIG9mIG9sZCBzdHlsZSBiZWZvcmUgRkFRIDIuMC54CiAgICAgICAgJEZBUURhdGF7JEZpZWxkfSA9fiBzewogICAgICAgICAgICBBY3Rpb249QWdlbnRGQVEgWyZdKGFtcDspPyBTdWJhY3Rpb249RG93bmxvYWQgWyZdKGFtcDspPwogICAgICAgIH17QWN0aW9uPUFnZW50RkFRWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O31neG1zOwoKICAgICAgICAjIG5vIHF1b3RpbmcgaWYgSFRNTCB2aWV3IGlzIGVuYWJsZWQKICAgICAgICBuZXh0IEZJRUxEIGlmICRDb25maWdPYmplY3QtPkdldCgnRkFROjpJdGVtOjpIVE1MJyk7CgogICAgICAgICMgSFRNTCBxdW90aW5nCiAgICAgICAgJEZBUURhdGF7JEZpZWxkfSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIE5ld0xpbmUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRGQVFEYXRheyRGaWVsZH0sCiAgICAgICAgICAgIFZNYXggICAgICAgICAgID0+IDUwMDAsCiAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgIExpbmtGZWF0dXJlICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB1c2VyIG9iamVjdAogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgZ2V0IHVzZXIgaW5mbyAoQ3JlYXRlZEJ5KQogICAgbXkgJVVzZXJJbmZvID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkRkFRRGF0YXtDcmVhdGVkQnl9CiAgICApOwogICAgJFBhcmFte0NyZWF0ZWRCeVVzZXJ9ID0gIiRVc2VySW5mb3tVc2VyRmlyc3RuYW1lfSAkVXNlckluZm97VXNlckxhc3RuYW1lfSI7CgogICAgIyBnZXQgdXNlciBpbmZvIChDaGFuZ2VkQnkpCiAgICAlVXNlckluZm8gPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRGQVFEYXRhe0NoYW5nZWRCeX0KICAgICk7CiAgICAkUGFyYW17Q2hhbmdlZEJ5VXNlcn0gPSAiJFVzZXJJbmZve1VzZXJGaXJzdG5hbWV9ICRVc2VySW5mb3tVc2VyTGFzdG5hbWV9IjsKCiAgICAjIHNldCB2b3RpbmcgcmVzdWx0cwogICAgJFBhcmFte1ZvdGluZ1Jlc3VsdENvbG9yfSA9ICRMYXlvdXRPYmplY3QtPkdldEZBUUl0ZW1Wb3RpbmdSYXRlQ29sb3IoCiAgICAgICAgUmF0ZSA9PiAkRkFRRGF0YXtWb3RlUmVzdWx0fSwKICAgICk7CgogICAgaWYgKCAhJFBhcmFte1ZvdGluZ1Jlc3VsdENvbG9yfSB8fCAkRkFRRGF0YXtWb3Rlc30gZXEgJzAnICkgewogICAgICAgICRQYXJhbXtWb3RpbmdSZXN1bHRDb2xvcn0gPSAnR3JheSc7CiAgICB9CgogICAgaWYgKCAkTmF2IG5lICdOb25lJyApIHsKCiAgICAgICAgIyBydW4gRkFRIG1lbnUgbW9kdWxlcwogICAgICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnRkFROjpGcm9udGVuZDo6TWVudU1vZHVsZScpIGVxICdIQVNIJyApIHsKICAgICAgICAgICAgbXkgJU1lbnVzICAgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSB9OwogICAgICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgICAgIGZvciBteSAkTWVudSAoIHNvcnQga2V5cyAlTWVudXMgKSB7CgogICAgICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICAgICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTWVudXN7JE1lbnV9LT57TW9kdWxlfS0+bmV3KAogICAgICAgICAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUlEID0+ICRGQVFEYXRhe0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzZXQgY2xhc3NlcwogICAgICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdQb3BVcCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57Q2xhc3N9ID0gJ0FzUG9wdXAnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gZXEgJ0JhY2snICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e0NsYXNzfSA9ICdIaXN0b3J5QmFjayc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnQ29uZmlybWF0aW9uRGlhbG9nJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntDbGFzc30gPSAnQXNDb25maXJtYXRpb25EaWFsb2cnOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgJENvdW50ZXIgPSAkT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgRkFRSXRlbSA9PiB7JUZBUURhdGF9LAogICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyID0+ICRDb3VudGVyLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgID0+ICRNZW51c3skTWVudX0sCiAgICAgICAgICAgICAgICAgICAgICAgIE1lbnVJRCAgPT4gJ01lbnUnIC4gJE1lbnUsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBvdXRwdXQgYXBwcm92YWwgc3RhdGUKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFwcHJvdmFsUmVxdWlyZWQnKSApIHsKICAgICAgICAkUGFyYW17QXBwcm92YWx9ID0gJEZBUURhdGF7QXBwcm92ZWR9ID8gJ1llcycgOiAnTm8nOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdWaWV3QXBwcm92YWwnLAogICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCRWb3RpbmcpIHsKCiAgICAgICAgIyBvdXRwdXQgdm90ZXMgbnVtYmVyIGlmIGFueQogICAgICAgIGlmICggJEZBUURhdGF7Vm90ZXN9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1ZpZXdWb3RlcycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslRkFRRGF0YX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBkaXNwbGF5IGEgTm8gVm90ZXMgZm91bmQgbWVzc2FnZQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnVmlld05vVm90ZXMnICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBGQVEgcGF0aAogICAgbXkgJFNob3dGQVFQYXRoID0gJExheW91dE9iamVjdC0+RkFRUGF0aFNob3coCiAgICAgICAgRkFRT2JqZWN0ICA9PiAkRkFRT2JqZWN0LAogICAgICAgIENhdGVnb3J5SUQgPT4gJEZBUURhdGF7Q2F0ZWdvcnlJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgTmF2ICAgICAgICA9PiAkTmF2LAogICAgKTsKICAgIGlmICgkU2hvd0ZBUVBhdGgpIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRkFRUGF0aEl0ZW1FbGVtZW50JywKICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICAgICBOYXYgID0+ICROYXYsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cga2V5d29yZHMgYXMgc2VhcmNoIGxpbmtzCiAgICBpZiAoICRGQVFEYXRhe0tleXdvcmRzfSApIHsKCiAgICAgICAgIyByZXBsYWNlIGNvbW1hcyBhbmQgc2VtaWNvbG9ucwogICAgICAgICRGQVFEYXRhe0tleXdvcmRzfSA9fiBzLywvIC9nOwogICAgICAgICRGQVFEYXRhe0tleXdvcmRzfSA9fiBzLzsvIC9nOwoKICAgICAgICBteSBAS2V5d29yZHMgPSBzcGxpdCAvXHMrLywgJEZBUURhdGF7S2V5d29yZHN9OwogICAgICAgIGZvciBteSAkS2V5d29yZCAoQEtleXdvcmRzKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnS2V5d29yZHMnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgS2V5d29yZCA9PiAkS2V5d29yZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBsYW5ndWFnZXMKICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCByYXRpbmcgc3RhcnMKICAgIGlmICgkVm90aW5nKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+RkFRUmF0aW5nU3RhcnNTaG93KAogICAgICAgICAgICBWb3RlUmVzdWx0ID0+ICRGQVFEYXRhe1ZvdGVSZXN1bHR9LAogICAgICAgICAgICBWb3RlcyAgICAgID0+ICRGQVFEYXRhe1ZvdGVzfSwKICAgICAgICApOwogICAgfQogICAgaWYgKCAkTmF2IG5lICdOb25lJyApIHsKCiAgICAgICAgIyBvdXRwdXQgZXhpc3RpbmcgYXR0YWNobWVudHMKICAgICAgICBteSBAQXR0YWNobWVudEluZGV4ID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEluZGV4KAogICAgICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBTaG93SW5saW5lID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgYWxsIGF0dGFjaG1lbnRzCiAgICAgICAgaWYgKEBBdHRhY2htZW50SW5kZXgpIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50SGVhZGVyJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEF0dGFjaG1lbnR9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBtZXNzYWdlIGFib3V0IGxpbmtzIGluIGlmcmFtZXMsIGlmIHVzZXIgZGlkbid0IGNsb3NlIGl0IGFscmVhZHkKICAgIGlmICggISRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQnJvd3NlckxpbmtNZXNzYWdlJywKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBGQVEgQ29udGVudAogICAgbXkgJEZBUUJvZHkgPSAkTGF5b3V0T2JqZWN0LT5GQVFDb250ZW50U2hvdygKICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJEZBUU9iamVjdCwKICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJEludGVyZmFjZVN0YXRlcywKICAgICAgICBGQVFEYXRhICAgICAgICAgPT4geyVGQVFEYXRhfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFJldHVybkNvbnRlbnQgICA9PiAxLAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJGQVE6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIGZhcSBvYmplY3QKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IHByaW50IHN0cmluZyBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRGQVFEYXRheyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgVmFsdWVNYXhDaGFycyAgICAgID0+IDI1MCwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJExhYmVsID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUUR5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTGFiZWwgPT4gJExhYmVsLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIGlmICggJFZhbHVlU3RyZy0+e0xpbmt9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUUR5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUUR5bmFtaWNGaWVsZFBsYWluJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGV4YW1wbGUgb2YgZHluYW1pYyBmaWVsZHMgb3JkZXIgY3VzdG9taXphdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGQVFEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUUR5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IC4gJ19QbGFpbicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgIFRpdGxlID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICROYXYgbmUgJ05vbmUnICkgewoKICAgICAgICAjIHNob3cgRkFRIFZvdGluZwogICAgICAgIGlmICgkVm90aW5nKSB7CgogICAgICAgICAgICAjIGdldCB2b3RpbmcgY29uZmlnCiAgICAgICAgICAgIG15ICRTaG93Vm90aW5nQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6Okl0ZW06OlZvdGluZzo6U2hvdycpOwogICAgICAgICAgICBpZiAoICRTaG93Vm90aW5nQ29uZmlnLT57ICRJbnRlcmZhY2UtPntOYW1lfSB9ICkgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIHVzZXIgYWxyZWFkeSB2b3RlZCBhZnRlciBsYXN0IGNoYW5nZQogICAgICAgICAgICAgICAgaWYgKCAhJEFscmVhZHlWb3RlZCApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+X0ZBUVZvdGluZyggRkFRRGF0YSA9PiB7JUZBUURhdGF9ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzCiAgICAgICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgICAgICBPYmplY3QgPT4gJ0ZBUScsCiAgICAgICAgICAgIEtleSAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgbGluayB0YWJsZSB2aWV3IG1vZGUKICAgICAgICBteSAkTGlua1RhYmxlVmlld01vZGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0xpbmtPYmplY3Q6OlZpZXdNb2RlJyk7CgogICAgICAgICMgY3JlYXRlIHRoZSBsaW5rIHRhYmxlCiAgICAgICAgbXkgJExpbmtUYWJsZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5MaW5rT2JqZWN0VGFibGVDcmVhdGUoCiAgICAgICAgICAgIExpbmtMaXN0V2l0aERhdGEgPT4gJExpbmtMaXN0V2l0aERhdGEsCiAgICAgICAgICAgIFZpZXdNb2RlICAgICAgICAgPT4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IHRoZSBsaW5rIHRhYmxlCiAgICAgICAgaWYgKCRMaW5rVGFibGVTdHJnKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTGlua1RhYmxlJyAuICRMaW5rVGFibGVWaWV3TW9kZSwKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIExpbmtUYWJsZVN0cmcgPT4gJExpbmtUYWJsZVN0cmcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGxvZyBhY2Nlc3MgdG8gdGhpcyBGQVEgaXRlbQogICAgJEZBUU9iamVjdC0+RkFRTG9nQWRkKAogICAgICAgIEl0ZW1JRCAgICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSXRlbUlEJyApLAogICAgICAgIEludGVyZmFjZSA9PiAkSW50ZXJmYWNlLT57TmFtZX0sCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgIGlmICggJE5hdiAmJiAkTmF2IGVxICdOb25lJyApIHsKCiAgICAgICAgIyBvbmx5IGNvbnZlcnQgSFRNTCB0byBwbGFpbiB0ZXh0IGlmIHJpY2ggdGV4dCBlZGl0b3IgaXMgbm90IHVzZWQKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0JykgKSB7CiAgICAgICAgICAgICRGQVFEYXRhe0Z1bGxCb2R5fSA9ICRGQVFCb2R5OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEZBUURhdGF7RnVsbEJvZHl9ID0gJEhUTUxVdGlsc09iamVjdC0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkRkFRQm9keSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBwdWJsaWMgc3RhdGUgdHlwZQogICAgICAgIG15ICRQdWJsaWNTdGF0ZVR5cGUgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgICAgIE5hbWUgICA9PiAncHVibGljJywKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHJlbW92ZSBpbi1saW5lIGltYWdlIGxpbmtzIHRvIEZBUSBpbWFnZXMKICAgICAgICAkRkFRRGF0YXtGdWxsQm9keX0KICAgICAgICAgICAgPX4gc3sgPGltZyBbXjw+XSsgQWN0aW9uPShBZ2VudHxDdXN0b21lcnxQdWJsaWMpRkFRIFtePD5dKyA+IH17fWd4bXM7CgogICAgICAgICMgZ2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVGlja2V0IENvbXBvc2UKICAgICAgICBteSAkVGlja2V0Q29tcG9zZUNvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpUaWNrZXRDb21wb3NlJyk7CgogICAgICAgICRQYXJhbXtVcGRhdGVBcnRpY2xlU3ViamVjdH0gPSAkVGlja2V0Q29tcG9zZUNvbmZpZy0+e1VwZGF0ZUFydGljbGVTdWJqZWN0fSB8fCAwOwogICAgICAgIGlmICggJFBhcmFte1VwZGF0ZUFydGljbGVTdWJqZWN0fSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdVcGRhdGVBcnRpY2xlU3ViamVjdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJFNob3dPckJsb2NrOwoKICAgICAgICAjIHNob3cgIkluc2VydCBUZXh0IiBidXR0b24KICAgICAgICBpZiAoICRUaWNrZXRDb21wb3NlQ29uZmlnLT57U2hvd0luc2VydFRleHRCdXR0b259ICkgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBkZWZpbmVkICRUaWNrZXRDb21wb3NlQ29uZmlnLT57SW5zZXJ0TWV0aG9kfQogICAgICAgICAgICAgICAgJiYgJFRpY2tldENvbXBvc2VDb25maWctPntJbnNlcnRNZXRob2R9IGVxICdGdWxsJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJbnNlcnRGdWxsJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luc2VydFRleHQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2hvd09yQmxvY2sgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiBGQVEgYXJ0aWNsZSBpcyBwdWJsaWMKICAgICAgICBpZiAoICRGQVFEYXRhe1N0YXRlVHlwZUlEfSA9PSAkUHVibGljU3RhdGVUeXBlLT57U3RhdGVJRH0gKSB7CgogICAgICAgICAgICBteSAkSFRUUFR5cGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0h0dHBUeXBlJyk7CiAgICAgICAgICAgIG15ICRGUUROICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnRlFETicpOwogICAgICAgICAgICBteSAkQmFzZWxpbmsgPSAkTGF5b3V0T2JqZWN0LT57QmFzZWxpbmt9OwoKICAgICAgICAgICAgIyByZXdyaXRlIGhhbmRsZQogICAgICAgICAgICAkQmFzZWxpbmsKICAgICAgICAgICAgICAgID1+IHN7IGluZGV4Wy5dcGwgWz9dIH17cHVibGljLnBsP31neG1zOwoKICAgICAgICAgICAgJEZBUURhdGF7UHVibGljbGlua30gPSAkSFRUUFR5cGUgLiAnOi8vJyAuICRGUUROIC4gJEJhc2VsaW5rCiAgICAgICAgICAgICAgICAuICJBY3Rpb249UHVibGljRkFRWm9vbTtJdGVtSUQ9JEZBUURhdGF7SXRlbUlEfSI7CgogICAgICAgICAgICAjIHNob3cgIkluc2VydCBMaW5rIiBidXR0b24KICAgICAgICAgICAgaWYgKCAkVGlja2V0Q29tcG9zZUNvbmZpZy0+e1Nob3dJbnNlcnRMaW5rQnV0dG9ufSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luc2VydExpbmsnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNob3dPckJsb2NrID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzaG93ICJJbnNlcnQgVGV4dCBhbmQgTGluayIgYnV0dG9uCiAgICAgICAgICAgIGlmICggJFRpY2tldENvbXBvc2VDb25maWctPntTaG93SW5zZXJ0VGV4dEFuZExpbmtCdXR0b259ICkgewogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIGRlZmluZWQgJFRpY2tldENvbXBvc2VDb25maWctPntJbnNlcnRNZXRob2R9CiAgICAgICAgICAgICAgICAgICAgJiYgJFRpY2tldENvbXBvc2VDb25maWctPntJbnNlcnRNZXRob2R9IGVxICdGdWxsJwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5zZXJ0RnVsbEFuZExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5zZXJ0VGV4dEFuZExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkU2hvd09yQmxvY2sgPSAxCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRDYW5jZWxCdXR0b25DbGFzcyA9ICdab29tU21hbGxCdXR0b24nOwoKICAgICAgICAjIHNob3cgdGhlICJPciIgYmxvY2sgYmV0d2VlbiB0aGUgYnV0dG9ucyBhbmQgdGhlIENhbmNlbCAmIGNsb3NlIHdpbmRvdyBsYWJlbAogICAgICAgIGlmICgkU2hvd09yQmxvY2spIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPcicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgdGhlICRDYW5jZWxCdXR0b25DbGFzcyB0byAnJzsKICAgICAgICAgICAgJENhbmNlbEJ1dHRvbkNsYXNzID0gJyc7CiAgICAgICAgfQoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUVpvb21TbWFsbCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIENhbmNlbEJ1dHRvbkNsYXNzID0+ICRDYW5jZWxCdXR0b25DbGFzcyB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRGQVFab29tJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBhZGQgZm9vdGVyCiAgICBpZiAoICROYXYgJiYgJE5hdiBlcSAnTm9uZScgKSB7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIH0KCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9GQVFWb3RpbmcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlRkFRRGF0YSA9ICV7ICRQYXJhbXtGQVFEYXRhfSB9OwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBvdXRwdXQgdm90aW5nIGJsb2NrCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdGQVFWb3RpbmcnLAogICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICk7CgogICAgIyBnZXQgVm90aW5nIHJhdGVzIHNldHRpbmcKICAgIG15ICRWb3RpbmdSYXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRkFROjpJdGVtOjpWb3Rpbmc6OlJhdGVzJyk7CiAgICBmb3IgbXkgJFJhdGVWYWx1ZSAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JFZvdGluZ1JhdGVzfSApIHsKCiAgICAgICAgIyBjcmVhdGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIG91dHB1dAogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICBWYWx1ZSA9PiAkUmF0ZVZhbHVlLAogICAgICAgICAgICBUaXRsZSA9PiAkVm90aW5nUmF0ZXMtPnskUmF0ZVZhbHVlfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCB2b3RlIHJhdGluZyByb3cgYmxvY2sKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRkFRVm90aW5nUmF0ZVJvdycsCiAgICAgICAgICAgIERhdGEgPT4geyVEYXRhfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lckZBUUV4cGxvcmVyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJGQVE6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBjb25maWcgZGF0YQogICAgbXkgJFN0YXJ0SGl0ID0gaW50KCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnRIaXQnICkgfHwgMSApOwogICAgbXkgJFNlYXJjaExpbWl0ICAgICA9ICRDb25maWctPntTZWFyY2hMaW1pdH0gICAgIHx8IDIwMDsKICAgIG15ICRTZWFyY2hQYWdlU2hvd24gPSAkQ29uZmlnLT57U2VhcmNoUGFnZVNob3dufSB8fCAzOwogICAgbXkgJFNvcnRCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkQ29uZmlnLT57J1NvcnRCeTo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0ZBUUlEJzsKICAgIG15ICRPcmRlckJ5ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ09yZGVyJyApCiAgICAgICAgfHwgJENvbmZpZy0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0Rvd24nOwoKICAgICMgZ2V0IGNhdGVnb3J5IGlkCiAgICBteSAkQ2F0ZWdvcnlJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDYXRlZ29yeUlEJyApIHx8IDA7CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGNoZWNrIGZvciBub24gbnVtZXJpYyBDYXRlZ29yeUlECiAgICBpZiAoICRDYXRlZ29yeUlEICF+IC9cZCsvICkgewogICAgICAgICRDYXRlZ29yeUlEID0gMDsKICAgIH0KCiAgICAjIGdldCBjYXRlZ29yeSBieSBuYW1lCiAgICBteSAkQ2F0ZWdvcnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2F0ZWdvcnknICkgfHwgJyc7CgogICAgIyB0cnkgdG8gZ2V0IHRoZSBDYXRlZ29yeSBJRCBmcm9tIGNhdGVnb3J5IG5hbWUgaWYgbm8gQ2F0ZWdvcnkgSUQKICAgIGlmICggJENhdGVnb3J5ICYmICEkQ2F0ZWdvcnlJRCApIHsKCiAgICAgICAgIyBnZXQgdGhlIGNhdGVnb3J5IHRyZWUKICAgICAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlUcmVlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHJldmVyc2UgdGhlIGhhcyBmb3IgZWFzeSBsb29rdXAKICAgICAgICBteSAlUmV2ZXJzZUNhdGVnb3J5VHJlZSA9IHJldmVyc2UgJXskQ2F0ZWdvcnlUcmVlfTsKCiAgICAgICAgJENhdGVnb3J5SUQgPSAkUmV2ZXJzZUNhdGVnb3J5VHJlZXskQ2F0ZWdvcnl9IHx8IDA7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHRyeSB0byBnZXQgdGhlIGNhdGVnb3J5IGRhdGEKICAgIG15ICVDYXRlZ29yeURhdGE7CiAgICBpZiAoJENhdGVnb3J5SUQpIHsKCiAgICAgICAgIyBnZXQgY2F0ZWdvcnkgZGF0YQogICAgICAgICVDYXRlZ29yeURhdGEgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICElQ2F0ZWdvcnlEYXRhICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOb1Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB1c2VyIHBlcm1pc3Npb24KICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRGQVFPYmplY3QtPkNoZWNrQ2F0ZWdvcnlDdXN0b21lclBlcm1pc3Npb24oCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgIENhdGVnb3J5SUQgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgICAgICBpZiAoICEkUGVybWlzc2lvbiApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyTm9QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzdG9yZSB0aGUgbGFzdCBzY3JlZW4gb3ZlcnZpZXcgaW4gc2Vzc2lvbgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbk92ZXJ2aWV3JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckhlYWRlcigKICAgICAgICBWYWx1ZSA9PiAnJywKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwoKICAgICMgc2hvdyBGQVEgcGF0aAogICAgJExheW91dE9iamVjdC0+RkFRUGF0aFNob3coCiAgICAgICAgRkFRT2JqZWN0ICA9PiAkRkFRT2JqZWN0LAogICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGFsbCBkaXJlY3Qgc3ViY2F0ZWdvcmllcyBvZiB0aGUgc2VsZWN0ZWQgY2F0ZWdvcnkKICAgIG15ICRDYXRlZ29yeUlEc1JlZiA9ICRGQVFPYmplY3QtPkN1c3RvbWVyQ2F0ZWdvcnlTZWFyY2goCiAgICAgICAgUGFyZW50SUQgICAgID0+ICRDYXRlZ29yeUlELAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgTW9kZSAgICAgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBzaG93IHN1YmNhdGVnb3JpZXMgbGlzdAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU3ViY2F0ZWdvcmllcycsCiAgICAgICAgRGF0YSA9PiB7fSwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdCcsCiAgICAgICAgRGF0YSA9PiB7fSwKICAgICk7CgogICAgIyBnZXQgaW50ZXJmYWNlIHN0YXRlcyBsaXN0CiAgICBteSAkSW50ZXJmYWNlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkN1c3RvbWVyOjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBpZiB0aGVyZSBhcmUgc3ViY2F0ZWdvcmllcwogICAgaWYgKCAkQ2F0ZWdvcnlJRHNSZWYgJiYgcmVmICRDYXRlZ29yeUlEc1JlZiBlcSAnQVJSQVknICYmIEB7JENhdGVnb3J5SURzUmVmfSApIHsKCiAgICAgICAgIyBzaG93IGRhdGEgZm9yIGVhY2ggc3ViY2F0ZWdvcnkKICAgICAgICBmb3IgbXkgJFN1YkNhdGVnb3J5SUQgKCBAeyRDYXRlZ29yeUlEc1JlZn0gKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgY2F0ZWdvcnkgZGF0YQogICAgICAgICAgICBteSAlU3ViQ2F0ZWdvcnlEYXRhID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlHZXQoCiAgICAgICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRTdWJDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCB0aGUgbnVtYmVyIG9mIHN1YmNhdGVnb3JpZXMgb2YgdGhpcyBzdWJjYXRlZ29yeQogICAgICAgICAgICAkU3ViQ2F0ZWdvcnlEYXRhe1N1YkNhdGVnb3J5Q291bnR9ID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlDb3VudCgKICAgICAgICAgICAgICAgIFBhcmVudElEcyA9PiBbJFN1YkNhdGVnb3J5SURdLAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBudW1iZXIgb2YgRkFRIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkKICAgICAgICAgICAgJFN1YkNhdGVnb3J5RGF0YXtBcnRpY2xlQ291bnR9ID0gJEZBUU9iamVjdC0+RkFRQ291bnQoCiAgICAgICAgICAgICAgICBDYXRlZ29yeUlEcyAgPT4gWyRTdWJDYXRlZ29yeUlEXSwKICAgICAgICAgICAgICAgIEl0ZW1TdGF0ZXMgICA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgICAgICAgICAgT25seUFwcHJvdmVkID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgdGhlIGNhdGVnb3J5IGRhdGEKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslU3ViQ2F0ZWdvcnlEYXRhfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9DYXRlZ29yeURhdGFGb3VuZE1zZycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgbXkgJEludGVyZmFjZSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2V4dGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNlYXJjaCBhbGwgRkFRIGFydGljbGVzIHdpdGhpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkKICAgIG15IEBWaWV3YWJsZUZBUUlEcyA9ICRGQVFPYmplY3QtPkZBUVNlYXJjaCgKICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFskU29ydEJ5XSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFskT3JkZXJCeV0sCiAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAkU2VhcmNoTGltaXQsCiAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgU3RhdGVzICAgICAgICAgICA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgIEludGVyZmFjZSAgICAgICAgPT4gJEludGVyZmFjZSwKICAgICAgICBDYXRlZ29yeUlEcyAgICAgID0+IFskQ2F0ZWdvcnlJRF0sCiAgICApOwoKICAgICMgc2V0IHRoZSBTb3J0QnkgQ2xhc3MKICAgIG15ICRTb3J0Q2xhc3M7CgogICAgIyB0aGlzIHNldHMgdGhlIG9wcG9zaXRlIHRvIHRoZSBPcmRlckJ5IHBhcmFtZXRlcgogICAgaWYgKCAkT3JkZXJCeSBlcSAnRG93bicgKSB7CiAgICAgICAgJFNvcnRDbGFzcyA9ICdTb3J0QXNjZW5kaW5nJzsKICAgIH0KICAgIGVsc2lmICggJE9yZGVyQnkgZXEgJ1VwJyApIHsKICAgICAgICAkU29ydENsYXNzID0gJ1NvcnREZXNjZW5kaW5nJzsKICAgIH0KCiAgICAjIHNldCB0aGUgU29ydEJ5IENsYXNzIHRvIHRoZSBjb3JyZWN0IGZpZWxkCiAgICBteSAlQ1NTU29ydDsKICAgIG15ICRDU1NTb3J0QnkgPSAkU29ydEJ5IC4gJ1NvcnQnOwogICAgJENTU1NvcnR7JENTU1NvcnRCeX0gPSAkU29ydENsYXNzOwoKICAgIG15ICVOZXdPcmRlciA9ICgKICAgICAgICBEb3duID0+ICdVcCcsCiAgICAgICAgVXAgICA9PiAnRG93bicsCiAgICApOwoKICAgICMgc2hvdyB0aGUgRkFRIGFydGljbGUgbGlzdAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnRkFRSXRlbUxpc3QnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAlQ1NTU29ydCwKICAgICAgICAgICAgT3JkZXIgPT4gJE5ld09yZGVyeyRPcmRlckJ5fSwKICAgICAgICB9LAogICAgKTsKCiAgICBteSAkTXVsdGlMYW5ndWFnZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CgogICAgIyBzaG93IGxhbmd1YWdlIGhlYWRlcgogICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckxhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgJUNTU1NvcnQsCiAgICAgICAgICAgICAgICBPcmRlciA9PiAkTmV3T3JkZXJ7JE9yZGVyQnl9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJENvdW50ZXIgPSAwOwogICAgaWYgKEBWaWV3YWJsZUZBUUlEcykgewoKICAgICAgICBmb3IgbXkgJEZBUUlEIChAVmlld2FibGVGQVFJRHMpIHsKCiAgICAgICAgICAgICRDb3VudGVyKys7CgogICAgICAgICAgICAjIGJ1aWxkIHNlYXJjaCByZXN1bHQKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFN0YXJ0SGl0CiAgICAgICAgICAgICAgICAmJiAkQ291bnRlciA8ICggJFNlYXJjaFBhZ2VTaG93biArICRTdGFydEhpdCApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGdldCBGQVEgZGF0YSBkZXRhaWxzCiAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRGQVFEYXRhe0NsZWFuVGl0bGV9ID0gJEZBUU9iamVjdC0+RkFRQXJ0aWNsZVRpdGxlQ2xlYW4oCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZBUURhdGF7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgIFNpemUgID0+ICRDb25maWctPntUaXRsZVNpemV9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGFkZCBibG9ja3MgdG8gdGVtcGxhdGUKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYWRkIGxhbmd1YWdlIGRhdGEKICAgICAgICAgICAgICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmRMYW5ndWFnZScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIG90aGVyd2lzZSBhIG5vIGRhdGEgZm91bmQgbWVzc2FnZSBpcyBkaXNwbGF5ZWQKICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0ZBUURhdGFGb3VuZE1zZycsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkTGluayA9ICdTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFNvcnRCeSkgLiAnOyc7CiAgICAkTGluayAuPSAnT3JkZXI9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJE9yZGVyQnkpIC4gJzsnOwoKICAgICMgYnVpbGQgc2VhcmNoIG5hdmlnYXRpb24gYmFyCiAgICBteSAlUGFnZU5hdiA9ICRMYXlvdXRPYmplY3QtPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRTZWFyY2hMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkU2VhcmNoUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkQ291bnRlciwKICAgICAgICBBY3Rpb24gICAgPT4gIkFjdGlvbj1DdXN0b21lckZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9JENhdGVnb3J5SUQiLAogICAgICAgIExpbmsgICAgICA9PiAkTGluaywKICAgICAgICBJRFByZWZpeCAgPT4gIkN1c3RvbWVyRkFRRXhwbG9yZXIiLAogICAgKTsKCiAgICAjIHNob3cgZm9vdGVyIGZpbHRlciAtIHNob3cgb25seSBpZiBtb3JlIHRoZSBvbmUgcGFnZSBpcyBhdmFpbGFibGUKICAgIGlmICggZGVmaW5lZCAkUGFnZU5hdntUb3RhbEhpdHN9ICYmICggJFBhZ2VOYXZ7VG90YWxIaXRzfSA+ICRTZWFyY2hQYWdlU2hvd24gKSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUGFnaW5hdGlvbicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJVBhZ2VOYXYsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgUXVpY2tTZWFyY2gKICAgICRMYXlvdXRPYmplY3QtPkZBUVNob3dRdWlja1NlYXJjaCgKICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ0N1c3RvbWVyJywKICAgICAgICBDdXN0b21lclVzZXIgICAgPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2hvdyBsYXN0IGFkZGVkIGFuZCBsYXN0IHVwZGF0ZWQgYXJ0aWNsZXMKICAgIGZvciBteSAkVHlwZSAocXcoTGFzdENyZWF0ZSBMYXN0Q2hhbmdlKSkgewoKICAgICAgICBteSAkU2hvd09rID0gJExheW91dE9iamVjdC0+RkFRU2hvd0xhdGVzdE5ld3NCb3goCiAgICAgICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJFR5cGUsCiAgICAgICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnQ3VzdG9tZXInLAogICAgICAgICAgICBDdXN0b21lclVzZXIgICAgPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICAgICBDYXRlZ29yeUlEICAgICAgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJEludGVyZmFjZVN0YXRlcywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJFNob3dPayApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyB0b3AgdGVuIGFydGljbGVzCiAgICBteSAkU2hvd09rID0gJExheW91dE9iamVjdC0+RkFRU2hvd1RvcDEwKAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LAogICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnQ3VzdG9tZXInLAogICAgICAgIEN1c3RvbWVyVXNlciAgICA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgQ2F0ZWdvcnlJRCAgICAgID0+ICRDYXRlZ29yeUlELAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRTaG93T2sgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICB9CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJGQVFFeHBsb3JlcicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAlQ2F0ZWdvcnlEYXRhLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lckZBUVByaW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKCAhJFNlbGYtPntBY2Nlc3NSb30gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgcm8gcGVybWlzc2lvbiEnLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAlR2V0UGFyYW07CiAgICAkR2V0UGFyYW17SXRlbUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJdGVtSUQnICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRHZXRQYXJhbXtJdGVtSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIEl0ZW1JRCBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyBnZXQgRkFRIGl0ZW0gZGF0YQogICAgbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJUZBUURhdGEgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigpOwogICAgfQoKICAgICMgY2hlY2sgdXNlciBwZXJtaXNzaW9uCiAgICBteSAkUGVybWlzc2lvbiA9ICRGQVFPYmplY3QtPkNoZWNrQ2F0ZWdvcnlDdXN0b21lclBlcm1pc3Npb24oCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICBDYXRlZ29yeUlEICAgPT4gJEZBUURhdGF7Q2F0ZWdvcnlJRH0sCiAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgaW50ZXJmYWNlIHN0YXRlIGxpc3QKICAgIG15ICRJbnRlcmZhY2VTdGF0ZXMgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6Q3VzdG9tZXI6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgbm8gcGVybWlzc2lvbiBlcnJvcgogICAgaWYgKAogICAgICAgICEkUGVybWlzc2lvbgogICAgICAgIHx8ICEkRkFRRGF0YXtBcHByb3ZlZH0KICAgICAgICB8fCAhJEludGVyZmFjZVN0YXRlcy0+eyAkRkFRRGF0YXtTdGF0ZVR5cGVJRH0gfQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOb1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgbXkgJEludGVyZmFjZSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2V4dGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHByZXBhcmUgZmllbGRzIGRhdGEKICAgIEZJRUxEOgogICAgZm9yIG15ICRGaWVsZCAocXcoRmllbGQxIEZpZWxkMiBGaWVsZDMgRmllbGQ0IEZpZWxkNSBGaWVsZDYpKSB7CiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZBUURhdGF7JEZpZWxkfTsKCiAgICAgICAgIyByZXdyaXRlIGxpbmtzIHRvIGVtYmVkZGVkIGltYWdlcyBmb3IgY3VzdG9tZXIgYW5kIHB1YmxpYyBpbnRlcmZhY2UKICAgICAgICBpZiAoICRJbnRlcmZhY2UtPntOYW1lfSBlcSAnZXh0ZXJuYWwnICkgewogICAgICAgICAgICAkRkFRRGF0YXskRmllbGR9CiAgICAgICAgICAgICAgICA9fiBzeyBpbmRleFsuXXBsIFs/XSBBY3Rpb249QWdlbnRGQVFab29tIH17Y3VzdG9tZXIucGw/QWN0aW9uPUN1c3RvbWVyRkFRWm9vbX1neG1zOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBQREYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgZ2VuZXJhdGUgUERGIG91dHB1dAogICAgbXkgJFByaW50ZWRCeSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgncHJpbnRlZCBieScpOwogICAgbXkgJFRpbWUgICAgICA9ICRMYXlvdXRPYmplY3QtPntUaW1lfTsKICAgIG15ICVQYWdlOwoKICAgICMgZ2V0IG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCiAgICAkUGFnZXtNYXhQYWdlc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgJFBhZ2V7TWF4UGFnZXN9ID0gMTAwOwogICAgfQogICAgbXkgJEhlYWRlclJpZ2h0ICA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpGQVFIb29rJykgLiAkRkFRRGF0YXtOdW1iZXJ9OwogICAgbXkgJEhlYWRsaW5lTGVmdCA9ICRIZWFkZXJSaWdodDsKICAgIG15ICRUaXRsZSAgICAgICAgPSAkSGVhZGVyUmlnaHQ7CiAgICBpZiAoICRGQVFEYXRhe1RpdGxlfSApIHsKICAgICAgICAkSGVhZGxpbmVMZWZ0ID0gJEZBUURhdGF7VGl0bGV9OwogICAgICAgICRUaXRsZSAuPSAnIC8gJyAuICRGQVFEYXRhe1RpdGxlfTsKICAgIH0KCiAgICAkUGFnZXtNYXJnaW5Ub3B9ICAgICA9IDMwOwogICAgJFBhZ2V7TWFyZ2luUmlnaHR9ICAgPSA0MDsKICAgICRQYWdle01hcmdpbkJvdHRvbX0gID0gNDA7CiAgICAkUGFnZXtNYXJnaW5MZWZ0fSAgICA9IDQwOwogICAgJFBhZ2V7SGVhZGVyUmlnaHR9ICAgPSAkSGVhZGVyUmlnaHQ7CiAgICAkUGFnZXtIZWFkbGluZVJpZ2h0fSA9ICRQcmludGVkQnkgLiAnICcKICAgICAgICAuICRTZWxmLT57VXNlckZpcnN0bmFtZX0gLiAnICcKICAgICAgICAuICRTZWxmLT57VXNlckxhc3RuYW1lfSAuICcgKCcKICAgICAgICAuICRTZWxmLT57VXNlckVtYWlsfSAuICcpICcKICAgICAgICAuICRUaW1lOwogICAgJFBhZ2V7UGFnZVRleHR9ICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUGFnZScpOwogICAgJFBhZ2V7UGFnZUNvdW50fSA9IDE7CgogICAgIyBjcmVhdGUgbmV3IFBERiBkb2N1bWVudAogICAgJFBERk9iamVjdC0+RG9jdW1lbnROZXcoCiAgICAgICAgVGl0bGUgID0+ICRDb25maWdPYmplY3QtPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRUaXRsZSwKICAgICAgICBFbmNvZGUgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICk7CgogICAgIyBjcmVhdGUgZmlyc3QgUERGIHBhZ2UKICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgJVBhZ2UsCiAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICk7CiAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJEZBUURhdGF7VGl0bGV9LAogICAgICAgIEZvbnRTaXplID0+IDEzLAoKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgInByaW50ZWQgYnkiCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgPT4gJFByaW50ZWRCeSAuICcgJwogICAgICAgICAgICAuICRTZWxmLT57VXNlckZpcnN0bmFtZX0gLiAnICcKICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJMYXN0bmFtZX0gLiAnICgnCiAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRW1haWx9IC4gJyknCiAgICAgICAgICAgIC4gJywgJyAuICRUaW1lLAogICAgICAgIEZvbnRTaXplID0+IDksCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE0LAogICAgKTsKCiAgICAjIHR5cGUgb2YgcHJpbnQgdGFnCiAgICBteSAkUHJpbnRUYWcgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUSBBcnRpY2xlIFByaW50Jyk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFByaW50VGFnLAogICAgICAgIEhlaWdodCAgID0+IDksCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGQnLAogICAgICAgIEFsaWduICAgID0+ICdyaWdodCcsCiAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTYsCiAgICApOwoKICAgICMgb3V0cHV0IEZBUSBpbmZvcm1hdGlvbgogICAgJFNlbGYtPl9QREZPdXRwdXRGQVFIZWFkZXJJbmZvKAogICAgICAgIFBhZ2VEYXRhID0+IFwlUGFnZSwKICAgICAgICBGQVFEYXRhICA9PiBcJUZBUURhdGEsCiAgICApOwoKICAgIGlmICggJEZBUURhdGF7S2V5d29yZHN9ICkgewogICAgICAgICRTZWxmLT5fUERGT3V0cHV0S2V5d29yZHMoCiAgICAgICAgICAgIFBhZ2VEYXRhID0+IFwlUGFnZSwKICAgICAgICAgICAgRkFRRGF0YSAgPT4gXCVGQVFEYXRhLAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgRkFRIGR5bmFtaWMgZmllbGRzCiAgICAkU2VsZi0+X1BERk91dHB1dEZBUUR5bmFtaWNGaWVsZHMoCiAgICAgICAgUGFnZURhdGEgPT4gXCVQYWdlLAogICAgICAgIEZBUURhdGEgID0+IFwlRkFRRGF0YSwKICAgICk7CgogICAgJFNlbGYtPl9QREZPdXB1dEZBUUNvbnRlbnQoCiAgICAgICAgUGFnZURhdGEgICAgICAgID0+IFwlUGFnZSwKICAgICAgICBGQVFEYXRhICAgICAgICAgPT4gXCVGQVFEYXRhLAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgKTsKCiAgICAjIGdldCB0aW1lIG9iamVjdAogICAgbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKICAgICMgcmV0dXJuIHRoZSBQREYgZG9jdW1lbnQKICAgIG15ICRGaWxlbmFtZSA9ICdGQVFfJyAuICRGQVFEYXRhe051bWJlcn07CiAgICBteSAoICRzLCAkbSwgJGgsICRELCAkTSwgJFkgKSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpLAogICAgKTsKICAgICRNID0gc3ByaW50ZiggIiUwMmQiLCAkTSApOwogICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICRtID0gc3ByaW50ZiggIiUwMmQiLCAkbSApOwogICAgbXkgJFBERlN0cmluZyA9ICRQREZPYmplY3QtPkRvY3VtZW50T3V0cHV0KCk7CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBGaWxlbmFtZSAgICA9PiAkRmlsZW5hbWUgLiAiXyIgLiAiJFktJE0tJEQiIC4gIl8iIC4gIiRoLSRtLnBkZiIsCiAgICAgICAgQ29udGVudFR5cGUgPT4gImFwcGxpY2F0aW9uL3BkZiIsCiAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICk7Cn0KCnN1YiBfUERGT3V0cHV0RkFRSGVhZGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZURhdGEgRkFRRGF0YSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgbXkgJUZBUURhdGEgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKICAgIG15ICVQYWdlICAgID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjcmVhdGUgbGVmdCB0YWJsZQogICAgbXkgJFRhYmxlTGVmdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ2F0ZWdvcnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRkFRRGF0YXtDYXRlZ29yeU5hbWV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU3RhdGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRkFRRGF0YXtTdGF0ZX0gKSwKICAgICAgICB9LAogICAgXTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBkZWZhdWx0IG11bHRpIGxhbmd1YWdlIG9wdGlvbgogICAgbXkgJE11bHRpTGFuZ3VhZ2UgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwoKICAgICMgbGFuZ3VhZ2Ugcm93LCBmZWF0dXJlIGlzIGVuYWJsZWQKICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgIG15ICRSb3cgPSB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTGFuZ3VhZ2UnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRkFRRGF0YXtMYW5ndWFnZX0gKSwKICAgICAgICB9OwogICAgICAgIHB1c2ggQHskVGFibGVMZWZ0fSwgJFJvdzsKICAgIH0KCiAgICAjIGNyZWF0ZSByaWdodCB0YWJsZQogICAgbXkgJFRhYmxlUmlnaHQ7CgogICAgIyBnZXQgZGVmYXVsdCB2b3Rpbmcgb3B0aW9uCiAgICBteSAkVm90aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OlZvdGluZycpOwoKICAgICMgdm90aW5nIHJvd3MsIGZlYXR1cmUgaXMgZW5hYmxlZAogICAgaWYgKCRWb3RpbmcpIHsKICAgICAgICAkVGFibGVSaWdodCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdWb3RlcycpIC4gJzonLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJEZBUURhdGF7Vm90ZXN9LAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1Jlc3VsdCcpIC4gJzonLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJEZBUURhdGF7Vm90ZVJlc3VsdH0gLiAiICUiLAogICAgICAgICAgICB9LAogICAgICAgIF07CiAgICB9CgogICAgIyBsYXN0IHVwZGF0ZSByb3cKICAgIHB1c2ggQHskVGFibGVSaWdodH0sIHsKICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0xhc3QgdXBkYXRlJykgLiAnOicsCiAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZygKICAgICAgICAgICAgJEZBUURhdGF7Q2hhbmdlZH0sCiAgICAgICAgICAgICdEYXRlRm9ybWF0JywKICAgICAgICApLAogICAgfTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsyXXtXaWR0aH0gPSA0OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bM117V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVs0XXtXaWR0aH0gPSAxNzAuNTsKCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICA9IDM7CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCAlVGFibGVQYXJhbSwgKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgIGxhc3QgUEFHRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAlUGFnZSwKICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYWdle1BhZ2VDb3VudH0rKzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRLZXl3b3JkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZURhdGEgRkFRRGF0YSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBteSAlRkFRRGF0YSA9ICV7ICRQYXJhbXtGQVFEYXRhfSB9OwogICAgbXkgJVBhZ2UgICAgPSAleyAkUGFyYW17UGFnZURhdGF9IH07CiAgICBteSAlVGFibGVQYXJhbTsKCiAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bMF1bMF17Q29udGVudH0gPSAkRkFRRGF0YXtLZXl3b3Jkc30gfHwgJyc7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA1MTE7CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkbGluZQogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ICAgICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnS2V5d29yZHMnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC00LAogICAgKTsKCiAgICAjIHRhYmxlIHBhcmFtcwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFnZXtQYWdlQ291bnR9IC4uICRQYWdle01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICBsYXN0IFBBR0U7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0RkFRRHluYW1pY0ZpZWxkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZURhdGEgRkFRRGF0YSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBteSAkT3V0cHV0ID0gMDsKICAgIG15ICVGQVEgICAgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKICAgIG15ICVQYWdlICAgPSAleyAkUGFyYW17UGFnZURhdGF9IH07CgogICAgbXkgJVRhYmxlUGFyYW07CiAgICBteSAkUm93ID0gMDsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGNvbmZpZyBmb3IgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkRHluYW1pY0ZpZWxkRmlsdGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJGQVE6OkZyb250ZW5kOjpDdXN0b21lckZBUVByaW50IiktPntEeW5hbWljRmllbGR9OwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgRkFRIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnRkFRJ10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJER5bmFtaWNGaWVsZEZpbHRlciB8fCB7fSwKICAgICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBnZW5lcmF0ZSB0YWJsZQogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgRkFRIG9iamVjdAogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBza2lwIGR5bmFtaWMgZmllbGQgaWYgaXMgbm90IGRlc2lnbmVkIGZvciBjdXN0b21lciBpbnRlcmZhY2UKICAgICAgICBteSAkSXNDdXN0b21lckludGVyZmFjZUNhcGFibGUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlJywKICAgICAgICApOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkSXNDdXN0b21lckludGVyZmFjZUNhcGFibGU7CgogICAgICAgIG15ICRWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkRkFRe0ZBUUlEfSwKICAgICAgICApOwoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJFZhbHVlOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICRWYWx1ZSBlcSAiIjsKCiAgICAgICAgIyBnZXQgcHJpbnQgc3RyaW5nIGZvciB0aGlzIGR5bmFtaWMgZmllbGQKICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgIEhUTUxPdXRwdXQgICAgICAgICA9PiAwLAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICApOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fQogICAgICAgICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSApCiAgICAgICAgICAgIC4gJzonOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gPSAkVmFsdWVTdHJnLT57VmFsdWV9OwoKICAgICAgICAkUm93Kys7CiAgICAgICAgJE91dHB1dCA9IDE7CiAgICB9CgogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSA0MzE7CgogICAgIyBvdXRwdXQgRkFRIGR5bmFtaWMgZmllbGRzCiAgICBpZiAoJE91dHB1dCkgewoKICAgICAgICAjIGdldCBQREYgb2JqZWN0CiAgICAgICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAgICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICBZICAgID0+IC0xNSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkbGluZQogICAgICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgICAgIFRleHQgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRkFRIER5bmFtaWMgRmllbGRzJyksCiAgICAgICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICAgICApOwoKICAgICAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgIFkgICAgPT4gLTQsCiAgICAgICAgKTsKCiAgICAgICAgIyB0YWJsZSBwYXJhbXMKICAgICAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgID0gJ0N1dCc7CiAgICAgICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICA9IDA7CiAgICAgICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICA9IDY7CiAgICAgICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSA9ICcjREREREREJzsKICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgID0gMTsKICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgID0gMzsKICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgID0gMzsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUKICAgICAgICBQQUdFOgogICAgICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICAgICAgbGFzdCBQQUdFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgICAgICAgICAlUGFnZSwKICAgICAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRQYWdle1BhZ2VDb3VudH0rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91cHV0RkFRQ29udGVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgcGFyYW1ldGVycwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFBhZ2VEYXRhIEZBUURhdGEpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkUGFyYW1OYW1lISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZBUURhdGEgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKICAgIG15ICVQYWdlICAgID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IHRoZSBjb25maWcgb2YgRkFRIGZpZWxkcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgbXkgJUZpZWxkczsKICAgIE5VTUJFUjoKICAgIGZvciBteSAkTnVtYmVyICggMSAuLiA2ICkgewoKICAgICAgICAjIGdldCBjb25maWcgb2YgRkFRIGZpZWxkCiAgICAgICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCggJ0ZBUTo6SXRlbTo6RmllbGQnIC4gJE51bWJlciApOwoKICAgICAgICAjIHNraXAgb3ZlciBub3Qgc2hvd24gZmllbGRzCiAgICAgICAgbmV4dCBOVU1CRVIgaWYgISRDb25maWctPntTaG93fTsKCiAgICAgICAgIyBzdG9yZSBvbmx5IHRoZSBjb25maWcgb2YgZmllbGRzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgJEZpZWxkc3sgIkZpZWxkIiAuICROdW1iZXIgfSA9ICRDb25maWc7CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRGQVFPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CiAgICBteSAkUERGT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwogICAgbXkgJEhUTUxVdGlsc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzb3J0IHNob3duIGZpZWxkcyBieSBwcmlvcml0eQogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkICggc29ydCB7ICRGaWVsZHN7JGF9LT57UHJpb30gPD0+ICRGaWVsZHN7JGJ9LT57UHJpb30gfSBrZXlzICVGaWVsZHMgKSB7CgogICAgICAgICMgZ2V0IHRoZSBzdGF0ZSB0eXBlIGRhdGEgb2YgdGhpcyBmaWVsZAogICAgICAgIG15ICRTdGF0ZVR5cGVEYXRhID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlR2V0KAogICAgICAgICAgICBOYW1lICAgPT4gJEZpZWxkc3skRmllbGR9LT57U2hvd30sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBkbyBub3Qgc2hvdyBmaWVsZHMgdGhhdCBhcmUgbm90IGFsbG93ZWQgaW4gdGhlIGdpdmVuIGludGVyZmFjZQogICAgICAgIG5leHQgRklFTEQgaWYgISRQYXJhbXtJbnRlcmZhY2VTdGF0ZXN9LT57ICRTdGF0ZVR5cGVEYXRhLT57U3RhdGVJRH0gfTsKCiAgICAgICAgbXkgJVRhYmxlUGFyYW07CgogICAgICAgICMgY29udmVydCBIVE1MIHRvIEFTQ0lJCiAgICAgICAgbXkgJEFzY2lpRmllbGQgPSAkSFRNTFV0aWxzT2JqZWN0LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJEZBUURhdGF7JEZpZWxkfSApOwoKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bMF1bMF17Q29udGVudH0gPSAkQXNjaWlGaWVsZCB8fCAnJzsKICAgICAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA1MTE7CgogICAgICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgWSAgICA9PiAtMTUsCiAgICAgICAgKTsKCiAgICAgICAgIyB0cmFuc2xhdGUgdGhlIGZpZWxkIG5hbWUgYW5kIHN0YXRlCiAgICAgICAgbXkgJEZpZWxkTmFtZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJEZpZWxkc3skRmllbGR9LT57J0NhcHRpb24nfSApCiAgICAgICAgICAgIC4gJyAoJwogICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFN0YXRlVHlwZURhdGEtPntOYW1lfSApCiAgICAgICAgICAgIC4gJyknOwoKICAgICAgICAjIG91dHB1dCBoZWFkbGluZQogICAgICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgICAgIFRleHQgICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICAgICApOwoKICAgICAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgIFkgICAgPT4gLTQsCiAgICAgICAgKTsKCiAgICAgICAgIyB0YWJsZSBwYXJhbXMKICAgICAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgID0gJ0N1dCc7CiAgICAgICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICA9IDA7CiAgICAgICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICA9IDY7CiAgICAgICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSA9ICcjREREREREJzsKICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgID0gMTsKICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgID0gMzsKICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgID0gMzsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUKICAgICAgICBQQUdFOgogICAgICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICAgICAgbGFzdCBQQUdFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgICAgICAgICAlUGFnZSwKICAgICAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRQYWdle1BhZ2VDb3VudH0rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lckZBUVNlYXJjaDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgY29uZmlnIGZvciBmcm9udGVuZAogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJGQVE6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGNvbmZpZyBmb3IgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkRHluYW1pY0ZpZWxkRmlsdGVyID0gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIEZBUSBvYmplY3QKICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+ICdGQVEnLAogICAgICAgIEZpZWxkRmlsdGVyID0+ICREeW5hbWljRmllbGRGaWx0ZXIgfHwge30sCiAgICApOwoKICAgICMgcmVkdWNlIHRoZSBkeW5hbWljIGZpZWxkcyB0byBvbmx5IHRoZSBvbmVzIHRoYXQgYXJlIGRlc2lnbmVkIGZvciBjdXN0b21lciBpbnRlcmZhY2UKICAgIG15IEBDdXN0b21lckR5bmFtaWNGaWVsZHM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgbXkgJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNDdXN0b21lckludGVyZmFjZUNhcGFibGUnLAogICAgICAgICk7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZTsKCiAgICAgICAgcHVzaCBAQ3VzdG9tZXJEeW5hbWljRmllbGRzLCAkRHluYW1pY0ZpZWxkQ29uZmlnOwogICAgfQogICAgJFNlbGYtPntEeW5hbWljRmllbGR9ID0gXEBDdXN0b21lckR5bmFtaWNGaWVsZHM7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIGdldCBjb25maWcgZnJvbSBjb25zdHJ1Y3RvcgogICAgbXkgJENvbmZpZyA9ICRTZWxmLT57Q29uZmlnfTsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBjb25maWcgZGF0YQogICAgbXkgJFN0YXJ0SGl0ID0gaW50KCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnRIaXQnICkgfHwgMSApOwogICAgbXkgJFNlYXJjaExpbWl0ICAgICA9ICRDb25maWctPntTZWFyY2hMaW1pdH0gICAgIHx8IDIwMDsKICAgIG15ICRTZWFyY2hQYWdlU2hvd24gPSAkQ29uZmlnLT57U2VhcmNoUGFnZVNob3dufSB8fCA0MDsKICAgIG15ICRTb3J0QnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApCiAgICAgICAgfHwgJENvbmZpZy0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdGQVFJRCc7CiAgICBteSAkT3JkZXJCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlcicgKQogICAgICAgIHx8ICRDb25maWctPnsnT3JkZXI6OkRlZmF1bHQnfQogICAgICAgIHx8ICdEb3duJzsKCiAgICBteSAkUHJvZmlsZSAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvZmlsZScgKSAgICAgICAgfHwgJyc7CiAgICBteSAkU2F2ZVByb2ZpbGUgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2F2ZVByb2ZpbGUnICkgICAgfHwgJyc7CiAgICBteSAkVGFrZUxhc3RTZWFyY2ggPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGFrZUxhc3RTZWFyY2gnICkgfHwgJyc7CiAgICBteSAkRXJhc2VUZW1wbGF0ZSAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRXJhc2VUZW1wbGF0ZScgKSAgfHwgJyc7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHNlYXJjaCB3aXRoIGEgc2F2ZWQgdGVtcGxhdGUKICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlYXJjaFRlbXBsYXRlJyApICYmICRQcm9maWxlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249Q3VzdG9tZXJGQVFTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaDtUYWtlTGFzdFNlYXJjaD0xO1NhdmVQcm9maWxlPTE7UHJvZmlsZT0kUHJvZmlsZSIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIG91dHB1dCBmb3Igb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gYnkgRkFRIG51bWJlcgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ09wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcicgKSB7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lckZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcicsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXIueG1sJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL29wZW5zZWFyY2hkZXNjcmlwdGlvbit4bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgICMgYnVpbGQgb3V0cHV0IGZvciBvcGVuIHNlYXJjaCBkZXNjcmlwdGlvbiBieSBmdWxsLXRleHQKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdPcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dCcgKSB7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lckZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGxUZXh0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ09wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0LnhtbCcsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJlbWVtYmVyIGV4Y2x1ZGUgYXR0cmlidXRlcwogICAgbXkgQEV4Y2x1ZGVzID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJ0V4Y2x1ZGUnICk7CgogICAgIyBnZXQgc2luZ2xlIHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJFNlYXJjaFByb2ZpbGVPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VhcmNoUHJvZmlsZScpOwoKICAgICMgbG9hZCBwcm9maWxlcyBzdHJpbmcgcGFyYW1zIChwcmVzcyBsb2FkIHByb2ZpbGUpCiAgICBpZiAoICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdMb2FkUHJvZmlsZScgJiYgJFByb2ZpbGUgKSB8fCAkVGFrZUxhc3RTZWFyY2ggKSB7CiAgICAgICAgJUdldFBhcmFtID0gJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVHZXQoCiAgICAgICAgICAgIEJhc2UgICAgICA9PiAnQ3VzdG9tZXJGQVFTZWFyY2gnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFByb2ZpbGUsCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzZWFyY2ggc3RyaW5nIHBhcmFtcyAoZ2V0IHN1Ym1pdHRlZCBwYXJhbXMpCiAgICBlbHNlIHsKICAgICAgICBmb3IgbXkgJFBhcmFtTmFtZSAoCiAgICAgICAgICAgIHF3KE51bWJlciBUaXRsZSBLZXl3b3JkIEZ1bGx0ZXh0IFJlc3VsdEZvcm0gVGltZVNlYXJjaFR5cGUgVm90ZVNlYXJjaCBWb3RlU2VhcmNoVHlwZQogICAgICAgICAgICBWb3RlU2VhcmNoT3B0aW9uIFJhdGVTZWFyY2ggUmF0ZVNlYXJjaFR5cGUgUmF0ZVNlYXJjaE9wdGlvbgogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVBvaW50Rm9ybWF0IEl0ZW1DcmVhdGVUaW1lUG9pbnQKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVQb2ludFN0YXJ0CiAgICAgICAgICAgIEl0ZW1DcmVhdGVUaW1lU3RhcnQgSXRlbUNyZWF0ZVRpbWVTdGFydERheSBJdGVtQ3JlYXRlVGltZVN0YXJ0TW9udGgKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVTdGFydFllYXIKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVTdG9wIEl0ZW1DcmVhdGVUaW1lU3RvcERheSBJdGVtQ3JlYXRlVGltZVN0b3BNb250aAogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVN0b3BZZWFyCiAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgZ2V0IHNlYXJjaCBzdHJpbmcgcGFyYW1zIChnZXQgc3VibWl0dGVkIHBhcmFtcykKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwoKICAgICAgICAgICAgIyByZW1vdmUgd2hpdGVzcGFjZSBvbiB0aGUgc3RhcnQgYW5kIGVuZAogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9fiBzeyBcQSBccysgfXt9eG1zOwogICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID1+IHN7IFxzKyBceiB9e314bXM7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGFycmF5IHBhcmFtcwogICAgICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhDYXRlZ29yeUlEcyBMYW5ndWFnZUlEcyApKSB7CgogICAgICAgICAgICAjIGdldCBzZWFyY2ggYXJyYXkgcGFyYW1zIChnZXQgc3VibWl0dGVkIHBhcmFtcykKICAgICAgICAgICAgbXkgQEFycmF5ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgICAgICAgICBpZiAoQEFycmF5KSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSBcQEFycmF5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBEeW5hbWljIGZpZWxkcyBmb3JtIHBhcmFtIG9iamVjdAogICAgICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICAgICAgbXkgJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSgkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyk7CgogICAgICAgICAgICBQUkVGRVJFTkNFOgogICAgICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgd2ViIHJlcXVlc3QKICAgICAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgICAgICBSZXR1cm5Qcm9maWxlU3RydWN0dXJlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgPT4gJFByZWZlcmVuY2UtPntUeXBlfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGNvbXBsZXRlIHZhbHVlIHN0cnVjdHVyZSBpbiBHZXRQYXJhbSB0byBzdG9yZSBpdCBsYXRlciBpbiB0aGUgc2VhcmNoCiAgICAgICAgICAgICAgICAjIHByb2ZpbGUKICAgICAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZFZhbHVlKSApIHsKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0gPSAoICVHZXRQYXJhbSwgJXskRHluYW1pY0ZpZWxkVmFsdWV9ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBpdGVtIG5lZWQgdG8gZ2V0IGV4Y2x1ZGVkCiAgICBmb3IgbXkgJEV4Y2x1ZGUgKEBFeGNsdWRlcykgewogICAgICAgIGlmICggJEdldFBhcmFteyRFeGNsdWRlfSApIHsKICAgICAgICAgICAgZGVsZXRlICRHZXRQYXJhbXskRXhjbHVkZX07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHZvdGUgb3B0aW9uCiAgICBpZiAoICEkR2V0UGFyYW17Vm90ZVNlYXJjaE9wdGlvbn0gKSB7CiAgICAgICAgJEdldFBhcmFteydWb3RlU2VhcmNoT3B0aW9uOjpOb25lJ30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQogICAgZWxzaWYgKCAkR2V0UGFyYW17Vm90ZVNlYXJjaE9wdGlvbn0gZXEgJ1ZvdGVQb2ludCcgKSB7CiAgICAgICAgJEdldFBhcmFteydWb3RlU2VhcmNoT3B0aW9uOjpWb3RlUG9pbnQnfSA9ICdjaGVja2VkPSJjaGVja2VkIic7CiAgICB9CgogICAgIyBnZXQgcmF0ZSBvcHRpb24KICAgIGlmICggISRHZXRQYXJhbXtSYXRlU2VhcmNoT3B0aW9ufSApIHsKICAgICAgICAkR2V0UGFyYW17J1JhdGVTZWFyY2hPcHRpb246Ok5vbmUnfSA9ICdjaGVja2VkPSJjaGVja2VkIic7CiAgICB9CiAgICBlbHNpZiAoICRHZXRQYXJhbXtSYXRlU2VhcmNoT3B0aW9ufSBlcSAnUmF0ZVBvaW50JyApIHsKICAgICAgICAkR2V0UGFyYW17J1JhdGVTZWFyY2hPcHRpb246OlJhdGVQb2ludCd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KCiAgICAjIGdldCB0aW1lIG9wdGlvbgogICAgaWYgKCAhJEdldFBhcmFte1RpbWVTZWFyY2hUeXBlfSApIHsKICAgICAgICAkR2V0UGFyYW17J1RpbWVTZWFyY2hUeXBlOjpOb25lJ30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQogICAgZWxzaWYgKCAkR2V0UGFyYW17VGltZVNlYXJjaFR5cGV9IGVxICdUaW1lUG9pbnQnICkgewogICAgICAgICRHZXRQYXJhbXsnVGltZVNlYXJjaFR5cGU6OlRpbWVQb2ludCd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KICAgIGVsc2lmICggJEdldFBhcmFte1RpbWVTZWFyY2hUeXBlfSBlcSAnVGltZVNsb3QnICkgewogICAgICAgICRHZXRQYXJhbXsnVGltZVNlYXJjaFR5cGU6OlRpbWVTbG90J30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQoKICAgICMgc2V0IHJlc3VsdCBmb3JtIEVOVgogICAgaWYgKCAhJEdldFBhcmFte1Jlc3VsdEZvcm19ICkgewogICAgICAgICRHZXRQYXJhbXtSZXN1bHRGb3JtfSA9ICcnOwogICAgfQogICAgaWYgKCAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gZXEgJ1ByaW50JyApIHsKICAgICAgICAkU2VhcmNoUGFnZVNob3duID0gJFNlYXJjaExpbWl0OwogICAgfQoKICAgICMgY2hlY2sgcmVxdWVzdAogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ09wZW5TZWFyY2hEZXNjcmlwdGlvbicgKSB7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lckZBUVNlYXJjaE9wZW5TZWFyY2hEZXNjcmlwdGlvbicsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnT3BlblNlYXJjaERlc2NyaXB0aW9uLnhtbCcsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3htbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgZGVmYXVsdCBtdWx0aSBsYW5ndWFnZSBvcHRpb24KICAgIG15ICRNdWx0aUxhbmd1YWdlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6Ok11bHRpTGFuZ3VhZ2UnKTsKCiAgICAjIHNob3cgcmVzdWx0IHBhZ2UKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZWFyY2gnICYmICEkRXJhc2VUZW1wbGF0ZSApIHsKCiAgICAgICAgIyBmaWxsIHVwIHByb2ZpbGUgbmFtZSAoZS5nLiB3aXRoIGxhc3Qtc2VhcmNoKQogICAgICAgIGlmICggISRQcm9maWxlIHx8ICEkU2F2ZVByb2ZpbGUgKSB7CiAgICAgICAgICAgICRQcm9maWxlID0gJ2xhc3Qtc2VhcmNoJzsKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgbGFzdCBvdmVydmlldyBzY3JlZW4KICAgICAgICBteSAkVVJMID0gIkFjdGlvbj1DdXN0b21lckZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO1Byb2ZpbGU9JFByb2ZpbGUiCiAgICAgICAgICAgIC4gIjtTb3J0Qnk9JFNvcnRCeTtPcmRlckJ5PSRPcmRlckJ5O1Rha2VMYXN0U2VhcmNoPTEiCiAgICAgICAgICAgIC4gIjtTdGFydEhpdD0kU3RhcnRIaXQiOwoKICAgICAgICAjIGdldCBzZXNzaW9uIG9iamVjdAogICAgICAgIG15ICRTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyk7CgogICAgICAgICMgc3RvcmUgbGFzdCBzY3JlZW4KICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVUkwsCiAgICAgICAgKTsKICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CgogICAgICAgICMgc2F2ZSBzZWFyY2ggcHJvZmlsZSAodW5kZXIgbGFzdC1zZWFyY2ggb3IgcmVhbCBwcm9maWxlIG5hbWUpCiAgICAgICAgJFNhdmVQcm9maWxlID0gMTsKCiAgICAgICAgIyByZW1lbWJlciBsYXN0IHNlYXJjaCB2YWx1ZXMKICAgICAgICBpZiAoICRTYXZlUHJvZmlsZSAmJiAkUHJvZmlsZSApIHsKCiAgICAgICAgICAgICMgcmVtb3ZlIG9sZCBwcm9maWxlIHN0dWZmCiAgICAgICAgICAgICRTZWFyY2hQcm9maWxlT2JqZWN0LT5TZWFyY2hQcm9maWxlRGVsZXRlKAogICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDdXN0b21lckZBUVNlYXJjaCcsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFByb2ZpbGUsCiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBpbnNlcnQgbmV3IHByb2ZpbGUgcGFyYW1zCiAgICAgICAgICAgIGZvciBteSAkUGFyYW1OYW1lICggc29ydCBrZXlzICVHZXRQYXJhbSApIHsKICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAgICAgICAgICRTZWFyY2hQcm9maWxlT2JqZWN0LT5TZWFyY2hQcm9maWxlQWRkKAogICAgICAgICAgICAgICAgICAgICAgICBCYXNlICAgICAgPT4gJ0N1c3RvbWVyRkFRU2VhcmNoJywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRQcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJFBhcmFtTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRHZXRQYXJhbXskUGFyYW1OYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGR5bmFtaWMgZmllbGRzIHNlYXJjaCBwYXJhbWV0ZXJzIGZvciBGQVEgc2VhcmNoCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZFNlYXJjaFBhcmFtZXRlcnM7CiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZFNlYXJjaERpc3BsYXk7CgogICAgICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICAgICAgbXkgJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSgkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyk7CgogICAgICAgICAgICBQUkVGRVJFTkNFOgogICAgICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgICAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgICAgIFJldHVyblByb2ZpbGVTdHJ1Y3R1cmUgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGNvbXBsZXRlIHZhbHVlIHN0cnVjdHVyZSBpbiAlRHluYW1pY0ZpZWxkVmFsdWVzIHRvIGRpc2NhcmQgdGhvc2Ugd2hlcmUgdGhlCiAgICAgICAgICAgICAgICAjIHZhbHVlIHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGdldAogICAgICAgICAgICAgICAgbmV4dCBQUkVGRVJFTkNFIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkVmFsdWUpOwoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBwcm9maWxlCiAgICAgICAgICAgICAgICBteSAkU2VhcmNoUGFyYW1ldGVyID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUGFyYW1ldGVyQnVpbGQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUHJvZmlsZSAgICAgICAgICAgID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgID0+ICRQcmVmZXJlbmNlLT57VHlwZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IHNlYXJjaCBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCAkU2VhcmNoUGFyYW1ldGVyICkgewogICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRTZWFyY2hQYXJhbWV0ZXJzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICAgICAgICAgICAgICA9ICRTZWFyY2hQYXJhbWV0ZXItPntQYXJhbWV0ZXJ9OwoKICAgICAgICAgICAgICAgICAgICAjIHNldCB2YWx1ZSB0byBkaXNwbGF5CiAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZFNlYXJjaERpc3BsYXl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlYXJjaFBhcmFtZXRlci0+e0Rpc3BsYXl9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHByZXBhcmUgZnVsbC10ZXh0IHNlYXJjaAogICAgICAgIGlmICggJEdldFBhcmFte0Z1bGx0ZXh0fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0NvbnRlbnRTZWFyY2h9ID0gJ09SJzsKICAgICAgICAgICAgJEdldFBhcmFte1doYXR9ICAgICAgICAgID0gJEdldFBhcmFte0Z1bGx0ZXh0fTsKICAgICAgICB9CgogICAgICAgICMgcHJlcGFyZSB2b3RlcyBzZWFyY2gKICAgICAgICBpZiAoIElzTnVtYmVyKCAkR2V0UGFyYW17Vm90ZVNlYXJjaH0gKSAmJiAkR2V0UGFyYW17Vm90ZVNlYXJjaE9wdGlvbn0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtWb3Rlc30gPSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17Vm90ZVNlYXJjaFR5cGV9ID0+ICRHZXRQYXJhbXtWb3RlU2VhcmNofQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIHJhdGUgc2VhcmNoCiAgICAgICAgaWYgKCBJc051bWJlciggJEdldFBhcmFte1JhdGVTZWFyY2h9ICkgJiYgJEdldFBhcmFte1JhdGVTZWFyY2hPcHRpb259ICkgewogICAgICAgICAgICAkR2V0UGFyYW17UmF0ZX0gPSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17UmF0ZVNlYXJjaFR5cGV9ID0+ICRHZXRQYXJhbXtSYXRlU2VhcmNofQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgbXkgJVRpbWVNYXAgPSAoCiAgICAgICAgICAgIEl0ZW1DcmVhdGUgPT4gJ1RpbWUnLAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkVGltZVR5cGUgKCBzb3J0IGtleXMgJVRpbWVNYXAgKSB7CgogICAgICAgICAgICAjIGdldCBjcmVhdGUgdGltZSBzZXR0aW5ncwogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17ICRUaW1lTWFweyRUaW1lVHlwZX0gLiAnU2VhcmNoVHlwZScgfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvIG5vdGhpbmcgd2l0aCB0aW1lIHN0dWZmCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lTWFweyRUaW1lVHlwZX0gLiAnU2VhcmNoVHlwZScgfSBlcSAnVGltZVNsb3QnICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKHF3KE1vbnRoIERheSkpIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RhcnQnIC4gJEtleSB9CiAgICAgICAgICAgICAgICAgICAgICAgID0gc3ByaW50ZiggIiUwMmQiLCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RhcnQnIC4gJEtleSB9ICk7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3AnIC4gJEtleSB9CiAgICAgICAgICAgICAgICAgICAgICAgID0gc3ByaW50ZiggIiUwMmQiLCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcCcgLiAkS2V5IH0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RhcnREYXknIH0KICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RhcnRNb250aCcgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydFllYXInIH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU5ld2VyRGF0ZScgfSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydFllYXInIH0gLiAnLScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RhcnRNb250aCcgfSAuICctJwogICAgICAgICAgICAgICAgICAgICAgICAuICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydERheScgfQogICAgICAgICAgICAgICAgICAgICAgICAuICcgMDA6MDA6MDAnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wRGF5JyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BNb250aCcgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wWWVhcicgfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lT2xkZXJEYXRlJyB9ID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BZZWFyJyB9IC4gJy0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BNb250aCcgfSAuICctJwogICAgICAgICAgICAgICAgICAgICAgICAuICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wRGF5JyB9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJyAyMzo1OTo1OSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lTWFweyRUaW1lVHlwZX0gLiAnU2VhcmNoVHlwZScgfSBlcSAnVGltZVBvaW50JyApIHsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH0KICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRTdGFydCcgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkVGltZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ21pbnV0ZScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAnaG91cicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9ICogNjA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9IGVxICdkYXknICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfSAqIDYwICogMjQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9IGVxICd3ZWVrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWUgPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH0gKiA2MCAqIDI0ICogNzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ21vbnRoJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWUgPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH0gKiA2MCAqIDI0ICogMzA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9IGVxICd5ZWFyJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWUgPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH0gKiA2MCAqIDI0ICogMzY1OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludFN0YXJ0JyB9IGVxICdCZWZvcmUnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBtb3JlIHRoYW4gLi4uIGFnbwogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lT2xkZXJNaW51dGVzJyB9ID0gJFRpbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50U3RhcnQnIH0gZXEgJ05leHQnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyB3aXRoaW4gbmV4dAogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lTmV3ZXJNaW51dGVzJyB9ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU9sZGVyTWludXRlcycgfSA9IC0kVGltZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICMgd2l0aGluIGxhc3QgLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVPbGRlck1pbnV0ZXMnIH0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lTmV3ZXJNaW51dGVzJyB9ID0gJFRpbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBGQVEgb2JqZWN0CiAgICAgICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAgICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgICAgICBteSAkSW50ZXJmYWNlID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlR2V0KAogICAgICAgICAgICBOYW1lICAgPT4gJ2V4dGVybmFsJywKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgIG15ICRJbnRlcmZhY2VTdGF0ZXMgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgICAgICBUeXBlcyAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkN1c3RvbWVyOjpTdGF0ZVR5cGVzJyksCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBwZXJmb3JtIEZBUSBzZWFyY2gKICAgICAgICBteSBAVmlld2FibGVGQVFJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCiAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgICAgPT4gWyRTb3J0QnldLAogICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICAgID0+IFskT3JkZXJCeV0sCiAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgICAgPT4gJFNlYXJjaExpbWl0LAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgU3RhdGVzICAgICAgICAgICAgICA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgICAgID0+ICRJbnRlcmZhY2UsCiAgICAgICAgICAgIENvbnRlbnRTZWFyY2hQcmVmaXggPT4gJyonLAogICAgICAgICAgICBDb250ZW50U2VhcmNoU3VmZml4ID0+ICcqJywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlRHluYW1pY0ZpZWxkU2VhcmNoUGFyYW1ldGVycywKICAgICAgICApOwoKICAgICAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7ICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICAgICAgbXkgJFRpbWVPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgogICAgICAgICMgQ1NWIG91dHB1dAogICAgICAgIGlmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdDU1YnICkgewogICAgICAgICAgICBteSBAVG1wQ1NWSGVhZDsKICAgICAgICAgICAgbXkgQENTVkhlYWQ7CiAgICAgICAgICAgIG15IEBDU1ZEYXRhOwoKICAgICAgICAgICAgIyBnZXQgdGhlIEZBUSBkeW5hbWljIGZpZWxkcyBmb3IgQ1NWIGRpc3BsYXkKICAgICAgICAgICAgbXkgJENTVkR5bmFtaWNGaWVsZCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgICAgICAgICBGaWVsZEZpbHRlciA9PiAkQ29uZmlnLT57U2VhcmNoQ1NWRHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVkdWNlIHRoZSBkeW5hbWljIGZpZWxkcyB0byBvbmx5IHRoZSBvbmVzIHRoYXQgYXJlIGRlc2lnbmVkIGZvciBjdXN0b21lciBpbnRlcmZhY2UKICAgICAgICAgICAgbXkgQENTVkN1c3RvbWVyRHluYW1pY0ZpZWxkczsKICAgICAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JENTVkR5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAgICAgbXkgJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNDdXN0b21lckludGVyZmFjZUNhcGFibGUnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkSXNDdXN0b21lckludGVyZmFjZUNhcGFibGU7CgogICAgICAgICAgICAgICAgcHVzaCBAQ1NWQ3VzdG9tZXJEeW5hbWljRmllbGRzLCAkRHluYW1pY0ZpZWxkQ29uZmlnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRDU1ZEeW5hbWljRmllbGQgPSBcQENTVkN1c3RvbWVyRHluYW1pY0ZpZWxkczsKCiAgICAgICAgICAgIGZvciBteSAkRkFRSUQgKEBWaWV3YWJsZUZBUUlEcykgewoKICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBkYXRhIGRldGFpbHMKICAgICAgICAgICAgICAgIG15ICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZ2V0IGluZm8gZm9yIENTViBvdXRwdXQKICAgICAgICAgICAgICAgIG15ICVDU1ZJbmZvID0gKCVGQVFEYXRhKTsKCiAgICAgICAgICAgICAgICAjIGZvcm1hdCB0aGUgY2hhbmdlIHRpbWUKICAgICAgICAgICAgICAgICRDU1ZJbmZve0NoYW5nZWR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZygKICAgICAgICAgICAgICAgICAgICAkRkFRRGF0YXtDaGFuZ2VkfSwKICAgICAgICAgICAgICAgICAgICAnRGF0ZUZvcm1hdCcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgQ1NWIHF1b3RlCiAgICAgICAgICAgICAgICBpZiAoICFAQ1NWSGVhZCApIHsKICAgICAgICAgICAgICAgICAgICBAVG1wQ1NWSGVhZCA9IHF3KCBGQVFOdW1iZXIgVGl0bGUgQ2F0ZWdvcnkpOwogICAgICAgICAgICAgICAgICAgIEBDU1ZIZWFkICAgID0gcXcoIEZBUU51bWJlciBUaXRsZSBDYXRlZ29yeSk7CgogICAgICAgICAgICAgICAgICAgICMgaW5zZXJ0IGxhbmd1YWdlIGhlYWRlcgogICAgICAgICAgICAgICAgICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBUbXBDU1ZIZWFkLCAnTGFuZ3VhZ2UnOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCAgICAnTGFuZ3VhZ2UnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcHVzaCBAVG1wQ1NWSGVhZCwgcXcoU3RhdGUgQ2hhbmdlZCk7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgICAgcXcoU3RhdGUgQ2hhbmdlZCk7CgogICAgICAgICAgICAgICAgICAgICMgaW5jbHVkZSB0aGUgc2VsZWN0ZWQgZHluYW1pYyBmaWVsZHMgb24gQ1ZTIHJlc3VsdHMKICAgICAgICAgICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyRDU1ZEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSBlcSAnJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFRtcENTVkhlYWQsICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgICAgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBteSBARGF0YTsKICAgICAgICAgICAgICAgIGZvciBteSAkSGVhZGVyIChAVG1wQ1NWSGVhZCkgewoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGhlYWRlciBpcyBhIGR5bmFtaWMgZmllbGQgYW5kIGdldCB0aGUgdmFsdWUgZnJvbSBkeW5hbWljIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgIyBiYWNrZW5kCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkSGVhZGVyID1+IG17XEEgRHluYW1pY0ZpZWxkXyAoIFthLXpBLVpcZF0rICkgXHp9eG1zICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBsb29wIG92ZXIgdGhlIGR5bmFtaWMgZmllbGRzIGNvbmZpZ3VyZWQgZm9yIENTViBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JENTVkR5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBhbGwgZmllbGRzIHRoYXQgZG9lcyBub3QgbWF0Y2ggd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgKCQxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3aXRoIG91dCB0aGUgJ0R5bmFtaWNGaWVsZF8nIHByZWZpeAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IG5lICQxOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSB2YWx1ZSBhcyBmb3IgcHJpbnQgKHRvIGNvcnJlY3RseSBkaXNwbGF5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRDU1ZJbmZveyRIZWFkZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxPdXRwdXQgICAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQERhdGEsICRWYWx1ZVN0cmctPntWYWx1ZX07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXJtaW5hdGUgdGhlIERZTkFNSUNGSUVMRCBsb29wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IERZTkFNSUNGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgcmV0cmlldmUgZGF0YSBmcm9tIEZBUSBpdGVtCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEhlYWRlciBlcSAnRkFRTnVtYmVyJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQERhdGEsICRDU1ZJbmZveydOdW1iZXInfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRIZWFkZXIgZXEgJ0NhdGVnb3J5JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQERhdGEsICRDU1ZJbmZveydDYXRlZ29yeU5hbWUnfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQERhdGEsICRDU1ZJbmZveyRIZWFkZXJ9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHVzaCBAQ1NWRGF0YSwgXEBEYXRhOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENTViBxdW90ZQogICAgICAgICAgICAjIHRyYW5zbGF0ZSBub24gZXhpc3RpbmcgaGVhZGVyIG1heSByZXN1bHQgaW4gYSBnYXJiYWdlIGZpbGUKICAgICAgICAgICAgaWYgKCAhQENTVkhlYWQgKSB7CiAgICAgICAgICAgICAgICBAVG1wQ1NWSGVhZCA9IHF3KEZBUU51bWJlciBUaXRsZSBDYXRlZ29yeSk7CiAgICAgICAgICAgICAgICBAQ1NWSGVhZCAgICA9IHF3KEZBUU51bWJlciBUaXRsZSBDYXRlZ29yeSk7CgogICAgICAgICAgICAgICAgIyBpbnNlcnQgbGFuZ3VhZ2UgaGVhZGVyCiAgICAgICAgICAgICAgICBpZiAoJE11bHRpTGFuZ3VhZ2UpIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBUbXBDU1ZIZWFkLCAnTGFuZ3VhZ2UnOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICAgICdMYW5ndWFnZSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcHVzaCBAVG1wQ1NWSGVhZCwgcXcoU3RhdGUgQ2hhbmdlZCk7CiAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCAgICBxdyhTdGF0ZSBDaGFuZ2VkKTsKCiAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdGhlIHNlbGVjdGVkIGR5bmFtaWMgZmllbGRzIG9uIENWUyByZXN1bHRzCiAgICAgICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JENTVkR5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IGVxICcnOwoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBUbXBDU1ZIZWFkLCAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgICAgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB0cmFuc2xhdGUgaGVhZGVycwogICAgICAgICAgICBmb3IgbXkgJEhlYWRlciAoQENTVkhlYWQpIHsKCiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgRkFRTnVtYmVyIGhlYWRlciB3aXRoIHRoZSBjdXJyZW50IEZBUUhvb2sgZnJvbSBjb25maWcKICAgICAgICAgICAgICAgIGlmICggJEhlYWRlciBlcSAnRkFRTnVtYmVyJyApIHsKICAgICAgICAgICAgICAgICAgICAkSGVhZGVyID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkZBUUhvb2snKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRIZWFkZXIgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJEhlYWRlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYXNzZW1ibGUgQ1NWIGRhdGEKICAgICAgICAgICAgbXkgJENTViA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDU1YnKS0+QXJyYXkyQ1NWKAogICAgICAgICAgICAgICAgSGVhZCAgICAgID0+IFxAQ1NWSGVhZCwKICAgICAgICAgICAgICAgIERhdGEgICAgICA9PiBcQENTVkRhdGEsCiAgICAgICAgICAgICAgICBTZXBhcmF0b3IgPT4gJFNlbGYtPntVc2VyQ1NWU2VwYXJhdG9yfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmV0dXJuIENTViB0byBkb3dubG9hZAogICAgICAgICAgICBteSAkQ1NWRmlsZSA9ICdGQVFfc2VhcmNoJzsKICAgICAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTSA9IHNwcmludGYoICIlMDJkIiwgJE0gKTsKICAgICAgICAgICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAgICAgICAgICRoID0gc3ByaW50ZiggIiUwMmQiLCAkaCApOwogICAgICAgICAgICAkbSA9IHNwcmludGYoICIlMDJkIiwgJG0gKTsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAkQ1NWRmlsZSAuICJfIiAuICIkWS0kTS0kRCIgLiAiXyIgLiAiJGgtJG0uY3N2IiwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJ0ZXh0L2NzdjsgY2hhcnNldD0iIC4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRDU1YsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdQcmludCcgKSB7CgogICAgICAgICAgICAjIGdldCBQREYgb2JqZWN0CiAgICAgICAgICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgICAgICAgICBteSBAUERGRGF0YTsKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEgZGV0YWlscwogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBjaGFuZ2UgZGF0ZSB0byBsb25nIGZvcm1hdAogICAgICAgICAgICAgICAgbXkgJENoYW5nZWQgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5Gb3JtYXRUaW1lU3RyaW5nKAogICAgICAgICAgICAgICAgICAgICRGQVFEYXRhe0NoYW5nZWR9LAogICAgICAgICAgICAgICAgICAgICdEYXRlRm9ybWF0TG9uZycsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIFBERiBSb3dzCiAgICAgICAgICAgICAgICBteSBAUERGUm93OwogICAgICAgICAgICAgICAgcHVzaCBAUERGUm93LCAkRkFRRGF0YXtOdW1iZXJ9OwogICAgICAgICAgICAgICAgcHVzaCBAUERGUm93LCAkRkFRRGF0YXtUaXRsZX07CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICRGQVFEYXRhe0NhdGVnb3J5TmFtZX07CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgbGFuZ3VhZ2Ugcm93CiAgICAgICAgICAgICAgICBpZiAoJE11bHRpTGFuZ3VhZ2UpIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICRGQVFEYXRhe0xhbmd1YWdlfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICAkRkFRRGF0YXtTdGF0ZX07CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICAkQ2hhbmdlZDsKICAgICAgICAgICAgICAgIHB1c2ggQFBERkRhdGEsIFxAUERGUm93OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFBERiBPdXRwdXQKICAgICAgICAgICAgbXkgJFRpdGxlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdGQVEnKSAuICcgJwogICAgICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NlYXJjaCcpOwogICAgICAgICAgICBteSAkUHJpbnRlZEJ5ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdwcmludGVkIGJ5Jyk7CiAgICAgICAgICAgIG15ICRQYWdlICAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1BhZ2UnKTsKICAgICAgICAgICAgbXkgJFRpbWUgICAgICA9ICRMYXlvdXRPYmplY3QtPntUaW1lfTsKCiAgICAgICAgICAgICMgZ2V0IG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCiAgICAgICAgICAgIG15ICRNYXhQYWdlcyA9ICRDb25maWdPYmplY3QtPkdldCgnUERGOjpNYXhQYWdlcycpOwogICAgICAgICAgICBpZiAoICEkTWF4UGFnZXMgfHwgJE1heFBhZ2VzIDwgMSB8fCAkTWF4UGFnZXMgPiAxMDAwICkgewogICAgICAgICAgICAgICAgJE1heFBhZ2VzID0gMTAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkQ2VsbERhdGE7CgogICAgICAgICAgICAjIG91dHB1dCAnTm8gUmVzdWx0JywgaWYgbm8gY29udGVudCB3YXMgZ2l2ZW4KICAgICAgICAgICAgaWYgKEBQREZEYXRhKSB7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgdGhlIGhlYWRlcgogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlswXS0+e0NvbnRlbnR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkZBUUhvb2snKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMF0tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMV0tPntDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVGl0bGUnKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMV0tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMl0tPntDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ2F0ZWdvcnknKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMl0tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKCiAgICAgICAgICAgICAgICAjIHN0b3JlIHRoZSBjb3JyZWN0IGhlYWRlciBpbmRleAogICAgICAgICAgICAgICAgbXkgJE5leHRIZWFkZXJJbmRleCA9IDM7CgogICAgICAgICAgICAgICAgIyBhZGQgbGFuZ3VhZ2UgaGVhZGVyCiAgICAgICAgICAgICAgICBpZiAoJE11bHRpTGFuZ3VhZ2UpIHsKICAgICAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzNdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0xhbmd1YWdlJyk7CiAgICAgICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlszXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgICAgICROZXh0SGVhZGVySW5kZXggICAgICAgICAgICAgICA9IDQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlskTmV4dEhlYWRlckluZGV4XS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTdGF0ZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlskTmV4dEhlYWRlckluZGV4XS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwoKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bICROZXh0SGVhZGVySW5kZXggKyAxIF0tPntDb250ZW50fQogICAgICAgICAgICAgICAgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDaGFuZ2VkJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WyAkTmV4dEhlYWRlckluZGV4ICsgMSBdLT57Rm9udH0gPSAnUHJvcG9ydGlvbmFsQm9sZCc7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgdGhlIGNvbnRlbnQgYXJyYXkKICAgICAgICAgICAgICAgIG15ICRDb3VudGVyUm93ID0gMTsKICAgICAgICAgICAgICAgIGZvciBteSAkUm93IChAUERGRGF0YSkgewogICAgICAgICAgICAgICAgICAgIG15ICRDb3VudGVyQ29sdW1uID0gMDsKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJENvbnRlbnQgKCBAeyRSb3d9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlskQ291bnRlclJvd10tPlskQ291bnRlckNvbHVtbl0tPntDb250ZW50fSA9ICRDb250ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAkQ291bnRlckNvbHVtbisrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkQ291bnRlclJvdysrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlswXS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdObyBSZXN1bHQhJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcGFnZSBwYXJhbXMKICAgICAgICAgICAgbXkgJVBhZ2VQYXJhbTsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtQYWdlT3JpZW50YXRpb259ID0gJ2xhbmRzY2FwZSc7CiAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luVG9wfSAgICAgICA9IDMwOwogICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpblJpZ2h0fSAgICAgPSA0MDsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5Cb3R0b219ICAgID0gNDA7CiAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luTGVmdH0gICAgICA9IDQwOwogICAgICAgICAgICAkUGFnZVBhcmFte0hlYWRlclJpZ2h0fSAgICAgPSAkVGl0bGU7CgogICAgICAgICAgICAjIHRhYmxlIHBhcmFtcwogICAgICAgICAgICBteSAlVGFibGVQYXJhbTsKICAgICAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9ICAgICAgICAgICAgPSAkQ2VsbERhdGE7CiAgICAgICAgICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAgICAgICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgID0gNjsKICAgICAgICAgICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgICAgICAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JFdmVufSA9ICcjREREREREJzsKICAgICAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgPSAxOwogICAgICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICA9IDM7CiAgICAgICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgID0gMzsKCiAgICAgICAgICAgICMgY3JlYXRlIG5ldyBQREYgZG9jdW1lbnQKICAgICAgICAgICAgJFBERk9iamVjdC0+RG9jdW1lbnROZXcoCiAgICAgICAgICAgICAgICBUaXRsZSAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFRpdGxlLAogICAgICAgICAgICAgICAgRW5jb2RlID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHN0YXJ0IHRhYmxlIG91dHB1dAogICAgICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgJVBhZ2VQYXJhbSwKICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdlIC4gJyAxJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgICAgICBZICAgID0+IC02LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgdGl0bGUKICAgICAgICAgICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICAgICAgICAgIFRleHQgICAgID0+ICRUaXRsZSwKICAgICAgICAgICAgICAgIEZvbnRTaXplID0+IDEzLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgICAgIFkgICAgPT4gLTYsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCAicHJpbnRlZCBieSIKICAgICAgICAgICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICAgICAgICAgIFRleHQgPT4gJFByaW50ZWRCeSAuICcgJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRmlyc3RuYW1lfSAuICcgJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyTGFzdG5hbWV9IC4gJyAoJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRW1haWx9IC4gJyknCiAgICAgICAgICAgICAgICAgICAgLiAnLCAnIC4gJFRpbWUsCiAgICAgICAgICAgICAgICBGb250U2l6ZSA9PiA5LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgICAgIFkgICAgPT4gLTE0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgUEFHRToKICAgICAgICAgICAgZm9yICggMiAuLiAkTWF4UGFnZXMgKSB7CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCAlVGFibGVQYXJhbSwgKTsKCiAgICAgICAgICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIGFub3RoZXIgcGFnZQogICAgICAgICAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBQQUdFOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgICAgICAgICAgICAgJVBhZ2VQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2UgLiAnICcgLiAkXywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJldHVybiB0aGUgUERGIGRvY3VtZW50CiAgICAgICAgICAgIG15ICRGaWxlbmFtZSA9ICdGQVFfc2VhcmNoJzsKICAgICAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTSA9IHNwcmludGYoICIlMDJkIiwgJE0gKTsKICAgICAgICAgICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAgICAgICAgICRoID0gc3ByaW50ZiggIiUwMmQiLCAkaCApOwogICAgICAgICAgICAkbSA9IHNwcmludGYoICIlMDJkIiwgJG0gKTsKICAgICAgICAgICAgbXkgJFBERlN0cmluZyA9ICRQREZPYmplY3QtPkRvY3VtZW50T3V0cHV0KCk7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVuYW1lIC4gIl8iIC4gIiRZLSRNLSREIiAuICJfIiAuICIkaC0kbS5wZGYiLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gImFwcGxpY2F0aW9uL3BkZiIsCiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAkUERGU3RyaW5nLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkQ291bnRlciA9IDA7CgogICAgICAgICMgaWYgdGhlcmUgYXJlIHJlc3VsdHMgdG8gc2hvdwogICAgICAgIGlmIChAVmlld2FibGVGQVFJRHMpIHsKCiAgICAgICAgICAgIG15ICRPdmVydmlld0NvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJGQVFPdmVydmlldyIpOwoKICAgICAgICAgICAgIyBnZXQgdGhlIHRpY2tldCBkeW5hbWljIGZpZWxkcyBmb3Igb3ZlcnZpZXcgZGlzcGxheQogICAgICAgICAgICBteSAkT3ZlcnZpZXdEeW5hbWljRmllbGQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgICAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIE9iamVjdFR5cGUgID0+ICdGQVEnLAogICAgICAgICAgICAgICAgRmllbGRGaWx0ZXIgPT4gJE92ZXJ2aWV3Q29uZmlnLT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVkdWNlIHRoZSBkeW5hbWljIGZpZWxkcyB0byBvbmx5IHRoZSBvbmVzIHRoYXQgYXJlIGRlc2lnbmVkIGZvciBjdXN0b21lciBpbnRlcmZhY2UKICAgICAgICAgICAgbXkgQE92ZXJ2aWV3Q3VzdG9tZXJEeW5hbWljRmllbGRzOwogICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskT3ZlcnZpZXdEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgICAgIG15ICRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlOwoKICAgICAgICAgICAgICAgIHB1c2ggQE92ZXJ2aWV3Q3VzdG9tZXJEeW5hbWljRmllbGRzLCAkRHluYW1pY0ZpZWxkQ29uZmlnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIER5bmFtaWMgZmllbGRzIHRhYmxlIGhlYWRlcnMKICAgICAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyRPdmVydmlld0R5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAgICAgbXkgJExhYmVsID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfTsKCiAgICAgICAgICAgICAgICAjIGdldCBmaWVsZCBzb3J0YWJsZSBjb25kaXRpb24KICAgICAgICAgICAgICAgIG15ICRJc1NvcnRhYmxlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNTb3J0YWJsZScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICgkSXNTb3J0YWJsZSkgewogICAgICAgICAgICAgICAgICAgIG15ICRDU1MgICA9ICcnOwogICAgICAgICAgICAgICAgICAgIG15ICRPcmRlciA9ICdEb3duJzsKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRTb3J0QnkKICAgICAgICAgICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNvcnRCeSBlcQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntPcmRlcn0gJiYgKCAkU2VsZi0+e09yZGVyfSBlcSAnVXAnICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3JkZXIgPSAnRG93bic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydEFzY2VuZGluZyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3JkZXIgPSAnVXAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENTUyAuPSAnIFNvcnREZXNjZW5kaW5nJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckR5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTID0+ICRDU1MsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckR5bmFtaWNGaWVsZFNvcnRhYmxlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciAgICAgICAgICAgID0+ICRPcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsICAgICAgICAgICAgPT4gJExhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkTmFtZSA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckR5bmFtaWNGaWVsZE5vdFNvcnRhYmxlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHNlYXJjaCByZXN1bHQKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkQ291bnRlciA+PSAkU3RhcnRIaXQKICAgICAgICAgICAgICAgICAgICAmJiAkQ291bnRlciA8ICggJFNlYXJjaFBhZ2VTaG93biArICRTdGFydEhpdCApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCBGQVEgZGF0YSBkZXRhaWxzCiAgICAgICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJEZBUURhdGF7Q2xlYW5UaXRsZX0gPSAkRkFRT2JqZWN0LT5GQVFBcnRpY2xlVGl0bGVDbGVhbigKICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZBUURhdGF7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICBTaXplICA9PiAkQ29uZmlnLT57VGl0bGVTaXplfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBibG9ja3MgdG8gdGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBsYW5ndWFnZSBkYXRhCiAgICAgICAgICAgICAgICAgICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBEeW5hbWljIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgICAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JE92ZXJ2aWV3RHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgZmllbGQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRkFRRGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBzaG93IGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIGEgbG9va3VwIHRhYmxlIGZvciBhdHRyaWJ1dGUgc2V0dGluZ3MKICAgICAgICBteSAlQXR0cmlidXRlTWFwID0gKAogICAgICAgICAgICBOdW1iZXIgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpGQVFIb29rJyksCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVGl0bGUgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdUaXRsZScsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgS2V5d29yZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0tleXdvcmQnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEZ1bGx0ZXh0ID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnRnVsbHRleHQnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENhdGVnb3J5SURzID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnQ2F0ZWdvcnknLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIExhbmd1YWdlSURzID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFRpbWVTZWFyY2hUeXBlID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnQ3JlYXRlIFRpbWUnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFZvdGVTZWFyY2hUeXBlID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVm90ZXMnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJhdGVTZWFyY2hUeXBlID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnUmF0ZScsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIHByaW50IGVhY2ggYXR0cmlidXRlIGluIHNlYXJjaCByZXN1bHRzIGFyZWEuCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVBdHRyaWJ1dGVNYXAgKSB7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIGRlZmluZWQgYnkgdGhlIHVzZXIKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17JEF0dHJpYnV0ZX0gKSB7CgogICAgICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlIG5hbWUgYW5kIHRyYW5zbGF0ZSBpdCBpZiBhcHBsaWVzCiAgICAgICAgICAgICAgICBteSAkQXR0cmlidXRlTmFtZSA9ICRBdHRyaWJ1dGVNYXB7JEF0dHJpYnV0ZX0tPntOYW1lfTsKICAgICAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZU1hcHskQXR0cmlidXRlfS0+e1RyYW5zbGF0YWJsZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZU5hbWUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJEF0dHJpYnV0ZU5hbWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRBdHRyaWJ1dGVWYWx1ZTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSB2YWx1ZXMgaXMgYW4gYXJyYXkgdG8gcGFyc2UgZWFjaCB2YWx1ZQogICAgICAgICAgICAgICAgaWYgKCByZWYgJEdldFBhcmFteyRBdHRyaWJ1dGV9IGVxICdBUlJBWScgKSB7CgogICAgICAgICAgICAgICAgICAgICMgQ2F0ZWdvcnkgYXR0cmlidXRlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXR0cmlidXRlIGVxICdDYXRlZ29yeUlEcycgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgbG9uZyBuYW1lIGZvciBhbGwgY3VzdG9tZXIgY2F0ZWdvcmllcwogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ2F0ZWdvcnlMaXN0ID0gJEZBUU9iamVjdC0+R2V0Q3VzdG9tZXJDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAncncnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgZWFjaCBjYXRlZ29yeSBpZCB0byBjYXRlZ29yeSBsb25nIG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgbXkgQENhdGVnb3J5TmFtZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIENBVEVHT1JZSUQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ2F0ZWRvcnlJRCAoIEB7ICRHZXRQYXJhbXskQXR0cmlidXRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBDQVRFR09SWUlEIGlmICEkQ2F0ZWdvcnlMaXN0LT57JENhdGVkb3J5SUR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ2F0ZWdvcnlOYW1lcywgJENhdGVnb3J5TGlzdC0+eyRDYXRlZG9yeUlEfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBzdHJpbmcgd2l0aCBhbGwgc2VsZWN0ZWQgY2F0ZWdvcnkgbmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZVZhbHVlID0gam9pbiggIiArICIsIEBDYXRlZ29yeU5hbWVzICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIExhbmd1YWdlSURzCiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdMYW5ndWFnZUlEcycgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgZWFjaCBsYW5ndWFnZSBpZCB0byBsYW5ndWFnZSBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIG15IEBMYW5ndWFnZU5hbWVzOwogICAgICAgICAgICAgICAgICAgICAgICBMQU5HVUFHRUlEOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJExhbmd1YWdlSUQgKCBAeyAkR2V0UGFyYW17JEF0dHJpYnV0ZX0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRMYW5ndWFnZU5hbWUgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZUlEID0+ICRMYW5ndWFnZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgTEFOR1VBR0VJRCBpZiAhJExhbmd1YWdlTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQExhbmd1YWdlTmFtZXMsICRMYW5ndWFnZU5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBzdHJpbmcgd2l0aCBhbGwgc2VsZWN0ZWQgbGFuZ3VhZ2UgbmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZVZhbHVlID0gam9pbiggIiArICIsIEBMYW5ndWFnZU5hbWVzICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIGlzIGFuIHNjYWxhciBhbmQgY2FuIGJlIHNldCBkaXJlY3RseQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZVZhbHVlID0gJEdldFBhcmFteyRBdHRyaWJ1dGV9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGUgZXEgJ1RpbWVTZWFyY2hUeXBlJyApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17VGltZVNlYXJjaFR5cGV9IGVxICdUaW1lU2xvdCcgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBteSAkU3RhcnREYXRlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtJdGVtQ3JlYXRlVGltZVN0YXJ0WWVhcn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICctJyAuICRHZXRQYXJhbXtJdGVtQ3JlYXRlVGltZVN0YXJ0TW9udGh9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnLScgLiAkR2V0UGFyYW17SXRlbUNyZWF0ZVRpbWVTdGFydERheX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcgMDA6MDA6MDAnLCAnRGF0ZUZvcm1hdFNob3J0JwogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFN0b3BEYXRlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtJdGVtQ3JlYXRlVGltZVN0b3BZZWFyfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJy0nIC4gJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lU3RvcE1vbnRofQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJy0nIC4gJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lU3RvcERheX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcgMDA6MDA6MDAnLCAnRGF0ZUZvcm1hdFNob3J0JwogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZSAgICAgID0gJ0NyZWF0ZWQgYmV0d2Vlbic7CiAgICAgICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVWYWx1ZSA9ICRTdGFydERhdGUgLiAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdhbmQnKSAuICcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkU3RvcERhdGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJE1hcHBpbmcgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGFzdCcgICA9PiAnQ3JlYXRlZCB3aXRoaW4gdGhlIGxhc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JlZm9yZScgPT4gJ0NyZWF0ZWQgbW9yZSB0aGFuIC4uLiBhZ28nLAogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZSAgICAgID0gJE1hcHBpbmctPnsgJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnRTdGFydH0gfTsKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZVZhbHVlID0gJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnR9IC4gJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnRGb3JtYXR9IC4gJyhzKScgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRBdHRyaWJ1dGUgZXEgJ1ZvdGVTZWFyY2hUeXBlJyApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJEdldFBhcmFte1ZvdGVTZWFyY2hPcHRpb259OwogICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVWYWx1ZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEdldFBhcmFte1ZvdGVTZWFyY2hUeXBlfSApIC4gJyAnCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEdldFBhcmFte1ZvdGVTZWFyY2h9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdSYXRlU2VhcmNoVHlwZScgKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRHZXRQYXJhbXtSYXRlU2VhcmNoT3B0aW9ufTsKICAgICAgICAgICAgICAgICAgICAkQXR0cmlidXRlVmFsdWUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRHZXRQYXJhbXtSYXRlU2VhcmNoVHlwZX0gKSAuICcgJwogICAgICAgICAgICAgICAgICAgICAgICAuICRHZXRQYXJhbXtSYXRlU2VhcmNofSAuICclJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZWFyY2hUZXJtcycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAkQXR0cmlidXRlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRBdHRyaWJ1dGVWYWx1ZSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQKICAgICAgICAgICAgICAgIGlmICEkRHluYW1pY0ZpZWxkU2VhcmNoRGlzcGxheXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH07CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NlYXJjaFRlcm1zJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRTZWFyY2hEaXNwbGF5eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkTGluayA9ICdQcm9maWxlPScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRQcm9maWxlKSAuICc7JzsKICAgICAgICAkTGluayAuPSAnU29ydEJ5PScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRTb3J0QnkpIC4gJzsnOwogICAgICAgICRMaW5rIC49ICdPcmRlcj0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkT3JkZXJCeSkgLiAnOyc7CiAgICAgICAgJExpbmsgLj0gJ1Rha2VMYXN0U2VhcmNoPTE7JzsKCiAgICAgICAgIyBidWlsZCBzZWFyY2ggbmF2aWdhdGlvbiBiYXIKICAgICAgICBteSAlUGFnZU5hdiA9ICRMYXlvdXRPYmplY3QtPlBhZ2VOYXZCYXIoCiAgICAgICAgICAgIExpbWl0ICAgICA9PiAkU2VhcmNoTGltaXQsCiAgICAgICAgICAgIFN0YXJ0SGl0ICA9PiAkU3RhcnRIaXQsCiAgICAgICAgICAgIFBhZ2VTaG93biA9PiAkU2VhcmNoUGFnZVNob3duLAogICAgICAgICAgICBBbGxIaXRzICAgPT4gJENvdW50ZXIsCiAgICAgICAgICAgIEFjdGlvbiAgICA9PiAiQWN0aW9uPUN1c3RvbWVyRkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2giLAogICAgICAgICAgICBMaW5rICAgICAgPT4gJExpbmssCiAgICAgICAgICAgIElEUHJlZml4ICA9PiAiQ3VzdG9tZXJGQVFTZWFyY2giLAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBmb290ZXIgZmlsdGVyIC0gc2hvdyBvbmx5IGlmIG1vcmUgdGhlIG9uZSBwYWdlIGlzIGF2YWlsYWJsZQogICAgICAgIGlmICggZGVmaW5lZCAkUGFnZU5hdntUb3RhbEhpdHN9ICYmICggJFBhZ2VOYXZ7VG90YWxIaXRzfSA+ICRTZWFyY2hQYWdlU2hvd24gKSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdQYWdpbmF0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlUGFnZU5hdiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHN0YXJ0IEhUTUwgcGFnZQogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgU2V0IHRoZSBTb3J0QnkgQ2xhc3MKICAgICAgICBteSAkU29ydENsYXNzOwoKICAgICAgICAjIHRoaXMgc2V0cyB0aGUgb3Bwb3NpdGUgdG8gdGhlIE9yZGVyQnkgcGFyYW1ldGVyCiAgICAgICAgaWYgKCAkT3JkZXJCeSBlcSAnRG93bicgKSB7CiAgICAgICAgICAgICRTb3J0Q2xhc3MgPSAnU29ydEFzY2VuZGluZyc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJE9yZGVyQnkgZXEgJ1VwJyApIHsKICAgICAgICAgICAgJFNvcnRDbGFzcyA9ICdTb3J0RGVzY2VuZGluZyc7CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgU29ydEJ5IENsYXNzIHRvIHRoZSBjb3JyZWN0IGZpZWxkCiAgICAgICAgbXkgJUNTU1NvcnQ7CiAgICAgICAgbXkgJENTU1NvcnRCeSA9ICRTb3J0QnkgLiAnU29ydCc7CiAgICAgICAgJENTU1NvcnR7JENTU1NvcnRCeX0gPSAkU29ydENsYXNzOwoKICAgICAgICBteSAlTmV3T3JkZXIgPSAoCiAgICAgICAgICAgIERvd24gPT4gJ1VwJywKICAgICAgICAgICAgVXAgICA9PiAnRG93bicsCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGxhbmd1YWdlIGhlYWRlcgogICAgICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckxhbmd1YWdlJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQ1NTU29ydCwKICAgICAgICAgICAgICAgICAgICBPcmRlciA9PiAkTmV3T3JkZXJ7JE9yZGVyQnl9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0N1c3RvbWVyRkFRU2VhcmNoUmVzdWx0U2hvcnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJVBhZ2VOYXYsCiAgICAgICAgICAgICAgICAlQ1NTU29ydCwKICAgICAgICAgICAgICAgIE9yZGVyICAgPT4gJE5ld09yZGVyeyRPcmRlckJ5fSwKICAgICAgICAgICAgICAgIFByb2ZpbGUgPT4gJFByb2ZpbGUsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyBlbXB0eSBzZWFyY2ggc2l0ZQogICAgZWxzZSB7CgogICAgICAgICMgZGVsZXRlIHByb2ZpbGUKICAgICAgICBpZiAoICRFcmFzZVRlbXBsYXRlICYmICRQcm9maWxlICkgewoKICAgICAgICAgICAgIyByZW1vdmUgb2xkIHByb2ZpbGUgc3R1ZmYKICAgICAgICAgICAgJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVEZWxldGUoCiAgICAgICAgICAgICAgICBCYXNlICAgICAgPT4gJ0N1c3RvbWVyRkFRU2VhcmNoJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkUHJvZmlsZSwKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICVHZXRQYXJhbSA9ICgpOwogICAgICAgICAgICAkUHJvZmlsZSAgPSAnJzsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIEhUTUwgc3RyaW5ncyBmb3IgYWxsIGR5bmFtaWMgZmllbGRzCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZEhUTUw7CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICMgZ2V0IHNlYXJjaCBmaWVsZCBwcmVmZXJlbmNlcwogICAgICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGZpZWxkIEhUTUwKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAkUHJlZmVyZW5jZS0+e1R5cGV9IH0KICAgICAgICAgICAgICAgICAgICA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFJlbmRlcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQcm9maWxlICAgICAgICAgICAgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJENvbmZpZy0+e0RlZmF1bHRzfS0+e0R5bmFtaWNGaWVsZH0KICAgICAgICAgICAgICAgICAgICAgICAgLT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBDb25maXJtYXRpb25DaGVja2JveGVzID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgc2VhcmNoIG1hc2sKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJIZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPk1hc2tGb3JtKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFByb2ZpbGUgICAgICAgICAgPT4gJFByb2ZpbGUsCiAgICAgICAgICAgIEFyZWEgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgRHluYW1pY0ZpZWxkSFRNTCA9PiBcJUR5bmFtaWNGaWVsZEhUTUwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIE1hc2tGb3JtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnICkgewogICAgICAgICRUcmVlVmlldyA9IDE7CiAgICB9CgogICAgIyBzZXQgb3V0cHV0IGZvcm1hdHMgbGlzdAogICAgbXkgJVJlc3VsdEZvcm0gPSAoCiAgICAgICAgTm9ybWFsID0+ICdOb3JtYWwnLAogICAgICAgIFByaW50ICA9PiAnUHJpbnQnLAogICAgICAgIENTViAgICA9PiAnQ1NWJywKICAgICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGJ1aWxkIG91dHB1dCBmb3JtYXRzIGxpc3QKICAgICRQYXJhbXtSZXN1bHRGb3JtU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IHslUmVzdWx0Rm9ybX0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnUmVzdWx0Rm9ybScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17UmVzdWx0Rm9ybX0gfHwgJ05vcm1hbCcsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgcHJvZmlsZXMgbGlzdAogICAgbXkgJVByb2ZpbGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlYXJjaFByb2ZpbGUnKS0+U2VhcmNoUHJvZmlsZUxpc3QoCiAgICAgICAgQmFzZSAgICAgID0+ICdDdXN0b21lckZBUVNlYXJjaCcsCiAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICk7CgogICAgIyBidWlsZCBwcm9maWxlcyBvdXRwdXQgbGlzdAogICAgJFBhcmFte1Byb2ZpbGVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4geyVQcm9maWxlc30sCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdQcm9maWxlJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1Byb2ZpbGV9LAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGdldCBsYW5ndWFnZXMgbGlzdAogICAgbXkgJUxhbmd1YWdlcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGJ1aWxkIGxhbmd1YWdlcyBvdXRwdXQgbGlzdAogICAgJFBhcmFte0xhbmd1YWdlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiB7JUxhbmd1YWdlc30sCiAgICAgICAgTmFtZSAgICAgICA9PiAnTGFuZ3VhZ2VJRHMnLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17TGFuZ3VhZ2VJRHN9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgZ2V0IGNhdGVnb3JpZXMgbGlzdAogICAgbXkgJENhdGVnb3JpZXMgPSAkRkFRT2JqZWN0LT5HZXRDdXN0b21lckNhdGVnb3JpZXNMb25nTmFtZXMoCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ3J3JywKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGJ1aWxkIGNhdGVnb3JpZXMgb3V0cHV0IGxpc3QKICAgICRQYXJhbXtDYXRlZ29yaWVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRDYXRlZ29yaWVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NhdGVnb3J5SURzJywKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0NhdGVnb3J5SURzfSwKICAgICAgICBUcmVlVmlldyAgID0+ICRUcmVlVmlldywKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICBteSAlVm90aW5nT3BlcmF0b3JzID0gKAogICAgICAgIEVxdWFscyAgICAgICAgICAgID0+ICdFcXVhbHMnLAogICAgICAgIEdyZWF0ZXJUaGFuICAgICAgID0+ICdHcmVhdGVyVGhhbicsCiAgICAgICAgR3JlYXRlclRoYW5FcXVhbHMgPT4gJ0dyZWF0ZXJUaGFuRXF1YWxzJywKICAgICAgICBTbWFsbGVyVGhhbiAgICAgICA9PiAnU21hbGxlclRoYW4nLAogICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+ICdTbWFsbGVyVGhhbkVxdWFscycsCiAgICApOwoKICAgICRQYXJhbXtWb3RlU2VhcmNoVHlwZVNlbGVjdGlvblN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVZvdGluZ09wZXJhdG9ycywKICAgICAgICBOYW1lICAgICAgICA9PiAnVm90ZVNlYXJjaFR5cGUnLAogICAgICAgIFNpemUgICAgICAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte1ZvdGVTZWFyY2hUeXBlfSB8fCAnJywKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE11bHRpcGxlICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICRQYXJhbXtSYXRlU2VhcmNoVHlwZVNlbGVjdGlvblN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVZvdGluZ09wZXJhdG9ycywKICAgICAgICBOYW1lICAgICAgICA9PiAnUmF0ZVNlYXJjaFR5cGUnLAogICAgICAgIFNpemUgICAgICAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte1JhdGVTZWFyY2hUeXBlfSB8fCAnJywKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE11bHRpcGxlICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwogICAgJFBhcmFte1JhdGVTZWFyY2hTZWxlY3Rpb25TdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIDAgICA9PiAnMCUnLAogICAgICAgICAgICAyNSAgPT4gJzI1JScsCiAgICAgICAgICAgIDUwICA9PiAnNTAlJywKICAgICAgICAgICAgNzUgID0+ICc3NSUnLAogICAgICAgICAgICAxMDAgPT4gJzEwMCUnLAogICAgICAgIH0sCiAgICAgICAgU29ydCAgICAgICAgPT4gJ051bWVyaWNLZXknLAogICAgICAgIE5hbWUgICAgICAgID0+ICdSYXRlU2VhcmNoJywKICAgICAgICBTaXplICAgICAgICA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtSYXRlU2VhcmNofSB8fCAnJywKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIE11bHRpcGxlICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFsgMSAuLiA1OSBdLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0l0ZW1DcmVhdGVUaW1lUG9pbnQnLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50fSwKICAgICk7CiAgICAkUGFyYW17SXRlbUNyZWF0ZVRpbWVQb2ludFN0YXJ0fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBMYXN0ICAgPT4gJ3dpdGhpbiB0aGUgbGFzdCAuLi4nLAogICAgICAgICAgICBCZWZvcmUgPT4gJ21vcmUgdGhhbiAuLi4gYWdvJywKICAgICAgICB9LAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0l0ZW1DcmVhdGVUaW1lUG9pbnRTdGFydCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnRTdGFydH0gfHwgJ0xhc3QnLAogICAgKTsKICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50Rm9ybWF0fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBtaW51dGUgPT4gJ21pbnV0ZShzKScsCiAgICAgICAgICAgIGhvdXIgICA9PiAnaG91cihzKScsCiAgICAgICAgICAgIGRheSAgICA9PiAnZGF5KHMpJywKICAgICAgICAgICAgd2VlayAgID0+ICd3ZWVrKHMpJywKICAgICAgICAgICAgbW9udGggID0+ICdtb250aChzKScsCiAgICAgICAgICAgIHllYXIgICA9PiAneWVhcihzKScsCiAgICAgICAgfSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE5hbWUgICAgICAgID0+ICdJdGVtQ3JlYXRlVGltZVBvaW50Rm9ybWF0JywKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17SXRlbUNyZWF0ZVRpbWVQb2ludEZvcm1hdH0sCiAgICApOwogICAgJFBhcmFte0l0ZW1DcmVhdGVUaW1lU3RhcnR9ID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICVQYXJhbSwKICAgICAgICBQcmVmaXggICA9PiAnSXRlbUNyZWF0ZVRpbWVTdGFydCcsCiAgICAgICAgRm9ybWF0ICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICAgICAgRGlmZlRpbWUgPT4gLSggKCA2MCAqIDYwICogMjQgKSAqIDMwICksCiAgICApOwogICAgJFBhcmFte0l0ZW1DcmVhdGVUaW1lU3RvcH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJVBhcmFtLAogICAgICAgIFByZWZpeCA9PiAnSXRlbUNyZWF0ZVRpbWVTdG9wJywKICAgICAgICBGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICApOwoKICAgICMgSFRNTCBzZWFyY2ggbWFzayBvdXRwdXQKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NlYXJjaCcsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBvdXRwdXQgRHluYW1pYyBmaWVsZHMgYmxvY2tzCiAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+U2VhcmNoRmllbGRQcmVmZXJlbmNlcygKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSgkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyk7CgogICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgZm9yIG15ICRQcmVmZXJlbmNlICggQHskU2VhcmNoRmllbGRQcmVmZXJlbmNlc30gKSB7CgogICAgICAgICAgICAjIHNraXAgZmllbGRzIHRoYXQgSFRNTCBjb3VsZCBub3QgYmUgcmV0cmlldmVkCiAgICAgICAgICAgIG5leHQgUFJFRkVSRU5DRSBpZiAhSXNIYXNoUmVmV2l0aERhdGEoCiAgICAgICAgICAgICAgICAkUGFyYW17RHluYW1pY0ZpZWxkSFRNTH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IC4gJFByZWZlcmVuY2UtPntUeXBlfSB9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkUGFyYW17RHluYW1pY0ZpZWxkSFRNTH0KICAgICAgICAgICAgICAgICAgICAgICAgLT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfS0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICBGaWVsZCA9PiAkUGFyYW17RHluYW1pY0ZpZWxkSFRNTH0KICAgICAgICAgICAgICAgICAgICAgICAgLT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfS0+e0ZpZWxkfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRlZmF1bHQgbXVsdGkgbGFuZ3VhZ2Ugb3B0aW9uCiAgICBteSAkTXVsdGlMYW5ndWFnZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CgogICAgIyBzaG93IGxhbmd1YWdlcyBzZWxlY3QKICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIEhUTUwgc2VhcmNoIG1hc2sgb3V0cHV0CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJGQVFTZWFyY2gnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lckZBUVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIGlmICggIWRlZmluZWQgJFNlbGYtPntEb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9ICkgewogICAgICAgIG15ICVVc2VyUHJlZmVyZW5jZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkdldFByZWZlcmVuY2VzKAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggJFVzZXJQcmVmZXJlbmNlc3tVc2VyQ3VzdG9tZXJEb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9ICkgewogICAgICAgICAgICAkU2VsZi0+e0RvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX0gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntEb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9ID0gMDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAlR2V0UGFyYW07CiAgICAkR2V0UGFyYW17SXRlbUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJdGVtSUQnICk7CiAgICAkR2V0UGFyYW17UmF0ZX0gICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdSYXRlJyApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzYXZlLCBpZiBicm93c2VyIGxpbmsgbWVzc2FnZSB3YXMgY2xvc2VkCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQnJvd3NlckxpbmtNZXNzYWdlJyApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgS2V5ICAgID0+ICdVc2VyQ3VzdG9tZXJEb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2UnLAogICAgICAgICAgICBWYWx1ZSAgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+IDEsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRHZXRQYXJhbXtJdGVtSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05lZWQgSXRlbUlEIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgb2JqZWN0CiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICMgZ2V0IEZBUSBpdGVtIGRhdGEKICAgIG15ICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgSXRlbUZpZWxkcyAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICk7CiAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKCk7CiAgICB9CgogICAgIyBnZXQgdGhlIHZhbGlkIGlkcwogICAgbXkgQFZhbGlkSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCk7CiAgICBteSAlVmFsaWRJRExvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAVmFsaWRJRHM7CgogICAgIyBjaGVjayB1c2VyIHBlcm1pc3Npb24KICAgIG15ICRQZXJtaXNzaW9uID0gJEZBUU9iamVjdC0+Q2hlY2tDYXRlZ29yeUN1c3RvbWVyUGVybWlzc2lvbigKICAgICAgICBDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgIENhdGVnb3J5SUQgICA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBpbnRlcmZhY2Ugc3RhdGUgbGlzdAogICAgbXkgJEludGVyZmFjZVN0YXRlcyA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpDdXN0b21lcjo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgaWYgKAogICAgICAgICEkUGVybWlzc2lvbgogICAgICAgIHx8ICEkRkFRRGF0YXtBcHByb3ZlZH0KICAgICAgICB8fCAhJFZhbGlkSURMb29rdXB7ICRGQVFEYXRhe1ZhbGlkSUR9IH0KICAgICAgICB8fCAhJEludGVyZmFjZVN0YXRlcy0+eyAkRkFRRGF0YXtTdGF0ZVR5cGVJRH0gfQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOb1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgIH0KCiAgICAjIHN0b3JlIHRoZSBsYXN0IHNjcmVlbiBpbiBzZXNzaW9uCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgSFRNTFZpZXcgU3ViYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0hUTUxWaWV3JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJEZpZWxkID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIkZpZWxkIiApOwoKICAgICAgICAjIG5lZWRlZCBwYXJhbXMKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoIEl0ZW1JRCBGaWVsZCApKSB7CiAgICAgICAgICAgIGlmICggISROZWVkZWQgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkZWQgUGFyYW06ICROZWVkZWQhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBGaWVsZCBjb250ZW50CiAgICAgICAgbXkgJEZpZWxkQ29udGVudCA9ICRGQVFPYmplY3QtPkl0ZW1GaWVsZEdldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBGaWVsZCAgPT4gJEZpZWxkLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmV3cml0ZSBoYW5kbGUgYW5kIGFjdGlvbgogICAgICAgICRGaWVsZENvbnRlbnQKICAgICAgICAgICAgPX4gc3sgaW5kZXhbLl1wbCBbP10gQWN0aW9uPUFnZW50RkFRWm9vbSB9e2N1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lckZBUVpvb219Z3htczsKCiAgICAgICAgIyB0YWtlIGNhcmUgb2Ygb2xkIHN0eWxlIGJlZm9yZSBGQVEgMi4wLngKICAgICAgICAkRmllbGRDb250ZW50ID1+IHN7CiAgICAgICAgICAgIGluZGV4Wy5dcGwgWz9dIEFjdGlvbj1BZ2VudEZBUSBbJl0oYW1wOyk/IFN1YmFjdGlvbj1Eb3dubG9hZCBbJl0oYW1wOyk/CiAgICAgICAgfXtjdXN0b21lci5wbD9BY3Rpb249Q3VzdG9tZXJGQVFab29tO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7fWd4bXM7CgogICAgICAgICMgYnVpbGQgYmFzZSBVUkwgZm9yIGlubGluZSBpbWFnZXMKICAgICAgICBteSAkU2Vzc2lvbklEID0gJyc7CiAgICAgICAgaWYgKCAkU2VsZi0+e1Nlc3Npb25JRH0gJiYgISRTZWxmLT57U2Vzc2lvbklEQ29va2llfSApIHsKICAgICAgICAgICAgJFNlc3Npb25JRCA9ICc7JyAuICRTZWxmLT57U2Vzc2lvbk5hbWV9IC4gJz0nIC4gJFNlbGYtPntTZXNzaW9uSUR9OwogICAgICAgICAgICAkRmllbGRDb250ZW50ID1+IHN7CiAgICAgICAgICAgICAgICAoQWN0aW9uPUN1c3RvbWVyRkFRWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O0l0ZW1JRD1cZCs7RmlsZUlEPVxkKykKICAgICAgICAgICAgfXskMSRTZXNzaW9uSUR9Z21zeDsKICAgICAgICB9CgogICAgICAgIG15ICRIVE1MVXRpbHNPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyk7CgogICAgICAgICMgY29udmVydCBjb250ZW50IHRvIEhUTUwgaWYgbmVlZGVkCiAgICAgICAgaWYgKAogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpCiAgICAgICAgICAgICYmICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9CiAgICAgICAgICAgICYmICRGQVFEYXRhe0NvbnRlbnRUeXBlfSBuZSAndGV4dC9odG1sJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRmllbGRDb250ZW50ID0gJEhUTUxVdGlsc09iamVjdC0+VG9IVE1MKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRGaWVsZENvbnRlbnQsCiAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBuZWVkZWQgSFRNTCBoZWFkZXJzCiAgICAgICAgJEZpZWxkQ29udGVudCA9ICRIVE1MVXRpbHNPYmplY3QtPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyAgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICAgICAgQ2hhcnNldCA9PiAndXRmLTgnLAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIGNvbXBsZXRlIEhUTUwgYXMgYW4gYXR0YWNobWVudAogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRGaWVsZENvbnRlbnQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBEb3dubG9hZEF0dGFjaG1lbnQgU3ViYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Rvd25sb2FkQXR0YWNobWVudCcgKSB7CgogICAgICAgICMgbWFuYWdlIHBhcmFtZXRlcnMKICAgICAgICAkR2V0UGFyYW17RmlsZUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWxlSUQnICk7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkR2V0UGFyYW17RmlsZUlEfSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvciggTWVzc2FnZSA9PiAnTmVlZCBGaWxlSUQnICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhdHRhY2htZW50cwogICAgICAgIG15ICVGaWxlID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEdldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBGaWxlSUQgPT4gJEdldFBhcmFte0ZpbGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoJUZpbGUpIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoJUZpbGUpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBhdHRhY2htZW50ICgkR2V0UGFyYW17RmlsZUlEfSkhIE1heSBiZSBhbiBhdHRhY2shISEiLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigpOwogICAgICAgIH0KICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckhlYWRlcigKICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtUaXRsZX0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgbXkgJEludGVyZmFjZSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ2V4dGVybmFsJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCB2b3RpbmcgZGVmYXVsdCBvcHRpb24KICAgIG15ICRWb3RpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6Vm90aW5nJyk7CgogICAgIyBnZXQgRkFRIHZvdGUgaW5mb3JtYXRpb24KICAgIG15ICRWb3RlRGF0YTsKICAgIGlmICgkVm90aW5nKSB7CiAgICAgICAgJFZvdGVEYXRhID0gJEZBUU9iamVjdC0+Vm90ZUdldCgKICAgICAgICAgICAgQ3JlYXRlQnkgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgSXRlbUlEICAgID0+ICRGQVFEYXRhe0l0ZW1JRH0sCiAgICAgICAgICAgIEludGVyZmFjZSA9PiAkSW50ZXJmYWNlLT57U3RhdGVJRH0sCiAgICAgICAgICAgIElQICAgICAgICA9PiAkRU5WeydSRU1PVEVfQUREUid9LAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBpZiB1c2VyIGFscmVhZHkgdm90ZWQgdGhpcyBGQVEgaXRlbQogICAgbXkgJEFscmVhZHlWb3RlZDsKICAgIGlmICgkVm90ZURhdGEpIHsKCiAgICAgICAgIyBnZXQgdGltZSBvYmplY3QKICAgICAgICBteSAkVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgogICAgICAgICMgaXRlbS9jaGFuZ2VfdGltZSA+IHZvdGluZy9jcmVhdGVfdGltZQogICAgICAgIG15ICRJdGVtQ2hhbmdlZFN5c3RlbVRpbWUgPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkRkFRRGF0YXtDaGFuZ2VkfSB8fCAnJywKICAgICAgICApOwogICAgICAgIG15ICRWb3RlQ3JlYXRlZFN5c3RlbVRpbWUgPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkVm90ZURhdGEtPntDcmVhdGVkfSB8fCAnJywKICAgICAgICApOwogICAgICAgIGlmICggJEl0ZW1DaGFuZ2VkU3lzdGVtVGltZSA8PSAkVm90ZUNyZWF0ZWRTeXN0ZW1UaW1lICkgewogICAgICAgICAgICAkQWxyZWFkeVZvdGVkID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgVm90ZSBTdWJhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVm90ZScgKSB7CgogICAgICAgICMgY3VzdG9tZXIgY2FuJ3QgdXNlIHRoaXMgc3ViYWN0aW9uIGlmIGlzIG5vdCBlbmFibGVkCiAgICAgICAgaWYgKCAhJFZvdGluZyApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiVGhlIHZvdGluZyBtZWNoYW5pc20gaXMgbm90IGVuYWJsZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdXNlciBjYW4gdm90ZSBvbmx5IG9uY2UgcGVyIEZBUSByZXZpc2lvbgogICAgICAgIGlmICgkQWxyZWFkeVZvdGVkKSB7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICdZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkIScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgdm90ZSBpZiBhbnkKICAgICAgICBlbHNpZiAoIGRlZmluZWQgJEdldFBhcmFte1JhdGV9ICkgewoKICAgICAgICAgICAgIyBnZXQgcmF0ZXMgY29uZmlnCiAgICAgICAgICAgIG15ICRWb3RpbmdSYXRlcyA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpJdGVtOjpWb3Rpbmc6OlJhdGVzJyk7CiAgICAgICAgICAgIG15ICRSYXRlICAgICAgICA9ICRHZXRQYXJhbXtSYXRlfTsKCiAgICAgICAgICAgICMgc2VuZCBlcnJvciBpZiByYXRlIGlzIG5vdCBkZWZpbmVkIGluIGNvbmZpZwogICAgICAgICAgICBpZiAoICEkVm90aW5nUmF0ZXMtPnskUmF0ZX0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiVGhlIHZvdGUgcmF0ZSBpcyBub3QgZGVmaW5lZCEiCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG90aGVyd2lzZSBhZGQgdGhlIHZvdGUKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkRkFRT2JqZWN0LT5Wb3RlQWRkKAogICAgICAgICAgICAgICAgICAgIENyZWF0ZWRCeSA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgICAgIElQICAgICAgICA9PiAkRU5WeydSRU1PVEVfQUREUid9LAogICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAkSW50ZXJmYWNlLT57U3RhdGVJRH0sCiAgICAgICAgICAgICAgICAgICAgUmF0ZSAgICAgID0+ICRHZXRQYXJhbXtSYXRlfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGRvIG5vdCBzaG93IHRoZSB2b3RpbmcgZm9ybQogICAgICAgICAgICAgICAgJEFscmVhZHlWb3RlZCA9IDE7CgogICAgICAgICAgICAgICAgIyByZWZyZXNoIEZBUSBpdGVtIGRhdGEKICAgICAgICAgICAgICAgICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISVGQVFEYXRhICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggSW5mbyA9PiAnVGhhbmtzIGZvciB5b3VyIHZvdGUhJyApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHVzZXIgaXMgYWJsZSB0byB2b3RlIGJ1dCBubyByYXRlIGhhcyBiZWVuIHNlbGVjdGVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICdObyByYXRlIHNlbGVjdGVkIScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgcHJlcGFyZSBmaWVsZHMgZGF0YSAoU3RpbGwgbmVlZGVkIGZvciBQbGFpblRleHQpCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKHF3KEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNCBGaWVsZDUgRmllbGQ2KSkgewogICAgICAgIG5leHQgRklFTEQgaWYgISRGQVFEYXRheyRGaWVsZH07CgogICAgICAgICMgcmV3cml0ZSBsaW5rcyB0byBlbWJlZGRlZCBpbWFnZXMgZm9yIGN1c3RvbWVyIGludGVyZmFjZQogICAgICAgIGlmICggJEludGVyZmFjZS0+e05hbWV9IGVxICdleHRlcm5hbCcgKSB7CgogICAgICAgICAgICAjIHJld3JpdGUgaGFuZGxlIGFuZCBhY3Rpb24KICAgICAgICAgICAgJEZBUURhdGF7JEZpZWxkfQogICAgICAgICAgICAgICAgPX4gc3sgaW5kZXhbLl1wbCBbP10gQWN0aW9uPUFnZW50RkFRWm9vbSB9e2N1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lckZBUVpvb219Z3htczsKCiAgICAgICAgICAgICMgdGFrZSBjYXJlIG9mIG9sZCBzdHlsZSBiZWZvcmUgRkFRIDIuMC54CiAgICAgICAgICAgICRGQVFEYXRheyRGaWVsZH0gPX4gc3sKICAgICAgICAgICAgICAgIGluZGV4Wy5dcGwgWz9dIEFjdGlvbj1BZ2VudEZBUSBbJl0oYW1wOyk/IFN1YmFjdGlvbj1Eb3dubG9hZCBbJl0oYW1wOyk/CiAgICAgICAgICAgIH17Y3VzdG9tZXIucGw/QWN0aW9uPUN1c3RvbWVyRkFRWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O31neG1zOwogICAgICAgIH0KCiAgICAgICAgIyBubyBxdW90aW5nIGlmIEhUTUwgdmlldyBpcyBlbmFibGVkCiAgICAgICAgbmV4dCBGSUVMRCBpZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpOwoKICAgICAgICAjIEhUTUwgcXVvdGluZwogICAgICAgICRGQVFEYXRheyRGaWVsZH0gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBOZXdMaW5lICAgICAgICA9PiAwLAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkRkFRRGF0YXskRmllbGR9LAogICAgICAgICAgICBWTWF4ICAgICAgICAgICA9PiA1MDAwLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgdm90aW5nIHJlc3VsdHMKICAgICRQYXJhbXtWb3RpbmdSZXN1bHRDb2xvcn0gPSAkTGF5b3V0T2JqZWN0LT5HZXRGQVFJdGVtVm90aW5nUmF0ZUNvbG9yKAogICAgICAgIFJhdGUgPT4gJEZBUURhdGF7Vm90ZVJlc3VsdH0sCiAgICApOwoKICAgIGlmICggISRQYXJhbXtWb3RpbmdSZXN1bHRDb2xvcn0gfHwgJEZBUURhdGF7Vm90ZXN9IGVxICcwJyApIHsKICAgICAgICAkUGFyYW17Vm90aW5nUmVzdWx0Q29sb3J9ID0gJ0dyYXknOwogICAgfQoKICAgICMgc2hvdyBiYWNrIGxpbmsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0JhY2snLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgIyBnZXQgbXVsdGktbGFuZ3VhZ2UgZGVmYXVsdCBvcHRpb24KICAgIG15ICRNdWx0aUxhbmd1YWdlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6Ok11bHRpTGFuZ3VhZ2UnKTsKCiAgICAjIHNob3cgbGFuZ3VhZ2UKICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyB2b3RlcwogICAgaWYgKCRWb3RpbmcpIHsKCiAgICAgICAgIyBhbHdheXMgZGlzcGxheXMgVm90ZXMgcmVzdWx0IGV2ZW4gaWYgaXRzIDAKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVmlld1ZvdGVzJywKICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IEZBUSBwYXRoCiAgICBteSAkU2hvd0ZBUVBhdGggPSAkTGF5b3V0T2JqZWN0LT5GQVFQYXRoU2hvdygKICAgICAgICBGQVFPYmplY3QgID0+ICRGQVFPYmplY3QsCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoJFNob3dGQVFQYXRoKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUVBhdGhJdGVtRWxlbWVudCcsCiAgICAgICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBrZXl3b3JkcyBhcyBzZWFyY2ggbGlua3MKICAgIGlmICggJEZBUURhdGF7S2V5d29yZHN9ICkgewoKICAgICAgICAjIHJlcGxhY2UgY29tbWFzIGFuZCBzZW1pY29sb25zCiAgICAgICAgJEZBUURhdGF7S2V5d29yZHN9ID1+IHMvLC8gL2c7CiAgICAgICAgJEZBUURhdGF7S2V5d29yZHN9ID1+IHMvOy8gL2c7CgogICAgICAgIG15IEBLZXl3b3JkcyA9IHNwbGl0IC9ccysvLCAkRkFRRGF0YXtLZXl3b3Jkc307CiAgICAgICAgZm9yIG15ICRLZXl3b3JkIChAS2V5d29yZHMpIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdLZXl3b3JkcycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBLZXl3b3JkID0+ICRLZXl3b3JkLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdXRwdXQgcmF0aW5nIHN0YXJzCiAgICBpZiAoJFZvdGluZykgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZBUVJhdGluZ1N0YXJzU2hvdygKICAgICAgICAgICAgVm90ZVJlc3VsdCA9PiAkRkFRRGF0YXtWb3RlUmVzdWx0fSwKICAgICAgICAgICAgVm90ZXMgICAgICA9PiAkRkFRRGF0YXtWb3Rlc30sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCBhdHRhY2htZW50cyBpZiBhbnkKICAgIG15IEBBdHRhY2htZW50SW5kZXggPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50SW5kZXgoCiAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBTaG93SW5saW5lID0+IDAsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgb3V0cHV0IGF0dGFjaG1lbnRzCiAgICBpZiAoQEF0dGFjaG1lbnRJbmRleCkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50SGVhZGVyJywKICAgICAgICApOwogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRJbmRleCkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgbWVzc2FnZSBhYm91dCBsaW5rcyBpbiBpZnJhbWVzLCBpZiB1c2VyIGRpZG4ndCBjbG9zZSBpdCBhbHJlYWR5CiAgICBpZiAoICEkU2VsZi0+e0RvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0Jyb3dzZXJMaW5rTWVzc2FnZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgRkFRIENvbnRlbnQKICAgICRMYXlvdXRPYmplY3QtPkZBUUNvbnRlbnRTaG93KAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgIEZBUURhdGEgICAgICAgICA9PiB7JUZBUURhdGF9LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiAnRkFRJywKICAgICAgICBGaWVsZEZpbHRlciA9PiAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBiYWNrZW5kIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgbXkgJFZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHByaW50IHN0cmluZyBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMjUwLAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICApOwoKICAgICAgICBteSAkTGFiZWwgPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9OwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRkFRRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGV4YW1wbGUgb2YgZHluYW1pYyBmaWVsZHMgb3JkZXIgY3VzdG9taXphdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGQVFEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBGQVEgVm90aW5nCiAgICBpZiAoJFZvdGluZykgewoKICAgICAgICAjIGdldCB2b3RpbmcgY29uZmlnCiAgICAgICAgbXkgJFNob3dWb3RpbmdDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6SXRlbTo6Vm90aW5nOjpTaG93Jyk7CiAgICAgICAgaWYgKCAkU2hvd1ZvdGluZ0NvbmZpZy0+eyAkSW50ZXJmYWNlLT57TmFtZX0gfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIHVzZXIgYWxyZWFkeSB2b3RlZCBhZnRlciBsYXN0IGNoYW5nZQogICAgICAgICAgICBpZiAoICEkQWxyZWFkeVZvdGVkICkgewogICAgICAgICAgICAgICAgJFNlbGYtPl9GQVFWb3RpbmcoIEZBUURhdGEgPT4geyVGQVFEYXRhfSApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgbG9nIGFjY2VzcyB0byB0aGlzIEZBUSBpdGVtCiAgICAkRkFRT2JqZWN0LT5GQVFMb2dBZGQoCiAgICAgICAgSXRlbUlEICAgID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJdGVtSUQnICksCiAgICAgICAgSW50ZXJmYWNlID0+ICRJbnRlcmZhY2UtPntOYW1lfSwKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lckZBUVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9GQVFWb3RpbmcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlRkFRRGF0YSA9ICV7ICRQYXJhbXtGQVFEYXRhfSB9OwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBvdXRwdXQgdm90aW5nIGJsb2NrCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdGQVFWb3RpbmcnLAogICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICk7CgogICAgIyBnZXQgVm90aW5nIHJhdGVzIHNldHRpbmcKICAgIG15ICRWb3RpbmdSYXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRkFROjpJdGVtOjpWb3Rpbmc6OlJhdGVzJyk7CiAgICBmb3IgbXkgJFJhdGVWYWx1ZSAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JFZvdGluZ1JhdGVzfSApIHsKCiAgICAgICAgIyBjcmVhdGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIG91dHB1dAogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICBWYWx1ZSA9PiAkUmF0ZVZhbHVlLAogICAgICAgICAgICBUaXRsZSA9PiAkVm90aW5nUmF0ZXMtPnskUmF0ZVZhbHVlfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCB2b3RlIHJhdGluZyByb3cgYmxvY2sKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRkFRVm90aW5nUmF0ZVJvdycsCiAgICAgICAgICAgIERhdGEgPT4geyVEYXRhfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRSZWRpcmVjdCA9ICRFTlZ7UkVRVUVTVF9VUkl9OwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgaWYgKCRSZWRpcmVjdCkgewogICAgICAgICRSZWRpcmVjdCA9fiBze1B1YmxpY0ZBUX17UHVibGljRkFRWm9vbX14bXM7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkUmVkaXJlY3QgPSAkTGF5b3V0T2JqZWN0LT57QmFzZWxpbmt9CiAgICAgICAgICAgIC4gJ0FjdGlvbj1QdWJsaWNGQVFab29tO0l0ZW1JRD0nCiAgICAgICAgICAgIC4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ0l0ZW1JRCcgKTsKICAgIH0KCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgT1AgPT4gJFJlZGlyZWN0LAogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFFeHBsb3JlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNSU1FOjpCYXNlNjQgcXcoKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBzZXQgVXNlcklEIHRvIHJvb3QgYmVjYXVzZSBpbiBwdWJsaWMgaW50ZXJmYWNlIHRoZXJlIGlzIG5vIHVzZXIKICAgICRTZWxmLT57VXNlcklEfSA9IDE7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiRkFROjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgY29uZmlnIGRhdGEKICAgIG15ICRTdGFydEhpdCA9IGludCggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0SGl0JyApIHx8IDEgKTsKICAgIG15ICRTZWFyY2hMaW1pdCAgICAgPSAkQ29uZmlnLT57U2VhcmNoTGltaXR9ICAgICB8fCAyMDA7CiAgICBteSAkU2VhcmNoUGFnZVNob3duID0gJENvbmZpZy0+e1NlYXJjaFBhZ2VTaG93bn0gfHwgMzsKICAgIG15ICRTb3J0QnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApCiAgICAgICAgfHwgJENvbmZpZy0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdGQVFJRCc7CiAgICBteSAkT3JkZXJCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlcicgKQogICAgICAgIHx8ICRDb25maWctPnsnT3JkZXI6OkRlZmF1bHQnfQogICAgICAgIHx8ICdEb3duJzsKCiAgICAjIGdldCBJdGVtIElECiAgICBteSAkSXRlbUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0l0ZW1JRCcgKSB8fCAwOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBpZiBJdGVtSUQgcGFyYW1ldGVyIHdhcyBzZW50IGFuZCByZWRpcmVjdCB0byBGQVEgYXJ0aWNsZSB6b29tIHNjcmVlbgogICAgaWYgKCRJdGVtSUQpIHsKCiAgICAgICAgIyByZWRpcmVjdCB0byBGQVEgem9vbQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gJ0FjdGlvbj1QdWJsaWNGQVFab29tO0l0ZW1JRD0nIC4gJEl0ZW1JRCApOwogICAgfQoKICAgICMgZ2V0IGNhdGVnb3J5IElECiAgICBteSAkQ2F0ZWdvcnlJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDYXRlZ29yeUlEJyApIHx8IDA7CgogICAgIyBjaGVjayBmb3Igbm9uIG51bWVyaWMgQ2F0ZWdvcnlJRAogICAgaWYgKCAkQ2F0ZWdvcnlJRCAhfiAvXGQrLyApIHsKICAgICAgICAkQ2F0ZWdvcnlJRCA9IDA7CiAgICB9CgogICAgIyBnZXQgY2F0ZWdvcnkgYnkgbmFtZQogICAgbXkgJENhdGVnb3J5ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NhdGVnb3J5JyApIHx8ICcnOwoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyB0cnkgdG8gZ2V0IHRoZSBjYXRlZ29yeSBJRCBmcm9tIGNhdGVnb3J5IG5hbWUgaWYgbm8gY2F0ZWdvcnkgSUQKICAgIGlmICggJENhdGVnb3J5ICYmICEkQ2F0ZWdvcnlJRCApIHsKCiAgICAgICAgIyBnZXQgdGhlIGNhdGVnb3J5IHRyZWUKICAgICAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlUcmVlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXZlcnNlIHRoZSBoYXMgZm9yIGVhc3kgbG9va3VwCiAgICAgICAgbXkgJVJldmVyc2VDYXRlZ29yeVRyZWUgPSByZXZlcnNlICV7JENhdGVnb3J5VHJlZX07CgogICAgICAgICRDYXRlZ29yeUlEID0gJFJldmVyc2VDYXRlZ29yeVRyZWV7JENhdGVnb3J5fSB8fCAwOwogICAgfQoKICAgICMgdHJ5IHRvIGdldCB0aGUgY2F0ZWdvcnkgZGF0YQogICAgbXkgJUNhdGVnb3J5RGF0YTsKICAgIGlmICgkQ2F0ZWdvcnlJRCkgewoKICAgICAgICAjIGdldCBjYXRlZ29yeSBkYXRhCiAgICAgICAgJUNhdGVnb3J5RGF0YSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5R2V0KAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgIGlmICggISVDYXRlZ29yeURhdGEgKSB7CgogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOb1Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBSU1MgZmVlZCBsaW5rIGZvciBuZXcgRkFRIGFydGljbGVzIGluIHRoZSBicm93c2VyIFVSTCBiYXIKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01ldGFMaW5rJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgUmVsICA9PiAnYWx0ZXJuYXRlJywKICAgICAgICAgICAgVHlwZSA9PiAnYXBwbGljYXRpb24vcnNzK3htbCcsCiAgICAgICAgICAgIFRpdGxlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJyksCiAgICAgICAgICAgIEhyZWYgPT4gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfSAuICdBY3Rpb249UHVibGljRkFRUlNTO1R5cGU9Q3JlYXRlZCcsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgUlNTIGZlZWQgbGluayBmb3IgY2hhbmdlZCBGQVEgYXJ0aWNsZXMgaW4gdGhlIGJyb3dzZXIgVVJMIGJhcgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWV0YUxpbmsnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBSZWwgID0+ICdhbHRlcm5hdGUnLAogICAgICAgICAgICBUeXBlID0+ICdhcHBsaWNhdGlvbi9yc3MreG1sJywKICAgICAgICAgICAgVGl0bGUgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKScpLAogICAgICAgICAgICBIcmVmID0+ICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30gLiAnQWN0aW9uPVB1YmxpY0ZBUVJTUztUeXBlPUNoYW5nZWQnLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIFJTUyBmZWVkIGxpbmsgZm9yIFRvcC0xMCBGQVEgYXJ0aWNsZXMgaW4gdGhlIGJyb3dzZXIgVVJMIGJhcgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWV0YUxpbmsnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBSZWwgICA9PiAnYWx0ZXJuYXRlJywKICAgICAgICAgICAgVHlwZSAgPT4gJ2FwcGxpY2F0aW9uL3Jzcyt4bWwnLAogICAgICAgICAgICBUaXRsZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUSBBcnRpY2xlcyAoVG9wIDEwKScpLAogICAgICAgICAgICBIcmVmICA9PiAkTGF5b3V0T2JqZWN0LT57QmFzZWxpbmt9IC4gJ0FjdGlvbj1QdWJsaWNGQVFSU1M7VHlwZT1Ub3AxMCcsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJIZWFkZXIoKTsKCiAgICAjIHNob3cgRkFRIHBhdGgKICAgICRMYXlvdXRPYmplY3QtPkZBUVBhdGhTaG93KAogICAgICAgIEZBUU9iamVjdCAgPT4gJEZBUU9iamVjdCwKICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBhbGwgZGlyZWN0IHN1YmNhdGVnb3JpZXMgb2YgdGhlIHNlbGVjdGVkIGNhdGVnb3J5CiAgICBteSAkQ2F0ZWdvcnlJRHNSZWYgPSAkRkFRT2JqZWN0LT5QdWJsaWNDYXRlZ29yeVNlYXJjaCgKICAgICAgICBQYXJlbnRJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICBNb2RlICAgICA9PiAnUHVibGljJywKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2hvdyBzdWJjYXRlZ29yaWVzIGxpc3QKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1N1YmNhdGVnb3JpZXMnLAogICAgICAgIERhdGEgPT4ge30sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnLAogICAgICAgIERhdGEgPT4ge30sCiAgICApOwoKICAgICMgZ2V0IGludGVyZmFjZSBzdGF0ZSBsaXN0CiAgICBteSAkSW50ZXJmYWNlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgICAgICBUeXBlcyAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OlB1YmxpYzo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgdGhlcmUgYXJlIHN1YmNhdGVnb3JpZXMKICAgIGlmICggJENhdGVnb3J5SURzUmVmICYmIHJlZiAkQ2F0ZWdvcnlJRHNSZWYgZXEgJ0FSUkFZJyAmJiBAeyRDYXRlZ29yeUlEc1JlZn0gKSB7CgogICAgICAgICMgc2hvdyBkYXRhIGZvciBlYWNoIHN1YmNhdGVnb3J5CiAgICAgICAgZm9yIG15ICRTdWJDYXRlZ29yeUlEICggQHskQ2F0ZWdvcnlJRHNSZWZ9ICkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGNhdGVnb3J5IGRhdGEKICAgICAgICAgICAgbXkgJVN1YkNhdGVnb3J5RGF0YSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5R2V0KAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkU3ViQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIG51bWJlciBvZiBzdWJjYXRlZ29yaWVzIG9mIHRoaXMgc3ViY2F0ZWdvcnkKICAgICAgICAgICAgJFN1YkNhdGVnb3J5RGF0YXtTdWJDYXRlZ29yeUNvdW50fSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5Q291bnQoCiAgICAgICAgICAgICAgICBQYXJlbnRJRHMgPT4gWyRTdWJDYXRlZ29yeUlEXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCB0aGUgbnVtYmVyIG9mIEZBUSBhcnRpY2xlcyBpbiB0aGlzIGNhdGVnb3J5CiAgICAgICAgICAgICRTdWJDYXRlZ29yeURhdGF7QXJ0aWNsZUNvdW50fSA9ICRGQVFPYmplY3QtPkZBUUNvdW50KAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRHMgID0+IFskU3ViQ2F0ZWdvcnlJRF0sCiAgICAgICAgICAgICAgICBJdGVtU3RhdGVzICAgPT4gJEludGVyZmFjZVN0YXRlcywKICAgICAgICAgICAgICAgIE9ubHlBcHByb3ZlZCA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IHRoZSBjYXRlZ29yeSBkYXRhCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHRSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVN1YkNhdGVnb3J5RGF0YX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlzIGRpc3BsYXllZAogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vQ2F0ZWdvcnlEYXRhRm91bmRNc2cnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgIG15ICRJbnRlcmZhY2UgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgTmFtZSAgID0+ICdwdWJsaWMnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2VhcmNoIGFsbCBGQVEgYXJ0aWNsZXMgd2l0aGluIHRoZSBnaXZlbiBjYXRlZ29yeQogICAgbXkgQFZpZXdhYmxlRkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyRTb3J0QnldLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyRPcmRlckJ5XSwKICAgICAgICBMaW1pdCAgICAgICAgICAgID0+ICRTZWFyY2hMaW1pdCwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBTdGF0ZXMgICAgICAgICAgID0+ICRJbnRlcmZhY2VTdGF0ZXMsCiAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgICAgIENhdGVnb3J5SURzICAgICAgPT4gWyRDYXRlZ29yeUlEXSwKICAgICk7CgogICAgIyBzZXQgdGhlIFNvcnRCeSBDbGFzcwogICAgbXkgJFNvcnRDbGFzczsKCiAgICAjIHRoaXMgc2V0cyB0aGUgb3Bwb3NpdGUgdG8gdGhlIE9yZGVyQnkgcGFyYW1ldGVyCiAgICBpZiAoICRPcmRlckJ5IGVxICdEb3duJyApIHsKICAgICAgICAkU29ydENsYXNzID0gJ1NvcnRBc2NlbmRpbmcnOwogICAgfQogICAgZWxzaWYgKCAkT3JkZXJCeSBlcSAnVXAnICkgewogICAgICAgICRTb3J0Q2xhc3MgPSAnU29ydERlc2NlbmRpbmcnOwogICAgfQoKICAgICMgc2V0IHRoZSBTb3J0QnkgQ2xhc3MgdG8gdGhlIGNvcnJlY3QgZmllbGQKICAgIG15ICVDU1NTb3J0OwogICAgbXkgJENTU1NvcnRCeSA9ICRTb3J0QnkgLiAnU29ydCc7CiAgICAkQ1NTU29ydHskQ1NTU29ydEJ5fSA9ICRTb3J0Q2xhc3M7CgogICAgbXkgJU5ld09yZGVyID0gKAogICAgICAgIERvd24gPT4gJ1VwJywKICAgICAgICBVcCAgID0+ICdEb3duJywKICAgICk7CgogICAgIyBzaG93IHRoZSBGQVEgYXJ0aWNsZSBsaXN0CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdGQVFJdGVtTGlzdCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgICVDU1NTb3J0LAogICAgICAgICAgICBPcmRlciA9PiAkTmV3T3JkZXJ7JE9yZGVyQnl9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IG11bHRpIGxhbmd1YWdlIGRlZmF1bHQgb3B0aW9uCiAgICBteSAkTXVsdGlMYW5ndWFnZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CgogICAgIyBzaG93IGxhbmd1YWdlIGhlYWRlcgogICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckxhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgJUNTU1NvcnQsCiAgICAgICAgICAgICAgICBPcmRlciA9PiAkTmV3T3JkZXJ7JE9yZGVyQnl9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJENvdW50ZXIgPSAwOwogICAgaWYgKEBWaWV3YWJsZUZBUUlEcykgewoKICAgICAgICAjIGNyZWF0ZSBiYWNrIGxpbmsgZm9yIEZBUSBab29tIHNjcmVlbgogICAgICAgIG15ICRab29tQmFja0xpbmsgPSAiQWN0aW9uPVB1YmxpY0ZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9JENhdGVnb3J5SUQ7IgogICAgICAgICAgICAuICJTb3J0Qnk9JFNvcnRCeTtPcmRlcj0kT3JkZXJCeTtTdGFydEhpdD0kU3RhcnRIaXQiOwoKICAgICAgICAjIGVuY29kZSBiYWNrIGxpbmsgdG8gQmFzZTY0IGZvciBlYXN5IEhUTUwgdHJhbnNwb3J0CiAgICAgICAgJFpvb21CYWNrTGluayA9IE1JTUU6OkJhc2U2NDo6ZW5jb2RlX2Jhc2U2NCgkWm9vbUJhY2tMaW5rKTsKCiAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAgICAgIyBidWlsZCBzZWFyY2ggcmVzdWx0CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRDb3VudGVyID49ICRTdGFydEhpdAogICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRTZWFyY2hQYWdlU2hvd24gKyAkU3RhcnRIaXQgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEgZGV0YWlscwogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkRkFRRGF0YXtDbGVhblRpdGxlfSA9ICRGQVFPYmplY3QtPkZBUUFydGljbGVUaXRsZUNsZWFuKAogICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRGQVFEYXRhe1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBTaXplICA9PiAkQ29uZmlnLT57VGl0bGVTaXplfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBhZGQgYmxvY2tzIHRvIHRlbXBsYXRlCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgWm9vbUJhY2tMaW5rID0+ICRab29tQmFja0xpbmssCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBhZGQgbGFuZ3VhZ2UgZGF0YQogICAgICAgICAgICAgICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZExhbmd1YWdlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlzIGRpc3BsYXllZAogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vRkFRRGF0YUZvdW5kTXNnJywKICAgICAgICApOwogICAgfQoKICAgIG15ICRMaW5rID0gJ1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkU29ydEJ5KSAuICc7JzsKICAgICRMaW5rIC49ICdPcmRlcj0nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkT3JkZXJCeSkgLiAnOyc7CgogICAgIyBidWlsZCBzZWFyY2ggbmF2aWdhdGlvbiBiYXIKICAgIG15ICVQYWdlTmF2ID0gJExheW91dE9iamVjdC0+UGFnZU5hdkJhcigKICAgICAgICBMaW1pdCAgICAgPT4gJFNlYXJjaExpbWl0LAogICAgICAgIFN0YXJ0SGl0ICA9PiAkU3RhcnRIaXQsCiAgICAgICAgUGFnZVNob3duID0+ICRTZWFyY2hQYWdlU2hvd24sCiAgICAgICAgQWxsSGl0cyAgID0+ICRDb3VudGVyLAogICAgICAgIEFjdGlvbiAgICA9PiAiQWN0aW9uPVB1YmxpY0ZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9JENhdGVnb3J5SUQiLAogICAgICAgIExpbmsgICAgICA9PiAkTGluaywKICAgICAgICBJRFByZWZpeCAgPT4gIlB1YmxpY0ZBUUV4cGxvcmVyIiwKICAgICk7CgogICAgIyBzaG93IGZvb3RlciBmaWx0ZXIgLSBzaG93IG9ubHkgaWYgbW9yZSB0aGUgb25lIHBhZ2UgaXMgYXZhaWxhYmxlCiAgICBpZiAoIGRlZmluZWQgJFBhZ2VOYXZ7VG90YWxIaXRzfSAmJiAoICRQYWdlTmF2e1RvdGFsSGl0c30gPiAkU2VhcmNoUGFnZVNob3duICkgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1BhZ2luYXRpb24nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJFNlYXJjaEJhY2tMaW5rID0gIkFjdGlvbj1QdWJsaWNGQVFFeHBsb3JlcjtDYXRlZ29yeUlEPSRDYXRlZ29yeUlEIjsKCiAgICAjIGVuY29kZSBiYWNrIGxpbmsgdG8gQmFzZTY0IGZvciBlYXN5IEhUTUwgdHJhbnNwb3J0CiAgICAkU2VhcmNoQmFja0xpbmsgPSBNSU1FOjpCYXNlNjQ6OmVuY29kZV9iYXNlNjQoJFNlYXJjaEJhY2tMaW5rKTsKCiAgICAjIHNob3cgUXVpY2tTZWFyY2gKICAgICRMYXlvdXRPYmplY3QtPkZBUVNob3dRdWlja1NlYXJjaCgKICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ1B1YmxpYycsCiAgICAgICAgSW50ZXJmYWNlICAgICAgID0+ICRJbnRlcmZhY2UsCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRJbnRlcmZhY2VTdGF0ZXMsCiAgICAgICAgU2VhcmNoQmFja0xpbmsgID0+ICRTZWFyY2hCYWNrTGluaywKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgbGFzdCBhZGRlZCBhbmQgbGFzdCB1cGRhdGVkIGFydGljbGVzCiAgICBmb3IgbXkgJFR5cGUgKHF3KExhc3RDcmVhdGUgTGFzdENoYW5nZSkpIHsKCiAgICAgICAgbXkgJFNob3dPayA9ICRMYXlvdXRPYmplY3QtPkZBUVNob3dMYXRlc3ROZXdzQm94KAogICAgICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJEZBUU9iamVjdCwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICRUeXBlLAogICAgICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ1B1YmxpYycsCiAgICAgICAgICAgIENhdGVnb3J5SUQgICAgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgID0+ICRJbnRlcmZhY2UsCiAgICAgICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICBpZiAoICEkU2hvd09rICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IHRvcCB0ZW4gYXJ0aWNsZXMKICAgIG15ICRTaG93T2sgPSAkTGF5b3V0T2JqZWN0LT5GQVFTaG93VG9wMTAoCiAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRGQVFPYmplY3QsCiAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdQdWJsaWMnLAogICAgICAgIENhdGVnb3J5SUQgICAgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICBJbnRlcmZhY2UgICAgICAgPT4gJEludGVyZmFjZSwKICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJEludGVyZmFjZVN0YXRlcywKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkU2hvd09rICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgfQoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY0ZBUUV4cGxvcmVyJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgICVDYXRlZ29yeURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFQcmludDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBzZXQgVXNlcklEIHRvIHJvb3QgYmVjYXVzZSBpbiBwdWJsaWMgaW50ZXJmYWNlIHRoZXJlIGlzIG5vIHVzZXIKICAgICRTZWxmLT57VXNlcklEfSA9IDE7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKICAgICRHZXRQYXJhbXtJdGVtSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ0l0ZW1JRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkR2V0UGFyYW17SXRlbUlEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBJdGVtSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgb2JqZWN0CiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICMgZ2V0IEZBUSBpdGVtIGRhdGEKICAgIG15ICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICggISVGQVFEYXRhICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBpbnRlcmZhY2Ugc3RhdGUgbGlzdAogICAgbXkgJEludGVyZmFjZVN0YXRlcyA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpQdWJsaWM6OlN0YXRlVHlwZXMnKSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgbm8gcGVybWlzc2lvbiBlcnJvcgogICAgaWYgKAogICAgICAgICEkRkFRRGF0YXtBcHByb3ZlZH0KICAgICAgICB8fCAhJEludGVyZmFjZVN0YXRlcy0+eyAkRkFRRGF0YXtTdGF0ZVR5cGVJRH0gfQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOb1Blcm1pc3Npb24oCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgbXkgJEludGVyZmFjZSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ3B1YmxpYycsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBwcmVwYXJlIGZpZWxkcyBkYXRhCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKHF3KEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNCBGaWVsZDUgRmllbGQ2KSkgewogICAgICAgIG5leHQgRklFTEQgaWYgISRGQVFEYXRheyRGaWVsZH07CgogICAgICAgICMgcmV3cml0ZSBsaW5rcyB0byBlbWJlZGRlZCBpbWFnZXMgZm9yIGN1c3RvbWVyIGFuZCBwdWJsaWMgaW50ZXJmYWNlCiAgICAgICAgaWYgKCAkSW50ZXJmYWNlLT57TmFtZX0gZXEgJ3B1YmxpYycgKSB7CiAgICAgICAgICAgICRGQVFEYXRheyRGaWVsZH0KICAgICAgICAgICAgICAgID1+IHN7IGluZGV4Wy5dcGwgWz9dIEFjdGlvbj1BZ2VudEZBUVpvb20gfXtwdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUVpvb219Z3htczsKICAgICAgICB9CgogICAgICAgICMgbm8gcXVvdGluZyBpZiBIVE1MIHZpZXcgaXMgZW5hYmxlZAogICAgICAgIG5leHQgRklFTEQgaWYgJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6Okl0ZW06OkhUTUwnKTsKCiAgICAgICAgIyBIVE1MIHF1b3RpbmcKICAgICAgICAkRkFRRGF0YXskRmllbGR9ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgTmV3TGluZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJEZBUURhdGF7JEZpZWxkfSwKICAgICAgICAgICAgVk1heCAgICAgICAgICAgPT4gNTAwMCwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICAgICAgTGlua0ZlYXR1cmUgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2VuZXJhdGUgUERGIG91dHB1dAogICAgbXkgJFRpbWUgPSAkTGF5b3V0T2JqZWN0LT57VGltZX07CiAgICBteSAlUGFnZTsKCiAgICAjIGdldCBtYXhpbXVtIG51bWJlciBvZiBwYWdlcwogICAgJFBhZ2V7TWF4UGFnZXN9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdQREY6Ok1heFBhZ2VzJyk7CiAgICBpZiAoICEkUGFnZXtNYXhQYWdlc30gfHwgJFBhZ2V7TWF4UGFnZXN9IDwgMSB8fCAkUGFnZXtNYXhQYWdlc30gPiAxMDAwICkgewogICAgICAgICRQYWdle01heFBhZ2VzfSA9IDEwMDsKICAgIH0KICAgIG15ICRIZWFkZXJSaWdodCAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6RkFRSG9vaycpIC4gJEZBUURhdGF7TnVtYmVyfTsKICAgIG15ICRIZWFkbGluZUxlZnQgPSAkSGVhZGVyUmlnaHQ7CiAgICBteSAkVGl0bGUgICAgICAgID0gJEhlYWRlclJpZ2h0OwogICAgaWYgKCAkRkFRRGF0YXtUaXRsZX0gKSB7CiAgICAgICAgJEhlYWRsaW5lTGVmdCA9ICRGQVFEYXRhe1RpdGxlfTsKICAgICAgICAkVGl0bGUgLj0gJyAvICcgLiAkRkFRRGF0YXtUaXRsZX07CiAgICB9CgogICAgJFBhZ2V7TWFyZ2luVG9wfSAgICA9IDMwOwogICAgJFBhZ2V7TWFyZ2luUmlnaHR9ICA9IDQwOwogICAgJFBhZ2V7TWFyZ2luQm90dG9tfSA9IDQwOwogICAgJFBhZ2V7TWFyZ2luTGVmdH0gICA9IDQwOwogICAgJFBhZ2V7SGVhZGVyUmlnaHR9ICA9ICRIZWFkZXJSaWdodDsKICAgICRQYWdle1BhZ2VUZXh0fSAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1BhZ2UnKTsKICAgICRQYWdle1BhZ2VDb3VudH0gICAgPSAxOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBjcmVhdGUgbmV3IFBERiBkb2N1bWVudAogICAgJFBERk9iamVjdC0+RG9jdW1lbnROZXcoCiAgICAgICAgVGl0bGUgID0+ICRDb25maWdPYmplY3QtPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRUaXRsZSwKICAgICAgICBFbmNvZGUgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICk7CgogICAgIyBjcmVhdGUgZmlyc3QgUERGIHBhZ2UKICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgJVBhZ2UsCiAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICk7CiAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJEZBUURhdGF7VGl0bGV9LAogICAgICAgIEZvbnRTaXplID0+IDEzLAoKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgInByaW50ZWQgYnkiCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRUaW1lLAogICAgICAgIEZvbnRTaXplID0+IDksCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE0LAogICAgKTsKCiAgICAjIHR5cGUgb2YgcHJpbnQgdGFnCiAgICBteSAkUHJpbnRUYWcgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUSBBcnRpY2xlIFByaW50Jyk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFByaW50VGFnLAogICAgICAgIEhlaWdodCAgID0+IDksCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGQnLAogICAgICAgIEFsaWduICAgID0+ICdyaWdodCcsCiAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTYsCiAgICApOwoKICAgICMgb3V0cHV0IEZBUSBpbmZvcm1hdGlvbgogICAgJFNlbGYtPl9QREZPdXRwdXRGQVFIZWFkZXJJbmZvKAogICAgICAgIFBhZ2VEYXRhID0+IFwlUGFnZSwKICAgICAgICBGQVFEYXRhICA9PiBcJUZBUURhdGEsCiAgICApOwoKICAgIGlmICggJEZBUURhdGF7S2V5d29yZHN9ICkgewogICAgICAgICRTZWxmLT5fUERGT3V0cHV0S2V5d29yZHMoCiAgICAgICAgICAgIFBhZ2VEYXRhID0+IFwlUGFnZSwKICAgICAgICAgICAgRkFRRGF0YSAgPT4gXCVGQVFEYXRhLAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgRkFRIGR5bmFtaWMgZmllbGRzCiAgICAkU2VsZi0+X1BERk91dHB1dEZBUUR5bmFtaWNGaWVsZHMoCiAgICAgICAgUGFnZURhdGEgPT4gXCVQYWdlLAogICAgICAgIEZBUURhdGEgID0+IFwlRkFRRGF0YSwKICAgICk7CgogICAgJFNlbGYtPl9QREZPdXB1dEZBUUNvbnRlbnQoCiAgICAgICAgUGFnZURhdGEgICAgICAgID0+IFwlUGFnZSwKICAgICAgICBGQVFEYXRhICAgICAgICAgPT4gXCVGQVFEYXRhLAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgKTsKCiAgICAjIGdldCB0aW1lIG9iamVjdAogICAgbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKICAgICMgcmV0dXJuIHRoZSBQREYgZG9jdW1lbnQKICAgIG15ICRGaWxlbmFtZSA9ICdGQVFfJyAuICRGQVFEYXRhe051bWJlcn07CiAgICBteSAoICRzLCAkbSwgJGgsICRELCAkTSwgJFkgKSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpLAogICAgKTsKICAgICRNID0gc3ByaW50ZiggIiUwMmQiLCAkTSApOwogICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICRtID0gc3ByaW50ZiggIiUwMmQiLCAkbSApOwogICAgbXkgJFBERlN0cmluZyA9ICRQREZPYmplY3QtPkRvY3VtZW50T3V0cHV0KCk7CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBGaWxlbmFtZSAgICA9PiAkRmlsZW5hbWUgLiAiXyIgLiAiJFktJE0tJEQiIC4gIl8iIC4gIiRoLSRtLnBkZiIsCiAgICAgICAgQ29udGVudFR5cGUgPT4gImFwcGxpY2F0aW9uL3BkZiIsCiAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICk7Cn0KCnN1YiBfUERGT3V0cHV0RkFRSGVhZGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZURhdGEgRkFRRGF0YSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBteSAlRkFRRGF0YSA9ICV7ICRQYXJhbXtGQVFEYXRhfSB9OwogICAgbXkgJVBhZ2UgICAgPSAleyAkUGFyYW17UGFnZURhdGF9IH07CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNyZWF0ZSBsZWZ0IHRhYmxlCiAgICBteSAkVGFibGVMZWZ0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDYXRlZ29yeScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRGQVFEYXRhe0NhdGVnb3J5TmFtZX0gKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRGQVFEYXRhe1N0YXRlfSApLAogICAgICAgIH0sCiAgICBdOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGRlZmF1bHQgbXVsdGkgbGFuZ3VhZ2Ugb3B0aW9uCiAgICBteSAkTXVsdGlMYW5ndWFnZSA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJyk7CgogICAgIyBsYW5ndWFnZSByb3csIGZlYXR1cmUgaXMgZW5hYmxlZAogICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgbXkgJFJvdyA9IHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMYW5ndWFnZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRGQVFEYXRhe0xhbmd1YWdlfSApLAogICAgICAgIH07CiAgICAgICAgcHVzaCBAeyRUYWJsZUxlZnR9LCAkUm93OwogICAgfQoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodDsKCiAgICAjIGdldCBkZWZhdWx0IHZvdGluZyBvcHRpb24KICAgIG15ICRWb3RpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6Vm90aW5nJyk7CgogICAgIyB2b3Rpbmcgcm93cywgZmVhdHVyZSBpcyBlbmFibGVkCiAgICBpZiAoJFZvdGluZykgewogICAgICAgICRUYWJsZVJpZ2h0ID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1ZvdGVzJykgLiAnOicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtWb3Rlc30sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUmVzdWx0JykgLiAnOicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRkFRRGF0YXtWb3RlUmVzdWx0fSAuICIgJSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgXTsKICAgIH0KCiAgICAjIGxhc3QgdXBkYXRlIHJvdwogICAgcHVzaCBAeyRUYWJsZVJpZ2h0fSwgewogICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTGFzdCB1cGRhdGUnKSAuICc6JywKICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5Gb3JtYXRUaW1lU3RyaW5nKAogICAgICAgICAgICAkRkFRRGF0YXtDaGFuZ2VkfSwKICAgICAgICAgICAgJ0RhdGVGb3JtYXRMb25nJywKICAgICAgICApLAogICAgfTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsyXXtXaWR0aH0gPSA0OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bM117V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVs0XXtXaWR0aH0gPSAxNzAuNTsKCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICA9IDM7CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYWdle1BhZ2VDb3VudH0gLi4gJFBhZ2V7TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCAlVGFibGVQYXJhbSwgKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgIGxhc3QgUEFHRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAlUGFnZSwKICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYWdle1BhZ2VDb3VudH0rKzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRLZXl3b3JkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZURhdGEgRkFRRGF0YSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgbXkgJUZBUURhdGEgPSAleyAkUGFyYW17RkFRRGF0YX0gfTsKICAgIG15ICVQYWdlICAgID0gJXsgJFBhcmFte1BhZ2VEYXRhfSB9OwogICAgbXkgJVRhYmxlUGFyYW07CgogICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WzBdWzBde0NvbnRlbnR9ID0gJEZBUURhdGF7S2V5d29yZHN9IHx8ICcnOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gNTExOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0tleXdvcmRzJyksCiAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNCwKICAgICk7CgogICAgIyB0YWJsZSBwYXJhbXMKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgPSAzOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yICggJFBhZ2V7UGFnZUNvdW50fSAuLiAkUGFnZXtNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgbGFzdCBQQUdFOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dEZBUUR5bmFtaWNGaWVsZHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VEYXRhIEZBUURhdGEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCggJFBhcmFteyROZWVkZWR9ICkgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIG15ICRPdXRwdXQgPSAwOwogICAgbXkgJUZBUSAgICA9ICV7ICRQYXJhbXtGQVFEYXRhfSB9OwogICAgbXkgJVBhZ2UgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKCiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3cgPSAwOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBmcm9udGVuZCBtb2R1bGUKICAgIG15ICREeW5hbWljRmllbGRGaWx0ZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIkZBUTo6RnJvbnRlbmQ6OlB1YmxpY0ZBUVByaW50IiktPntEeW5hbWljRmllbGR9OwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgRkFRIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnRkFRJ10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJER5bmFtaWNGaWVsZEZpbHRlciB8fCB7fSwKICAgICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdlbmVyYXRlIHRhYmxlCiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciBGQVEgb2JqZWN0CiAgICBEWU5BTUlDRklFTERDT05GSUc6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTERDT05GSUcgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBkeW5hbWljIGZpZWxkIGJhY2tlbmQgb2JqZWN0CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgICAgICMgc2tpcCBkeW5hbWljIGZpZWxkIGlmIGlzIG5vdCBkZXNpZ25lZCBmb3IgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICAgICAgbXkgJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZScsCiAgICAgICAgKTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRENPTkZJRyBpZiAhJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlOwoKICAgICAgICBteSAkVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJEZBUXtGQVFJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTERDT05GSUcgaWYgISRWYWx1ZTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRENPTkZJRyBpZiAkVmFsdWUgZXEgIiI7CgogICAgICAgICMgZ2V0IHByaW50IHN0cmluZyBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICBIVE1MT3V0cHV0ICAgICAgICAgPT4gMCwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgKTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0KICAgICAgICAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0gKQogICAgICAgICAgICAuICc6JzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ID0gJFZhbHVlU3RyZy0+e1ZhbHVlfTsKCiAgICAgICAgJFJvdysrOwogICAgICAgICRPdXRwdXQgPSAxOwogICAgfQoKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gNDMxOwoKICAgICMgb3V0cHV0IEZBUSBkeW5hbWljIGZpZWxkcwogICAgaWYgKCRPdXRwdXQpIHsKCiAgICAgICAgIyBnZXQgUERGIG9iamVjdAogICAgICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgWSAgICA9PiAtMTUsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgICAgICBUZXh0ICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUSBEeW5hbWljIEZpZWxkcycpLAogICAgICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICBZICAgID0+IC00LAogICAgICAgICk7CgogICAgICAgICMgdGFibGUgcGFyYW1zCiAgICAgICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgPSAwOwogICAgICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICA9IDE7CiAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgICAgICMgb3V0cHV0IHRhYmxlCiAgICAgICAgUEFHRToKICAgICAgICBmb3IgKCAkUGFnZXtQYWdlQ291bnR9IC4uICRQYWdle01heFBhZ2VzfSApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCAlVGFibGVQYXJhbSwgKTsKCiAgICAgICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgICAgIGxhc3QgUEFHRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXB1dEZBUUNvbnRlbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHBhcmFtZXRlcnMKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhQYWdlRGF0YSBGQVFEYXRhKSkgewogICAgICAgIGlmICggISRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVGQVFEYXRhID0gJXsgJFBhcmFte0ZBUURhdGF9IH07CiAgICBteSAlUGFnZSAgICA9ICV7ICRQYXJhbXtQYWdlRGF0YX0gfTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCB0aGUgY29uZmlnIG9mIEZBUSBmaWVsZHMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgIG15ICVGaWVsZHM7CiAgICBOVU1CRVI6CiAgICBmb3IgbXkgJE51bWJlciAoIDEgLi4gNiApIHsKCiAgICAgICAgIyBnZXQgY29uZmlnIG9mIEZBUSBmaWVsZAogICAgICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoICdGQVE6Okl0ZW06OkZpZWxkJyAuICROdW1iZXIgKTsKCiAgICAgICAgIyBza2lwIG92ZXIgbm90IHNob3duIGZpZWxkcwogICAgICAgIG5leHQgTlVNQkVSIGlmICEkQ29uZmlnLT57U2hvd307CgogICAgICAgICMgc3RvcmUgb25seSB0aGUgY29uZmlnIG9mIGZpZWxkcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgICAgICRGaWVsZHN7ICJGaWVsZCIgLiAkTnVtYmVyIH0gPSAkQ29uZmlnOwogICAgfQoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzb3J0IHNob3duIGZpZWxkcyBieSBwcmlvcml0eQogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkICggc29ydCB7ICRGaWVsZHN7JGF9LT57UHJpb30gPD0+ICRGaWVsZHN7JGJ9LT57UHJpb30gfSBrZXlzICVGaWVsZHMgKSB7CgogICAgICAgICMgZ2V0IHRoZSBzdGF0ZSB0eXBlIGRhdGEgb2YgdGhpcyBmaWVsZAogICAgICAgIG15ICRTdGF0ZVR5cGVEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpLT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgICAgIE5hbWUgICA9PiAkRmllbGRzeyRGaWVsZH0tPntTaG93fSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGRvIG5vdCBzaG93IGZpZWxkcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgZ2l2ZW4gaW50ZXJmYWNlCiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJFBhcmFte0ludGVyZmFjZVN0YXRlc30tPnsgJFN0YXRlVHlwZURhdGEtPntTdGF0ZUlEfSB9OwoKICAgICAgICBteSAlVGFibGVQYXJhbTsKCiAgICAgICAgIyBjb252ZXJ0IEhUTUwgdG8gQVNDSUkKICAgICAgICBteSAkQXNjaWlGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9Bc2NpaSgKICAgICAgICAgICAgU3RyaW5nID0+ICRGQVFEYXRheyRGaWVsZH0sCiAgICAgICAgKTsKCiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WzBdWzBde0NvbnRlbnR9ID0gJEFzY2lpRmllbGQgfHwgJyc7CiAgICAgICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gNTExOwoKICAgICAgICAjIGdldCBQREYgb2JqZWN0CiAgICAgICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAgICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICBZICAgID0+IC0xNSwKICAgICAgICApOwoKICAgICAgICAjIHRyYW5zbGF0ZSB0aGUgZmllbGQgbmFtZSBhbmQgc3RhdGUKICAgICAgICBteSAkRmllbGROYW1lID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRmllbGRzeyRGaWVsZH0tPnsnQ2FwdGlvbid9ICkKICAgICAgICAgICAgLiAnICgnCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkU3RhdGVUeXBlRGF0YS0+e05hbWV9ICkKICAgICAgICAgICAgLiAnKSc7CgogICAgICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAgICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICAgICAgVGV4dCAgICAgPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgICAgICk7CgogICAgICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgWSAgICA9PiAtNCwKICAgICAgICApOwoKICAgICAgICAjIHRhYmxlIHBhcmFtcwogICAgICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgPSAnQ3V0JzsKICAgICAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNEREREREQnOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgPSAzOwoKICAgICAgICAjIG91dHB1dCB0YWJsZQogICAgICAgIFBBR0U6CiAgICAgICAgZm9yICggJFBhZ2V7UGFnZUNvdW50fSAuLiAkUGFnZXtNYXhQYWdlc30gKSB7CgogICAgICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgICAgICBsYXN0IFBBR0U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFSU1M7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgWE1MOjpSU1M6OlNpbXBsZUdlbiBxdygpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIHNldCBVc2VySUQgdG8gcm9vdCBiZWNhdXNlIGluIHB1YmxpYyBpbnRlcmZhY2UgdGhlcmUgaXMgbm8gdXNlcgogICAgJFNlbGYtPntVc2VySUR9ID0gMTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBSU1MgdHlwZQogICAgbXkgJFR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnVHlwZScgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkVHlwZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIFR5cGUgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIHR5cGUKICAgIGlmICggJFR5cGUgIX4gbXsgQ3JlYXRlZCB8IENoYW5nZWQgfCBUb3AxMCB9eG1zICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICJUeXBlIG11c3QgYmUgZWl0aGVyIExhc3RDcmVhdGUgb3IgTGFzdENoYW5nZSBvciBUb3AxMCEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgQEl0ZW1JRHM7CiAgICBteSAkVGl0bGU7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRGQVFPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIHNldCBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5ncwogICAgbXkgJEludGVyZmFjZSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICBOYW1lICAgPT4gJ3B1YmxpYycsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdGhlIFRvcC0xMCBGQVEgYXJ0aWNsZXMKICAgIGlmICggJFR5cGUgZXEgJ1RvcDEwJyApIHsKCiAgICAgICAgIyBpbnRlcmZhY2UgbmVlZHMgdG8gYmUgdGhlIGludGVyZmFjZSBuYW1lCiAgICAgICAgbXkgJFRvcDEwSXRlbUlEc1JlZiA9ICRGQVFPYmplY3QtPkZBUVRvcDEwR2V0KAogICAgICAgICAgICBJbnRlcmZhY2UgPT4gJEludGVyZmFjZS0+e05hbWV9LAogICAgICAgICAgICBMaW1pdCAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkV4cGxvcmVyOjpUb3AxMDo6TGltaXQnKSB8fCAxMCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApIHx8IFtdOwoKICAgICAgICBASXRlbUlEcyA9IG1hcCB7ICRfLT57SXRlbUlEfSB9IEB7JFRvcDEwSXRlbUlEc1JlZn07CgogICAgICAgICMgYnVpbGQgdGhlIHRpdGxlCiAgICAgICAgJFRpdGxlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdGQVEgQXJ0aWNsZXMgKFRvcCAxMCknKTsKICAgIH0KCiAgICAjIHNlYXJjaCB0aGUgRkFRIGFydGljbGVzCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgaW50ZXJmYWNlIHN0YXRlIGxpc3QKICAgICAgICBteSAkSW50ZXJmYWNlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgICAgICAgICAgVHlwZXMgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpQdWJsaWM6OlN0YXRlVHlwZXMnKSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGludGVyZmFjZSBuZWVkcyB0byBiZSBjb21wbGV0ZSBpbnRlcmZhY2UgaGFzaAogICAgICAgIEBJdGVtSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgICAgICAgICBTdGF0ZXMgICAgICAgICAgID0+ICRJbnRlcmZhY2VTdGF0ZXMsCiAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyRUeXBlXSwKICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJ0Rvd24nXSwKICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDIwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHRoZSB0aXRsZQogICAgICAgIGlmICggJFR5cGUgZXEgJ0NyZWF0ZWQnICkgewogICAgICAgICAgICAkVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUSBBcnRpY2xlcyAobmV3IGNyZWF0ZWQpJyk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFR5cGUgZXEgJ0NoYW5nZWQnICkgewogICAgICAgICAgICAkVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnRkFRIEFydGljbGVzIChyZWNlbnRseSBjaGFuZ2VkKScKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgUlNTIG9iamVjdCBvYmplY3QKICAgIG15ICRSU1NPYmplY3QgPSBYTUw6OlJTUzo6U2ltcGxlR2VuLT5uZXcoICdodHRwOi8vJyAuICRFTlZ7SFRUUF9IT1NUfSApOwoKICAgICMgZ2VuZXJhdGUgdGhlIFJTUyB0aXRsZQogICAgJFRpdGxlID0gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0TmFtZScpIC4gJyAnIC4gJFRpdGxlOwoKICAgICRSU1NPYmplY3QtPnRpdGxlKCRUaXRsZSk7CgogICAgIyBnZXQgdGhlIEZBUSBkYXRhCiAgICBmb3IgbXkgJEl0ZW1JRCAoQEl0ZW1JRHMpIHsKCiAgICAgICAgbXkgJUl0ZW1EYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgICAgICBJdGVtSUQgICAgID0+ICRJdGVtSUQsCiAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCBhIHByZXZpZXcgb2YgdGhlIGZpcnN0IHR3byBmaWVsZHMKICAgICAgICBteSAkUHJldmlldyA9ICcnOwogICAgICAgIGZvciBteSAkQ291bnQgKCAxIC4uIDIgKSB7CiAgICAgICAgICAgIGlmICggJEl0ZW1EYXRheyJGaWVsZCRDb3VudCJ9ICkgewogICAgICAgICAgICAgICAgJFByZXZpZXcgLj0gJEl0ZW1EYXRheyJGaWVsZCRDb3VudCJ9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNvbnZlcnQgcHJldmlldyB0byBBU0NJSQogICAgICAgICRQcmV2aWV3ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0FzY2lpKCBTdHJpbmcgPT4gJFByZXZpZXcgKTsKCiAgICAgICAgIyByZWR1Y2Ugc2l6ZSBvZiBwcmV2aWV3CiAgICAgICAgJFByZXZpZXcgPX4gc3sgXEEgKCAuezgwfSApIC4qIFx6IH17JDFcW1wuXC5cXX1neG1zOwoKICAgICAgICAjIGJ1aWxkIHRoZSBSU1MgaXRlbQogICAgICAgICRSU1NPYmplY3QtPml0ZW0oCiAgICAgICAgICAgICJodHRwOi8vJEVOVntIVFRQX0hPU1R9JExheW91dE9iamVjdC0+e0Jhc2VsaW5rfUFjdGlvbj1QdWJsaWNGQVFab29tJkl0ZW1JRD0kSXRlbUlEIiwKICAgICAgICAgICAgJEl0ZW1EYXRhe1RpdGxlfSwKICAgICAgICAgICAgJFByZXZpZXcsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNvbnZlcnQgdG8gc3RyaW5nCiAgICBteSAkT3V0cHV0ID0gJFJTU09iamVjdC0+YXNfc3RyaW5nKCk7CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJE91dHB1dCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ2FuJ3QgY3JlYXRlIFJTUyBmaWxlISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJldHVybiB0aGUgUlNTIGZlZWQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQveG1sJywKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTUlNRTo6QmFzZTY0IHF3KCk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBzZXQgVXNlcklEIHRvIHJvb3QgYmVjYXVzZSBpbiBwdWJsaWMgaW50ZXJmYWNlIHRoZXJlIGlzIG5vIHVzZXIKICAgICRTZWxmLT57VXNlcklEfSA9IDE7CgogICAgIyBnZXQgY29uZmlnIGZvciBmcm9udGVuZAogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJGQVE6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGNvbmZpZyBmb3IgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZEZpbHRlcn0gPSAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9OwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgRkFRIG9iamVjdAogICAgJFNlbGYtPntEeW5hbWljRmllbGR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJFNlbGYtPntEeW5hbWljRmllbGRGaWx0ZXJ9IHx8IHt9LAogICAgKTsKCiAgICAjIHJlZHVjZSB0aGUgZHluYW1pYyBmaWVsZHMgdG8gb25seSB0aGUgb25lcyB0aGF0IGFyZSBkZXNpZ25lZCBmb3IgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICBteSBAQ3VzdG9tZXJEeW5hbWljRmllbGRzOwogICAgRFlOQU1JQ0ZJRUxEQ09ORklHOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRENPTkZJRyBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgIG15ICRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlJywKICAgICAgICApOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEQ09ORklHIGlmICEkSXNDdXN0b21lckludGVyZmFjZUNhcGFibGU7CgogICAgICAgIHB1c2ggQEN1c3RvbWVyRHluYW1pY0ZpZWxkcywgJER5bmFtaWNGaWVsZENvbmZpZzsKICAgIH0KICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfSA9IFxAQ3VzdG9tZXJEeW5hbWljRmllbGRzOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdXRwdXQ7CgogICAgIyBnZXQgY29uZmlnIGZyb20gY29uc3RydWN0b3IKICAgIG15ICRDb25maWcgPSAkU2VsZi0+e0NvbmZpZ307CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgY29uZmlnIGRhdGEKICAgIG15ICRTdGFydEhpdCA9IGludCggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0SGl0JyApIHx8IDEgKTsKICAgIG15ICRTZWFyY2hMaW1pdCAgICAgPSAkQ29uZmlnLT57U2VhcmNoTGltaXR9ICAgICB8fCAyMDA7CiAgICBteSAkU2VhcmNoUGFnZVNob3duID0gJENvbmZpZy0+e1NlYXJjaFBhZ2VTaG93bn0gfHwgNDA7CiAgICBteSAkU29ydEJ5ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRDb25maWctPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnRkFRSUQnOwogICAgbXkgJE9yZGVyQnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXInICkKICAgICAgICB8fCAkQ29uZmlnLT57J09yZGVyOjpEZWZhdWx0J30KICAgICAgICB8fCAnRG93bic7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGJ1aWxkIG91dHB1dCBmb3Igb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gYnkgRkFRIG51bWJlcgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ09wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcicgKSB7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXInLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnT3BlblNlYXJjaERlc2NyaXB0aW9uRkFRTnVtYmVyLnhtbCcsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIG91dHB1dCBmb3Igb3BlbiBzZWFyY2ggZGVzY3JpcHRpb24gYnkgZnVsbC10ZXh0CiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQnICkgewogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnUHVibGljRkFRU2VhcmNoT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbFRleHQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnT3BlblNlYXJjaERlc2NyaXB0aW9uRnVsbHRleHQueG1sJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL29wZW5zZWFyY2hkZXNjcmlwdGlvbit4bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgICMgcmVtZW1iZXIgZXhjbHVkZSBhdHRyaWJ1dGVzCiAgICBteSBARXhjbHVkZXMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnRXhjbHVkZScgKTsKCiAgICBteSAlR2V0UGFyYW07CgogICAgIyBnZXQgc2luZ2xlIHBhcmFtcwogICAgZm9yIG15ICRQYXJhbU5hbWUgKAogICAgICAgIHF3KE51bWJlciBUaXRsZSBLZXl3b3JkIEZ1bGx0ZXh0IFJlc3VsdEZvcm0gVGltZVNlYXJjaFR5cGUgVm90ZVNlYXJjaCBWb3RlU2VhcmNoVHlwZQogICAgICAgIFZvdGVTZWFyY2hPcHRpb24gUmF0ZVNlYXJjaCBSYXRlU2VhcmNoVHlwZSBSYXRlU2VhcmNoT3B0aW9uCiAgICAgICAgSXRlbUNyZWF0ZVRpbWVQb2ludEZvcm1hdCBJdGVtQ3JlYXRlVGltZVBvaW50CiAgICAgICAgSXRlbUNyZWF0ZVRpbWVQb2ludFN0YXJ0CiAgICAgICAgSXRlbUNyZWF0ZVRpbWVTdGFydCBJdGVtQ3JlYXRlVGltZVN0YXJ0RGF5IEl0ZW1DcmVhdGVUaW1lU3RhcnRNb250aAogICAgICAgIEl0ZW1DcmVhdGVUaW1lU3RhcnRZZWFyCiAgICAgICAgSXRlbUNyZWF0ZVRpbWVTdG9wIEl0ZW1DcmVhdGVUaW1lU3RvcERheSBJdGVtQ3JlYXRlVGltZVN0b3BNb250aAogICAgICAgIEl0ZW1DcmVhdGVUaW1lU3RvcFllYXIKICAgICAgICApCiAgICAgICAgKQogICAgewoKICAgICAgICAjIGdldCBzZWFyY2ggc3RyaW5nIHBhcmFtcyAoZ2V0IHN1Ym1pdHRlZCBwYXJhbXMpCiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwoKICAgICAgICAjIHJlbW92ZSB3aGl0ZXNwYWNlIG9uIHRoZSBzdGFydCBhbmQgZW5kCiAgICAgICAgaWYgKCAkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9fiBzeyBcQSBccysgfXt9eG1zOwogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPX4gc3sgXHMrIFx6IH17fXhtczsKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgbm9uIGVtcHR5IHBhcmFtZXRlcnMgb24gYSBsb2NhbCBwcm9maWxlCiAgICAgICAgaWYgKCAkR2V0UGFyYW17JFBhcmFtTmFtZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT57UHJvZmlsZX0gLj0gIiRQYXJhbU5hbWU9JEdldFBhcmFteyRQYXJhbU5hbWV9OyI7CiAgICAgICAgfQoKICAgIH0KCiAgICAjIGdldCBiYWNrIGxpbmsKICAgICRHZXRQYXJhbXtTZWFyY2hCYWNrTGlua30gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VhcmNoQmFja0xpbmsnICkgfHwgJyc7CiAgICBpZiAoICRHZXRQYXJhbXtTZWFyY2hCYWNrTGlua30gKSB7CiAgICAgICAgJEdldFBhcmFte1NlYXJjaEJhY2tMaW5rfSA9IE1JTUU6OkJhc2U2NDo6ZGVjb2RlX2Jhc2U2NCggJEdldFBhcmFte1NlYXJjaEJhY2tMaW5rfSApOwogICAgfQoKICAgICMgc2hvdyBiYWNrIGxpbmsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0JhY2snLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBnZXQgYXJyYXkgcGFyYW1zCiAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoQ2F0ZWdvcnlJRHMgTGFuZ3VhZ2VJRHMgKSkgewoKICAgICAgICAjIGdldCBzZWFyY2ggYXJyYXkgcGFyYW1zIChnZXQgc3VibWl0dGVkIHBhcmFtcykKICAgICAgICBteSBAQXJyYXkgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICAgICAgaWYgKEBBcnJheSkgewogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSBcQEFycmF5OwoKICAgICAgICAgICAgIyBzdG9yZSBwYXJhbWV0ZXJzIG9uIGEgbG9jYWwgcHJvZmlsZQogICAgICAgICAgICBmb3IgbXkgJEVsZW1lbnQgKEBBcnJheSkgewogICAgICAgICAgICAgICAgJFNlbGYtPntQcm9maWxlfSAuPSAkUGFyYW1OYW1lIC4gJz0nIC4gJEVsZW1lbnQgLiAnOyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IER5bmFtaWMgZmllbGRzIGZyb20gcGFyYW0gb2JqZWN0CiAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEQ09ORklHOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEQ09ORklHIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICMgZ2V0IHNlYXJjaCBmaWVsZCBwcmVmZXJlbmNlcwogICAgICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRENPTkZJRyBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSB3ZWIgcmVxdWVzdAogICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZFZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFJldHVyblByb2ZpbGVTdHJ1Y3R1cmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCB0aGUgY29tcGxldGUgdmFsdWUgc3RydWN0dXJlIGluIEdldFBhcmFtIHRvIHN0b3JlIGl0IGxhdGVyIGluIHRoZSBzZWFyY2gKICAgICAgICAgICAgICAgICMgcHJvZmlsZQogICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkVmFsdWUpICkgewogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSA9ICggJUdldFBhcmFtLCAleyREeW5hbWljRmllbGRWYWx1ZX0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZCBkeW5hbWljIGZpZWxkcyB0byBwcm9maWxlIHRvIGluY2x1ZGUgdGhlbSBpbiB0aGUgYmFjay1saW5rCiAgICAgICAgICAgICAgICBLRVlJVEVNOgogICAgICAgICAgICAgICAgZm9yIG15ICRLZXlJdGVtICggc29ydCBrZXlzICV7JER5bmFtaWNGaWVsZFZhbHVlfSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHNjYWxhciB2YWx1ZXMgdG8gYXJyYXkgdG8gdXNlIHNhbWUgY29kZSBiYXNlCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkICREeW5hbWljRmllbGRWYWx1ZS0+eyRLZXlJdGVtfQogICAgICAgICAgICAgICAgICAgICAgICAmJiByZWYgJER5bmFtaWNGaWVsZFZhbHVlLT57JEtleUl0ZW19IGVxICcnCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRWYWx1ZS0+eyRLZXlJdGVtfSA9IFsgJER5bmFtaWNGaWVsZFZhbHVlLT57JEtleUl0ZW19IF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBuZXh0IEtFWUlURU0gaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSggJER5bmFtaWNGaWVsZFZhbHVlLT57JEtleUl0ZW19ICk7CgogICAgICAgICAgICAgICAgICAgICMgY29uY2F0ZW5hdGUgZHluYW1pYyBmaWVsZHMgdmFsdWVzIGludG8gdGhlIHByb2ZpbGUKICAgICAgICAgICAgICAgICAgICBWQUxVRUlURU06CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRWYWx1ZUl0ZW0gKCBAeyAkRHluYW1pY0ZpZWxkVmFsdWUtPnskS2V5SXRlbX0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBWQUxVRUlURU0gaWYgISRWYWx1ZUl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57UHJvZmlsZX0gLj0gIiRLZXlJdGVtPSRWYWx1ZUl0ZW07IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBpdGVtIG5lZWQgdG8gZ2V0IGV4Y2x1ZGVkCiAgICBmb3IgbXkgJEV4Y2x1ZGUgKEBFeGNsdWRlcykgewogICAgICAgIGlmICggJEdldFBhcmFteyRFeGNsdWRlfSApIHsKICAgICAgICAgICAgZGVsZXRlICRHZXRQYXJhbXskRXhjbHVkZX07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHZvdGUgb3B0aW9uCiAgICBpZiAoICEkR2V0UGFyYW17Vm90ZVNlYXJjaE9wdGlvbn0gKSB7CiAgICAgICAgJEdldFBhcmFteydWb3RlU2VhcmNoT3B0aW9uOjpOb25lJ30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQogICAgZWxzaWYgKCAkR2V0UGFyYW17Vm90ZVNlYXJjaE9wdGlvbn0gZXEgJ1ZvdGVQb2ludCcgKSB7CiAgICAgICAgJEdldFBhcmFteydWb3RlU2VhcmNoT3B0aW9uOjpWb3RlUG9pbnQnfSA9ICdjaGVja2VkPSJjaGVja2VkIic7CiAgICB9CgogICAgIyBnZXQgcmF0ZSBvcHRpb24KICAgIGlmICggISRHZXRQYXJhbXtSYXRlU2VhcmNoT3B0aW9ufSApIHsKICAgICAgICAkR2V0UGFyYW17J1JhdGVTZWFyY2hPcHRpb246Ok5vbmUnfSA9ICdjaGVja2VkPSJjaGVja2VkIic7CiAgICB9CiAgICBlbHNpZiAoICRHZXRQYXJhbXtSYXRlU2VhcmNoT3B0aW9ufSBlcSAnUmF0ZVBvaW50JyApIHsKICAgICAgICAkR2V0UGFyYW17J1JhdGVTZWFyY2hPcHRpb246OlJhdGVQb2ludCd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KCiAgICAjIGdldCB0aW1lIG9wdGlvbgogICAgaWYgKCAhJEdldFBhcmFte1RpbWVTZWFyY2hUeXBlfSApIHsKICAgICAgICAkR2V0UGFyYW17J1RpbWVTZWFyY2hUeXBlOjpOb25lJ30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQogICAgZWxzaWYgKCAkR2V0UGFyYW17VGltZVNlYXJjaFR5cGV9IGVxICdUaW1lUG9pbnQnICkgewogICAgICAgICRHZXRQYXJhbXsnVGltZVNlYXJjaFR5cGU6OlRpbWVQb2ludCd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KICAgIGVsc2lmICggJEdldFBhcmFte1RpbWVTZWFyY2hUeXBlfSBlcSAnVGltZVNsb3QnICkgewogICAgICAgICRHZXRQYXJhbXsnVGltZVNlYXJjaFR5cGU6OlRpbWVTbG90J30gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQoKICAgICMgc2V0IHJlc3VsdCBmb3JtIEVOVgogICAgaWYgKCAhJEdldFBhcmFte1Jlc3VsdEZvcm19ICkgewogICAgICAgICRHZXRQYXJhbXtSZXN1bHRGb3JtfSA9ICcnOwogICAgfQogICAgaWYgKCAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gZXEgJ1ByaW50JyApIHsKICAgICAgICAkU2VhcmNoUGFnZVNob3duID0gJFNlYXJjaExpbWl0OwogICAgfQoKICAgICMgY2hlY2sgcmVxdWVzdAogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ09wZW5TZWFyY2hEZXNjcmlwdGlvbicgKSB7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNGQVFTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24nLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ09wZW5TZWFyY2hEZXNjcmlwdGlvbi54bWwnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC94bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyByZXN1bHQgcGFnZQogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlYXJjaCcgJiYgISRTZWxmLT57RXJhc2VUZW1wbGF0ZX0gKSB7CgogICAgICAgICMgZHluYW1pYyBmaWVsZHMgc2VhcmNoIHBhcmFtZXRlcnMgZm9yIEZBUSBzZWFyY2gKICAgICAgICBteSAlRHluYW1pY0ZpZWxkU2VhcmNoUGFyYW1ldGVyczsKICAgICAgICBteSAlRHluYW1pY0ZpZWxkU2VhcmNoRGlzcGxheTsKCiAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEQ09ORklHOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEQ09ORklHIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICMgZ2V0IHNlYXJjaCBmaWVsZCBwcmVmZXJlbmNlcwogICAgICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRENPTkZJRyBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgID0+ICRQcmVmZXJlbmNlLT57VHlwZX0sCiAgICAgICAgICAgICAgICAgICAgUmV0dXJuUHJvZmlsZVN0cnVjdHVyZSA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCB0aGUgY29tcGxldGUgdmFsdWUgc3RydWN0dXJlIGluICVEeW5hbWljRmllbGRWYWx1ZXMgdG8gZGlzY2FyZCB0aG9zZSB3aGVyZSB0aGUKICAgICAgICAgICAgICAgICMgdmFsdWUgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gZ2V0CiAgICAgICAgICAgICAgICBuZXh0IFBSRUZFUkVOQ0UgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRWYWx1ZSk7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gdGhlIHByb2ZpbGUKICAgICAgICAgICAgICAgIG15ICRTZWFyY2hQYXJhbWV0ZXIgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRQYXJhbWV0ZXJCdWlsZCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQcm9maWxlICAgICAgICAgICAgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgPT4gJFByZWZlcmVuY2UtPntUeXBlfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgc2VhcmNoIHBhcmFtZXRlcgogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRTZWFyY2hQYXJhbWV0ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZFNlYXJjaFBhcmFtZXRlcnN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlYXJjaFBhcmFtZXRlci0+e1BhcmFtZXRlcn07CgogICAgICAgICAgICAgICAgICAgICMgc2V0IHZhbHVlIHRvIGRpc3BsYXkKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkU2VhcmNoRGlzcGxheXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgPSAkU2VhcmNoUGFyYW1ldGVyLT57RGlzcGxheX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcHJlcGFyZSBmdWxsLXRleHQgc2VhcmNoCiAgICAgICAgaWYgKCAkR2V0UGFyYW17RnVsbHRleHR9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17Q29udGVudFNlYXJjaH0gPSAnT1InOwogICAgICAgICAgICAkR2V0UGFyYW17V2hhdH0gICAgICAgICAgPSAkR2V0UGFyYW17RnVsbHRleHR9OwogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIHZvdGVzIHNlYXJjaAogICAgICAgIGlmICggSXNOdW1iZXIoICRHZXRQYXJhbXtWb3RlU2VhcmNofSApICYmICRHZXRQYXJhbXtWb3RlU2VhcmNoT3B0aW9ufSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1ZvdGVzfSA9IHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtWb3RlU2VhcmNoVHlwZX0gPT4gJEdldFBhcmFte1ZvdGVTZWFyY2h9CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIHByZXBhcmUgcmF0ZSBzZWFyY2gKICAgICAgICBpZiAoIElzTnVtYmVyKCAkR2V0UGFyYW17UmF0ZVNlYXJjaH0gKSAmJiAkR2V0UGFyYW17UmF0ZVNlYXJjaE9wdGlvbn0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtSYXRlfSA9IHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtSYXRlU2VhcmNoVHlwZX0gPT4gJEdldFBhcmFte1JhdGVTZWFyY2h9CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBteSAlVGltZU1hcCA9ICgKICAgICAgICAgICAgSXRlbUNyZWF0ZSA9PiAnVGltZScsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRUaW1lVHlwZSAoIHNvcnQga2V5cyAlVGltZU1hcCApIHsKCiAgICAgICAgICAgICMgZ2V0IGNyZWF0ZSB0aW1lIHNldHRpbmdzCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXsgJFRpbWVNYXB7JFRpbWVUeXBlfSAuICdTZWFyY2hUeXBlJyB9ICkgewoKICAgICAgICAgICAgICAgICMgZG8gbm90aGluZyB3aXRoIHRpbWUgc3R1ZmYKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVNYXB7JFRpbWVUeXBlfSAuICdTZWFyY2hUeXBlJyB9IGVxICdUaW1lU2xvdCcgKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAocXcoTW9udGggRGF5KSkgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydCcgLiAkS2V5IH0KICAgICAgICAgICAgICAgICAgICAgICAgPSBzcHJpbnRmKCAiJTAyZCIsICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydCcgLiAkS2V5IH0gKTsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcCcgLiAkS2V5IH0KICAgICAgICAgICAgICAgICAgICAgICAgPSBzcHJpbnRmKCAiJTAyZCIsICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wJyAuICRLZXkgfSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydERheScgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydE1vbnRoJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0WWVhcicgfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lTmV3ZXJEYXRlJyB9ID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0WWVhcicgfSAuICctJwogICAgICAgICAgICAgICAgICAgICAgICAuICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydE1vbnRoJyB9IC4gJy0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0RGF5JyB9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJyAwMDowMDowMCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BEYXknIH0KICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcE1vbnRoJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BZZWFyJyB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVPbGRlckRhdGUnIH0gPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcFllYXInIH0gLiAnLScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcE1vbnRoJyB9IC4gJy0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BEYXknIH0KICAgICAgICAgICAgICAgICAgICAgICAgLiAnIDIzOjU5OjU5JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVNYXB7JFRpbWVUeXBlfSAuICdTZWFyY2hUeXBlJyB9IGVxICdUaW1lUG9pbnQnICkgewogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludFN0YXJ0JyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRUaW1lID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAnbWludXRlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWUgPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9IGVxICdob3VyJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWUgPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH0gKiA2MDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ2RheScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9ICogNjAgKiAyNDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ3dlZWsnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfSAqIDYwICogMjQgKiA3OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAnbW9udGgnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfSAqIDYwICogMjQgKiAzMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ3llYXInICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfSAqIDYwICogMjQgKiAzNjU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50U3RhcnQnIH0gZXEgJ0JlZm9yZScgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIG1vcmUgdGhhbiAuLi4gYWdvCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVPbGRlck1pbnV0ZXMnIH0gPSAkVGltZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRTdGFydCcgfSBlcSAnTmV4dCcgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHdpdGhpbiBuZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVOZXdlck1pbnV0ZXMnIH0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lT2xkZXJNaW51dGVzJyB9ID0gLSRUaW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyB3aXRoaW4gbGFzdCAuLi4KICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU9sZGVyTWludXRlcycgfSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVOZXdlck1pbnV0ZXMnIH0gPSAkVGltZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICAgICAgbXkgJEZBUU9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgICAgICBteSAkSW50ZXJmYWNlID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlR2V0KAogICAgICAgICAgICBOYW1lICAgPT4gJ3B1YmxpYycsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBteSAkSW50ZXJmYWNlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgICAgICAgICAgVHlwZXMgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpQdWJsaWM6OlN0YXRlVHlwZXMnKSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHBlcmZvcm0gRkFRIHNlYXJjaAogICAgICAgIG15IEBWaWV3YWJsZUZBUUlEcyA9ICRGQVFPYmplY3QtPkZBUVNlYXJjaCgKICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICAgICA9PiBbJFNvcnRCeV0sCiAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gICAgPT4gWyRPcmRlckJ5XSwKICAgICAgICAgICAgTGltaXQgICAgICAgICAgICAgICA9PiAkU2VhcmNoTGltaXQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBTdGF0ZXMgICAgICAgICAgICAgID0+ICRJbnRlcmZhY2VTdGF0ZXMsCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgICAgPT4gJEludGVyZmFjZSwKICAgICAgICAgICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICAgICAgICAgIENvbnRlbnRTZWFyY2hTdWZmaXggPT4gJyonLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVEeW5hbWljRmllbGRTZWFyY2hQYXJhbWV0ZXJzLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IG11bHRpLWxhbmd1YWdlIG9wdGlvbgogICAgICAgIG15ICRNdWx0aUxhbmd1YWdlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6Ok11bHRpTGFuZ3VhZ2UnKTsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwogICAgICAgIG15ICRUaW1lT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKICAgICAgICAjIENTViBvdXRwdXQKICAgICAgICBpZiAoICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnQ1NWJyApIHsKICAgICAgICAgICAgbXkgQFRtcENTVkhlYWQ7CiAgICAgICAgICAgIG15IEBDU1ZIZWFkOwogICAgICAgICAgICBteSBAQ1NWRGF0YTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBGQVEgZHluYW1pYyBmaWVsZHMgZm9yIENTViBkaXNwbGF5CiAgICAgICAgICAgIG15ICRDU1ZEeW5hbWljRmllbGQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgICAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIE9iamVjdFR5cGUgID0+ICdGQVEnLAogICAgICAgICAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e1NlYXJjaENTVkR5bmFtaWNGaWVsZH0gfHwge30sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlZHVjZSB0aGUgZHluYW1pYyBmaWVsZHMgdG8gb25seSB0aGUgb25lcyB0aGF0IGFyZSBkZXNpZ25lZCBmb3IgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICAgICAgICAgIG15IEBDU1ZDdXN0b21lckR5bmFtaWNGaWVsZHM7CiAgICAgICAgICAgIERZTkFNSUNGSUVMRENPTkZJRzoKICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyRDU1ZEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTERDT05GSUcgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgICAgIG15ICRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRENPTkZJRyBpZiAhJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlOwoKICAgICAgICAgICAgICAgIHB1c2ggQENTVkN1c3RvbWVyRHluYW1pY0ZpZWxkcywgJER5bmFtaWNGaWVsZENvbmZpZzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ1NWRHluYW1pY0ZpZWxkID0gXEBDU1ZDdXN0b21lckR5bmFtaWNGaWVsZHM7CgogICAgICAgICAgICBmb3IgbXkgJEZBUUlEIChAVmlld2FibGVGQVFJRHMpIHsKCiAgICAgICAgICAgICAgICAjIGdldCBGQVEgZGF0YSBkZXRhaWxzCiAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGdldCBpbmZvIGZvciBDU1Ygb3V0cHV0CiAgICAgICAgICAgICAgICBteSAlQ1NWSW5mbyA9ICglRkFRRGF0YSk7CiAgICAgICAgICAgICAgICAkQ1NWSW5mb3tDaGFuZ2VkfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkZvcm1hdFRpbWVTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgJEZBUURhdGF7Q2hhbmdlZH0sCiAgICAgICAgICAgICAgICAgICAgJ0RhdGVGb3JtYXRMb25nJywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBDU1YgcXVvdGUKICAgICAgICAgICAgICAgIGlmICggIUBDU1ZIZWFkICkgewogICAgICAgICAgICAgICAgICAgIEBUbXBDU1ZIZWFkID0gcXcoIEZBUU51bWJlciBUaXRsZSBDYXRlZ29yeSk7CiAgICAgICAgICAgICAgICAgICAgQENTVkhlYWQgICAgPSBxdyggRkFRTnVtYmVyIFRpdGxlIENhdGVnb3J5KTsKCiAgICAgICAgICAgICAgICAgICAgIyBpbnNlcnQgbGFuZ3VhZ2UgaGVhZGVyCiAgICAgICAgICAgICAgICAgICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFRtcENTVkhlYWQsICdMYW5ndWFnZSc7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICAgICdMYW5ndWFnZSc7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCAgICAnQ2hhbmdlZCc7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAVG1wQ1NWSGVhZCwgJ0NoYW5nZWQnOwoKICAgICAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdGhlIHNlbGVjdGVkIGR5bmFtaWMgZmllbGRzIG9uIENWUyByZXN1bHRzCiAgICAgICAgICAgICAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskQ1NWRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9OwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gZXEgJyc7CgogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBUbXBDU1ZIZWFkLCAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICAgICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbXkgQERhdGE7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEhlYWRlciAoQENTVkhlYWQpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpZiBoZWFkZXIgaXMgYSBkeW5hbWljIGZpZWxkIGFuZCBnZXQgdGhlIHZhbHVlIGZyb20gZHluYW1pYyBmaWVsZAogICAgICAgICAgICAgICAgICAgICMgYmFja2VuZAogICAgICAgICAgICAgICAgICAgIGlmICggJEhlYWRlciA9fiBte1xBIER5bmFtaWNGaWVsZF8gKCBbYS16QS1aXGRdKyApIFx6fXhtcyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgbG9vcCBvdmVyIHRoZSBkeW5hbWljIGZpZWxkcyBjb25maWd1cmVkIGZvciBDU1Ygb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyRDU1ZEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNraXAgYWxsIGZpZWxkcyB0aGF0IGRvZXMgbm90IG1hdGNoIHdpdGggY3VycmVudCBmaWVsZCBuYW1lICgkMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2l0aCBvdXQgdGhlICdEeW5hbWljRmllbGRfJyBwcmVmaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSBuZSAkMTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgdmFsdWUgYXMgZm9yIHByaW50ICh0byBjb3JyZWN0bHkgZGlzcGxheSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkQ1NWSW5mb3skSGVhZGVyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MT3V0cHV0ICAgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBEYXRhLCAkVmFsdWVTdHJnLT57VmFsdWV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVybWluYXRlIHRoZSBEWU5BTUlDRklFTEQgbG9vcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBEWU5BTUlDRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIHJldHJpZXZlIGRhdGEgZnJvbSBGQVEgaXRlbQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRIZWFkZXIgZXEgJ0ZBUU51bWJlcicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBEYXRhLCAkQ1NWSW5mb3snTnVtYmVyJ307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkSGVhZGVyIGVxICdDYXRlZ29yeScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBEYXRhLCAkQ1NWSW5mb3snQ2F0ZWdvcnlOYW1lJ307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBEYXRhLCAkQ1NWSW5mb3skSGVhZGVyfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2ggQENTVkRhdGEsIFxARGF0YTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBDU1YgcXVvdGUKICAgICAgICAgICAgIyB0cmFuc2xhdGUgbm9uIGV4aXN0aW5nIGhlYWRlciBtYXkgcmVzdWx0IGluIGEgZ2FyYmFnZSBmaWxlCiAgICAgICAgICAgIGlmICggIUBDU1ZIZWFkICkgewogICAgICAgICAgICAgICAgQFRtcENTVkhlYWQgPSBxdyhGQVFOdW1iZXIgVGl0bGUgQ2F0ZWdvcnkpOwogICAgICAgICAgICAgICAgQENTVkhlYWQgICAgPSBxdyhGQVFOdW1iZXIgVGl0bGUgQ2F0ZWdvcnkpOwoKICAgICAgICAgICAgICAgICMgaW5zZXJ0IGxhbmd1YWdlIGhlYWRlcgogICAgICAgICAgICAgICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAVG1wQ1NWSGVhZCwgJ0xhbmd1YWdlJzsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCAgICAnTGFuZ3VhZ2UnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQFRtcENTVkhlYWQsICdDaGFuZ2VkJzsKICAgICAgICAgICAgICAgIHB1c2ggQENTVkhlYWQsICAgICdDaGFuZ2VkJzsKCiAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdGhlIHNlbGVjdGVkIGR5bmFtaWMgZmllbGRzIG9uIENTViByZXN1bHRzCiAgICAgICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JENTVkR5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IGVxICcnOwoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBUbXBDU1ZIZWFkLCAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ1NWSGVhZCwgICAgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB0cmFuc2xhdGUgaGVhZGVycwogICAgICAgICAgICBmb3IgbXkgJEhlYWRlciAoQENTVkhlYWQpIHsKCiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgRkFRTnVtYmVyIGhlYWRlciB3aXRoIHRoZSBjdXJyZW50IEZBUUhvb2sgZnJvbSBjb25maWcKICAgICAgICAgICAgICAgIGlmICggJEhlYWRlciBlcSAnRkFRTnVtYmVyJyApIHsKICAgICAgICAgICAgICAgICAgICAkSGVhZGVyID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkZBUUhvb2snKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRIZWFkZXIgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJEhlYWRlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYXNzZW1ibGUgQ1NWIGRhdGEKICAgICAgICAgICAgbXkgJENTViA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDU1YnKS0+QXJyYXkyQ1NWKAogICAgICAgICAgICAgICAgSGVhZCAgICAgID0+IFxAQ1NWSGVhZCwKICAgICAgICAgICAgICAgIERhdGEgICAgICA9PiBcQENTVkRhdGEsCiAgICAgICAgICAgICAgICBTZXBhcmF0b3IgPT4gJFNlbGYtPntVc2VyQ1NWU2VwYXJhdG9yfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmV0dXJuIENTViB0byBkb3dubG9hZAogICAgICAgICAgICBteSAkQ1NWRmlsZSA9ICdGQVFfc2VhcmNoJzsKICAgICAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTSA9IHNwcmludGYoICIlMDJkIiwgJE0gKTsKICAgICAgICAgICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAgICAgICAgICRoID0gc3ByaW50ZiggIiUwMmQiLCAkaCApOwogICAgICAgICAgICAkbSA9IHNwcmludGYoICIlMDJkIiwgJG0gKTsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAkQ1NWRmlsZSAuICJfIiAuICIkWS0kTS0kRCIgLiAiXyIgLiAiJGgtJG0uY3N2IiwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJ0ZXh0L2NzdjsgY2hhcnNldD0iIC4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRDU1YsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdQcmludCcgKSB7CgogICAgICAgICAgICAjIGdldCBQREYgb2JqZWN0CiAgICAgICAgICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgICAgICAgICBteSBAUERGRGF0YTsKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEgZGV0YWlscwogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGFkZCB0YWJsZSBibG9jawogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHslRkFRRGF0YX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYWRkIGxhbmd1YWdlIGRhdGEKICAgICAgICAgICAgICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmRMYW5ndWFnZScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2V0IGNoYW5nZSBkYXRlIHRvIGxvbmcgZm9ybWF0CiAgICAgICAgICAgICAgICBteSAkQ2hhbmdlZCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkZvcm1hdFRpbWVTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgJEZBUURhdGF7Q2hhbmdlZH0sCiAgICAgICAgICAgICAgICAgICAgJ0RhdGVGb3JtYXRMb25nJywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgUERGIFJvd3MKICAgICAgICAgICAgICAgIG15IEBQREZSb3c7CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICRGQVFEYXRhe051bWJlcn07CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICRGQVFEYXRhe1RpdGxlfTsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgJEZBUURhdGF7Q2F0ZWdvcnlOYW1lfTsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBsYW5ndWFnZSByb3cKICAgICAgICAgICAgICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgJEZBUURhdGF7TGFuZ3VhZ2V9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRGQVFEYXRhe1N0YXRlfTsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRDaGFuZ2VkOwogICAgICAgICAgICAgICAgcHVzaCBAUERGRGF0YSwgXEBQREZSb3c7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgUERGIE91dHB1dAogICAgICAgICAgICBteSAkVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUScpIC4gJyAnCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU2VhcmNoJyk7CiAgICAgICAgICAgIG15ICRQYWdlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdQYWdlJyk7CiAgICAgICAgICAgIG15ICRUaW1lID0gJExheW91dE9iamVjdC0+e1RpbWV9OwoKICAgICAgICAgICAgIyBnZXQgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKICAgICAgICAgICAgbXkgJE1heFBhZ2VzID0gJENvbmZpZ09iamVjdC0+R2V0KCdQREY6Ok1heFBhZ2VzJyk7CiAgICAgICAgICAgIGlmICggISRNYXhQYWdlcyB8fCAkTWF4UGFnZXMgPCAxIHx8ICRNYXhQYWdlcyA+IDEwMDAgKSB7CiAgICAgICAgICAgICAgICAkTWF4UGFnZXMgPSAxMDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRDZWxsRGF0YTsKCiAgICAgICAgICAgICMgb3V0cHV0ICdObyBSZXN1bHQnLCBpZiBubyBjb250ZW50IHdhcyBnaXZlbgogICAgICAgICAgICBpZiAoQFBERkRhdGEpIHsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgaGVhZGVyCiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzBdLT57Q29udGVudH0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6RkFRSG9vaycpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlswXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsxXS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdUaXRsZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsxXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsyXS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDYXRlZ29yeScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsyXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwoKICAgICAgICAgICAgICAgICMgc3RvcmUgdGhlIGNvcnJlY3QgaGVhZGVyIGluZGV4CiAgICAgICAgICAgICAgICBteSAkTmV4dEhlYWRlckluZGV4ID0gMzsKCiAgICAgICAgICAgICAgICAjIGFkZCBsYW5ndWFnZSBoZWFkZXIKICAgICAgICAgICAgICAgIGlmICgkTXVsdGlMYW5ndWFnZSkgewogICAgICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bM10tPntDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTGFuZ3VhZ2UnKTsKICAgICAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzNdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAgICAgJE5leHRIZWFkZXJJbmRleCAgICAgICAgICAgICAgID0gNDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WyROZXh0SGVhZGVySW5kZXhdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1N0YXRlJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WyROZXh0SGVhZGVySW5kZXhdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CgogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsgJE5leHRIZWFkZXJJbmRleCArIDEgXS0+e0NvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NoYW5nZWQnKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bICROZXh0SGVhZGVySW5kZXggKyAxIF0tPntGb250fSA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgY29udGVudCBhcnJheQogICAgICAgICAgICAgICAgbXkgJENvdW50ZXJSb3cgPSAxOwogICAgICAgICAgICAgICAgZm9yIG15ICRSb3cgKEBQREZEYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENvdW50ZXJDb2x1bW4gPSAwOwogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ29udGVudCAoIEB7JFJvd30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WyRDb3VudGVyUm93XS0+WyRDb3VudGVyQ29sdW1uXS0+e0NvbnRlbnR9ID0gJENvbnRlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICRDb3VudGVyQ29sdW1uKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRDb3VudGVyUm93Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzBdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ05vIFJlc3VsdCEnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwYWdlIHBhcmFtcwogICAgICAgICAgICBteSAlUGFnZVBhcmFtOwogICAgICAgICAgICAkUGFnZVBhcmFte1BhZ2VPcmllbnRhdGlvbn0gPSAnbGFuZHNjYXBlJzsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5Ub3B9ICAgICAgID0gMzA7CiAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luUmlnaHR9ICAgICA9IDQwOwogICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpbkJvdHRvbX0gICAgPSA0MDsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5MZWZ0fSAgICAgID0gNDA7CiAgICAgICAgICAgICRQYWdlUGFyYW17SGVhZGVyUmlnaHR9ICAgICA9ICRUaXRsZTsKCiAgICAgICAgICAgICMgdGFibGUgcGFyYW1zCiAgICAgICAgICAgIG15ICVUYWJsZVBhcmFtOwogICAgICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX0gICAgICAgICAgICA9ICRDZWxsRGF0YTsKICAgICAgICAgICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICAgICAgICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgPSA2OwogICAgICAgICAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICA9IDA7CiAgICAgICAgICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvckV2ZW59ID0gJyNEREREREQnOwogICAgICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICA9IDE7CiAgICAgICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgID0gMzsKICAgICAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgPSAzOwoKICAgICAgICAgICAgIyBjcmVhdGUgbmV3IFBERiBkb2N1bWVudAogICAgICAgICAgICAkUERGT2JqZWN0LT5Eb2N1bWVudE5ldygKICAgICAgICAgICAgICAgIFRpdGxlICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Byb2R1Y3QnKSAuICc6ICcgLiAkVGl0bGUsCiAgICAgICAgICAgICAgICBFbmNvZGUgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc3RhcnQgdGFibGUgb3V0cHV0CiAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAlUGFnZVBhcmFtLAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2UgLiAnIDEnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgICAgIFkgICAgPT4gLTYsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCB0aXRsZQogICAgICAgICAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgICAgICAgICAgVGV4dCAgICAgPT4gJFRpdGxlLAogICAgICAgICAgICAgICAgRm9udFNpemUgPT4gMTMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICAgICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgICAgICAgICAgWSAgICA9PiAtNiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0ICJwcmludGVkIGJ5IgogICAgICAgICAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgICAgICAgICAgVGV4dCAgICAgPT4gJFRpbWUsCiAgICAgICAgICAgICAgICBGb250U2l6ZSA9PiA5LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgICAgIFkgICAgPT4gLTE0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgUEFHRToKICAgICAgICAgICAgZm9yIG15ICRQYWdlQ291bnQgKCAyIC4uICRNYXhQYWdlcyApIHsKCiAgICAgICAgICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAgICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoICVUYWJsZVBhcmFtLCApOwoKICAgICAgICAgICAgICAgICMgc3RvcCBvdXRwdXQgb3IgYW5vdGhlciBwYWdlCiAgICAgICAgICAgICAgICBpZiAoICRUYWJsZVBhcmFte1N0YXRlfSApIHsKICAgICAgICAgICAgICAgICAgICBsYXN0IFBBR0U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgICAgICAgICAlUGFnZVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZSAuICcgJyAuICRQYWdlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZXR1cm4gdGhlIFBERiBkb2N1bWVudAogICAgICAgICAgICBteSAkRmlsZW5hbWUgPSAnRkFRX3NlYXJjaCc7CiAgICAgICAgICAgIG15ICggJHMsICRtLCAkaCwgJEQsICRNLCAkWSApID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CiAgICAgICAgICAgIG15ICRQREZTdHJpbmcgPSAkUERGT2JqZWN0LT5Eb2N1bWVudE91dHB1dCgpOwogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSAuICJfIiAuICIkWS0kTS0kRCIgLiAiXyIgLiAiJGgtJG0ucGRmIiwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJhcHBsaWNhdGlvbi9wZGYiLAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICApOwoKICAgICAgICB9CgogICAgICAgIG15ICRDb3VudGVyID0gMDsKCiAgICAgICAgIyBpZiB0aGVyZSBhcmUgcmVzdWx0cyB0byBzaG93CiAgICAgICAgaWYgKEBWaWV3YWJsZUZBUUlEcykgewoKICAgICAgICAgICAgIyBjcmVhdGUgYmFjayBsaW5rIGZvciBGQVEgWm9vbSBzY3JlZW4KICAgICAgICAgICAgbXkgJFpvb21CYWNrTGluayA9ICJBY3Rpb249UHVibGljRkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7IgogICAgICAgICAgICAgICAgLiAkU2VsZi0+e1Byb2ZpbGV9CiAgICAgICAgICAgICAgICAuICJTb3J0Qnk9JFNvcnRCeTtPcmRlcj0kT3JkZXJCeTtTdGFydEhpdD0kU3RhcnRIaXQiOwoKICAgICAgICAgICAgIyBlbmNvZGUgYmFjayBsaW5rIHRvIEJhc2U2NCBmb3IgZWFzeSBIVE1MIHRyYW5zcG9ydAogICAgICAgICAgICAkWm9vbUJhY2tMaW5rID0gTUlNRTo6QmFzZTY0OjplbmNvZGVfYmFzZTY0KCRab29tQmFja0xpbmspOwoKICAgICAgICAgICAgbXkgJE92ZXJ2aWV3Q29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFPdmVydmlldyIpOwoKICAgICAgICAgICAgIyBnZXQgdGhlIHRpY2tldCBkeW5hbWljIGZpZWxkcyBmb3Igb3ZlcnZpZXcgZGlzcGxheQogICAgICAgICAgICBteSAkT3ZlcnZpZXdEeW5hbWljRmllbGQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgICAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIE9iamVjdFR5cGUgID0+ICdGQVEnLAogICAgICAgICAgICAgICAgRmllbGRGaWx0ZXIgPT4gJE92ZXJ2aWV3Q29uZmlnLT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVkdWNlIHRoZSBkeW5hbWljIGZpZWxkcyB0byBvbmx5IHRoZSBvbmVzIHRoYXQgYXJlIGRlc2lnbmVkIGZvciBjdXN0b21lciBpbnRlcmZhY2UKICAgICAgICAgICAgbXkgQE92ZXJ2aWV3Q3VzdG9tZXJEeW5hbWljRmllbGRzOwogICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskT3ZlcnZpZXdEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgICAgIG15ICRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlOwoKICAgICAgICAgICAgICAgIHB1c2ggQE92ZXJ2aWV3Q3VzdG9tZXJEeW5hbWljRmllbGRzLCAkRHluYW1pY0ZpZWxkQ29uZmlnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRPdmVydmlld0R5bmFtaWNGaWVsZCA9IFxAT3ZlcnZpZXdDdXN0b21lckR5bmFtaWNGaWVsZHM7CgogICAgICAgICAgICAjIER5bmFtaWMgZmllbGRzIHRhYmxlIGhlYWRlcnMKICAgICAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyRPdmVydmlld0R5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAgICAgbXkgJExhYmVsID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfTsKCiAgICAgICAgICAgICAgICAjIGdldCBmaWVsZCBzb3J0YWJsZSBjb25kaXRpb24KICAgICAgICAgICAgICAgIG15ICRJc1NvcnRhYmxlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNTb3J0YWJsZScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICgkSXNTb3J0YWJsZSkgewogICAgICAgICAgICAgICAgICAgIG15ICRDU1MgICA9ICcnOwogICAgICAgICAgICAgICAgICAgIG15ICRPcmRlciA9ICdEb3duJzsKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRTb3J0QnkKICAgICAgICAgICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNvcnRCeSBlcQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntPcmRlcn0gJiYgKCAkU2VsZi0+e09yZGVyfSBlcSAnVXAnICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3JkZXIgPSAnRG93bic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydEFzY2VuZGluZyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3JkZXIgPSAnVXAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENTUyAuPSAnIFNvcnREZXNjZW5kaW5nJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckR5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTID0+ICRDU1MsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckR5bmFtaWNGaWVsZFNvcnRhYmxlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciAgICAgICAgICAgID0+ICRPcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsICAgICAgICAgICAgPT4gJExhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkTmFtZSA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckR5bmFtaWNGaWVsZE5vdFNvcnRhYmxlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoQFZpZXdhYmxlRkFRSURzKSB7CgogICAgICAgICAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHNlYXJjaCByZXN1bHQKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkQ291bnRlciA+PSAkU3RhcnRIaXQKICAgICAgICAgICAgICAgICAgICAmJiAkQ291bnRlciA8ICggJFNlYXJjaFBhZ2VTaG93biArICRTdGFydEhpdCApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCBGQVEgZGF0YSBkZXRhaWxzCiAgICAgICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJEZBUURhdGF7Q2xlYW5UaXRsZX0gPSAkRkFRT2JqZWN0LT5GQVFBcnRpY2xlVGl0bGVDbGVhbigKICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZBUURhdGF7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICBTaXplICA9PiAkQ29uZmlnLT57VGl0bGVTaXplfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBibG9ja3MgdG8gdGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpvb21CYWNrTGluayA9PiAkWm9vbUJhY2tMaW5rLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgYWRkIGxhbmd1YWdlIGRhdGEKICAgICAgICAgICAgICAgICAgICBpZiAoJE11bHRpTGFuZ3VhZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmRMYW5ndWFnZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHslRkFRRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIER5bmFtaWMgZmllbGRzCiAgICAgICAgICAgICAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgICAgICAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskT3ZlcnZpZXdEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGdldCBmaWVsZCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRGQVFEYXRheyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlTWF4Q2hhcnMgICAgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIHNob3cgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJyApOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgYSBsb29rdXAgdGFibGUgZm9yIGF0dHJpYnV0ZSBzZXR0aW5ncwogICAgICAgIG15ICVBdHRyaWJ1dGVNYXAgPSAoCiAgICAgICAgICAgIE51bWJlciA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkZBUUhvb2snKSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZSA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBUaXRsZSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1RpdGxlJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBLZXl3b3JkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnS2V5d29yZCcsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRnVsbHRleHQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdGdWxsdGV4dCcsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRHMgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdDYXRlZ29yeScsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTGFuZ3VhZ2VJRHMgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVGltZVNlYXJjaFR5cGUgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdDcmVhdGUgVGltZScsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVm90ZVNlYXJjaFR5cGUgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdWb3RlcycsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmF0ZVNlYXJjaFR5cGUgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdSYXRlJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgcHJpbnQgZWFjaCBhdHRyaWJ1dGUgaW4gc2VhcmNoIHJlc3VsdHMgYXJlYS4KICAgICAgICBBVFRSSUJVVEU6CiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJUF0dHJpYnV0ZU1hcCApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSB3YXMgZGVmaW5lZCBieSB0aGUgdXNlcgogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskQXR0cmlidXRlfSApIHsKCiAgICAgICAgICAgICAgICAjIHNldCBhdHRyaWJ1dGUgbmFtZSBhbmQgdHJhbnNsYXRlIGl0IGlmIGFwcGxpZXMKICAgICAgICAgICAgICAgIG15ICRBdHRyaWJ1dGVOYW1lID0gJEF0dHJpYnV0ZU1hcHskQXR0cmlidXRlfS0+e05hbWV9OwogICAgICAgICAgICAgICAgaWYgKCAkQXR0cmlidXRlTWFweyRBdHRyaWJ1dGV9LT57VHJhbnNsYXRhYmxlfSApIHsKICAgICAgICAgICAgICAgICAgICAkQXR0cmlidXRlTmFtZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkQXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEF0dHJpYnV0ZVZhbHVlOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIHZhbHVlcyBpcyBhbiBhcnJheSB0byBwYXJzZSBlYWNoIHZhbHVlCiAgICAgICAgICAgICAgICBpZiAoIHJlZiAkR2V0UGFyYW17JEF0dHJpYnV0ZX0gZXEgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBDYXRlZ29yeSBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGUgZXEgJ0NhdGVnb3J5SURzJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBsb25nIG5hbWUgZm9yIGFsbCBwdWJsaWMgY2F0ZWdvcmllcwogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ2F0ZWdvcnlMaXN0ID0gJEZBUU9iamVjdC0+R2V0UHVibGljQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgZWFjaCBjYXRlZ29yeSBpZCB0byBjYXRlZ29yeSBsb25nIG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgbXkgQENhdGVnb3J5TmFtZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIENBVEVHT1JZSUQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ2F0ZWRvcnlJRCAoIEB7ICRHZXRQYXJhbXskQXR0cmlidXRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBDQVRFR09SWUlEIGlmICEkQ2F0ZWdvcnlMaXN0LT57JENhdGVkb3J5SUR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ2F0ZWdvcnlOYW1lcywgJENhdGVnb3J5TGlzdC0+eyRDYXRlZG9yeUlEfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBzdHJpbmcgd2l0aCBhbGwgc2VsZWN0ZWQgY2F0ZWdvcnkgbmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZVZhbHVlID0gam9pbiggIiArICIsIEBDYXRlZ29yeU5hbWVzICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIExhbmd1YWdlSURzCiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdMYW5ndWFnZUlEcycgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgZWFjaCBsYW5ndWFnZSBpZCB0byBsYW5ndWFnZSBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIG15IEBMYW5ndWFnZU5hbWVzOwogICAgICAgICAgICAgICAgICAgICAgICBMQU5HVUFHRUlEOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJExhbmd1YWdlSUQgKCBAeyAkR2V0UGFyYW17JEF0dHJpYnV0ZX0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRMYW5ndWFnZU5hbWUgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZUlEID0+ICRMYW5ndWFnZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgTEFOR1VBR0VJRCBpZiAhJExhbmd1YWdlTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQExhbmd1YWdlTmFtZXMsICRMYW5ndWFnZU5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBzdHJpbmcgd2l0aCBhbGwgc2VsZWN0ZWQgbGFuZ3VhZ2UgbmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZVZhbHVlID0gam9pbiggIiArICIsIEBMYW5ndWFnZU5hbWVzICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIGlzIGFuIHNjYWxhciBhbmQgY2FuIGJlIHNldCBkaXJlY3RseQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZVZhbHVlID0gJEdldFBhcmFteyRBdHRyaWJ1dGV9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGUgZXEgJ1RpbWVTZWFyY2hUeXBlJyApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17VGltZVNlYXJjaFR5cGV9IGVxICdUaW1lU2xvdCcgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBteSAkU3RhcnREYXRlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtJdGVtQ3JlYXRlVGltZVN0YXJ0WWVhcn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICctJyAuICRHZXRQYXJhbXtJdGVtQ3JlYXRlVGltZVN0YXJ0TW9udGh9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnLScgLiAkR2V0UGFyYW17SXRlbUNyZWF0ZVRpbWVTdGFydERheX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcgMDA6MDA6MDAnLCAnRGF0ZUZvcm1hdFNob3J0JwogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFN0b3BEYXRlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtJdGVtQ3JlYXRlVGltZVN0b3BZZWFyfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJy0nIC4gJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lU3RvcE1vbnRofQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJy0nIC4gJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lU3RvcERheX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcgMDA6MDA6MDAnLCAnRGF0ZUZvcm1hdFNob3J0JwogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZSAgICAgID0gJ0NyZWF0ZWQgYmV0d2Vlbic7CiAgICAgICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVWYWx1ZSA9ICRTdGFydERhdGUgLiAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdhbmQnKSAuICcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkU3RvcERhdGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJE1hcHBpbmcgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGFzdCcgICA9PiAnQ3JlYXRlZCB3aXRoaW4gdGhlIGxhc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JlZm9yZScgPT4gJ0NyZWF0ZWQgbW9yZSB0aGFuIC4uLiBhZ28nLAogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZSAgICAgID0gJE1hcHBpbmctPnsgJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnRTdGFydH0gfTsKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZVZhbHVlID0gJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnR9IC4gJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEdldFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnRGb3JtYXR9IC4gJyhzKScgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRBdHRyaWJ1dGUgZXEgJ1ZvdGVTZWFyY2hUeXBlJyApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJEdldFBhcmFte1ZvdGVTZWFyY2hPcHRpb259OwogICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVWYWx1ZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkdldCggJEdldFBhcmFte1ZvdGVTZWFyY2hUeXBlfSApIC4gJyAnCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEdldFBhcmFte1ZvdGVTZWFyY2h9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdSYXRlU2VhcmNoVHlwZScgKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRHZXRQYXJhbXtSYXRlU2VhcmNoT3B0aW9ufTsKICAgICAgICAgICAgICAgICAgICAkQXR0cmlidXRlVmFsdWUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRHZXRQYXJhbXtSYXRlU2VhcmNoVHlwZX0gKSAuICcgJwogICAgICAgICAgICAgICAgICAgICAgICAuICRHZXRQYXJhbXtSYXRlU2VhcmNofSAuICclJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZWFyY2hUZXJtcycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAkQXR0cmlidXRlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRBdHRyaWJ1dGVWYWx1ZSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgaWYgKCAhJER5bmFtaWNGaWVsZFNlYXJjaERpc3BsYXl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VhcmNoVGVybXMnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlID0+ICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZFNlYXJjaERpc3BsYXl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgc2VhcmNoIG5hdmlnYXRpb24gYmFyCiAgICAgICAgbXkgJVBhZ2VOYXYgPSAkTGF5b3V0T2JqZWN0LT5QYWdlTmF2QmFyKAogICAgICAgICAgICBMaW1pdCAgICAgPT4gJFNlYXJjaExpbWl0LAogICAgICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgICAgICBQYWdlU2hvd24gPT4gJFNlYXJjaFBhZ2VTaG93biwKICAgICAgICAgICAgQWxsSGl0cyAgID0+ICRDb3VudGVyLAogICAgICAgICAgICBBY3Rpb24gICAgPT4gIkFjdGlvbj1QdWJsaWNGQVFTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaCIsCiAgICAgICAgICAgIExpbmsgPT4KICAgICAgICAgICAgICAgICIkU2VsZi0+e1Byb2ZpbGV9U29ydEJ5PSRTb3J0Qnk7T3JkZXI9JE9yZGVyQnk7IiwKICAgICAgICAgICAgSURQcmVmaXggPT4gIlB1YmxpY0ZBUVNlYXJjaCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGZvb3RlciBmaWx0ZXIgLSBzaG93IG9ubHkgaWYgbW9yZSB0aGUgb25lIHBhZ2UgaXMgYXZhaWxhYmxlCiAgICAgICAgaWYgKCBkZWZpbmVkICRQYWdlTmF2e1RvdGFsSGl0c30gJiYgKCAkUGFnZU5hdntUb3RhbEhpdHN9ID4gJFNlYXJjaFBhZ2VTaG93biApICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1BhZ2luYXRpb24nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc3RhcnQgSFRNTCBwYWdlCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVySGVhZGVyKCk7CgogICAgICAgICNTZXQgdGhlIFNvcnRCeSBDbGFzcwogICAgICAgIG15ICRTb3J0Q2xhc3M7CgogICAgICAgICMgdGhpcyBzZXRzIHRoZSBvcHBvc2l0ZSB0byB0aGUgT3JkZXJCeSBwYXJhbWV0ZXIKICAgICAgICBpZiAoICRPcmRlckJ5IGVxICdEb3duJyApIHsKICAgICAgICAgICAgJFNvcnRDbGFzcyA9ICdTb3J0QXNjZW5kaW5nJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkT3JkZXJCeSBlcSAnVXAnICkgewogICAgICAgICAgICAkU29ydENsYXNzID0gJ1NvcnREZXNjZW5kaW5nJzsKICAgICAgICB9CgogICAgICAgICMgc2V0IHRoZSBTb3J0QnkgQ2xhc3MgdG8gdGhlIGNvcnJlY3QgZmllbGQKICAgICAgICBteSAlQ1NTU29ydDsKICAgICAgICBteSAkQ1NTU29ydEJ5ID0gJFNvcnRCeSAuICdTb3J0JzsKICAgICAgICAkQ1NTU29ydHskQ1NTU29ydEJ5fSA9ICRTb3J0Q2xhc3M7CgogICAgICAgIG15ICVOZXdPcmRlciA9ICgKICAgICAgICAgICAgRG93biA9PiAnVXAnLAogICAgICAgICAgICBVcCAgID0+ICdEb3duJywKICAgICAgICApOwoKICAgICAgICAjIHNob3cgbGFuZ3VhZ2UgaGVhZGVyCiAgICAgICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICVDU1NTb3J0LAogICAgICAgICAgICAgICAgICAgIE9yZGVyID0+ICROZXdPcmRlcnskT3JkZXJCeX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnUHVibGljRkFRU2VhcmNoUmVzdWx0U2hvcnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJVBhZ2VOYXYsCiAgICAgICAgICAgICAgICAlQ1NTU29ydCwKICAgICAgICAgICAgICAgIE9yZGVyICAgPT4gJE5ld09yZGVyeyRPcmRlckJ5fSwKICAgICAgICAgICAgICAgIFByb2ZpbGUgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIGVtcHR5IHNlYXJjaCBzaXRlCiAgICBlbHNlIHsKCiAgICAgICAgIyBjcmVhdGUgSFRNTCBzdHJpbmdzIGZvciBhbGwgZHluYW1pYyBmaWVsZHMKICAgICAgICBteSAlRHluYW1pY0ZpZWxkSFRNTDsKCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgIyBnZXQgc2VhcmNoIGZpZWxkIHByZWZlcmVuY2VzCiAgICAgICAgICAgIG15ICRTZWFyY2hGaWVsZFByZWZlcmVuY2VzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUHJlZmVyZW5jZXMoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0FycmF5UmVmV2l0aERhdGEoJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMpOwoKICAgICAgICAgICAgUFJFRkVSRU5DRToKICAgICAgICAgICAgZm9yIG15ICRQcmVmZXJlbmNlICggQHskU2VhcmNoRmllbGRQcmVmZXJlbmNlc30gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgZmllbGQgSFRNTAogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfQogICAgICAgICAgICAgICAgICAgID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUmVuZGVyKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFByb2ZpbGUgICAgICAgICAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAkQ29uZmlnLT57RGVmYXVsdHN9LT57RHluYW1pY0ZpZWxkfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgQ29uZmlybWF0aW9uQ2hlY2tib3hlcyA9PiAxLAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgPT4gJFByZWZlcmVuY2UtPntUeXBlfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIHNlYXJjaCBtYXNrCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVySGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+TWFza0Zvcm0oCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgUHJvZmlsZSAgICAgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICBBcmVhICAgICAgICAgICAgID0+ICdQdWJsaWMnLAogICAgICAgICAgICBEeW5hbWljRmllbGRIVE1MID0+IFwlRHluYW1pY0ZpZWxkSFRNTAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgTWFza0Zvcm0gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRUcmVlVmlldyA9IDA7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgKSB7CiAgICAgICAgJFRyZWVWaWV3ID0gMTsKICAgIH0KCiAgICAjIHNldCBvdXRwdXQgZm9ybWF0cyBsaXN0CiAgICBteSAlUmVzdWx0Rm9ybSA9ICgKICAgICAgICBOb3JtYWwgPT4gJ05vcm1hbCcsCiAgICAgICAgUHJpbnQgID0+ICdQcmludCcsCiAgICAgICAgQ1NWICAgID0+ICdDU1YnLAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgYnVpbGQgb3V0cHV0IGZvcm1hdHMgbGlzdAogICAgJFBhcmFte1Jlc3VsdEZvcm1TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4geyVSZXN1bHRGb3JtfSwKICAgICAgICBOYW1lICAgICAgID0+ICdSZXN1bHRGb3JtJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtSZXN1bHRGb3JtfSB8fCAnTm9ybWFsJywKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCBGQVEgb2JqZWN0CiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICMgZ2V0IGxhbmd1YWdlcyBsaXN0CiAgICBteSAlTGFuZ3VhZ2VzID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgYnVpbGQgbGFuZ3VhZ2VzIG91dHB1dCBsaXN0CiAgICAkUGFyYW17TGFuZ3VhZ2VzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IHslTGFuZ3VhZ2VzfSwKICAgICAgICBOYW1lICAgICAgID0+ICdMYW5ndWFnZUlEcycsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtMYW5ndWFnZUlEc30sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgY2F0ZWdvcmllcyBsaXN0CiAgICBteSAkQ2F0ZWdvcmllcyA9ICRGQVFPYmplY3QtPkdldFB1YmxpY0NhdGVnb3JpZXNMb25nTmFtZXMoCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ3J3JywKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGJ1aWxkIGNhdGVnb3JpZXMgb3V0cHV0IGxpc3QKICAgICRQYXJhbXtDYXRlZ29yaWVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRDYXRlZ29yaWVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NhdGVnb3J5SURzJywKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0NhdGVnb3J5SURzfSwKICAgICAgICBUcmVlVmlldyAgID0+ICRUcmVlVmlldywKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICBteSAlVm90aW5nT3BlcmF0b3JzID0gKAogICAgICAgIEVxdWFscyAgICAgICAgICAgID0+ICdFcXVhbHMnLAogICAgICAgIEdyZWF0ZXJUaGFuICAgICAgID0+ICdHcmVhdGVyVGhhbicsCiAgICAgICAgR3JlYXRlclRoYW5FcXVhbHMgPT4gJ0dyZWF0ZXJUaGFuRXF1YWxzJywKICAgICAgICBTbWFsbGVyVGhhbiAgICAgICA9PiAnU21hbGxlclRoYW4nLAogICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+ICdTbWFsbGVyVGhhbkVxdWFscycsCiAgICApOwoKICAgICRQYXJhbXtWb3RlU2VhcmNoVHlwZVNlbGVjdGlvblN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVZvdGluZ09wZXJhdG9ycywKICAgICAgICBOYW1lICAgICAgICA9PiAnVm90ZVNlYXJjaFR5cGUnLAogICAgICAgIFNpemUgICAgICAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte1ZvdGVTZWFyY2hUeXBlfSB8fCAnJywKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE11bHRpcGxlICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICRQYXJhbXtSYXRlU2VhcmNoVHlwZVNlbGVjdGlvblN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVZvdGluZ09wZXJhdG9ycywKICAgICAgICBOYW1lICAgICAgICA9PiAnUmF0ZVNlYXJjaFR5cGUnLAogICAgICAgIFNpemUgICAgICAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte1JhdGVTZWFyY2hUeXBlfSB8fCAnJywKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE11bHRpcGxlICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwogICAgJFBhcmFte1JhdGVTZWFyY2hTZWxlY3Rpb25TdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIDAgICA9PiAnMCUnLAogICAgICAgICAgICAyNSAgPT4gJzI1JScsCiAgICAgICAgICAgIDUwICA9PiAnNTAlJywKICAgICAgICAgICAgNzUgID0+ICc3NSUnLAogICAgICAgICAgICAxMDAgPT4gJzEwMCUnLAogICAgICAgIH0sCiAgICAgICAgU29ydCAgICAgICAgPT4gJ051bWVyaWNLZXknLAogICAgICAgIE5hbWUgICAgICAgID0+ICdSYXRlU2VhcmNoJywKICAgICAgICBTaXplICAgICAgICA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtSYXRlU2VhcmNofSB8fCAnJywKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIE11bHRpcGxlICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFsgMSAuLiA1OSBdLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0l0ZW1DcmVhdGVUaW1lUG9pbnQnLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50fSwKICAgICk7CiAgICAkUGFyYW17SXRlbUNyZWF0ZVRpbWVQb2ludFN0YXJ0fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBMYXN0ICAgPT4gJ3dpdGhpbiB0aGUgbGFzdCAuLi4nLAogICAgICAgICAgICBCZWZvcmUgPT4gJ21vcmUgdGhhbiAuLi4gYWdvJywKICAgICAgICB9LAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0l0ZW1DcmVhdGVUaW1lUG9pbnRTdGFydCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte0l0ZW1DcmVhdGVUaW1lUG9pbnRTdGFydH0gfHwgJ0xhc3QnLAogICAgKTsKICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZVBvaW50Rm9ybWF0fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBtaW51dGUgPT4gJ21pbnV0ZShzKScsCiAgICAgICAgICAgIGhvdXIgICA9PiAnaG91cihzKScsCiAgICAgICAgICAgIGRheSAgICA9PiAnZGF5KHMpJywKICAgICAgICAgICAgd2VlayAgID0+ICd3ZWVrKHMpJywKICAgICAgICAgICAgbW9udGggID0+ICdtb250aChzKScsCiAgICAgICAgICAgIHllYXIgICA9PiAneWVhcihzKScsCiAgICAgICAgfSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE5hbWUgICAgICAgID0+ICdJdGVtQ3JlYXRlVGltZVBvaW50Rm9ybWF0JywKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17SXRlbUNyZWF0ZVRpbWVQb2ludEZvcm1hdH0sCiAgICApOwogICAgJFBhcmFte0l0ZW1DcmVhdGVUaW1lU3RhcnR9ID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICVQYXJhbSwKICAgICAgICBQcmVmaXggICA9PiAnSXRlbUNyZWF0ZVRpbWVTdGFydCcsCiAgICAgICAgRm9ybWF0ICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICAgICAgRGlmZlRpbWUgPT4gLSggKCA2MCAqIDYwICogMjQgKSAqIDMwICksCiAgICApOwogICAgJFBhcmFte0l0ZW1DcmVhdGVUaW1lU3RvcH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJVBhcmFtLAogICAgICAgIFByZWZpeCA9PiAnSXRlbUNyZWF0ZVRpbWVTdG9wJywKICAgICAgICBGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICApOwoKICAgICMgSFRNTCBzZWFyY2ggbWFzayBvdXRwdXQKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NlYXJjaCcsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBvdXRwdXQgRHluYW1pYyBmaWVsZHMgYmxvY2tzCiAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRENPTkZJRzoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJFNlbGYtPntEeW5hbWljRmllbGR9IH0gKSB7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEQ09ORklHIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgc2VhcmNoIGZpZWxkIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlNlYXJjaEZpZWxkUHJlZmVyZW5jZXMoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICk7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEQ09ORklHIGlmICFJc0FycmF5UmVmV2l0aERhdGEoJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMpOwoKICAgICAgICBQUkVGRVJFTkNFOgogICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZEhUTUwgPSAkUGFyYW17RHluYW1pY0ZpZWxkSFRNTH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IC4gJFByZWZlcmVuY2UtPntUeXBlfSB9OwoKICAgICAgICAgICAgIyBza2lwIGZpZWxkcyB0aGF0IEhUTUwgY291bGQgbm90IGJlIHJldHJpZXZlZAogICAgICAgICAgICBuZXh0IFBSRUZFUkVOQ0UgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRIVE1MKTsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgIEZpZWxkID0+ICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbXVsdGktbGFuZ3VhZ2UgZGVmYXVsdCBvcHRpb24KICAgIG15ICRNdWx0aUxhbmd1YWdlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6Ok11bHRpTGFuZ3VhZ2UnKTsKCiAgICAjIHNob3cgbGFuZ3VhZ2VzIHNlbGVjdAogICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgSFRNTCBzZWFyY2ggbWFzayBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNGQVFTZWFyY2gnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpQdWJsaWNGQVFab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1JTUU6OkJhc2U2NCBxdygpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IFVzZXJJRCB0byByb290IGJlY2F1c2UgaW4gcHVibGljIGludGVyZmFjZSB0aGVyZSBpcyBubyB1c2VyCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAxOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwogICAgJEdldFBhcmFte0l0ZW1JRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSXRlbUlEJyApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRHZXRQYXJhbXtJdGVtSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05lZWQgSXRlbUlEIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBiYWNrIGxpbmsKICAgICRHZXRQYXJhbXtab29tQmFja0xpbmt9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1pvb21CYWNrTGluaycgKSB8fCAnJzsKICAgIGlmICggJEdldFBhcmFte1pvb21CYWNrTGlua30gKSB7CiAgICAgICAgJEdldFBhcmFte1pvb21CYWNrTGlua30gPSBNSU1FOjpCYXNlNjQ6OmRlY29kZV9iYXNlNjQoICRHZXRQYXJhbXtab29tQmFja0xpbmt9ICk7CiAgICB9CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGdldCBGQVEgaXRlbSBkYXRhCiAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICBJdGVtSUQgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKCk7CiAgICB9CgogICAgIyBnZXQgdGhlIHZhbGlkIGlkcwogICAgbXkgQFZhbGlkSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCk7CiAgICBteSAlVmFsaWRJRExvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAVmFsaWRJRHM7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgaW50ZXJmYWNlIHN0YXRlIGxpc3QKICAgIG15ICRJbnRlcmZhY2VTdGF0ZXMgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6UHVibGljOjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICBpZiAoCiAgICAgICAgISRGQVFEYXRhe0FwcHJvdmVkfQogICAgICAgIHx8ICEkVmFsaWRJRExvb2t1cHsgJEZBUURhdGF7VmFsaWRJRH0gfQogICAgICAgIHx8ICEkSW50ZXJmYWNlU3RhdGVzLT57ICRGQVFEYXRhe1N0YXRlVHlwZUlEfSB9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lck5vUGVybWlzc2lvbigKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEhUTUxWaWV3IFN1Yi1hY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSFRNTFZpZXcnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkRmllbGQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiRmllbGQiICk7CgogICAgICAgICMgbmVlZGVkIHBhcmFtcwogICAgICAgIGZvciBteSAkTmVlZGVkIChxdyggSXRlbUlEIEZpZWxkICkpIHsKICAgICAgICAgICAgaWYgKCAhJE5lZWRlZCApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWRlZCBQYXJhbTogJE5lZWRlZCEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIEZpZWxkIGNvbnRlbnQKICAgICAgICBteSAkRmllbGRDb250ZW50ID0gJEZBUU9iamVjdC0+SXRlbUZpZWxkR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEdldFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIEZpZWxkICA9PiAkRmllbGQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXdyaXRlIGhhbmRsZSBhbmQgYWN0aW9uCiAgICAgICAgJEZpZWxkQ29udGVudAogICAgICAgICAgICA9fiBzeyBpbmRleFsuXXBsIFs/XSBBY3Rpb249QWdlbnRGQVFab29tIH17cHVibGljLnBsP0FjdGlvbj1QdWJsaWNGQVFab29tfWd4bXM7CgogICAgICAgICMgdGFrZSBjYXJlIG9mIG9sZCBzdHlsZSBiZWZvcmUgRkFRIDIuMC54CiAgICAgICAgJEZpZWxkQ29udGVudCA9fiBzewogICAgICAgICAgICBpbmRleFsuXXBsIFs/XSBBY3Rpb249QWdlbnRGQVEgWyZdKGFtcDspPyBTdWJhY3Rpb249RG93bmxvYWQgWyZdKGFtcDspPwogICAgICAgIH17cHVibGljLnBsP0FjdGlvbj1QdWJsaWNGQVFab29tO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7fWd4bXM7CgogICAgICAgIG15ICRIVE1MVXRpbHNPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyk7CgogICAgICAgICMgY29udmVydCBjb250ZW50IHRvIEhUTUwgaWYgbmVlZGVkCiAgICAgICAgaWYgKAogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpCiAgICAgICAgICAgICYmICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9CiAgICAgICAgICAgICYmICRGQVFEYXRhe0NvbnRlbnRUeXBlfSBuZSAndGV4dC9odG1sJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRmllbGRDb250ZW50ID0gJEhUTUxVdGlsc09iamVjdC0+VG9IVE1MKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRGaWVsZENvbnRlbnQsCiAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBuZWVkZWQgSFRNTCBoZWFkZXJzCiAgICAgICAgJEZpZWxkQ29udGVudCA9ICRIVE1MVXRpbHNPYmplY3QtPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyAgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICAgICAgQ2hhcnNldCA9PiAndXRmLTgnLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgYmFzZSBVUkwgZm9yIGlubGluZSBpbWFnZXMKICAgICAgICBteSAkU2Vzc2lvbklEID0gJyc7CiAgICAgICAgaWYgKCAkU2VsZi0+e1Nlc3Npb25JRH0gJiYgISRTZWxmLT57U2Vzc2lvbklEQ29va2llfSApIHsKICAgICAgICAgICAgJFNlc3Npb25JRCA9ICc7JyAuICRTZWxmLT57U2Vzc2lvbk5hbWV9IC4gJz0nIC4gJFNlbGYtPntTZXNzaW9uSUR9OwogICAgICAgICAgICAkRmllbGRDb250ZW50ID1+IHN7CiAgICAgICAgICAgICAgICAoQWN0aW9uPVB1YmxpY0ZBUVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtJdGVtSUQ9XGQrO0ZpbGVJRD1cZCspCiAgICAgICAgICAgIH17JDEkU2Vzc2lvbklEfWdtc3g7CiAgICAgICAgfQoKICAgICAgICAjIHJldHVybiBjb21wbGV0ZSBIVE1MIGFzIGFuIGF0dGFjaG1lbnQKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkRmllbGRDb250ZW50LAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgRG93bmxvYWRBdHRhY2htZW50IFN1Yi1hY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRG93bmxvYWRBdHRhY2htZW50JyApIHsKCiAgICAgICAgIyBtYW5hZ2UgcGFyYW1ldGVycwogICAgICAgICRHZXRQYXJhbXtGaWxlSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbGVJRCcgKTsKICAgICAgICBpZiAoICFkZWZpbmVkICRHZXRQYXJhbXtGaWxlSUR9ICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnTmVlZCBGaWxlSUQnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYXR0YWNobWVudHMKICAgICAgICBteSAlRmlsZSA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgRmlsZUlEID0+ICRHZXRQYXJhbXtGaWxlSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCVGaWxlKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICAgICAgJUZpbGUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBhdHRhY2htZW50ICgkR2V0UGFyYW17RmlsZUlEfSkhIE1heSBiZSBhbiBhdHRhY2shISEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKCk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVySGVhZGVyKAogICAgICAgIFZhbHVlID0+ICRGQVFEYXRhe1RpdGxlfSwKICAgICk7CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgIG15ICRJbnRlcmZhY2UgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgTmFtZSAgID0+ICdwdWJsaWMnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgcHJlcGFyZSBmaWVsZHMgZGF0YQogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkIChxdyhGaWVsZDEgRmllbGQyIEZpZWxkMyBGaWVsZDQgRmllbGQ1IEZpZWxkNikpIHsKICAgICAgICBuZXh0IEZJRUxEIGlmICEkRkFRRGF0YXskRmllbGR9OwoKICAgICAgICAjIHJld3JpdGUgbGlua3MgdG8gZW1iZWRkZWQgaW1hZ2VzIGZvciBwdWJsaWMgaW50ZXJmYWNlCiAgICAgICAgaWYgKCAkSW50ZXJmYWNlLT57TmFtZX0gZXEgJ3B1YmxpYycgKSB7CgogICAgICAgICAgICAjIHJld3JpdGUgaGFuZGxlIGFuZCBhY3Rpb24KICAgICAgICAgICAgJEZBUURhdGF7JEZpZWxkfQogICAgICAgICAgICAgICAgPX4gc3sgaW5kZXhbLl1wbCBbP10gQWN0aW9uPUFnZW50RkFRWm9vbSB9e3B1YmxpYy5wbD9BY3Rpb249UHVibGljRkFRWm9vbX1neG1zOwoKICAgICAgICAgICAgIyB0YWtlIGNhcmUgb2Ygb2xkIHN0eWxlIGJlZm9yZSBGQVEgMi4wLngKICAgICAgICAgICAgJEZBUURhdGF7JEZpZWxkfSA9fiBzewogICAgICAgICAgICAgICAgaW5kZXhbLl1wbCBbP10gQWN0aW9uPUFnZW50RkFRIFsmXShhbXA7KT8gU3ViYWN0aW9uPURvd25sb2FkIFsmXShhbXA7KT8KICAgICAgICAgICAgfXtwdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDt9Z3htczsKICAgICAgICB9CgogICAgICAgICMgbm8gcXVvdGluZyBpZiBIVE1MIHZpZXcgaXMgZW5hYmxlZAogICAgICAgIG5leHQgRklFTEQgaWYgJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6Okl0ZW06OkhUTUwnKTsKCiAgICAgICAgIyBIVE1MIHF1b3RpbmcKICAgICAgICAkRkFRRGF0YXskRmllbGR9ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgTmV3TGluZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJEZBUURhdGF7JEZpZWxkfSwKICAgICAgICAgICAgVk1heCAgICAgICAgICAgPT4gNTAwMCwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICAgICAgTGlua0ZlYXR1cmUgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IHZvdGluZyByZXN1bHRzCiAgICAkUGFyYW17Vm90aW5nUmVzdWx0Q29sb3J9ID0gJExheW91dE9iamVjdC0+R2V0RkFRSXRlbVZvdGluZ1JhdGVDb2xvcigKICAgICAgICBSYXRlID0+ICRGQVFEYXRhe1ZvdGVSZXN1bHR9LAogICAgKTsKCiAgICBpZiAoICEkUGFyYW17Vm90aW5nUmVzdWx0Q29sb3J9IHx8ICRGQVFEYXRhe1ZvdGVzfSBlcSAnMCcgKSB7CiAgICAgICAgJFBhcmFte1ZvdGluZ1Jlc3VsdENvbG9yfSA9ICdHcmF5JzsKICAgIH0KCiAgICAjIHNob3cgYmFjayBsaW5rCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdCYWNrJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVGQVFEYXRhLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IG11bHRpLWxhbmd1YWdlIG9wdGlvbgogICAgbXkgJE11bHRpTGFuZ3VhZ2UgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwoKICAgICMgc2hvdyBsYW5ndWFnZQogICAgaWYgKCRNdWx0aUxhbmd1YWdlKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdm90aW5nIGRlZmF1bHQgb3B0aW9uCiAgICBteSAkVm90aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OlZvdGluZycpOwoKICAgICMgc2hvdyB2b3RlcwogICAgaWYgKCRWb3RpbmcpIHsKCiAgICAgICAgIyBhbHdheXMgZGlzcGxheXMgVm90ZXMgcmVzdWx0IGV2ZW4gaWYgaXRzIDAKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVmlld1ZvdGVzJywKICAgICAgICAgICAgRGF0YSA9PiB7JUZBUURhdGF9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IEZBUSBwYXRoCiAgICBteSAkU2hvd0ZBUVBhdGggPSAkTGF5b3V0T2JqZWN0LT5GQVFQYXRoU2hvdygKICAgICAgICBGQVFPYmplY3QgID0+ICRGQVFPYmplY3QsCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoJFNob3dGQVFQYXRoKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUVBhdGhJdGVtRWxlbWVudCcsCiAgICAgICAgICAgIERhdGEgPT4geyVGQVFEYXRhfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBrZXl3b3JkcyBhcyBzZWFyY2ggbGlua3MKICAgIGlmICggJEZBUURhdGF7S2V5d29yZHN9ICkgewoKICAgICAgICAjIHJlcGxhY2UgY29tbWFzIGFuZCBzZW1pY29sb25zCiAgICAgICAgJEZBUURhdGF7S2V5d29yZHN9ID1+IHMvLC8gL2c7CiAgICAgICAgJEZBUURhdGF7S2V5d29yZHN9ID1+IHMvOy8gL2c7CgogICAgICAgIG15IEBLZXl3b3JkcyA9IHNwbGl0IC9ccysvLCAkRkFRRGF0YXtLZXl3b3Jkc307CiAgICAgICAgZm9yIG15ICRLZXl3b3JkIChAS2V5d29yZHMpIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdLZXl3b3JkcycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBLZXl3b3JkID0+ICRLZXl3b3JkLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdXRwdXQgcmF0aW5nIHN0YXJzCiAgICBpZiAoJFZvdGluZykgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZBUVJhdGluZ1N0YXJzU2hvdygKICAgICAgICAgICAgVm90ZVJlc3VsdCA9PiAkRkFRRGF0YXtWb3RlUmVzdWx0fSwKICAgICAgICAgICAgVm90ZXMgICAgICA9PiAkRkFRRGF0YXtWb3Rlc30sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCBhdHRhY2htZW50cyBpZiBhbnkKICAgIG15IEBBdHRhY2htZW50SW5kZXggPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50SW5kZXgoCiAgICAgICAgSXRlbUlEICAgICA9PiAkR2V0UGFyYW17SXRlbUlEfSwKICAgICAgICBTaG93SW5saW5lID0+IDAsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgb3V0cHV0IGF0dGFjaG1lbnRzCiAgICBpZiAoQEF0dGFjaG1lbnRJbmRleCkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50SGVhZGVyJywKICAgICAgICApOwogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRJbmRleCkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgRkFRIENvbnRlbnQKICAgICRMYXlvdXRPYmplY3QtPkZBUUNvbnRlbnRTaG93KAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgIEZBUURhdGEgICAgICAgICA9PiB7JUZBUURhdGF9LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIkZBUTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiAnRkFRJywKICAgICAgICBGaWVsZEZpbHRlciA9PiAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBiYWNrZW5kIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgRFlOQU1JQ0ZJRUxEQ09ORklHOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEQ09ORklHIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgbXkgJFZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRHZXRQYXJhbXtJdGVtSUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHByaW50IHN0cmluZyBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMjUwLAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICApOwoKICAgICAgICBteSAkTGFiZWwgPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9OwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRkFRRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGV4YW1wbGUgb2YgZHluYW1pYyBmaWVsZHMgb3JkZXIgY3VzdG9taXphdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGQVFEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgbG9nIGFjY2VzcyB0byB0aGlzIEZBUSBpdGVtCiAgICAkRkFRT2JqZWN0LT5GQVFMb2dBZGQoCiAgICAgICAgSXRlbUlEICAgID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJdGVtSUQnICksCiAgICAgICAgSW50ZXJmYWNlID0+ICRJbnRlcmZhY2UtPntOYW1lfSwKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNGQVFab29tJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlRkFRRGF0YSwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZDo6RkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpGQVEnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgcGFyYW1zCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ29uZmlnIE5hbWUgVXNlcklEKSkKICAgIHsKICAgICAgICBkaWUgIkdvdCBubyAkTmVlZGVkISIgaWYgKCAhJFNlbGYtPnskTmVlZGVkfSApOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFByZWZlcmVuY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuOwp9CgpzdWIgQ29uZmlnIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICgKICAgICAgICAleyAkU2VsZi0+e0NvbmZpZ30gfSwKICAgICk7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBGQVEgb2JqZWN0CiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICMgc2V0IGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmdzCiAgICBteSAkSW50ZXJmYWNlID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlR2V0KAogICAgICAgIE5hbWUgICA9PiAnaW50ZXJuYWwnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgbXkgJEludGVyZmFjZVN0YXRlcyA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRkFROjpBZ2VudDo6U3RhdGVUeXBlcycpLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgJExheW91dE9iamVjdC0+RkFRU2hvd0xhdGVzdE5ld3NCb3goCiAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRGQVFPYmplY3QsCiAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1R5cGV9LAogICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnQWdlbnQnLAogICAgICAgIENhdGVnb3J5SUQgICAgICA9PiAwLAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkSW50ZXJmYWNlU3RhdGVzLAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgbXkgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudERhc2hib2FyZEZBUU92ZXJ2aWV3JywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBDYXRlZ29yeUlEICAgPT4gMCwKICAgICAgICAgICAgU2lkZWJhckNsYXNzID0+ICdNZWRpdW0nLAogICAgICAgIH0sCiAgICApOwogICAgcmV0dXJuICRDb250ZW50Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUUpvdXJuYWxPdmVydmlldzo6U21hbGw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6RkFRJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgVXNlcklEIHBhcmFtCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAkUGFyYW17VXNlcklEfSB8fCBkaWUgIkdvdCBubyBVc2VySUQhIjsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VTaG93biBTdGFydEhpdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG5lZWQgSm91cm5hbAogICAgaWYgKCAhJFBhcmFte0pvdXJuYWx9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCB0aGUgSm91cm5hbCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc3RvcmUgdGhlIGpvdXJuYWwgbG9jYWxseQogICAgbXkgQEpvdXJuYWxFbnRyaWVzOwogICAgaWYgKCAkUGFyYW17Sm91cm5hbH0gJiYgcmVmICRQYXJhbXtKb3VybmFsfSBlcSAnQVJSQVknICkgewogICAgICAgIEBKb3VybmFsRW50cmllcyA9IEB7ICRQYXJhbXtKb3VybmFsfSB9OwogICAgfQoKICAgIG15IEBTaG93Q29sdW1uczsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgc2hvdyBKb3VybmFsIEVudHJpZXMgYXMgcm93cwogICAgaWYgKEBKb3VybmFsRW50cmllcykgewoKICAgICAgICAjIGNoZWNrIFNob3dDb2x1bW5zIHBhcmFtZXRlcgogICAgICAgIGlmICggJFBhcmFte1Nob3dDb2x1bW5zfSAmJiByZWYgJFBhcmFte1Nob3dDb2x1bW5zfSBlcSAnQVJSQVknICkgewogICAgICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkUGFyYW17U2hvd0NvbHVtbnN9IH07CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGNvbHVtbiBoZWFkZXIgYmxvY2tzCiAgICAgICAgaWYgKEBTaG93Q29sdW1ucykgewoKICAgICAgICAgICAgIyBjYWxsIG1haW4gYmxvY2sKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1JlY29yZEZvcm0nICk7CgogICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoQFNob3dDb2x1bW5zKSB7CgogICAgICAgICAgICAgICAgIyBjYWxsIGhlYWRlciBzcGVjaWZpYyBibG9jawogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnSGVhZGVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQ291bnRlciA9IDA7CgogICAgICAgICMgZ2V0IEZBUSBvYmplY3QKICAgICAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICAgICBKT1VSTkFMRU5UUlk6CiAgICAgICAgZm9yIG15ICRKb3VybmFsRW50cnkgKEBKb3VybmFsRW50cmllcykgewogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkQ291bnRlciA+PSAkUGFyYW17U3RhcnRIaXR9CiAgICAgICAgICAgICAgICAmJiAkQ291bnRlciA8ICggJFBhcmFte1BhZ2VTaG93bn0gKyAkUGFyYW17U3RhcnRIaXR9ICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBkYXRhIGZvciBjb3JydXB0aW9uIGNoZWNrCiAgICAgICAgICAgICAgICBteSAlRkFRID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEpvdXJuYWxFbnRyeS0+e0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkSm91cm5hbEVudHJ5LT57Q2xlYW5TdWJqZWN0fSA9ICRGQVFPYmplY3QtPkZBUUFydGljbGVUaXRsZUNsZWFuKAogICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRGQVF7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgIFNpemUgID0+ICRQYXJhbXtUaXRsZVNpemV9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IEpPVVJOQUxFTlRSWSBpZiAhJUZBUTsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHJlY29yZCBibG9jawogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAleyRKb3VybmFsRW50cnl9LAogICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyID0+ICRDb3VudGVyLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ29sdW1uIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAleyRKb3VybmFsRW50cnl9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyBsaW5rcyBpZiBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rU3RhcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICV7JEpvdXJuYWxFbnRyeX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uIC4gJ0xpbmtFbmQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICV7JEpvdXJuYWxFbnRyeX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIG90aGVyd2lzZSBzZXQgYW4gTm8gRkFRIEpvdXJuYWwgbWVzc2FnZQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ05vRkFRRm91bmQnICk7CiAgICB9CgogICAgIyB1c2UgdGVtcGxhdGUKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUUpvdXJuYWxPdmVydmlld1NtYWxsJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICRTZWxmLT57Vmlld1R5cGV9LAogICAgICAgICAgICBDb2x1bW5Db3VudCA9PiBzY2FsYXIgQFNob3dDb2x1bW5zLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUU1lbnU6OkdlbmVyaWM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IFVzZXJJRCBwYXJhbQogICAgJFNlbGYtPntVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gfHwgZGllICJHb3Qgbm8gVXNlcklEISI7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtGQVFJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgRkFRSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ3JhbnQgYWNjZXNzIGJ5IGRlZmF1bHQKICAgIG15ICRBY2Nlc3MgPSAxOwoKICAgICMgZ2V0IGdyb3VwcwogICAgbXkgJEFjdGlvbiA9ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufTsKICAgIGlmICggJEFjdGlvbiBlcSAnQWdlbnRMaW5rT2JqZWN0JyApIHsKCiAgICAgICAgIyBUaGUgTGluay1saW5rIGlzIGEgc3BlY2lhbCBjYXNlLCBhcyBpdCBpcyBub3Qgc3BlY2lmaWMgdG8gRkFRLgogICAgICAgICMgQXMgYSB3b3JrYXJvdW5kIHdlIGhhcmRjb3JlIHRoYXQgQWdlbnRMaW5rT2JqZWN0IGlzIHRyZWF0ZWQgbGlrZSBBZ2VudEZBUUVkaXQKICAgICAgICAkQWN0aW9uID0gJ0FnZW50RkFRRWRpdCc7CiAgICB9CgogICAgIyBnZXQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIHNwZWNpZmllZCBhY3Rpb24KICAgIG15ICRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259OwoKICAgIG15ICRHcm91cHNSbyA9ICRDb25maWctPntHcm91cFJvfSB8fCBbXTsKICAgIG15ICRHcm91cHNSdyA9ICRDb25maWctPntHcm91cH0gICB8fCBbXTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgaWYgKCAkQWN0aW9uICYmICggQHskR3JvdXBzUm99IHx8IEB7JEdyb3Vwc1J3fSApICkgewoKICAgICAgICAjIGRlbnkgYWNjZXNzIGJ5IGRlZmF1bHQsIHdoZW4gdGhlcmUgYXJlIGdyb3VwcyB0byBjaGVjawogICAgICAgICRBY2Nlc3MgPSAwOwoKICAgICAgICAjIGNoZWNrIHJlYWQgb25seSBncm91cHMKICAgICAgICBST0dST1VQOgogICAgICAgIGZvciBteSAkUm9Hcm91cCAoIEB7JEdyb3Vwc1JvfSApIHsKCiAgICAgICAgICAgIG5leHQgUk9HUk9VUCBpZiAhJExheW91dE9iamVjdC0+eyJVc2VySXNHcm91cFJvWyRSb0dyb3VwXSJ9OwogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgJExheW91dE9iamVjdC0+eyJVc2VySXNHcm91cFJvWyRSb0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJPR1JPVVA7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHJlYWQgd3JpdGUgZ3JvdXBzCiAgICAgICAgUldHUk9VUDoKICAgICAgICBmb3IgbXkgJFJ3R3JvdXAgKCBAeyRHcm91cHNSd30gKSB7CgogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgISRMYXlvdXRPYmplY3QtPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn07CiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAkTGF5b3V0T2JqZWN0LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte0ZBUUl0ZW19IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayBpZiBhIGRpYWxvZyBoYXMgdG8gYmUgc2hvd24KICAgIGlmICggJFBhcmFte0NvbmZpZ30tPntEaWFsb2dUaXRsZX0gKSB7CgogICAgICAgICMgb3V0cHV0IGNvbmZpcm1hdGlvbiBkaWFsb2cKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU2hvd0NvbmZpcm1hdGlvbkRpYWxvZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0ZBUUl0ZW19IH0sCiAgICAgICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUU92ZXJ2aWV3OjpTbWFsbDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RkFRJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgVXNlcklEIHBhcmFtCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAkUGFyYW17VXNlcklEfSB8fCBkaWUgIkdvdCBubyBVc2VySUQhIjsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VTaG93biBTdGFydEhpdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG5lZWQgRkFRSURzCiAgICBpZiAoICEkUGFyYW17RkFRSURzfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgdGhlIEZBUUlEcyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc3RvcmUgdGhlIEZBUUlEcwogICAgbXkgQElEczsKICAgIGlmICggJFBhcmFte0ZBUUlEc30gJiYgcmVmICRQYXJhbXtGQVFJRHN9IGVxICdBUlJBWScgKSB7CiAgICAgICAgQElEcyA9IEB7ICRQYXJhbXtGQVFJRHN9IH07CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgbXkgJE11bHRpTGFuZ3VhZ2UgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6TXVsdGlMYW5ndWFnZScpOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBmcm9udGVuZCBtb2R1bGUKICAgIG15ICREeW5hbWljRmllbGRGaWx0ZXIgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIkZBUTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3U21hbGwiKS0+e0R5bmFtaWNGaWVsZH07CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnRkFRJ10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJER5bmFtaWNGaWVsZEZpbHRlciB8fCB7fSwKICAgICk7CgogICAgbXkgQFNob3dDb2x1bW5zOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgaWYgKEBJRHMpIHsKCiAgICAgICAgIyBjaGVjayBTaG93Q29sdW1ucyBwYXJhbWV0ZXIKICAgICAgICBpZiAoICRQYXJhbXtTaG93Q29sdW1uc30gJiYgcmVmICRQYXJhbXtTaG93Q29sdW1uc30gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgQFNob3dDb2x1bW5zID0gQHsgJFBhcmFte1Nob3dDb2x1bW5zfSB9OwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZHluYW1pYyBmaWVsZCBiYWNrZW5kIG9iamVjdAogICAgICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICAgICAjIGJ1aWxkIGNvbHVtbiBoZWFkZXIgYmxvY2tzCiAgICAgICAgaWYgKEBTaG93Q29sdW1ucykgewoKICAgICAgICAgICAgIyBjYWxsIG1haW4gYmxvY2sKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1JlY29yZEZvcm0nICk7CgogICAgICAgICAgICBDT0xVTU46CiAgICAgICAgICAgIGZvciBteSAkQ29sdW1uIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICAgICBuZXh0IENPTFVNTiBpZiAoICRDb2x1bW4gZXEgJ0xhbmd1YWdlJyAmJiAhJE11bHRpTGFuZ3VhZ2UgKTsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBuZWVkZWQgdmFyaWFibGVzCiAgICAgICAgICAgICAgICBteSAkQ1NTID0gJ092ZXJ2aWV3SGVhZGVyJzsKICAgICAgICAgICAgICAgIG15ICRPcmRlckJ5OwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIElEIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17U29ydEJ5fSApIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17U29ydEJ5fSA9ICRQYXJhbXtTb3J0Qnl9IGVxICdQcmlvcml0eUlEJwogICAgICAgICAgICAgICAgICAgICAgICA/ICdQcmlvcml0eScKICAgICAgICAgICAgICAgICAgICAgICAgOiAkUGFyYW17U29ydEJ5fSBlcSAnQ2F0ZWdvcnlJRCcgPyAnQ2F0ZWdvcnknCiAgICAgICAgICAgICAgICAgICAgICAgIDogJFBhcmFte1NvcnRCeX0gZXEgJ0xhbmd1YWdlSUQnID8gJ0xhbmd1YWdlJwogICAgICAgICAgICAgICAgICAgICAgICA6ICRQYXJhbXtTb3J0Qnl9IGVxICdTdGF0ZUlEJyAgICA/ICdTdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgOiAkUGFyYW17U29ydEJ5fSBlcSAnRkFRSUQnICAgICAgPyAnTnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtTb3J0Qnl9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2V0IHRoZSBjb3JyZWN0IFNldCBDU1MgY2xhc3MgYW5kIG9yZGVyIGJ5IGxpbmsKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte1NvcnRCeX0gJiYgKCAkUGFyYW17U29ydEJ5fSBlcSAkQ29sdW1uICkgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeX0gJiYgKCAkUGFyYW17T3JkZXJCeX0gZXEgJ1VwJyApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdEb3duJzsKICAgICAgICAgICAgICAgICAgICAgICAgJENTUyAuPSAnIFNvcnREZXNjZW5kaW5nTGFyZ2UnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydEFzY2VuZGluZ0xhcmdlJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdVcCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnSGVhZGVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBDU1MgICAgID0+ICRDU1MsCiAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyQnkgPT4gJE9yZGVyQnksCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgRHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAgICAgbXkgJExhYmVsID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfTsKCiAgICAgICAgICAgICAgICAjIGdldCBmaWVsZCBzb3J0YWJsZSBjb25kaXRpb24KICAgICAgICAgICAgICAgIG15ICRJc1NvcnRhYmxlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNTb3J0YWJsZScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICgkSXNTb3J0YWJsZSkgewogICAgICAgICAgICAgICAgICAgIG15ICRDU1MgPSAnJzsKICAgICAgICAgICAgICAgICAgICBteSAkT3JkZXJCeTsKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtTb3J0Qnl9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICggJFBhcmFte1NvcnRCeX0gZXEgKCAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gKSApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFBhcmFte09yZGVyQnl9ICYmICggJFBhcmFte09yZGVyQnl9IGVxICdVcCcgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRPcmRlckJ5ID0gJ0Rvd24nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENTUyAuPSAnIFNvcnREZXNjZW5kaW5nJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRPcmRlckJ5ID0gJ1VwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDU1MgLj0gJyBTb3J0QXNjZW5kaW5nJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZER5bmFtaWNGaWVsZEhlYWRlcicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTID0+ICRDU1MsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZER5bmFtaWNGaWVsZEhlYWRlclNvcnRhYmxlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+ICRPcmRlckJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGROYW1lID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGV4YW1wbGUgb2YgZHluYW1pYyBmaWVsZHMgb3JkZXIgY3VzdG9taXphdGlvbgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmREeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICdIZWFkZXInLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTUyA9PiAkQ1NTLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmREeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ0hlYWRlclNvcnRhYmxlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+ICRPcmRlckJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGROYW1lID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmREeW5hbWljRmllbGRIZWFkZXInLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkRHluYW1pY0ZpZWxkSGVhZGVyTm90U29ydGFibGUnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRMYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGV4YW1wbGUgb2YgZHluYW1pYyBmaWVsZHMgb3JkZXIgY3VzdG9taXphdGlvbgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmREeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICdIZWFkZXInLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkRHluYW1pY0ZpZWxkXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICdIZWFkZXJOb3RTb3J0YWJsZScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJExhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRDb3VudGVyID0gMDsKCiAgICAgICAgSUQ6CiAgICAgICAgZm9yIG15ICRJRCAoQElEcykgewogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkQ291bnRlciA+PSAkUGFyYW17U3RhcnRIaXR9CiAgICAgICAgICAgICAgICAmJiAkQ291bnRlciA8ICggJFBhcmFte1BhZ2VTaG93bn0gKyAkUGFyYW17U3RhcnRIaXR9ICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgdG8gc3RvcmUgYWxsIGRhdGEKICAgICAgICAgICAgICAgIG15ICVEYXRhOwoKICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBvYmplY3QKICAgICAgICAgICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEKICAgICAgICAgICAgICAgIG15ICVGQVEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSUQsCiAgICAgICAgICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkRkFRe0NsZWFuVGl0bGV9ID0gJEZBUU9iamVjdC0+RkFRQXJ0aWNsZVRpdGxlQ2xlYW4oCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZBUXtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgU2l6ZSAgPT4gJFBhcmFte1RpdGxlU2l6ZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISVGQVE7CgogICAgICAgICAgICAgICAgIyBhZGQgRkFRIGRhdGEKICAgICAgICAgICAgICAgICVEYXRhID0gKCAlRGF0YSwgJUZBUSApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgcmVjb3JkIGJsb2NrCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICBDT0xVTU46CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBTaG93Q29sdW1ucykgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkbyBub3Qgc2hvdyBsYW5ndWFnZSBjb2x1bW4gaWYgRkFRIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgbGFuZ3VhZ2VzCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OIGlmICggJENvbHVtbiBlcSAnTGFuZ3VhZ2UnICYmICEkTXVsdGlMYW5ndWFnZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBkaXNwbGF5IGNvbHVtbnMgYXMgbGlua3MgaW4gdGhlIGN1c3RvbWVyIGZyb250ZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OIGlmICRQYXJhbXtGcm9udGVuZH0gZXEgJ0N1c3RvbWVyJzsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyBsaW5rcyBpZiBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rU3RhcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rRW5kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgRHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgICAgICAgICAjIGdldCBmaWVsZCB2YWx1ZQogICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkSUQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICggJFZhbHVlU3RyZy0+e0xpbmt9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZER5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZER5bmFtaWNGaWVsZFBsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGV4YW1wbGUgb2YgZHluYW1pYyBmaWVsZHMgb3JkZXIgY3VzdG9taXphdGlvbgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmREeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICRWYWx1ZVN0cmctPntMaW5rfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmREeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICdfTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAnX1BsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ05vRkFRRm91bmQnICk7CiAgICB9CgogICAgIyB1c2UgdGVtcGxhdGUKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUU92ZXJ2aWV3U21hbGwnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFNlbGYtPntWaWV3VHlwZX0sCiAgICAgICAgICAgIENvbHVtbkNvdW50ID0+IHNjYWxhciBAU2hvd0NvbHVtbnMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkhlYWRlck1ldGE6OkFnZW50RkFRU2VhcmNoOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRTZXNzaW9uID0gJyc7CiAgICBpZiAoICEkTGF5b3V0T2JqZWN0LT57U2Vzc2lvbklEQ29va2llfSApIHsKICAgICAgICAkU2Vzc2lvbiA9ICc7JyAuICRMYXlvdXRPYmplY3QtPntTZXNzaW9uTmFtZX0gLiAnPScgLiAkTGF5b3V0T2JqZWN0LT57U2Vzc2lvbklEfTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGJ1aWxkIG9wZW4gc2VhcmNoIGRlc2NyaXB0aW9uIGZvciBGQVEgbnVtYmVyCiAgICBteSAkVGl0bGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Byb2R1Y3ROYW1lJyk7CgogICAgJFRpdGxlIC49ICcoJyAuICRDb25maWdPYmplY3QtPkdldCgnRkFROjpGQVFIb29rJykgLiAnKSc7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZXRhTGluaycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFJlbCAgID0+ICdzZWFyY2gnLAogICAgICAgICAgICBUeXBlICA9PiAnYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCcsCiAgICAgICAgICAgIFRpdGxlID0+ICRUaXRsZSwKICAgICAgICAgICAgSHJlZiAgPT4gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfSAuICdBY3Rpb249JyAuICRQYXJhbXtDb25maWd9LT57QWN0aW9ufQogICAgICAgICAgICAgICAgLiAnO1N1YmFjdGlvbj1PcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXInIC4gJFNlc3Npb24sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBidWlsZCBvcGVuIHNlYXJjaCBkZXNjcmlwdGlvbiBmb3IgRkFRIGZ1bGwtdGV4dAogICAgbXkgJEZ1bGx0ZXh0ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdGQVFGdWxsdGV4dCcpOwogICAgJFRpdGxlID0gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0TmFtZScpOwogICAgJFRpdGxlIC49ICcoJyAuICRGdWxsdGV4dCAuICcpJzsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01ldGFMaW5rJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgUmVsICAgPT4gJ3NlYXJjaCcsCiAgICAgICAgICAgIFR5cGUgID0+ICdhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sJywKICAgICAgICAgICAgVGl0bGUgPT4gJFRpdGxlLAogICAgICAgICAgICBIcmVmICA9PiAkTGF5b3V0T2JqZWN0LT57QmFzZWxpbmt9IC4gJ0FjdGlvbj0nIC4gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259CiAgICAgICAgICAgICAgICAuICc7U3ViYWN0aW9uPU9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0JyAuICRTZXNzaW9uLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkhlYWRlck1ldGE6OkN1c3RvbWVyRkFRU2VhcmNoOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRTZXNzaW9uID0gJyc7CiAgICBpZiAoICEkTGF5b3V0T2JqZWN0LT57U2Vzc2lvbklEQ29va2llfSApIHsKICAgICAgICAkU2Vzc2lvbiA9ICc7JyAuICRMYXlvdXRPYmplY3QtPntTZXNzaW9uTmFtZX0gLiAnPScgLiAkTGF5b3V0T2JqZWN0LT57U2Vzc2lvbklEfTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGJ1aWxkIG9wZW4gc2VhcmNoIGRlc2NyaXB0aW9uIGZvciBGQVEgbnVtYmVyCiAgICBteSAkVGl0bGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Byb2R1Y3ROYW1lJyk7CgogICAgJFRpdGxlIC49ICcgLSBDdXN0b21lciAoJyAuICRDb25maWdPYmplY3QtPkdldCgnRkFROjpGQVFIb29rJykgLiAnKSc7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZXRhTGluaycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFJlbCAgID0+ICdzZWFyY2gnLAogICAgICAgICAgICBUeXBlICA9PiAnYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCcsCiAgICAgICAgICAgIFRpdGxlID0+ICRUaXRsZSwKICAgICAgICAgICAgSHJlZiAgPT4gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgLiAnQWN0aW9uPScKICAgICAgICAgICAgICAgIC4gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259CiAgICAgICAgICAgICAgICAuICc7U3ViYWN0aW9uPU9wZW5TZWFyY2hEZXNjcmlwdGlvbkZBUU51bWJlcicgLiAkU2Vzc2lvbiwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGJ1aWxkIG9wZW4gc2VhcmNoIGRlc2NyaXB0aW9uIGZvciBGQVEgZnVsbC10ZXh0CiAgICBteSAkRnVsbHRleHQgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZBUUZ1bGx0ZXh0Jyk7CiAgICAkVGl0bGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Byb2R1Y3ROYW1lJyk7CiAgICAkVGl0bGUgLj0gJyAtIEN1c3RvbWVyICgnIC4gJEZ1bGx0ZXh0IC4gJyknOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWV0YUxpbmsnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBSZWwgICA9PiAnc2VhcmNoJywKICAgICAgICAgICAgVHlwZSAgPT4gJ2FwcGxpY2F0aW9uL29wZW5zZWFyY2hkZXNjcmlwdGlvbit4bWwnLAogICAgICAgICAgICBUaXRsZSA9PiAkVGl0bGUsCiAgICAgICAgICAgIEhyZWYgID0+ICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30KICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj0nCiAgICAgICAgICAgICAgICAuICRQYXJhbXtDb25maWd9LT57QWN0aW9ufQogICAgICAgICAgICAgICAgLiAnO1N1YmFjdGlvbj1PcGVuU2VhcmNoRGVzY3JpcHRpb25GdWxsdGV4dCcgLiAkU2Vzc2lvbiwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkhlYWRlck1ldGE6OlB1YmxpY0ZBUVNlYXJjaDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBteSBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRTZXNzaW9uID0gJyc7CiAgICBpZiAoICEkTGF5b3V0T2JqZWN0LT57U2Vzc2lvbklEQ29va2llfSApIHsKICAgICAgICAkU2Vzc2lvbiA9ICc7JyAuICRMYXlvdXRPYmplY3QtPntTZXNzaW9uTmFtZX0gLiAnPScKICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57U2Vzc2lvbklEfTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGJ1aWxkIG9wZW4gc2VhcmNoIGRlc2NyaXB0aW9uIGZvciBGQVEgbnVtYmVyCiAgICBteSAkVGl0bGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Byb2R1Y3ROYW1lJyk7CgogICAgJFRpdGxlIC49ICcgLSBQdWJsaWMgKCcgLiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6RkFRSG9vaycpIC4gJyknOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWV0YUxpbmsnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBSZWwgICA9PiAnc2VhcmNoJywKICAgICAgICAgICAgVHlwZSAgPT4gJ2FwcGxpY2F0aW9uL29wZW5zZWFyY2hkZXNjcmlwdGlvbit4bWwnLAogICAgICAgICAgICBUaXRsZSA9PiAkVGl0bGUsCiAgICAgICAgICAgIEhyZWYgID0+ICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30KICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj0nCiAgICAgICAgICAgICAgICAuICRQYXJhbXtDb25maWd9LT57QWN0aW9ufQogICAgICAgICAgICAgICAgLiAnO1N1YmFjdGlvbj1PcGVuU2VhcmNoRGVzY3JpcHRpb25GQVFOdW1iZXInIC4gJFNlc3Npb24sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBidWlsZCBvcGVuIHNlYXJjaCBkZXNjcmlwdGlvbiBmb3IgRkFRIGZ1bGwtdGV4dAogICAgbXkgJEZ1bGx0ZXh0ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdGQVFGdWxsdGV4dCcpOwogICAgJFRpdGxlID0gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0TmFtZScpOwogICAgJFRpdGxlIC49ICcgLSBQdWJsaWMgKCcgLiAkRnVsbHRleHQgLiAnKSc7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZXRhTGluaycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFJlbCAgID0+ICdzZWFyY2gnLAogICAgICAgICAgICBUeXBlICA9PiAnYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCcsCiAgICAgICAgICAgIFRpdGxlID0+ICRUaXRsZSwKICAgICAgICAgICAgSHJlZiAgPT4gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgLiAnQWN0aW9uPScKICAgICAgICAgICAgICAgIC4gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259CiAgICAgICAgICAgICAgICAuICc7U3ViYWN0aW9uPU9wZW5TZWFyY2hEZXNjcmlwdGlvbkZ1bGx0ZXh0JyAuICRTZXNzaW9uLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDo6RkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQ6OkZBUSAtIGFsbCBGQVEtcmVsYXRlZCBIVE1MIGZ1bmN0aW9ucwoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgRkFRLXJlbGF0ZWQgSFRNTCBmdW5jdGlvbnMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBHZXRGQVFJdGVtVm90aW5nUmF0ZUNvbG9yKCkKUmV0dXJucyBhIGNvbG9yIGRlcGVuZGluZyBvbiB0aGUgRkFRIHJhdGUKCiAgICBteSAkVm90aW5nUmVzdWx0Q29sb3IgPSAkTGF5b3V0T2JqZWN0LT5HZXRGQVFJdGVtVm90aW5nUmF0ZUNvbG9yKAogICAgICAgIFJhdGUgPT4gJzIwJywKICAgICk7CgpSZXR1cm5zOgoKICAgICRWb3RpbmdSZXN1bHRDb2xvciA9ICdyZWQnICAgICAgICAgICMgb3IgJ29yYW5nZScgb3IgJ2dyZWVuJwoKPWN1dAoKc3ViIEdldEZBUUl0ZW1Wb3RpbmdSYXRlQ29sb3IgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtSYXRlfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gJ05lZWQgcmF0ZSEnICk7CiAgICB9CiAgICBteSAkQ3NzVG1wICAgICAgICAgICAgID0gJyc7CiAgICBteSAkVm90aW5nUmVzdWx0Q29sb3JzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGQVE6OkV4cGxvcmVyOjpJdGVtTGlzdDo6Vm90aW5nUmVzdWx0Q29sb3JzJyk7CgogICAgZm9yIG15ICRLZXkgKCBzb3J0IHsgJGIgPD0+ICRhIH0ga2V5cyAleyRWb3RpbmdSZXN1bHRDb2xvcnN9ICkgewogICAgICAgIGlmICggJFBhcmFte1JhdGV9IDw9ICRLZXkgKSB7CiAgICAgICAgICAgICRDc3NUbXAgPSAkVm90aW5nUmVzdWx0Q29sb3JzLT57JEtleX07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRDc3NUbXA7Cn0KCj1pdGVtIEZBUUxpc3RTaG93KCkKClJldHVybnMgYSBsaXN0IG9mIEZBUSBpdGVtcyBhcyBzb3J0YWJsZSBsaXN0IHdpdGggcGFnaW5hdGlvbi4KClRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBMPEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXRUaWNrZXQ6OlRpY2tldExpc3RTaG93KCk+CmluIEY8S2VybmVsL091dHB1dC9IVE1ML0xheW91dC9UaWNrZXQucG0+LgoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5GQVFMaXN0U2hvdygKICAgICAgICBGQVFJRHMgICAgID0+ICRGQVFJRHNSZWYsICAgICAgICAgICAgICAgICAgICAgICAgICMgdG90YWwgbGlzdCBvZiBGQVFJRHMsIHRoYXQgY2FuIGJlIGxpc3RlZAogICAgICAgIFRvdGFsICAgICAgPT4gc2NhbGFyIEB7ICRGQVFJRHNSZWYgfSwgICAgICAgICAgICAgIyB0b3RhbCBudW1iZXIgb2YgbGlzdCBpdGVtcywgaW4gdGhpcyBjYXNlCiAgICAgICAgVmlldyAgICAgICA9PiAkU2VsZi0+e1ZpZXd9LCAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAnU21hbGwnCiAgICAgICAgRmlsdGVyICAgICA9PiAnQWxsJywKICAgICAgICBGaWx0ZXJzICAgID0+IFwlTmF2QmFyRmlsdGVyLAogICAgICAgIEZpbHRlckxpbmsgPT4gJExpbmtGaWx0ZXIsCiAgICAgICAgVGl0bGVOYW1lICA9PiAnT3ZlcnZpZXc6IEZBUScsCiAgICAgICAgVGl0bGVWYWx1ZSA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgRW52ICAgICAgICA9PiAkU2VsZiwKICAgICAgICBMaW5rUGFnZSAgID0+ICRMaW5rUGFnZSwKICAgICAgICBMaW5rU29ydCAgID0+ICRMaW5rU29ydCwKICAgICAgICBGcm9udGVuZCAgID0+ICdBZ2VudCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgKEFnZW50fEN1c3RvbWVyfFB1YmxpYyksIGRlZmF1bHQ6IEFnZW50LCBpbmRpY2F0ZXMgZnJvbSB3aGljaCBmcm9udGVuZCB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQKICAgICk7Cgo9Y3V0CgpzdWIgRkFRTGlzdFNob3cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHRha2Ugb2JqZWN0IHJlZiB0byBsb2NhbCwgcmVtb3ZlIGl0IGZyb20gJVBhcmFtIChwcmV2ZW50IG1lbW9yeSBsZWFrKQogICAgbXkgJEVudiA9ICRQYXJhbXtFbnZ9OwogICAgZGVsZXRlICRQYXJhbXtFbnZ9OwoKICAgICMgbG9va3VwIGxhdGVzdCB1c2VkIHZpZXcgbW9kZQogICAgaWYgKCAhJFBhcmFte1ZpZXd9ICYmICRTZWxmLT57ICdVc2VyRkFRT3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAkUGFyYW17Vmlld30gPSAkU2VsZi0+eyAnVXNlckZBUU92ZXJ2aWV3JyAuICRFbnYtPntBY3Rpb259IH07CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2aWV3IG1vZGUgdG8gJ3NtYWxsJwogICAgbXkgJFZpZXcgPSAkUGFyYW17Vmlld30gfHwgJ1NtYWxsJzsKCiAgICAjIHN0b3JlIGxhdGVzdCB2aWV3IG1vZGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpLT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJGQVFPdmVydmlldycgLiAkRW52LT57QWN0aW9ufSwKICAgICAgICBWYWx1ZSAgICAgPT4gJFZpZXcsCiAgICApOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGJhY2tlbmQgZnJvbSBjb25maWcKICAgIG15ICRCYWNrZW5kcyA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpGcm9udGVuZDo6T3ZlcnZpZXcnKSB8fCAnJzsKICAgIGlmICggISRCYWNrZW5kcyApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05lZWQgY29uZmlnIG9wdGlvbiBGQVE6OkZyb250ZW5kOjpPdmVydmlldycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBoYXNoLXJlZgogICAgaWYgKCByZWYgJEJhY2tlbmRzIG5lICdIQVNIJyApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0NvbmZpZyBvcHRpb24gRkFROjpGcm9udGVuZDo6T3ZlcnZpZXcgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBmb3IgY29uZmlnIGtleQogICAgaWYgKCAhJEJhY2tlbmRzLT57JFZpZXd9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgJyRWaWV3JyEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBuYXZpZ2F0aW9uIGJhcgogICAgbXkgJFN0YXJ0SGl0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAnU3RhcnRIaXQnLAogICAgKSB8fCAxOwoKICAgICMgZ2V0IHBlcnNvbmFsIHBhZ2Ugc2hvd24gY291bnQKICAgIG15ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSA9ICdVc2VyRkFRT3ZlcnZpZXcnIC4gJFZpZXcgLiAnUGFnZVNob3duJzsKICAgIG15ICRQYWdlU2hvd24gICAgICAgICAgICAgICA9ICRTZWxmLT57JFBhZ2VTaG93blByZWZlcmVuY2VzS2V5fSB8fCAxMDsKICAgIG15ICRHcm91cCAgICAgICAgICAgICAgICAgICA9ICdGQVFPdmVydmlldycgLiAkVmlldyAuICdQYWdlU2hvd24nOwoKICAgICMgY2hlY2sgc3RhcnQgb3B0aW9uLCBpZiBoaWdoZXIgdGhlbiBlbGVtZW50cyBhdmFpbGFibGUsIHNldAogICAgIyBpdCB0byB0aGUgbGFzdCBvdmVydmlldyBwYWdlIChUaGFua3MgdG8gU3RlZmFuIFNjaG1pZHQhKQogICAgaWYgKCAkU3RhcnRIaXQgPiAkUGFyYW17VG90YWx9ICkgewogICAgICAgIG15ICRQYWdlcyA9IGludCggKCAkUGFyYW17VG90YWx9IC8gJFBhZ2VTaG93biApICsgMC45OTk5OSApOwogICAgICAgICRTdGFydEhpdCA9ICggKCAkUGFnZXMgLSAxICkgKiAkUGFnZVNob3duICkgKyAxOwogICAgfQoKICAgICMgZ2V0IGRhdGEgc2VsZWN0aW9uCiAgICBteSAlRGF0YTsKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1ByZWZlcmVuY2VzR3JvdXBzJyk7CiAgICBpZiAoICRDb25maWcgJiYgJENvbmZpZy0+eyRHcm91cH0gJiYgJENvbmZpZy0+eyRHcm91cH0tPntEYXRhfSApIHsKICAgICAgICAlRGF0YSA9ICV7ICRDb25maWctPnskR3JvdXB9LT57RGF0YX0gfTsKICAgIH0KCiAgICAjIHNldCBwYWdlIGxpbWl0IGFuZCBidWlsZCBwYWdlIG5hdmlnYXRpb24KICAgIG15ICRMaW1pdCA9ICRQYXJhbXtMaW1pdH0gfHwgMjBfMDAwOwogICAgbXkgJVBhZ2VOYXYgPSAkU2VsZi0+UGFnZU5hdkJhcigKICAgICAgICBMaW1pdCAgICAgPT4gJExpbWl0LAogICAgICAgIFN0YXJ0SGl0ICA9PiAkU3RhcnRIaXQsCiAgICAgICAgUGFnZVNob3duID0+ICRQYWdlU2hvd24sCiAgICAgICAgQWxsSGl0cyAgID0+ICRQYXJhbXtUb3RhbH0gfHwgMCwKICAgICAgICBBY3Rpb24gICAgPT4gJ0FjdGlvbj0nIC4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIExpbmsgICAgICA9PiAkUGFyYW17TGlua1BhZ2V9LAogICAgKTsKCiAgICAjIGJ1aWxkIHNob3duIEZBUSBhcnRpY2xlcyBvbiBhIHBhZ2UKICAgICRQYXJhbXtSZXF1ZXN0ZWRVUkx9ICAgID0gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iOwogICAgJFBhcmFte0dyb3VwfSAgICAgICAgICAgPSAkR3JvdXA7CiAgICAkUGFyYW17UHJlZmVyZW5jZXNLZXl9ICA9ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleTsKICAgICRQYXJhbXtQYWdlU2hvd25TdHJpbmd9ID0gJFNlbGYtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSwKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFnZVNob3duLAogICAgICAgIERhdGEgICAgICAgID0+IFwlRGF0YSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgKTsKCiAgICAjIGJ1aWxkIG5hdmlnYXRpb24gYmFyIGNvbnRlbnQKICAgICRTZWxmLT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICBteSAkTGlua0JhY2tJRCA9ICdGQVFTZWFyY2gnOwogICAgaWYgKCAkUGFyYW17TmF2fSAmJiAkUGFyYW17TmF2fSBlcSAnTm9uZScgKSB7CiAgICAgICAgJExpbmtCYWNrSUQgLj0gJ1NtYWxsJzsKICAgIH0KCiAgICAjIGJhY2sgbGluawogICAgaWYgKCAkUGFyYW17TGlua0JhY2t9ICkgewogICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJQYWdlQmFjaycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTGlua0JhY2tJRCA9PiAkTGlua0JhY2tJRCwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGZpbHRlcnMKICAgIGlmICggJFBhcmFte0ZpbHRlcnN9ICkgewoKICAgICAgICAjIGdldCBnaXZlbiBmaWx0ZXJzCiAgICAgICAgbXkgQE5hdkJhckZpbHRlcnM7CiAgICAgICAgZm9yIG15ICRQcmlvICggc29ydCBrZXlzICV7ICRQYXJhbXtGaWx0ZXJzfSB9ICkgewogICAgICAgICAgICBwdXNoIEBOYXZCYXJGaWx0ZXJzLCAkUGFyYW17RmlsdGVyc30tPnskUHJpb307CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGZpbHRlciBjb250ZW50CiAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgbG9vcCBvdmVyIGZpbHRlcnMKICAgICAgICBteSAkQ291bnQgPSAwOwogICAgICAgIGZvciBteSAkRmlsdGVyIChATmF2QmFyRmlsdGVycykgewoKICAgICAgICAgICAgIyBpbmNyZW1lbnQgZmlsdGVyIGNvdW50IGFuZCBidWlsZCBmaWx0ZXIgaXRlbQogICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyRGaWx0ZXJ9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZmlsdGVyIGlzIHNlbGVjdGVkCiAgICAgICAgICAgIGlmICggJEZpbHRlci0+e0ZpbHRlcn0gZXEgJFBhcmFte0ZpbHRlcn0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAleyRGaWx0ZXJ9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgbG9vcCBvdmVyIGNvbmZpZ3VyZWQgYmFjay1lbmRzCiAgICBmb3IgbXkgJEJhY2tlbmQgKCBzb3J0IGtleXMgJXskQmFja2VuZHN9ICkgewoKICAgICAgICAjIGJ1aWxkIG5hdmlnYXRpb24gYmFyIHZpZXcgbW9kZQogICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjdXJyZW50IHZpZXcgaXMgY29uZmlndXJlZCBpbiBiYWNrZW5kCiAgICAgICAgaWYgKCAkVmlldyBlcSAkQmFja2VuZCApIHsKICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgcGFnZSBuYXZpZ2F0aW9uIGlzIGF2YWlsYWJsZQogICAgaWYgKCVQYWdlTmF2KSB7CiAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VOYXZCYXInLAogICAgICAgICAgICBEYXRhID0+IFwlUGFnZU5hdiwKICAgICAgICApOwoKICAgICAgICAjIGRvbid0IHNob3cgY29udGV4dCBzZXR0aW5ncyBpbiBBSkFYIGNhc2UgKGUuIGcuIGluIGN1c3RvbWVyIEZBUSBoaXN0b3J5KSwKICAgICAgICAjIGJlY2F1c2UgdGhlIHN1Ym1pdCB3aXRoIHBhZ2UgcmVsb2FkIHdpbGwgbm90IHdvcmsgdGhlcmUKICAgICAgICBpZiAoICEkUGFyYW17QUpBWH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NvbnRleHRTZXR0aW5ncycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFnZU5hdiwKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIEhUTUwgY29udGVudAogICAgbXkgJE91dHB1dE5hdkJhciA9ICRTZWxmLT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudEZBUU92ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBWaWV3ID0+ICRWaWV3LAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjcmVhdGUgb3V0cHV0CiAgICBteSAkT3V0cHV0UmF3ID0gJyc7CiAgICBpZiAoICEkUGFyYW17T3V0cHV0fSApIHsKICAgICAgICAkU2VsZi0+UHJpbnQoCiAgICAgICAgICAgIE91dHB1dCA9PiBcJE91dHB1dE5hdkJhciwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dFJhdyA9ICRPdXRwdXROYXZCYXI7CiAgICB9CgogICAgIyBsb2FkIG1vZHVsZQogICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJEJhY2tlbmRzLT57JFZpZXd9LT57TW9kdWxlfSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RmF0YWxFcnJvcigpOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGJhY2tlbmQgb2JqZWN0CiAgICBteSAkT2JqZWN0ID0gJEJhY2tlbmRzLT57JFZpZXd9LT57TW9kdWxlfS0+bmV3KCAleyRFbnZ9ICk7CiAgICByZXR1cm4gaWYgISRPYmplY3Q7CgogICAgIyBydW4gbW9kdWxlCiAgICBteSAkT3V0cHV0ID0gJE9iamVjdC0+UnVuKAogICAgICAgICVQYXJhbSwKICAgICAgICBMaW1pdCAgICAgPT4gJExpbWl0LAogICAgICAgIFN0YXJ0SGl0ICA9PiAkU3RhcnRIaXQsCiAgICAgICAgUGFnZVNob3duID0+ICRQYWdlU2hvd24sCiAgICAgICAgQWxsSGl0cyAgID0+ICRQYXJhbXtUb3RhbH0gfHwgMCwKICAgICAgICBGcm9udGVuZCAgPT4gJFBhcmFte0Zyb250ZW5kfSB8fCAnQWdlbnQnLAogICAgICAgIE5hdiAgICAgICA9PiAkUGFyYW17TmF2fSB8fCAnJywKICAgICAgICBUaXRsZVNpemUgPT4gJFBhcmFte0ZBUVRpdGxlU2l6ZX0sCiAgICApOwoKICAgICMgY3JlYXRlIG91dHB1dAogICAgaWYgKCAhJFBhcmFte091dHB1dH0gKSB7CiAgICAgICAgJFNlbGYtPlByaW50KAogICAgICAgICAgICBPdXRwdXQgPT4gXCRPdXRwdXQsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXRSYXcgLj0gJE91dHB1dDsKICAgIH0KCiAgICAjIGNyZWF0ZSBvdmVydmlldyBuYXZpZ2F0aW9uIGJhcgogICAgJFNlbGYtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIHJldHVybiBjb250ZW50IGlmIGF2YWlsYWJsZQogICAgcmV0dXJuICRPdXRwdXRSYXc7Cn0KCj1pdGVtIEZBUUNvbnRlbnRTaG93KCkKCk91dHB1dHMgdGhlIG5lY2Vzc2FyeSBEVEwgYmxvY2tzIHRvIGRpc3BsYXkgdGhlIEZBUSBpdGVtIGZpZWxkcyBmb3IgdGhlIHN1cHBsaWVkIEZBUSBpdGVtIElELgpUaGUgZmllbGRzIGRpc3BsYXllZCBhcmUgYWxzbyByZXN0cmljdGVkIGJ5IHRoZSBwZXJtaXNzaW9ucyByZXByZXNlbnRlZCBieSB0aGUgc3VwcGxpZWQgaW50ZXJmYWNlCgpJZiBleGlzdCBSZXR1cm5Db250ZW50IHBhcmFtZXRlciBpdCByZXR1cm5zIHRoZSBGQVEgaXRlbXMgZmllbGRzIG9uIGEgSFRNTCBmb3JtYXRlZCBzdHJpbmcKCiAgICAkTGF5b3V0T2JqZWN0LT5GQVFDb250ZW50U2hvdygKICAgICAgICBGQVFPYmplY3QgICAgICAgPT4gJEZBUU9iamVjdCwgICAgICAgICAgICAgICAgICMgbmVlZGVkIGZvciBjb3JlIG1vZHVsZSBpbnRlcmFjdGlvbgogICAgICAgIEZBUURhdGEgICAgICAgICA9PiAleyAkRkFRRGF0YSB9LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICApOwoKICAgIG15ICRDb250ZW50ID0gJExheW91dE9iamVjdC0+RkFRQ29udGVudFNob3coCiAgICAgICAgRkFRT2JqZWN0ICAgICAgID0+ICRGQVFPYmplY3QsICAgICAgICAgICAgICAgICAjIG5lZWRlZCBmb3IgY29yZSBtb2R1bGUgaW50ZXJhY3Rpb24KICAgICAgICBGQVFEYXRhICAgICAgICAgPT4gJXsgJEZBUURhdGEgfSwKICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgIFJldHVybkNvbnRlbnQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBGQVFDb250ZW50U2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgcGFyYW1ldGVycwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KEZBUU9iamVjdCBGQVFEYXRhIEludGVyZmFjZVN0YXRlcyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkUGFyYW1OYW1lISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzdG9yZSBGQVEgb2JqZWN0IGxvY2FsbHkKICAgIG15ICRGQVFPYmplY3QgPSAkUGFyYW17RkFRT2JqZWN0fTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCB0aGUgY29uZmlnIG9mIEZBUSBmaWVsZHMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgIG15ICVGaWVsZHM7CiAgICBGSUVMRDoKICAgIGZvciBteSAkTnVtYmVyICggMSAuLiA2ICkgewoKICAgICAgICAjIGdldCBjb25maWcgb2YgRkFRIGZpZWxkCiAgICAgICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCggJ0ZBUTo6SXRlbTo6RmllbGQnIC4gJE51bWJlciApOwoKICAgICAgICAjIHNraXAgb3ZlciBub3Qgc2hvd24gZmllbGRzCiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJENvbmZpZy0+e1Nob3d9OwoKICAgICAgICAjIHN0b3JlIG9ubHkgdGhlIGNvbmZpZyBvZiBmaWVsZHMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICAkRmllbGRzeyJGaWVsZCROdW1iZXIifSA9ICRDb25maWc7CiAgICB9CgogICAgbXkgJEZ1bGxDb250ZW50OwoKICAgICMgc29ydCBzaG93biBmaWVsZHMgYnkgcHJpb3JpdHkKICAgIEZJRUxEOgogICAgZm9yIG15ICRGaWVsZCAoIHNvcnQgeyAkRmllbGRzeyRhfS0+e1ByaW99IDw9PiAkRmllbGRzeyRifS0+e1ByaW99IH0ga2V5cyAlRmllbGRzICkgewoKICAgICAgICAjIGdldCB0aGUgc3RhdGUgdHlwZSBkYXRhIG9mIHRoaXMgZmllbGQKICAgICAgICBteSAkU3RhdGVUeXBlRGF0YSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICAgICAgTmFtZSAgID0+ICRGaWVsZHN7JEZpZWxkfS0+e1Nob3d9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBkbyBub3Qgc2hvdyBmaWVsZHMgdGhhdCBhcmUgbm90IGFsbG93ZWQgaW4gdGhlIGdpdmVuIGludGVyZmFjZQogICAgICAgIG5leHQgRklFTEQgaWYgISRQYXJhbXtJbnRlcmZhY2VTdGF0ZXN9LT57ICRTdGF0ZVR5cGVEYXRhLT57U3RhdGVJRH0gfTsKCiAgICAgICAgbXkgJENhcHRpb24gPSAkRmllbGRzeyRGaWVsZH0tPnsnQ2FwdGlvbid9OwogICAgICAgIG15ICRDb250ZW50ID0gJFBhcmFte0ZBUURhdGF9LT57JEZpZWxkfSB8fCAnJzsKCiAgICAgICAgIyByZW1vdmUgYWN0aXZlIEhUTUwgY29udGVudCAoc2NyaXB0cywgYXBwbGV0cywgZXRjLi4uKQogICAgICAgIG15ICVTYWZlQ29udGVudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+U2FmZXR5KAogICAgICAgICAgICBTdHJpbmcgICAgICAgPT4gJENvbnRlbnQsCiAgICAgICAgICAgIE5vQXBwbGV0ICAgICA9PiAxLAogICAgICAgICAgICBOb09iamVjdCAgICAgPT4gMSwKICAgICAgICAgICAgTm9FbWJlZCAgICAgID0+IDEsCiAgICAgICAgICAgIE5vSW50U3JjTG9hZCA9PiAwLAogICAgICAgICAgICBOb0V4dFNyY0xvYWQgPT4gMCwKICAgICAgICAgICAgTm9KYXZhU2NyaXB0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyB0YWtlIHRoZSBzYWZlIGNvbnRlbnQgaWYgbmVjZXNzYXJ5CiAgICAgICAgaWYgKCAkU2FmZUNvbnRlbnR7UmVwbGFjZX0gKSB7CiAgICAgICAgICAgICRDb250ZW50ID0gJFNhZmVDb250ZW50e1N0cmluZ307CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgdGhlIGZpZWxkCiAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGQVFDb250ZW50JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBJdGVtSUQgICAgPT4gJFBhcmFte0ZBUURhdGF9LT57SXRlbUlEfSwKICAgICAgICAgICAgICAgIEZpZWxkICAgICA9PiAkRmllbGQsCiAgICAgICAgICAgICAgICBDYXB0aW9uICAgPT4gJENhcHRpb24sCiAgICAgICAgICAgICAgICBTdGF0ZU5hbWUgPT4gJFN0YXRlVHlwZURhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkQ29udGVudCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRkFROjpJdGVtOjpIVE1MJykgJiYgJFNlbGYtPntCcm93c2VyUmljaFRleHR9ICkgewoKICAgICAgICAgICAgIyBzZWN1cml0eT0icmVzdHJpY3RlZCIgbWF5IGJyZWFrIFNTTyAtIGRpc2FibGUgdGhpcyBmZWF0dXJlIGlmIHJlcXVlc3RlZAogICAgICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRGlzYWJsZU1TSUZyYW1lU2VjdXJpdHlSZXN0cmljdGVkJykgKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17TVNTZWN1cml0eVJlc3RyaWN0ZWR9ID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkUGFyYW17TVNTZWN1cml0eVJlc3RyaWN0ZWR9ID0gJ3NlY3VyaXR5PSJyZXN0cmljdGVkIic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUUNvbnRlbnRIVE1MJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgICAgICAgID0+ICRQYXJhbXtGQVFEYXRhfS0+e0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgRmllbGQgICAgICAgICAgICAgICAgPT4gJEZpZWxkLAogICAgICAgICAgICAgICAgICAgIE1TU2VjdXJpdHlSZXN0cmljdGVkID0+ICRQYXJhbXtNU1NlY3VyaXR5UmVzdHJpY3RlZH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgY29udmVydCBmaWVsZHMgQVNDSUkgaWYgbmVlZGVkCiAgICAgICAgICAgIGlmICggJFBhcmFte0ZBUURhdGF9LT57Q29udGVudFR5cGV9IG5lICd0ZXh0L3BsYWluJyApIHsKICAgICAgICAgICAgICAgICRDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0FzY2lpKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkQ29udGVudCwKICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUUNvbnRlbnRQbGFpbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRDb250ZW50LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgdGhlIGZpZWxkIHRvIHJldHVybiBhbGwgRkFRIEJvZHkKICAgICAgICBpZiAoICRQYXJhbXtSZXR1cm5Db250ZW50fSAmJiAkQ29udGVudCApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBpbnRlcm5hbCBzdGF0ZSB0eXBlCiAgICAgICAgICAgIG15ICRJbnRlcm5hbFN0YXRlVHlwZSA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAnaW50ZXJuYWwnLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBpZiBjdXJyZW50IGZpZWxkIGlzIGludGVybmFsCiAgICAgICAgICAgIG15ICRJc0ludGVybmFsOwogICAgICAgICAgICBpZiAoICRTdGF0ZVR5cGVEYXRhLT57U3RhdGVJRH0gPT0gJEludGVybmFsU3RhdGVUeXBlLT57U3RhdGVJRH0gKSB7CiAgICAgICAgICAgICAgICAkSXNJbnRlcm5hbCA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVGlja2V0IENvbXBvc2UKICAgICAgICAgICAgbXkgJFRpY2tldENvbXBvc2VDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6VGlja2V0Q29tcG9zZScpOwoKICAgICAgICAgICAgIyBDaGVjayBpZiBmaWVsZCBzaG91bGQgYmUgcGFydCBvZiB0aGUgcmV0dXJuaW5nIHN0cmluZwogICAgICAgICAgICBpZiAoICRUaWNrZXRDb21wb3NlQ29uZmlnLT57SW5jbHVkZUludGVybmFsfSB8fCAhJElzSW50ZXJuYWwgKSB7CgogICAgICAgICAgICAgICAgIyBDaGVjayBpZiBmaWVsZCBuYW1lIHNob3VsZCBiZSByZXR1cm5lZAogICAgICAgICAgICAgICAgaWYgKCAkVGlja2V0Q29tcG9zZUNvbmZpZy0+e1Nob3dGaWVsZE5hbWVzfSApIHsKICAgICAgICAgICAgICAgICAgICAkRnVsbENvbnRlbnQgLj0gJFNlbGYtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkQ2FwdGlvbikgLiAnIDxici8+ICc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkRnVsbENvbnRlbnQgLj0gJENvbnRlbnQgLiAnIDxici8+ICc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyByZXR1cm4gYWxsIHRoZSAocGVybWl0dGVkKSBGQVEgYm9keQogICAgaWYgKCAkUGFyYW17UmV0dXJuQ29udGVudH0gKSB7CiAgICAgICAgaWYgKCRGdWxsQ29udGVudCkgewogICAgICAgICAgICByZXR1cm4gJEZ1bGxDb250ZW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gJFNlbGYtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVGhpcyBhcnRpY2xlIGlzIGVtcHR5IScpOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBGQVFQYXRoU2hvdygpCgppZiBpdHMgYWxsb3dlZCBieSB0aGUgY29uZmlndXJhdGlvbiwgb3V0cHV0cyB0aGUgbmVjZXNzYXJ5IERUTCBibG9ja3MgdG8gZGlzcGxheSB0aGUgRkFRIGl0ZW0gcGF0aCwKYW5kIHJldHVybnMgdGhlIHZhbHVlIDEuCgogICAgbXkgJFNob3dQYXRoT2sgPSAkTGF5b3V0T2JqZWN0LT5GQVFQYXRoU2hvdygKICAgICAgICBGQVFPYmplY3QgICA9PiAkRkFRT2JqZWN0LCAgICAgICAgICAgICAgICAgICAjIG5lZWRlZCBmb3IgY29yZSBtb2R1bGUgaW50ZXJhY3Rpb24KICAgICAgICBDYXRlZ29yeUlEICA9PiA1LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgTmF2ICAgICAgICAgPT4gJ25vbmUnLCAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgKTsKCj1jdXQKCnN1YiBGQVFQYXRoU2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgcGFyYW1ldGVycwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KEZBUU9iamVjdCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkUGFyYW1OYW1lISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBwYXJhbWV0ZXJzCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtDYXRlZ29yeUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2F0ZWdvcnlJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRCbG9jayA9ICdGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50JzsKICAgIGlmICggJFBhcmFte0NhdGVnb3J5SUR9IGVxICcwJyApIHsKICAgICAgICAkQmxvY2sgPSAnRkFRUGF0aENhdGVnb3J5RWxlbWVudE5vTGluayc7CiAgICB9CgogICAgIyBvdXRwdXQgY2F0ZWdvcnkgcm9vdAogICAgJFNlbGYtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJEJsb2NrLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBOYW1lICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpEZWZhdWx0OjpSb290Q2F0ZWdvcnlOYW1lJyksCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gMCwKICAgICAgICAgICAgTmF2ICAgICAgICA9PiAkUGFyYW17TmF2fSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCBTaG93IEZBUSBQYXRoIHNldHRpbmcKICAgIG15ICRTaG93UGF0aCA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpFeHBsb3Jlcjo6UGF0aDo6U2hvdycpOwoKICAgICMgZG8gbm90IGRpc3BsYXkgdGhlIHBhdGggaWYgc2V0dGluZyBpcyBvZmYKICAgIHJldHVybiBpZiAhJFNob3dQYXRoOwoKICAgICMgc3RvcmUgRkFRIG9iamVjdCBsb2NhbGx5CiAgICBteSAkRkFRT2JqZWN0ID0gJFBhcmFte0ZBUU9iamVjdH07CgogICAgIyBnZXQgY2F0ZWdvcnkgbGlzdCB0byBjb25zdHJ1Y3QgdGhlIHBhdGgKICAgIG15ICRDYXRlZ29yeUxpc3QgPSAkRkFRT2JqZWN0LT5GQVFQYXRoTGlzdEdldCgKICAgICAgICBDYXRlZ29yeUlEID0+ICRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIG91dHB1dCBzdWJjYXRlZ29yaWVzCiAgICBmb3IgbXkgJENhdGVnb3J5RGF0YSAoIEB7JENhdGVnb3J5TGlzdH0gKSB7CgogICAgICAgIG15ICRCbG9jayA9ICdGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50JzsKICAgICAgICBpZiAoICRDYXRlZ29yeURhdGEtPntDYXRlZ29yeUlEfSA9PSAkQ2F0ZWdvcnlMaXN0LT5bLTFdLT57Q2F0ZWdvcnlJRH0gKSB7CiAgICAgICAgICAgICRCbG9jayA9ICdGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50Tm9MaW5rJzsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkQmxvY2ssCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmF2ID0+ICRQYXJhbXtOYXZ9LAogICAgICAgICAgICAgICAgJXskQ2F0ZWdvcnlEYXRhfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEZBUVJhdGluZ1N0YXJzU2hvdygpCgpPdXRwdXRzIHRoZSBuZWNlc3NhcnkgRFRMIGJsb2NrcyB0byByZXByZXNlbnQgdGhlIEZBUSBpdGVtIHJhdGluZwphcyAiU3RhcnMiIGluIHRoZSBzY2FsZSBmcm9tIDEgdG8gNS4KCiAgICAkTGF5b3V0T2JqZWN0LT5GQVFSYXRpbmdTdGFyc1Nob3coCiAgICAgICAgVm90ZVJlc3VsdCA9PiAkRkFRRGF0YS0+e1ZvdGVSZXN1bHR9LAogICAgICAgIFZvdGVzICAgICAgPT4gJEZBUURhdGEgLT57Vm90ZXN9LAogICAgKTsKCj1jdXQKCnN1YiBGQVFSYXRpbmdTdGFyc1Nob3cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHBhcmFtZXRlcnMKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhWb3RlUmVzdWx0IFZvdGVzKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkUGFyYW1OYW1lISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgc3RhcnMgYnkgbXVsdGlwbHkgYnkgNSBhbmQgZGl2aWRlIGJ5IDEwMAogICAgIyAxMDAgYmVjYXVzZSBWb3RlIHJlc3VsdCBpcyBhICUKICAgICMgNSBiZWNhdXNlIHdlIGhhdmUgb25seSA1IHN0YXJzCiAgICBteSAkU3RhckNvdW50ZXIgPSBpbnQoICRQYXJhbXtWb3RlUmVzdWx0fSAqIDAuMDUgKTsKICAgIGlmICggJFN0YXJDb3VudGVyIDwgNSApIHsKCiAgICAgICAgIyBhZGQgMSBiZWNhdXNlIGxvd2VzdCB2YWx1ZSBzaG91bGQgYmUgMQogICAgICAgICRTdGFyQ291bnRlcisrOwogICAgfQoKICAgICMgdGhlIG51bWJlciBvZiBzdGFycyBjYW4ndCBiZSBncmF0ZXIgdGhhdCA1CiAgICBlbHNpZiAoICRTdGFyQ291bnRlciA+IDUgKSB7CiAgICAgICAgJFN0YXJDb3VudGVyID0gNTsKICAgIH0KCiAgICAjIG91dHB1dCByYXRpbmcgYmxvY2sKICAgICRTZWxmLT5CbG9jaygKICAgICAgICBOYW1lID0+ICdWaWV3UmF0aW5nJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZG8gbm90IG91dHB1dCBhbnkgc3RhciBpZiB0aGlzIEZBUSBoYXMgYmVlbiBub3Qgdm90ZWQKICAgIGlmICggJFBhcmFte1ZvdGVzfSBlcSAnMCcgKSB7CiAgICAgICAgJFN0YXJDb3VudGVyID0gMDsKICAgIH0KCiAgICAjIHNob3cgc3RhcnMgb25seSBpZiB0aGUgRkFRIGl0ZW0gaGFzIGJlZW4gdm90ZWQgYXQgbGVhc3Qgb25jZSBldmVuIGlmIHRoZSAkVm90ZVJlc3VsdCBpcyAwCiAgICBlbHNlIHsKCiAgICAgICAgIyBvdXRwdXQgc3RhcnMKICAgICAgICBmb3IgKCAxIC4uICRTdGFyQ291bnRlciApIHsKICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUmF0ZVN0YXJzJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdXRwdXQgc3RhcnMgdGV4dAogICAgJFNlbGYtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1JhdGVTdGFyc0NvdW50JywKICAgICAgICBEYXRhID0+IHsgU3RhcnMgPT4gJFN0YXJDb3VudGVyIH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBGQVFTaG93TGF0ZXN0TmV3c0JveCgpCgpTaG93cyBhbiBpbmZvIGJveCB3aXRoIHRoZSBsYXN0IHVwZGF0ZWQgb3IgbGFzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcy4KRGVwZW5kaW5nIG9uIHRoZSB1c2VzIGludGVyZmFjZSAoYWdlbnQsIGN1c3RvbWVyLCBwdWJsaWMpIG9ubHkgdGhlIGFwcHJvcHJpYXRlCmFydGljbGVzIGFyZSBzaG93biBoZXJlLgoKICAgICRMYXlvdXRPYmplY3QtPkZBUVNob3dMYXRlc3ROZXdzQm94KAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LCAgICAgICAgICAgICAgICAgIyBuZWVkZWQgZm9yIGNvcmUgbW9kdWxlIGludGVyYWN0aW9uCiAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdMYXN0Q3JlYXRlJywgICAgICAgICAgICAgICAjIChMYXN0Q3JlYXRlIHwgTGFzdENoYW5nZSkKICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ1B1YmxpYycsICAgICAgICAgICAgICAgICAgICMgKEFnZW50LCBDdXN0b21lciwgUHVibGljKQogICAgICAgIENhdGVnb3J5SUQgICAgICA9PiA1LAogICAgICAgIEludGVyZmFjZSAgICAgICA9PiAkU2VsZi0+e0ludGVyZmFjZX0sCiAgICAgICAgSW50ZXJmYWNlU3RhdGVzID0+ICRTZWxmLT57SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICBOYXYgICAgICAgICAgICAgPT4gJ25vbmUnLCAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgRkFRU2hvd0xhdGVzdE5ld3NCb3ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHBhcmFtZXRlcnMKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhGQVFPYmplY3QgVHlwZSBNb2RlIEludGVyZmFjZSBJbnRlcmZhY2VTdGF0ZXMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtDYXRlZ29yeUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgQ2F0ZWdvcnlJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdHlwZQogICAgaWYgKCAkUGFyYW17VHlwZX0gIX4gbXsgTGFzdENyZWF0ZSB8IExhc3RDaGFuZ2UgfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1R5cGUgbXVzdCBiZSBlaXRoZXIgTGFzdENyZWF0ZSBvciBMYXN0Q2hhbmdlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBtb2RlCiAgICBpZiAoICRQYXJhbXtNb2RlfSAhfiBteyBBZ2VudCB8IEN1c3RvbWVyIHwgUHVibGljIH14bXMgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdNb2RlIG11c3QgYmUgZWl0aGVyIEFnZW50LCBDdXN0b21lciBvciBQdWJsaWMhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIEN1c3RvbWVyVXNlcgogICAgaWYgKCAkUGFyYW17TW9kZX0gZXEgJ0N1c3RvbWVyJyAmJiAhJFBhcmFte0N1c3RvbWVyVXNlcn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEN1c3RvbWVyVXNlciEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IG9yZGVyIGJ5IHNlYXJjaCBwYXJhbWV0ZXIgYW5kIGhlYWRlciBiYXNlZCBvbiB0eXBlCiAgICBteSAkT3JkZXJCeTsKICAgIG15ICRIZWFkZXI7CiAgICBteSAkUlNTVGl0bGU7CiAgICBpZiAoICRQYXJhbXtUeXBlfSBlcSAnTGFzdENyZWF0ZScgKSB7CiAgICAgICAgJE9yZGVyQnkgID0gJ0NyZWF0ZWQnOwogICAgICAgICRIZWFkZXIgICA9ICdMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMnOwogICAgICAgICRSU1NUaXRsZSA9ICdGQVEgQXJ0aWNsZXMgKG5ldyBjcmVhdGVkKSc7CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtUeXBlfSBlcSAnTGFzdENoYW5nZScgKSB7CiAgICAgICAgJE9yZGVyQnkgID0gJ0NoYW5nZWQnOwogICAgICAgICRIZWFkZXIgICA9ICdMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMnOwogICAgICAgICRSU1NUaXRsZSA9ICdGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJzsKICAgIH0KCiAgICBteSAkUmVzdWx0ID0gLTE7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBzaG93IGxhc3QgYWRkZWQvdXBkYXRlZCBhcnRpY2xlcwogICAgbXkgJFNob3cgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIkZBUTo6RXhwbG9yZXI6OiRQYXJhbXtUeXBlfTo6U2hvdyIpOwogICAgaWYgKCAkU2hvdy0+eyAkUGFyYW17SW50ZXJmYWNlfS0+e05hbWV9IH0gKSB7CgogICAgICAgICMgc3RvcmUgRkFRIG9iamVjdCBsb2NhbGx5CiAgICAgICAgbXkgJEZBUU9iamVjdCA9ICRQYXJhbXtGQVFPYmplY3R9OwoKICAgICAgICAjIHRvIHN0b3JlIHNlYXJjaCBwYXJhbSBmb3IgY2F0ZWdvcmllcwogICAgICAgIG15ICVDYXRlZ29yeVNlYXJjaFBhcmFtOwoKICAgICAgICAjIGlmIHN1YmNhdGVnb3JpZXMgc2hvdWxkIGFsc28gYmUgc2hvd24KICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgiRkFROjpFeHBsb3Jlcjo6JFBhcmFte1R5cGV9OjpTaG93U3ViQ2F0ZWdvcnlJdGVtcyIpICkgewoKICAgICAgICAgICAgIyBmaW5kIHRoZSBzdWJjYXRlZ29yaWVzIG9mIHRoaXMgY2F0ZWdvcnkKICAgICAgICAgICAgbXkgJFN1YkNhdGVnb3J5SURzUmVmID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlTdWJDYXRlZ29yeUlETGlzdCgKICAgICAgICAgICAgICAgIFBhcmVudElEICAgICA9PiAkUGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgICAgICBNb2RlICAgICAgICAgPT4gJFBhcmFte01vZGV9LAogICAgICAgICAgICAgICAgSXRlbVN0YXRlcyAgID0+ICRQYXJhbXtJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRQYXJhbXtDdXN0b21lclVzZXJ9IHx8ICcnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZWFyY2ggaW4gdGhlIGdpdmVuIGNhdGVnb3J5IGFuZCBhZGQgdGhlIHN1YmNhdGVnb3J5CiAgICAgICAgICAgICRDYXRlZ29yeVNlYXJjaFBhcmFte0NhdGVnb3J5SURzfSA9IFsgJFBhcmFte0NhdGVnb3J5SUR9LCBAeyRTdWJDYXRlZ29yeUlEc1JlZn0gXTsKICAgICAgICB9CgogICAgICAgICMgYSBjYXRlZ29yeSBpcyBnaXZlbiBhbmQgc3ViY2F0ZWdvcmllcyBzaG91bGQgbm90IGJlIHNob3duCiAgICAgICAgZWxzaWYgKCAkUGFyYW17Q2F0ZWdvcnlJRH0gKSB7CgogICAgICAgICAgICAjIHNlYXJjaCBvbmx5IGluIHRoZSBnaXZlbiBjYXRlZ29yeQogICAgICAgICAgICAkQ2F0ZWdvcnlTZWFyY2hQYXJhbXtDYXRlZ29yeUlEc30gPSBbICRQYXJhbXtDYXRlZ29yeUlEfSBdOwogICAgICAgIH0KCiAgICAgICAgIyBzZWFyY2ggdGhlIEZBUSBhcnRpY2xlcwogICAgICAgIG15IEBJdGVtSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgICAgICAgICBTdGF0ZXMgICAgICAgICAgID0+ICRQYXJhbXtJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFskT3JkZXJCeV0sCiAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWydEb3duJ10sCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgPT4gJFBhcmFte0ludGVyZmFjZX0sCiAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCJGQVE6OkV4cGxvcmVyOjokUGFyYW17VHlwZX06OkxpbWl0IikgfHwgNSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgJUNhdGVnb3J5U2VhcmNoUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyB0aGVyZSBpcyBzb21ldGhpbmcgdG8gc2hvdwogICAgICAgIGlmIChASXRlbUlEcykgewoKICAgICAgICAgICAgJFJlc3VsdCA9IDE7CgogICAgICAgICAgICAjIHNob3cgdGhlIGluZm8gYm94CiAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luZm9Cb3hGQVFNaW5pTGlzdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBIZWFkZXIgPT4gJEhlYWRlciwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgdGhlIFJTUyBGZWVkIGljb24KICAgICAgICAgICAgaWYgKCAkUGFyYW17TW9kZX0gZXEgJ1B1YmxpYycgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luZm9Cb3hGQVFNaW5pTGlzdE5ld3NSU1MnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICA9PiAkT3JkZXJCeSwKICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFJTU1RpdGxlLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJEl0ZW1JRCAoQEl0ZW1JRHMpIHsKCiAgICAgICAgICAgICAgICAjIGdldCBGQVEgZGF0YQogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSXRlbUlELAogICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNob3cgdGhlIGFydGljbGUgcm93CiAgICAgICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hdiA9PiAkUGFyYW17TmF2fSwKICAgICAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRSZXN1bHQ7Cn0KCj1pdGVtIEZBUVNob3dUb3AxMCgpCgpTaG93cyBhbiBpbmZvIGJveCB3aXRoIHRoZSBUb3AgMTAgRkFRIGFydGljbGVzLgpEZXBlbmRpbmcgb24gdGhlIHVzZXMgaW50ZXJmYWNlIChhZ2VudCwgY3VzdG9tZXIsIHB1YmxpYykgb25seSB0aGUgYXBwcm9wcmlhdGUKYXJ0aWNsZXMgYXJlIHNob3duIGhlcmUuCgogICAgJExheW91dE9iamVjdC0+RkFRU2hvd1RvcDEwKAogICAgICAgIEZBUU9iamVjdCAgICAgICA9PiAkRkFRT2JqZWN0LCAgICAgICAgICAgICAgICAgIyBuZWVkZWQgZm9yIGNvcmUgbW9kdWxlIGludGVyYWN0aW9uCiAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdQdWJsaWMnLCAgICAgICAgICAgICAgICAgICAjIChBZ2VudCwgQ3VzdG9tZXIsIFB1YmxpYykKICAgICAgICBDYXRlZ29yeUlEICAgICAgPT4gNSwKICAgICAgICBJbnRlcmZhY2UgICAgICAgPT4gJFNlbGYtPntJbnRlcmZhY2V9LAogICAgICAgIEludGVyZmFjZVN0YXRlcyA9PiAkU2VsZi0+e0ludGVyZmFjZVN0YXRlc30sCiAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgTmF2ICAgICAgICAgICAgID0+ICdub25lJywgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICApOwoKPWN1dAoKc3ViIEZBUVNob3dUb3AxMCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgcGFyYW1ldGVycwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KEZBUU9iamVjdCBNb2RlIEludGVyZmFjZSBJbnRlcmZhY2VTdGF0ZXMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtDYXRlZ29yeUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgQ2F0ZWdvcnlJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbW9kZQogICAgaWYgKCAkUGFyYW17TW9kZX0gIX4gbXsgQWdlbnQgfCBDdXN0b21lciB8IFB1YmxpYyB9eG1zICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTW9kZSBtdXN0IGJlIGVpdGhlciBBZ2VudCwgQ3VzdG9tZXIgb3IgUHVibGljIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBDdXN0b21lclVzZXIKICAgIGlmICggJFBhcmFte01vZGV9IGVxICdDdXN0b21lcicgJiYgISRQYXJhbXtDdXN0b21lclVzZXJ9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDdXN0b21lclVzZXIhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkUmVzdWx0ID0gLTE7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBzaG93IGxhc3QgYWRkZWQvdXBkYXRlZCBhcnRpY2xlcwogICAgbXkgJFNob3cgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6RXhwbG9yZXI6OlRvcDEwOjpTaG93Jyk7CiAgICBpZiAoICRTaG93LT57ICRQYXJhbXtJbnRlcmZhY2V9LT57TmFtZX0gfSApIHsKCiAgICAgICAgIyBzdG9yZSBGQVEgb2JqZWN0IGxvY2FsbHkKICAgICAgICBteSAkRkFRT2JqZWN0ID0gJFBhcmFte0ZBUU9iamVjdH07CgogICAgICAgICMgdG8gc3RvcmUgc2VhcmNoIHBhcmFtIGZvciBjYXRlZ29yaWVzCiAgICAgICAgbXkgJUNhdGVnb3J5U2VhcmNoUGFyYW07CgogICAgICAgICMgaWYgc3ViY2F0ZWdvcmllcyBzaG91bGQgYWxzbyBiZSBzaG93bgogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkV4cGxvcmVyOjpUb3AxMDo6U2hvd1N1YkNhdGVnb3J5SXRlbXMnKSApIHsKCiAgICAgICAgICAgICMgZmluZCB0aGUgc3ViY2F0ZWdvcmllcyBvZiB0aGlzIGNhdGVnb3J5CiAgICAgICAgICAgIG15ICRTdWJDYXRlZ29yeUlEc1JlZiA9ICRGQVFPYmplY3QtPkNhdGVnb3J5U3ViQ2F0ZWdvcnlJRExpc3QoCiAgICAgICAgICAgICAgICBQYXJlbnRJRCAgICAgPT4gJFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgICAgICAgICAgTW9kZSAgICAgICAgID0+ICRQYXJhbXtNb2RlfSwKICAgICAgICAgICAgICAgIEl0ZW1TdGF0ZXMgICA9PiAkUGFyYW17SW50ZXJmYWNlU3RhdGVzfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkUGFyYW17Q3VzdG9tZXJVc2VyfSB8fCAnJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2VhcmNoIGluIHRoZSBnaXZlbiBjYXRlZ29yeSBhbmQgYWRkIHRoZSBzdWJjYXRlZ29yeQogICAgICAgICAgICAkQ2F0ZWdvcnlTZWFyY2hQYXJhbXtDYXRlZ29yeUlEc30gPSBbICRQYXJhbXtDYXRlZ29yeUlEfSwgQHskU3ViQ2F0ZWdvcnlJRHNSZWZ9IF07CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgdG9wIDEwIGFydGljbGVzIGZvciBjYXRlZ29yaWVzIHdpdGggYXQgbGVhc3Qgcm8gcGVybWlzc2lvbnMKICAgICAgICBteSAkVG9wMTBJdGVtSURzUmVmID0gJEZBUU9iamVjdC0+RkFRVG9wMTBHZXQoCiAgICAgICAgICAgIEludGVyZmFjZSA9PiAkUGFyYW17SW50ZXJmYWNlfS0+e05hbWV9LAogICAgICAgICAgICBMaW1pdCAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkV4cGxvcmVyOjpUb3AxMDo6TGltaXQnKSB8fCAxMCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAlQ2F0ZWdvcnlTZWFyY2hQYXJhbSwKICAgICAgICApIHx8IFtdOwoKICAgICAgICAjIHRoZXJlIGlzIHNvbWV0aGluZyB0byBzaG93CiAgICAgICAgaWYgKCAkVG9wMTBJdGVtSURzUmVmICYmIHJlZiAkVG9wMTBJdGVtSURzUmVmIGVxICdBUlJBWScgJiYgQHskVG9wMTBJdGVtSURzUmVmfSApIHsKCiAgICAgICAgICAgICRSZXN1bHQgPSAxOwoKICAgICAgICAgICAgIyBzaG93IHRoZSBpbmZvIGJveAogICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJbmZvQm94RkFRTWluaUxpc3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgSGVhZGVyID0+ICdUb3AgMTAgRkFRIGFydGljbGVzJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgdGhlIFJTUyBGZWVkIGljb24KICAgICAgICAgICAgaWYgKCAkUGFyYW17TW9kZX0gZXEgJ1B1YmxpYycgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luZm9Cb3hGQVFNaW5pTGlzdE5ld3NSU1MnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICA9PiAnVG9wMTAnLAogICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAnRkFRIEFydGljbGVzIChUb3AgMTApJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE51bWJlcjsKICAgICAgICAgICAgZm9yIG15ICRUb3AxMEl0ZW0gKCBAeyRUb3AxMEl0ZW1JRHNSZWZ9ICkgewoKICAgICAgICAgICAgICAgICMgaW5jcmVhc2UgdGhlIG51bWJlcgogICAgICAgICAgICAgICAgJE51bWJlcisrOwoKICAgICAgICAgICAgICAgICMgZ2V0IEZBUSBkYXRhCiAgICAgICAgICAgICAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICAgID0+ICRUb3AxMEl0ZW0tPntJdGVtSUR9LAogICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNob3cgdGhlIGFydGljbGUgcm93CiAgICAgICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hdiA9PiAkUGFyYW17TmF2fSwKICAgICAgICAgICAgICAgICAgICAgICAgJUZBUURhdGEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzaG93IHRoZSBUb3AtMTAgcG9zaXRpb24gbnVtYmVyCiAgICAgICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvd1Bvc2l0aW9uTnVtYmVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyID0+ICROdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRSZXN1bHQ7Cn0KCj1pdGVtIEZBUVNob3dRdWlja1NlYXJjaCgpCgpTaG93cyBhbiBpbmZvIGJveCB3aXRoIHRoZSBRdWljayBTZWFyY2guCgogICAgJExheW91dE9iamVjdC0+RkFRU2hvd1F1aWNrU2VhcmNoKAogICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnUHVibGljJywgICAgICAgICAgICAgICAgICAgIyAoQWdlbnQsIEN1c3RvbWVyLCBQdWJsaWMpCiAgICAgICAgSW50ZXJmYWNlICAgICAgID0+ICRTZWxmLT57SW50ZXJmYWNlfSwKICAgICAgICBJbnRlcmZhY2VTdGF0ZXMgPT4gJFNlbGYtPntJbnRlcmZhY2VTdGF0ZXN9LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgIE5hdiAgICAgICAgICAgICA9PiAnbm9uZScsICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgICAgIFNlYXJjaEJhY2tMaW5rICA9PiAkQmFzZTY0RW5jb2RlZFVybCwgICAgICAgICAgIyBvcHRpb25hbAogICAgKTsKCj1jdXQKCnN1YiBGQVFTaG93UXVpY2tTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHBhcmFtZXRlcnMKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhNb2RlIEludGVyZmFjZSBJbnRlcmZhY2VTdGF0ZXMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbW9kZQogICAgaWYgKCAkUGFyYW17TW9kZX0gIX4gbXsgQWdlbnQgfCBBZ2VudFNtYWxsIHwgQ3VzdG9tZXIgfCBQdWJsaWMgfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ01vZGUgbXVzdCBiZSBlaXRoZXIgQWdlbnQsIEN1c3RvbWVyIG9yIFB1YmxpYyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGFjdGlvbiBtb2R1bGUKICAgIG15ICRBY3Rpb247CiAgICBpZiAoICRQYXJhbXtNb2RlfSBlcSAnQWdlbnRTbWFsbCcgKSB7CiAgICAgICAgJEFjdGlvbiA9ICdBZ2VudEZBUVNlYXJjaFNtYWxsJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRBY3Rpb24gPSAkUGFyYW17TW9kZX0gLiAnRkFRU2VhcmNoJzsKICAgIH0KCiAgICAjIGNoZWNrIEN1c3RvbWVyVXNlcgogICAgaWYgKCAkUGFyYW17TW9kZX0gZXEgJ0N1c3RvbWVyJyAmJiAhJFBhcmFte0N1c3RvbWVyVXNlcn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEN1c3RvbWVyVXNlciEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2hvdyBxdWljayBzZWFyY2gKICAgIG15ICRTaG93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGQVE6OkV4cGxvcmVyOjpRdWlja1NlYXJjaDo6U2hvdycpOwogICAgaWYgKCAkU2hvdy0+eyAkUGFyYW17SW50ZXJmYWNlfS0+e05hbWV9IH0gfHwgJFBhcmFte01vZGV9IGVxICdBZ2VudFNtYWxsJyApIHsKCiAgICAgICAgIyBjYWxsIFF1aWNrU2VhcmNoIGJsb2NrCiAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdRdWlja1NlYXJjaCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJEFjdGlvbiwKICAgICAgICAgICAgICAgIE5hdiAgICAgICAgICAgID0+ICRQYXJhbXtOYXZ9IHx8ICcnLAogICAgICAgICAgICAgICAgU2VhcmNoQmFja0xpbmsgPT4gJFBhcmFte1NlYXJjaEJhY2tMaW5rfSB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OkZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0OwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0OjpGQVEgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgbGluayBvYmplY3QgKEZBUSkKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdDo6RkFRLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgcGFyYW1zCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVXNlckxhbmd1YWdlIFVzZXJJRCkpIHsKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9IHx8IGRpZSAiR290IG5vICROZWVkZWQhIjsKICAgIH0KCiAgICAjIFRPRE86IGNoZWNrIGlmIHRoZSBuZXcgaW5zdGFuY2UgaXMgc3RpbGwgbmVlZGVkIHdpdGggdGhlIE9NIQoKICAgICMgV2UgbmVlZCBvdXIgb3duIExheW91dE9iamVjdCBpbnN0YW5jZSB0byBhdm9pZCBibG9ja2RhdGEgY29sbGlzaW9ucwogICAgIyAgIHdpdGggdGhlIG1haW4gcGFnZS4KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fSA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQtPm5ldyggJXskU2VsZn0gKTsKCiAgICAjIGRlZmluZSBuZWVkZWQgdmFyaWFibGVzCiAgICAkU2VsZi0+e09iamVjdERhdGF9ID0gewogICAgICAgIE9iamVjdCAgID0+ICdGQVEnLAogICAgICAgIFJlYWxuYW1lID0+ICdGQVEnLAogICAgfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFRhYmxlQ3JlYXRlQ29tcGxleCgpCgpyZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgYmxvY2sgZGF0YQoKICAgIG15IEBCbG9ja0RhdGEgPSAkTGlua09iamVjdC0+VGFibGVDcmVhdGVDb21wbGV4KAogICAgICAgIE9iamVjdExpbmtMaXN0V2l0aERhdGEgPT4gJE9iamVjdExpbmtMaXN0UmVmLAogICAgKTsKCmEgcmVzdWx0IGNvdWxkIGJlCgogICAgJUJsb2NrRGF0YSA9ICgKICAgICAgICB7CiAgICAgICAgICAgIE9iamVjdCAgICA9PiAnRkFRJywKICAgICAgICAgICAgQmxvY2tuYW1lID0+ICdGQVEnLAogICAgICAgICAgICBIZWFkbGluZSAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0ZBUSMnLAogICAgICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTMwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdUaXRsZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1N0YXRlJywKICAgICAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDExMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ3JlYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMTAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJdGVtTGlzdCA9PiBbCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzEyMzEyMzEyMycsCiAgICAgICAgICAgICAgICAgICAgICAgIENzcyAgICAgPT4gJ3N0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCInLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ1RoZSB0aXRsZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdpbnRlcm5hbCAoYWdlbnQpJywKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMS0wMSAxMjoxMjowMCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzQzNDIzNCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnVGhlIHRpdGxlIG9mIEZBUSAyJywKICAgICAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ3B1YmxpYyAoYWxsKScsCiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDgtMDEtMDEgMTI6MTI6MDAnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICApOwoKPWN1dAoKc3ViIFRhYmxlQ3JlYXRlQ29tcGxleCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNvbnZlcnQgdGhlIGxpc3QKICAgIG15ICVMaW5rTGlzdDsKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IH0gKSB7CgogICAgICAgICMgZXh0cmFjdCBsaW5rIHR5cGUgTGlzdAogICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9OwoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyRMaW5rVHlwZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGRpcmVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoIHNvcnQga2V5cyAleyREaXJlY3Rpb25MaXN0fSApIHsKCiAgICAgICAgICAgICAgICAkTGlua0xpc3R7JEZBUUlEfS0+e0RhdGF9ID0gJERpcmVjdGlvbkxpc3QtPnskRkFRSUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIHRoZSBpdGVtIGxpc3QKICAgIG15IEBJdGVtTGlzdDsKICAgIGZvciBteSAkRkFRSUQgKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAlTGlua0xpc3QgKSB7CgogICAgICAgICMgZXh0cmFjdCBGQVEgZGF0YQogICAgICAgIG15ICRGQVEgPSAkTGlua0xpc3R7JEZBUUlEfS0+e0RhdGF9OwoKICAgICAgICBteSBASXRlbUNvbHVtbnMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgS2V5ICAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRGQVEtPntOdW1iZXJ9LAogICAgICAgICAgICAgICAgTGluayAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30gLiAnQWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9JyAuICRGQVFJRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkRkFRLT57VGl0bGV9LAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICRGQVEtPntTdGF0ZX0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkRkFRLT57Q3JlYXRlZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBASXRlbUxpc3QsIFxASXRlbUNvbHVtbnM7CiAgICB9CgogICAgcmV0dXJuIGlmICFASXRlbUxpc3Q7CgogICAgIyBkZWZpbmUgdGhlIGJsb2NrIGRhdGEKICAgIG15ICRGQVFIb29rID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGQVE6OkZBUUhvb2snKTsKICAgIG15ICVCbG9jayAgID0gKAogICAgICAgIE9iamVjdCAgICA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSwKICAgICAgICBCbG9ja25hbWUgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e1JlYWxuYW1lfSwKICAgICAgICBIZWFkbGluZSAgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRGQVFIb29rLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMzAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1RpdGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnU3RhdGUnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NyZWF0ZWQnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMzAsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICAgICBJdGVtTGlzdCA9PiBcQEl0ZW1MaXN0LAogICAgKTsKCiAgICByZXR1cm4gKCBcJUJsb2NrICk7Cn0KCj1pdGVtIFRhYmxlQ3JlYXRlU2ltcGxlKCkKCnJldHVybiBhIGhhc2ggd2l0aCB0aGUgbGluayBvdXRwdXQgZGF0YQoKICAgIG15ICVMaW5rT3V0cHV0RGF0YSA9ICRMaW5rT2JqZWN0LT5UYWJsZUNyZWF0ZVNpbXBsZSgKICAgICAgICBPYmplY3RMaW5rTGlzdFdpdGhEYXRhID0+ICRPYmplY3RMaW5rTGlzdFJlZiwKICAgICk7CgphIHJlc3VsdCBjb3VsZCBiZSBSZXR1cm4KCiAgICAlTGlua091dHB1dERhdGEgPSAoCiAgICAgICAgTm9ybWFsOjpTb3VyY2UgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0Y6NTU1NTUnLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gJ0ZBUSM1NTU1NTU6IFRoZSBGQVEgdGl0bGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdGOjIyMjIyJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdGQVEjMjIyMjI6IFRpdGxlIG9mIEZBUSAyMjIyMicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUGFyZW50Q2hpbGQ6OlRhcmdldCA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnRjo3Nzc3NycsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnRkFRIzc3Nzc3OiBGQVEgdGl0bGUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgKTsKCj1jdXQKCnN1YiBUYWJsZUNyZWF0ZVNpbXBsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkRkFRSG9vayA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRkFROjpGQVFIb29rJyk7CiAgICBteSAlTGlua091dHB1dERhdGE7CiAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB9ICkgewoKICAgICAgICAjIGV4dHJhY3QgbGluayB0eXBlIExpc3QKICAgICAgICBteSAkTGlua1R5cGVMaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfTsKCiAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkaXJlY3Rpb24gbGlzdAogICAgICAgICAgICBteSAkRGlyZWN0aW9uTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufTsKCiAgICAgICAgICAgIG15IEBJdGVtTGlzdDsKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JERpcmVjdGlvbkxpc3R9ICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBGQVEgZGF0YQogICAgICAgICAgICAgICAgbXkgJEZBUSA9ICREaXJlY3Rpb25MaXN0LT57JEZBUUlEfTsKCiAgICAgICAgICAgICAgICAjIGRlZmluZSBpdGVtIGRhdGEKICAgICAgICAgICAgICAgIG15ICVJdGVtID0gKAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0Y6JyAuICRGQVEtPntOdW1iZXJ9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gIiRGQVFIb29rJEZBUS0+e051bWJlcn06ICRGQVEtPntUaXRsZX0iLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QmFzZWxpbmt9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkRkFRSUQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcHVzaCBASXRlbUxpc3QsIFwlSXRlbTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgaXRlbSBsaXN0IHRvIGxpbmsgb3V0cHV0IGRhdGEKICAgICAgICAgICAgJExpbmtPdXRwdXREYXRheyAkTGlua1R5cGUgLiAnOjonIC4gJERpcmVjdGlvbiB9LT57RkFRfSA9IFxASXRlbUxpc3Q7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlTGlua091dHB1dERhdGE7Cn0KCj1pdGVtIENvbnRlbnRTdHJpbmdDcmVhdGUoKQoKcmV0dXJuIGEgb3V0cHV0IHN0cmluZwoKICAgIG15ICRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5Db250ZW50U3RyaW5nQ3JlYXRlKAogICAgICAgIENvbnRlbnREYXRhID0+ICRIYXNoUmVmLAogICAgKTsKCj1jdXQKCnN1YiBDb250ZW50U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDb250ZW50RGF0YX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbnRlbnREYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBUT0RPOiBjaGVjayB3aHkgbm8gcmV0dXJuIGlzIG5lZWRlZCEKICAgIHJldHVybjsKfQoKPWl0ZW0gU2VsZWN0YWJsZU9iamVjdExpc3QoKQoKcmV0dXJuIGFuIGFycmF5IGhhc2ggd2l0aCBzZWxlY3RhYmxlIG9iamVjdHMKCiAgICBteSBAU2VsZWN0YWJsZU9iamVjdExpc3QgPSAkTGlua09iamVjdC0+U2VsZWN0YWJsZU9iamVjdExpc3QoCiAgICAgICAgU2VsZWN0ZWQgPT4gJElkZW50aWZpZXIsICAjIChvcHRpb25hbCkKICAgICk7CgphIHJlc3VsdCBjb3VsZCBiZQoKICAgIEBTZWxlY3RhYmxlT2JqZWN0TGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdGQVEnLAogICAgICAgICAgICBWYWx1ZSA9PiAnRkFRJywKICAgICAgICB9LAogICAgKTsKCj1jdXQKCnN1YiBTZWxlY3RhYmxlT2JqZWN0TGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxlY3RlZDsKICAgIGlmICggJFBhcmFte1NlbGVjdGVkfSAmJiAkUGFyYW17U2VsZWN0ZWR9IGVxICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9ICkgewogICAgICAgICRTZWxlY3RlZCA9IDE7CiAgICB9CgogICAgIyBvYmplY3Qgc2VsZWN0IGxpc3QKICAgIG15IEBPYmplY3RTZWxlY3RMaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgICAgIFZhbHVlICAgID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntSZWFsbmFtZX0sCiAgICAgICAgICAgIFNlbGVjdGVkID0+ICRTZWxlY3RlZCwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQE9iamVjdFNlbGVjdExpc3Q7Cn0KCj1pdGVtIFNlYXJjaE9wdGlvbkxpc3QoKQoKcmV0dXJuIGFuIGFycmF5IGhhc2ggd2l0aCBzZWFyY2ggb3B0aW9ucwoKICAgIG15IEBTZWFyY2hPcHRpb25MaXN0ID0gJExpbmtPYmplY3QtPlNlYXJjaE9wdGlvbkxpc3QoCiAgICAgICAgU3ViT2JqZWN0ID0+ICdCbGEnLCAgIyAob3B0aW9uYWwpCiAgICApOwoKYSByZXN1bHQgY291bGQgYmUKCiAgICBAU2VhcmNoT3B0aW9uTGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgICA9PiAnTnVtYmVyJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdGQVEjJywKICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRGb3JtU3RyaW5nLAogICAgICAgICAgICBGb3JtRGF0YSAgPT4gJzEyMzQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgPT4gJ1RpdGxlJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUaXRsZScsCiAgICAgICAgICAgIElucHV0U3RyZyA9PiAkRm9ybVN0cmluZywKICAgICAgICAgICAgRm9ybURhdGEgID0+ICdCbGFCbGEnLAogICAgICAgIH0sCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaE9wdGlvbkxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNlYXJjaCBvcHRpb24gbGlzdAogICAgbXkgJEZBUUhvb2sgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0ZBUTo6RkFRSG9vaycpOwogICAgbXkgQFNlYXJjaE9wdGlvbkxpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdOdW1iZXInLAogICAgICAgICAgICBOYW1lID0+ICRGQVFIb29rLAogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnVGl0bGUnLAogICAgICAgICAgICBOYW1lID0+ICdUaXRsZScsCiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdXaGF0JywKICAgICAgICAgICAgTmFtZSA9PiAnRnVsbHRleHQnLAogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb3JtIGtleQogICAgZm9yIG15ICRSb3cgKEBTZWFyY2hPcHRpb25MaXN0KSB7CiAgICAgICAgJFJvdy0+e0Zvcm1LZXl9ID0gJ1NFQVJDSDo6JyAuICRSb3ctPntLZXl9OwogICAgfQoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgYWRkIGZvcm0gZGF0YSBhbmQgaW5wdXQgc3RyaW5nCiAgICBST1c6CiAgICBmb3IgbXkgJFJvdyAoQFNlYXJjaE9wdGlvbkxpc3QpIHsKCiAgICAgICAgIyBnZXQgZm9ybSBkYXRhCiAgICAgICAgJFJvdy0+e0Zvcm1EYXRhfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRSb3ctPntGb3JtS2V5fSApOwoKICAgICAgICAjIHBhcnNlIHRoZSBpbnB1dCB0ZXh0IGJsb2NrCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW5wdXRUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkUm93LT57Rm9ybUtleX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUm93LT57Rm9ybURhdGF9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICAkUm93LT57SW5wdXRTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0xpbmtPYmplY3QnLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIEBTZWFyY2hPcHRpb25MaXN0Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZpbHRlckVsZW1lbnRQb3N0OjpGQVE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZGF0YQogICAgcmV0dXJuIGlmICEkUGFyYW17RGF0YX07CiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtEYXRhfSBuZSAnU0NBTEFSJzsKICAgIHJldHVybiBpZiAhJHsgJFBhcmFte0RhdGF9IH07CiAgICByZXR1cm4gaWYgISRQYXJhbXtUZW1wbGF0ZUZpbGV9OwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICByZXR1cm4gaWYgISRMYXlvdXRPYmplY3QtPntFbnZSZWZ9LT57J1VzZXJJc0dyb3VwUm9bZmFxXSd9OwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGFsbG93ZWQgdGVtcGxhdGUgbmFtZXMKICAgIG15ICRWYWxpZFRlbXBsYXRlcyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok91dHB1dDo6RmlsdGVyRWxlbWVudFBvc3QnKS0+e0ZBUX0tPntUZW1wbGF0ZXN9OwoKICAgICMgY2hlY2sgdGVtcGxhdGUgbmFtZQogICAgcmV0dXJuIGlmICEkVmFsaWRUZW1wbGF0ZXMtPnsgJFBhcmFte1RlbXBsYXRlRmlsZX0gfTsKCiAgICAjIGlmIG5vIHNlc3Npb24gY29va2llcyBhcmUgdXNlZCB3ZSBhdHRhY2ggdGhlIHNlc3Npb24gYXMgVVJMIHBhcmFtZXRlcgogICAgbXkgJFNlc3Npb25TdHJpbmcgPSAnJzsKICAgIGlmICggISRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvblVzZUNvb2tpZScpICkgewogICAgICAgIG15ICRTZXNzaW9uSUQgPSAkUGFyYW17U2Vzc2lvbklEfQogICAgICAgICAgICB8fCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25OYW1lJykgKQogICAgICAgICAgICB8fCAnJzsKICAgICAgICAkU2Vzc2lvblN0cmluZyA9ICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbk5hbWUnKSAuICc9JyAuICRTZXNzaW9uSUQgLiAnOyc7CiAgICB9CgogICAgbXkgJFN0YXJ0UGF0dGVybiAgICA9ICc8IS0tIFsgXSBPdXRwdXRGaWx0ZXJIb29rX1RpY2tldE9wdGlvbnNFbmQgWyBdIC0tPiAuKz8nOwogICAgbXkgJEZBUVRyYW5zbGF0YWJsZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRkFRJyk7CgogICAgIyBhZGQgRkFRIGxpbmsgdG8gYW4gZXhpc3RpbmcgT3B0aW9ucyBibG9jawogICAgIyRGaW5pc2hQYXR0ZXJuIHdpbGwgYmUgcmVwbGFjZWQgYnkgJFJlcGxhY2UKICAgIGlmICggJHsgJFBhcmFte0RhdGF9IH0gPX4gbXsgJFN0YXJ0UGF0dGVybiB9aXhtcyApIHsKCiAgICAgICAgbXkgJEZpbmlzaFBhdHRlcm4gPSAnPC9kaXY+JzsKICAgICAgICBteSAkUmVwbGFjZSAgICAgICA9IDw8IkVORCI7CiAgICAgICAgICAgICAgICAgICAgICAgIDxhICBocmVmPVwiI1wiIGlkPVwiT3B0aW9uRkFRXCI+WyAkRkFRVHJhbnNsYXRhYmxlIF08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CkVORAogICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHN7ICgkU3RhcnRQYXR0ZXJuKSAkRmluaXNoUGF0dGVybiB9eyQxJFJlcGxhY2V9aXhtczsKCiAgICAgICAgIyBpbmplY3QgdGhlIG5lY2Vzc2FyeSBKUyBpbnRvIHRoZSB0ZW1wbGF0ZQogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTT25Eb2N1bWVudENvbXBsZXRlKCBDb2RlID0+IDw8IkVPRiIpOwovKmdsb2JhbCBGQVE6IHRydWUgKi8KRkFRLkFnZW50LlRpY2tldENvbXBvc2UuSW5pdEZBUVRpY2tldENvbXBvc2UoXCQoJyNSaWNoVGV4dCcpKTsKXCQoJyNPcHRpb25GQVEnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgewogICAgdmFyIEZBUUlGcmFtZSA9ICc8aWZyYW1lIGNsYXNzPVwiVGV4dE9wdGlvbiBGQVFcIiBzcmM9XCInICsgQ29yZS5Db25maWcuR2V0KCdDR0lIYW5kbGUnKSArICc/JyArICckU2Vzc2lvblN0cmluZycgKyAnQWN0aW9uPUFnZW50RkFRRXhwbG9yZXI7TmF2PU5vbmU7U3ViamVjdD07V2hhdD1cIj48L2lmcmFtZT4nOwogICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coRkFRSUZyYW1lLCAnJywgJzEwcHgnLCAnQ2VudGVyJywgdHJ1ZSk7CiAgICByZXR1cm4gZmFsc2U7Cn0pOwpFT0YKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBhZGQgRkFRIGxpbmsgYW5kIGl0cyBvd24gYmxvY2ssIGlmIHRoZXJlIG5vIFRpY2tldE9wdGlvbnMgYmxvY2sgd2FzIGNhbGxlZAogICAgJFN0YXJ0UGF0dGVybiA9ICc8IS0tIFsgXSBPdXRwdXRGaWx0ZXJIb29rX05vVGlja2V0T3B0aW9uc0ZhbGxiYWNrIFsgXSAtLT4gLis/JzsKICAgIG15ICRPcHRpb25zVHJhbnNsYXRhYmxlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdPcHRpb25zJyk7CiAgICBteSAkUmVwbGFjZSAgICAgICAgICAgICA9IDw8IkVORCI7CjwhLS0gT3V0cHV0RmlsdGVySG9va19Ob1RpY2tldE9wdGlvbnNGYWxsYmFjayAtLT4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JE9wdGlvbnNUcmFuc2xhdGFibGU6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhICBocmVmPVwiI1wiIGlkPVwiT3B0aW9uRkFRXCI+WyAkRkFRVHJhbnNsYXRhYmxlIF08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIkNsZWFyXCI+PC9kaXY+CkVORAogICAgJHsgJFBhcmFte0RhdGF9IH0gPX4gc3sgKCRTdGFydFBhdHRlcm4pIH17JFJlcGxhY2V9aXhtczsKCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU09uRG9jdW1lbnRDb21wbGV0ZSggQ29kZSA9PiA8PCJFT0YiKTsKLypnbG9iYWwgRkFROiB0cnVlICovCkZBUS5BZ2VudC5UaWNrZXRDb21wb3NlLkluaXRGQVFUaWNrZXRDb21wb3NlKFwkKCcjUmljaFRleHQnKSk7ClwkKCcjT3B0aW9uRkFRJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIHZhciBGQVFJRnJhbWUgPSAnPGlmcmFtZSBjbGFzcz0iVGV4dE9wdGlvbiBGQVEiIHNyYz0iJyArIENvcmUuQ29uZmlnLkdldCgnQ0dJSGFuZGxlJykgKyAnPycgKyAnJFNlc3Npb25TdHJpbmcnICsgJ0FjdGlvbj1BZ2VudEZBUUV4cGxvcmVyO05hdj1Ob25lO1N1YmplY3Q9O1doYXQ9Ij48L2lmcmFtZT4nOwogICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coRkFRSUZyYW1lLCAnJywgJzEwcHgnLCAnQ2VudGVyJywgdHJ1ZSk7CiAgICByZXR1cm4gZmFsc2U7Cn0pOwpFT0YKCiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgQ29tbW9uClslIFRyYW5zbGF0ZSgiaW50ZXJuYWwiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJwdWJsaWMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJleHRlcm5hbCIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkZBUSBOdW1iZXIiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJMYXRlc3QgdXBkYXRlZCBGQVEgYXJ0aWNsZXMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJMYXRlc3QgY3JlYXRlZCBGQVEgYXJ0aWNsZXMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJUb3AgMTAgRkFRIGFydGljbGVzIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiU3ViY2F0ZWdvcnkgb2YiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJObyByYXRlIHNlbGVjdGVkISIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkV4cGxvcmVyIikgfCBodG1sICVdCgojIEZBUSAnc3RhdGVzJwpbJSBUcmFuc2xhdGUoInB1YmxpYyAoYWxsKSIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoImV4dGVybmFsIChjdXN0b21lcikiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJpbnRlcm5hbCAoYWdlbnQpIikgfCBodG1sICVdCgojIFN0YXRzClslIFRyYW5zbGF0ZSgiU3RhcnQgZGF5IikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiU3RhcnQgbW9udGgiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJTdGFydCB5ZWFyIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiRW5kIGRheSIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkVuZCBtb250aCIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkVuZCB5ZWFyIikgfCBodG1sICVdCgojIEFnZW50RkFRWm9vbSBNZW51LU1vZHVsZXMKWyUgVHJhbnNsYXRlKCJUaGFua3MgZm9yIHlvdXIgdm90ZSEiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJObyByYXRlIHNlbGVjdGVkISIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIllvdSBoYXZlIGFscmVhZHkgdm90ZWQhIikgfCBodG1sICVdCgojIEZBUSBQcmludCBzY3JlZW5zClslIFRyYW5zbGF0ZSgiRkFRIEFydGljbGUgUHJpbnQiKSB8IGh0bWwgJV0KCiMgUlNTIEZlZWRzClslIFRyYW5zbGF0ZSgiRkFRIEFydGljbGVzIChUb3AgMTApIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCkiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpIikgfCBodG1sICVdCgojIEFnZW50RkFRQ2F0ZWdvcnkucG0KWyUgVHJhbnNsYXRlKCJGQVEgY2F0ZWdvcnkgdXBkYXRlZCEiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJGQVEgY2F0ZWdvcnkgYWRkZWQhIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiQSBjYXRlZ29yeSBzaG91bGQgaGF2ZSBhIG5hbWUhIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiVGhpcyBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0cyIpIHwgaHRtbCAlXQoKIyBBZ2VudEZBUUxhbmd1YWdlLnBtClslIFRyYW5zbGF0ZSgiRkFRIGxhbmd1YWdlIGFkZGVkISIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkZBUSBsYW5ndWFnZSB1cGRhdGVkISIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlRoZSBuYW1lIGlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlRoaXMgbGFuZ3VhZ2UgYWxyZWFkeSBleGlzdHMhIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiVGhlIG5hbWUgaXMgcmVxdWlyZWQhIikgfCBodG1sICVdCgojIERlZmF1bHQgRkFRIEZpZWxkIGNhcHRpb25zClslIFRyYW5zbGF0ZSgiU3ltcHRvbSIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlByb2JsZW0iKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJTb2x1dGlvbiIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIEZvcm1TY3JlZW4gTm9TaWRlYmFyIj4KCiAgICA8aDE+WyUgVHJhbnNsYXRlKCJBZGQgRkFRIEFydGljbGUiKSB8IGh0bWwgJV08L2gxPgogICAgPHAgY2xhc3M9IkFzdGVyaXNrRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiQWxsIGZpZWxkcyBtYXJrZWQgd2l0aCBhbiBhc3RlcmlzayAoKikgYXJlIG1hbmRhdG9yeS4iKSB8IGh0bWwgJV08L3A+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFBZGQiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNhdmUiLz4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkZvcm1JRCIgdmFsdWU9IlslIERhdGEuRm9ybUlEIHwgaHRtbCAlXSIvPgoKICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVGl0bGUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPiogPC9zcGFuPlslIFRyYW5zbGF0ZSgiVGl0bGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJUaXRsZSIgaWQ9IlRpdGxlIiB2YWx1ZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLlRpdGxlU2VydmVyRXJyb3IgfCBodG1sICVdIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaXRsZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGl0bGVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJLZXl3b3JkcyI+WyUgVHJhbnNsYXRlKCJLZXl3b3JkcyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IktleXdvcmRzIiBpZD0iS2V5d29yZHMiIHZhbHVlPSJbJSBEYXRhLktleXdvcmRzIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iQ2F0ZWdvcnlJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+KiA8L3NwYW4+WyUgVHJhbnNsYXRlKCJDYXRlZ29yeSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYXRlZ29yeU9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDYXRlZ29yeUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDYXRlZ29yeUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiQSBjYXRlZ29yeSBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU3RhdGVJRCI+WyUgVHJhbnNsYXRlKCJTdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdGF0ZU9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkxhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJMYW5ndWFnZUlEIj5bJSBUcmFuc2xhdGUoIkxhbmd1YWdlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhbmd1YWdlT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTGFuZ3VhZ2UiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9MYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTGFuZ3VhZ2VJRCIgdmFsdWU9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV0iLz4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vTGFuZ3VhZ2UiKSAlXQoKClslIFJlbmRlckJsb2NrU3RhcnQoIkFwcHJvdmFsIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJBcHByb3ZlZCI+WyUgVHJhbnNsYXRlKCJBcHByb3ZhbCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5BcHByb3ZhbE9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFwcHJvdmFsIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZCIpICVdCgojIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBmaXhlZCBkeW5hbWljIGZpZWxkIGJsb2NrcyBmb3IgY3VzdG9taXphdGlvbnMKIyBOb3RlOiBGaWVsZDEgYW5kIEZpZWxkMiBhcmUgdGhlIG5hbWVzIG9mIHRoZSBmaWVsZHMgYW5kIGhhZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwKIyBmaWVsZCBuYW1lcwojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiMgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgojICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiMgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgojICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQXR0YWNobWVudFVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQXR0YWNobWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBdHRhY2htZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpbGVuYW1lIHwgaHRtbCAlXSAoWyUgRGF0YS5GaWxlc2l6ZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGlkPSJBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdIiBuYW1lPSJBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9idXR0b24+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjQXR0YWNobWVudERlbGV0ZVslIERhdGEuRmlsZUlEIHwgaHRtbCAlXScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkKCcjQXR0YWNobWVudERlbGV0ZVslIERhdGEuRmlsZUlEIHwgaHRtbCAlXScpLmNsb3Nlc3QoJ2Zvcm0nKSk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkZpbGVVcGxvYWQiIGlkPSJGaWxlVXBsb2FkIiB0eXBlPSJmaWxlIiBzaXplPSI0MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJBdHRhY2htZW50VXBsb2FkIiBuYW1lPSJBdHRhY2htZW50VXBsb2FkIiB2YWx1ZT0iMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNGaWxlVXBsb2FkJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgdmFyICRGb3JtID0gJCgnI0ZpbGVVcGxvYWQnKS5jbG9zZXN0KCdmb3JtJyk7CiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCRGb3JtKTsKICAgICAgICAkRm9ybS5maW5kKCcjQXR0YWNobWVudFVwbG9hZCcpLnZhbCgnMScpLmVuZCgpLnN1Ym1pdCgpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIkF0dGFjaG1lbnRVcGxvYWQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmljaFRleHQiKSAlXQpbJSBJbnNlcnRUZW1wbGF0ZSgiUmljaFRleHRFZGl0b3IudHQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiUmljaFRleHQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRQ29udGVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5GaWVsZCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkNhcHRpb24pIHwgaHRtbCAlXTo8YnIvPjxzcGFuIGNsYXNzPSJGQVFTdGF0ZU5hbWUiPihbJSBUcmFuc2xhdGUoRGF0YS5TdGF0ZU5hbWUpIHwgaHRtbCAlXSk8L3NwYW4+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWNoVGV4dEZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJbJSBEYXRhLkZpZWxkIHwgaHRtbCAlXSIgY2xhc3M9IlJpY2hUZXh0IiBuYW1lPSJbJSBEYXRhLkZpZWxkIHwgaHRtbCAlXSIgcm93cz0iMTUiIGNvbHM9IjcwIj5bJSBEYXRhLkNvbnRlbnQgfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFDb250ZW50IikgJV0KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgaWQ9IkZBUVN1Ym1pdCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGUiKSB8IGh0bWwgJV0iPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1zcXVhcmUtbyI+PC9pPiBbJSBUcmFuc2xhdGUoIkNyZWF0ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRGQVFFeHBsb3JlcjtDYXRlZ29yeUlEPVslIERhdGEuQ2F0ZWdvcnlJRCB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUFkZCIpICVdCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiQoJyNGQVFTdWJtaXQnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgLy8gcHJldmVudCB0b28gZmFzdCBzdWJtaXRpb25zIHRoYXQgY291bGQgbGVhZCBpbnRvIG5vIGNoYW5nZXMgc2VudCB0byBzZXJ2ZXIsIGR1ZSB0byBSVEUgdG8KICAgIC8vIHRleHRhcmVhIGRhdGEgdHJhbnNmZXIKICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAkKCcjRkFRU3VibWl0JykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogICAgfSwgMjUwKTsKfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIkluZm9Cb3hGQVFNaW5pTGlzdCIpICVdCjx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdyIpICVdCiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IHVyaSAlXSIgY2xhc3M9IkFzQmxvY2siIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSAoWyUgRGF0YS5DYXRlZ29yeU5hbWUgfCB1cmkgJV0pIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlRpdGxlIHwgdHJ1bmNhdGUoNTApIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYXRlZ29yeVNob3J0TmFtZSB8IGh0bWwgJV0gLSBbJSBEYXRhLkNoYW5nZWQgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdyIpICVdCiAgICA8L3Rib2R5Pgo8L3RhYmxlPgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5mb0JveEZBUU1pbmlMaXN0IikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDE+WyUgVHJhbnNsYXRlKCJGQVEgQ2F0ZWdvcnkgTWFuYWdlbWVudCIpIHwgaHRtbCAlXTwvaDE+CiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1sZWZ0Ij48L2k+WyUgVHJhbnNsYXRlKCJHbyB0byBvdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUFkZCIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIGNhdGVnb3J5IikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3UmVzdWx0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgc3VtbWFyeT0iRkFRIGNhdGVnb3JpZXMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1Jlc3VsdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbJSBJRiBEYXRhLlZhbGlkICE9ICd2YWxpZCclXWNsYXNzPSJJbnZhbGlkIlslIEVORCAlXSA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1DaGFuZ2U7Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIExhc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJEZWxldGVDYXRlZ29yeUlEWyUgRGF0YS5DYXRlZ29yeUlEIHwgaHRtbCAlXSIgY2xhc3M9IlRyYXNoQ2FuIiBocmVmPSIjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRyYXNoLW8iPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdOiBbJSBEYXRhLk5hbWUgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCi8qZ2xvYmFsIEZBUTogdHJ1ZSAqLwogICAgRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZy5CaW5kQ29uZmlybWF0aW9uRGlhbG9nKHsKICAgICAgICBFbGVtZW50SUQ6ICAgICAgICAgICAgICAgICAgJ0RlbGV0ZUNhdGVnb3J5SURbJSBEYXRhLkNhdGVnb3J5SUQgfCBodG1sICVdJywKICAgICAgICBFbGVtZW50U2VsZWN0b3I6ICAgICAgICAgICAgJyNEZWxldGVDYXRlZ29yeUlEWyUgRGF0YS5DYXRlZ29yeUlEIHwgaHRtbCAlXScsCiAgICAgICAgRGlhbG9nQ29udGVudFF1ZXJ5U3RyaW5nOiAgICdBY3Rpb249QWdlbnRGQVFDYXRlZ29yeTtTdWJhY3Rpb249RGVsZXRlO0NhdGVnb3J5SUQ9WyUgRGF0YS5DYXRlZ29yeUlEIHwgdXJpICVdJywKICAgICAgICBDb25maXJtZWRBY3Rpb25RdWVyeVN0cmluZzogJ0FjdGlvbj1BZ2VudEZBUUNhdGVnb3J5O1N1YmFjdGlvbj1EZWxldGVBY3Rpb247Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV0nLAogICAgICAgIERpYWxvZ1RpdGxlOiAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkRlbGV0ZSBDYXRlZ29yeSIpIHwgSlNPTiAlXSwKICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICBZZXM6IFslIFRyYW5zbGF0ZSgiWWVzIikgfCBKU09OICVdLAogICAgICAgICAgICBObzogIFslIFRyYW5zbGF0ZSgiTm8iKSB8IEpTT04gJV0sCiAgICAgICAgICAgIE9rOiAgWyUgVHJhbnNsYXRlKCJPayIpIHwgSlNPTiAlXQogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdVcGRhdGUiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJBZGQiKSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWRkIENhdGVnb3J5IikgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFkZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckVkaXQiKSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBDYXRlZ29yeSIpIHwgaHRtbCAlXTwvaDI+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJFZGl0IikgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlslIERhdGEuQWN0aW9uIHwgdXJpICVdQWN0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2F0ZWdvcnlJRCIgdmFsdWU9IlslIERhdGEuQ2F0ZWdvcnlJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJOYW1lIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ik5hbWUiIGlkPSJOYW1lIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuTmFtZVNlcnZlckVycm9yIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKERhdGEuTmFtZVNlcnZlckVycm9yTWVzc2FnZSkgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJQYXJlbnRJRCI+WyUgVHJhbnNsYXRlKCJTdWJjYXRlZ29yeSBvZiIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNhdGVnb3J5T3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJQZXJtaXNzaW9uR3JvdXBzIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIlBlcm1pc3Npb24iKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Hcm91cE9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGVybWlzc2lvbkdyb3Vwc0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGVybWlzc2lvbkdyb3Vwc1NlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIGdyb3VwLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJBZ2VudCBncm91cHMgdGhhdCBjYW4gYWNjZXNzIGFydGljbGVzIGluIHRoaXMgY2F0ZWdvcnkuIikgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRPcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkNvbW1lbnQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5Db21tZW50U2VydmVyRXJyb3IgfCBodG1sICVdIiBtYXhsZW5ndGg9IjgwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDb21tZW50RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDb21tZW50U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIldpbGwgYmUgc2hvd24gYXMgY29tbWVudCBpbiBFeHBsb3Jlci4iKSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1VwZGF0ZSIpICVdCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRGVsZXRlIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIk5vQWZmZWN0ZWQiKSAlXQo8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBXMzAwcHgiPgogICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2ZpZWxkc2V0Pgo8cCBjbGFzcz0iU3BhY2luZ1RvcCBDZW50ZXIiPgogICAgWyUgVHJhbnNsYXRlKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/IikgfCBodG1sICVdCjwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vQWZmZWN0ZWQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWZmZWN0ZWQiKSAlXQo8cD4KICAgIFslIFRyYW5zbGF0ZSgiWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgY2F0ZWdvcnkuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIEZBUSBhcnRpY2xlIGFuZC9vciBpcyBwYXJlbnQgb2YgYXQgbGVhc3Qgb25lIG90aGVyIGNhdGVnb3J5IikgfCBodG1sICVdCjwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkFmZmVjdGVkIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFmZmVjdGVkSXRlbXMiKSAlXQo8cCBjbGFzcz0iU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tIj4KICAgIFslIFRyYW5zbGF0ZSgiVGhpcyBjYXRlZ29yeSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgRkFRIGFydGljbGUocykiKSB8IGh0bWwgJV06CjwvcD4KPHVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBZmZlY3RlZEl0ZW1zUm93IikgJV0KICAgIDxsaSBjbGFzcz0iSW5kZW50IFNwYWNpbmdCb3R0b21TbWFsbCI+CiAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdWyUgRGF0YS5MaW5rICVdO0FjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPVslIERhdGEuSXRlbUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgWyUgQ29uZmlnKCJGQVE6OkZBUUhvb2siKSAlXTpbJSBEYXRhLk51bWJlciB8IGh0bWwgJV08c3Bhbj4mbmJzcDsmbWRhc2g7PC9zcGFuPiBbJSBEYXRhLlRpdGxlIHwgdHJ1bmNhdGUoNjApIHwgaHRtbCAlXQogICAgICAgIDwvYT4KICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBZmZlY3RlZEl0ZW1zUm93IikgJV0KPC91bD4KWyUgUmVuZGVyQmxvY2tFbmQoIkFmZmVjdGVkSXRlbXMiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWZmZWN0ZWRTdWJDYXRlZ29yaWVzIikgJV0KPHAgY2xhc3M9IlNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbSI+CiAgICBbJSBUcmFuc2xhdGUoIlRoaXMgY2F0ZWdvcnkgaXMgcGFyZW50IG9mIHRoZSBmb2xsb3dpbmcgc3ViY2F0ZWdvcmllcyIpIHwgaHRtbCAlXToKPC9wPgo8dWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFmZmVjdGVkU3ViQ2F0ZWdvcmllc1JvdyIpICVdCiAgICA8bGkgY2xhc3M9IkluZGVudCBTcGFjaW5nQm90dG9tU21hbGwiPgogICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayAlXTtBY3Rpb249QWdlbnRGQVFFeHBsb3JlcjtDYXRlZ29yeUlEPVslIERhdGEuQ2F0ZWdvcnlJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgIFslIERhdGEuTG9uZ05hbWUgfCBodG1sICVdCiAgICAgICAgPC9hPgogICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFmZmVjdGVkU3ViQ2F0ZWdvcmllc1JvdyIpICVdCjwvdWw+ClslIFJlbmRlckJsb2NrRW5kKCJBZmZlY3RlZFN1YkNhdGVnb3JpZXMiKSAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIkRlbGV0ZSIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFczMDBweCI+CiAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICBbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2ZpZWxkc2V0Pgo8cCBjbGFzcz0iU3BhY2luZ1RvcCBDZW50ZXIiPgogICAgWyUgVHJhbnNsYXRlKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgRkFRIGFydGljbGU/IikgfCBodG1sICVdCjwvcD4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTdGFydE5vcm1hbCIpICVdCiAgICA8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBGb3JtU2NyZWVuIE5vU2lkZWJhciI+CiAgICAgICAgPGgxPlslIFRyYW5zbGF0ZSgiRWRpdCIpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKCJGQVEiKSB8IGh0bWwgJV06IFslIERhdGEuTnVtYmVyIHwgaHRtbCAlXTwvaDE+CiAgICAgICAgPHAgY2xhc3M9IkFzdGVyaXNrRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiQWxsIGZpZWxkcyBtYXJrZWQgd2l0aCBhbiBhc3RlcmlzayAoKikgYXJlIG1hbmRhdG9yeS4iKSB8IGh0bWwgJV08L3A+CgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgpbJSBSZW5kZXJCbG9ja0VuZCgiU3RhcnROb3JtYWwiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU3RhcnRTbWFsbCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJFZGl0IikgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoIkZBUSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OdW1iZXIgfCBodG1sICVdPC9oMT4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iQXN0ZXJpc2tFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJBbGwgZmllbGRzIG1hcmtlZCB3aXRoIGFuIGFzdGVyaXNrICgqKSBhcmUgbWFuZGF0b3J5LiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsICYgY2xvc2UiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KWyUgUmVuZGVyQmxvY2tFbmQoIlN0YXJ0U21hbGwiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRRWRpdCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJGb3JtSUQiIHZhbHVlPSJbJSBEYXRhLkZvcm1JRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJdGVtSUQiIHZhbHVlPSJbJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTY3JlZW5UeXBlIiB2YWx1ZT0iWyUgRGF0YS5TY3JlZW5UeXBlIHwgaHRtbCAlXSIvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBbJSBEYXRhLkZpZWxkc2V0Q2xhc3MgfCBodG1sICVdIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlRpdGxlIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qIDwvc3Bhbj5bJSBUcmFuc2xhdGUoIlRpdGxlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJUaXRsZSIgaWQ9IlRpdGxlIiB2YWx1ZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLlRpdGxlU2VydmVyRXJyb3IgfCBodG1sICVdIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGl0bGVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaXRsZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IktleXdvcmRzIj5bJSBUcmFuc2xhdGUoIktleXdvcmRzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJLZXl3b3JkcyIgaWQ9IktleXdvcmRzIiB2YWx1ZT0iWyUgRGF0YS5LZXl3b3JkcyB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkNhdGVnb3J5SUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPiogPC9zcGFuPlslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYXRlZ29yeU9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ2F0ZWdvcnlJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ2F0ZWdvcnlJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJBIGNhdGVnb3J5IGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU3RhdGVJRCI+WyUgVHJhbnNsYXRlKCJTdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlN0YXRlT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRPcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkxhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTGFuZ3VhZ2VJRCI+WyUgVHJhbnNsYXRlKCJMYW5ndWFnZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhbmd1YWdlT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJMYW5ndWFnZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0xhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTGFuZ3VhZ2VJRCIgdmFsdWU9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV0iLz4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vTGFuZ3VhZ2UiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQXBwcm92YWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJBcHByb3ZlZCI+WyUgVHJhbnNsYXRlKCJBcHByb3ZhbCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkFwcHJvdmFsT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBcHByb3ZhbCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmllbGQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZCIpICVdCgojIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBmaXhlZCBkeW5hbWljIGZpZWxkIGJsb2NrcyBmb3IgY3VzdG9taXphdGlvbnMKIyBOb3RlOiBGaWVsZDEgYW5kIEZpZWxkMiBhcmUgdGhlIG5hbWVzIG9mIHRoZSBmaWVsZHMgYW5kIGhhZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwKIyBmaWVsZCBuYW1lcwojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiMgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgojICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiMgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgojICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQXR0YWNobWVudFVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkF0dGFjaG1lbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBdHRhY2htZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdIChbJSBEYXRhLkZpbGVzaXplIHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGlkPSJBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdIiBuYW1lPSJBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9idXR0b24+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiQoJyNBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CkNvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkKCcjQXR0YWNobWVudERlbGV0ZVslIERhdGEuRmlsZUlEIHwgaHRtbCAlXScpLmNsb3Nlc3QoJ2Zvcm0nKSk7Cn0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iRmlsZVVwbG9hZCIgaWQ9IkZpbGVVcGxvYWQiIHR5cGU9ImZpbGUiIHNpemU9IjQwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJBdHRhY2htZW50VXBsb2FkIiBuYW1lPSJBdHRhY2htZW50VXBsb2FkIiB2YWx1ZT0iMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiQoJyNGaWxlVXBsb2FkJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CnZhciAkRm9ybSA9ICQoJyNGaWxlVXBsb2FkJykuY2xvc2VzdCgnZm9ybScpOwpDb3JlLkZvcm0uVmFsaWRhdGUuRGlzYWJsZVZhbGlkYXRpb24oJEZvcm0pOwokRm9ybS5maW5kKCcjQXR0YWNobWVudFVwbG9hZCcpLnZhbCgnMScpLmVuZCgpLnN1Ym1pdCgpOwp9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudFVwbG9hZCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSaWNoVGV4dCIpICVdClslIEluc2VydFRlbXBsYXRlKCJSaWNoVGV4dEVkaXRvci50dCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJSaWNoVGV4dCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFDb250ZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5GaWVsZCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkNhcHRpb24pIHwgaHRtbCAlXTo8YnIvPjxzcGFuIGNsYXNzPSJGQVFTdGF0ZU5hbWUiPihbJSBUcmFuc2xhdGUoRGF0YS5TdGF0ZU5hbWUpIHwgaHRtbCAlXSk8L3NwYW4+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IlslIERhdGEuRmllbGQgfCBodG1sICVdIiBjbGFzcz0iUmljaFRleHQiIG5hbWU9IlslIERhdGEuRmllbGQgfCBodG1sICVdIiByb3dzPSIxNSIgY29scz0iNzAiPlslIERhdGEuQ29udGVudCB8IGh0bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRQ29udGVudCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbmROb3JtYWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgaWQ9IkZBUVN1Ym1pdCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJVcGRhdGUiKSB8IGh0bWwgJV0iPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jaGVjayI+PC9pPiBbJSBUcmFuc2xhdGUoIlVwZGF0ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJFbmROb3JtYWwiKSAlXQoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRRWRpdCIpICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkVuZFNtYWxsIikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iRkFRU3VibWl0IiB0eXBlPSJidXR0b24iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlVwZGF0ZSIpIHwgaHRtbCAlXSI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLXNxdWFyZS1vIj48L2k+IFslIFRyYW5zbGF0ZSgiVXBkYXRlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJFbmRTbWFsbCIpICVdCgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Zvcm0+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiQoJyNGQVFTdWJtaXQnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgLy8gcHJldmVudCB0b28gZmFzdCBzdWJtaXRpb25zIHRoYXQgY291bGQgbGVhZCBpbnRvIG5vIGNoYW5nZXMgc2VudCB0byBzZXJ2ZXIsIGR1ZSB0byBSVEUgdG8KICAgIC8vIHRleHRhcmVhIGRhdGEgdHJhbnNmZXIKICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAkKCcjRkFRU3VibWl0JykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogICAgfSwgMjUwKTsKfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIEZBUSI+CiAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgPGgxPlslIFRyYW5zbGF0ZSgiRkFRIEV4cGxvcmVyIikgfCBodG1sICVdPC9oMT4KCiAgICA8dWwgY2xhc3M9IkJyZWFkQ3J1bWIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IikgJV0KICAgICAgICA8bGk+CiAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudEZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9WyUgRGF0YS5DYXRlZ29yeUlEIHwgdXJpICVdO05hdj1bJSBEYXRhLk5hdiB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLk5hbWUgfCBodG1sICVdCiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRUGF0aENhdGVnb3J5RWxlbWVudCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUVBhdGhDYXRlZ29yeUVsZW1lbnROb0xpbmsiKSAlXQogICAgICAgIDxsaT5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUVBhdGhDYXRlZ29yeUVsZW1lbnROb0xpbmsiKSAlXQoKICAgIDwvdWw+CgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiBbJSBEYXRhLlNpZGViYXJDbGFzcyB8IGh0bWwgJV0iPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUXVpY2tTZWFyY2giKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDM+WyUgVHJhbnNsYXRlKCJTZWFyY2giKSB8IGh0bWwgJV08L2gzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25saXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9IlNlYXJjaEJveCIgYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIERhdGEuQWN0aW9uIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNlYXJjaCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik5hdiIgdmFsdWU9IlslIERhdGEuTmF2IHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJGdWxsdGV4dCIgdmFsdWU9IlslIERhdGEuU2VhcmNoIHwgaHRtbCAlXSIgaWQ9IlNlYXJjaCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2VhcmNoIikgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNlYXJjaCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUXVpY2sgU2VhcmNoIikgfCBodG1sICVdPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJXaWxkY2FyZHMgYXJlIGFsbG93ZWQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGQVFTZWFyY2hCdXR0b24gU3BhY2luZ1RvcCIgaWQ9IlslIERhdGEuQWN0aW9uIHwgdXJpICVdIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRGF0YS5BY3Rpb24gfCB1cmkgJV07TmF2PVslIERhdGEuTmF2IHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXNlYXJjaCI+PC9pPiBbJSBUcmFuc2xhdGUoIkFkdmFuY2VkIFNlYXJjaCIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjQWdlbnRGQVFTZWFyY2gnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuQWdlbnQuU2VhcmNoLk9wZW5TZWFyY2hEaWFsb2coJ0FnZW50RkFRU2VhcmNoJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIlF1aWNrU2VhcmNoIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkluZm9Cb3hGQVFNaW5pTGlzdCIpICVdCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoRGF0YS5IZWFkZXIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iVGFibGVsaWtlIEZBUU1pbmlMaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+ClslIFJlbmRlckJsb2NrU3RhcnQoIkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3dQb3NpdGlvbk51bWJlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk51bWJlciB8IGh0bWwgJV0uClslIFJlbmRlckJsb2NrRW5kKCJJbmZvQm94RkFRTWluaUxpc3RJdGVtUm93UG9zaXRpb25OdW1iZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPVslIERhdGEuSXRlbUlEIHwgdXJpICVdO05hdj1bJSBEYXRhLk5hdiB8IHVyaSAlXSIgdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIChbJSBEYXRhLkNhdGVnb3J5TmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNhdGVnb3J5U2hvcnROYW1lIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSAtIFslIERhdGEuTGFuZ3VhZ2UgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKERhdGEuU3RhdGUpIHwgaHRtbCAlXSAtIFslIERhdGEuQ3JlYXRlZCB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJJbmZvQm94RkFRTWluaUxpc3RJdGVtUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5mb0JveEZBUU1pbmlMaXN0IikgJV0KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlN1YmNhdGVnb3JpZXMiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTdWJjYXRlZ29yaWVzIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBzdW1tYXJ5PSJGQVEgY2F0ZWdvcmllcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN1YmNhdGVnb3JpZXMiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJGQVEgQXJ0aWNsZXMiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gc3ViY2F0ZWdvcmllcyBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1Jlc3VsdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2sgTWFzdGVyQWN0aW9uTGluayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV07TmF2PVslIERhdGEuTmF2IHwgdXJpICVdIj5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuU3ViQ2F0ZWdvcnlDb3VudCB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5BcnRpY2xlQ291bnQgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSZXN1bHRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3UmVzdWx0IikgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU3ViY2F0ZWdvcmllcyIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFJdGVtTGlzdCIpICVdClslIERhdGEuRkFRSXRlbUxpc3RIVE1MICVdCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFJdGVtTGlzdCIpICVdCgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnLk1hc3RlckFjdGlvbicpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgdmFyICRNYXN0ZXJBY3Rpb25MaW5rID0gJCh0aGlzKS5maW5kKCcuTWFzdGVyQWN0aW9uTGluaycpOwogICAgICAgIC8vIG9ubHkgYWN0IGlmIHRoZSBsaW5rIHdhcyBub3QgY2xpY2tlZCBkaXJlY3RseQogICAgICAgIGlmIChFdmVudC50YXJnZXQgIT09ICRNYXN0ZXJBY3Rpb25MaW5rLmdldCgwKSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkTWFzdGVyQWN0aW9uTGluay5hdHRyKCdocmVmJyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSGlzdG9yeSBvZiIpIHwgaHRtbCAlXSBbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdOiBbJSBEYXRhLk51bWJlciB8IGh0bWwgJV0gLSBbJSBEYXRhLlRpdGxlIHwgdHJ1bmNhdGUoNjApIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIj5bJSBUcmFuc2xhdGUoIkNsb3NlIikgfCBodG1sICVdPC9hPgogICAgICAgIDwvcD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJIaXN0b3J5IENvbnRlbnQiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBzdW1tYXJ5PSJGQVEgaGlzdG9yeSBkYXRhIHRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkFjdGlvbiIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJVc2VyIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyZWF0ZXRpbWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZWRCeSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DcmVhdGVkIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSb3ciKSAlXQoKICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICA8L2Rpdj4KPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBDb3JlLlVJLkFjdGlvblJvdy5Jbml0KCk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKPGRpdiBpZD0iT3ZlcnZpZXdCb2R5IiBjbGFzcz0iT3ZlcnZpZXcgVGlja2V0TGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRkFRRm91bmQiKSAlXQogICAgPGRpdiBpZD0iRW1wdHlNZXNzYWdlU21hbGwiPgogICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gRkFRIEpvdXJuYWwgZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9GQVFGb3VuZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEZvcm0iKSAlXQogICAgPHRhYmxlIGNsYXNzPSJUYWJsZVNtYWxsIE5vQ2VsbHNwYWNpbmciIHN1bW1hcnk9IkEgZ2VuZXJpYyBGQVEgdGFibGUiPgogICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmROdW1iZXJIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJGQVFOdW1iZXIgT3ZlcnZpZXdIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIENvbmZpZygiRkFROjpGQVFIb29rIikgJV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTnVtYmVySGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkVGl0bGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJUaXRsZSBPdmVydmlld0hlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRUaXRsZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENhdGVnb3J5SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2F0ZWdvcnkgT3ZlcnZpZXdIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ2F0ZWdvcnlIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmROYW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQWN0aW9uIE92ZXJ2aWV3SGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkFjdGlvbiIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmROYW1lSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkVGltZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpbWUgT3ZlcnZpZXdIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiVGltZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkIikgJV0KICAgICAgICAgICAgPHRyIGlkPSJJdGVtSURfWyUgRGF0YS5JdGVtSUQgfCBodG1sICVdX1slIERhdGEuQ291bnRlciB8IGh0bWwgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmROdW1iZXIiKSAlXQogICAgICAgICAgICAgICAgPHRkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmROdW1iZXJMaW5rU3RhcnQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPVslIERhdGEuSXRlbUlEIHwgdXJpICVdIiB0aXRsZT0iWyUgRGF0YS5OdW1iZXIgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZE51bWJlckxpbmtTdGFydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTnVtYmVyIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmROdW1iZXJMaW5rRW5kIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmROdW1iZXJMaW5rRW5kIikgJV0KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmROdW1iZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRUaXRsZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5TdWJqZWN0IHwgaHRtbCAlXSI+WyUgRGF0YS5DbGVhblN1YmplY3QgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkVGl0bGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDYXRlZ29yeSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQ2F0ZWdvcnkpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuQ2F0ZWdvcnkpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENhdGVnb3J5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTmFtZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQWN0aW9uKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkFjdGlvbikgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTmFtZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ3JlYXRlZCB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdIj5bJSBEYXRhLkNyZWF0ZWQgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFRpbWUiKSAlXQogICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkIikgJV0KICAgICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEZvcm0iKSAlXQo8L2Rpdj4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CgogICAgPGgxPlslIFRyYW5zbGF0ZSgiRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRGlzYWJsZWQiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJOb3RpY2UiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJBZG1pblN5c0NvbmZpZyIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkVkaXQiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTeXNDb25maWdHcm91cCIgdmFsdWU9IkZBUSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN5c0NvbmZpZ1N1Ykdyb3VwIiB2YWx1ZT0iQ29yZSIvPgogICAgICAgICAgICAgICAgICAgIDxoMz5bJSBUcmFuc2xhdGUoIlRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCEiKSB8IGh0bWwgJV08L2gzPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbFNpemUgQ2VudGVyIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkVuYWJsZSBpdCBoZXJlISIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJFbmFibGUgaXQgaGVyZSEiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkRpc2FibGVkIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgbGFuZ3VhZ2UiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uQWRkIikgJV0KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uTGlzdCIpICVdCiAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgVmFyaWFibGVXaWR0aCIgc3VtbWFyeT0iRkFRIGxhbmd1YWdlcyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249Q2hhbmdlO0xhbmd1YWdlSUQ9WyUgRGF0YS5MYW5ndWFnZUlEIHwgdXJpICVdIj5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciBMYXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iRGVsZXRlTGFuZ3VhZ2VJRFslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV06IFslIERhdGEuTmFtZSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgRkFROiB0cnVlICovCiAgICBGQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLkJpbmRDb25maXJtYXRpb25EaWFsb2coewogICAgICAgIEVsZW1lbnRJRDogICAgICAgICAgICAgICAgICAnRGVsZXRlTGFuZ3VhZ2VJRFslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV0nLAogICAgICAgIEVsZW1lbnRTZWxlY3RvcjogICAgICAgICAgICAnI0RlbGV0ZUxhbmd1YWdlSURbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdJywKICAgICAgICBEaWFsb2dDb250ZW50UXVlcnlTdHJpbmc6ICAgJ0FjdGlvbj1BZ2VudEZBUUxhbmd1YWdlO1N1YmFjdGlvbj1EZWxldGU7TGFuZ3VhZ2VJRD1bJSBEYXRhLkxhbmd1YWdlSUQgfCB1cmkgJV0nLAogICAgICAgIENvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nOiAnQWN0aW9uPUFnZW50RkFRTGFuZ3VhZ2U7U3ViYWN0aW9uPURlbGV0ZUFjdGlvbjtMYW5ndWFnZUlEPVslIERhdGEuTGFuZ3VhZ2VJRCB8IHVyaSAlXScsCiAgICAgICAgRGlhbG9nVGl0bGU6ICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiRGVsZXRlIExhbmd1YWdlICVzIiwgRGF0YS5OYW1lKSB8IEpTT04gJV0sCiAgICAgICAgVHJhbnNsYXRlZFRleHQ6ICAgICAgICAgICAgIHsKICAgICAgICAgICAgWWVzOiBbJSBUcmFuc2xhdGUoIlllcyIpIHwgSlNPTiAlXSwKICAgICAgICAgICAgTm86ICBbJSBUcmFuc2xhdGUoIk5vIikgfCBKU09OICVdLAogICAgICAgICAgICBPazogIFslIFRyYW5zbGF0ZSgiT2siKSB8IEpTT04gJV0KICAgICAgICB9CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdVcGRhdGUiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQWRkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWRkIExhbmd1YWdlIikgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFkZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckVkaXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJFZGl0IExhbmd1YWdlIikgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckVkaXQiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlslIERhdGEuQWN0aW9uIHwgdXJpICVdQWN0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMYW5ndWFnZUlEIiB2YWx1ZT0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ik5hbWUiIGlkPSJOYW1lIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuTmFtZVNlcnZlckVycm9yIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZShEYXRhLk5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdVcGRhdGUiKSAlXQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRGVsZXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9BZmZlY3RlZEl0ZW1zIikgJV0KPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgVzMwMHB4Ij4KICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhbmd1YWdlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgIDwvcD4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9maWVsZHNldD4KPHAgY2xhc3M9IlNwYWNpbmdUb3AgQ2VudGVyIj4KICAgIFslIFRyYW5zbGF0ZSgiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyIpIHwgaHRtbCAlXQo8L3A+ClslIFJlbmRlckJsb2NrRW5kKCJOb0FmZmVjdGVkSXRlbXMiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWZmZWN0ZWRJdGVtcyIpICVdCjxwPgogICAgWyUgVHJhbnNsYXRlKCJZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBsYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUhIikgfCBodG1sICVdCjwvcD4KPHAgY2xhc3M9IlNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbSI+CiAgICBbJSBUcmFuc2xhdGUoIlRoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpIikgfCBodG1sICVdOgo8L3A+Cgo8dWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFmZmVjdGVkSXRlbXNSb3ciKSAlXQogICAgPGxpIGNsYXNzPSJJbmRlbnQgU3BhY2luZ0JvdHRvbVNtYWxsIj4KICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBEYXRhLkxpbmsgJV07QWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9WyUgRGF0YS5JdGVtSUQgfCB1cmkgJV0iPgogICAgICAgICAgICBbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdOlslIERhdGEuTnVtYmVyIHwgaHRtbCAlXTxzcGFuPiZuYnNwOyZtZGFzaDs8L3NwYW4+IFslIERhdGEuVGl0bGUgfCB0cnVuY2F0ZSg2MCkgfCBodG1sICVdCiAgICAgICAgPC9hPgogICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFmZmVjdGVkSXRlbXNSb3ciKSAlXQo8L3VsPgoKWyUgUmVuZGVyQmxvY2tFbmQoIkFmZmVjdGVkSXRlbXMiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiRGVsZXRlIikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CgogICAgPGgxPlslIFRyYW5zbGF0ZSgiRkFRIExhbmd1YWdlIE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRGlzYWJsZWQiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJOb3RpY2UiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJBZG1pblN5c0NvbmZpZyIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkVkaXQiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTeXNDb25maWdHcm91cCIgdmFsdWU9IkZBUSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN5c0NvbmZpZ1N1Ykdyb3VwIiB2YWx1ZT0iQ29yZSIvPgogICAgICAgICAgICAgICAgICAgIDxoMz5bJSBUcmFuc2xhdGUoIlRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCEiKSB8IGh0bWwgJV08L2gzPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJVc2UgdGhpcyBmZWF0dXJlIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBsYW5ndWdlcy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbFNpemUgQ2VudGVyIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkVuYWJsZSBpdCBoZXJlISIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJFbmFibGUgaXQgaGVyZSEiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkRpc2FibGVkIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgbGFuZ3VhZ2UiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uQWRkIikgJV0KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uTGlzdCIpICVdCiAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgVmFyaWFibGVXaWR0aCIgc3VtbWFyeT0iRkFRIGxhbmd1YWdlcyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249Q2hhbmdlO0xhbmd1YWdlSUQ9WyUgRGF0YS5MYW5ndWFnZUlEIHwgdXJpICVdIj5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciBMYXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iRGVsZXRlTGFuZ3VhZ2VJRFslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV06IFslIERhdGEuTmFtZSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgRkFROiB0cnVlICovCiAgICBGQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLkJpbmRDb25maXJtYXRpb25EaWFsb2coewogICAgICAgIEVsZW1lbnRJRDogICAgICAgICAgICAgICAgICAnRGVsZXRlTGFuZ3VhZ2VJRFslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV0nLAogICAgICAgIEVsZW1lbnRTZWxlY3RvcjogICAgICAgICAgICAnI0RlbGV0ZUxhbmd1YWdlSURbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdJywKICAgICAgICBEaWFsb2dDb250ZW50UXVlcnlTdHJpbmc6ICAgJ0FjdGlvbj1BZ2VudEZBUUxhbmd1YWdlO1N1YmFjdGlvbj1EZWxldGU7TGFuZ3VhZ2VJRD1bJSBEYXRhLkxhbmd1YWdlSUQgfCB1cmkgJV0nLAogICAgICAgIENvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nOiAnQWN0aW9uPUFnZW50RkFRTGFuZ3VhZ2U7U3ViYWN0aW9uPURlbGV0ZUFjdGlvbjtMYW5ndWFnZUlEPVslIERhdGEuTGFuZ3VhZ2VJRCB8IHVyaSAlXScsCiAgICAgICAgRGlhbG9nVGl0bGU6ICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiRGVsZXRlIExhbmd1YWdlICVzIiwgRGF0YS5OYW1lKSB8IEpTT04gJV0sCiAgICAgICAgVHJhbnNsYXRlZFRleHQ6ICAgICAgICAgICAgIHsKICAgICAgICAgICAgWWVzOiBbJSBUcmFuc2xhdGUoIlllcyIpIHwgSlNPTiAlXSwKICAgICAgICAgICAgTm86ICBbJSBUcmFuc2xhdGUoIk5vIikgfCBKU09OICVdLAogICAgICAgICAgICBPazogIFslIFRyYW5zbGF0ZSgiT2siKSB8IEpTT04gJV0KICAgICAgICB9CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdVcGRhdGUiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQWRkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWRkIExhbmd1YWdlIikgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFkZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckVkaXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJFZGl0IExhbmd1YWdlIikgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckVkaXQiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlslIERhdGEuQWN0aW9uIHwgdXJpICVdQWN0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMYW5ndWFnZUlEIiB2YWx1ZT0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ik5hbWUiIGlkPSJOYW1lIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuTmFtZVNlcnZlckVycm9yIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZShEYXRhLk5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdVcGRhdGUiKSAlXQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRGVsZXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9BZmZlY3RlZEl0ZW1zIikgJV0KPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgVzMwMHB4Ij4KICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhbmd1YWdlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgIDwvcD4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9maWVsZHNldD4KPHAgY2xhc3M9IlNwYWNpbmdUb3AgQ2VudGVyIj4KICAgIFslIFRyYW5zbGF0ZSgiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxhbmd1YWdlPyIpIHwgaHRtbCAlXQo8L3A+ClslIFJlbmRlckJsb2NrRW5kKCJOb0FmZmVjdGVkSXRlbXMiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWZmZWN0ZWRJdGVtcyIpICVdCjxwPgogICAgWyUgVHJhbnNsYXRlKCJZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBsYW5ndWFnZS4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgRkFRIGFydGljbGUhIikgfCBodG1sICVdCjwvcD4KPHAgY2xhc3M9IlNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbSI+CiAgICBbJSBUcmFuc2xhdGUoIlRoaXMgbGFuZ3VhZ2UgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIEZBUSBBcnRpY2xlKHMpIikgfCBodG1sICVdOgo8L3A+Cgo8dWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFmZmVjdGVkSXRlbXNSb3ciKSAlXQogICAgPGxpIGNsYXNzPSJJbmRlbnQgU3BhY2luZ0JvdHRvbVNtYWxsIj4KICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBEYXRhLkxpbmsgJV07QWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9WyUgRGF0YS5JdGVtSUQgfCB1cmkgJV0iPgogICAgICAgICAgICBbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdOlslIERhdGEuTnVtYmVyIHwgaHRtbCAlXTxzcGFuPiZuYnNwOyZtZGFzaDs8L3NwYW4+IFslIERhdGEuVGl0bGUgfCB0cnVuY2F0ZSg2MCkgfCBodG1sICVdCiAgICAgICAgPC9hPgogICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFmZmVjdGVkSXRlbXNSb3ciKSAlXQo8L3VsPgoKWyUgUmVuZGVyQmxvY2tFbmQoIkFmZmVjdGVkSXRlbXMiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiRGVsZXRlIikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyIikgJV0KPGRpdiBjbGFzcz0iT3ZlcnZpZXdCb3ggQVJJQVJvbGVNYWluIFslIERhdGEuVmlldyB8IGh0bWwgJV0iPgogICAgPGgxPlslIFRyYW5zbGF0ZShEYXRhLlRpdGxlTmFtZSkgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoRGF0YS5UaXRsZVZhbHVlKSB8IGh0bWwgJV08L2gxPgoKWyUgRGF0YS5EYXRhSW5UaGVNaWRkbGUgJV0KCiAgICA8ZGl2IGNsYXNzPSJPdmVydmlld0NvbnRyb2wiIGlkPSJPdmVydmlld0NvbnRyb2wiPgogICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhckZpbHRlciIpICVdCiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhckZpbHRlckl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJBY3RpdmUgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5GaWx0ZXJMaW5rICVdRmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08c3Bhbj5bJSBEYXRhLkNvdW50IHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5GaWx0ZXJMaW5rICVdRmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08c3Bhbj5bJSBEYXRhLkNvdW50IHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU3BsaXQiKSAlXQogICAgICAgICAgICAgICAgICAgIC0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNwbGl0IikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbSIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhclBhZ2VCYWNrIikgJV0KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iVGFicyI+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iWyUgRGF0YS5MaW5rQmFja0lEIHwgdXJpICVdIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtCYWNrIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjRkFRU2VhcmNoJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBDb3JlLkFnZW50LlNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nKCAnQWdlbnRGQVFTZWFyY2gnLCAiWyUgRGF0YS5Qcm9maWxlIHwgaHRtbCAlXSIgKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhclBhZ2VCYWNrIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkNvbnRleHRTZXR0aW5ncyIpICVdCiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkNvbnRleHRGdW5jdGlvbnMiPgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iQ29udGV4dFNldHRpbmdzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9IlNob3dDb250ZXh0U2V0dGluZ3NEaWFsb2ciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNvbnRleHQgU2V0dGluZ3MiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJDb250ZXh0IFNldHRpbmdzIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29udGV4dFNldHRpbmdzRGlhbG9nQ29udGFpbmVyIiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgaWQ9IkNvbnRleHRTZXR0aW5nc0RpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkFnZW50UHJlZmVyZW5jZXMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iVXBkYXRlIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikdyb3VwIiB2YWx1ZT0iWyUgRGF0YS5Hcm91cCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUmVkaXJlY3RVUkwiIHZhbHVlPSJbJSBEYXRhLlJlcXVlc3RlZFVSTCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5QcmVmZXJlbmNlc0tleSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiRkFRIGFydGljbGVzIHBlciBwYWdlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5QYWdlU2hvd25TdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIC8vIGJpbmQgdGhlIENvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lcgogICAgJCgnI1Nob3dDb250ZXh0U2V0dGluZ3NEaWFsb2cnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKCQoJyNDb250ZXh0U2V0dGluZ3NEaWFsb2dDb250YWluZXInKSwgWyUgVHJhbnNsYXRlKCJTZXR0aW5ncyIpIHwgSlNPTiAlXSwgJzIwJScsICdDZW50ZXInLCB0cnVlLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IFslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBKU09OICVdLAogICAgICAgICAgICAgICAgICAgIFR5cGU6ICdTdWJtaXQnLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAnUHJpbWFyeScKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICk7CiAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdClslIFJlbmRlckJsb2NrRW5kKCJDb250ZXh0U2V0dGluZ3MiKSAlXQoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJPdmVydmlld0FjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuQWN0aW9uUm93ICVdCiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJPdmVydmlld1pvb20iPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iQWN0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtGaWx0ZXI9WyUgRGF0YS5GaWx0ZXIgfCB1cmkgJV07Vmlldz1bJSBEYXRhLlZpZXcgfCB1cmkgJV07WyUgRGF0YS5MaW5rRmlsdGVyIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuTmFtZVNob3J0KSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBuYW1lPSJPdmVydmlld0NvbnRyb2wiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO0ZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXTtWaWV3PVslIERhdGEuVmlldyB8IHVyaSAlXTtbJSBEYXRhLkxpbmtGaWx0ZXIgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbWFnZU1vZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTmFtZVNob3J0Ij5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lU2hvcnQpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik5hbWVMb25nIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZU5vdFNlbGVjdGVkIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlBhZ2luYXRpb24iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhclBhZ2VOYXZCYXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlJlc3VsdExvbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TaXRlTmF2QmFyTG9uZyAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyIikgJV0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXJMZWZ0Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgojIHNvcnQgb3JkZXIgYmFyIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgWyUgRGF0YS5Tb3J0T3JkZXJCYXIgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhciIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBDb3JlLlVJLkFjdGlvblJvdy5Jbml0KCk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKPGRpdiBpZD0iT3ZlcnZpZXdCb2R5IiBjbGFzcz0iT3ZlcnZpZXcgVGlja2V0TGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRkFRRm91bmQiKSAlXQogICAgPGRpdiBpZD0iRW1wdHlNZXNzYWdlU21hbGwiPgogICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gRkFRIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRkFRRm91bmQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRGb3JtIikgJV0KICAgIDx0YWJsZSBjbGFzcz0iVGFibGVTbWFsbCBOb0NlbGxzcGFjaW5nIj4KICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgIDx0cj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTnVtYmVySGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRkFRTnVtYmVyIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9RkFRSUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIENvbmZpZygiRkFROjpGQVFIb29rIikgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTnVtYmVySGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkVGl0bGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJUaXRsZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVRpdGxlO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIlRpdGxlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFRpdGxlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2F0ZWdvcnlIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDYXRlZ29yeSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PUNhdGVnb3J5O09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkNhdGVnb3J5IikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENhdGVnb3J5SGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTGFuZ3VhZ2VIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJMYW5ndWFnZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PUxhbmd1YWdlO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkxhbmd1YWdlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZExhbmd1YWdlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkU3RhdGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdGF0ZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVN0YXRlO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFN0YXRlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkVmFsaWRIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdGF0ZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVZhbGlkO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFZhbGlkSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlZEhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZWQgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DaGFuZ2VkO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ2hhbmdlZEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZEhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkR5bmFtaWNGaWVsZCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmREeW5hbWljRmllbGRIZWFkZXJTb3J0YWJsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9RHluYW1pY0ZpZWxkX1slIERhdGEuRHluYW1pY0ZpZWxkTmFtZSB8IHVyaSAlXTtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZEhlYWRlclNvcnRhYmxlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkRHluYW1pY0ZpZWxkSGVhZGVyTm90U29ydGFibGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV08L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmREeW5hbWljRmllbGRIZWFkZXJOb3RTb3J0YWJsZSIpICVdCiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkRHluYW1pY0ZpZWxkSGVhZGVyIikgJV0KIyBleGFtcGxlIG9mIGhvdyB0byB1c2UgZml4ZWQgZHluYW1pYyBmaWVsZCBibG9ja3MgZm9yIGN1c3RvbWl6YXRpb25zCiMgTm90ZTogRmllbGQxIGFuZCBGaWVsZDIgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZmllbGRzIGFuZCBoYWQgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsCiMgZmllbGQgbmFtZXMKI1slIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDFIZWFkZXIiKSAlXQojICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRHluYW1pY0ZpZWxkIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQxSGVhZGVyU29ydGFibGUiKSAlXQojICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1EeW5hbWljRmllbGRfWyUgRGF0YS5EeW5hbWljRmllbGROYW1lIHwgdXJpICVdO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdPC9hPgojWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDFIZWFkZXJTb3J0YWJsZSIpICVdCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQxSGVhZGVyTm90U29ydGFibGUiKSAlXQojICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdPC9zcGFuPgojWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDFIZWFkZXJOb3RTb3J0YWJsZSIpICVdCiMgICAgICAgICAgICAgICAgPC90aD4KI1slIFJlbmRlckJsb2NrRW5kKCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQxSGVhZGVyIikgJV0KI1slIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDJIZWFkZXIiKSAlXQojICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRHluYW1pY0ZpZWxkIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQySGVhZGVyU29ydGFibGUiKSAlXQojICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1EeW5hbWljRmllbGRfWyUgRGF0YS5EeW5hbWljRmllbGROYW1lIHwgdXJpICVdO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdPC9hPgojWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDJIZWFkZXJTb3J0YWJsZSIpICVdCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQySGVhZGVyTm90U29ydGFibGUiKSAlXQojICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdPC9zcGFuPgojWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDJIZWFkZXJOb3RTb3J0YWJsZSIpICVdCiMgICAgICAgICAgICAgICAgPC90aD4KI1slIFJlbmRlckJsb2NrRW5kKCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQySGVhZGVyIikgJV0KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkIikgJV0KICAgICAgICAgICAgPHRyIGlkPSJJdGVtSURfWyUgRGF0YS5JdGVtSUQgfCBodG1sICVdX1slIERhdGEuQ291bnRlciB8IGh0bWwgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25bJSBJRiBEYXRhLlZhbGlkSUQgIT0gMSVdIEludmFsaWRbJSBFTkQgJV0iID4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTnVtYmVyIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTnVtYmVyTGlua1N0YXJ0IikgJV0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IHVyaSAlXTtOYXY9WyUgRGF0YS5OYXYgfCB1cmkgJV0iIHRpdGxlPSJbJSBEYXRhLk51bWJlciB8IHVyaSAlXSIgY2xhc3M9Ik1hc3RlckFjdGlvbkxpbmsiPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTnVtYmVyTGlua1N0YXJ0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OdW1iZXIgfCBodG1sICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZE51bWJlckxpbmtFbmQiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZE51bWJlckxpbmtFbmQiKSAlXQogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZE51bWJlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFRpdGxlIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+WyUgRGF0YS5DbGVhblRpdGxlIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFRpdGxlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2F0ZWdvcnkiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkNhdGVnb3J5TmFtZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5DYXRlZ29yeU5hbWUsICI1MCIpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENhdGVnb3J5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTGFuZ3VhZ2UiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgVHJhbnNsYXRlKERhdGEuTGFuZ3VhZ2UpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZExhbmd1YWdlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkU3RhdGUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgVHJhbnNsYXRlKERhdGEuU3RhdGUpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFN0YXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkVmFsaWQiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFZhbGlkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlZCIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBEYXRhLkNoYW5nZWQgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZExpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBEYXRhLkxpbmsgJV0iIGNsYXNzPSJEeW5hbWljRmllbGRMaW5rIj5bJSBEYXRhLlZhbHVlICVdPC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkRHluYW1pY0ZpZWxkTGluayIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWx1ZSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkRHluYW1pY0ZpZWxkUGxhaW4iKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZCIpICVdCiMgZXhhbXBsZSBvZiBob3cgdG8gdXNlIGZpeGVkIGR5bmFtaWMgZmllbGQgYmxvY2tzIGZvciBjdXN0b21pemF0aW9ucwojIE5vdGU6IEZpZWxkMSBhbmQgRmllbGQyIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGZpZWxkcyBhbmQgaGFkIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbAojIGZpZWxkIG5hbWVzCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQxIikgJV0KIyAgICAgICAgICAgICAgICA8dGQ+CiMgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj4KI1slIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDFfTGluayIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBEYXRhLkxpbmsgJV0iIGNsYXNzPSJEeW5hbWljRmllbGRMaW5rIj5bJSBEYXRhLlZhbHVlICVdPC9hPgojWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDFfTGluayIpICVdCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQxX1BsYWluIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KI1slIFJlbmRlckJsb2NrRW5kKCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQxX1BsYWluIikgJV0KIyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiMgICAgICAgICAgICAgICAgPC90ZD4KI1slIFJlbmRlckJsb2NrRW5kKCJSZWNvcmREeW5hbWljRmllbGRfRmllbGQxIikgJV0KI1slIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQojICAgICAgICAgICAgICAgIDx0ZD4KIyAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iPgojWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkRHluYW1pY0ZpZWxkX0ZpZWxkMl9MaW5rIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIERhdGEuTGluayAlXSIgY2xhc3M9IkR5bmFtaWNGaWVsZExpbmsiPlslIERhdGEuVmFsdWUgJV08L2E+CiNbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkRHluYW1pY0ZpZWxkX0ZpZWxkMl9MaW5rIikgJV0KI1slIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDJfUGxhaW4iKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWx1ZSAlXQojWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDJfUGxhaW4iKSAlXQojICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICA8L3RkPgojWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQogICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkIikgJV0KICAgICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEZvcm0iKSAlXQo8L2Rpdj4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgICB2YXIgJE1hc3RlckFjdGlvbkxpbmsgPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJyk7CiAgICAgICAgLy8gb25seSBhY3QgaWYgdGhlIGxpbmsgd2FzIG5vdCBjbGlja2VkIGRpcmVjdGx5CiAgICAgICAgaWYgKEV2ZW50LnRhcmdldCAhPT0gJE1hc3RlckFjdGlvbkxpbmsuZ2V0KDApKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICRNYXN0ZXJBY3Rpb25MaW5rLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlYXJjaEFKQVgiKSAlXQo8ZGl2IGNsYXNzPSJJbm5lckNvbnRlbnQiPgogICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGlkPSJTZWFyY2hGb3JtIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiBpZD0iU2VhcmNoQWN0aW9uIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VhcmNoIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRW1wdHlTZWFyY2giIHZhbHVlPSJbJSBEYXRhLkVtcHR5U2VhcmNoIHwgaHRtbCAlXSIgaWQ9IkVtcHR5U2VhcmNoIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTmF2IiB2YWx1ZT0iWyUgRGF0YS5OYXYgfCBodG1sICVdIi8+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICA8bGVnZW5kPlslIFRyYW5zbGF0ZSgiVGVtcGxhdGVzIikgfCBodG1sICVdPC9sZWdlbmQ+CiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlNlYXJjaCB0ZW1wbGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLlByb2ZpbGVzU3RyZyAlXQogICAgICAgICAgICAgICAgPGRpdiBpZD0iU2VhcmNoUHJvZmlsZUFkZEJsb2NrIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9IlNlYXJjaFByb2ZpbGVBZGROYW1lIi8+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNyZWF0ZSBUZW1wbGF0ZSIpIHwgaHRtbCAlXSIgaWQ9IlNlYXJjaFByb2ZpbGVBZGRBY3Rpb24iPlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IlNlYXJjaFByb2ZpbGVOZXciIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkNyZWF0ZSBOZXciKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiQ3JlYXRlIE5ldyIpIHwgaHRtbCAlXTwvYnV0dG9uPgoKICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IlNlYXJjaFByb2ZpbGVEZWxldGUiIGNsYXNzPSJIaWRkZW4iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiU2F2ZSBjaGFuZ2VzIGluIHRlbXBsYXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iU2F2ZVByb2ZpbGUiIGlkPSJTYXZlUHJvZmlsZSIgdmFsdWU9IjEiLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9maWVsZHNldD4KICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSIgaWQ9IlNlYXJjaEluc2VydCI+CiAgICAgICAgICAgIDxsZWdlbmQ+WyUgVHJhbnNsYXRlKCJGaWx0ZXJzIGluIHVzZSIpIHwgaHRtbCAlXTwvbGVnZW5kPgogICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICA8bGVnZW5kPlslIFRyYW5zbGF0ZSgiQWRkaXRpb25hbCBmaWx0ZXJzIikgfCBodG1sICVdPC9sZWdlbmQ+CiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkFkZCBhbm90aGVyIGF0dHJpYnV0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkF0dHJpYnV0ZXNTdHJnICVdCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQWRkQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJBZGQgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiT3V0cHV0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIFslIERhdGEuUmVzdWx0Rm9ybVN0cmcgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9maWVsZHNldD4KICAgIDwvZm9ybT4KCiAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBIaWRkZW4iIGlkPSJTZWFyY2hBdHRyaWJ1dGVzSGlkZGVuIj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IkZ1bGx0ZXh0ImlkPSJMYWJlbEZ1bGx0ZXh0Ij5bJSBUcmFuc2xhdGUoIkZ1bGx0ZXh0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iRnVsbHRleHQiIHZhbHVlPSJbJSBEYXRhLkZ1bGx0ZXh0IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiAvPgogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9Ik51bWJlciIgaWQ9IkxhYmVsTnVtYmVyIj5bJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdIFslIFRyYW5zbGF0ZSgiKGUuIGcuIDEwKjUxNTUgb3IgMTA1NjU4KikiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOdW1iZXIiIHZhbHVlPSJbJSBEYXRhLk51bWJlciB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IlRpdGxlIiBpZD0iTGFiZWxUaXRsZSI+WyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlRpdGxlIiB2YWx1ZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IktleXdvcmQiIGlkPSJMYWJlbEtleXdvcmQiPlslIFRyYW5zbGF0ZSgiS2V5d29yZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IktleXdvcmQiIHZhbHVlPSJbJSBEYXRhLktleXdvcmQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEcyIgaWQ9IkxhYmVsVmFsaWRJRHMiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIFslIERhdGEuVmFsaWRTZWxlY3Rpb25TdHJnICVdCiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iTGFuZ3VhZ2VJRHMiIGlkPSJMYWJlbExhbmd1YWdlSURzIj5bJSBUcmFuc2xhdGUoIkxhbmd1YWdlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLkxhbmd1YWdlc1NlbGVjdGlvblN0cmcgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJDYXRlZ29yeUlEcyIgaWQ9IkxhYmVsQ2F0ZWdvcnlJRHMiPlslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIFslIERhdGEuQ2F0ZWdvcmllc1NlbGVjdGlvblN0cmcgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJTdGF0ZUlEcyIgaWQ9IkxhYmVsU3RhdGVJRHMiPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIFslIERhdGEuU3RhdGVTZWxlY3Rpb25TdHJnICVdCiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iVm90ZVNlYXJjaFR5cGUiIGlkPSJMYWJlbFZvdGVTZWFyY2hUeXBlIj5bJSBUcmFuc2xhdGUoIlZvdGUgKGUuIGcuIEVxdWFscyAxMCBvciBHcmVhdGVyVGhhbiA2MCkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIFslIERhdGEuVm90ZVNlYXJjaFR5cGVTZWxlY3Rpb25TdHJnICVdCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJWb3RlU2VhcmNoIiB2YWx1ZT0iWyUgRGF0YS5Wb3RlU2VhcmNoIHwgaHRtbCAlXSIgY2xhc3M9IlcyNXBjIi8+CiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iUmF0ZVNlYXJjaFR5cGUiIGlkPSJMYWJlbFJhdGVTZWFyY2hUeXBlIj5bJSBUcmFuc2xhdGUoIlJhdGUgKGUuIGcuIEVxdWFscyAyNSUgb3IgR3JlYXRlclRoYW4gNzUlKSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgWyUgRGF0YS5SYXRlU2VhcmNoVHlwZVNlbGVjdGlvblN0cmcgJV0KICAgICAgICAgICAgWyUgRGF0YS5SYXRlU2VhcmNoU2VsZWN0aW9uU3RyZyAlXQogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IkFwcHJvdmVkU2VhcmNoIiBpZD0iTGFiZWxBcHByb3ZlZFNlYXJjaCI+WyUgVHJhbnNsYXRlKCJBcHByb3ZlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgWyUgRGF0YS5BcHByb3ZlZFN0cmcgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJDcmVhdGVkVXNlcklEcyIgaWQ9IkxhYmVsQ3JlYXRlZFVzZXJJRHMiPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCBieSIpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIkFnZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZWRVc2VyU3RyZyAlXQogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9Ikxhc3RDaGFuZ2VkVXNlcklEcyIgaWQ9IkxhYmVsTGFzdENoYW5nZWRVc2VySURzIj5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCBieSIpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIkFnZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLkxhc3RDaGFuZ2VkVXNlclN0cmcgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJJdGVtQ3JlYXRlVGltZVBvaW50IiBpZD0iTGFiZWxJdGVtQ3JlYXRlVGltZVBvaW50Ij5bJSBUcmFuc2xhdGUoIkZBUSBBcnRpY2xlIENyZWF0ZSBUaW1lIChiZWZvcmUvYWZ0ZXIpIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaW1lU2VhcmNoVHlwZSIgdmFsdWU9IlRpbWVQb2ludCIgWyUgRGF0YS5pdGVtKCJUaW1lU2VhcmNoVHlwZTo6VGltZVBvaW50IikgJV0vPgogICAgICAgICAgICBbJSBEYXRhLkl0ZW1DcmVhdGVUaW1lUG9pbnRTdGFydFN0cmcgJV0gWyUgRGF0YS5JdGVtQ3JlYXRlVGltZVBvaW50U3RyZyAlXSBbJSBEYXRhLkl0ZW1DcmVhdGVUaW1lUG9pbnRGb3JtYXRTdHJnICVdCiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iSXRlbUNyZWF0ZVRpbWVTbG90IiBpZD0iTGFiZWxJdGVtQ3JlYXRlVGltZVNsb3QiPlslIFRyYW5zbGF0ZSgiRkFRIEFydGljbGUgQ3JlYXRlIFRpbWUgKGJldHdlZW4pIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaW1lU2VhcmNoVHlwZSIgdmFsdWU9IlRpbWVTbG90IiBbJSBEYXRhLml0ZW0oIlRpbWVTZWFyY2hUeXBlOjpUaW1lU2xvdCIpICVdLz4KICAgICAgICAgICAgWyUgRGF0YS5JdGVtQ3JlYXRlVGltZVN0YXJ0U3RyZyAlXSBbJSBUcmFuc2xhdGUoImFuZCIpIHwgaHRtbCAlXSBbJSBEYXRhLkl0ZW1DcmVhdGVUaW1lU3RvcFN0cmcgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJJdGVtQ2hhbmdlVGltZVBvaW50IiBpZD0iTGFiZWxJdGVtQ2hhbmdlVGltZVBvaW50Ij5bJSBUcmFuc2xhdGUoIkZBUSBBcnRpY2xlIENoYW5nZSBUaW1lIChiZWZvcmUvYWZ0ZXIpIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDaGFuZ2VUaW1lU2VhcmNoVHlwZSIgdmFsdWU9IlRpbWVQb2ludCIgWyUgRGF0YS5pdGVtKCJDaGFuZ2VUaW1lU2VhcmNoVHlwZTo6VGltZVBvaW50IikgJV0vPgogICAgICAgICAgICBbJSBEYXRhLkl0ZW1DaGFuZ2VUaW1lUG9pbnRTdGFydFN0cmcgJV0gWyUgRGF0YS5JdGVtQ2hhbmdlVGltZVBvaW50U3RyZyAlXSBbJSBEYXRhLkl0ZW1DaGFuZ2VUaW1lUG9pbnRGb3JtYXRTdHJnICVdCiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iSXRlbUNoYW5nZVRpbWVTbG90IiBpZD0iTGFiZWxJdGVtQ2hhbmdlVGltZVNsb3QiPlslIFRyYW5zbGF0ZSgiRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUgKGJldHdlZW4pIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDaGFuZ2VUaW1lU2VhcmNoVHlwZSIgdmFsdWU9IlRpbWVTbG90IiBbJSBEYXRhLml0ZW0oIkNoYW5nZVRpbWVTZWFyY2hUeXBlOjpUaW1lU2xvdCIpICVdLz4KICAgICAgICAgICAgWyUgRGF0YS5JdGVtQ2hhbmdlVGltZVN0YXJ0U3RyZyAlXSBbJSBUcmFuc2xhdGUoImFuZCIpIHwgaHRtbCAlXSBbJSBEYXRhLkl0ZW1DaGFuZ2VUaW1lU3RvcFN0cmcgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgIFslIERhdGEuQXR0cmlidXRlc09yaWdTdHJnICVdCgogICAgPC9maWVsZHNldD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJDb250ZW50Rm9vdGVyIENlbnRlciI+CiAgICA8YnV0dG9uIGlkPSJTZWFyY2hGb3JtU3VibWl0IiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB2YWx1ZT0iUnVuIHNlYXJjaCI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLXNlYXJjaCI+PC9pPiBbJSBUcmFuc2xhdGUoIlJ1biBzZWFyY2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CjwvZGl2PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKXsKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2VhcmNoQUpBWFNob3ciKSAlXQogICAgICAgIENvcmUuQWdlbnQuU2VhcmNoLlNlYXJjaEF0dHJpYnV0ZUFkZCgiWyUgRGF0YS5BdHRyaWJ1dGUgfCBodG1sICVdIik7ClslIFJlbmRlckJsb2NrRW5kKCJTZWFyY2hBSkFYU2hvdyIpICVdCiAgICAgICAgQ29yZS5BZ2VudC5TZWFyY2guQWRkaXRpb25hbEF0dHJpYnV0ZVNlbGVjdGlvblJlYnVpbGQoKTsKICAgIH0sIDApOwovL11dPjwvc2NyaXB0PgoKWyUgUmVuZGVyQmxvY2tFbmQoIlNlYXJjaEFKQVgiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2VhcmNoIikgJV0KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBDb3JlLkFnZW50LlNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nKCAnWyUgRW52KCJBY3Rpb24iKSAlXScgKTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VhcmNoIikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT5bJSBDb25maWcoIlByb2R1Y3ROYW1lIikgfCBodG1sICVdIChbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpIHwgaHRtbCAlXSk8L1Nob3J0TmFtZT4KPERlc2NyaXB0aW9uPlslIENvbmZpZygiUHJvZHVjdE5hbWUiKSB8IGh0bWwgJV0gKFslIENvbmZpZygiRkFROjpGQVFIb29rIikgfCBodG1sICVdKTwvRGVzY3JpcHRpb24+CjxJbnB1dEVuY29kaW5nPlslIEVudigiVXNlckNoYXJzZXQiKSAlXTwvSW5wdXRFbmNvZGluZz4KPFVybCB0eXBlPSJ0ZXh0L2h0bWwiIHRlbXBsYXRlPSJbJSBDb25maWcoIkh0dHBUeXBlIikgJV06Ly9bJSBDb25maWcoIkZRRE4iKSAlXVslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudEZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO051bWJlcj17c2VhcmNoVGVybXN9IiAvPgo8SW1hZ2UgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiB0eXBlPSJpbWFnZS94LWljb24iPlslIENvbmZpZygiSHR0cFR5cGUiKSAlXTovL1slIENvbmZpZygiRlFETiIpICVdWyUgQ29uZmlnKCJGcm9udGVuZDo6SW1hZ2VQYXRoIikgJV1pY29ucy9wcm9kdWN0LmljbzwvSW1hZ2U+CjwvT3BlblNlYXJjaERlc2NyaXB0aW9uPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT5bJSBDb25maWcoIlByb2R1Y3ROYW1lIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoIkZBUUZ1bGx0ZXh0IikgfCBodG1sICVdKTwvU2hvcnROYW1lPgo8RGVzY3JpcHRpb24+WyUgQ29uZmlnKCJQcm9kdWN0TmFtZSIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJGQVFGdWxsdGV4dCIpIHwgaHRtbCAlXSk8L0Rlc2NyaXB0aW9uPgo8SW5wdXRFbmNvZGluZz5bJSBFbnYoIlVzZXJDaGFyc2V0IikgJV08L0lucHV0RW5jb2Rpbmc+CjxVcmwgdHlwZT0idGV4dC9odG1sIiB0ZW1wbGF0ZT0iWyUgQ29uZmlnKCJIdHRwVHlwZSIpICVdOi8vWyUgQ29uZmlnKCJGUUROIikgJV1bJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRGQVFTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaDtGdWxsdGV4dD17c2VhcmNoVGVybXN9IiAvPgo8SW1hZ2UgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiB0eXBlPSJpbWFnZS94LWljb24iPlslIENvbmZpZygiSHR0cFR5cGUiKSAlXTovL1slIENvbmZpZygiRlFETiIpICVdWyUgQ29uZmlnKCJGcm9udGVuZDo6SW1hZ2VQYXRoIikgJV1pY29ucy9wcm9kdWN0LmljbzwvSW1hZ2U+CjwvT3BlblNlYXJjaERlc2NyaXB0aW9uPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlYXJjaCIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxoMT5bJSBUcmFuc2xhdGUoIkZBUSBTZWFyY2giKSB8IGh0bWwgJV08L2gxPgogICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIENvbGxhcHNlZCI+CiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiUHJvZmlsZSBTZWxlY3Rpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgogICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJMb2FkUHJvZmlsZSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJOYXYiIHZhbHVlPSJbJSBEYXRhLk5hdiB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUHJvZmlsZSI+WyUgVHJhbnNsYXRlKCJTZWFyY2ggdGVtcGxhdGUiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlByb2ZpbGVzU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFNwYWNpbmdUb3AiIG5hbWU9IlNlbGVjdFRlbXBsYXRlIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNlbGVjdCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2hlY2siPjwvaT4gWyUgVHJhbnNsYXRlKCJTZWxlY3QiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFNwYWNpbmdUb3AiIG5hbWU9IkVyYXNlVGVtcGxhdGUiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS10cmFzaC1vIj48L2k+IFslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBTcGFjaW5nVG9wIiBuYW1lPSJTZWFyY2hUZW1wbGF0ZSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTZWFyY2giKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXNlYXJjaCI+PC9pPiBbJSBUcmFuc2xhdGUoIlNlYXJjaCIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgbmFtZT0iY29tcG9zZSI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VhcmNoIi8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik5hdiIgdmFsdWU9IlslIERhdGEuTmF2IHwgaHRtbCAlXSIvPgogICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBUYWJsZVNtYWxsIj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkZ1bGx0ZXh0IiBpZD0iTGFiZWxGdWxsdGV4dCI+WyUgVHJhbnNsYXRlKCJGdWxsdGV4dCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJGdWxsdGV4dCIgdmFsdWU9IlslIERhdGEuRnVsbHRleHQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOdW1iZXIiPlslIENvbmZpZygiRkFROjpGQVFIb29rIikgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iWyUgQ29uZmlnKCJGQVE6OkZBUUhvb2siKSAlXSIgdHlwZT0idGV4dCIgbmFtZT0iTnVtYmVyIiBpZD0iTnVtYmVyIiBjbGFzcz0iVzUwcGMiIHZhbHVlPSJbJSBEYXRhLk51bWJlciB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJlLiBnLiAxMCo1MTU1IG9yIDEwNTY1OCoiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUaXRsZSI+WyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRpdGxlIikgfCBodG1sICVdIiB0eXBlPSJ0ZXh0IiBpZD0iVGl0bGUiIG5hbWU9IlRpdGxlIiB2YWx1ZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IktleXdvcmQiPlslIFRyYW5zbGF0ZSgiS2V5d29yZCIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSJbJSBUcmFuc2xhdGUoIktleXdvcmQiKSB8IGh0bWwgJV0iIHR5cGU9InRleHQiIGlkPSJLZXl3b3JkIiBuYW1lPSJLZXl3b3JkIiB2YWx1ZT0iWyUgRGF0YS5LZXl3b3JkIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdDbGVhcic+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJMYW5ndWFnZUlEcyI+WyUgVHJhbnNsYXRlKCJMYW5ndWFnZSIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYW5ndWFnZXNTZWxlY3Rpb25TdHJnICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkxhbmd1YWdlIikgJV0KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdDbGVhcic+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDYXRlZ29yeUlEcyI+WyUgVHJhbnNsYXRlKCJDYXRlZ29yeSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2F0ZWdvcmllc1NlbGVjdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J0NsZWFyJz48L2Rpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSURzIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZFNlbGVjdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J0NsZWFyJz48L2Rpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlN0YXRlSURzIj5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdGF0ZVNlbGVjdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J0NsZWFyJz48L2Rpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkFwcHJvdmVkU2VhcmNoIiA+WyUgVHJhbnNsYXRlKCJBcHByb3ZlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuQXBwcm92ZWRTdHJnICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdDbGVhcic+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOb1ZvdGVTZXQiPlslIFRyYW5zbGF0ZSgiVm90ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJObyB2b3RlIHNldHRpbmdzIikgfCBodG1sICVdIiB0eXBlPSJyYWRpbyIgIGlkPSJOb1ZvdGVTZXQiIG5hbWU9IlZvdGVTZWFyY2hPcHRpb24iIHZhbHVlPSIiIFslIERhdGEuaXRlbSgiVm90ZVNlYXJjaE9wdGlvbjo6Tm9uZSIpICVdIC8+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBbGwiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT1bJSBUcmFuc2xhdGUoIlNwZWNpZmljIHZvdGVzIikgfCBodG1sICVdIHR5cGU9InJhZGlvIiBpZD0iVm90ZVBvaW50IiBuYW1lPSJWb3RlU2VhcmNoT3B0aW9uIiAgdmFsdWU9IlZvdGVQb2ludCIgWyUgRGF0YS5pdGVtKCJWb3RlU2VhcmNoT3B0aW9uOjpWb3RlUG9pbnQiKSAlXSAvPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuVm90ZVNlYXJjaFR5cGVTZWxlY3Rpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlZvdGVTZWFyY2giIHZhbHVlPSJbJSBEYXRhLlZvdGVTZWFyY2ggfCBodG1sICVdIiBjbGFzcz0iVzI1cGMiLz4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjAiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdDbGVhcic+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOb1JhdGVTZXQiPlslIFRyYW5zbGF0ZSgiUmF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJObyByYXRlIHNldHRpbmdzIikgfCBodG1sICVdIiB0eXBlPSJyYWRpbyIgIGlkPSJOb1JhdGVTZXQiIG5hbWU9IlJhdGVTZWFyY2hPcHRpb24iIHZhbHVlPSIiIFslIERhdGEuaXRlbSgiUmF0ZVNlYXJjaE9wdGlvbjo6Tm9uZSIpICVdIC8+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBbGwiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT1bJSBUcmFuc2xhdGUoIlNwZWNpZmljIHJhdGUiKSB8IGh0bWwgJV0gdHlwZT0icmFkaW8iIGlkPSJSYXRlUG9pbnQiIG5hbWU9IlJhdGVTZWFyY2hPcHRpb24iICB2YWx1ZT0iUmF0ZVBvaW50IiBbJSBEYXRhLml0ZW0oIlJhdGVTZWFyY2hPcHRpb246OlZvdGVQb2ludCIpICVdIC8+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5SYXRlU2VhcmNoVHlwZVNlbGVjdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlJhdGVTZWFyY2hTZWxlY3Rpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdDbGVhcic+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDcmVhdGVkVXNlcklEcyI+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgiQWdlbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZWRVc2VyU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nQ2xlYXInPjwvZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTGFzdENoYW5nZWRVc2VySURzIj5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCBieSIpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIkFnZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYXN0Q2hhbmdlZFVzZXJTdHJnICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdDbGVhcic+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUaW1lU2VhcmNoVHlwZSI+WyUgVHJhbnNsYXRlKCJGQVEgQXJ0aWNsZSBDcmVhdGUgVGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJObyB0aW1lIHNldHRpbmdzIikgfCBodG1sICVdIiB0eXBlPSJyYWRpbyIgaWQ9Ik5vVGltZVNldCIgbmFtZT0iVGltZVNlYXJjaFR5cGUiIHZhbHVlPSIiIFslIERhdGEuaXRlbSgiVGltZVNlYXJjaFR5cGU6Ok5vbmUiKSAlXSAvPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQWxsIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU3BlY2lmaWMgZGF0ZSIpIHwgaHRtbCAlXSIgdHlwZT0icmFkaW8iIGlkPSJEYXRlUG9pbnQiIG5hbWU9IlRpbWVTZWFyY2hUeXBlIiAgdmFsdWU9IlRpbWVQb2ludCIgWyUgRGF0YS5pdGVtKCJUaW1lU2VhcmNoVHlwZTo6VGltZVBvaW50IikgJV0gLz4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkl0ZW1DcmVhdGVUaW1lUG9pbnRTdGFydFN0cmcgJV0gWyUgRGF0YS5JdGVtQ3JlYXRlVGltZVBvaW50U3RyZyAlXSBbJSBEYXRhLkl0ZW1DcmVhdGVUaW1lUG9pbnRGb3JtYXRTdHJnICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGF0ZSByYW5nZSIpIHwgaHRtbCAlXSIgdHlwZT0icmFkaW8iIGlkPSJEYXRlUmFuZ2UiIG5hbWU9IlRpbWVTZWFyY2hUeXBlIiB2YWx1ZT0iVGltZVNsb3QiIFslIERhdGEuaXRlbSgiVGltZVNlYXJjaFR5cGU6OlRpbWVTbG90IikgJV0gLz4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkl0ZW1DcmVhdGVUaW1lU3RhcnRTdHJnICVdIFslIFRyYW5zbGF0ZSgiYW5kIikgfCBodG1sICVdIFslIERhdGEuSXRlbUNyZWF0ZVRpbWVTdG9wU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nQ2xlYXInPjwvZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ2hhbmdlVGltZVNlYXJjaFR5cGUiPlslIFRyYW5zbGF0ZSgiRkFRIEFydGljbGUgQ2hhbmdlIFRpbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTm8gdGltZSBzZXR0aW5ncyIpIHwgaHRtbCAlXSIgdHlwZT0icmFkaW8iIGlkPSJOb0NoYW5nZVRpbWVTZXQiIG5hbWU9IkNoYW5nZVRpbWVTZWFyY2hUeXBlIiB2YWx1ZT0iIiBbJSBEYXRhLml0ZW0oIkNoYW5nZVRpbWVTZWFyY2hUeXBlOjpOb25lIikgJV0gLz4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkFsbCIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNwZWNpZmljIGRhdGUiKSB8IGh0bWwgJV0iIHR5cGU9InJhZGlvIiBpZD0iQ2hhbmdlRGF0ZVBvaW50IiBuYW1lPSJDaGFuZ2VUaW1lU2VhcmNoVHlwZSIgdmFsdWU9IlRpbWVQb2ludCIgWyUgRGF0YS5pdGVtKCJDaGFuZ2VUaW1lU2VhcmNoVHlwZTo6VGltZVBvaW50IikgJV0gLz4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkl0ZW1DaGFuZ2VUaW1lUG9pbnRTdGFydFN0cmcgJV0gWyUgRGF0YS5JdGVtQ2hhbmdlVGltZVBvaW50U3RyZyAlXSBbJSBEYXRhLkl0ZW1DaGFuZ2VUaW1lUG9pbnRGb3JtYXRTdHJnICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGF0ZSByYW5nZSIpIHwgaHRtbCAlXSIgdHlwZT0icmFkaW8iIGlkPSJDaGFuZ2VEYXRlUmFuZ2UiIG5hbWU9IkNoYW5nZVRpbWVTZWFyY2hUeXBlIiB2YWx1ZT0iVGltZVNsb3QiIFslIERhdGEuaXRlbSgiQ2hhbmdlVGltZVNlYXJjaFR5cGU6OlRpbWVTbG90IikgJV0gLz4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkl0ZW1DaGFuZ2VUaW1lU3RhcnRTdHJnICVdIFslIFRyYW5zbGF0ZSgiYW5kIikgfCBodG1sICVdIFslIERhdGEuSXRlbUNoYW5nZVRpbWVTdG9wU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBUYWJsZVNtYWxsIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ilc3NXBjIFNwYWNpbmdUb3AgRkFRRGl2aWRlciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTYXZlUHJvZmlsZSI+WyUgVHJhbnNsYXRlKCJTYXZlIGFzIFRlbXBsYXRlPyIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSJTYXZlIGFzIFRlbXBsYXRlIiB0eXBlPSJjaGVja2JveCIgaWQ9IlNhdmVQcm9maWxlIiBuYW1lPSJTYXZlUHJvZmlsZSIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUHJvZmlsZSI+WyUgVHJhbnNsYXRlKCJUZW1wbGF0ZSBOYW1lIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlBpY2sgYSBwcm9maWxlIG5hbWUiIHR5cGU9InRleHQiIGlkPSJQcm9maWxlIiBuYW1lPSJQcm9maWxlIiB2YWx1ZT0iWyUgRGF0YS5Qcm9maWxlIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8ZGl2IGlkPSJCb3R0b21BY3Rpb25Sb3ciIGNsYXNzPSJDZW50ZXIgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2VhcmNoIikgfCBodG1sICVdIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtc2VhcmNoIj48L2k+IFslIFRyYW5zbGF0ZSgiU2VhcmNoIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZWFyY2giKSAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGgxIHRpdGxlPSJbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdOiBbJSBEYXRhLk51bWJlciB8IGh0bWwgJV0gJm5kYXNoOyBbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+CiAgICAgICAgICAgIFslIENvbmZpZygiRkFROjpGQVFIb29rIikgJV06IFslIERhdGEuTnVtYmVyICVdIDxzcGFuPiZtZGFzaDs8L3NwYW4+IFslIERhdGEuVGl0bGUgfCBodG1sICVdCiAgICAgICAgPC9oMT4KICAgIDwvZGl2PgoKICAgIDx1bCBjbGFzcz0iQnJlYWRDcnVtYiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUVBhdGhDYXRlZ29yeUVsZW1lbnQiKSAlXQogICAgICAgIDxsaT4KICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50RkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV07TmF2PVslIERhdGEuTmF2IHwgdXJpICVdIj4KICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgPC9hPgogICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRUGF0aEl0ZW1FbGVtZW50IikgJV0KICAgICAgICA8bGk+WyUgRGF0YS5UaXRsZSB8IGh0bWwgJV08L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRUGF0aEl0ZW1FbGVtZW50IikgJV0KICAgIDwvdWw+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRkFRIEluZm9ybWF0aW9uIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQ2F0ZWdvcnlOYW1lKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkNhdGVnb3J5TmFtZSwgIjE4IikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJLZXl3b3JkcyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJLZXl3b3JkcyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRGQVFTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaDtLZXl3b3JkPVslIERhdGEuS2V5d29yZCB8IHVyaSAlXSIgdGl0bGU9IlslIERhdGEuS2V5d29yZCB8IGh0bWwgJV0iPlslIERhdGEuS2V5d29yZCB8IGh0bWwgJV08L2E+ClslIFJlbmRlckJsb2NrRW5kKCJLZXl3b3JkcyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuU3RhdGUpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuU3RhdGUsICIyNSIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQsICIyNSIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhbmd1YWdlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkxhbmd1YWdlKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhbmd1YWdlLCAiMTgiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkxhbmd1YWdlIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlZpZXdBcHByb3ZhbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkFwcHJvdmFsIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkFwcHJvdmFsKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkFwcHJvdmFsLCAiMTgiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlZpZXdBcHByb3ZhbCIpICVdCgojIHNob3cgZmFxIGR5bmFtaWMgZmllbGRzClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUUR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUUR5bmFtaWNGaWVsZExpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj48YSBocmVmPSJbJSBEYXRhLkxpbmsgJV0iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iRHluYW1pY0ZpZWxkTGluayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFEeW5hbWljRmllbGRMaW5rIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRRHluYW1pY0ZpZWxkUGxhaW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRRHluYW1pY0ZpZWxkUGxhaW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUR5bmFtaWNGaWVsZCIpICVdCgojIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBmaXhlZCBkeW5hbWljIGZpZWxkIGJsb2NrcyBmb3IgY3VzdG9taXphdGlvbnMKIyBOb3RlOiBGaWVsZDEgYW5kIEZpZWxkMiBhcmUgdGhlIG5hbWVzIG9mIHRoZSBmaWVsZHMgYW5kIGhhZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwKIyBmaWVsZCBuYW1lcwojWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgojICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KI1slIFJlbmRlckJsb2NrU3RhcnQoIkZBUUR5bmFtaWNGaWVsZF9GaWVsZDFfTGluayIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj48YSBocmVmPSJbJSBEYXRhLkxpbmsgJV0iIHRhcmdldD0iX2JsYW5rIj5bJSBEYXRhLlZhbHVlICVdPC9hPjwvc3Bhbj4KI1slIFJlbmRlckJsb2NrRW5kKCJGQVFEeW5hbWljRmllbGRfRmllbGQxX0xpbmsiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRRHluYW1pY0ZpZWxkX0ZpZWxkMV9QbGFpbiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgojWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUR5bmFtaWNGaWVsZF9GaWVsZDFfUGxhaW4iKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgojWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgojICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KI1slIFJlbmRlckJsb2NrU3RhcnQoIkZBUUR5bmFtaWNGaWVsZF9GaWVsZDJfTGluayIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj48YSBocmVmPSJbJSBEYXRhLkxpbmsgJV0iIHRhcmdldD0iX2JsYW5rIj5bJSBEYXRhLlZhbHVlICVdPC9hPjwvc3Bhbj4KI1slIFJlbmRlckJsb2NrRW5kKCJGQVFEeW5hbWljRmllbGRfRmllbGQyX0xpbmsiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRRHluYW1pY0ZpZWxkX0ZpZWxkMl9QbGFpbiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgojWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUR5bmFtaWNGaWVsZF9GaWVsZDJfUGxhaW4iKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgojWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUR5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVmlld1JhdGluZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlJhdGluZyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmF0aW5nIikgfCBodG1sICVdIFslIERhdGEuVm90ZVJlc3VsdCAlXSUiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmF0ZVN0YXJzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJhdGVTdGFyIj48aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUmF0ZVN0YXJzIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmF0ZVN0YXJzQ291bnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmF0ZVN0YXJUZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlN0YXJzIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm91dCBvZiA1IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJhdGVTdGFyc0NvdW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlZpZXdSYXRpbmciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVmlld1ZvdGVzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVm90ZXMiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuVm90ZXMpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuVm90ZXMsICIxOCIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIlZpZXdWb3RlcyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlZpZXdOb1ZvdGVzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVm90ZXMiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJObyB2b3RlcyBmb3VuZCEiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiTm8gdm90ZXMgZm91bmQhIEJlIHRoZSBmaXJzdCBvbmUgdG8gcmF0ZSB0aGlzIEZBUSBhcnRpY2xlLiIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIlZpZXdOb1ZvdGVzIikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkNyZWF0ZWQgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0gIChbJSBEYXRhLkNyZWF0ZWRCeVVzZXIgJV0pPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5DaGFuZ2VkIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdICAoWyUgRGF0YS5DaGFuZ2VkQnlVc2VyICVdKTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMaW5rVGFibGVTaW1wbGUiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgRG9udFByaW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGlua2VkIE9iamVjdHMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUYWJsZVN0cmcgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkxpbmtUYWJsZVNpbXBsZSIpICVdCgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25zIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTWVudUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBpZD0iWyUgRGF0YS5NZW51SUQgfCBodG1sICVdIiBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0iIFslIERhdGEuTGlua1BhcmFtICVdIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5EZXNjcmlwdGlvbikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2hvd0NvbmZpcm1hdGlvbkRpYWxvZyIpICVdClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCi8qZ2xvYmFsIEZBUTogdHJ1ZSAqLwogICAgRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZy5CaW5kQ29uZmlybWF0aW9uRGlhbG9nKHsKICAgICAgICBFbGVtZW50SUQ6ICAgICAgICAgICAgICAgICAgJ1slIERhdGEuTWVudUlEICVdJywKICAgICAgICBFbGVtZW50U2VsZWN0b3I6ICAgICAgICAgICAgJ1slIERhdGEuRWxlbWVudFNlbGVjdG9yIHwgSW50ZXJwb2xhdGUgJV0nLAogICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICAnWyUgRGF0YS5EaWFsb2dDb250ZW50UXVlcnlTdHJpbmcgfCBJbnRlcnBvbGF0ZSAlXScsCiAgICAgICAgQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmc6ICdbJSBEYXRhLkNvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nIHwgSW50ZXJwb2xhdGUgJV0nLAogICAgICAgIERpYWxvZ1RpdGxlOiAgICAgICAgICAgICAgICAnWyUgRGF0YS5EaWFsb2dUaXRsZSB8IEludGVycG9sYXRlICVdJywKICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICBZZXM6IFslIFRyYW5zbGF0ZSgiWWVzIikgfCBKU09OICVdLAogICAgICAgICAgICBObzogIFslIFRyYW5zbGF0ZSgiTm8iKSB8IEpTT04gJV0sCiAgICAgICAgICAgIE9rOiAgWyUgVHJhbnNsYXRlKCJPayIpIHwgSlNPTiAlXQogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNob3dDb25maXJtYXRpb25EaWFsb2ciKSAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIk1lbnVJdGVtIikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+PC9kaXY+CgogICAgICAgICAgICA8ZGl2IGlkPSJGQVFCb2R5Ij4KClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dGFjaG1lbnRIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBdHRhY2htZW50cyIpIHwgaHRtbCAlXTo8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXJ0aWNsZUZBUUNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dGFjaG1lbnRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkRvd25sb2FkQXR0YWNobWVudCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRG93bmxvYWQgQXR0YWNobWVudCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtJdGVtSUQ9WyUgRGF0YS5JdGVtSUQgfCB1cmkgJV07RmlsZUlEPVslIERhdGEuRmlsZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBbJSBEYXRhLkZpbGVzaXplIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4KWyUgUmVuZGVyQmxvY2tFbmQoIkF0dGFjaG1lbnRSb3ciKSAlXQoKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkF0dGFjaG1lbnRIZWFkZXIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQnJvd3NlckxpbmtNZXNzYWdlIikgJV0KIyBTaG93IGluZm8sIHRoYXQgbGlua3Mgd2l0aGluIHRoZSBpZnJhbWUgbXVzdCBiZSBjbGlja2VkIHdpdGggc3RyZy9jbWQvc2hpZnQgKGRlcGVuZGluZyBvbiB0aGUgdXNlZCBicm93c2VyIGFuZCBvcykKIyB0byBvcGVuIHRoZSBsaW5rcyBpbiBhIG5ldyB3aW5kb3cgd2l0aG91dCB0aGUgc2VjdXJpdHkgcGVybWlzc2lvbnMgZ2l2ZW4gdG8gdGhlIGlmcmFtZQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRkFRTWVzc2FnZUJyb3dzZXIiPgogICAgICAgICAgICAgICAgICAgIDxwPgogICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDbG9zZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQ2xvc2UgdGhpcyBtZXNzYWdlIikgfCBodG1sICVdIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkJyb3dzZXJMaW5rTWVzc2FnZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFDb250ZW50IikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCB1cmkgJV07QXJ0aWNsZUlEPVslIERhdGEuQXJ0aWNsZUlEIHwgdXJpICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ2FwdGlvbikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iRkFRU3RhdGVOYW1lIj4oWyUgVHJhbnNsYXRlKERhdGEuU3RhdGVOYW1lKSB8IGh0bWwgJV0pPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFDb250ZW50SFRNTCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiMgVXNlIHRoZSBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSB0byBwcmV2ZW50IHBsdWdpbnMgYW5kIHNjcmlwdHMgZnJvbSBiZWluZyBleGVjdXRlZCBpbiB0aGUgYnJvd3Nlci4KIyBVc2UgSUUncyAobm9uLXN0YW5kYXJkKSBzZWN1cml0eSBhdHRyaWJ1dGUgdG8gYWNoaWV2ZSBzb21ldGhpbmcgc2ltaWxhciBpbiBvbGRlciBJRSBicm93c2Vycy4gQXBwZW5kIHNlc3Npb24gaW5mbyB0byBVUkwgYmVjYXVzZSBJRSB3aWxsIG5vdCBzZW5kIGNvb2tpZXMuCiMgU2V0ICdhbGxvdy1wb3B1cHMnIHRvIGFsbG93IElFMTArIHRvIG9wZW4gbGlua3MuIHJlZjogaHR0cDovL3d3dy53My5vcmcvaHRtbC93Zy93aWtpL0NoYW5nZVByb3Bvc2Fscy9zYW5kYm94X2FsbG93X3BvcHVwcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1wb3B1cHMiIFslIERhdGEuTVNTZWN1cml0eVJlc3RyaWN0ZWQgJV0gY2xhc3M9IkZBUUZpZWxkIiBpZD0iSWZyYW1lRkFRWyUgRGF0YS5GaWVsZCB8IGh0bWwgJV0iIG9ubG9hZD0id2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uICgpeyBpZiAodHlwZW9mIEZBUSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5BZ2VudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5BZ2VudC5GQVFab29tID09PSAnb2JqZWN0JykgeyBGQVEuQWdlbnQuRkFRWm9vbS5JZnJhbWVBdXRvSGVpZ2h0KCQoJyNJZnJhbWVGQVFbJSBEYXRhLkZpZWxkIHwgaHRtbCAlXScpKTsgfX0sIDUwMCk7IiBzcmM9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudEZBUVpvb207U3ViYWN0aW9uPUhUTUxWaWV3O0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV07RmllbGQ9WyUgRGF0YS5GaWVsZCB8IGh0bWwgJV07WyUgRW52KCJTZXNzaW9uTmFtZSIpIHwgaHRtbCAlXT1bJSBFbnYoIlNlc3Npb25JRCIpIHwgaHRtbCAlXSI+PC9pZnJhbWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRQ29udGVudEhUTUwiKSAlXQpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwoKICAgIENvcmUuQ29uZmlnLlNldCgnRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0JywgcGFyc2VJbnQoIlslIENvbmZpZygiRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0IikgJV0iIHx8IDAsIDEwKSk7CiAgICBDb3JlLkNvbmZpZy5TZXQoJ0ZBUTo6RnJvbnRlbmQ6OkFnZW50SFRNTEZpZWxkSGVpZ2h0TWF4JywgcGFyc2VJbnQoIlslIENvbmZpZygiRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHRNYXgiKSAlXSIgfHwgMCwgMTApKTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUUNvbnRlbnRQbGFpbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVGQVFDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ29udGVudCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRQ29udGVudFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRQ29udGVudCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFWb3RpbmciKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXTtBcnRpY2xlSUQ9WyUgRGF0YS5BcnRpY2xlSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJSYXRpbmciKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZBUVZvdGluZyBDb250ZW50IiBpZD0iRkFRVm90aW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXJ0aWNsZUZBUUNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkNlbnRlciI+WyUgVHJhbnNsYXRlKCJIb3cgaGVscGZ1bCB3YXMgdGhpcyBhcnRpY2xlPyBQbGVhc2UgZ2l2ZSB1cyB5b3VyIHJhdGluZyBhbmQgaGVscCB0byBpbXByb3ZlIHRoZSBGQVEgRGF0YWJhc2UuIFRoYW5rIFlvdSEiKSB8IGh0bWwgJV08L3A+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IkZBUVZvdGUiIGNsYXNzPSJGQVFWb3RlRm9ybSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJSYXRlQnV0dG9ucyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5bJSBUcmFuc2xhdGUoIm5vdCBoZWxwZnVsIikgfCBodG1sICVdPC9saT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRVm90aW5nUmF0ZVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD0iUmF0ZUJ1dHRvblslIERhdGEuVmFsdWUgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJhdGVCdXR0b24gUmF0ZVVuQ2hlY2tlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXItbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zdGFyIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUVZvdGluZ1JhdGVSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+WyUgVHJhbnNsYXRlKCJ2ZXJ5IGhlbHBmdWwiKSB8IGh0bWwgJV08L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIGNsYXNzPSJDbGVhciIgLz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24gSGlkZGVuIiBpZD0iUmF0ZVN1Ym1pdEJ1dHRvbiIgbmFtZT0iYnRuIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJWb3RlIikgfCBodG1sICVdIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2hlY2stc3F1YXJlLW8iPjwvaT4gWyUgVHJhbnNsYXRlKCJWb3RlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkFnZW50RkFRWm9vbSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlZvdGUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDYXRlZ29yeUlEIiB2YWx1ZT0iWyUgRGF0YS5DYXRlZ29yeUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikl0ZW1JRCIgdmFsdWU9IlslIERhdGEuSXRlbUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlJhdGUiIHZhbHVlPSIiIGlkPSJSYXRlVmFsdWUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUVZvdGluZyIpICVdCgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUYWJsZVN0cmcgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJMaW5rVGFibGVDb21wbGV4IikgJV0KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ3VsLkFjdGlvbnMgYS5Bc1BvcHVwJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBDb3JlLlVJLlBvcHVwLk9wZW5Qb3B1cCAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCiAgICAkKCcuUmF0ZUJ1dHRvbicpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgdmFyIFJhdGVOdW1iZXIgPSBwYXJzZUludCgkKHRoaXMpLmNsb3Nlc3QoJ2xpJykuYXR0cignaWQnKS5yZXBsYWNlKC9SYXRlQnV0dG9uLywgJycpLCAxMCk7CiAgICAgICAgJCgnI1JhdGVWYWx1ZScpLnZhbChSYXRlTnVtYmVyKTsKICAgICAgICAkKCcjUmF0ZVN1Ym1pdEJ1dHRvbicpLmZhZGVJbigyNTApOwogICAgICAgICQoJyNGQVFWb3RpbmcnKS5maW5kKCcuUmF0ZUJ1dHRvbicpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBJdGVtUmF0ZU51bWJlciA9IHBhcnNlSW50KCQodGhpcykuY2xvc2VzdCgnbGknKS5hdHRyKCdpZCcpLnJlcGxhY2UoL1JhdGVCdXR0b24vLCAnJyksIDEwKTsKICAgICAgICAgICAgaWYgKCBJdGVtUmF0ZU51bWJlciA8PSBSYXRlTnVtYmVyICkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnUmF0ZUNoZWNrZWQnKTsKICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ1JhdGVVbkNoZWNrZWQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ1JhdGVVbkNoZWNrZWQnKTsKICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ1JhdGVDaGVja2VkJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGgxIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlpvb20iKSB8IGh0bWwgJV0gWyUgQ29uZmlnKCJGQVE6OkZBUUhvb2siKSAlXTogWyUgRGF0YS5OdW1iZXIgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iPgogICAgICAgICAgICBbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdOiBbJSBEYXRhLk51bWJlciAlXSA8c3Bhbj4mbWRhc2g7PC9zcGFuPiBbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICA8L2Rpdj4KCiAgICA8dWwgY2xhc3M9IkJyZWFkQ3J1bWIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IikgJV0KICAgICAgICA8bGk+CiAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudEZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9WyUgRGF0YS5DYXRlZ29yeUlEIHwgdXJpICVdO05hdj1bJSBEYXRhLk5hdiB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLk5hbWUgfCBodG1sICVdCiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRUGF0aENhdGVnb3J5RWxlbWVudCIpICVdCiAgICA8L3VsPgoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkZBUSBJbmZvcm1hdGlvbiIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNhdGVnb3J5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkNhdGVnb3J5TmFtZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5DYXRlZ29yeU5hbWUpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiS2V5d29yZHMiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiS2V5d29yZHMiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50RkFRU2VhcmNoU21hbGw7U3ViYWN0aW9uPVNlYXJjaDtLZXl3b3JkPVslIERhdGEuS2V5d29yZCB8IHVyaSAlXSIgdGl0bGU9IlslIERhdGEuS2V5d29yZCB8IGh0bWwgJV0iPlslIERhdGEuS2V5d29yZCB8IGh0bWwgJV08L2E+ClslIFJlbmRlckJsb2NrRW5kKCJLZXl3b3JkcyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuU3RhdGUpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuU3RhdGUpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQsICIyNSIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiTGFuZ3VhZ2UiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYW5ndWFnZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5MYW5ndWFnZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYW5ndWFnZSkgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJMYW5ndWFnZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJWaWV3QXBwcm92YWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBcHByb3ZhbCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5BcHByb3ZhbCkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5BcHByb3ZhbCkgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJWaWV3QXBwcm92YWwiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVmlld1JhdGluZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlJhdGluZyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmF0aW5nIikgfCBodG1sICVdIFslIERhdGEuVm90ZVJlc3VsdCAlXSUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSYXRlU3RhcnMiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZVN0YXIiPjxpIGNsYXNzPSJmYSBmYS1zdGFyIj48L2k+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJSYXRlU3RhcnMiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSYXRlU3RhcnNDb3VudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSYXRlU3RhclRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU3RhcnMgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgib3V0IG9mIDUiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUmF0ZVN0YXJzQ291bnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVmlld1JhdGluZyIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJWaWV3Vm90ZXMiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJWb3RlcyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuVm90ZXMgfCBodG1sICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiVmlld1ZvdGVzIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVmlld05vVm90ZXMiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJWb3RlcyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk5vIHZvdGVzIGZvdW5kISIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJObyB2b3RlcyBmb3VuZCEgQmUgdGhlIGZpcnN0IG9uZSB0byByYXRlIHRoaXMgRkFRIGFydGljbGUuIikgfCBodG1sICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiVmlld05vVm90ZXMiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuQ3JlYXRlZCB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdIChbJSBEYXRhLkNyZWF0ZWRCeUxvZ2luIHwgaHRtbCAlXSkiPlslIERhdGEuQ3JlYXRlZCB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXSAgKFslIERhdGEuQ3JlYXRlZEJ5TG9naW4gfCBodG1sICVdKTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBEYXRhLkNoYW5nZWQgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXSAoWyUgRGF0YS5DcmVhdGVkQnlMb2dpbiB8IGh0bWwgJV0pIj5bJSBEYXRhLkNoYW5nZWQgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0gIChbJSBEYXRhLkNyZWF0ZWRCeUxvZ2luIHwgaHRtbCAlXSk8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICAgICAgPGRpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRQ29udGVudCIpICVdCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoRGF0YS5DYXB0aW9uKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFDb250ZW50SFRNTCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiMgVXNlIHRoZSBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSB0byBwcmV2ZW50IHBsdWdpbnMgYW5kIHNjcmlwdHMgZnJvbSBiZWluZyBleGVjdXRlZCBpbiB0aGUgYnJvd3Nlci4KIyBVc2UgSUUncyAobm9uLXN0YW5kYXJkKSBzZWN1cml0eSBhdHRyaWJ1dGUgdG8gYWNoaWV2ZSBzb21ldGhpbmcgc2ltaWxhciBpbiBvbGRlciBJRSBicm93c2Vycy4gQXBwZW5kIHNlc3Npb24gaW5mbyB0byBVUkwgYmVjYXVzZSBJRSB3aWxsIG5vdCBzZW5kIGNvb2tpZXMuCiMgU2V0ICdhbGxvdy1wb3B1cHMnIHRvIGFsbG93IElFMTArIHRvIG9wZW4gbGlua3MuIHJlZjogaHR0cDovL3d3dy53My5vcmcvaHRtbC93Zy93aWtpL0NoYW5nZVByb3Bvc2Fscy9zYW5kYm94X2FsbG93X3BvcHVwcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1wb3B1cHMiIFslIERhdGEuTVNTZWN1cml0eVJlc3RyaWN0ZWQgJV0gY2xhc3M9IkZBUUZpZWxkIiBpZD0iSWZyYW1lRkFRWyUgRGF0YS5GaWVsZCB8IGh0bWwgJV0iIG9ubG9hZD0id2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uICgpeyBpZiAodHlwZW9mIEZBUSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5BZ2VudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5BZ2VudC5GQVFab29tID09PSAnb2JqZWN0JykgeyBGQVEuQWdlbnQuRkFRWm9vbS5JZnJhbWVBdXRvSGVpZ2h0KCQoJyNJZnJhbWVGQVFbJSBEYXRhLkZpZWxkIHwgaHRtbCAlXScpKTsgfX0sIDUwMCk7IiBzcmM9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudEZBUVpvb207U3ViYWN0aW9uPUhUTUxWaWV3O0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV07RmllbGQ9WyUgRGF0YS5GaWVsZCB8IGh0bWwgJV07WyUgRW52KCJTZXNzaW9uTmFtZSIpIHwgaHRtbCAlXT1bJSBFbnYoIlNlc3Npb25JRCIpIHwgaHRtbCAlXSI+PC9pZnJhbWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRQ29udGVudEhUTUwiKSAlXQpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwoKICAgIENvcmUuQ29uZmlnLlNldCgnRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0JywgcGFyc2VJbnQoIlslIENvbmZpZygiRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0IikgJV0iIHx8IDAsIDEwKSk7CiAgICBDb3JlLkNvbmZpZy5TZXQoJ0ZBUTo6RnJvbnRlbmQ6OkFnZW50SFRNTEZpZWxkSGVpZ2h0TWF4JywgcGFyc2VJbnQoIlslIENvbmZpZygiRkFROjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHRNYXgiKSAlXSIgfHwgMCwgMTApKTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUUNvbnRlbnRQbGFpbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVGQVFDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ29udGVudCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRQ29udGVudFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRQ29udGVudCIpICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+CiAgICA8aW5wdXQgaWQ9IkZBUUlEIiB0eXBlPSJoaWRkZW4iIG5hbWU9IkZBUUlEIiB2YWx1ZT0iWyUgRGF0YS5JRCB8IGh0bWwgJV0iPgogICAgPGlucHV0IGlkPSJGQVFUaXRsZSIgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaXRsZSIgdmFsdWU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj4KICAgIDxpbnB1dCBpZD0iRkFRQm9keSIgdHlwZT0iaGlkZGVuIiBuYW1lPSJCb2R5IiB2YWx1ZT0iWyUgRGF0YS5GdWxsQm9keSB8IGh0bWwgJV0iPgogICAgPGlucHV0IGlkPSJGQVFQdWJsaWNMaW5rIiB0eXBlPSJoaWRkZW4iIG5hbWU9IkxpbmsiICB2YWx1ZT0iWyUgRGF0YS5QdWJsaWNsaW5rICVdIj4KCjwvZGl2PgoKPGRpdiBjbGFzcz0iWm9vbVNtYWxsRm9vdGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVXBkYXRlQXJ0aWNsZVN1YmplY3QiKSAlXQogICAgPGlucHV0IGlkPSJVcGRhdGVBcnRpY2xlU3ViamVjdE9wdGlvbiIgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJab29tU21hbGxCdXR0b24iIG5hbWU9IlVwZGF0ZUFydGljbGVTdWJqZWN0T3B0aW9uIiBjaGVja2VkPSJjaGVja2VkIiB2YWx1ZSIxIi8+CiAgICA8bGFiZWwgZm9yPSJVcGRhdGVBcnRpY2xlU3ViamVjdE9wdGlvbiI+WyUgVHJhbnNsYXRlKCJBZGQgRkFRIHRpdGxlIHRvIGFydGljbGUgc3ViamVjdCIpIHwgaHRtbCAlXTwvbGFiZWw+ClslIFJlbmRlckJsb2NrRW5kKCJVcGRhdGVBcnRpY2xlU3ViamVjdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkluc2VydFRleHQiKSAlXQogICAgPGJ1dHRvbiBpZD0iSW5zZXJ0VGV4dCIgY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiBab29tU21hbGxCdXR0b24iPjxzcGFuPlslIFRyYW5zbGF0ZSgiSW5zZXJ0IEZBUSBUZXh0IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5zZXJ0VGV4dCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnNlcnRGdWxsIikgJV0KICAgIDxidXR0b24gaWQ9Ikluc2VydEZ1bGwiIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24gWm9vbVNtYWxsQnV0dG9uIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkluc2VydCBGdWxsIEZBUSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KWyUgUmVuZGVyQmxvY2tFbmQoIkluc2VydEZ1bGwiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5zZXJ0TGluayIpICVdCiAgICA8YnV0dG9uIGlkPSJJbnNlcnRMaW5rIiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIFpvb21TbWFsbEJ1dHRvbiI+PHNwYW4+WyUgVHJhbnNsYXRlKCJJbnNlcnQgRkFRIExpbmsiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+ClslIFJlbmRlckJsb2NrRW5kKCJJbnNlcnRMaW5rIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkluc2VydFRleHRBbmRMaW5rIikgJV0KICAgIDxidXR0b24gaWQ9Ikluc2VydFRleHRBbmRMaW5rIiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIFpvb21TbWFsbEJ1dHRvbiI+PHNwYW4+WyUgVHJhbnNsYXRlKCJJbnNlcnQgRkFRIFRleHQgJiBMaW5rIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5zZXJ0VGV4dEFuZExpbmsiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5zZXJ0RnVsbEFuZExpbmsiKSAlXQogICAgPGJ1dHRvbiBpZD0iSW5zZXJ0RnVsbEFuZExpbmsiIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24gWm9vbVNtYWxsQnV0dG9uIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkluc2VydCBGdWxsIEZBUSAmIExpbmsiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+ClslIFJlbmRlckJsb2NrRW5kKCJJbnNlcnRGdWxsQW5kTGluayIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPciIpICVdCiAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJPciIpICVdCgogICAgPGEgaWQ9IkNhbmNlbCIgY2xhc3M9IlslIERhdGEuQ2FuY2VsQnV0dG9uQ2xhc3MgfCBodG1sICVdIiBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCAmIGNsb3NlIikgfCBodG1sICVdPC9hPgoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxiciAvPgoKPC9kaXY+CgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwovKmdsb2JhbCBGQVE6IHRydWUgKi8KQ29yZS5Db25maWcuU2V0KCdUaWNrZXRDb21wb3NlLlVwZGF0ZUFydGljbGVTdWJqZWN0JywgIlslIERhdGEuVXBkYXRlQXJ0aWNsZVN1YmplY3QgfCBodG1sICVdIik7CgokKCcjQ2FuY2VsJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIHBhcmVudC5Db3JlLlVJLkRpYWxvZy5DbG9zZURpYWxvZygkKCcuRGlhbG9nJywgcGFyZW50LmRvY3VtZW50KSk7Cn0pOwoKJCgnI0luc2VydFRleHQnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgewogICAgdmFyIEluc2VydFRleHQgPSAxLAogICAgICAgIEluc2VydExpbmsgPSAwOwoKICAgIEZBUS5BZ2VudC5UaWNrZXRDb21wb3NlLlNldFRleHQoSW5zZXJ0VGV4dCwgSW5zZXJ0TGluayk7Cn0pOwoKJCgnI0luc2VydExpbmsnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgewogICAgdmFyIEluc2VydFRleHQgPSAwLAogICAgICAgIEluc2VydExpbmsgPSAxOwoKICAgIEZBUS5BZ2VudC5UaWNrZXRDb21wb3NlLlNldFRleHQoSW5zZXJ0VGV4dCwgSW5zZXJ0TGluayk7Cn0pOwoKJCgnI0luc2VydFRleHRBbmRMaW5rJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIHZhciBJbnNlcnRUZXh0ID0gMSwKICAgICAgICBJbnNlcnRMaW5rID0gMTsKCiAgICBGQVEuQWdlbnQuVGlja2V0Q29tcG9zZS5TZXRUZXh0KEluc2VydFRleHQsIEluc2VydExpbmspOwp9KTsKCiQoJyNJbnNlcnRGdWxsJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIHZhciBJbnNlcnRUZXh0ID0gMSwKICAgICAgICBJbnNlcnRMaW5rID0gMDsKCiAgICBGQVEuQWdlbnQuVGlja2V0Q29tcG9zZS5TZXRGdWxsRkFRKEluc2VydFRleHQsIEluc2VydExpbmspOwp9KTsKCiQoJyNJbnNlcnRGdWxsQW5kTGluaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICB2YXIgSW5zZXJ0VGV4dCA9IDEsCiAgICAgICAgSW5zZXJ0TGluayA9IDE7CgogICAgRkFRLkFnZW50LlRpY2tldENvbXBvc2UuU2V0RnVsbEZBUShJbnNlcnRUZXh0LCBJbnNlcnRMaW5rKTsKfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJBUklBUm9sZU1haW4iPgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9IkZBUUhlYWRlciI+CiAgICAgICAgICAgIDxoMT5bJSBUcmFuc2xhdGUoIkZBUSBFeHBsb3JlciIpIHwgaHRtbCAlXTwvaDE+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDx1bCBjbGFzcz0iQnJlYWRDcnVtYiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUVBhdGhDYXRlZ29yeUVsZW1lbnQiKSAlXQogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249Q3VzdG9tZXJGQVFFeHBsb3JlcjtDYXRlZ29yeUlEPVslIERhdGEuQ2F0ZWdvcnlJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRUGF0aENhdGVnb3J5RWxlbWVudCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUVBhdGhDYXRlZ29yeUVsZW1lbnROb0xpbmsiKSAlXQogICAgICAgICAgICA8bGk+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50Tm9MaW5rIikgJV0KICAgICAgICA8L3VsPgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiBMYXJnZSI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJRdWlja1NlYXJjaCIpICVdCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5bJSBUcmFuc2xhdGUoIlNlYXJjaCIpIHwgaHRtbCAlXTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0iU2VhcmNoQm94IiBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIERhdGEuQWN0aW9uIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZWFyY2giLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTmF2IiB2YWx1ZT0iWyUgRGF0YS5OYXYgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJGdWxsdGV4dCIgdmFsdWU9IlslIERhdGEuU2VhcmNoIHwgaHRtbCAlXSIgaWQ9IlNlYXJjaCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2VhcmNoIikgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTZWFyY2giKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJRdWljayBTZWFyY2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJXaWxkY2FyZHMgYXJlIGFsbG93ZWQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGQVFTZWFyY2hCdXR0b24gU3BhY2luZ1RvcCIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIERhdGEuQWN0aW9uIHwgdXJpICVdOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT4gWyUgVHJhbnNsYXRlKCJBZHZhbmNlZCBTZWFyY2giKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUXVpY2tTZWFyY2giKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5mb0JveEZBUU1pbmlMaXN0IikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5bJSBUcmFuc2xhdGUoRGF0YS5IZWFkZXIpIHwgaHRtbCAlXTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iVGFibGVsaWtlIEZBUU1pbmlMaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+ClslIFJlbmRlckJsb2NrU3RhcnQoIkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3dQb3NpdGlvbk51bWJlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OdW1iZXIgfCBodG1sICVdLgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvd1Bvc2l0aW9uTnVtYmVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249Q3VzdG9tZXJGQVFab29tO0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IHVyaSAlXSIgdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIChbJSBEYXRhLkNhdGVnb3J5TmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2F0ZWdvcnlTaG9ydE5hbWUgfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdIC0gWyUgRGF0YS5MYW5ndWFnZSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoRGF0YS5TdGF0ZSkgfCBodG1sICVdIC0gWyUgRGF0YS5DcmVhdGVkIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5mb0JveEZBUU1pbmlMaXN0IikgJV0KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlN1YmNhdGVnb3JpZXMiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5bJSBUcmFuc2xhdGUoIlN1YmNhdGVnb3JpZXMiKSB8IGh0bWwgJV08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJPdmVydmlldyIgc3VtbWFyeT0iRkFRIGNhdGVnb3JpZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvYT48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlN1YmNhdGVnb3JpZXMiKSB8IGh0bWwgJV08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiRkFRIEFydGljbGVzIikgfCBodG1sICVdPC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vQ2F0ZWdvcnlEYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJObyBzdWJjYXRlZ29yaWVzIGZvdW5kLiIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9DYXRlZ29yeURhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5TdWJDYXRlZ29yeUNvdW50IHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkFydGljbGVDb3VudCB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTdWJjYXRlZ29yaWVzIikgJV0KCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFJdGVtTGlzdCIpICVdCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+WyUgVHJhbnNsYXRlKCJGQVEgQXJ0aWNsZXMiKSB8IGh0bWwgJV08L2gzPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQYWdpbmF0aW9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGFnaW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIERhdGEuUmVzdWx0IHwgaHRtbCAlXTwvc3Ryb25nPiBbJSBUcmFuc2xhdGUoIm9mIikgfCBodG1sICVdIDxzdHJvbmc+WyUgRGF0YS5Ub3RhbEhpdHMgfCBodG1sICVdPC9zdHJvbmc+IC0gWyUgVHJhbnNsYXRlKCJQYWdlIikgfCBodG1sICVdOiBbJSBEYXRhLlNpdGVOYXZCYXIgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQYWdpbmF0aW9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJPdmVydmlldyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkZBUU51bWJlciBbJSBEYXRhLkZBUUlEU29ydCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtDYXRlZ29yeUlEPVslIERhdGEuQ2F0ZWdvcnlJRCB8IHVyaSAlXTtTb3J0Qnk9RkFRSUQ7T3JkZXI9WyUgRGF0YS5PcmRlciB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgQ29uZmlnKCJGQVE6OkZBUUhvb2siKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpdGxlIFslIERhdGEuVGl0bGVTb3J0ICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO0NhdGVnb3J5SUQ9WyUgRGF0YS5DYXRlZ29yeUlEIHwgdXJpICVdO1NvcnRCeT1UaXRsZTtPcmRlcj1bJSBEYXRhLk9yZGVyIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRpdGxlIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2F0ZWdvcnkgWyUgRGF0YS5DYXRlZ29yeVNvcnQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV07U29ydEJ5PUNhdGVnb3J5O09yZGVyPVslIERhdGEuT3JkZXIgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyTGFuZ3VhZ2UiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ikxhbmd1YWdlIFslIERhdGEuTGFuZ3VhZ2VTb3J0ICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO0NhdGVnb3J5SUQ9WyUgRGF0YS5DYXRlZ29yeUlEIHwgdXJpICVdO1NvcnRCeT1MYW5ndWFnZTtPcmRlcj1bJSBEYXRhLk9yZGVyIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkxhbmd1YWdlIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iU3RhdGUgWyUgRGF0YS5TdGF0ZVNvcnQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV07U29ydEJ5PVN0YXRlO09yZGVyPVslIERhdGEuT3JkZXIgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9GQVFEYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJObyBGQVEgYXJ0aWNsZXMgZm91bmQuIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0ZBUURhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkZBUU51bWJlciIgdGl0bGU9IlslIERhdGEuTnVtYmVyIHwgaHRtbCAlXSI+PGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUN1c3RvbWVyRkFRWm9vbTtJdGVtSUQ9WyUgRGF0YS5GQVFJRCB8IHVyaSAlXSI+WyUgRGF0YS5OdW1iZXIgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGl0bGUiIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+WyUgRGF0YS5DbGVhblRpdGxlIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2F0ZWdvcnkiIHRpdGxlPSJbJSBEYXRhLkNhdGVnb3J5TmFtZSB8IGh0bWwgJV0iPlslIERhdGEuQ2F0ZWdvcnlOYW1lIHwgdHJ1bmNhdGUoNDUpIHwgaHRtbCAlXTwvdGQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZExhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJMYW5ndWFnZSIgdGl0bGU9IlslIERhdGEuTGFuZ3VhZ2UgfCBodG1sICVdIj5bJSBEYXRhLkxhbmd1YWdlIHwgdHJ1bmNhdGUoNSkgfCBodG1sICVdPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZExhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJTdGF0ZSI+WyUgVHJhbnNsYXRlKERhdGEuU3RhdGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCb3R0b21TdWJOYXZpZ2F0aW9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGFnaW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIERhdGEuUmVzdWx0IHwgaHRtbCAlXTwvc3Ryb25nPiBbJSBUcmFuc2xhdGUoIm9mIikgfCBodG1sICVdIDxzdHJvbmc+WyUgRGF0YS5Ub3RhbEhpdHMgfCBodG1sICVdPC9zdHJvbmc+IC0gWyUgVHJhbnNsYXRlKCJQYWdlIikgfCBodG1sICVdOiBbJSBEYXRhLlNpdGVOYXZCYXIgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkJvdHRvbVN1Yk5hdmlnYXRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFJdGVtTGlzdCIpICVdCgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLyBtYWtlIHdob2xlIEZBUSBJdGVtIHJvdyBjbGlja2FibGUsIGJ1dCBub3QgdGhlIGhlYWRlcnMsIGNhbid0IHVzZSBDb3JlLkN1c3RvbWVyLkNsaWNrYWJsZVJvdygpCi8vIHNpbmNlIGl0IHVzZXMgInRhYmxlIHRyIiBhcyBzZWxlY3Rvciwgc2VlIGJ1ZyM5MzI5CiQoInRib2R5IHRyIikuY2xpY2soZnVuY3Rpb24oKXsKICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJCgiYSIsIHRoaXMpLmF0dHIoImhyZWYiKTsKICAgIHJldHVybiBmYWxzZTsKfSk7Cjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlYXJjaCIpICVdCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJTZWFyY2ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJMb2FkUHJvZmlsZSIvPgogICAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJQcm9maWxlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUHJvZmlsZSI+WyUgVHJhbnNsYXRlKCJTZWFyY2ggdGVtcGxhdGUiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuUHJvZmlsZXNTdHJnICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93Ij4KICAgICAgICAgICAgICAgIDxidXR0b24gbmFtZT0iU2VsZWN0VGVtcGxhdGUiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2VsZWN0IikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIlNlbGVjdCIpIHwgaHRtbCAlXTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJFcmFzZVRlbXBsYXRlIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gbmFtZT0iU2VhcmNoVGVtcGxhdGUiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2VhcmNoIikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIlNlYXJjaCIpIHwgaHRtbCAlXTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Zvcm0+CgogICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZWFyY2giLz4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgPGgyPlslIENvbmZpZygiRkFROjpGQVFIb29rIikgJV08L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOdW1iZXIiPlslIENvbmZpZygiRkFROjpGQVFIb29rIikgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iWyUgQ29uZmlnKCJGQVE6OkZBUUhvb2siKSAlXSIgdHlwZT0idGV4dCIgbmFtZT0iTnVtYmVyIiBpZD0iTnVtYmVyIiBzaXplPSIzMCIgdmFsdWU9IlslIERhdGEuTnVtYmVyIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiZS4gZy4gMTAqNTE1NSBvciAxMDU2NTgqIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkZ1bGx0ZXh0IHNlYXJjaCBpbiBGQVEgYXJ0aWNsZXMgKGUuIGcuIFwiSm9obipuXCIgb3IgXCJXaWxsKlwiKSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkZ1bGxUZXh0Ij5bJSBUcmFuc2xhdGUoIkZ1bGx0ZXh0IikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRnVsbHRleHQiKSB8IGh0bWwgJV0iIHR5cGU9InRleHQiIGlkPSJGdWxsVGV4dCIgbmFtZT0iRnVsbHRleHQiIHZhbHVlPSJbJSBEYXRhLkZ1bGx0ZXh0IHwgaHRtbCAlXSIgc2l6ZT0iMjAiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVGl0bGUiPlslIFRyYW5zbGF0ZSgiVGl0bGUiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXSIgdHlwZT0idGV4dCIgaWQ9IlRpdGxlIiBuYW1lPSJUaXRsZSIgdmFsdWU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIiBzaXplPSIyMCIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJLZXl3b3JkIj5bJSBUcmFuc2xhdGUoIktleXdvcmQiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJLZXl3b3JkIikgfCBodG1sICVdIiB0eXBlPSJ0ZXh0IiBpZD0iS2V5d29yZCIgbmFtZT0iS2V5d29yZCIgdmFsdWU9IlslIERhdGEuS2V5d29yZCB8IGh0bWwgJV0iIHNpemU9IjIwIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgIDwvZmllbGRzZXQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIkxhbmd1YWdlIikgJV0KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGFuZ3VhZ2UiKSB8IGh0bWwgJV06PC9oMj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYW5ndWFnZXNTdHJnICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KWyUgUmVuZGVyQmxvY2tFbmQoIkxhbmd1YWdlIikgJV0KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkiKSB8IGh0bWwgJV06PC9oMj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYXRlZ29yaWVzU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGltZVNlYXJjaFR5cGUiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiVm90ZSByZXN0cmljdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTm8gdm90ZSBzZXR0aW5ncyIpIHwgaHRtbCAlXSIgdHlwZT0icmFkaW8iICBpZD0iTm9Wb3RlU2V0IiBuYW1lPSJWb3RlU2VhcmNoT3B0aW9uIiB2YWx1ZT0iIiBbJSBEYXRhLml0ZW0oIlZvdGVTZWFyY2hPcHRpb246Ok5vbmUiKSAlXSAvPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik5vVFZvdGVTZXQiPlslIFRyYW5zbGF0ZSgiQWxsIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9WyUgVHJhbnNsYXRlKCJTcGVjaWZpYyB2b3RlcyIpIHwgaHRtbCAlXSB0eXBlPSJyYWRpbyIgaWQ9IlZvdGVQb2ludCIgbmFtZT0iVm90ZVNlYXJjaE9wdGlvbiIgIHZhbHVlPSJWb3RlUG9pbnQiIFslIERhdGEuaXRlbSgiVm90ZVNlYXJjaE9wdGlvbjo6Vm90ZVBvaW50IikgJV0gLz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWb3RlUG9pbnQiPlslIFRyYW5zbGF0ZSgiT25seSBGQVEgYXJ0aWNsZXMgd2l0aCB2b3Rlcy4uLiIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Wb3RlU2VhcmNoVHlwZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJWb3RlU2VhcmNoIiB2YWx1ZT0iWyUgRGF0YS5Wb3RlU2VhcmNoIHwgaHRtbCAlXSIgY2xhc3M9IlcyNXBjIi8+CiAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJlLiBnLiBFcXVhbHMgMTAgb3IgR3JlYXRlclRoYW4gNjAiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGltZVNlYXJjaFR5cGUiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiUmF0ZSByZXN0cmljdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTm8gcmF0ZSBzZXR0aW5ncyIpIHwgaHRtbCAlXSIgdHlwZT0icmFkaW8iICBpZD0iTm9SYXRlU2V0IiBuYW1lPSJSYXRlU2VhcmNoT3B0aW9uIiB2YWx1ZT0iIiBbJSBEYXRhLml0ZW0oIlJhdGVTZWFyY2hPcHRpb246Ok5vbmUiKSAlXSAvPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik5vUmF0ZVNldCI+WyUgVHJhbnNsYXRlKCJBbGwiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT1bJSBUcmFuc2xhdGUoIlNwZWNpZmljIHJhdGUiKSB8IGh0bWwgJV0gdHlwZT0icmFkaW8iIGlkPSJSYXRlUG9pbnQiIG5hbWU9IlJhdGVTZWFyY2hPcHRpb24iIHZhbHVlPSJSYXRlUG9pbnQiIFslIERhdGEuaXRlbSgiUmF0ZVNlYXJjaE9wdGlvbjo6UmF0ZVBvaW50IikgJV0gLz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJSYXRlUG9pbnQiPlslIFRyYW5zbGF0ZSgiT25seSBGQVEgYXJ0aWNsZXMgd2l0aCByYXRlLi4uIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlJhdGVTZWFyY2hUeXBlU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5SYXRlU2VhcmNoU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJlLiBnLiBFcXVhbHMgMjUlIG9yIEdyZWF0ZXJUaGFuIDc1JSIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0PgoKICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUaW1lU2VhcmNoVHlwZSI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJUaW1lIHJlc3RyaWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJObyB0aW1lIHNldHRpbmdzIikgfCBodG1sICVdIiB0eXBlPSJyYWRpbyIgIGlkPSJOb1RpbWVTZXQiIG5hbWU9IlRpbWVTZWFyY2hUeXBlIiB2YWx1ZT0iIiBbJSBEYXRhLml0ZW0oIlRpbWVTZWFyY2hUeXBlOjpOb25lIikgJV0gLz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOb1RpbWVTZXQiPlslIFRyYW5zbGF0ZSgiQWxsIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU3BlY2lmaWMgZGF0ZSIpIHwgaHRtbCAlXSIgdHlwZT0icmFkaW8iIGlkPSJEYXRlIiBuYW1lPSJUaW1lU2VhcmNoVHlwZSIgdmFsdWU9IlRpbWVQb2ludCIgWyUgRGF0YS5pdGVtKCJUaW1lU2VhcmNoVHlwZTo6VGltZVBvaW50IikgJV0gLz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJEYXRlIj5bJSBUcmFuc2xhdGUoIk9ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuSXRlbUNyZWF0ZVRpbWVQb2ludFN0YXJ0ICVdIFslIERhdGEuSXRlbUNyZWF0ZVRpbWVQb2ludCAlXSBbJSBEYXRhLkl0ZW1DcmVhdGVUaW1lUG9pbnRGb3JtYXQgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IiRUZXN0IntEYXRlIHJhbmdlIn0iIHR5cGU9InJhZGlvIiBpZD0iRGF0ZVJhbmdlIiBuYW1lPSJUaW1lU2VhcmNoVHlwZSIgdmFsdWU9IlRpbWVTbG90IiBbJSBEYXRhLml0ZW0oIlRpbWVTZWFyY2hUeXBlOjpUaW1lU2xvdCIpICVdIC8+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRGF0ZVJhbmdlIj5bJSBUcmFuc2xhdGUoIk9ubHkgRkFRIGFydGljbGVzIGNyZWF0ZWQgYmV0d2VlbiIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5JdGVtQ3JlYXRlVGltZVN0YXJ0ICVdIFslIFRyYW5zbGF0ZSgiYW5kIikgfCBodG1sICVdIFslIERhdGEuSXRlbUNyZWF0ZVRpbWVTdG9wICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNlYXJjaC1Qcm9maWxlIGFzIFRlbXBsYXRlPyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNhdmVQcm9maWxlIj5bJSBUcmFuc2xhdGUoIlNhdmUgYXMgVGVtcGxhdGU/IikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlNhdmUgYXMgVGVtcGxhdGUiIHR5cGU9ImNoZWNrYm94IiBpZD0iU2F2ZVByb2ZpbGUiIG5hbWU9IlNhdmVQcm9maWxlIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlByb2ZpbCI+WyUgVHJhbnNsYXRlKCJUZW1wbGF0ZSBOYW1lIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlBpY2sgYSBwcm9maWwgbmFtZSIgdHlwZT0idGV4dCIgaWQ9IlByb2ZpbCIgbmFtZT0iUHJvZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSJbJSBEYXRhLlByb2ZpbGUgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDxkaXYgaWQ9IkJvdHRvbUFjdGlvblJvdyIgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2VhcmNoIikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIlNlYXJjaCIpIHwgaHRtbCAlXTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJPdXRwdXQgdG8iKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICBbJSBEYXRhLlJlc3VsdEZvcm1TdHJnICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4KICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlYXJjaCIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT5bJSBDb25maWcoIlByb2R1Y3ROYW1lIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJDdXN0b21lciIpIHwgaHRtbCAlXSAoWyUgQ29uZmlnKCJGQVE6OkZBUUhvb2siKSB8IGh0bWwgJV0pPC9TaG9ydE5hbWU+CjxEZXNjcmlwdGlvbj5bJSBDb25maWcoIlByb2R1Y3ROYW1lIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJDdXN0b21lciIpIHwgaHRtbCAlXSAoWyUgQ29uZmlnKCJGQVE6OkZBUUhvb2siKSB8IGh0bWwgJV0pPC9EZXNjcmlwdGlvbj4KPElucHV0RW5jb2Rpbmc+WyUgRW52KCJVc2VyQ2hhcnNldCIpICVdPC9JbnB1dEVuY29kaW5nPgo8VXJsIHR5cGU9InRleHQvaHRtbCIgdGVtcGxhdGU9IlslIENvbmZpZygiSHR0cFR5cGUiKSAlXTovL1slIENvbmZpZygiRlFETiIpICVdWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUN1c3RvbWVyRkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7TnVtYmVyPXtzZWFyY2hUZXJtc30iIC8+CjxJbWFnZSBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIHR5cGU9ImltYWdlL3gtaWNvbiI+WyUgQ29uZmlnKCJIdHRwVHlwZSIpICVdOi8vWyUgQ29uZmlnKCJGUUROIikgJV1bJSBDb25maWcoIkZyb250ZW5kOjpJbWFnZVBhdGgiKSAlXWljb25zL3Byb2R1Y3QuaWNvPC9JbWFnZT4KPC9PcGVuU2VhcmNoRGVzY3JpcHRpb24+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT5bJSBDb25maWcoIlByb2R1Y3ROYW1lIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJDdXN0b21lciIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJGQVFGdWxsdGV4dCIpIHwgaHRtbCAlXSk8L1Nob3J0TmFtZT4KPERlc2NyaXB0aW9uPlslIENvbmZpZygiUHJvZHVjdE5hbWUiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoIkN1c3RvbWVyIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoIkZBUUZ1bGx0ZXh0IikgfCBodG1sICVdKTwvRGVzY3JpcHRpb24+CjxJbnB1dEVuY29kaW5nPlslIEVudigiVXNlckNoYXJzZXQiKSAlXTwvSW5wdXRFbmNvZGluZz4KPFVybCB0eXBlPSJ0ZXh0L2h0bWwiIHRlbXBsYXRlPSJbJSBDb25maWcoIkh0dHBUeXBlIikgJV06Ly9bJSBDb25maWcoIkZRRE4iKSAlXVslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1DdXN0b21lckZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO0Z1bGx0ZXh0PXtzZWFyY2hUZXJtc30iIC8+CjxJbWFnZSBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIHR5cGU9ImltYWdlL3gtaWNvbiI+WyUgQ29uZmlnKCJIdHRwVHlwZSIpICVdOi8vWyUgQ29uZmlnKCJGUUROIikgJV1bJSBDb25maWcoIkZyb250ZW5kOjpJbWFnZVBhdGgiKSAlXWljb25zL3Byb2R1Y3QuaWNvPC9JbWFnZT4KPC9PcGVuU2VhcmNoRGVzY3JpcHRpb24+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJUaWNrZXRWaWV3IEFSSUFSb2xlTWFpbiBTZWFyY2hSZXN1bHRzIFslIENvbmZpZygiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRPdmVydmlld1NvcnRhYmxlIikgJV0gU29ydGFibGUiPgogICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249TG9hZFByb2ZpbGU7WyUgRGF0YS5MaW5rIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgJmxhcnI7IFslIFRyYW5zbGF0ZSgiQ2hhbmdlIHNlYXJjaCBvcHRpb25zIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGFnaW5hdGlvbiIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iVGFicyBQYWdpbmF0aW9uIj4KICAgICAgICAgICAgPHN0cm9uZz5bJSBEYXRhLlJlc3VsdCB8IGh0bWwgJV08L3N0cm9uZz4gWyUgVHJhbnNsYXRlKCJvZiIpIHwgaHRtbCAlXSA8c3Ryb25nPlslIERhdGEuVG90YWxIaXRzIHwgaHRtbCAlXTwvc3Ryb25nPiAtIFslIFRyYW5zbGF0ZSgiUGFnZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5TaXRlTmF2QmFyICVdCiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQYWdpbmF0aW9uIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iU2VhcmNoVGVybXMiPgogICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTZWFyY2ggUmVzdWx0cyBmb3IiKSB8IGh0bWwgJV06PC9oMj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2VhcmNoVGVybXMiKSAlXQogICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgIFslIERhdGEuQXR0cmlidXRlIHwgaHRtbCAlXTogWyUgRGF0YS5WYWx1ZSB8IGh0bWwgJV0KIyBoaWRlIHJlbW92ZSBsaW5rLCBmdW5jdGlvbmFsaXR5IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQKIyAgICAgICAgICAgICAgICA8YSB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBTZWFyY2ggVGVybS4iKSB8IGh0bWwgJV0iIGhyZWY9IlslIERhdGEuU2VhcmNoVmFsdWUgJV0iPiZ0aW1lczs8L2E+CiAgICAgICAgICAgIDwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlYXJjaFRlcm1zIikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPHRhYmxlIGNsYXNzPSJPdmVydmlldyI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkZBUU51bWJlciBbJSBEYXRhLkZBUUlEU29ydCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TZWFyY2g7U29ydEJ5PUZBUUlEO09yZGVyPVslIERhdGEuT3JkZXIgfCB1cmkgJV07UHJvZmlsZT1bJSBEYXRhLlByb2ZpbGUgfCB1cmkgJV07VGFrZUxhc3RTZWFyY2g9MTtGaWx0ZXI9WyUgRGF0YS5GaWx0ZXIgfCB1cmkgJV07TGltaXQ9WyUgRGF0YS5MaW1pdCB8IHVyaSAlXTtUeXBlPVslIERhdGEuVHlwZSB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVGl0bGUgWyUgRGF0YS5UaXRsZVNvcnQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2VhcmNoO1NvcnRCeT1UaXRsZTtPcmRlcj1bJSBEYXRhLk9yZGVyIHwgdXJpICVdO1Byb2ZpbGU9WyUgRGF0YS5Qcm9maWxlIHwgdXJpICVdO1Rha2VMYXN0U2VhcmNoPTE7RmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdO0xpbWl0PVslIERhdGEuTGltaXQgfCB1cmkgJV07VHlwZT1bJSBEYXRhLlR5cGUgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNhdGVnb3J5IFslIERhdGEuQ2F0ZWdvcnlTb3J0ICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNlYXJjaDtTb3J0Qnk9Q2F0ZWdvcnk7T3JkZXI9WyUgRGF0YS5PcmRlciB8IHVyaSAlXTtQcm9maWxlPVslIERhdGEuUHJvZmlsZSB8IHVyaSAlXTtUYWtlTGFzdFNlYXJjaD0xO0ZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXTtMaW1pdD1bJSBEYXRhLkxpbWl0IHwgdXJpICVdO1R5cGU9WyUgRGF0YS5UeXBlIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckxhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ikxhbmd1YWdlIFslIERhdGEuTGFuZ3VhZ2VTb3J0ICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNlYXJjaDtTb3J0Qnk9TGFuZ3VhZ2U7T3JkZXI9WyUgRGF0YS5PcmRlciB8IHVyaSAlXTtQcm9maWxlPVslIERhdGEuUHJvZmlsZSB8IHVyaSAlXTtUYWtlTGFzdFNlYXJjaD0xO0ZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXTtMaW1pdD1bJSBEYXRhLkxpbWl0IHwgdXJpICVdO1R5cGU9WyUgRGF0YS5UeXBlIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTGFuZ3VhZ2UiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDaGFuZ2VkIFslIERhdGEuQ2hhbmdlZFNvcnQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2VhcmNoO1NvcnRCeT1DaGFuZ2VkO09yZGVyPVslIERhdGEuT3JkZXIgfCB1cmkgJV07UHJvZmlsZT1bJSBEYXRhLlByb2ZpbGUgfCB1cmkgJV07VGFrZUxhc3RTZWFyY2g9MTtGaWx0ZXI9WyUgRGF0YS5GaWx0ZXIgfCB1cmkgJV07TGltaXQ9WyUgRGF0YS5MaW1pdCB8IHVyaSAlXTtUeXBlPVslIERhdGEuVHlwZSB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJEeW5hbWljRmllbGQgWyUgRGF0YS5DU1MgJV0iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJEeW5hbWljRmllbGRTb3J0YWJsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TZWFyY2g7U29ydEJ5PUR5bmFtaWNGaWVsZF9bJSBEYXRhLkR5bmFtaWNGaWVsZE5hbWUgfCB1cmkgJV07T3JkZXI9WyUgRGF0YS5PcmRlciB8IHVyaSAlXTtGaWx0ZXI9WyUgRGF0YS5GaWx0ZXIgfCB1cmkgJV07TGltaXQ9WyUgRGF0YS5MaW1pdCB8IHVyaSAlXTtTaG93Q2xvc2VkVGlja2V0cz1bJSBEYXRhLlNob3dDbG9zZWQgfCB1cmkgJV07VHlwZT1bJSBEYXRhLlR5cGUgfCB1cmkgJV07UHJvZmlsZT1bJSBEYXRhLlByb2ZpbGUgfCB1cmkgJV07VGFrZUxhc3RTZWFyY2g9MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckR5bmFtaWNGaWVsZFNvcnRhYmxlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyRHluYW1pY0ZpZWxkTm90U29ydGFibGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyRHluYW1pY0ZpZWxkTm90U29ydGFibGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICA8dHIgaWQ9IkVtcHR5TWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIk5vIEZBUSBkYXRhIGZvdW5kLiIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkIikgJV0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iTWFzdGVyQWN0aW9uIiB0aXRsZT0iWyUgRGF0YS5OdW1iZXIgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkZBUU51bWJlciI+PGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUN1c3RvbWVyRkFRWm9vbTtJdGVtSUQ9WyUgRGF0YS5GQVFJRCB8IHVyaSAlXSIgY2xhc3M9Ik1hc3RlckFjdGlvbkxpbmsiPlslIERhdGEuTnVtYmVyIHwgaHRtbCAlXTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGl0bGUiIHRpdGxlPSJbJSBEYXRhLlR0aXRsZSAlXSI+WyUgRGF0YS5DbGVhblRpdGxlfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNhdGVnb3J5Ij5bJSBEYXRhLkNhdGVnb3J5TmFtZSB8IHRydW5jYXRlKDYwKSB8IGh0bWwgJV08L3RkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJMYW5ndWFnZSI+WyUgRGF0YS5MYW5ndWFnZSB8IHRydW5jYXRlKDUpIHwgaHRtbCAlXTwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDaGFuZ2VkIj5bJSBEYXRhLkNoYW5nZWQgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmREeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRHluYW1pY0ZpZWxkIiB0aXRsZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iPlslIERhdGEuVmFsdWUgJV08L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmQiKSAlXQogICAgICAgICAgICA8L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQm90dG9tU3ViTmF2aWdhdGlvbiIpICVdCiAgICA8ZGl2IGlkPSJCb3R0b21BY3Rpb25Sb3ciIGNsYXNzPSJBY3Rpb25Sb3cgQmlnQnV0dG9ucyI+CiAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUxvYWRQcm9maWxlO1slIERhdGEuTGluayB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgJmxhcnI7IFslIFRyYW5zbGF0ZSgiQ2hhbmdlIHNlYXJjaCBvcHRpb25zIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGNsYXNzPSJUYWJzIFBhZ2luYXRpb24iPgogICAgICAgICAgICA8c3Ryb25nPlslIERhdGEuUmVzdWx0IHwgaHRtbCAlXTwvc3Ryb25nPiBbJSBUcmFuc2xhdGUoIm9mIikgfCBodG1sICVdIDxzdHJvbmc+WyUgRGF0YS5Ub3RhbEhpdHMgfCBodG1sICVdPC9zdHJvbmc+IC0gWyUgVHJhbnNsYXRlKCJQYWdlIikgfCBodG1sICVdOiBbJSBEYXRhLlNpdGVOYXZCYXIgJV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkJvdHRvbVN1Yk5hdmlnYXRpb24iKSAlXQo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcuTWFzdGVyQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB2YXIgJE1hc3RlckFjdGlvbkxpbmsgPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJyk7CiAgICAgICAgLy8gb25seSBhY3QgaWYgdGhlIGxpbmsgd2FzIG5vdCBjbGlja2VkIGRpcmVjdGx5CiAgICAgICAgaWYgKEV2ZW50LnRhcmdldCAhPT0gJE1hc3RlckFjdGlvbkxpbmsuZ2V0KDApKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICRNYXN0ZXJBY3Rpb25MaW5rLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJUaWNrZXRab29tIEFSSUFSb2xlTWFpbiI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCYWNrIikgJV0KICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIEVudigiTGFzdFNjcmVlbk92ZXJ2aWV3IikgJV0iPiZsYXJyOyBbJSBUcmFuc2xhdGUoIkJhY2siKSB8IGh0bWwgJV08L2E+PC9saT4KICAgICAgICA8L3VsPgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQmFjayIpICVdCgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iRkFRSGVhZGVyIj4KICAgICAgICAgICAgPGgyIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXQogICAgICAgICAgICA8L2gyPgogICAgICAgICAgICA8dWwgaWQ9IkZBUU9wdGlvbnMiPgogICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1DdXN0b21lckZBUVByaW50O0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IHVyaSAlXSIgY2xhc3M9IlByaW50IEFzUG9wdXAiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlByaW50IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXByaW50Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiUHJpbnQiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dWwgY2xhc3M9IkJyZWFkQ3J1bWIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IikgJV0KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUN1c3RvbWVyRkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUVBhdGhDYXRlZ29yeUVsZW1lbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFQYXRoSXRlbUVsZW1lbnQiKSAlXQogICAgICAgICAgICA8bGk+WyUgRGF0YS5UaXRsZSB8IGh0bWwgJV08L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRUGF0aEl0ZW1FbGVtZW50IikgJV0KICAgICAgICA8L3VsPgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8dWwgaWQ9Ik1lc3NhZ2VzIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQXR0YWNobWVudEhlYWRlciIpICVdCiAgICAgICAgICAgIDxsaSBjbGFzcz0iQ3VzdG9tZXIgVmlzaWJsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJNZXNzYWdlSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDM+WyUgVHJhbnNsYXRlKCJBdHRhY2htZW50cyIpIHwgaHRtbCAlXTo8L2gzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXR0YWNobWVudHMiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxhYmVsIj5bJSBUcmFuc2xhdGUoIkF0dGFjaG1lbnQiKSB8IGh0bWwgJV06PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQXR0YWNobWVudFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1wYXBlcmNsaXAiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkRvd25sb2FkQXR0YWNobWVudCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRG93bmxvYWQgQXR0YWNobWVudCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50O0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IHVyaSAlXTtGaWxlSUQ9WyUgRGF0YS5GaWxlSUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIFslIERhdGEuRmlsZXNpemUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4KWyUgUmVuZGVyQmxvY2tFbmQoIkF0dGFjaG1lbnRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBdHRhY2htZW50SGVhZGVyIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkJyb3dzZXJMaW5rTWVzc2FnZSIpICVdCiMgU2hvdyBpbmZvLCB0aGF0IGxpbmtzIHdpdGhpbiB0aGUgaWZyYW1lIG11c3QgYmUgY2xpY2tlZCB3aXRoIHN0cmcvY21kL3NoaWZ0IChkZXBlbmRpbmcgb24gdGhlIHVzZWQgYnJvd3NlciBhbmQgb3MpCiMgdG8gb3BlbiB0aGUgbGlua3MgaW4gYSBuZXcgd2luZG93IHdpdGhvdXQgdGhlIHNlY3VyaXR5IHBlcm1pc3Npb25zIGdpdmVuIHRvIHRoZSBpZnJhbWUKICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRkFRTWVzc2FnZUJyb3dzZXIiPgogICAgICAgICAgICAgICAgICAgIDxwPgogICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDbG9zZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQ2xvc2UgdGhpcyBtZXNzYWdlIikgfCBodG1sICVdIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkJyb3dzZXJMaW5rTWVzc2FnZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFDb250ZW50IikgJV0KICAgICAgICAgICAgPGxpIGNsYXNzPSJDdXN0b21lciBWaXNpYmxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik1lc3NhZ2VIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMz5bJSBUcmFuc2xhdGUoRGF0YS5DYXB0aW9uKSB8IGh0bWwgJV06PC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSJ0cnVlIiBuYW1lPSJGaWVsZFN0YXRlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRQ29udGVudEhUTUwiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTWVzc2FnZUJvZHkiPgojIFVzZSB0aGUgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgdG8gcHJldmVudCBwbHVnaW5zIGFuZCBzY3JpcHRzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW4gdGhlIGJyb3dzZXIuCiMgVXNlIElFJ3MgKG5vbi1zdGFuZGFyZCkgc2VjdXJpdHkgYXR0cmlidXRlIHRvIGFjaGlldmUgc29tZXRoaW5nIHNpbWlsYXIgaW4gb2xkZXIgSUUgYnJvd3NlcnMuIEFwcGVuZCBzZXNzaW9uIGluZm8gdG8gVVJMIGJlY2F1c2UgSUUgd2lsbCBub3Qgc2VuZCBjb29raWVzLgojIFNldCAnYWxsb3ctcG9wdXBzJyB0byBhbGxvdyBJRTEwKyB0byBvcGVuIGxpbmtzLiByZWY6IGh0dHA6Ly93d3cudzMub3JnL2h0bWwvd2cvd2lraS9DaGFuZ2VQcm9wb3NhbHMvc2FuZGJveF9hbGxvd19wb3B1cHMKICAgICAgICAgICAgICAgICAgICA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXBvcHVwcyIgWyUgRGF0YS5NU1NlY3VyaXR5UmVzdHJpY3RlZCAlXSBjbGFzcz0iRkFRRmllbGQiIGlkPSJJZnJhbWVGQVFbJSBEYXRhLkZpZWxkIHwgaHRtbCAlXSIgb25sb2FkPSJ3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24gKCl7IGlmICh0eXBlb2YgRkFRID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgRkFRLkN1c3RvbWVyID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgRkFRLkN1c3RvbWVyLkZBUVpvb20gPT09ICdvYmplY3QnKSB7IEZBUS5DdXN0b21lci5GQVFab29tLklmcmFtZUF1dG9IZWlnaHQoJCgnI0lmcmFtZUZBUVslIERhdGEuRmllbGQgfCBodG1sICVdJykpOyB9fSwgNTAwKTsiIHNyYz0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUN1c3RvbWVyRkFRWm9vbTtTdWJhY3Rpb249SFRNTFZpZXc7SXRlbUlEPVslIERhdGEuSXRlbUlEIHwgaHRtbCAlXTtGaWVsZD1bJSBEYXRhLkZpZWxkIHwgaHRtbCAlXTtbJSBFbnYoIlNlc3Npb25OYW1lIikgfCBodG1sICVdPVslIEVudigiU2Vzc2lvbklEIikgfCBodG1sICVdIj48L2lmcmFtZT4KICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRQ29udGVudEhUTUwiKSAlXQpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgQ29yZS5Db25maWcuU2V0KCdGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodERlZmF1bHQnLCBwYXJzZUludCgiWyUgQ29uZmlnKCJGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodERlZmF1bHQiKSAlXSIgfHwgMCwgMTApKTsKICAgIENvcmUuQ29uZmlnLlNldCgnRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHRNYXgnLCBwYXJzZUludCgiWyUgQ29uZmlnKCJGQVE6OkZyb250ZW5kOjpDdXN0b21lckhUTUxGaWVsZEhlaWdodE1heCIpICVdIiB8fCAwLCAxMCkpOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRQ29udGVudFBsYWluIikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVGQVFDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Db250ZW50ICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUNvbnRlbnRQbGFpbiIpICVdCiAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFDb250ZW50IikgJV0KCiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGlkPSJab29tU2lkZWJhciI+CiAgICAgICAgICAgIDx1bCBpZD0iTWV0YWRhdGEiPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik1lc3NhZ2VIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+WyUgVHJhbnNsYXRlKCJGQVEgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJLZXkiPlslIFRyYW5zbGF0ZSgiQXJ0aWNsZSBOdW1iZXIiKSB8IGh0bWwgJV06PC9zcGFuPiA8c3Bhbj5bJSBEYXRhLk51bWJlciB8IGh0bWwgJV08L3NwYW4+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iS2V5Ij5bJSBUcmFuc2xhdGUoIkNhdGVnb3J5IikgfCBodG1sICVdOjwvc3Bhbj4gPHNwYW4gdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkNhdGVnb3J5TmFtZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5DYXRlZ29yeU5hbWUpIHwgaHRtbCAlXTwvc3Bhbj48L2xpPgoKICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iS2V5d29yZHNDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJLZXkiPlslIFRyYW5zbGF0ZSgiS2V5d29yZHMiKSB8IGh0bWwgJV06PC9zcGFuPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJLZXl3b3JkcyIpICVdCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IktleXdvcmQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNlYXJjaCBmb3IgYXJ0aWNsZXMgd2l0aCBrZXl3b3JkIikgfCBodG1sICVdOiBbJSBEYXRhLktleXdvcmQgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUN1c3RvbWVyRkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7S2V5d29yZD1bJSBEYXRhLktleXdvcmQgfCB1cmkgJV0iPlslIERhdGEuS2V5d29yZCB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiS2V5d29yZHMiKSAlXQogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iS2V5Ij5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdOjwvc3Bhbj4gPHNwYW4gdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLlN0YXRlKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLlN0YXRlKSB8IGh0bWwgJV08L3NwYW4+PC9saT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTGFuZ3VhZ2UiKSAlXQogICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJLZXkiPlslIFRyYW5zbGF0ZSgiTGFuZ3VhZ2UiKSB8IGh0bWwgJV06PC9zcGFuPiA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTGFuZ3VhZ2UpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFuZ3VhZ2UpIHwgaHRtbCAlXTwvc3Bhbj48L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiTGFuZ3VhZ2UiKSAlXQoKIyBzaG93IGZhcSBkeW5hbWljIGZpZWxkcwpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJLZXkiPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+WyUgRGF0YS5WYWx1ZSAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFEeW5hbWljRmllbGQiKSAlXQojIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBmaXhlZCBkeW5hbWljIGZpZWxkIGJsb2NrcyBmb3IgY3VzdG9taXphdGlvbnMKIyBOb3RlOiBGaWVsZDEgYW5kIEZpZWxkMiBhcmUgdGhlIG5hbWVzIG9mIHRoZSBmaWVsZHMgYW5kIGhhZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwKIyBmaWVsZCBuYW1lcwojWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiMgICAgICAgICAgICAgICAgPGxpPgojICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iS2V5Ij5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvc3Bhbj4KIyAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUxIHwgaHRtbCAlXSI+WyUgRGF0YS5WYWx1ZSAlXTwvc3Bhbj4KIyAgICAgICAgICAgICAgICA8L2xpPgojWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiMgICAgICAgICAgICAgICAgPGxpPgojICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iS2V5Ij5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvc3Bhbj4KIyAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUyIHwgaHRtbCAlXSI+WyUgRGF0YS5WYWx1ZSAlXTwvc3Bhbj4KIyAgICAgICAgICAgICAgICA8L2xpPgojWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUR5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVmlld1JhdGluZyIpICVdCiAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IktleSBSYXRpbmdMYWJlbCI+WyUgVHJhbnNsYXRlKCJSYXRpbmciKSB8IGh0bWwgJV06PC9zcGFuPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSYXRlU3RhcnMiKSAlXQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJSYXRlU3RhciI+PGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJSYXRlU3RhcnMiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSYXRlU3RhcnNDb3VudCIpICVdCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJhdGVTdGFyVGV4dCIgdGl0bGU9IlslIERhdGEuU3RhcnMgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgib3V0IG9mIDUiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlN0YXJzIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm91dCBvZiA1IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmF0ZVN0YXJzQ291bnQiKSAlXQogICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIlZpZXdSYXRpbmciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVmlld1ZvdGVzIikgJV0KICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iS2V5Ij5bJSBUcmFuc2xhdGUoIlZvdGVzIikgfCBodG1sICVdOjwvc3Bhbj4gPHNwYW4gdGl0bGU9IlslIERhdGEuVm90ZXMgfCBodG1sICVdIj5bJSBEYXRhLlZvdGVzIHwgaHRtbCAlXTwvc3Bhbj48L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiVmlld1ZvdGVzIikgJV0KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUVZvdGluZyIpICVdCiAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IkZBUVZvdGUiIGNsYXNzPSJQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iVm90aW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZvdGluZ0JveCBWaXNpYmxlIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJGQVFWb3RpbmciIGNsYXNzPSJGQVFWb3RpbmciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJNZXNzYWdlSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5bJSBUcmFuc2xhdGUoIlJhdGluZyIpIHwgaHRtbCAlXTo8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTWVzc2VuZ2VyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlZvdGluZ1F1ZXN0aW9uIj5bJSBUcmFuc2xhdGUoIkhvdyBoZWxwZnVsIHdhcyB0aGlzIGFydGljbGU/IFBsZWFzZSBnaXZlIHVzIHlvdXIgcmF0aW5nIGFuZCBoZWxwIHRvIGltcHJvdmUgdGhlIEZBUSBEYXRhYmFzZS4gVGhhbmsgWW91ISIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZUxhYmVsQmVmb3JlIj5bJSBUcmFuc2xhdGUoIm5vdCBoZWxwZnVsIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFWb3RpbmdSYXRlUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJhdGVCdXR0b25bJSBEYXRhLlZhbHVlICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZUJ1dHRvbiBSYXRlVW5DaGVja2VkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXItbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRVm90aW5nUmF0ZVJvdyIpICVdCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZUxhYmVsQWZ0ZXIiPlslIFRyYW5zbGF0ZSgidmVyeSBoZWxwZnVsIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJDdXN0b21lckZBUVpvb20iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlZvdGUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNhdGVnb3J5SUQiIHZhbHVlPSJbJSBEYXRhLkNhdGVnb3J5SUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJdGVtSUQiIHZhbHVlPSJbJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyBWb3RpbmdBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiAgaWQ9IlJhdGVTdWJtaXRCdXR0b24iIGNsYXNzPSJIaWRkZW4iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSYXRlIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZFJhdGUgfCBodG1sICVdImlkPSJSYXRlVmFsdWUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Zvcm0+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFWb3RpbmciKSAlXQoKICAgIDwvZGl2Pgo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovKmdsb2JhbCBGQVE6IHRydWUgKi8KRkFRLkN1c3RvbWVyLkZBUVpvb20uSW5pdCgpOwoKJCgnYS5Bc1BvcHVwJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwKCQodGhpcykuYXR0cignaHJlZicpLCAnVGlja2V0QWN0aW9uJyk7CiAgICByZXR1cm4gZmFsc2U7Cn0pOwoKJCgnLlJhdGVCdXR0b24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgdmFyIFJhdGVOdW1iZXIgPSBwYXJzZUludCgkKHRoaXMpLmNsb3Nlc3QoJ2RpdicpLmF0dHIoJ2lkJykucmVwbGFjZSgvUmF0ZUJ1dHRvbi8sICcnKSwgMTApOwogICAgJCgnI1JhdGVWYWx1ZScpLnZhbChSYXRlTnVtYmVyKTsKICAgICQoJyNSYXRlU3VibWl0QnV0dG9uJykuZmFkZUluKDI1MCk7CiAgICAkKCcjRkFRVm90aW5nJykuZmluZCgnLlJhdGVCdXR0b24nKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBJdGVtUmF0ZU51bWJlciA9IHBhcnNlSW50KCQodGhpcykuY2xvc2VzdCgnZGl2JykuYXR0cignaWQnKS5yZXBsYWNlKC9SYXRlQnV0dG9uLywgJycpLCAxMCk7CiAgICAgICAgaWYgKCBJdGVtUmF0ZU51bWJlciA8PSBSYXRlTnVtYmVyICkgewogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdSYXRlQ2hlY2tlZCcpOwogICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdSYXRlVW5DaGVja2VkJyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdSYXRlVW5DaGVja2VkJyk7CiAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ1JhdGVDaGVja2VkJyk7CiAgICAgICAgfQogICAgfSk7Cn0pOwo8L3NjcmlwdD4KWyUgRU5EICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJBUklBUm9sZU1haW4iPgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9IkZBUUhlYWRlciI+CiAgICAgICAgICAgIDxoMT5bJSBUcmFuc2xhdGUoIkZBUSBFeHBsb3JlciIpIHwgaHRtbCAlXTwvaDE+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDx1bCBjbGFzcz0iQnJlYWRDcnVtYiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUVBhdGhDYXRlZ29yeUVsZW1lbnQiKSAlXQogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249UHVibGljRkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUVBhdGhDYXRlZ29yeUVsZW1lbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50Tm9MaW5rIikgJV0KICAgICAgICAgICAgPGxpPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRUGF0aENhdGVnb3J5RWxlbWVudE5vTGluayIpICVdCiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4gTGFyZ2UiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUXVpY2tTZWFyY2giKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+WyUgVHJhbnNsYXRlKCJTZWFyY2giKSB8IGh0bWwgJV08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9IlNlYXJjaEJveCIgYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBEYXRhLkFjdGlvbiB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VhcmNoIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik5hdiIgdmFsdWU9IlslIERhdGEuTmF2IHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZWFyY2hCYWNrTGluayIgdmFsdWU9IlslIERhdGEuU2VhcmNoQmFja0xpbmsgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJGdWxsdGV4dCIgdmFsdWU9IlslIERhdGEuU2VhcmNoIHwgaHRtbCAlXSIgaWQ9IlNlYXJjaCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2VhcmNoIikgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTZWFyY2giKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+PHNwYW4+WyUgVHJhbnNsYXRlKCJRdWljayBTZWFyY2giKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIldpbGRjYXJkcyBhcmUgYWxsb3dlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZBUVNlYXJjaEJ1dHRvbiBTcGFjaW5nVG9wIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRGF0YS5BY3Rpb24gfCB1cmkgJV07Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXNlYXJjaCI+PC9pPiBbJSBUcmFuc2xhdGUoIkFkdmFuY2VkIFNlYXJjaCIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJRdWlja1NlYXJjaCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbmZvQm94RkFRTWluaUxpc3QiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPlslIFRyYW5zbGF0ZShEYXRhLkhlYWRlcikgfCBodG1sICVdPC9oMz4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5mb0JveEZBUU1pbmlMaXN0TmV3c1JTUyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249UHVibGljRkFRUlNTO1R5cGU9WyUgRGF0YS5UeXBlIHwgdXJpICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuVGl0bGUpIHwgaHRtbCAlXSIgY2xhc3M9IlJTU0ljb24gQXNCbG9jayI+PGkgY2xhc3M9ImZhIGZhLXJzcyI+PC9pPjwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIkluZm9Cb3hGQVFNaW5pTGlzdE5ld3NSU1MiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IlRhYmxlbGlrZSBGQVFNaW5pTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbmZvQm94RkFRTWluaUxpc3RJdGVtUm93UG9zaXRpb25OdW1iZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTnVtYmVyIHwgaHRtbCAlXS4KWyUgUmVuZGVyQmxvY2tFbmQoIkluZm9Cb3hGQVFNaW5pTGlzdEl0ZW1Sb3dQb3NpdGlvbk51bWJlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVB1YmxpY0ZBUVpvb207SXRlbUlEPVslIERhdGEuSXRlbUlEIHwgdXJpICVdIiB0aXRsZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0gKFslIERhdGEuQ2F0ZWdvcnlOYW1lIHwgaHRtbCAlXSkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYXRlZ29yeVNob3J0TmFtZSB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV0gLSBbJSBEYXRhLkxhbmd1YWdlIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZShEYXRhLlN0YXRlKSB8IGh0bWwgJV0gLSBbJSBEYXRhLkNyZWF0ZWQgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5mb0JveEZBUU1pbmlMaXN0SXRlbVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbmZvQm94RkFRTWluaUxpc3QiKSAlXQoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU3ViY2F0ZWdvcmllcyIpICVdCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1Jlc3VsdCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPlslIFRyYW5zbGF0ZSgiU3ViY2F0ZWdvcmllcyIpIHwgaHRtbCAlXTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9Ik92ZXJ2aWV3IiBzdW1tYXJ5PSJGQVEgY2F0ZWdvcmllcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdPC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiU3ViY2F0ZWdvcmllcyIpIHwgaHRtbCAlXTwvYT48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJGQVEgQXJ0aWNsZXMiKSB8IGh0bWwgJV08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9DYXRlZ29yeURhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIk5vIHN1YmNhdGVnb3JpZXMgZm91bmQuIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0NhdGVnb3J5RGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtDYXRlZ29yeUlEPVslIERhdGEuQ2F0ZWdvcnlJRCB8IHVyaSAlXSI+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLlN1YkNhdGVnb3J5Q291bnQgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQXJ0aWNsZUNvdW50IHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdCIpICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlN1YmNhdGVnb3JpZXMiKSAlXQoKClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUUl0ZW1MaXN0IikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5bJSBUcmFuc2xhdGUoIkZBUSBBcnRpY2xlcyIpIHwgaHRtbCAlXTwvaDM+ClslIFJlbmRlckJsb2NrU3RhcnQoIlBhZ2luYXRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJQYWdpbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WyUgRGF0YS5SZXN1bHQgfCBodG1sICVdPC9zdHJvbmc+IFslIFRyYW5zbGF0ZSgib2YiKSB8IGh0bWwgJV0gPHN0cm9uZz5bJSBEYXRhLlRvdGFsSGl0cyB8IGh0bWwgJV08L3N0cm9uZz4gLSBbJSBUcmFuc2xhdGUoIlBhZ2UiKSB8IGh0bWwgJV06IFslIERhdGEuU2l0ZU5hdkJhciAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlBhZ2luYXRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9Ik92ZXJ2aWV3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRkFRTnVtYmVyIFslIERhdGEuRkFRSURTb3J0ICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO0NhdGVnb3J5SUQ9WyUgRGF0YS5DYXRlZ29yeUlEIHwgdXJpICVdO1NvcnRCeT1GQVFJRDtPcmRlcj1bJSBEYXRhLk9yZGVyIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVGl0bGUgWyUgRGF0YS5UaXRsZVNvcnQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV07U29ydEJ5PVRpdGxlO09yZGVyPVslIERhdGEuT3JkZXIgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGl0bGUiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDYXRlZ29yeSBbJSBEYXRhLkNhdGVnb3J5U29ydCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtDYXRlZ29yeUlEPVslIERhdGEuQ2F0ZWdvcnlJRCB8IHVyaSAlXTtTb3J0Qnk9Q2F0ZWdvcnk7T3JkZXI9WyUgRGF0YS5PcmRlciB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJDYXRlZ29yeSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iTGFuZ3VhZ2UgWyUgRGF0YS5MYW5ndWFnZVNvcnQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07Q2F0ZWdvcnlJRD1bJSBEYXRhLkNhdGVnb3J5SUQgfCB1cmkgJV07U29ydEJ5PUxhbmd1YWdlO09yZGVyPVslIERhdGEuT3JkZXIgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTGFuZ3VhZ2UiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckxhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9GQVFEYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJObyBGQVEgYXJ0aWNsZXMgZm91bmQuIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0ZBUURhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkZBUU51bWJlciIgdGl0bGU9IlslIERhdGEuTnVtYmVyIHwgaHRtbCAlXSI+PGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVB1YmxpY0ZBUVpvb207SXRlbUlEPVslIERhdGEuRkFRSUQgfCB1cmkgJV07Wm9vbUJhY2tMaW5rPVslIERhdGEuWm9vbUJhY2tMaW5rIHwgdXJpICVdOyI+WyUgRGF0YS5OdW1iZXIgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGl0bGUiIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+WyUgRGF0YS5DbGVhblRpdGxlIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2F0ZWdvcnkiIHRpdGxlPSJbJSBEYXRhLkNhdGVnb3J5TmFtZSB8IGh0bWwgJV0iPlslIERhdGEuQ2F0ZWdvcnlOYW1lIHwgdHJ1bmNhdGUoNDUpIHwgaHRtbCAlXTwvdGQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZExhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJMYW5ndWFnZSIgdGl0bGU9IlslIERhdGEuTGFuZ3VhZ2UgfCBodG1sICVdIj5bJSBEYXRhLkxhbmd1YWdlIHwgdHJ1bmNhdGUoNSkgfCBodG1sICVdPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZExhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+ClslIFJlbmRlckJsb2NrU3RhcnQoIkJvdHRvbVN1Yk5hdmlnYXRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJQYWdpbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WyUgRGF0YS5SZXN1bHQgfCBodG1sICVdPC9zdHJvbmc+IFslIFRyYW5zbGF0ZSgib2YiKSB8IGh0bWwgJV0gPHN0cm9uZz5bJSBEYXRhLlRvdGFsSGl0cyB8IGh0bWwgJV08L3N0cm9uZz4gLSBbJSBUcmFuc2xhdGUoIlBhZ2UiKSB8IGh0bWwgJV06IFslIERhdGEuU2l0ZU5hdkJhciAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQm90dG9tU3ViTmF2aWdhdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUl0ZW1MaXN0IikgJV0KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vIG1ha2Ugd2hvbGUgRkFRIEl0ZW0gcm93IGNsaWNrYWJsZSwgYnV0IG5vdCB0aGUgaGVhZGVycywgY2FuJ3QgdXNlIENvcmUuQ3VzdG9tZXIuQ2xpY2thYmxlUm93KCkKLy8gc2luY2UgaXQgdXNlcyAidGFibGUgdHIiIGFzIHNlbGVjdG9yLCBzZWUgYnVnIzkzMjkKJCgidGJvZHkgdHIiKS5jbGljayhmdW5jdGlvbigpewogICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAkKCJhIiwgdGhpcykuYXR0cigiaHJlZiIpOwogICAgcmV0dXJuIGZhbHNlOwp9KTsKPC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlYXJjaCIpICVdCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJTZWFyY2ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgbmFtZT0iY29tcG9zZSI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VhcmNoIi8+CiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgIDxoMj5bJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdPC9oMj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTnVtYmVyIj5bJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIENvbmZpZygiRkFROjpGQVFIb29rIikgJV0iIHR5cGU9InRleHQiIG5hbWU9Ik51bWJlciIgaWQ9Ik51bWJlciIgc2l6ZT0iMzAiIHZhbHVlPSJbJSBEYXRhLk51bWJlciB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoImUuIGcuIDEwKjUxNTUgb3IgMTA1NjU4KiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJGdWxsdGV4dCBzZWFyY2ggaW4gRkFRIGFydGljbGVzIChlLiBnLiBcIkpvaG4qblwiIG9yIFwiV2lsbCpcIikiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJGdWxsVGV4dCI+WyUgVHJhbnNsYXRlKCJGdWxsdGV4dCIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSJbJSBUcmFuc2xhdGUoIkZ1bGx0ZXh0IikgfCBodG1sICVdIiB0eXBlPSJ0ZXh0IiBpZD0iRnVsbFRleHQiIG5hbWU9IkZ1bGx0ZXh0IiB2YWx1ZT0iWyUgRGF0YS5GdWxsdGV4dCB8IGh0bWwgJV0iIHNpemU9IjIwIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRpdGxlIj5bJSBUcmFuc2xhdGUoIlRpdGxlIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVGl0bGUiKSB8IGh0bWwgJV0iIHR5cGU9InRleHQiIGlkPSJUaXRsZSIgbmFtZT0iVGl0bGUiIHZhbHVlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSIgc2l6ZT0iMjAiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iS2V5d29yZCI+WyUgVHJhbnNsYXRlKCJLZXl3b3JkIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiS2V5d29yZCIpIHwgaHRtbCAlXSIgdHlwZT0idGV4dCIgaWQ9IktleXdvcmQiIG5hbWU9IktleXdvcmQiIHZhbHVlPSJbJSBEYXRhLktleXdvcmQgfCBodG1sICVdIiBzaXplPSIyMCIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICA8L2ZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMYW5ndWFnZSIpICVdCiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxhbmd1YWdlIikgfCBodG1sICVdOjwvaDI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFuZ3VhZ2VzU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+ClslIFJlbmRlckJsb2NrRW5kKCJMYW5ndWFnZSIpICVdCiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkNhdGVnb3J5IikgfCBodG1sICVdOjwvaDI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2F0ZWdvcmllc1N0cmcgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRpbWVTZWFyY2hUeXBlIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlZvdGUgcmVzdHJpY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSJbJSBUcmFuc2xhdGUoIk5vIHZvdGUgc2V0dGluZ3MiKSB8IGh0bWwgJV0iIHR5cGU9InJhZGlvIiAgaWQ9Ik5vVm90ZVNldCIgbmFtZT0iVm90ZVNlYXJjaE9wdGlvbiIgdmFsdWU9IiIgWyUgRGF0YS5pdGVtKCJWb3RlU2VhcmNoT3B0aW9uOjpOb25lIikgJV0gLz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOb1RWb3RlU2V0Ij5bJSBUcmFuc2xhdGUoIkFsbCIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPVslIFRyYW5zbGF0ZSgiU3BlY2lmaWMgdm90ZXMiKSB8IGh0bWwgJV0gdHlwZT0icmFkaW8iIGlkPSJWb3RlUG9pbnQiIG5hbWU9IlZvdGVTZWFyY2hPcHRpb24iICB2YWx1ZT0iVm90ZVBvaW50IiBbJSBEYXRhLml0ZW0oIlZvdGVTZWFyY2hPcHRpb246OlZvdGVQb2ludCIpICVdIC8+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVm90ZVBvaW50Ij5bJSBUcmFuc2xhdGUoIk9ubHkgRkFRIGFydGljbGVzIHdpdGggdm90ZXMuLi4iKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuVm90ZVNlYXJjaFR5cGVTZWxlY3Rpb25TdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVm90ZVNlYXJjaCIgdmFsdWU9IlslIERhdGEuVm90ZVNlYXJjaCB8IGh0bWwgJV0iIGNsYXNzPSJXMjVwYyIvPgogICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiZS4gZy4gRXF1YWxzIDEwIG9yIEdyZWF0ZXJUaGFuIDYwIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRpbWVTZWFyY2hUeXBlIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlJhdGUgcmVzdHJpY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSJbJSBUcmFuc2xhdGUoIk5vIHJhdGUgc2V0dGluZ3MiKSB8IGh0bWwgJV0iIHR5cGU9InJhZGlvIiAgaWQ9Ik5vUmF0ZVNldCIgbmFtZT0iUmF0ZVNlYXJjaE9wdGlvbiIgdmFsdWU9IiIgWyUgRGF0YS5pdGVtKCJSYXRlU2VhcmNoT3B0aW9uOjpOb25lIikgJV0gLz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOb1JhdGVTZXQiPlslIFRyYW5zbGF0ZSgiQWxsIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9WyUgVHJhbnNsYXRlKCJTcGVjaWZpYyByYXRlIikgfCBodG1sICVdIHR5cGU9InJhZGlvIiBpZD0iUmF0ZVBvaW50IiBuYW1lPSJSYXRlU2VhcmNoT3B0aW9uIiB2YWx1ZT0iUmF0ZVBvaW50IiBbJSBEYXRhLml0ZW0oIlJhdGVTZWFyY2hPcHRpb246OlJhdGVQb2ludCIpICVdIC8+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUmF0ZVBvaW50Ij5bJSBUcmFuc2xhdGUoIk9ubHkgRkFRIGFydGljbGVzIHdpdGggcmF0ZS4uLiIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5SYXRlU2VhcmNoVHlwZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgIFslIERhdGEuUmF0ZVNlYXJjaFNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiZS4gZy4gRXF1YWxzIDI1JSBvciBHcmVhdGVyVGhhbiA3NSUiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGltZVNlYXJjaFR5cGUiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiVGltZSByZXN0cmljdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTm8gdGltZSBzZXR0aW5ncyIpIHwgaHRtbCAlXSIgdHlwZT0icmFkaW8iICBpZD0iTm9UaW1lU2V0IiBuYW1lPSJUaW1lU2VhcmNoVHlwZSIgdmFsdWU9IiIgWyUgRGF0YS5pdGVtKCJUaW1lU2VhcmNoVHlwZTo6Tm9uZSIpICVdIC8+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTm9UaW1lU2V0Ij5bJSBUcmFuc2xhdGUoIkFsbCIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNwZWNpZmljIGRhdGUiKSB8IGh0bWwgJV0iIHR5cGU9InJhZGlvIiBpZD0iRGF0ZSIgbmFtZT0iVGltZVNlYXJjaFR5cGUiICB2YWx1ZT0iVGltZVBvaW50IiBbJSBEYXRhLml0ZW0oIlRpbWVTZWFyY2hUeXBlOjpUaW1lUG9pbnQiKSAlXSAvPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRhdGUiPlslIFRyYW5zbGF0ZSgiT25seSBGQVEgYXJ0aWNsZXMgY3JlYXRlZCIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5JdGVtQ3JlYXRlVGltZVBvaW50U3RhcnQgJV0gWyUgRGF0YS5JdGVtQ3JlYXRlVGltZVBvaW50ICVdIFslIERhdGEuSXRlbUNyZWF0ZVRpbWVQb2ludEZvcm1hdCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJEYXRlIHJhbmdlIikgfCBodG1sICVdIiB0eXBlPSJyYWRpbyIgaWQ9IkRhdGVSYW5nZSIgbmFtZT0iVGltZVNlYXJjaFR5cGUiIHZhbHVlPSJUaW1lU2xvdCIgWyUgRGF0YS5pdGVtKCJUaW1lU2VhcmNoVHlwZTo6VGltZVNsb3QiKSAlXSAvPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRhdGVSYW5nZSI+WyUgVHJhbnNsYXRlKCJPbmx5IEZBUSBhcnRpY2xlcyBjcmVhdGVkIGJldHdlZW4iKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuSXRlbUNyZWF0ZVRpbWVTdGFydCAlXSBbJSBUcmFuc2xhdGUoImFuZCIpIHwgaHRtbCAlXSBbJSBEYXRhLkl0ZW1DcmVhdGVUaW1lU3RvcCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICA8ZGl2IGlkPSJCb3R0b21BY3Rpb25Sb3ciIGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNlYXJjaCIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJTZWFyY2giKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiT3V0cHV0IHRvIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgWyUgRGF0YS5SZXN1bHRGb3JtU3RyZyAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZWFyY2giKSAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT5bJSBDb25maWcoIlByb2R1Y3ROYW1lIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJQdWJsaWMiKSB8IGh0bWwgJV0gKFslIENvbmZpZygiRkFROjpGQVFIb29rIikgfCBodG1sICVdKTwvU2hvcnROYW1lPgo8RGVzY3JpcHRpb24+WyUgQ29uZmlnKCJQcm9kdWN0TmFtZSIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZSgiUHVibGljIikgfCBodG1sICVdIChbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpIHwgaHRtbCAlXSk8L0Rlc2NyaXB0aW9uPgo8SW5wdXRFbmNvZGluZz5bJSBFbnYoIlVzZXJDaGFyc2V0IikgJV08L0lucHV0RW5jb2Rpbmc+CjxVcmwgdHlwZT0idGV4dC9odG1sIiB0ZW1wbGF0ZT0iWyUgQ29uZmlnKCJIdHRwVHlwZSIpICVdOi8vWyUgQ29uZmlnKCJGUUROIikgJV1bJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249UHVibGljRkFRU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7RnVsbHRleHQ9e3NlYXJjaFRlcm1zfSIgLz4KPEltYWdlIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgdHlwZT0iaW1hZ2UveC1pY29uIj5bJSBDb25maWcoIkh0dHBUeXBlIikgJV06Ly9bJSBDb25maWcoIkZRRE4iKSAlXVslIENvbmZpZygiRnJvbnRlbmQ6OkltYWdlUGF0aCIpICVdaWNvbnMvcHJvZHVjdC5pY288L0ltYWdlPgo8L09wZW5TZWFyY2hEZXNjcmlwdGlvbj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxPcGVuU2VhcmNoRGVzY3JpcHRpb24geG1sbnM9Imh0dHA6Ly9hOS5jb20vLS9zcGVjL29wZW5zZWFyY2gvMS4xLyIgeG1sbnM6aWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU2VhcmNoLzIwMDgvIj4KPFNob3J0TmFtZT5bJSBDb25maWcoIlByb2R1Y3ROYW1lIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJQdWJsaWMiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiRkFRRnVsbHRleHQiKSB8IGh0bWwgJV0pPC9TaG9ydE5hbWU+CjxEZXNjcmlwdGlvbj5bJSBDb25maWcoIlByb2R1Y3ROYW1lIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJQdWJsaWMiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiRkFRRnVsbHRleHQiKSB8IGh0bWwgJV0pPC9EZXNjcmlwdGlvbj4KPElucHV0RW5jb2Rpbmc+WyUgRW52KCJVc2VyQ2hhcnNldCIpICVdPC9JbnB1dEVuY29kaW5nPgo8VXJsIHR5cGU9InRleHQvaHRtbCIgdGVtcGxhdGU9IlslIENvbmZpZygiSHR0cFR5cGUiKSAlXTovL1slIENvbmZpZygiRlFETiIpICVdWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVB1YmxpY0ZBUVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO0Z1bGx0ZXh0PXtzZWFyY2hUZXJtc30iIC8+CjxJbWFnZSBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIHR5cGU9ImltYWdlL3gtaWNvbiI+WyUgQ29uZmlnKCJIdHRwVHlwZSIpICVdOi8vWyUgQ29uZmlnKCJGUUROIikgJV1bJSBDb25maWcoIkZyb250ZW5kOjpJbWFnZVBhdGgiKSAlXWljb25zL3Byb2R1Y3QuaWNvPC9JbWFnZT4KPC9PcGVuU2VhcmNoRGVzY3JpcHRpb24+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJUaWNrZXRWaWV3IEFSSUFSb2xlTWFpbiBTZWFyY2hSZXN1bHRzIFslIENvbmZpZygiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRPdmVydmlld1NvcnRhYmxlIikgJV0gU29ydGFibGUiPgogICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQmFjayIpICVdCiAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuU2VhcmNoQmFja0xpbmsgfCBodG1sICVdIiBjbGFzcz0iSGlzdG9yeUJhY2siPiZsYXJyOyBbJSBUcmFuc2xhdGUoIkJhY2sgdG8gRkFRIEV4cGxvcmVyIikgfCBodG1sICVdPC9hPjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJCYWNrIikgJV0KICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmsgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAmbGFycjsgWyUgVHJhbnNsYXRlKCJDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQYWdpbmF0aW9uIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJUYWJzIFBhZ2luYXRpb24iPgogICAgICAgICAgICA8c3Ryb25nPlslIERhdGEuUmVzdWx0IHwgaHRtbCAlXTwvc3Ryb25nPiBbJSBUcmFuc2xhdGUoIm9mIikgfCBodG1sICVdIDxzdHJvbmc+WyUgRGF0YS5Ub3RhbEhpdHMgfCBodG1sICVdPC9zdHJvbmc+IC0gWyUgVHJhbnNsYXRlKCJQYWdlIikgfCBodG1sICVdOiBbJSBEYXRhLlNpdGVOYXZCYXIgJV0KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlBhZ2luYXRpb24iKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJTZWFyY2hUZXJtcyI+CiAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNlYXJjaCBSZXN1bHRzIGZvciIpIHwgaHRtbCAlXTo8L2gyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZWFyY2hUZXJtcyIpICVdCiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgICAgWyUgRGF0YS5BdHRyaWJ1dGUgfCBodG1sICVdOiBbJSBEYXRhLlZhbHVlIHwgaHRtbCAlXQojIGhpZGUgcmVtb3ZlIGxpbmssIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHlldCBpbXBsZW1lbnRlZAojICAgICAgICAgICAgICAgIDxhIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIFNlYXJjaCBUZXJtLiIpIHwgaHRtbCAlXSIgaHJlZj0iWyUgRGF0YS5TZWFyY2hWYWx1ZSAlXSI+JnRpbWVzOzwvYT4KICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VhcmNoVGVybXMiKSAlXQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICA8dGFibGUgY2xhc3M9Ik92ZXJ2aWV3Ij4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRkFRTnVtYmVyIFslIERhdGEuRkFRSURTb3J0ICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNlYXJjaDtbJSBEYXRhLlByb2ZpbGUgfCBodG1sICVdU29ydEJ5PUZBUUlEO09yZGVyPVslIERhdGEuT3JkZXIgfCB1cmkgJV07VGFrZUxhc3RTZWFyY2g9MTtGaWx0ZXI9WyUgRGF0YS5GaWx0ZXIgfCB1cmkgJV07TGltaXQ9WyUgRGF0YS5MaW1pdCB8IHVyaSAlXTtUeXBlPVslIERhdGEuVHlwZSB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBDb25maWcoIkZBUTo6RkFRSG9vayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVGl0bGUgWyUgRGF0YS5UaXRsZVNvcnQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2VhcmNoO1slIERhdGEuUHJvZmlsZSB8IGh0bWwgJV1Tb3J0Qnk9VGl0bGU7T3JkZXI9WyUgRGF0YS5PcmRlciB8IHVyaSAlXTtUYWtlTGFzdFNlYXJjaD0xO0ZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXTtMaW1pdD1bJSBEYXRhLkxpbWl0IHwgdXJpICVdO1R5cGU9WyUgRGF0YS5UeXBlIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGl0bGUiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDYXRlZ29yeSBbJSBEYXRhLkNhdGVnb3J5U29ydCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TZWFyY2g7WyUgRGF0YS5Qcm9maWxlIHwgaHRtbCAlXVNvcnRCeT1DYXRlZ29yeTtPcmRlcj1bJSBEYXRhLk9yZGVyIHwgdXJpICVdO1Rha2VMYXN0U2VhcmNoPTE7RmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdO0xpbWl0PVslIERhdGEuTGltaXQgfCB1cmkgJV07VHlwZT1bJSBEYXRhLlR5cGUgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJDYXRlZ29yeSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyTGFuZ3VhZ2UiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iTGFuZ3VhZ2UgWyUgRGF0YS5MYW5ndWFnZVNvcnQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2VhcmNoO1slIERhdGEuUHJvZmlsZSB8IGh0bWwgJV1Tb3J0Qnk9TGFuZ3VhZ2U7T3JkZXI9WyUgRGF0YS5PcmRlciB8IHVyaSAlXTtUYWtlTGFzdFNlYXJjaD0xO0ZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXTtMaW1pdD1bJSBEYXRhLkxpbWl0IHwgdXJpICVdO1R5cGU9WyUgRGF0YS5UeXBlIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTGFuZ3VhZ2UiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDaGFuZ2VkIFslIERhdGEuQ2hhbmdlZFNvcnQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2VhcmNoO1slIERhdGEuUHJvZmlsZSB8IGh0bWwgJV1Tb3J0Qnk9Q2hhbmdlZDtPcmRlcj1bJSBEYXRhLk9yZGVyIHwgdXJpICVdO1Rha2VMYXN0U2VhcmNoPTE7RmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdO0xpbWl0PVslIERhdGEuTGltaXQgfCB1cmkgJV07VHlwZT1bJSBEYXRhLlR5cGUgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRHluYW1pY0ZpZWxkIFslIERhdGEuQ1NTICVdIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyRHluYW1pY0ZpZWxkU29ydGFibGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2VhcmNoO1NvcnRCeT1EeW5hbWljRmllbGRfWyUgRGF0YS5EeW5hbWljRmllbGROYW1lIHwgdXJpICVdO09yZGVyPVslIERhdGEuT3JkZXIgfCB1cmkgJV07RmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdO0xpbWl0PVslIERhdGEuTGltaXQgfCB1cmkgJV07U2hvd0Nsb3NlZFRpY2tldHM9WyUgRGF0YS5TaG93Q2xvc2VkIHwgdXJpICVdO1R5cGU9WyUgRGF0YS5UeXBlIHwgdXJpICVdO1Byb2ZpbGU9WyUgRGF0YS5Qcm9maWxlIHwgdXJpICVdO1Rha2VMYXN0U2VhcmNoPTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJEeW5hbWljRmllbGRTb3J0YWJsZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckR5bmFtaWNGaWVsZE5vdFNvcnRhYmxlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckR5bmFtaWNGaWVsZE5vdFNvcnRhYmxlIikgJV0KICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgPHRyIGlkPSJFbXB0eU1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJObyBGQVEgZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZCIpICVdCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiIgdGl0bGU9IlslIERhdGEuTnVtYmVyIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJGQVFOdW1iZXIiPjxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1QdWJsaWNGQVFab29tO0l0ZW1JRD1bJSBEYXRhLkZBUUlEIHwgdXJpICVdO1pvb21CYWNrTGluaz1bJSBEYXRhLlpvb21CYWNrTGluayB8IHVyaSAlXTsiIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj5bJSBEYXRhLk51bWJlciB8IGh0bWwgJV08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlRpdGxlIiB0aXRsZT0iWyUgRGF0YS5UaXRsZSAlXSI+WyUgRGF0YS5DbGVhblRpdGxlIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDYXRlZ29yeSI+WyUgRGF0YS5DYXRlZ29yeU5hbWUgfCB0cnVuY2F0ZSg2MCkgfCBodG1sICVdPC90ZD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkTGFuZ3VhZ2UiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iTGFuZ3VhZ2UiPlslIERhdGEuTGFuZ3VhZ2UgfCB0cnVuY2F0ZSg1KSB8IGh0bWwgJV08L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTGFuZ3VhZ2UiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2hhbmdlZCIgdGl0bGU9IlslIERhdGEuQ2hhbmdlZCB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXSI+WyUgRGF0YS5DaGFuZ2VkIHwgdHJ1bmNhdGUoMjApIHwgaHRtbCAlXTwvdGQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJEeW5hbWljRmllbGQiIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+WyUgRGF0YS5WYWx1ZSAlXTwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmREeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZCIpICVdCiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCb3R0b21TdWJOYXZpZ2F0aW9uIikgJV0KICAgIDxkaXYgaWQ9IkJvdHRvbUFjdGlvblJvdyIgY2xhc3M9IkFjdGlvblJvdyBCaWdCdXR0b25zIj4KICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249TG9hZFByb2ZpbGU7WyUgRGF0YS5MaW5rIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAmbGFycjsgWyUgVHJhbnNsYXRlKCJDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgICAgIDxkaXYgY2xhc3M9IlRhYnMgUGFnaW5hdGlvbiI+CiAgICAgICAgICAgIDxzdHJvbmc+WyUgRGF0YS5SZXN1bHQgfCBodG1sICVdPC9zdHJvbmc+IFslIFRyYW5zbGF0ZSgib2YiKSB8IGh0bWwgJV0gPHN0cm9uZz5bJSBEYXRhLlRvdGFsSGl0cyB8IGh0bWwgJV08L3N0cm9uZz4gLSBbJSBUcmFuc2xhdGUoIlBhZ2UiKSB8IGh0bWwgJV06IFslIERhdGEuU2l0ZU5hdkJhciAlXQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQm90dG9tU3ViTmF2aWdhdGlvbiIpICVdCjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJUaWNrZXRab29tIEFSSUFSb2xlTWFpbiI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCYWNrIikgJV0KICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXTtbJSBEYXRhLlpvb21CYWNrTGluayB8IGh0bWwgJV0iIGNsYXNzPSJIaXN0b3J5QmFjayI+JmxhcnI7IFslIFRyYW5zbGF0ZSgiQmFjayIpIHwgaHRtbCAlXTwvYT48L2xpPgogICAgICAgIDwvdWw+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJCYWNrIikgJV0KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJGQVFIZWFkZXIiPgogICAgICAgICAgICA8aDIgdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgIFslIERhdGEuVGl0bGUgfCBodG1sICVdCiAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDx1bCBpZD0iRkFRT3B0aW9ucyI+CiAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVB1YmxpY0ZBUVByaW50O0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IHVyaSAlXSIgY2xhc3M9IlByaW50IEFzUG9wdXAiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlByaW50IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXByaW50Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiUHJpbnQiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dWwgY2xhc3M9IkJyZWFkQ3J1bWIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IikgJV0KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVB1YmxpY0ZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9WyUgRGF0YS5DYXRlZ29yeUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFQYXRoQ2F0ZWdvcnlFbGVtZW50IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRUGF0aEl0ZW1FbGVtZW50IikgJV0KICAgICAgICAgICAgPGxpPlslIERhdGEuVGl0bGUgfCBodG1sICVdPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUVBhdGhJdGVtRWxlbWVudCIpICVdCiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPHVsIGlkPSJNZXNzYWdlcyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dGFjaG1lbnRIZWFkZXIiKSAlXQogICAgICAgICAgICA8bGkgY2xhc3M9IkN1c3RvbWVyIFZpc2libGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTWVzc2FnZUhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgzPlslIFRyYW5zbGF0ZSgiQXR0YWNobWVudHMiKSB8IGh0bWwgJV06PC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkF0dGFjaG1lbnRzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJMYWJlbCI+WyUgVHJhbnNsYXRlKCJBdHRhY2htZW50IikgfCBodG1sICVdOjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dGFjaG1lbnRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtcGFwZXJjbGlwIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEb3dubG9hZEF0dGFjaG1lbnQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRvd25sb2FkIEF0dGFjaG1lbnQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtJdGVtSUQ9WyUgRGF0YS5JdGVtSUQgfCB1cmkgJV07RmlsZUlEPVslIERhdGEuRmlsZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpbGVuYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBbJSBEYXRhLkZpbGVzaXplIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxici8+ClslIFJlbmRlckJsb2NrRW5kKCJBdHRhY2htZW50Um93IikgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudEhlYWRlciIpICVdCgojIFNob3cgaW5mbywgdGhhdCBsaW5rcyB3aXRoaW4gdGhlIGlmcmFtZSBtdXN0IGJlIGNsaWNrZWQgd2l0aCBzdHJnL2NtZC9zaGlmdCAoZGVwZW5kaW5nIG9uIHRoZSB1c2VkIGJyb3dzZXIgYW5kIG9zKQojIHRvIG9wZW4gdGhlIGxpbmtzIGluIGEgbmV3IHdpbmRvdyB3aXRob3V0IHRoZSBzZWN1cml0eSBwZXJtaXNzaW9ucyBnaXZlbiB0byB0aGUgaWZyYW1lCiAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZBUU1lc3NhZ2VCcm93c2VyIj4KICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRkFRQ29udGVudCIpICVdCiAgICAgICAgICAgIDxsaSBjbGFzcz0iQ3VzdG9tZXIgVmlzaWJsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJNZXNzYWdlSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDM+WyUgVHJhbnNsYXRlKERhdGEuQ2FwdGlvbikgfCBodG1sICVdOjwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0idHJ1ZSIgbmFtZT0iRmllbGRTdGF0ZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUUNvbnRlbnRIVE1MIikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik1lc3NhZ2VCb2R5Ij4KIyBVc2UgdGhlIEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIHRvIHByZXZlbnQgcGx1Z2lucyBhbmQgc2NyaXB0cyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGluIHRoZSBicm93c2VyLgojIFVzZSBJRSdzIChub24tc3RhbmRhcmQpIHNlY3VyaXR5IGF0dHJpYnV0ZSB0byBhY2hpZXZlIHNvbWV0aGluZyBzaW1pbGFyIGluIG9sZGVyIElFIGJyb3dzZXJzLiBBcHBlbmQgc2Vzc2lvbiBpbmZvIHRvIFVSTCBiZWNhdXNlIElFIHdpbGwgbm90IHNlbmQgY29va2llcy4KIyBTZXQgJ2FsbG93LXBvcHVwcycgdG8gYWxsb3cgSUUxMCsgdG8gb3BlbiBsaW5rcy4gcmVmOiBodHRwOi8vd3d3LnczLm9yZy9odG1sL3dnL3dpa2kvQ2hhbmdlUHJvcG9zYWxzL3NhbmRib3hfYWxsb3dfcG9wdXBzCiAgICAgICAgICAgICAgICAgICAgPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1wb3B1cHMiIFslIERhdGEuTVNTZWN1cml0eVJlc3RyaWN0ZWQgJV0gY2xhc3M9IkZBUUZpZWxkIiBpZD0iSWZyYW1lRkFRWyUgRGF0YS5GaWVsZCB8IGh0bWwgJV0iIG9ubG9hZD0id2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uICgpeyBpZiAodHlwZW9mIEZBUSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5DdXN0b21lciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIEZBUS5DdXN0b21lci5GQVFab29tID09PSAnb2JqZWN0JykgeyBGQVEuQ3VzdG9tZXIuRkFRWm9vbS5JZnJhbWVBdXRvSGVpZ2h0KCQoJyNJZnJhbWVGQVFbJSBEYXRhLkZpZWxkIHwgaHRtbCAlXScpKTsgfX0sIDUwMCk7IiBzcmM9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1QdWJsaWNGQVFab29tO1N1YmFjdGlvbj1IVE1MVmlldztJdGVtSUQ9WyUgRGF0YS5JdGVtSUQgfCBodG1sICVdO0ZpZWxkPVslIERhdGEuRmllbGQgfCBodG1sICVdOyI+PC9pZnJhbWU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUNvbnRlbnRIVE1MIikgJV0KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuQ29uZmlnLlNldCgnRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHREZWZhdWx0JywgcGFyc2VJbnQoIlslIENvbmZpZygiRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHREZWZhdWx0IikgJV0iIHx8IDAsIDEwKSk7CiAgICBDb3JlLkNvbmZpZy5TZXQoJ0ZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVySFRNTEZpZWxkSGVpZ2h0TWF4JywgcGFyc2VJbnQoIlslIENvbmZpZygiRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHRNYXgiKSAlXSIgfHwgMCwgMTApKTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUUNvbnRlbnRQbGFpbiIpICVdCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJBcnRpY2xlRkFRQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ29udGVudCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGQVFDb250ZW50UGxhaW4iKSAlXQogICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiRkFRQ29udGVudCIpICVdCgogICAgICAgIDwvdWw+CiAgICAgICAgPGRpdiBpZD0iWm9vbVNpZGViYXIiPgogICAgICAgICAgICA8dWwgaWQ9Ik1ldGFkYXRhIj4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJNZXNzYWdlSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPlslIFRyYW5zbGF0ZSgiRkFRIEluZm9ybWF0aW9uIikgfCBodG1sICVdPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iS2V5Ij5bJSBUcmFuc2xhdGUoIkFydGljbGUgTnVtYmVyIikgfCBodG1sICVdOjwvc3Bhbj4gPHNwYW4+WyUgRGF0YS5OdW1iZXIgfCBodG1sICVdPC9zcGFuPjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9IktleSI+WyUgVHJhbnNsYXRlKCJDYXRlZ29yeSIpIHwgaHRtbCAlXTo8L3NwYW4+IDxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5DYXRlZ29yeU5hbWUpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuQ2F0ZWdvcnlOYW1lKSB8IGh0bWwgJV08L3NwYW4+PC9saT4KCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IktleXdvcmRzQ29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iS2V5Ij5bJSBUcmFuc2xhdGUoIktleXdvcmRzIikgfCBodG1sICVdOjwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiS2V5d29yZHMiKSAlXQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJLZXl3b3JkIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTZWFyY2ggZm9yIGFydGljbGVzIHdpdGgga2V5d29yZCIpIHwgaHRtbCAlXTogWyUgRGF0YS5LZXl3b3JkIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1QdWJsaWNGQVFTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaDtLZXl3b3JkPVslIERhdGEuS2V5d29yZCB8IHVyaSAlXSI+WyUgRGF0YS5LZXl3b3JkIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJLZXl3b3JkcyIpICVdCiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJLZXkiPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV06PC9zcGFuPiA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuU3RhdGUpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuU3RhdGUpIHwgaHRtbCAlXTwvc3Bhbj48L2xpPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9IktleSI+WyUgVHJhbnNsYXRlKCJMYW5ndWFnZSIpIHwgaHRtbCAlXTo8L3NwYW4+IDxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5MYW5ndWFnZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYW5ndWFnZSkgfCBodG1sICVdPC9zcGFuPjwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJMYW5ndWFnZSIpICVdCgojIHNob3cgZmFxIGR5bmFtaWMgZmllbGRzClslIFJlbmRlckJsb2NrU3RhcnQoIkZBUUR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IktleSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgogICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkZBUUR5bmFtaWNGaWVsZCIpICVdCiMgZXhhbXBsZSBvZiBob3cgdG8gdXNlIGZpeGVkIGR5bmFtaWMgZmllbGQgYmxvY2tzIGZvciBjdXN0b21pemF0aW9ucwojIE5vdGU6IEZpZWxkMSBhbmQgRmllbGQyIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGZpZWxkcyBhbmQgaGFkIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbAojIGZpZWxkIG5hbWVzCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFEeW5hbWljRmllbGRfRmllbGQxIikgJV0KIyAgICAgICAgICAgICAgICA8bGk+CiMgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJLZXkiPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9zcGFuPgojICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZTEgfCBodG1sICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgojICAgICAgICAgICAgICAgIDwvbGk+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRkFRRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGQVFEeW5hbWljRmllbGRfRmllbGQyIikgJV0KIyAgICAgICAgICAgICAgICA8bGk+CiMgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJLZXkiPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9zcGFuPgojICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZTIgfCBodG1sICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgojICAgICAgICAgICAgICAgIDwvbGk+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRkFRRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJWaWV3UmF0aW5nIikgJV0KICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iS2V5IFJhdGluZ0xhYmVsIj5bJSBUcmFuc2xhdGUoIlJhdGluZyIpIHwgaHRtbCAlXTo8L3NwYW4+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJhdGVTdGFycyIpICVdCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJhdGVTdGFyIj48aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPjwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJhdGVTdGFycyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJhdGVTdGFyc0NvdW50IikgJV0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUmF0ZVN0YXJUZXh0IiB0aXRsZT0iWyUgRGF0YS5TdGFycyB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJvdXQgb2YgNSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU3RhcnMgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgib3V0IG9mIDUiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJSYXRlU3RhcnNDb3VudCIpICVdCiAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiVmlld1JhdGluZyIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJWaWV3Vm90ZXMiKSAlXQogICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJLZXkiPlslIFRyYW5zbGF0ZSgiVm90ZXMiKSB8IGh0bWwgJV06PC9zcGFuPiA8c3BhbiB0aXRsZT0iWyUgRGF0YS5Wb3RlcyB8IGh0bWwgJV0iPlslIERhdGEuVm90ZXMgfCBodG1sICVdPC9zcGFuPjwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJWaWV3Vm90ZXMiKSAlXQogICAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8qZ2xvYmFsIEZBUTogdHJ1ZSAqLwpGQVEuQ3VzdG9tZXIuRkFRWm9vbS5Jbml0KCk7CgokKCdhLkFzUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdUaWNrZXRBY3Rpb24nKTsKICAgIHJldHVybiBmYWxzZTsKfSk7Cjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpGQVE6OkltcG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBiYXNlIHF3KEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpCYXNlQ29tbWFuZCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNTVicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RkFRJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKKTsKCnN1YiBDb25maWd1cmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+RGVzY3JpcHRpb24oJ0ZBUSBpbXBvcnQgdG9vbC4nKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3NlcGFyYXRvcicsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkRlZmluZXMgdGhlIHNlcGFyYXRvciBmb3IgZGF0YSBpbiBDU1YgZmlsZSAoZGVmYXVsdCAnOycpLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdxdW90ZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkRlZmluZXMgdGhlIHF1b3RlIGZvciBkYXRhIGluIENTViBmaWxlIChkZWZhdWx0ICcnKS4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZEFyZ3VtZW50KAogICAgICAgIE5hbWUgICAgICAgID0+ICdzb3VyY2UtcGF0aCcsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIlNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIGZpbGUgd2hpY2ggY29udGFpbmluZyBGQVEgaXRlbXMgZm9yIGltcG9ydGluZy4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKCiAgICAkU2VsZi0+QWRkaXRpb25hbEhlbHAoCiAgICAgICAgIjx5ZWxsb3c+Rm9ybWF0IG9mIHRoZSBDU1YgZmlsZTpcbgogICAgICAgICAgICB0aXRsZTtjYXRlZ29yeTtsYW5ndWFnZTtzdGF0ZXR5cGU7ZmllbGQxO2ZpZWxkMjtmaWVsZDM7ZmllbGQ0O2ZpZWxkNTtmaWVsZDY7a2V5d29yZHMKICAgICAgICA8L3llbGxvdz5cbiIKICAgICk7CgogICAgcmV0dXJuOwp9CgpzdWIgUHJlUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNvdXJjZVBhdGggPSAkU2VsZi0+R2V0QXJndW1lbnQoJ3NvdXJjZS1wYXRoJyk7CiAgICBpZiAoICRTb3VyY2VQYXRoICYmICEtciAkU291cmNlUGF0aCApIHsKICAgICAgICBkaWUgIkZpbGUgJFNvdXJjZVBhdGggZG9lcyBub3QgZXhpc3QsIGNhbiBub3QgYmUgcmVhZC5cbiI7CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkltcG9ydGluZyBGQVEgaXRlbXMuLi48L3llbGxvdz5cbiIpOwogICAgJFNlbGYtPlByaW50KCAiPHllbGxvdz4iIC4gKCAnPScgeCA2OSApIC4gIjwveWVsbG93PlxuIiApOwoKICAgIG15ICRTb3VyY2VQYXRoID0gJFNlbGYtPkdldEFyZ3VtZW50KCdzb3VyY2UtcGF0aCcpOwogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PlJlYWQgRmlsZSAkU291cmNlUGF0aCA8L3llbGxvdz5cblxuIik7CgogICAgIyByZWFkIHNvdXJjZSBmaWxlCiAgICBteSAkQ1NWU3RyaW5nUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+RmlsZVJlYWQoCiAgICAgICAgTG9jYXRpb24gPT4gJFNvdXJjZVBhdGgsCiAgICAgICAgUmVzdWx0ICAgPT4gJ1NDQUxBUicsCiAgICAgICAgTW9kZSAgICAgPT4gJ2Jpbm1vZGUnLAogICAgKTsKCiAgICBpZiAoICEkQ1NWU3RyaW5nUmVmICkgewogICAgICAgICRTZWxmLT5QcmludEVycm9yKCJDYW4ndCByZWFkIGZpbGUgJFNvdXJjZVBhdGguXG5JbXBvcnQgYWJvcnRlZC5cbiIpOwogICAgICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVFcnJvcigpOwogICAgfQoKICAgIG15ICRTZXBhcmF0b3IgPSAkU2VsZi0+R2V0T3B0aW9uKCdzZXBhcmF0b3InKSB8fCAnOyc7CiAgICBteSAkUXVvdGUgICAgID0gJFNlbGYtPkdldE9wdGlvbigncXVvdGUnKSAgICAgfHwgJyc7CgogICAgIyByZWFkIENTViBkYXRhCiAgICBteSAkRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDU1YnKS0+Q1NWMkFycmF5KAogICAgICAgIFN0cmluZyAgICA9PiAkJENTVlN0cmluZ1JlZiwKICAgICAgICBTZXBhcmF0b3IgPT4gJFNlcGFyYXRvciwKICAgICAgICBRdW90ZSAgICAgPT4gJFF1b3RlLAogICAgKTsKCiAgICBpZiAoICEkRGF0YVJlZiApIHsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLlxuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGdldCBhbGwgRkFRIGxhbmd1YWdlIGlkcwogICAgbXkgJUxhbmd1YWdlSUQgPSByZXZlcnNlICRGQVFPYmplY3QtPkxhbmd1YWdlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgYWxsIHN0YXRlIHR5cGUgaWRzCiAgICBteSAlU3RhdGVUeXBlSUQgPSByZXZlcnNlICV7ICRGQVFPYmplY3QtPlN0YXRlVHlwZUxpc3QoIFVzZXJJRCA9PiAxICkgfTsKCiAgICAjIGdldCBncm91cCBpZCBmb3IgRkFRIGdyb3VwCiAgICBteSAkRkFRR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCA9PiAnZmFxJywKICAgICk7CgogICAgbXkgJExpbmVDb3VudGVyOwogICAgbXkgJFN1Y2Nlc3NDb3VudCAgICA9IDA7CiAgICBteSAkVW5TY3VjY2Vzc0NvdW50ID0gMDsKCiAgICBST1dSRUY6CiAgICBmb3IgbXkgJFJvd1JlZiAoIEB7JERhdGFSZWZ9ICkgewoKICAgICAgICAkTGluZUNvdW50ZXIrKzsKCiAgICAgICAgbXkgKAogICAgICAgICAgICAkVGl0bGUsICRDYXRlZ29yeVN0cmluZywgJExhbmd1YWdlLCAkU3RhdGVUeXBlLAogICAgICAgICAgICAkRmllbGQxLCAkRmllbGQyLCAkRmllbGQzLCAkRmllbGQ0LCAkRmllbGQ1LCAkRmllbGQ2LCAkS2V5d29yZHMKICAgICAgICApID0gQHskUm93UmVmfTsKCiAgICAgICAgIyBjaGVjayBsYW5ndWFnZQogICAgICAgIGlmICggISRMYW5ndWFnZUlEeyRMYW5ndWFnZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludEVycm9yKCJFcnJvcjogQ291bGQgbm90IGltcG9ydCBsaW5lICRMaW5lQ291bnRlci4gTGFuZ3VhZ2UgJyRMYW5ndWFnZScgZG9lcyBub3QgZXhpc3QuXG4iKTsKICAgICAgICAgICAgbmV4dCBST1dSRUY7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHN0YXRlIHR5cGUKICAgICAgICBpZiAoICEkU3RhdGVUeXBlSUR7JFN0YXRlVHlwZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludEVycm9yKCJFcnJvcjogQ291bGQgbm90IGltcG9ydCBsaW5lICRMaW5lQ291bnRlci4gU3RhdGUgJyRTdGF0ZVR5cGUnIGRvZXMgbm90IGV4aXN0LlxuIik7CiAgICAgICAgICAgIG5leHQgUk9XUkVGOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc3ViY2F0ZWdvcmllcwogICAgICAgIG15IEBDYXRlZ29yeUFycmF5ID0gc3BsaXQgLzo6LywgJENhdGVnb3J5U3RyaW5nOwoKICAgICAgICAjIGNoZWNrIGVhY2ggc3ViY2F0ZWdvcnkgaWYgaXQgZXhpc3RzCiAgICAgICAgbXkgJENhdGVnb3J5SUQ7CiAgICAgICAgbXkgJFBhcmVudElEID0gMDsKCiAgICAgICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgIGZvciBteSAkQ2F0ZWdvcnkgKEBDYXRlZ29yeUFycmF5KSB7CgogICAgICAgICAgICAjIGdldCB0aGUgY2F0ZWdvcnkgaWQKICAgICAgICAgICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBmYXFfY2F0ZWdvcnkgJwogICAgICAgICAgICAgICAgICAgIC4gJ1dIRVJFIHZhbGlkX2lkID0gMSBBTkQgbmFtZSA9ID8gQU5EIHBhcmVudF9pZCA9ID8nLAogICAgICAgICAgICAgICAgQmluZCAgPT4gWyBcJENhdGVnb3J5LCBcJFBhcmVudElEIF0sCiAgICAgICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSBAUmVzdWx0OwogICAgICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgICAgIHB1c2goIEBSZXN1bHQsICRSb3dbMF0gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ2F0ZWdvcnlJRCA9ICRSZXN1bHRbMF07CgogICAgICAgICAgICAjIGNyZWF0ZSBjYXRlZ29yeSBpZiBpdCBkb2VzIG5vdCBleGlzdAogICAgICAgICAgICBpZiAoICEkQ2F0ZWdvcnlJRCApIHsKICAgICAgICAgICAgICAgICRDYXRlZ29yeUlEID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgPT4gJENhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIFBhcmVudElEID0+ICRQYXJlbnRJRCwKICAgICAgICAgICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYWRkIG5ldyBjYXRlZ29yeSB0byBGQVEgZ3JvdXAKICAgICAgICAgICAgICAgICRGQVFPYmplY3QtPlNldENhdGVnb3J5R3JvdXAoCiAgICAgICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgICAgICBHcm91cElEcyAgID0+IFskRkFRR3JvdXBJRF0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgbmV3IHBhcmVudCBpZAogICAgICAgICAgICAkUGFyZW50SUQgPSAkQ2F0ZWdvcnlJRDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgY2F0ZWdvcnkKICAgICAgICBpZiAoICEkQ2F0ZWdvcnlJRCApIHsKICAgICAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoCiAgICAgICAgICAgICAgICAiRXJyb3I6IENvdWxkIG5vdCBpbXBvcnQgbGluZSAkTGluZUNvdW50ZXIuIENhdGVnb3J5ICckQ2F0ZWdvcnlTdHJpbmcnIGNvdWxkIG5vdCBiZSBjcmVhdGVkLlxuIgogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IFJPVzsKICAgICAgICB9CgogICAgICAgICMgY29udmVydCBTdGF0ZVR5cGUgdG8gU3RhdGUKICAgICAgICBteSAlU3RhdGVMb29rdXAgPSByZXZlcnNlICRGQVFPYmplY3QtPlN0YXRlTGlzdCggVXNlcklEID0+IDEgKTsKICAgICAgICBteSAkU3RhdGVJRDsKCiAgICAgICAgU1RBVEVOQU1FOgogICAgICAgIGZvciBteSAkU3RhdGVOYW1lICggc29ydCBrZXlzICVTdGF0ZUxvb2t1cCApIHsKICAgICAgICAgICAgaWYgKCAkU3RhdGVOYW1lID1+IG17XEEgJFN0YXRlVHlwZSB9bXN4aSApIHsKICAgICAgICAgICAgICAgICRTdGF0ZUlEID0gJFN0YXRlTG9va3VweyRTdGF0ZU5hbWV9OwogICAgICAgICAgICAgICAgbGFzdCBTVEFURU5BTUU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgIyBzZXQgY29udGVudCB0eXBlCiAgICAgICAgbXkgJENvbnRlbnRUeXBlID0gJ3RleHQvcGxhaW4nOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6UmljaFRleHQnKSAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpICkgewogICAgICAgICAgICAkQ29udGVudFR5cGUgPSAndGV4dC9odG1sJzsKICAgICAgICB9CgogICAgICAgICMgYWRkIEZBUSBhcnRpY2xlCiAgICAgICAgbXkgJEZBUUlEID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkVGl0bGUsCiAgICAgICAgICAgIENhdGVnb3J5SUQgID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBTdGF0ZUlEICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gJExhbmd1YWdlSUR7JExhbmd1YWdlfSwKICAgICAgICAgICAgRmllbGQxICAgICAgPT4gJEZpZWxkMSwKICAgICAgICAgICAgRmllbGQyICAgICAgPT4gJEZpZWxkMiwKICAgICAgICAgICAgRmllbGQzICAgICAgPT4gJEZpZWxkMywKICAgICAgICAgICAgRmllbGQ0ICAgICAgPT4gJEZpZWxkNCwKICAgICAgICAgICAgRmllbGQ1ICAgICAgPT4gJEZpZWxkNSwKICAgICAgICAgICAgRmllbGQ2ICAgICAgPT4gJEZpZWxkNiwKICAgICAgICAgICAgS2V5d29yZHMgICAgPT4gJEtleXdvcmRzIHx8ICcnLAogICAgICAgICAgICBBcHByb3ZlZCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkQ29udGVudFR5cGUsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBzdWNjZXNzCiAgICAgICAgaWYgKCRGQVFJRCkgewogICAgICAgICAgICAkU3VjY2Vzc0NvdW50Kys7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVW5TY3VjY2Vzc0NvdW50Kys7CiAgICAgICAgICAgICRTZWxmLT5QcmludEVycm9yKCJDb3VsZCBub3QgaW1wb3J0IGxpbmUgJExpbmVDb3VudGVyLlxuIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkU3VjY2Vzc0NvdW50KSB7CiAgICAgICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+U3VjY2Vzc2Z1bGx5IGltcG9ydGVkICRTdWNjZXNzQ291bnQgRkFRIGl0ZW0ocykuPC9ncmVlbj5cbiIpOwogICAgfQogICAgaWYgKCRVblNjdWNjZXNzQ291bnQpIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIlxuPHJlZD5VbnN1Y2Nlc3NmdWxseSBpbXBvcnRlZCAkVW5TY3VjY2Vzc0NvdW50IEZBUSBpdGVtcyhzKS48L3JlZD5cblxuIik7CgogICAgICAgICRTZWxmLT5QcmludCgiPHJlZD5JbXBvcnQgY29tcGxldGUgd2l0aCBlcnJvcnMuPC9yZWQ+XG4iKTsKICAgICAgICAkU2VsZi0+UHJpbnQoICI8eWVsbG93PiIgLiAoICc9JyB4IDY5ICkgLiAiPC95ZWxsb3c+XG4iICk7CgogICAgICAgICRTZWxmLT5QcmludCgiPHJlZD5GYWlsPC9yZWQ+XG4iKTsKICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlRXJyb3IoKTsKICAgIH0KCiAgICAkU2VsZi0+UHJpbnQoIlxuIik7CgogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+SW1wb3J0IGNvbXBsZXRlLjwvZ3JlZW4+XG4iKTsKICAgICRTZWxmLT5QcmludCggIjx5ZWxsb3c+IiAuICggJz0nIHggNjkgKSAuICI8L3llbGxvdz5cbiIgKTsKCiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5Eb25lLjwvZ3JlZW4+XG4iKTsKICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVPaygpOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6T2JqZWN0VHlwZTo6RkFROwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIFNjYWxhcjo6VXRpbDsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpGQVEnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6Ok9iamVjdFR5cGU6OkZBUQoKPWhlYWQxIFNZTk9QU0lTCgpGQVEgb2JqZWN0IGhhbmRsZXIgZm9yIER5bmFtaWNGaWVsZHMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9aXRlbSBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6T2JqZWN0VHlwZTo6RkFRLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBQb3N0VmFsdWVTZXQoKQoKcGVyZm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZ0ZXIgdGhlIFZhbHVlIHNldCBmb3IgdGhpcyBvYmplY3QgdHlwZS4KCiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRGQVFIYW5kbGVyT2JqZWN0LT5Qb3N0VmFsdWVTZXQoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsICAgICAgIyBjb21wbGV0ZSBjb25maWcgb2YgdGhlIER5bmFtaWNGaWVsZAogICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkT2JqZWN0SUQsICAgICAgICAgICAgICAgICMgSUQgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IHRoYXQgdGhlIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtdXN0IGJlIGxpbmtlZCB0bywgZS4gZy4gRkFRSUQKICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLCAgICAgICAgICAgICAgICAgICAjIFZhbHVlIHRvIHN0b3JlLCBkZXBlbmRzIG9uIGJhY2tlbmQgdHlwZQogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFBvc3RWYWx1ZVNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRHluYW1pY0ZpZWxkQ29uZmlnIE9iamVjdElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIER5bmFtaWNGaWVsZENvbmZpZyAoZ2VuZXJhbCkKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIGZpZWxkIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgRHluYW1pY0ZpZWxkQ29uZmlnIChpbnRlcm5hbGx5KQogICAgZm9yIG15ICROZWVkZWQgKHF3KElEIEZpZWxkVHlwZSBPYmplY3RUeXBlKSkgewogICAgICAgIGlmICggISRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQgaW4gRHluYW1pY0ZpZWxkQ29uZmlnISIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGhpc3RvcnkgaW5zZXJ0CiAgICAkRkFRT2JqZWN0LT5GQVFIaXN0b3J5QWRkKAogICAgICAgIE5hbWUgICA9PiAiRHluYW1pY0ZpZWxkICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57TmFtZX0gVXBkYXRlZCIsCiAgICAgICAgSXRlbUlEID0+ICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNsZWFyIEZBUSBjYWNoZQogICAgJEZBUU9iamVjdC0+X0RlbGV0ZUZyb21GQVFDYWNoZSggSXRlbUlEID0+ICRQYXJhbXtPYmplY3RJRH0gKTsKCiAgICAjIFRyaWdnZXIgZXZlbnQuCiAgICAkRkFRT2JqZWN0LT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0ZBUUR5bmFtaWNGaWVsZFVwZGF0ZV8nIC4gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntOYW1lfSwKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIEZpZWxkTmFtZSA9PiAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+e05hbWV9LAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFBhcmFte1ZhbHVlfSwKICAgICAgICAgICAgT2xkVmFsdWUgID0+ICRQYXJhbXtPbGRWYWx1ZX0sCiAgICAgICAgICAgIEl0ZW1JRCAgICA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkZBUTo6Q2F0ZWdvcnk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lckdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJwopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpGQVE6OkNhdGVnb3J5IC0gc3ViIG1vZHVsZSBvZiBLZXJuZWw6OlN5c3RlbTo6RkFRCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBGQVEgY2F0ZWdvcnkgZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIENhdGVnb3J5QWRkKCkKCmFkZCBhIGNhdGVnb3J5CgogICAgbXkgJENhdGVnb3J5SUQgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUFkZCgKICAgICAgICBOYW1lICAgICA9PiAnQ2F0ZWdvcnlBJywKICAgICAgICBDb21tZW50ICA9PiAnU29tZSBjb21tZW50JywKICAgICAgICBQYXJlbnRJRCA9PiAyLAogICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRDYXRlZ29yeUlEID0gMzQ7ICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBjYXRlZ29yeSBjb3VsZCBub3QgYmUgYWRkZWQKCj1jdXQKCnN1YiBDYXRlZ29yeUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtQYXJlbnRJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFBhcmVudElEISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdGhhdCBQYXJlbnRJRCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nIGJ1dCBudW1iZXIgMCBpcyBhbGxvd2VkCiAgICBpZiAoICRQYXJhbXtQYXJlbnRJRH0gZXEgJycgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJQYXJlbnRJRCBjYW5ub3QgYmUgZW1wdHkhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGluc2VydCByZWNvcmQKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBJTlNFUlQgSU5UTyBmYXFfY2F0ZWdvcnkgKG5hbWUsIHBhcmVudF9pZCwgY29tbWVudHMsIHZhbGlkX2lkLCBjcmVhdGVkLCBjcmVhdGVkX2J5LAogICAgICAgICAgICAgICAgY2hhbmdlZCwgY2hhbmdlZF9ieSkKICAgICAgICAgICAgVkFMVUVTICggPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sIFwkUGFyYW17UGFyZW50SUR9LCBcJFBhcmFte0NvbW1lbnR9LCBcJFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGdldCBuZXcgY2F0ZWdvcnkgaWQKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFNFTEVDVCBpZAogICAgICAgICAgICBGUk9NIGZhcV9jYXRlZ29yeQogICAgICAgICAgICBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJENhdGVnb3J5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ2F0ZWdvcnlJRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyBsb2cgbm90aWNlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICBNZXNzYWdlICA9PiAiRkFRQ2F0ZWdvcnk6ICckUGFyYW17TmFtZX0nIENhdGVnb3J5SUQ6ICckQ2F0ZWdvcnlJRCcgIgogICAgICAgICAgICAuICJjcmVhdGVkIHN1Y2Nlc3NmdWxseSAoJFBhcmFte1VzZXJJRH0pISIsCiAgICApOwoKICAgIHJldHVybiAkQ2F0ZWdvcnlJRDsKfQoKPWl0ZW0gQ2F0ZWdvcnlDb3VudCgpCgpDb3VudCB0aGUgbnVtYmVyIG9mIGNhdGVnb3JpZXMuCgogICAgbXkgJENhdGVnb3J5Q291bnQgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUNvdW50KAogICAgICAgIFBhcmVudElEcyA9PiBbIDEsIDIsIDMsIDQgXSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRDYXRlZ29yeUNvdW50ID0gNjsKCj1jdXQKCnN1YiBDYXRlZ29yeUNvdW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1BhcmVudElEc30gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFBhcmVudElEcyEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGJ1aWxkIFNRTAogICAgbXkgJFNRTCA9ICcKICAgICAgICBTRUxFQ1QgQ09VTlQoKikKICAgICAgICBGUk9NIGZhcV9jYXRlZ29yeQogICAgICAgIFdIRVJFIHZhbGlkX2lkIElOICgnCiAgICAgICAgLiBqb2luICcsICcsICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpCiAgICAgICAgLiAnKSc7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIHBhcmVudCBpZHMgYXJlIGdpdmVuCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1BhcmVudElEc30gKSB7CgogICAgICAgICMgaW50ZWdlciBxdW90ZSB0aGUgcGFyZW50IGlkcwogICAgICAgIGZvciBteSAkUGFyZW50SUQgKCBAeyAkUGFyYW17UGFyZW50SURzfSB9ICkgewogICAgICAgICAgICAkUGFyZW50SUQgPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyZW50SUQsICdJbnRlZ2VyJyApOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgc3RyaW5nCiAgICAgICAgbXkgJEluU3RyaW5nID0gam9pbiAnLCAnLCBAeyAkUGFyYW17UGFyZW50SURzfSB9OwoKICAgICAgICAkU1FMIC49ICcgQU5EIHBhcmVudF9pZCBJTiAoJyAuICRJblN0cmluZyAuICcpJzsKICAgIH0KCiAgICAjIGFkZCBncm91cCBieQogICAgJFNRTCAuPSAnIEdST1VQIEJZIHBhcmVudF9pZCc7CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBMaW1pdCA9PiAyMDAsCiAgICApOwoKICAgIG15ICRDb3VudCA9IDA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ291bnQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkQ291bnQ7Cn0KCj1pdGVtIENhdGVnb3J5RGVsZXRlKCkKCkRlbGV0ZSBhIGNhdGVnb3J5LgoKICAgIG15ICREZWxldGVTdWNjZXNzID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlEZWxldGUoCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgIERlbGV0ZVN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBjYXRlZ29yeSBjb3VsZCBub3QgYmUgZGVsZXRlZAoKPWN1dAoKc3ViIENhdGVnb3J5RGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhDYXRlZ29yeUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBdHRyaWJ1dGUhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGRlbGV0ZSB0aGUgY2F0ZWdvcnkKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBERUxFVEUgRlJPTSBmYXFfY2F0ZWdvcnkKICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDYXRlZ29yeUlEfSBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSB0aGUgY2F0ZWdvcnkgZ3JvdXBzCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgREVMRVRFIEZST00gZmFxX2NhdGVnb3J5X2dyb3VwCiAgICAgICAgICAgIFdIRVJFIGNhdGVnb3J5X2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2F0ZWdvcnlJRH0gXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENhdGVnb3J5RHVwbGljYXRlQ2hlY2soKQoKY2hlY2sgYSBjYXRlZ29yeSBmb3IgZHVwbGljYXRlIG5hbWUgdW5kZXIgdGhlIHNhbWUgcGFyZW50CgogICAgbXkgJEV4aXN0cyA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RHVwbGljYXRlQ2hlY2soCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAxLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1NvbWUgTmFtZScsCiAgICAgICAgUGFyZW50SUQgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRFeGlzdHMgPSAxOyAgICAgICAgICAgICAgICAjIGlmIGNhdGVnb3J5IG5hbWUgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGUgc2FtZSBwYXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAgaWYgdGhlIG5hbWUgZG9lcyBub3QgZXhpc3RzIHdpdGggdGhlIHNhbWUgcGFyZW50Cgo9Y3V0CgpzdWIgQ2F0ZWdvcnlEdXBsaWNhdGVDaGVjayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHRzCiAgICAkUGFyYW17TmFtZX0gLy89ICcnOwogICAgJFBhcmFte1BhcmVudElEfSB8fD0gMDsKICAgIG15IEBWYWx1ZXM7CiAgICBwdXNoIEBWYWx1ZXMsIFwkUGFyYW17TmFtZX07CiAgICBwdXNoIEBWYWx1ZXMsIFwkUGFyYW17UGFyZW50SUR9OwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBkYiBxdW90ZQogICAgJFBhcmFte1BhcmVudElEfSA9ICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXtQYXJlbnRJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgYnVpbGQgU1FMCiAgICBteSAkU1FMID0gJwogICAgICAgIFNFTEVDVCBpZAogICAgICAgIEZST00gZmFxX2NhdGVnb3J5CiAgICAgICAgV0hFUkUgbmFtZSA9ID8KICAgICAgICAgICAgQU5EIHBhcmVudF9pZCA9ID8KICAgICAgICAnOwogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtDYXRlZ29yeUlEfSApIHsKICAgICAgICAkU1FMIC49ICIgQU5EIGlkICE9ID8iOwogICAgICAgIHB1c2ggQFZhbHVlcywgXCRQYXJhbXtDYXRlZ29yeUlEfTsKCiAgICB9CgogICAgIyBwcmVwYXJlIFNRTCBzdGF0ZW1lbnQKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgQmluZCAgPT4gXEBWYWx1ZXMsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkRXhpc3RzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEV4aXN0cyA9IDE7CiAgICB9CgogICAgcmV0dXJuICRFeGlzdHM7Cn0KCj1pdGVtIENhdGVnb3J5R2V0KCkKCmdldCBhIGNhdGVnb3J5IGFzIGhhc2gKCiAgICBteSAlQ2F0ZWdvcnkgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdldCgKICAgICAgICBDYXRlZ29yeUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJUNhdGVnb3J5ID0gKCwKICAgICAgICBDYXRlZ29yeUlEID0+IDIsCiAgICAgICAgUGFyZW50SUQgICA9PiAwLAogICAgICAgIE5hbWUgICAgICAgPT4gJ015IENhdGVnb3J5JywKICAgICAgICBDb21tZW50ICAgID0+ICdUaGlzIGlzIG15IGZpcnN0IGNhdGVnb3J5LicsCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDYXRlZ29yeUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtDYXRlZ29yeUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2F0ZWdvcnlJRCEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnQ2F0ZWdvcnlHZXQ6OicgLiAkUGFyYW17Q2F0ZWdvcnlJRH07CgogICAgIyBnZXQgY2FjaGUgb2JqZWN0CiAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICBteSAkQ2FjaGUgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICdGQVEnLAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKCiAgICByZXR1cm4gJXskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgU1FMCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBTRUxFQ1QgaWQsIHBhcmVudF9pZCwgbmFtZSwgY29tbWVudHMsIHZhbGlkX2lkCiAgICAgICAgICAgIEZST00gZmFxX2NhdGVnb3J5CiAgICAgICAgICAgIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NhdGVnb3J5SUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAlRGF0YSA9ICgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkUm93WzBdLAogICAgICAgICAgICBQYXJlbnRJRCAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFJvd1syXSwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAkUm93WzNdLAogICAgICAgICAgICBWYWxpZElEICAgID0+ICRSb3dbNF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNhY2hlIHJlc3VsdAogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICAgICBUVEwgICA9PiA2MCAqIDYwICogMjQgKiAyLAogICAgKTsKCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIENhdGVnb3J5R3JvdXBHZXQoKQoKZ2V0IGdyb3VwcyBvZiBhIGNhdGVnb3J5CgogICAgbXkgJEdyb3VwQXJyYXlSZWYgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdyb3VwR2V0KAogICAgICAgIENhdGVnb3J5SUQgPT4gMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkR3JvdXBBcnJheVJlZiA9IFsKICAgICAgICAyLAogICAgICAgIDksCiAgICAgICAgMTAsCiAgICBdOwoKPWN1dAoKc3ViIENhdGVnb3J5R3JvdXBHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2F0ZWdvcnlJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZ2V0IGdyb3VwcwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgU0VMRUNUIGdyb3VwX2lkCiAgICAgICAgICAgIEZST00gZmFxX2NhdGVnb3J5X2dyb3VwCiAgICAgICAgICAgIFdIRVJFIGNhdGVnb3J5X2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2F0ZWdvcnlJRH0gXSwKICAgICk7CgogICAgbXkgQEdyb3VwczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQEdyb3VwcywgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBHcm91cHM7Cn0KCj1pdGVtIENhdGVnb3J5R3JvdXBHZXRBbGwoKQoKZ2V0IGFsbCBjYXRlZ29yeS1ncm91cHMKCiAgICBteSAkQWxsQ2F0ZWdvcnlHcm91cEhhc2hSZWYgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUdyb3VwR2V0QWxsKAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJEFsbENhdGVnb3J5R3JvdXBIYXNoUmVmID0gewogICAgICAgIDEgPT4gewogICAgICAgICAgICAyICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgMiA9PiB7CiAgICAgICAgICAgIDIgID0+IDEsCiAgICAgICAgICAgIDkgID0+IDEsCiAgICAgICAgICAgIDEwID0+IDEsCiAgICAgICAgfSwKICAgICAgICAzID0+IHsKICAgICAgICAgICAgMiAgPT4gMSwKICAgICAgICAgICAgOSAgPT4gMSwKICAgICAgICAgICAgMTAgPT4gMSwKICAgICAgICB9LAogICAgICAgIDQgPT4gewogICAgICAgICAgICAxICA9PiAxLAogICAgICAgICAgICAyICA9PiAxLAogICAgICAgICAgICAzICA9PiAxLAogICAgICAgICAgICA0ICA9PiAxLAogICAgICAgICAgICA1ICA9PiAxLAogICAgICAgICAgICA5ICA9PiAxLAogICAgICAgICAgICAxMCA9PiAxLAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIENhdGVnb3J5R3JvdXBHZXRBbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBpZiAoICRTZWxmLT57Q2FjaGV9LT57Q2F0ZWdvcnlHcm91cEdldEFsbH0gKSB7CgogICAgICAgIHJldHVybiAkU2VsZi0+e0NhY2hlfS0+e0NhdGVnb3J5R3JvdXBHZXRBbGx9OwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgZ3JvdXBzCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBTRUxFQ1QgZ3JvdXBfaWQsIGNhdGVnb3J5X2lkCiAgICAgICAgICAgIEZST00gZmFxX2NhdGVnb3J5X2dyb3VwJywKICAgICk7CgogICAgbXkgJUdyb3VwczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRHcm91cHN7ICRSb3dbMV0gfS0+eyAkUm93WzBdIH0gPSAxOwogICAgfQoKICAgICMgY2FjaGUKICAgICRTZWxmLT57Q2FjaGV9LT57Q2F0ZWdvcnlHcm91cEdldEFsbH0gPSBcJUdyb3VwczsKCiAgICByZXR1cm4gXCVHcm91cHM7Cn0KCj1pdGVtIENhdGVnb3J5TGlzdCgpCgpnZXQgdGhlIGNhdGVnb3J5IGxpc3QgYXMgaGFzaAoKICAgIG15ICRDYXRlZ29yeUhhc2hSZWYgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDEsICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQ2F0ZWdvcnlIYXNoUmVmID0gewogICAgICAgIDAgPT4gewogICAgICAgICAgICAxID0+ICdNaXNjJywKICAgICAgICAgICAgMiA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgIH0sCiAgICAgICAgMiA9PiB7CiAgICAgICAgICAgIDMgPT4gJ1N1YiBDYXRlZ29yeSBBJywKICAgICAgICAgICAgNCA9PiAnU3ViIENhdGVnb3J5IEInLAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIENhdGVnb3J5TGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQKICAgIG15ICRWYWxpZCA9IDA7CiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkVmFsaWQgPSAkUGFyYW17VmFsaWR9OwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIGlmICggJFNlbGYtPntDYWNoZX0tPntDYXRlZ29yeUxpc3R9LT57JFZhbGlkfSApIHsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57Q2FjaGV9LT57Q2F0ZWdvcnlMaXN0fS0+eyRWYWxpZH07CiAgICB9CgogICAgIyBidWlsZCBTUUwKICAgIG15ICRTUUwgPSAnCiAgICAgICAgU0VMRUNUIGlkLCBwYXJlbnRfaWQsIG5hbWUKICAgICAgICBGUk9NIGZhcV9jYXRlZ29yeSc7CiAgICBpZiAoJFZhbGlkKSB7CgogICAgICAgICMgZ2V0IHRoZSB2YWxpZCBpZHMKICAgICAgICAkU1FMIC49ICcgV0hFUkUgdmFsaWRfaWQgSU4gKCcKICAgICAgICAgICAgLiBqb2luICcsICcsICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpCiAgICAgICAgICAgIC4gJyknOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBwcmVwYXJlIFNRTCBzdGF0ZW1lbnQKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKCBTUUwgPT4gJFNRTCApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1sxXSB9LT57ICRSb3dbMF0gfSA9ICRSb3dbMl07CiAgICB9CgogICAgIyBjYWNoZQogICAgJFNlbGYtPntDYWNoZX0tPntDYXRlZ29yeUxpc3R9LT57JFZhbGlkfSA9IFwlRGF0YTsKCiAgICByZXR1cm4gXCVEYXRhOwp9Cgo9aXRlbSBDYXRlZ29yeVNlYXJjaCgpCgpnZXQgdGhlIGNhdGVnb3J5IHNlYXJjaCBhcyBhbiBhcnJheSByZWYKCiAgICBteSAkQ2F0ZWdvcnlJREFycmF5UmVmID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlTZWFyY2goCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ1Rlc3QnLAogICAgICAgIFBhcmVudElEICAgID0+IDMsCiAgICAgICAgUGFyZW50SURzICAgPT4gWyAxLCAzLCA4IF0sCiAgICAgICAgQ2F0ZWdvcnlJRHMgPT4gWyAyLCA1LCA3IF0sCiAgICAgICAgT3JkZXJCeSAgICAgPT4gJ05hbWUnLAogICAgICAgIFNvcnRCeSAgICAgID0+ICdkb3duJywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJENhdGVnb3J5SURBcnJheVJlZiA9IFsKICAgICAgICAyLAogICAgXTsKCj1jdXQKCnN1YiBDYXRlZ29yeVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgU1FMCiAgICBteSAkU1FMID0gJwogICAgICAgIFNFTEVDVCBpZAogICAgICAgIEZST00gZmFxX2NhdGVnb3J5CiAgICAgICAgV0hFUkUgdmFsaWRfaWQgSU4gKCcKICAgICAgICAuIGpvaW4gJywgJywgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCkKICAgICAgICAuICcpJzsKCiAgICBteSAkRXh0ID0gJyc7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIHNlYXJjaCBmb3IgbmFtZQogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtOYW1lfSApIHsKCiAgICAgICAgIyBkYiBsaWtlIHF1b3RlCiAgICAgICAgJFBhcmFte05hbWV9ID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmFte05hbWV9LCAnTGlrZScgKTsKCiAgICAgICAgJEV4dCAuPSAiIEFORCBuYW1lIExJS0UgJyUiIC4gJFBhcmFte05hbWV9IC4gIiUnICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciBwYXJlbnQgaWQKICAgIGVsc2lmICggZGVmaW5lZCAkUGFyYW17UGFyZW50SUR9ICkgewoKICAgICAgICAjIGRiIGludGVnZXIgcXVvdGUKICAgICAgICAkUGFyYW17UGFyZW50SUR9ID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmFte1BhcmVudElEfSwgJ0ludGVnZXInICk7CgogICAgICAgICRFeHQgLj0gJyBBTkQgcGFyZW50X2lkID0gJyAuICRQYXJhbXtQYXJlbnRJRH07CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHBhcmVudCBpZHMKICAgIGVsc2lmICgKICAgICAgICBkZWZpbmVkICRQYXJhbXtQYXJlbnRJRHN9CiAgICAgICAgJiYgcmVmICRQYXJhbXtQYXJlbnRJRHN9IGVxICdBUlJBWScKICAgICAgICAmJiBAeyAkUGFyYW17UGFyZW50SURzfSB9CiAgICAgICAgKQogICAgewoKICAgICAgICAjIGludGVnZXIgcXVvdGUgdGhlIHBhcmVudCBpZHMKICAgICAgICBmb3IgbXkgJFBhcmVudElEICggQHsgJFBhcmFte1BhcmVudElEc30gfSApIHsKICAgICAgICAgICAgJFBhcmVudElEID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmVudElELCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gJywgJywgQHsgJFBhcmFte1BhcmVudElEc30gfTsKCiAgICAgICAgJEV4dCA9ICcgQU5EIHBhcmVudF9pZCBJTiAoJyAuICRJblN0cmluZyAuICcpJzsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgY2F0ZWdvcnkgaWRzCiAgICBlbHNpZiAoCiAgICAgICAgZGVmaW5lZCAkUGFyYW17Q2F0ZWdvcnlJRHN9CiAgICAgICAgJiYgcmVmICRQYXJhbXtDYXRlZ29yeUlEc30gZXEgJ0FSUkFZJwogICAgICAgICYmIEB7ICRQYXJhbXtDYXRlZ29yeUlEc30gfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBpbnRlZ2VyIHF1b3RlIHRoZSBjYXRlZ29yeSBpZHMKICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBAeyAkUGFyYW17Q2F0ZWdvcnlJRHN9IH0gKSB7CiAgICAgICAgICAgICRDYXRlZ29yeUlEID0gJERCT2JqZWN0LT5RdW90ZSggJENhdGVnb3J5SUQsICdJbnRlZ2VyJyApOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgc3RyaW5nCiAgICAgICAgbXkgJEluU3RyaW5nID0gam9pbiAnLCAnLCBAeyAkUGFyYW17Q2F0ZWdvcnlJRHN9IH07CgogICAgICAgICRFeHQgPSAnIEFORCBpZCBJTiAoJyAuICRJblN0cmluZyAuICcpJzsKICAgIH0KCiAgICAjIE9SREVSIEJZCiAgICBpZiAoICRQYXJhbXtPcmRlckJ5fSApIHsKICAgICAgICAkRXh0IC49ICIgT1JERVIgQlkgbmFtZSI7CgogICAgICAgICMgc2V0IHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIKICAgICAgICAkUGFyYW17U29ydEJ5fSB8fD0gJ3VwJzsKCiAgICAgICAgIyBTT1JUCiAgICAgICAgaWYgKCAkUGFyYW17U29ydEJ5fSApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW17U29ydEJ5fSBlcSAndXAnICkgewogICAgICAgICAgICAgICAgJEV4dCAuPSAiIEFTQyI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGFyYW17U29ydEJ5fSBlcSAnZG93bicgKSB7CiAgICAgICAgICAgICAgICAkRXh0IC49ICIgREVTQyI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBTUUwgU1RBVEVNRU5UCiAgICAkU1FMIC49ICRFeHQ7CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBMaW1pdCA9PiA1MDAsCiAgICApOwoKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBATGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBMaXN0Owp9Cgo9aXRlbSBDYXRlZ29yeVN1YkNhdGVnb3J5SURMaXN0KCkKCmdldCBhbGwgc3ViY2F0ZWdvcnkgaWRzIG9mIG9mIGEgY2F0ZWdvcnkKCiAgICBteSAkU3ViQ2F0ZWdvcnlJREFycmF5UmVmID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlTdWJDYXRlZ29yeUlETGlzdCgKICAgICAgICBQYXJlbnRJRCAgICAgPT4gMSwKICAgICAgICBNb2RlICAgICAgICAgPT4gJ1B1YmxpYycsICMgKEFnZW50LCBDdXN0b21lciwgUHVibGljKQogICAgICAgIEN1c3RvbWVyVXNlciA9PiAndHQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFN1YkNhdGVnb3J5SURBcnJheVJlZiA9IFsKICAgICAgICAzLAogICAgICAgIDQsCiAgICAgICAgNSwKICAgICAgICA2LAogICAgXTsKCj1jdXQKCnN1YiBDYXRlZ29yeVN1YkNhdGVnb3J5SURMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1BhcmVudElEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUGFyZW50SUQhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJENhdGVnb3JpZXMgPSB7fTsKCiAgICBpZiAoICRQYXJhbXtNb2RlfSAmJiAkUGFyYW17TW9kZX0gZXEgJ0FnZW50JyApIHsKCiAgICAgICAgIyBnZXQgYWdlbnRzIGNhdGVnb3JpZXMKICAgICAgICAkQ2F0ZWdvcmllcyA9ICRTZWxmLT5HZXRVc2VyQ2F0ZWdvcmllcygKICAgICAgICAgICAgVHlwZSAgID0+ICdybycsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TW9kZX0gJiYgJFBhcmFte01vZGV9IGVxICdDdXN0b21lcicgKSB7CgogICAgICAgICMgZ2V0IGN1c3RvbWVyIGNhdGVnb3JpZXMKICAgICAgICAkQ2F0ZWdvcmllcyA9ICRTZWxmLT5HZXRDdXN0b21lckNhdGVnb3JpZXMoCiAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAncm8nLAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFBhcmFte0N1c3RvbWVyVXNlcn0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IGFsbCBjYXRlZ29yaWVzCiAgICAgICAgJENhdGVnb3JpZXMgPSAkU2VsZi0+Q2F0ZWdvcnlMaXN0KAogICAgICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgQFN1YkNhdGVnb3J5SURzOwogICAgbXkgQFRlbXBTdWJDYXRlZ29yeUlEcyA9IGtleXMgJXsgJENhdGVnb3JpZXMtPnsgJFBhcmFte1BhcmVudElEfSB9IH07CiAgICBTVUJDQVRFR09SWUlEOgogICAgd2hpbGUgKEBUZW1wU3ViQ2F0ZWdvcnlJRHMpIHsKCiAgICAgICAgIyBnZXQgbmV4dCBzdWJjYXRlZ29yeSBpZAogICAgICAgIG15ICRTdWJDYXRlZ29yeUlEID0gc2hpZnQgQFRlbXBTdWJDYXRlZ29yeUlEczsKCiAgICAgICAgIyBhZGQgdG8gcmVzdWx0CiAgICAgICAgcHVzaCBAU3ViQ2F0ZWdvcnlJRHMsICRTdWJDYXRlZ29yeUlEOwoKICAgICAgICAjIGNoZWNrIGlmIHN1YmNhdGVnb3J5IGhhcyBvd24gc3ViY2F0ZWdvcmllcwogICAgICAgIG5leHQgU1VCQ0FURUdPUllJRCBpZiAhJENhdGVnb3JpZXMtPnskU3ViQ2F0ZWdvcnlJRH07CgogICAgICAgICMgYWRkIG5ldyBzdWJjYXRlZ29yaWVzCiAgICAgICAgcHVzaCBAVGVtcFN1YkNhdGVnb3J5SURzLCBrZXlzICV7ICRDYXRlZ29yaWVzLT57JFN1YkNhdGVnb3J5SUR9IH07CiAgICB9CgogICAgIyBzb3J0IHN1YmNhdGVnb3JpZXMgbnVtZXJpY2FsbHkKICAgIEBTdWJDYXRlZ29yeUlEcyA9IHNvcnQgeyAkYSA8PT4gJGIgfSBAU3ViQ2F0ZWdvcnlJRHM7CgogICAgcmV0dXJuIFxAU3ViQ2F0ZWdvcnlJRHM7Cn0KCj1pdGVtIENhdGVnb3J5VHJlZUxpc3QoKQoKZ2V0IGFsbCBjYXRlZ29yaWVzIGFzIHRyZWUgKHdpdGggdGhlaXIgbG9uZyBuYW1lcykKCiAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlUcmVlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwgICMgKDB8MSwgb3B0aW9uYWwpCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQ2F0ZWdvcnlUcmVlID0gewogICAgICAgIDEgPT4gJ01pc2MnLAogICAgICAgIDIgPT4gJ015IENhdGVnb3J5JywKICAgICAgICAzID0+ICdNeSBDYXRlZ29yeTo6U3ViIENhdGVnb3J5IEEnLAogICAgICAgIDQgPT4gJ015IENhdGVnb3J5OjpTdWIgQ2F0ZWdvcnkgQicsCiAgICB9OwoKPWN1dAoKc3ViIENhdGVnb3J5VHJlZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0CiAgICBteSAkVmFsaWQgPSAwOwogICAgaWYgKCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRWYWxpZCA9ICRQYXJhbXtWYWxpZH07CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgaWYgKCAkU2VsZi0+e0NhY2hlfS0+e0dldENhdGVnb3J5VHJlZX0tPnskVmFsaWR9ICkgewoKICAgICAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntHZXRDYXRlZ29yeVRyZWV9LT57JFZhbGlkfTsKICAgIH0KCiAgICAjIGJ1aWxkIFNRTAogICAgbXkgJFNRTCA9ICcKICAgICAgICBTRUxFQ1QgaWQsIHBhcmVudF9pZCwgbmFtZQogICAgICAgIEZST00gZmFxX2NhdGVnb3J5JzsKCiAgICAjIGFkZCB3aGVyZSBjbGF1c2UgZm9yIHZhbGlkIGNhdGVnb3JpZXMKICAgIGlmICgkVmFsaWQpIHsKICAgICAgICAkU1FMIC49ICcgV0hFUkUgdmFsaWRfaWQgSU4gKCcKICAgICAgICAgICAgLiBqb2luICcsICcsICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpCiAgICAgICAgICAgIC4gJyknOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBwcmVwYXJlIFNRTAogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICRTUUwsCiAgICApOwoKICAgICMgZmV0Y2ggcmVzdWx0CiAgICBteSAlQ2F0ZWdvcnlNYXA7CiAgICBteSAlQ2F0ZWdvcnlOYW1lTG9va3VwOwogICAgbXkgJVBhcmVudElETG9va3VwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENhdGVnb3J5TWFweyAkUm93WzFdIH0tPnsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgICAgICAkQ2F0ZWdvcnlOYW1lTG9va3VweyAkUm93WzBdIH0gICAgICAgPSAkUm93WzJdOwogICAgICAgICRQYXJlbnRJRExvb2t1cHsgJFJvd1swXSB9ICAgICAgICAgICA9ICRSb3dbMV07CiAgICB9CgogICAgIyB0byBzdG9yZSB0aGUgY2F0ZWdvcnkgdHJlZQogICAgbXkgJUNhdGVnb3J5VHJlZTsKCiAgICAjIGNoZWNrIGFsbCBwYXJlbnQgSURzCiAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJUNhdGVnb3J5TWFwICkgewoKICAgICAgICAjIGdldCBzdWJjYXRlZ29yaWVzIGFuZCBuYW1lcyBmb3IgdGhpcyBwYXJlbnQgaWQKICAgICAgICB3aGlsZSAoIG15ICggJENhdGVnb3J5SUQsICRDYXRlZ29yeU5hbWUgKSA9IGVhY2ggJXsgJENhdGVnb3J5TWFweyRQYXJlbnRJRH0gfSApIHsKCiAgICAgICAgICAgICMgbG9va3VwIHRoZSBwYXJlbnRzIG5hbWUKICAgICAgICAgICAgbXkgJE5ld1BhcmVudElEID0gJFBhcmVudElEOwogICAgICAgICAgICB3aGlsZSAoJE5ld1BhcmVudElEKSB7CgogICAgICAgICAgICAgICAgIyBwcmUtYXBwZW5kIHBhcmVudHMgY2F0ZWdvcnkgbmFtZQogICAgICAgICAgICAgICAgaWYgKCAkQ2F0ZWdvcnlOYW1lTG9va3VweyROZXdQYXJlbnRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJENhdGVnb3J5TmFtZSA9ICRDYXRlZ29yeU5hbWVMb29rdXB7JE5ld1BhcmVudElEfSAuICc6OicgLiAkQ2F0ZWdvcnlOYW1lOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2V0IHVwIG9uZSBwYXJlbnQgbGV2ZWwKICAgICAgICAgICAgICAgICROZXdQYXJlbnRJRCA9ICRQYXJlbnRJRExvb2t1cHskTmV3UGFyZW50SUR9IHx8IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGNhdGVnb3J5IHRvIHRyZWUKICAgICAgICAgICAgJENhdGVnb3J5VHJlZXskQ2F0ZWdvcnlJRH0gPSAkQ2F0ZWdvcnlOYW1lOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlfS0+e0dldENhdGVnb3J5VHJlZX0tPnskVmFsaWR9ID0gXCVDYXRlZ29yeVRyZWU7CgogICAgcmV0dXJuIFwlQ2F0ZWdvcnlUcmVlOwp9Cgo9aXRlbSBDYXRlZ29yeVVwZGF0ZSgpCgp1cGRhdGUgYSBjYXRlZ29yeQoKICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlVcGRhdGUoCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAyLAogICAgICAgIFBhcmVudElEICAgPT4gMSwKICAgICAgICBOYW1lICAgICAgID0+ICdTb21lIENhdGVnb3J5JywKICAgICAgICBDb21tZW50ICAgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRTdWNjZXNzID0gMTsgICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBjYXRlZ29yeSBjb3VsZCBub3QgYmUgdXBkYXRlZAoKPWN1dAoKc3ViIENhdGVnb3J5VXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENhdGVnb3J5SUQgUGFyZW50SUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdGhhdCBQYXJlbnRJRCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nIGJ1dCBudW1iZXIgMCBpcyBhbGxvd2VkCiAgICBpZiAoICRQYXJhbXtQYXJlbnRJRH0gZXEgJycgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJQYXJlbnRJRCBjYW5ub3QgYmUgZW1wdHkhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIFNRTAogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFVQREFURSBmYXFfY2F0ZWdvcnkKICAgICAgICAgICAgU0VUIHBhcmVudF9pZCA9ID8sIG5hbWUgPSA/LCBjb21tZW50cyA9ID8sIHZhbGlkX2lkID0gPywgY2hhbmdlZCA9IGN1cnJlbnRfdGltZXN0YW1wLAogICAgICAgICAgICAgICAgY2hhbmdlZF9ieSA9ID8KICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtQYXJlbnRJRH0sIFwkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFwkUGFyYW17Q29tbWVudH0sICBcJFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sICAgXCRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGxvZyBub3RpY2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgIE1lc3NhZ2UgID0+ICJGQVFDYXRlZ29yeTogJyRQYXJhbXtOYW1lfScgIgogICAgICAgICAgICAuICJJRDogJyRQYXJhbXtDYXRlZ29yeUlEfScgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKCRQYXJhbXtVc2VySUR9KSEiLAogICAgKTsKCiAgICAjIGRlbGV0ZSBhbGwgY2FjaGUsIGFzIEZBUUdldCgpIHdpbGwgYmUgYWxzbyBhZmZlY3RlZC4KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBBZ2VudENhdGVnb3J5U2VhcmNoKCkKCmdldCB0aGUgY2F0ZWdvcnkgc2VhcmNoIGFzIGFycmF5IHJlZgoKICAgIG15ICRDYXRlZ29yeUlEQXJyYXlSZWYgPSAkRkFRT2JqZWN0LT5BZ2VudENhdGVnb3J5U2VhcmNoKAogICAgICAgIFBhcmVudElEID0+IDMsICAgIyAob3B0aW9uYWwsIGRlZmF1bHQgMCkKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJENhdGVnb3J5SURBcnJheVJlZiA9IFsKICAgICAgICAnNCcsCiAgICAgICAgJzgnLAogICAgXTsKCj1jdXQKCnN1YiBBZ2VudENhdGVnb3J5U2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBwYXJlbnQgaWQKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1BhcmVudElEfSApIHsKICAgICAgICAkUGFyYW17UGFyZW50SUR9ID0gMDsKICAgIH0KICAgIG15ICRDYXRlZ29yaWVzID0gJFNlbGYtPkdldFVzZXJDYXRlZ29yaWVzKAogICAgICAgIFR5cGUgICA9PiAncm8nLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJUNhdGVnb3J5ID0gJXsgJENhdGVnb3JpZXMtPnsgJFBhcmFte1BhcmVudElEfSB9IH07CiAgICBteSBAQ2F0ZWdvcnlJRHMgPSBzb3J0IHsgJENhdGVnb3J5eyRhfSBjbXAgJENhdGVnb3J5eyRifSB9ICgga2V5cyAlQ2F0ZWdvcnkgKTsKCiAgICByZXR1cm4gXEBDYXRlZ29yeUlEczsKfQoKPWl0ZW0gQ3VzdG9tZXJDYXRlZ29yeVNlYXJjaCgpCgpnZXQgdGhlIGNhdGVnb3J5IHNlYXJjaCBhcyBoYXNoCgogICAgbXkgJENhdGVnb3J5SURBcnJheVJlZiA9IEB7JEZBUU9iamVjdC0+Q3VzdG9tZXJDYXRlZ29yeVNlYXJjaCgKICAgICAgICBDdXN0b21lclVzZXIgID0+ICd0dCcsCiAgICAgICAgUGFyZW50SUQgICAgICA9PiAzLCAgICMgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiAgICAgICAgTW9kZSAgICAgICAgICA9PiAnQ3VzdG9tZXInLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICl9OwoKUmV0dXJuczoKCiAgICAkQ2F0ZWdvcnlJREFycmF5UmVmID0gWwogICAgICAgICc0JywKICAgICAgICAnOCcsCiAgICBdOwoKPWN1dAoKc3ViIEN1c3RvbWVyQ2F0ZWdvcnlTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3VzdG9tZXJVc2VyIE1vZGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBwYXJlbnQgaWQKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1BhcmVudElEfSApIHsKICAgICAgICAkUGFyYW17UGFyZW50SUR9ID0gMDsKICAgIH0KCiAgICBteSAkQ2F0ZWdvcmllcyA9ICRTZWxmLT5HZXRDdXN0b21lckNhdGVnb3JpZXMoCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRQYXJhbXtDdXN0b21lclVzZXJ9LAogICAgICAgIFR5cGUgICAgICAgICA9PiAncm8nLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJUNhdGVnb3J5ID0gJXsgJENhdGVnb3JpZXMtPnsgJFBhcmFte1BhcmVudElEfSB9IH07CiAgICBteSBAQ2F0ZWdvcnlJRHMgPSBzb3J0IHsgJENhdGVnb3J5eyRhfSBjbXAgJENhdGVnb3J5eyRifSB9ICgga2V5cyAlQ2F0ZWdvcnkgKTsKCiAgICBteSBAQWxsb3dlZENhdGVnb3J5SURzOwogICAgbXkgJUFydGljbGVzOwoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdDdXN0b21lckNhdGVnb3J5U2VhcmNoOjpBcnRpY2xlcyc7CiAgICBpZiAoICRTZWxmLT57Q2FjaGV9LT57JENhY2hlS2V5fSApIHsKICAgICAgICAlQXJ0aWNsZXMgPSAleyAkU2VsZi0+e0NhY2hlfS0+eyRDYWNoZUtleX0gfTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGJ1aWxkIHZhbGlkIGlkIHN0cmluZwogICAgICAgIG15ICRWYWxpZElEc1N0cmluZyA9IGpvaW4gJywgJywgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCk7CgogICAgICAgIG15ICRTUUwgPSAiCiAgICAgICAgICAgIFNFTEVDVCBmYXFfaXRlbS5pZCwgZmFxX2l0ZW0uY2F0ZWdvcnlfaWQKICAgICAgICAgICAgRlJPTSBmYXFfaXRlbSwgZmFxX3N0YXRlX3R5cGUsIGZhcV9zdGF0ZQogICAgICAgICAgICBXSEVSRSBmYXFfc3RhdGUuaWQgPSBmYXFfaXRlbS5zdGF0ZV9pZAogICAgICAgICAgICAgICAgQU5EIGZhcV9zdGF0ZS50eXBlX2lkID0gZmFxX3N0YXRlX3R5cGUuaWQKICAgICAgICAgICAgICAgIEFORCBmYXFfc3RhdGVfdHlwZS5uYW1lICE9ICdpbnRlcm5hbCcKICAgICAgICAgICAgICAgIEFORCBmYXFfaXRlbS52YWxpZF9pZCBJTiAoJFZhbGlkSURzU3RyaW5nKQogICAgICAgICAgICAgICAgQU5EIGZhcV9pdGVtLmFwcHJvdmVkID0gMSI7CgogICAgICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICRTUUwsCiAgICAgICAgKTsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJEFydGljbGVzeyAkUm93WzFdIH0rKzsKICAgICAgICB9CgogICAgICAgICMgY2FjaGUKICAgICAgICAkU2VsZi0+e0NhY2hlfS0+eyRDYWNoZUtleX0gPSBcJUFydGljbGVzOwogICAgfQoKICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoQENhdGVnb3J5SURzKSB7CgogICAgICAgICMgZ2V0IGFsbCBzdWJjYXRlZ29yeSBpZHMgZm9yIHRoaXMgY2F0ZWdvcnkKICAgICAgICBteSAkU3ViQ2F0ZWdvcnlJRHMgPSAkU2VsZi0+Q2F0ZWdvcnlTdWJDYXRlZ29yeUlETGlzdCgKICAgICAgICAgICAgUGFyZW50SUQgICAgID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBNb2RlICAgICAgICAgPT4gJFBhcmFte01vZGV9LAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFBhcmFte0N1c3RvbWVyVXNlcn0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0aGlzIGNhdGVnb3J5IGlkCiAgICAgICAgbXkgQElEcyA9ICggJENhdGVnb3J5SUQsIEB7JFN1YkNhdGVnb3J5SURzfSApOwoKICAgICAgICAjIGNoZWNrIGlmIGNhdGVnb3J5IGNvbnRhaW5zIGFydGljbGVzIHdpdGggc3RhdGUgZXh0ZXJuYWwgb3IgcHVibGljCiAgICAgICAgSUQ6CiAgICAgICAgZm9yIG15ICRJRCAoQElEcykgewogICAgICAgICAgICBuZXh0IElEIGlmICEkQXJ0aWNsZXN7JElEfTsKICAgICAgICAgICAgcHVzaCBAQWxsb3dlZENhdGVnb3J5SURzLCAkQ2F0ZWdvcnlJRDsKICAgICAgICAgICAgbGFzdCBJRDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFxAQWxsb3dlZENhdGVnb3J5SURzOwp9Cgo9aXRlbSBQdWJsaWNDYXRlZ29yeVNlYXJjaCgpCgpnZXQgdGhlIGNhdGVnb3J5IHNlYXJjaCBhcyBoYXNoCgogICAgbXkgJENhdGVnb3J5SURBcnJheVJlZiA9ICRGQVFPYmplY3QtPlB1YmxpY0NhdGVnb3J5U2VhcmNoKAogICAgICAgIFBhcmVudElEICAgICAgPT4gMywgICAjIChvcHRpb25hbCwgZGVmYXVsdCAwKQogICAgICAgIE1vZGUgICAgICAgICAgPT4gJ1B1YmxpYycsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJENhdGVnb3J5SURBcnJheVJlZiA9IFsKICAgICAgICAnNCcsCiAgICAgICAgJzgnLAogICAgXTsKCj1jdXQKCnN1YiBQdWJsaWNDYXRlZ29yeVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhNb2RlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1BhcmVudElEfSApIHsKICAgICAgICAkUGFyYW17UGFyZW50SUR9ID0gMDsKICAgIH0KCiAgICBteSAkQ2F0ZWdvcnlMaXN0Q2F0ZWdvcmllcyA9ICRTZWxmLT5DYXRlZ29yeUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gW10gaWYgISRDYXRlZ29yeUxpc3RDYXRlZ29yaWVzLT57ICRQYXJhbXtQYXJlbnRJRH0gfTsKCiAgICBteSAlQ2F0ZWdvcnkgPSAleyAkQ2F0ZWdvcnlMaXN0Q2F0ZWdvcmllcy0+eyAkUGFyYW17UGFyZW50SUR9IH0gfTsKICAgIG15IEBDYXRlZ29yeUlEcyA9IHNvcnQgeyAkQ2F0ZWdvcnl7JGF9IGNtcCAkQ2F0ZWdvcnl7JGJ9IH0gKCBrZXlzICVDYXRlZ29yeSApOwogICAgbXkgQEFsbG93ZWRDYXRlZ29yeUlEczsKCiAgICAjIGJ1aWxkIHZhbGlkIGlkIHN0cmluZwogICAgbXkgJFZhbGlkSURzU3RyaW5nID0gam9pbiAnLCAnLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoQENhdGVnb3J5SURzKSB7CgogICAgICAgICMgZ2V0IGFsbCBzdWJjYXRlZ29yeSBpZHMgZm9yIHRoaXMgY2F0ZWdvcnkKICAgICAgICBteSAkU3ViQ2F0ZWdvcnlJRHMgPSAkU2VsZi0+Q2F0ZWdvcnlTdWJDYXRlZ29yeUlETGlzdCgKICAgICAgICAgICAgUGFyZW50SUQgICAgID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBNb2RlICAgICAgICAgPT4gJFBhcmFte01vZGV9LAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFBhcmFte0N1c3RvbWVyVXNlcn0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0aGlzIGNhdGVnb3J5IGlkCiAgICAgICAgbXkgQElEcyA9ICggJENhdGVnb3J5SUQsIEB7JFN1YkNhdGVnb3J5SURzfSApOwoKICAgICAgICAjIGNoZWNrIGlmIGNhdGVnb3J5IGNvbnRhaW5zIGFydGljbGVzIHdpdGggc3RhdGUgcHVibGljCiAgICAgICAgbXkgJEZvdW5kQXJ0aWNsZSA9IDA7CgogICAgICAgIG15ICRTUUwgPSAiCiAgICAgICAgICAgIFNFTEVDVCBmYXFfaXRlbS5pZAogICAgICAgICAgICBGUk9NIGZhcV9pdGVtLCBmYXFfc3RhdGVfdHlwZSwgZmFxX3N0YXRlCiAgICAgICAgICAgIFdIRVJFIGZhcV9pdGVtLmNhdGVnb3J5X2lkID0gPwogICAgICAgICAgICAgICAgQU5EIGZhcV9pdGVtLnZhbGlkX2lkIElOICgkVmFsaWRJRHNTdHJpbmcpCiAgICAgICAgICAgICAgICBBTkQgZmFxX3N0YXRlLmlkID0gZmFxX2l0ZW0uc3RhdGVfaWQKICAgICAgICAgICAgICAgIEFORCBmYXFfc3RhdGUudHlwZV9pZCA9IGZhcV9zdGF0ZV90eXBlLmlkCiAgICAgICAgICAgICAgICBBTkQgZmFxX3N0YXRlX3R5cGUubmFtZSA9ICdwdWJsaWMnCiAgICAgICAgICAgICAgICBBTkQgZmFxX2l0ZW0uYXBwcm92ZWQgPSAxIjsKCiAgICAgICAgSUQ6CiAgICAgICAgZm9yIG15ICRJRCAoQElEcykgewoKICAgICAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgICAgICAgICAgQmluZCAgPT4gWyBcJElEIF0sCiAgICAgICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgICAgICRGb3VuZEFydGljbGUgPSAkUm93WzBdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxhc3QgSUQgaWYgJEZvdW5kQXJ0aWNsZTsKICAgICAgICB9CgogICAgICAgICMgYW4gYXJ0aWNsZSB3YXMgZm91bmQKICAgICAgICBpZiAoJEZvdW5kQXJ0aWNsZSkgewogICAgICAgICAgICBwdXNoIEBBbGxvd2VkQ2F0ZWdvcnlJRHMsICRDYXRlZ29yeUlEOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXEBBbGxvd2VkQ2F0ZWdvcnlJRHM7Cgp9Cgo9aXRlbSBHZXRVc2VyQ2F0ZWdvcmllcygpCgpnZXQgdXNlciBjYXRlZ29yeS1ncm91cHMKCiAgICBteSAkVXNlckNhdGVnb3J5R3JvdXBIYXNoUmVmID0gJEZBUU9iamVjdC0+R2V0VXNlckNhdGVnb3JpZXMoCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkVXNlckNhdGVnb3J5R3JvdXBIYXNoUmVmID0gewogICAgICAgIDEgPT4ge30sCiAgICAgICAgMCA9PiB7CiAgICAgICAgICAgIDEgPT4gJ01pc2MnLAogICAgICAgICAgICAyID0+ICdNeSBDYXRlZ29yeScsCiAgICAgICAgfSwKICAgICAgICAyID0+IHsKICAgICAgICAgICAgMyA9PiAnU3ViIENhdGVnb3J5IEEnLAogICAgICAgICAgICA0ID0+ICdTdWIgQ2F0ZWdvcnkgQicsCiAgICAgICAgfSwKICAgICAgICAzID0+IHt9LAogICAgICAgIDQgPT4ge30sCiAgICB9OwoKPWN1dAoKc3ViIEdldFVzZXJDYXRlZ29yaWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFR5cGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENhdGVnb3JpZXMgPSAkU2VsZi0+Q2F0ZWdvcnlMaXN0KAogICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJENhdGVnb3J5R3JvdXBzID0gJFNlbGYtPkNhdGVnb3J5R3JvdXBHZXRBbGwoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKICAgIG15ICVVc2VyR3JvdXBzOwogICAgaWYgKCAhJFNlbGYtPntDYWNoZX0tPntHZXRVc2VyQ2F0ZWdvcmllc30tPntHcm91cE1lbWJlckxpc3R9ICkgewogICAgICAgICVVc2VyR3JvdXBzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPntDYWNoZX0tPntHZXRVc2VyQ2F0ZWdvcmllc30tPntHcm91cE1lbWJlckxpc3R9ID0gXCVVc2VyR3JvdXBzOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJVVzZXJHcm91cHMgPSAleyAkU2VsZi0+e0NhY2hlfS0+e0dldFVzZXJDYXRlZ29yaWVzfS0+e0dyb3VwTWVtYmVyTGlzdH0gfTsKICAgIH0KCiAgICBteSAkVXNlckNhdGVnb3JpZXMgPSAkU2VsZi0+X1VzZXJDYXRlZ29yaWVzKAogICAgICAgIENhdGVnb3JpZXMgICAgID0+ICRDYXRlZ29yaWVzLAogICAgICAgIENhdGVnb3J5R3JvdXBzID0+ICRDYXRlZ29yeUdyb3VwcywKICAgICAgICBVc2VyR3JvdXBzICAgICA9PiBcJVVzZXJHcm91cHMsCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkVXNlckNhdGVnb3JpZXM7Cn0KCj1pdGVtIEdldFVzZXJDYXRlZ29yaWVzTG9uZ05hbWVzKCkKCmdldCB1c2VyIGNhdGVnb3J5LWdyb3VwcyAoc2hvdyBjYXRlZ29yeSBsb25nIG5hbWVzKQoKICAgIG15ICRVc2VyQ2F0ZWdvcnlHcm91cEhhc2hSZWYgPSAkRkFRT2JqZWN0LT5HZXRVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRVc2VyQ2F0ZWdvcnlHcm91cEhhc2hSZWYgPSB7CiAgICAgICAgMSA9PiAnTWlzYycsCiAgICAgICAgMiA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgIDMgPT4gJ015IENhdGVnb3J5OjpTdWIgQ2F0ZWdvcnkgQScsCiAgICAgICAgNCA9PiAnTXkgQ2F0ZWdvcnk6OlN1YiBDYXRlZ29yeSBBJywKICAgIH07Cgo9Y3V0CgpzdWIgR2V0VXNlckNhdGVnb3JpZXNMb25nTmFtZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVHlwZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjYXRlZ29yaWVzIHdoZXJlIHVzZXIgaGFzIHJpZ2h0cwogICAgbXkgJFVzZXJDYXRlZ29yaWVzID0gJFNlbGYtPkdldFVzZXJDYXRlZ29yaWVzKAogICAgICAgIFR5cGUgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBhbGwgY2F0ZWdvcmllcyB3aXRoIHRoZWlyIGxvbmcgbmFtZXMKICAgIG15ICRDYXRlZ29yeVRyZWUgPSAkU2VsZi0+Q2F0ZWdvcnlUcmVlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgdG8gc3RvcmUgdGhlIHVzZXIgY2F0ZWdvcmllcyB3aXRoIHRoZWlyIGxvbmcgbmFtZXMKICAgIG15ICVVc2VyQ2F0ZWdvcmllc0xvbmdOYW1lczsKCiAgICAjIGdldCB0aGUgbG9uZyBuYW1lcyBvZiB0aGUgY2F0ZWdvcmllcyB3aGVyZSB1c2VyIGhhcyByaWdodHMKICAgIFBBUkVOVElEOgogICAgZm9yIG15ICRQYXJlbnRJRCAoIHNvcnQga2V5cyAleyRVc2VyQ2F0ZWdvcmllc30gKSB7CgogICAgICAgIG5leHQgUEFSRU5USUQgaWYgISRVc2VyQ2F0ZWdvcmllcy0+eyRQYXJlbnRJRH07CiAgICAgICAgbmV4dCBQQVJFTlRJRCBpZiByZWYgJFVzZXJDYXRlZ29yaWVzLT57JFBhcmVudElEfSBuZSAnSEFTSCc7CiAgICAgICAgbmV4dCBQQVJFTlRJRCBpZiAhJXsgJFVzZXJDYXRlZ29yaWVzLT57JFBhcmVudElEfSB9OwoKICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBzb3J0IGtleXMgJXsgJFVzZXJDYXRlZ29yaWVzLT57JFBhcmVudElEfSB9ICkgewogICAgICAgICAgICAkVXNlckNhdGVnb3JpZXNMb25nTmFtZXN7JENhdGVnb3J5SUR9ID0gJENhdGVnb3J5VHJlZS0+eyRDYXRlZ29yeUlEfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFwlVXNlckNhdGVnb3JpZXNMb25nTmFtZXM7Cn0KCj1pdGVtIEdldEN1c3RvbWVyQ2F0ZWdvcmllcygpCgpnZXQgY3VzdG9tZXIgdXNlciBjYXRlZ29yaWVzCgogICAgbXkgJEN1c3RvbWVyVXNlckNhdGVnb3J5SGFzaFJlZiA9ICRGQVFPYmplY3QtPkdldEN1c3RvbWVyQ2F0ZWdvcmllcygKICAgICAgICBDdXN0b21lclVzZXIgPT4gJ2hhbnMnLAogICAgICAgIFR5cGUgICAgICAgICA9PiAncncnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJEN1c3RvbWVyVXNlckNhdGVnb3J5SGFzaFJlZiA9IHsKICAgICAgICAxID0+IHt9LAogICAgICAgIDAgPT4gewogICAgICAgICAgICAxID0+ICdNaXNjJywKICAgICAgICAgICAgMiA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgIH0sCiAgICAgICAgMiA9PiB7CiAgICAgICAgICAgIDMgPT4gJ1N1YiBDYXRlZ29yeSBBJywKICAgICAgICAgICAgNCA9PiAnU3ViIENhdGVnb3J5IEInLAogICAgICAgIH0sCiAgICAgICAgMyA9PiB7fSwKICAgICAgICA0ID0+IHt9LAogICAgfTsKCj1jdXQKCnN1YiBHZXRDdXN0b21lckNhdGVnb3JpZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3VzdG9tZXJVc2VyIFR5cGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0dldEN1c3RvbWVyQ2F0ZWdvcmllczo6Q3VzdG9tZXJVc2VyOjonIC4gJFBhcmFte0N1c3RvbWVyVXNlcn07CiAgICBpZiAoIGRlZmluZWQgJFNlbGYtPntDYWNoZX0tPnskQ2FjaGVLZXl9ICkgewoKICAgICAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPnskQ2FjaGVLZXl9OwogICAgfQoKICAgICMgZ2V0IGFsbCB2YWxpZCBjYXRlZ29yaWVzCiAgICBteSAkQ2F0ZWdvcmllcyA9ICRTZWxmLT5DYXRlZ29yeUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAkQ2F0ZWdvcnlHcm91cHMgPSAkU2VsZi0+Q2F0ZWdvcnlHcm91cEdldEFsbCgKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVVc2VyR3JvdXBzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyR3JvdXAnKS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17Q3VzdG9tZXJVc2VyfSwKICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgKTsKCiAgICBteSAkQ3VzdG9tZXJDYXRlZ29yaWVzID0gJFNlbGYtPl9Vc2VyQ2F0ZWdvcmllcygKICAgICAgICBDYXRlZ29yaWVzICAgICA9PiAkQ2F0ZWdvcmllcywKICAgICAgICBDYXRlZ29yeUdyb3VwcyA9PiAkQ2F0ZWdvcnlHcm91cHMsCiAgICAgICAgVXNlckdyb3VwcyAgICAgPT4gXCVVc2VyR3JvdXBzLAogICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlfS0+eyRDYWNoZUtleX0gPSAkQ3VzdG9tZXJDYXRlZ29yaWVzOwoKICAgIHJldHVybiAkQ3VzdG9tZXJDYXRlZ29yaWVzOwp9Cgo9aXRlbSBHZXRDdXN0b21lckNhdGVnb3JpZXNMb25nTmFtZXMoKQoKZ2V0IGN1c3RvbWVyIGNhdGVnb3J5LWdyb3VwcyAoc2hvdyBjYXRlZ29yeSBsb25nIG5hbWVzKQoKICAgIG15ICRDdXN0b21lckNhdGVnb3J5R3JvdXBIYXNoUmVmID0gJEZBUU9iamVjdC0+R2V0Q3VzdG9tZXJDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAnaGFucycsCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQ3VzdG9tZXJDYXRlZ29yeUdyb3VwSGFzaFJlZiA9IHsKICAgICAgICAxID0+ICdNaXNjJywKICAgICAgICAyID0+ICdNeSBDYXRlZ29yeScsCiAgICAgICAgMyA9PiAnTXkgQ2F0ZWdvcnk6OlN1YiBDYXRlZ29yeSBBJywKICAgICAgICA0ID0+ICdNeSBDYXRlZ29yeTo6U3ViIENhdGVnb3J5IEEnLAogICAgfTsKCj1jdXQKCnN1YiBHZXRDdXN0b21lckNhdGVnb3JpZXNMb25nTmFtZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3VzdG9tZXJVc2VyIFR5cGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY2F0ZWdvcmllcyB3aGVyZSB1c2VyIGhhcyByaWdodHMKICAgIG15ICRDdXN0b21lckNhdGVnb3JpZXMgPSAkU2VsZi0+R2V0Q3VzdG9tZXJDYXRlZ29yaWVzKAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAkUGFyYW17Q3VzdG9tZXJVc2VyfSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBleHRyYWN0IGNhdGVnb3J5IGlkcwogICAgbXkgJUFsbENhdGVnb3J5SURzOwogICAgZm9yIG15ICRQYXJlbnRJRCAoIHNvcnQga2V5cyAleyRDdXN0b21lckNhdGVnb3JpZXN9ICkgewogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIHNvcnQga2V5cyAleyAkQ3VzdG9tZXJDYXRlZ29yaWVzLT57JFBhcmVudElEfSB9ICkgewogICAgICAgICAgICAkQWxsQ2F0ZWdvcnlJRHN7JENhdGVnb3J5SUR9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgYWxsIGN1c3RvbWVyIGNhdGVnb3J5IGlkcwogICAgbXkgQEN1c3RvbWVyQ2F0ZWdvcnlJRHM7CiAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCAwLCBrZXlzICVBbGxDYXRlZ29yeUlEcyApIHsKICAgICAgICBwdXNoIEBDdXN0b21lckNhdGVnb3J5SURzLCBAewogICAgICAgICAgICAkU2VsZi0+Q3VzdG9tZXJDYXRlZ29yeVNlYXJjaCgKICAgICAgICAgICAgICAgIFBhcmVudElEICAgICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkUGFyYW17Q3VzdG9tZXJVc2VyfSwKICAgICAgICAgICAgICAgIE1vZGUgICAgICAgICA9PiAnQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKQogICAgICAgIH07CiAgICB9CgogICAgIyBidWlsZCBjdXN0b21lciBjYXRlZ29yeSBoYXNoCiAgICAkQ3VzdG9tZXJDYXRlZ29yaWVzID0ge307CiAgICBmb3IgbXkgJENhdGVnb3J5SUQgKEBDdXN0b21lckNhdGVnb3J5SURzKSB7CiAgICAgICAgbXkgJUNhdGVnb3J5ID0gJFNlbGYtPkNhdGVnb3J5R2V0KAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJEN1c3RvbWVyQ2F0ZWdvcmllcy0+eyAkQ2F0ZWdvcnl7UGFyZW50SUR9IH0tPnsgJENhdGVnb3J5e0NhdGVnb3J5SUR9IH0gPSAkQ2F0ZWdvcnl7TmFtZX07CiAgICB9CgogICAgIyBnZXQgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGVpciBsb25nIG5hbWVzCiAgICBteSAkQ2F0ZWdvcnlUcmVlID0gJFNlbGYtPkNhdGVnb3J5VHJlZUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIHRvIHN0b3JlIHRoZSB1c2VyIGNhdGVnb3JpZXMgd2l0aCB0aGVpciBsb25nIG5hbWVzCiAgICBteSAlQ3VzdG9tZXJDYXRlZ29yaWVzTG9uZ05hbWVzOwoKICAgICMgZ2V0IHRoZSBsb25nIG5hbWVzIG9mIHRoZSBjYXRlZ29yaWVzIHdoZXJlIHVzZXIgaGFzIHJpZ2h0cwogICAgUEFSRU5USUQ6CiAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCBrZXlzICV7JEN1c3RvbWVyQ2F0ZWdvcmllc30gKSB7CgogICAgICAgIG5leHQgUEFSRU5USUQgaWYgISRDdXN0b21lckNhdGVnb3JpZXMtPnskUGFyZW50SUR9OwogICAgICAgIG5leHQgUEFSRU5USUQgaWYgcmVmICRDdXN0b21lckNhdGVnb3JpZXMtPnskUGFyZW50SUR9IG5lICdIQVNIJzsKICAgICAgICBuZXh0IFBBUkVOVElEIGlmICEleyAkQ3VzdG9tZXJDYXRlZ29yaWVzLT57JFBhcmVudElEfSB9OwoKICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBzb3J0IGtleXMgJXsgJEN1c3RvbWVyQ2F0ZWdvcmllcy0+eyRQYXJlbnRJRH0gfSApIHsKICAgICAgICAgICAgJEN1c3RvbWVyQ2F0ZWdvcmllc0xvbmdOYW1lc3skQ2F0ZWdvcnlJRH0gPSAkQ2F0ZWdvcnlUcmVlLT57JENhdGVnb3J5SUR9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXCVDdXN0b21lckNhdGVnb3JpZXNMb25nTmFtZXM7Cn0KCj1pdGVtIEdldFB1YmxpY0NhdGVnb3JpZXNMb25nTmFtZXMoKQoKZ2V0IHB1YmxpYyBjYXRlZ29yeS1ncm91cHMgKHNob3cgY2F0ZWdvcnkgbG9uZyBuYW1lcykKCiAgICBteSAkUHVibGljQ2F0ZWdvcnlHcm91cEhhc2hSZWYgPSAkRkFRT2JqZWN0LT5HZXRQdWJsaWNDYXRlZ29yaWVzTG9uZ05hbWVzKAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFB1YmxpY0NhdGVnb3J5R3JvdXBIYXNoUmVmID0gewogICAgICAgIDEgPT4gJ01pc2MnLAogICAgICAgIDIgPT4gJ015IENhdGVnb3J5JywKICAgICAgICAzID0+ICdNeSBDYXRlZ29yeTo6U3ViIENhdGVnb3J5IEEnLAogICAgICAgIDQgPT4gJ015IENhdGVnb3J5OjpTdWIgQ2F0ZWdvcnkgQScsCiAgICB9OwoKPWN1dAoKc3ViIEdldFB1YmxpY0NhdGVnb3JpZXNMb25nTmFtZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVHlwZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBhbGwgY2F0ZWdvcmllcwogICAgbXkgJFB1YmxpY0NhdGVnb3JpZXMgPSAkU2VsZi0+Q2F0ZWdvcnlMaXN0KCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKTsKCiAgICAjIGV4dHJhY3QgY2F0ZWdvcnkgaWRzCiAgICBteSAlQWxsQ2F0ZWdvcnlJRHM7CiAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCBrZXlzICV7JFB1YmxpY0NhdGVnb3JpZXN9ICkgewogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIHNvcnQga2V5cyAleyAkUHVibGljQ2F0ZWdvcmllcy0+eyRQYXJlbnRJRH0gfSApIHsKICAgICAgICAgICAgJEFsbENhdGVnb3J5SURzeyRDYXRlZ29yeUlEfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGFsbCBwdWJsaWMgY2F0ZWdvcnkgaWRzCiAgICBteSBAUHVibGljQ2F0ZWdvcnlJRHM7CiAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCAwLCBrZXlzICVBbGxDYXRlZ29yeUlEcyApIHsKICAgICAgICBwdXNoIEBQdWJsaWNDYXRlZ29yeUlEcywgQHsKICAgICAgICAgICAgJFNlbGYtPlB1YmxpY0NhdGVnb3J5U2VhcmNoKAogICAgICAgICAgICAgICAgUGFyZW50SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgICAgICBNb2RlICAgICA9PiAnUHVibGljJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKQogICAgICAgIH07CiAgICB9CgogICAgIyBidWlsZCBwdWJsaWMgY2F0ZWdvcnkgaGFzaAogICAgJFB1YmxpY0NhdGVnb3JpZXMgPSB7fTsKICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoQFB1YmxpY0NhdGVnb3J5SURzKSB7CiAgICAgICAgbXkgJUNhdGVnb3J5ID0gJFNlbGYtPkNhdGVnb3J5R2V0KAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJFB1YmxpY0NhdGVnb3JpZXMtPnsgJENhdGVnb3J5e1BhcmVudElEfSB9LT57ICRDYXRlZ29yeXtDYXRlZ29yeUlEfSB9ID0gJENhdGVnb3J5e05hbWV9OwogICAgfQoKICAgICMgZ2V0IGFsbCBjYXRlZ29yaWVzIHdpdGggdGhlaXIgbG9uZyBuYW1lcwogICAgbXkgJENhdGVnb3J5VHJlZSA9ICRTZWxmLT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyB0byBzdG9yZSB0aGUgdXNlciBjYXRlZ29yaWVzIHdpdGggdGhlaXIgbG9uZyBuYW1lcwogICAgbXkgJVB1YmxpY0NhdGVnb3JpZXNMb25nTmFtZXM7CgogICAgIyBnZXQgdGhlIGxvbmcgbmFtZXMgb2YgdGhlIGNhdGVnb3JpZXMgd2hlcmUgdXNlciBoYXMgcmlnaHRzCiAgICBQQVJFTlRJRDoKICAgIGZvciBteSAkUGFyZW50SUQgKCBzb3J0IGtleXMgJXskUHVibGljQ2F0ZWdvcmllc30gKSB7CgogICAgICAgIG5leHQgUEFSRU5USUQgaWYgISRQdWJsaWNDYXRlZ29yaWVzLT57JFBhcmVudElEfTsKICAgICAgICBuZXh0IFBBUkVOVElEIGlmIHJlZiAkUHVibGljQ2F0ZWdvcmllcy0+eyRQYXJlbnRJRH0gbmUgJ0hBU0gnOwogICAgICAgIG5leHQgUEFSRU5USUQgaWYgISV7ICRQdWJsaWNDYXRlZ29yaWVzLT57JFBhcmVudElEfSB9OwoKICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBzb3J0IGtleXMgJXsgJFB1YmxpY0NhdGVnb3JpZXMtPnskUGFyZW50SUR9IH0gKSB7CiAgICAgICAgICAgICRQdWJsaWNDYXRlZ29yaWVzTG9uZ05hbWVzeyRDYXRlZ29yeUlEfSA9ICRDYXRlZ29yeVRyZWUtPnskQ2F0ZWdvcnlJRH07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJVB1YmxpY0NhdGVnb3JpZXNMb25nTmFtZXM7Cn0KCj1pdGVtIENoZWNrQ2F0ZWdvcnlVc2VyUGVybWlzc2lvbigpCgpnZXQgdXNlciBwZXJtaXNzaW9uIGZvciBhIGNhdGVnb3J5CgogICAgbXkgJFBlcm1pc3Npb25TdHJpbmcgPSAkRkFRT2JqZWN0LT5DaGVja0NhdGVnb3J5VXNlclBlcm1pc3Npb24oCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAnMTIzJywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkUGVybWlzc2lvblN0cmluZyA9ICdydyc7ICAgICAgICAgICAgICAgIyBvciAncm8nIG9yICcnCgo9Y3V0CgpzdWIgQ2hlY2tDYXRlZ29yeVVzZXJQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENhdGVnb3J5SUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFVzZXJDYXRlZ29yaWVzID0gJFNlbGYtPkdldFVzZXJDYXRlZ29yaWVzKAogICAgICAgIFR5cGUgICA9PiAncm8nLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgZm9yIG15ICRQZXJtaXNzaW9uIChxdyhydyBybykpIHsKICAgICAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCBrZXlzICV7JFVzZXJDYXRlZ29yaWVzfSApIHsKICAgICAgICAgICAgbXkgJENhdGVnb3JpZXMgPSAkVXNlckNhdGVnb3JpZXMtPnskUGFyZW50SUR9OwogICAgICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBzb3J0IGtleXMgJXskQ2F0ZWdvcmllc30gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRDYXRlZ29yeUlEID09ICRQYXJhbXtDYXRlZ29yeUlEfSApIHsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRQZXJtaXNzaW9uOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAnJzsKfQoKPWl0ZW0gQ2hlY2tDYXRlZ29yeUN1c3RvbWVyUGVybWlzc2lvbigpCgpnZXQgY3VzdG9tZXIgdXNlciBwZXJtaXNzaW9uIGZvciBhIGNhdGVnb3J5CgogICAgbXkgJFBlcm1pc3Npb25TdHJpbmcgJEZBUU9iamVjdC0+Q2hlY2tDYXRlZ29yeUN1c3RvbWVyUGVybWlzc2lvbigKICAgICAgICBDdXN0b21lclVzZXIgPT4gJ21tJywKICAgICAgICBDYXRlZ29yeUlEICAgPT4gJzEyMycsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkUGVybWlzc2lvblN0cmluZyA9ICdydyc7ICAgICAgICAgICAgICAgIyBvciAncm8nIG9yICcnCgo9Y3V0CgpzdWIgQ2hlY2tDYXRlZ29yeUN1c3RvbWVyUGVybWlzc2lvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDdXN0b21lclVzZXIgQ2F0ZWdvcnlJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgbXkgJFBlcm1pc3Npb24gKHF3KHJ3IHJvKSkgewogICAgICAgIG15ICRDdXN0b21lckNhdGVnb3JpZXMgPSAkU2VsZi0+R2V0Q3VzdG9tZXJDYXRlZ29yaWVzKAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFBhcmFte0N1c3RvbWVyVXNlcn0sCiAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAncm8nLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBmb3IgbXkgJFBhcmVudElEICggc29ydCBrZXlzICV7JEN1c3RvbWVyQ2F0ZWdvcmllc30gKSB7CiAgICAgICAgICAgIG15ICRDYXRlZ29yaWVzID0gJEN1c3RvbWVyQ2F0ZWdvcmllcy0+eyRQYXJlbnRJRH07CiAgICAgICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIHNvcnQga2V5cyAleyRDYXRlZ29yaWVzfSApIHsKICAgICAgICAgICAgICAgIGlmICggJENhdGVnb3J5SUQgPT0gJFBhcmFte0NhdGVnb3J5SUR9ICkgewoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFBlcm1pc3Npb247CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICcnOwp9Cgo9aXRlbSBTZXRDYXRlZ29yeUdyb3VwKCkKCnNldCBncm91cHMgdG8gYSBjYXRlZ29yeQoKICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+U2V0Q2F0ZWdvcnlHcm91cCgKICAgICAgICBDYXRlZ29yeUlEID0+IDMsCiAgICAgICAgR3JvdXBJRHMgICA9PiBbIDIsNCwxLDUsNzcgXSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBncm91cHMgY291bGQgbm90IGJlIHNldCB0byBhIGNhdGVnb3J5Cgo9Y3V0CgpzdWIgU2V0Q2F0ZWdvcnlHcm91cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDYXRlZ29yeUlEIEdyb3VwSURzIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBkZWxldGUgb2xkIGdyb3VwcwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIERFTEVURSBGUk9NIGZhcV9jYXRlZ29yeV9ncm91cAogICAgICAgICAgICBXSEVSRSBjYXRlZ29yeV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NhdGVnb3J5SUR9IF0sCiAgICApOwoKICAgICMgaW5zZXJ0IGdyb3VwcwogICAgJFBhcmFte0NhdGVnb3J5SUR9ID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmFte0NhdGVnb3J5SUR9LCAnSW50ZWdlcicgKTsKICAgIGZvciBteSAkR3JvdXBJRCAoIEB7ICRQYXJhbXtHcm91cElEc30gfSApIHsKCiAgICAgICAgIyBkYiBxdW90ZQogICAgICAgICRHcm91cElEID0gJERCT2JqZWN0LT5RdW90ZSggJEdyb3VwSUQsICdJbnRlZ2VyJyApOwoKICAgICAgICBteSAkU1FMID0gIgogICAgICAgICAgICBJTlNFUlQgSU5UTyBmYXFfY2F0ZWdvcnlfZ3JvdXAgKGNhdGVnb3J5X2lkLCBncm91cF9pZCwgY2hhbmdlZCwgY2hhbmdlZF9ieSwgY3JlYXRlZCwKICAgICAgICAgICAgICAgIGNyZWF0ZWRfYnkpCiAgICAgICAgICAgIFZBTFVFUyAoJFBhcmFte0NhdGVnb3J5SUR9LCAkR3JvdXBJRCwgY3VycmVudF90aW1lc3RhbXAsICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgY3VycmVudF90aW1lc3RhbXAsICRQYXJhbXtVc2VySUR9KSI7CgogICAgICAgICMgd3JpdGUgYXR0YWNobWVudCB0byBkYgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbyggU1FMID0+ICRTUUwgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWJlZ2luIEludGVybmFsOgoKPWl0ZW0gX1VzZXJDYXRlZ29yaWVzKCkKCnJlZHVjZXMgdGhlIGNhdGVnb3JpZXMgKCBmcm9tIENhdGVnb3J5TGlzdCgpICkgdG8gb25seSB0aGUgb25lcyB3aGVyZSB0aGUgdXNlciBoYXMgcHJpdmlsZWdlcy4KCiAgICBteSAkVXNlckNhdGVnb3JpZXMgPSAkRkFRT2JqZWN0LT5fVXNlckNhdGVnb3JpZXMoCiAgICAgICAgQ2F0ZWdvcmllcyAgICAgPT4gJENhdGVnb3J5SGFzaFJlZiwgICAgICAgICAjIGFzIHJldHVybmVkIGZvcm0gQ2F0ZWdvcnlMaXN0KCkKICAgICAgICBDYXRlZ29yeUdyb3VwcyA9PiAkQ2F0ZWdvcnlHcm91cEhhc2hSZWYsICAgICAjIGFzIHJldHVybmVkIGZyb20gQ2F0ZWdvcnlHcm91cEdldEFsbAogICAgICAgIFVzZXJHcm91cHMgICAgID0+ICRVc2VyR3JvdXBzSGFzaFJlZiwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAxMjMsCiAgICApOwoKUmV0dXJuczoKCiAgICAkVXNlckNhdGVnb2llcyA9IHsKICAgICAgICAwID0+IHsKICAgICAgICAgICAgMSA9PiAnTWlzYycsCiAgICAgICAgICAgIDIgPT4gJ015IENhdGVnb3J5JywKICAgICAgICB9LAogICAgICAgIDIgPT4gewogICAgICAgICAgICAzID0+ICdTdWIgQ2F0ZWdvcnkgQScsCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgX1VzZXJDYXRlZ29yaWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENhdGVnb3JpZXMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJVVzZXJDYXRlZ29yaWVzOwoKICAgIFBBUkVOVElEOgogICAgZm9yIG15ICRQYXJlbnRJRCAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7ICRQYXJhbXtDYXRlZ29yaWVzfSB9ICkgewoKICAgICAgICBteSAlU3ViQ2F0ZWdvcmllczsKCiAgICAgICAgQ0FURUdPUllJRDoKICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBzb3J0IGtleXMgJXsgJFBhcmFte0NhdGVnb3JpZXN9LT57JFBhcmVudElEfSB9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBjYXRlZ29yeSBncm91cHMKICAgICAgICAgICAgbmV4dCBDQVRFR09SWUlEIGlmICFkZWZpbmVkICRQYXJhbXtDYXRlZ29yeUdyb3Vwc30tPnskQ2F0ZWdvcnlJRH07CgogICAgICAgICAgICAjIGNoZWNrIHVzZXIgZ3JvdXBzCiAgICAgICAgICAgIEdST1VQSUQ6CiAgICAgICAgICAgIGZvciBteSAkR3JvdXBJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17Q2F0ZWdvcnlHcm91cHN9LT57JENhdGVnb3J5SUR9IH0gKSB7CgogICAgICAgICAgICAgICAgbmV4dCBHUk9VUElEIGlmICFkZWZpbmVkICRQYXJhbXtVc2VyR3JvdXBzfS0+eyRHcm91cElEfTsKCiAgICAgICAgICAgICAgICAjIGFkZCBjYXRlZ29yeQogICAgICAgICAgICAgICAgJFN1YkNhdGVnb3JpZXN7JENhdGVnb3J5SUR9ID0gJFBhcmFte0NhdGVnb3JpZXN9LT57JFBhcmVudElEfS0+eyRDYXRlZ29yeUlEfTsKCiAgICAgICAgICAgICAgICAjIGFkZCBlbXB0eSBoYXNoIGlmIGNhdGVnb3J5IGhhcyBubyBzdWJjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICBpZiAoICEkVXNlckNhdGVnb3JpZXN7JENhdGVnb3J5SUR9ICkgewogICAgICAgICAgICAgICAgICAgICRVc2VyQ2F0ZWdvcmllc3skQ2F0ZWdvcnlJRH0gPSB7fTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBsYXN0IEdST1VQSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJFVzZXJDYXRlZ29yaWVzeyRQYXJlbnRJRH0gPSBcJVN1YkNhdGVnb3JpZXM7CiAgICB9CgogICAgcmV0dXJuIFwlVXNlckNhdGVnb3JpZXM7Cn0KCj1lbmQgSW50ZXJuYWw6Cgo9Y3V0CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkZBUTo6TGFuZ3VhZ2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkZBUTo6TGFuZ3VhZ2UgLSBzdWIgbW9kdWxlIG9mIEtlcm5lbDo6U3lzdGVtOjpGQVEKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIEZBUSBsYW5ndWFnZSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gTGFuZ3VhZ2VBZGQoKQoKYWRkIGEgbGFuZ3VhZ2UKCiAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlQWRkKAogICAgICAgIE5hbWUgICA9PiAnU29tZSBMYW5ndWFnZScsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBsYW5ndWFnZSBjb3VsZCBub3QgYmUgYWRkZWQKCj1jdXQKCnN1YiBMYW5ndWFnZUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIElOU0VSVCBJTlRPIGZhcV9sYW5ndWFnZSAobmFtZSkKICAgICAgICAgICAgVkFMVUVTICg/KScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIExhbmd1YWdlRGVsZXRlKCkKCkRlbGV0ZSBhIGxhbmd1YWdlLgoKICAgIG15ICREZWxldGVTdWNjZXNzID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VEZWxldGUoCiAgICAgICAgTGFuZ3VhZ2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zCgogICAgJERlbGV0ZVN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAjIG9yIHVuZGVmIGlmIGxhbmd1YWdlIGNvdWxkIG5vdCBiZSBkZWxldGVkCgo9Y3V0CgpzdWIgTGFuZ3VhZ2VEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KExhbmd1YWdlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSB0aGUgbGFuZ3VhZ2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIERFTEVURSBGUk9NIGZhcV9sYW5ndWFnZQogICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0xhbmd1YWdlSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMYW5ndWFnZUR1cGxpY2F0ZUNoZWNrKCkKCmNoZWNrIGEgbGFuZ3VhZ2UKCiAgICBteSAkRXhpc3RzID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VEdXBsaWNhdGVDaGVjaygKICAgICAgICBOYW1lICAgICAgID0+ICdTb21lIE5hbWUnLAogICAgICAgIExhbmd1YWdlSUQgPT4gMSwgICAgICAgICMgZm9yIHVwZGF0ZQogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRFeGlzdHMgPSAxOyAgICAgICAgICAgICAgICAjIGlmIGxhbmd1YWdlIGFscmVhZHkgZXhpc3RzLCBvciAwIGlmIGRvZXMgbm90IGV4aXN0Cgo9Y3V0CgpzdWIgTGFuZ3VhZ2VEdXBsaWNhdGVDaGVjayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYnVpbGQgU1FMCiAgICBteSBAQmluZCA9ICggXCRQYXJhbXtOYW1lfSApOwogICAgbXkgJFNRTCAgPSAnCiAgICAgICAgU0VMRUNUIGlkCiAgICAgICAgRlJPTSBmYXFfbGFuZ3VhZ2UKICAgICAgICBXSEVSRSBuYW1lID0gPyc7CiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0xhbmd1YWdlSUR9ICkgewogICAgICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17TGFuZ3VhZ2VJRH07CiAgICAgICAgJFNRTCAuPSAiIEFORCBpZCAhPSA/IjsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgcHJlcGFyZSBTUUwgc3RhdGVtZW50CiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgQmluZCAgPT4gXEBCaW5kLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRFeGlzdHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRXhpc3RzID0gMTsKICAgIH0KCiAgICByZXR1cm4gJEV4aXN0czsKfQoKPWl0ZW0gTGFuZ3VhZ2VHZXQoKQoKZ2V0IGEgbGFuZ3VhZ2UgZGV0YWlscyBhcyBhIGhhc2gKCiAgICBteSAlTGFuZ3VhZ2UgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUdldCgKICAgICAgICBMYW5ndWFnZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJUxhbmd1YWdlID0gKAogICAgICAgIExhbmd1YWdlSUQgPT4gJzEnLAogICAgICAgIE5hbWUgICAgICAgPT4gJ2VuJywKICAgICk7Cgo9Y3V0CgpzdWIgTGFuZ3VhZ2VHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTGFuZ3VhZ2VJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgU1FMCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBTRUxFQ1QgaWQsIG5hbWUKICAgICAgICAgICAgRlJPTSBmYXFfbGFuZ3VhZ2UKICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TGFuZ3VhZ2VJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICVEYXRhID0gKAogICAgICAgICAgICBMYW5ndWFnZUlEID0+ICRSb3dbMF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFJvd1sxXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAlRGF0YTsKfQoKPWl0ZW0gTGFuZ3VhZ2VMaXN0KCkKCmdldCB0aGUgbGFuZ3VhZ2UgbGlzdCBhcyBhIGhhc2gKCiAgICBteSAlTGFuZ3VhZ2VzID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJUxhbmd1YWdlcyA9ICgKICAgICAgICAxID0+ICdlbicsCiAgICAgICAgMiA9PiAnZGUnLAogICAgICAgIDMgPT4gJ2VzJywKICAgICk7Cgo9Y3V0CgpzdWIgTGFuZ3VhZ2VMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGJ1aWxkIFNRTAogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgU0VMRUNUIGlkLCBuYW1lCiAgICAgICAgICAgIEZST00gZmFxX2xhbmd1YWdlJywKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRMaXN0eyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgIHJldHVybiAlTGlzdDsKfQoKPWl0ZW0gTGFuZ3VhZ2VMb29rdXAoKQoKVGhpcyBtZXRob2QgZG9lcyBhIGxvb2t1cCBmb3IgYSBGQVEgbGFuZ3VhZ2UuCklmIGEgbGFuZ3VhZ2UgaWQgaXMgZ2l2ZW4sIGl0IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlLgpJZiB0aGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgaXMgZ2l2ZW4sIHRoZSBsYW5ndWFnZSBpZCBpcyByZXR1cm5lZC4KCiAgICBteSAkTGFuZ3VhZ2VOYW1lID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VMb29rdXAoCiAgICAgICAgTGFuZ3VhZ2VJRCA9PiAxLAogICAgKTsKCiAgICBteSAkTGFuZ3VhZ2VJRCA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTG9va3VwKAogICAgICAgIE5hbWUgPT4gJ2VuJywKICAgICk7CgpSZXR1cm5zOgoKICAgICRMYW5ndWFnZU5hbWUgPSAnZW4nOwoKICAgICRMYW5ndWFnZUlEID0gMTsKCj1jdXQKCnN1YiBMYW5ndWFnZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgaWYgYm90aCBwYXJhbWV0ZXJzIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2VJRH0gJiYgJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBMYW5ndWFnZUlEIG9yIE5hbWUgLSBub3QgYm90aCEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGJvdGggcGFyYW1ldGVycyBhcmUgbm90IGdpdmVuCiAgICBpZiAoICEkUGFyYW17TGFuZ3VhZ2VJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTGFuZ3VhZ2VJRCBvciBOYW1lIC0gbm9uZSBpcyBnaXZlbiEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIExhbmd1YWdlSUQgaXMgYSBudW1iZXIKICAgIGlmICggJFBhcmFte0xhbmd1YWdlSUR9ICYmICRQYXJhbXtMYW5ndWFnZUlEfSAhfiBteyBcQSBcZCsgXHogfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkxhbmd1YWdlSUQgbXVzdCBiZSBhIG51bWJlciEgKExhbmd1YWdlSUQ6ICRQYXJhbXtMYW5ndWFnZUlEfSkiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgcHJlcGFyZSBTUUwgc3RhdGVtZW50cwogICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2VJRH0gKSB7CgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgU0VMRUNUIG5hbWUKICAgICAgICAgICAgICAgIEZST00gZmFxX2xhbmd1YWdlCiAgICAgICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TGFuZ3VhZ2VJRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TmFtZX0gKSB7CgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgU0VMRUNUIGlkCiAgICAgICAgICAgICAgICBGUk9NIGZhcV9sYW5ndWFnZQogICAgICAgICAgICAgICAgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJExvb2t1cDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRMb29rdXAgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkTG9va3VwOwp9Cgo9aXRlbSBMYW5ndWFnZVVwZGF0ZSgpCgp1cGRhdGUgYSBsYW5ndWFnZQoKICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VVcGRhdGUoCiAgICAgICAgTGFuZ3VhZ2VJRCA9PiAxLAogICAgICAgIE5hbWUgICAgICAgPT4gJ2RlJywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBsYW5ndWFnZSBjb3VsZCBub3QgYmUgdXBkYXRlZAoKPWN1dAoKc3ViIExhbmd1YWdlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KExhbmd1YWdlSUQgTmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYnVpbGQgU1FMCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgVVBEQVRFIGZhcV9sYW5ndWFnZQogICAgICAgICAgICBTRVQgbmFtZSA9ID8KICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtMYW5ndWFnZUlEfSBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBhbGwgY2FjaGUsIGFzIEZBUUdldCgpIHdpbGwgYmUgYWxzbyBhZmZlY3RlZC4KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkZBUTo6U3RhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkZBUTo6U3RhdGUgLSBzdWIgbW9kdWxlIG9mIEtlcm5lbDo6U3lzdGVtOjpGQVEKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIEZBUSBzdGF0ZSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gU3RhdGVBZGQoKQoKYWRkIGEgc3RhdGUKCiAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPlN0YXRlQWRkKAogICAgICAgIE5hbWUgICA9PiAncHVibGljJywKICAgICAgICBUeXBlSUQgPT4gMSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRTdWNjZXNzID0gMTsgICAgICAgICAgICAgICAjIG9yIHVuZGVmIGlmIHN0YXRlIGNvdWxkIG5vdCBiZSBhZGRlZAoKPWN1dAoKc3ViIFN0YXRlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVHlwZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIElOU0VSVCBJTlRPIGZhcV9zdGF0ZSAobmFtZSwgdHlwZV9pZCkKICAgICAgICAgICAgVkFMVUVTICggPywgPyApJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtUeXBlSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBTdGF0ZUdldCgpCgpnZXQgYSBzdGF0ZSBhcyBoYXNoCgogICAgbXkgJVN0YXRlID0gJEZBUU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgU3RhdGVJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICVTdGF0ZSA9ICgKICAgICAgICBTdGF0ZUlEICA9PiAxLAogICAgICAgIE5hbWUgICAgID0+ICdpbnRlcm5hbCAoYWdlbnQpJywKICAgICAgICBUeXBlSUQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTdGF0ZUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBTUUwKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFNFTEVDVCBpZCwgbmFtZSwgdHlwZV9pZAogICAgICAgICAgICBGUk9NIGZhcV9zdGF0ZQogICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtTdGF0ZUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJURhdGEgPSAoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gJFJvd1swXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBUeXBlSUQgID0+ICRSb3dbMl0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFN0YXRlTGlzdCgpCgpnZXQgdGhlIHN0YXRlIGxpc3QgYXMgaGFzaAoKICAgIG15ICVTdGF0ZXMgPSAkRkFRT2JqZWN0LT5TdGF0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAlU3RhdGVzID0gKAogICAgICAgIDEgPT4gJ2ludGVybmFsIChhZ2VudCknLAogICAgICAgIDIgPT4gJ2V4dGVybmFsIChjdXN0b21lciknLAogICAgICAgIDMgPT4gJ3B1YmxpYyAoYWxsKScsCiAgICApOwoKPWN1dAoKc3ViIFN0YXRlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBTUUwKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFNFTEVDVCBpZCwgbmFtZQogICAgICAgICAgICBGUk9NIGZhcV9zdGF0ZScKICAgICk7CgogICAgbXkgJUxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkTGlzdHsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gJUxpc3Q7Cn0KCj1pdGVtIFN0YXRlVXBkYXRlKCkKCnVwZGF0ZSBhIHN0YXRlCgogICAgbXkgU3VjY2VzcyA9ICRGQVFPYmplY3QtPlN0YXRlVXBkYXRlKAogICAgICAgIFN0YXRlSUQgPT4gMSwKICAgICAgICBOYW1lICAgID0+ICdwdWJsaWMnLAogICAgICAgIFR5cGVJRCAgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICBTdWNjZXNzID0gMTsgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBzdGF0ZSBjb3VsZCBub3QgYmUgdXBkYXRlZAoKPWN1dAoKc3ViIFN0YXRlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN0YXRlSUQgTmFtZSBUeXBlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBTUUwKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFVQREFURSBmYXFfc3RhdGUKICAgICAgICAgICAgU0VUIG5hbWUgPSA/LCB0eXBlX2lkID0gPywKICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtUeXBlSUR9LCBcJFBhcmFte1N0YXRlSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBTdGF0ZVR5cGVHZXQoKQoKZ2V0IGEgc3RhdGUgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkU3RhdGVUeXBlSGFzaFJlZiA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUdldCgKICAgICAgICBTdGF0ZUlEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCk9yCgogICAgbXkgJFN0YXRlVHlwZUhhc2hSZWYgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgTmFtZSAgICA9PiAnaW50ZXJuYWwnLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRTdGF0ZVR5cGVIYXNoUmVmID0gewogICAgICAgICdTdGF0ZUlEJyA9PiAxLAogICAgICAgICdOYW1lJyAgICA9PiAnaW50ZXJuYWwnLAogICAgfTsKCj1jdXQKCnN1YiBTdGF0ZVR5cGVHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkU1FMID0gJwogICAgICAgIFNFTEVDVCBpZCwgbmFtZQogICAgICAgIEZST00gZmFxX3N0YXRlX3R5cGUKICAgICAgICBXSEVSRSc7CiAgICBteSBAQmluZDsKICAgIG15ICRDYWNoZUtleSA9ICdTdGF0ZVR5cGVHZXQ6Oic7CiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1N0YXRlSUR9ICkgewogICAgICAgICRTUUwgLj0gJyBpZCA9ID8nOwogICAgICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17U3RhdGVJRH07CiAgICAgICAgJENhY2hlS2V5IC49ICdJRDo6JyAuICRQYXJhbXtTdGF0ZUlEfTsKICAgIH0KICAgIGVsc2lmICggZGVmaW5lZCAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJFNRTCAuPSAnIG5hbWUgPSA/JzsKICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte05hbWV9OwogICAgICAgICRDYWNoZUtleSAuPSAnTmFtZTo6JyAuICRQYXJhbXtOYW1lfTsKICAgIH0KCiAgICAjIGdldCBjYWNoZSBvYmplY3QKICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBTUUwKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICk7CgogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAlRGF0YSA9ICgKICAgICAgICAgICAgU3RhdGVJRCA9PiAkUm93WzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICRSb3dbMV0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNhY2hlIHJlc3VsdAogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICAgICBUVEwgICA9PiA2MCAqIDYwICogMjQgKiAyLAogICAgKTsKCiAgICByZXR1cm4gXCVEYXRhOwp9Cgo9aXRlbSBTdGF0ZVR5cGVMaXN0KCkKCmdldCB0aGUgc3RhdGUgdHlwZSBsaXN0IGFzIGhhc2ggcmVmZXJlbmNlCgogICAgbXkgJFN0YXRlVHlwZUhhc2hSZWYgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCm9wdGlvbmFsLCBnZXQgc3RhdGUgdHlwZSBsaXN0IGZvciBzb21lIHN0YXRlczoKCiAgICBteSAkU3RhdGVUeXBlSGFzaFJlZiA9ICRGQVFPYmplY3QtPlN0YXRlVHlwZUxpc3QoCiAgICAgICAgVHlwZXMgID0+IFsgJ3B1YmxpYycsICdpbnRlcm5hbCddLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFN0YXRlVHlwZUhhc2hSZWYgPSB7CiAgICAgICAgMSA9PiAnaW50ZXJuYWwnLAogICAgICAgIDMgPT4gJ3B1YmxpYycsCiAgICAgICAgMiA9PiAnZXh0ZXJuYWwnLAogICAgfTsKCj1jdXQKCnN1YiBTdGF0ZVR5cGVMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBidWlsZCBTUUwKICAgIG15ICRTUUwgPSAnCiAgICAgICAgU0VMRUNUIGlkLCBuYW1lCiAgICAgICAgRlJPTSBmYXFfc3RhdGVfdHlwZSc7CgogICAgIyB0eXBlcyBhcmUgZ2l2ZW4KICAgIGlmICggJFBhcmFte1R5cGVzfSApIHsKCiAgICAgICAgaWYgKCByZWYgJFBhcmFte1R5cGVzfSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnVHlwZXMgc2hvdWxkIGJlIGFuIGFycmF5IHJlZmVyZW5jZSEnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjYWxsIFN0YXRlVHlwZUxpc3Qgd2l0aG91dCBwYXJhbWV0ZXJzIHRvIHZhbGlkYXRlIFR5cGVzCiAgICAgICAgbXkgJFN0YXRlVHlwZUxpc3QgPSAkU2VsZi0+U3RhdGVUeXBlTGlzdCggVXNlcklEID0+ICRQYXJhbXtVc2VySUR9ICk7CiAgICAgICAgbXkgJVN0YXRlVHlwZXMgPSByZXZlcnNlICV7JFN0YXRlVHlwZUxpc3R9OwogICAgICAgIG15IEBUeXBlczsKCiAgICAgICAgIyBvbmx5IGFkZCB0eXBlcyB0byBsaXN0IHRoYXQgZXhpc3QKICAgICAgICBUWVBFOgogICAgICAgIGZvciBteSAkVHlwZSAoIEB7ICRQYXJhbXtUeXBlc30gfSApIHsKICAgICAgICAgICAgbmV4dCBUWVBFIGlmICEkU3RhdGVUeXBlc3skVHlwZX07CiAgICAgICAgICAgIHB1c2ggQFR5cGVzLCAiJyRUeXBlJyI7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBzdHJpbmcKICAgICAgICBpZiAoQFR5cGVzKSB7CiAgICAgICAgICAgICRTUUwgLj0gJyBXSEVSRSBuYW1lIElOICggJyAuIGpvaW4oICcsICcsIEBUeXBlcyApIC4gJyApJzsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIHByZXBhcmUgU1FMCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSggU1FMID0+ICRTUUwgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJExpc3R7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgcmV0dXJuIFwlTGlzdDsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkZBUTo6Vm90ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6RkFROjpWb3RlIC0gc3ViIG1vZHVsZSBvZiBLZXJuZWw6OlN5c3RlbTo6RkFRCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBGQVEgdm90ZSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gVm90ZUFkZCgpCgphZGQgYSB2b3RlCgogICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5Wb3RlQWRkKAogICAgICAgIENyZWF0ZWRCeSA9PiAnU29tZSBUZXh0JywKICAgICAgICBJdGVtSUQgICAgPT4gJzEyMzQ1NicsCiAgICAgICAgSVAgICAgICAgID0+ICc1NC40My4zMC4xJywKICAgICAgICBJbnRlcmZhY2UgPT4gJ1NvbWUgVGV4dCcsCiAgICAgICAgUmF0ZSAgICAgID0+IDEwMCwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRTdWNjZXNzID0gMTsgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgdm90ZSBjb3VsZCBub3QgYmUgYWRkZWQKCj1jdXQKCnN1YiBWb3RlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENyZWF0ZWRCeSBJdGVtSUQgSVAgSW50ZXJmYWNlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIElOU0VSVCBJTlRPIGZhcV92b3RpbmcgKGNyZWF0ZWRfYnksIGl0ZW1faWQsIGlwLCBpbnRlcmZhY2UsIHJhdGUsIGNyZWF0ZWQgKQogICAgICAgICAgICBWQUxVRVMgKCA/LCA/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCApJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtDcmVhdGVkQnl9LCBcJFBhcmFte0l0ZW1JRH0sIFwkUGFyYW17SVB9LCBcJFBhcmFte0ludGVyZmFjZX0sCiAgICAgICAgICAgIFwkUGFyYW17UmF0ZX0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBkZWxldGUgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdJdGVtVm90ZURhdGFHZXQ6OicgLiAkUGFyYW17SXRlbUlEfTsKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAnRkFRJywKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFZvdGVEZWxldGUoKQoKZGVsZXRlIGEgdm90ZQoKICAgIG15ICREZWxldGVTdWNjZXNzID0gJEZBUU9iamVjdC0+Vm90ZURlbGV0ZSgKICAgICAgICBWb3RlSUQgPT4gMSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICREZWxldGVTdWNjZXNzID0gMTsgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgdm90ZSBjb3VsZCBub3QgYmUgZGVsZXRlZAoKPWN1dAoKc3ViIFZvdGVEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVm90ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIERFTEVURSBGUk9NIGZhcV92b3RpbmcKICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtWb3RlSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBWb3RlR2V0KCkKCmdldCBhIHZvdGUgaW5mb3JtYXRpb24KCiAgICBteSAlVm90ZURhdGEgPSAkRkFRT2JqZWN0LT5Wb3RlR2V0KAogICAgICAgIENyZWF0ZUJ5ICA9PiAnU29tZSBUZXh0JywKICAgICAgICBJdGVtSUQgICAgPT4gJzEyMzQ1NicsCiAgICAgICAgSVAgICAgICAgID0+ICcxMjcuMC4wLjEnLAogICAgICAgIEludGVyZmFjZSA9PiAnU29tZSBUZXh0JywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICVWb3RlRGF0YSA9ICgKICAgICAgICBJdGVtSUQgICAgPT4gMjMsCiAgICAgICAgUmF0ZSAgICAgID0+IDUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAgb3IgMjUgb3IgNzUgb3IgMTAwCiAgICAgICAgSVAgICAgICAgID0+ICcxOTIuMTY4LjAuMScsCiAgICAgICAgSW50ZXJmYWNlID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGludGVyZmFjZSBJRAogICAgICAgIENyZWF0ZWRCeSA9PiAxLAogICAgICAgIENyZWF0ZWQgICA9PiAnMjAxMS0wNi0xNCAxMjozMjowMycsCiAgICApOwoKPWN1dAoKc3ViIFZvdGVHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3JlYXRlQnkgSXRlbUlEIEludGVyZmFjZSBJUCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSBAVmFsdWVzOwogICAgbXkgJFNRTCA9ICcKICAgICAgICBTRUxFQ1QgY3JlYXRlZF9ieSwgaXRlbV9pZCwgaW50ZXJmYWNlLCBpcCwgY3JlYXRlZCwgcmF0ZQogICAgICAgIEZST00gZmFxX3ZvdGluZwogICAgICAgIFdIRVJFJzsKCiAgICAjIHB1YmxpYwogICAgaWYgKCAkUGFyYW17SW50ZXJmYWNlfSBlcSAnMycgKSB7CiAgICAgICAgJFNRTCAuPSAnCiAgICAgICAgICAgIGlwID0gPwogICAgICAgICAgICBBTkQgaXRlbV9pZCA9ID8nOwogICAgICAgIHB1c2ggQFZhbHVlcywgKCBcJFBhcmFte0lQfSwgXCRQYXJhbXtJdGVtSUR9ICk7CiAgICB9CgogICAgIyBjdXN0b21lcgogICAgZWxzaWYgKCAkUGFyYW17SW50ZXJmYWNlfSBlcSAnMicgfHwgJFBhcmFte0ludGVyZmFjZX0gZXEgJzEnICkgewogICAgICAgICRTUUwgLj0gJwogICAgICAgICAgICBjcmVhdGVkX2J5ID0gPwogICAgICAgICAgICBBTkQgaXRlbV9pZCA9ID8nOwogICAgICAgIHB1c2ggQFZhbHVlcywgKCBcJFBhcmFte0NyZWF0ZUJ5fSwgXCRQYXJhbXtJdGVtSUR9ICk7CiAgICB9CgogICAgIyBsZWF2ZSBhIHNwYWNlIGJldHdlZW4gQU5EIGNvbmRpdGlvbiBhbmQgT1JERVIgQlkgc3RhdGVtZW50CiAgICAkU1FMIC49ICcKICAgICAgICBPUkRFUiBCWSBjcmVhdGVkIERFU0MnOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBcQFZhbHVlcywKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICVEYXRhID0gKAogICAgICAgICAgICBDcmVhdGVkQnkgPT4gJFJvd1swXSwKICAgICAgICAgICAgSXRlbUlEICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIEludGVyZmFjZSA9PiAkUm93WzJdLAogICAgICAgICAgICBJUCAgICAgICAgPT4gJFJvd1szXSwKICAgICAgICAgICAgQ3JlYXRlZCAgID0+ICRSb3dbNF0sCiAgICAgICAgICAgIFJhdGUgICAgICA9PiAkUm93WzVdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIGlmICElRGF0YTsKICAgIHJldHVybiBcJURhdGE7Cn0KCj1pdGVtIFZvdGVTZWFyY2goKQoKcmV0dXJucyBhbiBhcnJheSB3aXRoIFZvdGVJRHMKCiAgICBteSAkVm90ZUlEQXJyYXlyZWYgPSAkRkFRT2JqZWN0LT5Wb3RlU2VhcmNoKAogICAgICAgIEl0ZW1JRCA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFZvdGVJREFycmF5cmVmID0gWwogICAgICAgIDIzLAogICAgICAgIDQ1LAogICAgXTsKCj1jdXQKCnN1YiBWb3RlU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFNFTEVDVCBpZAogICAgICAgICAgICBGUk9NIGZhcV92b3RpbmcKICAgICAgICAgICAgV0hFUkUgaXRlbV9pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSB8fCA1MDAsCiAgICApOwoKICAgIG15IEBWb3RlSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAVm90ZUlEcywgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBWb3RlSURzOwp9Cgo9aXRlbSBJdGVtVm90ZURhdGFHZXQoKQoKUmV0dXJucyBhIGhhc2ggcmVmZXJlbmNlIHdpdGggdGhlIG51bWJlciBvZiB2b3RlcyBhbmQgdGhlIHZvdGUgcmVzdWx0LgoKICAgIG15ICRWb3RlRGF0YUhhc2hSZWYgPSAkRkFRT2JqZWN0LT5JdGVtVm90ZURhdGFHZXQoCiAgICAgICAgSXRlbUlEID0+IDEyMywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRWb3RlRGF0YUhhc2hSZWYgPSB7CiAgICAgICAgUmVzdWx0ID0+IDc1LjAwMDAsCiAgICAgICAgVm90ZXMgID0+IDUKICAgIH07Cgo9Y3V0CgpzdWIgSXRlbVZvdGVEYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjYWNoZSBvYmplY3QKICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdJdGVtVm90ZURhdGFHZXQ6OicgLiAkUGFyYW17SXRlbUlEfTsKICAgIG15ICRDYWNoZSAgICA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgdm90ZSBmcm9tIGRiCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBTRUxFQ1QgY291bnQoKiksIGF2ZyhyYXRlKQogICAgICAgICAgICBGUk9NIGZhcV92b3RpbmcKICAgICAgICAgICAgV0hFUkUgaXRlbV9pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSB8fCA1MDAsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICBpZiAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXtWb3Rlc30gID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtSZXN1bHR9ID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIGNhY2hlIHJlc3VsdAogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICAgICBUVEwgICA9PiA2MCAqIDYwICogMjQgKiAyLAogICAgKTsKCiAgICByZXR1cm4gXCVEYXRhOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNSU1FOjpCYXNlNjQgcXcoKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBiYXNlIHF3KAogICAgS2VybmVsOjpTeXN0ZW06OkZBUVNlYXJjaAogICAgS2VybmVsOjpTeXN0ZW06OkZBUTo6TGFuZ3VhZ2UKICAgIEtlcm5lbDo6U3lzdGVtOjpGQVE6OkNhdGVnb3J5CiAgICBLZXJuZWw6OlN5c3RlbTo6RkFROjpTdGF0ZQogICAgS2VybmVsOjpTeXN0ZW06OkZBUTo6Vm90ZQogICAgS2VybmVsOjpTeXN0ZW06OkV2ZW50SGFuZGxlcgopOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RW5jb2RlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGltZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlR5cGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpGQVEgLSAgRkFRIGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgRkFRIGZ1bmN0aW9ucy4gRS4gZy4gdG8gYWRkIEZBUXMgb3IgdG8gZ2V0IEZBUXMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgbGlrZSBlc2NhcGUgc3RyaW5nIG5lZWRlZCBmb3Igc29tZSBkYXRhYmFzZXMgKGUuZy4gb3JhY2xlKQogICAgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5HZXREYXRhYmFzZUZ1bmN0aW9uKCdMaWtlRXNjYXBlU3RyaW5nJyk7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgZGVmYXVsdCBvcHRpb25zCiAgICAkU2VsZi0+e1ZvdGluZ30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6Vm90aW5nJyk7CgogICAgIyBnZXQgdGhlIGNhY2hlIFRUTCAoaW4gc2Vjb25kcykKICAgICRTZWxmLT57Q2FjaGVUVEx9ID0gaW50KCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6Q2FjaGVUVEwnKSB8fCA2MCAqIDYwICogMjQgKiAyICk7CgogICAgIyBpbml0IG9mIGV2ZW50IGhhbmRsZXIKICAgICMgY3VycmVudGx5IHRoZXJlIGFyZSBubyBGQVEgZXZlbnQgbW9kdWxlcyBidXQgaXMgbmVlZGVkIHRvIGluaXRpYWxpemUgb3RoZXJ3aXNlIGVycm9ycyBhcmUKICAgICMgICAgIGxvZyBkdWUgdG8gc2VhcmNoaW5nIHVuZGVmaW5lZCBzZXR0aW5nIGludG8gQ29uZmlnT2JqZWN0LgogICAgJFNlbGYtPkV2ZW50SGFuZGxlckluaXQoCiAgICAgICAgQ29uZmlnID0+ICcnLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEZBUUdldCgpCgpnZXQgYW4gRkFRIGl0ZW0KCiAgICBteSAlRkFRID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gMTIzLAogICAgICAgIEl0ZW1GaWVsZHMgPT4gMCwgICAgICAgICMgT3B0aW9uYWwsIGRlZmF1bHQgMC4gVG8gaW5jbHVkZSB0aGUgaXRlbSBmaWVsZCBjb250ZW50IGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIEZBUSBpdGVtIG9uIHRoZSByZXR1cm4gc3RydWN0dXJlLgogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICVGQVEgPSAoCiAgICAgICAgSUQgICAgICAgICAgICAgICAgPT4gMzIsCiAgICAgICAgSXRlbUlEICAgICAgICAgICAgPT4gMzIsCiAgICAgICAgRkFRSUQgICAgICAgICAgICAgPT4gMzIsCiAgICAgICAgTnVtYmVyICAgICAgICAgICAgPT4gMTAwMDMyLAogICAgICAgIENhdGVnb3J5SUQgICAgICAgID0+ICcyJywKICAgICAgICBDYXRlZ29yeU5hbWUnICAgICA9PiAnQ2F0ZWdvcnlBOjpDYXRlZ29yeUInLAogICAgICAgIENhdGVnb3J5U2hvcnROYW1lID0+ICdDYXRlZ29yeUInLAogICAgICAgIExhbmd1YWdlSUQgICAgICAgID0+IDEsCiAgICAgICAgTGFuZ3VhZ2UgICAgICAgICAgPT4gJ2VuJywKICAgICAgICBUaXRsZSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBUaXRsZScsCiAgICAgICAgQXBwcm92ZWQgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAKICAgICAgICBWYWxpZElEICAgICAgICAgICA9PiAxLAogICAgICAgIFZhbGlkICAgICAgICAgICAgID0+ICd2YWxpZCcsCiAgICAgICAgS2V5d29yZHMgICAgICAgICAgPT4gJ0tleVdvcmQxIEtleVdvcmQyJywKICAgICAgICBWb3RlcyAgICAgICAgICAgICA9PiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbnVtYmVyIG9mIHZvdGVzCiAgICAgICAgVm90ZVJlc3VsdCAgICAgICAgPT4gJzAuMDAnLCAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgbnVtYmVyIGJldHdlZW4gMC4wMCBhbmQgMTAwLjAwCiAgICAgICAgU3RhdGVJRCAgICAgICAgICAgPT4gMSwKICAgICAgICBTdGF0ZSAgICAgICAgICAgICA9PiAnaW50ZXJuYWwgKGFnZW50KScsICAgICAgICAgICAgICMgb3IgJ2V4dGVybmFsIChjdXN0b21lciknIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICdwdWJsaWMgKGFsbCknCiAgICAgICAgU3RhdGVUeXBlSUQgICAgICAgPT4gMSwKICAgICAgICBTdGF0ZVR5cGVOYW1lICAgICA9PiAnaW50ZXJuYWwnLCAgICAgICAgICAgICAgICAgICAgICMgb3IgJ2V4dGVybmFsJyBvciAncHVibGljJwogICAgICAgIENyZWF0ZWRCeSAgICAgICAgID0+IDEsCiAgICAgICAgQ2hhbmdlZCcgICAgICAgICAgPT4gJzIwMTEtMDEtMDUgMjE6NTM6NTAnLAogICAgICAgIENoYW5nZWRCeSAgICAgICAgID0+ICcxJywKICAgICAgICBDcmVhdGVkICAgICAgICAgICA9PiAnMjAxMS0wMS0wNSAyMTo1Mzo1MCcsCiAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJzEyOTQyODYwMzAtMzEuMTY5NzI5NzEwNDczMicsICAjIEZBUSBBcnRpY2xlIG5hbWUgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3lzdGVtdGltZSArICctJyArIHJhbmRvbSBudW1iZXIKICAgICk7CgogICAgbXkgJUZBUSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICBJdGVtSUQgICAgID0+IDEyMywKICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJUZBUSA9ICgKICAgICAgICBJRCAgICAgICAgICAgICAgICA9PiAzMiwKICAgICAgICBJdGVtSUQgICAgICAgICAgICA9PiAzMiwKICAgICAgICBGQVFJRCAgICAgICAgICAgICA9PiAzMiwKICAgICAgICBOdW1iZXIgICAgICAgICAgICA9PiAxMDAwMzIsCiAgICAgICAgQ2F0ZWdvcnlJRCAgICAgICAgPT4gJzInLAogICAgICAgIENhdGVnb3J5TmFtZScgICAgID0+ICdDYXRlZ29yeUE6OkNhdGVnb3J5QicsCiAgICAgICAgQ2F0ZWdvcnlTaG9ydE5hbWUgPT4gJ0NhdGVnb3J5QicsCiAgICAgICAgTGFuZ3VhZ2VJRCAgICAgICAgPT4gMSwKICAgICAgICBMYW5ndWFnZSAgICAgICAgICA9PiAnZW4nLAogICAgICAgIFRpdGxlICAgICAgICAgICAgID0+ICdBcnRpY2xlIFRpdGxlJywKICAgICAgICBGaWVsZDEgICAgICAgICAgICA9PiAnVGhlIFN5bXB0b21zJywKICAgICAgICBGaWVsZDIgICAgICAgICAgICA9PiAnVGhlIFByb2JsZW0nLAogICAgICAgIEZpZWxkMyAgICAgICAgICAgID0+ICdUaGUgU29sdXRpb24nLAogICAgICAgIEZpZWxkNCAgICAgICAgICAgID0+IHVuZGVmLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3QgYWN0aXZlIGJ5IGRlZmF1bHQKICAgICAgICBGaWVsZDUgICAgICAgICAgICA9PiB1bmRlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm90IGFjdGl2ZSBieSBkZWZhdWx0CiAgICAgICAgRmllbGQ2ICAgICAgICAgICAgPT4gJ0NvbW1lbnRzJywKICAgICAgICBBcHByb3ZlZCAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgMAogICAgICAgIFZhbGlkSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgQ29udGVudFR5cGUgICAgICAgPT4gJ3RleHQvcGxhaW4nLCAgICAgICAgICAgICAgICAgICMgb3IgJ3RleHQvaHRtbCcKICAgICAgICBWYWxpZCAgICAgICAgICAgICA9PiAndmFsaWQnLAogICAgICAgIEtleXdvcmRzICAgICAgICAgID0+ICdLZXlXb3JkMSBLZXlXb3JkMicsCiAgICAgICAgVm90ZXMgICAgICAgICAgICAgPT4gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG51bWJlciBvZiB2b3RlcwogICAgICAgIFZvdGVSZXN1bHQgICAgICAgID0+ICcwLjAwJywgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIG51bWJlciBiZXR3ZWVuIDAuMDAgYW5kIDEwMC4wMAogICAgICAgIFN0YXRlSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgU3RhdGUgICAgICAgICAgICAgPT4gJ2ludGVybmFsIChhZ2VudCknLCAgICAgICAgICAgICAjIG9yICdleHRlcm5hbCAoY3VzdG9tZXIpJyBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAncHVibGljIChhbGwpJwogICAgICAgIFN0YXRlVHlwZUlEICAgICAgID0+IDEsCiAgICAgICAgU3RhdGVUeXBlTmFtZSAgICAgPT4gJ2ludGVybmFsJywgICAgICAgICAgICAgICAgICAgICAjIG9yICdleHRlcm5hbCcgb3IgJ3B1YmxpYycKICAgICAgICBDcmVhdGVkQnkgICAgICAgICA9PiAxLAogICAgICAgIENoYW5nZWQnICAgICAgICAgID0+ICcyMDExLTAxLTA1IDIxOjUzOjUwJywKICAgICAgICBDaGFuZ2VkQnkgICAgICAgICA9PiAnMScsCiAgICAgICAgQ3JlYXRlZCAgICAgICAgICAgPT4gJzIwMTEtMDEtMDUgMjE6NTM6NTAnLAogICAgICAgIE5hbWUgICAgICAgICAgICAgID0+ICcxMjk0Mjg2MDMwLTMxLjE2OTcyOTcxMDQ3MzInLCAgIyBGQVEgQXJ0aWNsZSBuYW1lIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN5c3RlbXRpbWUgKyAnLScgKyByYW5kb20gbnVtYmVyCiAgICApOwoKPWN1dAoKc3ViIEZBUUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgRmFpbHVyZXMgcmVuYW1lIGZyb20gSXRlbUlEIHRvIEZBUUlECiAgICBpZiAoICRQYXJhbXtGQVFJRH0gKSB7CiAgICAgICAgJFBhcmFte0l0ZW1JRH0gPSAkUGFyYW17RkFRSUR9OwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgSXRlbUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJEZldGNoSXRlbUZpZWxkcyA9ICRQYXJhbXtJdGVtRmllbGRzfSA/IDEgOiAwOwoKICAgIG15ICRDYWNoZUtleSA9ICdGQVFHZXQ6Okl0ZW1JRDo6JyAuICRQYXJhbXtJdGVtSUR9IC4gJzo6SXRlbUZpZWxkczo6JyAuICRGZXRjaEl0ZW1GaWVsZHM7CgogICAgIyBnZXQgY2FjaGUgb2JqZWN0CiAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICBteSAkQ2FjaGUgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICdGQVEnLAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgc2V0ICVEYXRhIGZyb20gY2FjaGUgaWYgYW55CiAgICBteSAlRGF0YTsKICAgIGlmICggcmVmICRDYWNoZSBlcSAnSEFTSCcgKSB7CiAgICAgICAgJURhdGEgPSAleyRDYWNoZX07CiAgICB9CgogICAgIyBvdGhlcndpc2UgZ2V0ICVEYXRhIGZyb20gdGhlIERCCiAgICBlbHNlIHsKCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgICAgICBTRUxFQ1QgaS5mX25hbWUsIGkuZl9sYW5ndWFnZV9pZCwgaS5mX3N1YmplY3QsIGkuY3JlYXRlZCwgaS5jcmVhdGVkX2J5LCBpLmNoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgaS5jaGFuZ2VkX2J5LCBpLmNhdGVnb3J5X2lkLCBpLnN0YXRlX2lkLCBjLm5hbWUsIHMubmFtZSwgbC5uYW1lLCBpLmZfa2V5d29yZHMsCiAgICAgICAgICAgICAgICAgICAgaS5hcHByb3ZlZCwgaS52YWxpZF9pZCwgaS5jb250ZW50X3R5cGUsIGkuZl9udW1iZXIsIHN0LmlkLCBzdC5uYW1lCiAgICAgICAgICAgICAgICBGUk9NIGZhcV9pdGVtIGksIGZhcV9jYXRlZ29yeSBjLCBmYXFfc3RhdGUgcywgZmFxX3N0YXRlX3R5cGUgc3QsIGZhcV9sYW5ndWFnZSBsCiAgICAgICAgICAgICAgICBXSEVSRSBpLnN0YXRlX2lkID0gcy5pZAogICAgICAgICAgICAgICAgICAgIEFORCBzLnR5cGVfaWQgPSBzdC5pZAogICAgICAgICAgICAgICAgICAgIEFORCBpLmNhdGVnb3J5X2lkID0gYy5pZAogICAgICAgICAgICAgICAgICAgIEFORCBpLmZfbGFuZ3VhZ2VfaWQgPSBsLmlkCiAgICAgICAgICAgICAgICAgICAgQU5EIGkuaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0l0ZW1JRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgICAgICVEYXRhID0gKAoKICAgICAgICAgICAgICAgICMgdmFyIGZvciBvbGQgdmVyc2lvbnMKICAgICAgICAgICAgICAgIElEICAgID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgRkFRSUQgPT4gJFBhcmFte0l0ZW1JRH0sCgogICAgICAgICAgICAgICAgIyBnZXQgZGF0YSBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICBJdGVtSUQgICAgICAgID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAkUm93WzBdLAogICAgICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgICA9PiAkUm93WzFdLAogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAkUm93WzJdLAogICAgICAgICAgICAgICAgQ3JlYXRlZCAgICAgICA9PiAkUm93WzNdLAogICAgICAgICAgICAgICAgQ3JlYXRlZEJ5ICAgICA9PiAkUm93WzRdLAogICAgICAgICAgICAgICAgQ2hhbmdlZCAgICAgICA9PiAkUm93WzVdLAogICAgICAgICAgICAgICAgQ2hhbmdlZEJ5ICAgICA9PiAkUm93WzZdLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgICA9PiAkUm93WzddLAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkUm93WzhdLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlOYW1lICA9PiAkUm93WzldLAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkUm93WzEwXSwKICAgICAgICAgICAgICAgIExhbmd1YWdlICAgICAgPT4gJFJvd1sxMV0sCiAgICAgICAgICAgICAgICBLZXl3b3JkcyAgICAgID0+ICRSb3dbMTJdLAogICAgICAgICAgICAgICAgQXBwcm92ZWQgICAgICA9PiAkUm93WzEzXSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gJFJvd1sxNF0sCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgID0+ICRSb3dbMTVdLAogICAgICAgICAgICAgICAgTnVtYmVyICAgICAgICA9PiAkUm93WzE2XSwKICAgICAgICAgICAgICAgIFN0YXRlVHlwZUlEICAgPT4gJFJvd1sxN10sCiAgICAgICAgICAgICAgICBTdGF0ZVR5cGVOYW1lID0+ICRSb3dbMThdLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISVEYXRhICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBJdGVtSUQgJFBhcmFte0l0ZW1JRH0hIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgRkFRIGl0ZW0gZmllbGRzIGFyZSByZXF1aXJlZAogICAgICAgIGlmICgkRmV0Y2hJdGVtRmllbGRzKSB7CgogICAgICAgICAgICBmb3IgbXkgJEZpZWxkTnVtYmVyICggMSAuLiA2ICkgewoKICAgICAgICAgICAgICAgICMgc2V0IGZpZWxkIG5hbWUKICAgICAgICAgICAgICAgIG15ICRGaWVsZCA9ICJGaWVsZCRGaWVsZE51bWJlciI7CgogICAgICAgICAgICAgICAgIyBnZXQgZWFjaCBmaWVsZCBjb250ZW50CiAgICAgICAgICAgICAgICAkRGF0YXskRmllbGR9ID0gJFNlbGYtPkl0ZW1GaWVsZEdldCgKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgRmllbGQgPT4gJEZpZWxkLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgbnVtYmVyCiAgICAgICAgaWYgKCAhJERhdGF7TnVtYmVyfSApIHsKCiAgICAgICAgICAgIG15ICROdW1iZXIgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1N5c3RlbUlEJykgLiAnMDAnIC4gJERhdGF7SXRlbUlEfTsKCiAgICAgICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gJ1VQREFURSBmYXFfaXRlbSBTRVQgZl9udW1iZXIgPSA/IFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCROdW1iZXIsIFwkRGF0YXtJdGVtSUR9IF0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkRGF0YXtOdW1iZXJ9ID0gJE51bWJlcjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGFsbCBjYXRlZ29yeSBsb25nIG5hbWVzCiAgICAgICAgbXkgJENhdGVnb3J5VHJlZSA9ICRTZWxmLT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzYXZlIHRoZSBjYXRlZ29yeSBzaG9ydCBuYW1lCiAgICAgICAgJERhdGF7Q2F0ZWdvcnlTaG9ydE5hbWV9ID0gJERhdGF7Q2F0ZWdvcnlOYW1lfTsKCiAgICAgICAgIyBnZXQgdGhlIGNhdGVnb3J5IGxvbmcgbmFtZQogICAgICAgICREYXRhe0NhdGVnb3J5TmFtZX0gPSAkQ2F0ZWdvcnlUcmVlLT57ICREYXRhe0NhdGVnb3J5SUR9IH07CgogICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgICAgICREYXRhe1ZhbGlkfSA9ICRWYWxpZExpc3R7ICREYXRhe1ZhbGlkSUR9IH07CgogICAgICAgICMgY2FjaGUgcmVzdWx0CiAgICAgICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICdGQVEnLAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB2b3RlIGRhdGEgZm9yIHRoaXMgRkFRIGl0ZW0KICAgIG15ICRWb3RlRGF0YTsKICAgIGlmICggJFNlbGYtPntWb3Rpbmd9ICkgewogICAgICAgICRWb3RlRGF0YSA9ICRTZWxmLT5JdGVtVm90ZURhdGFHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZyb20gY29uZmlnCiAgICBteSAkRGVjaW1hbFBsYWNlcyA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpFeHBsb3Jlcjo6SXRlbUxpc3Q6OlZvdGluZ1Jlc3VsdERlY2ltYWxQbGFjZXMnKSB8fCAwOwoKICAgICMgZm9ybWF0IHRoZSB2b3RlIHJlc3VsdAogICAgbXkgJFZvdGVSZXN1bHQgPSBzcHJpbnRmKCAiJTAuIiAuICREZWNpbWFsUGxhY2VzIC4gImYiLCAkVm90ZURhdGEtPntSZXN1bHR9IHx8IDAgKTsKCiAgICAjIGFkZCB2b3RpbmcgaW5mb3JtYXRpb24gdG8gRkFRIGl0ZW0KICAgICREYXRhe1ZvdGVSZXN1bHR9ID0gJFZvdGVSZXN1bHQ7CiAgICAkRGF0YXtWb3Rlc30gPSAkVm90ZURhdGEtPntWb3Rlc30gfHwgMDsKCiAgICAjIGNoZWNrIGlmIG5lZWQgdG8gcmV0dXJuIER5bmFtaWNGaWVsZHMKICAgIGlmICggJFBhcmFte0R5bmFtaWNGaWVsZHN9ICkgewoKICAgICAgICAjIGdldCBhbGwgZHluYW1pYyBmaWVsZHMgZm9yIHRoZSBvYmplY3QgdHlwZSBGQVEKICAgICAgICBteSAkRHluYW1pY0ZpZWxkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnRkFRJwogICAgICAgICk7CgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewoKICAgICAgICAgICAgIyB2YWxpZGF0ZSBlYWNoIGR5bmFtaWMgZmllbGQKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWc7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfSApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIGVhY2ggZHluYW1pYyBmaWVsZAogICAgICAgICAgICBteSAkVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlR2V0KAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCB0aGUgZHluYW1pYyBmaWVsZCBuYW1lIGFuZCB2YWx1ZSBpbnRvIHRoZSBkYXRhIGhhc2gKICAgICAgICAgICAgJERhdGF7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJFZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCnN1YiBJdGVtRmllbGRHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIEl0ZW1JRCBGaWVsZCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgZm9yIHZhbGlkIGZpZWxkIG5hbWUKICAgIGlmICggJFBhcmFte0ZpZWxkfSAhfiBteyBcQSBGaWVsZCBbMS02XSBceiB9bXN4aSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZpZWxkICckUGFyYW17RmllbGR9JyBpcyBpbnZhbGlkISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdJdGVtRmllbGRHZXQ6Okl0ZW1JRDo6JyAuICRQYXJhbXtJdGVtSUR9OwoKICAgICMgZ2V0IGNhY2hlIG9iamVjdAogICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgbXkgJENhY2hlID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgVHlwZSA9PiAnRkFRJywKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgIyBjaGVjayBpZiBhIGNhY2hlIGVudHJ5IGV4aXN0cyBmb3IgdGhlIGdpdmVuIEZpZWxkCiAgICBpZiAoIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnICYmIGV4aXN0cyAkQ2FjaGUtPnsgJFBhcmFte0ZpZWxkfSB9ICkgewoKICAgICAgICByZXR1cm4gJENhY2hlLT57ICRQYXJhbXtGaWVsZH0gfTsKICAgIH0KCiAgICAjIGNyZWF0ZSBhIGZpZWxkIGxvb2t1cCB0YWJsZQogICAgbXkgJUZpZWxkTG9va3VwID0gKAogICAgICAgIEZpZWxkMSA9PiAnZl9maWVsZDEnLAogICAgICAgIEZpZWxkMiA9PiAnZl9maWVsZDInLAogICAgICAgIEZpZWxkMyA9PiAnZl9maWVsZDMnLAogICAgICAgIEZpZWxkNCA9PiAnZl9maWVsZDQnLAogICAgICAgIEZpZWxkNSA9PiAnZl9maWVsZDUnLAogICAgICAgIEZpZWxkNiA9PiAnZl9maWVsZDYnLAogICAgKTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUICcgLiAkRmllbGRMb29rdXB7ICRQYXJhbXtGaWVsZH0gfSAuICcKICAgICAgICAgICAgRlJPTSBmYXFfaXRlbQogICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJEZpZWxkOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEZpZWxkID0gJFJvd1swXSB8fCAnJzsKICAgIH0KCiAgICBpZiAoIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnICkgewoKICAgICAgICAjIENhY2hlIGZpbGUgZm9yIEl0ZW1JRCBhbHJlYWR5IGV4aXN0cywgYWRkIGZpZWxkIGRhdGEuCiAgICAgICAgJENhY2hlLT57ICRQYXJhbXtGaWVsZH0gfSA9ICRGaWVsZDsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIENyZWF0ZSBuZXcgY2FjaGUgZmlsZS4KICAgICAgICAkQ2FjaGUgPSB7CiAgICAgICAgICAgICRQYXJhbXtGaWVsZH0gPT4gJEZpZWxkLAogICAgICAgIH07CiAgICB9CgogICAgIyBzZXQgY2FjaGUKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICdGQVEnLAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiAkQ2FjaGUsCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICApOwoKICAgIHJldHVybiAkRmllbGQ7Cn0KCj1pdGVtIEZBUUFkZCgpCgphZGQgYW4gYXJ0aWNsZQoKICAgIG15ICRJdGVtSUQgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgVGl0bGUgICAgICAgPT4gJ1NvbWUgVGV4dCcsCiAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICBTdGF0ZUlEICAgICA9PiAxLAogICAgICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICAgICAgTnVtYmVyICAgICAgPT4gJzEzNDAyJywgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgS2V5d29yZHMgICAgPT4gJ3NvbWUga2V5d29yZHMnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgRmllbGQxICAgICAgPT4gJ1N5bXB0b20uLi4nLCAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRmllbGQyICAgICAgPT4gJ1Byb2JsZW0uLi4nLCAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRmllbGQzICAgICAgPT4gJ1NvbHV0aW9uLi4uJywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRmllbGQ0ICAgICAgPT4gJ0ZpZWxkNC4uLicsICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRmllbGQ1ICAgICAgPT4gJ0ZpZWxkNS4uLicsICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRmllbGQ2ICAgICAgPT4gJ0NvbW1lbnQuLi4nLCAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQXBwcm92ZWQgICAgPT4gMSwgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsICAgICAjIG9yICd0ZXh0L2h0bWwnCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRJdGVtSUQgPSAzNDsKCj1jdXQKCnN1YiBGQVFBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDYXRlZ29yeUlEIFN0YXRlSUQgTGFuZ3VhZ2VJRCBUaXRsZSBVc2VySUQgQ29udGVudFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZSBmb3IgVmFsaWRJRAogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsaWRJRH0gKSB7CgogICAgICAgICMgZ2V0IHRoZSB2YWxpZCBpZHMKICAgICAgICBteSBAVmFsaWRJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKCiAgICAgICAgJFBhcmFte1ZhbGlkSUR9ID0gJFZhbGlkSURzWzBdOwogICAgfQoKICAgICMgY2hlY2sgbmFtZQogICAgaWYgKCAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRQYXJhbXtOYW1lfSA9IHRpbWUoKSAuICctJyAuIHJhbmQoMTAwKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGNoZWNrIG51bWJlcgogICAgaWYgKCAhJFBhcmFte051bWJlcn0gKSB7CiAgICAgICAgJFBhcmFte051bWJlcn0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1N5c3RlbUlEJykgLiByYW5kKDEwMCk7CiAgICB9CgogICAgIyBjaGVjayBpZiBhcHByb3ZhbCBmZWF0dXJlIGlzIHVzZWQKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFwcHJvdmFsUmVxdWlyZWQnKSApIHsKCiAgICAgICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICAgICAgbXkgJUdyb3VwcyA9IHJldmVyc2UgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgYXBwcm92YWwgZ3JvdXAKICAgICAgICBteSAkQXBwcm92YWxHcm91cCA9ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbEdyb3VwJyk7CgogICAgICAgICMgc2V0IGRlZmF1bHQgdG8gMCBpZiBhcHByb3ZlZCBwYXJhbSBpcyBub3QgZ2l2ZW4KICAgICAgICAjIG9yIGlmIHVzZXIgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHRzIHRvIGFwcHJvdmUKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtBcHByb3ZlZH0gfHwgISRHcm91cHN7JEFwcHJvdmFsR3JvdXB9ICkgewogICAgICAgICAgICAkUGFyYW17QXBwcm92ZWR9ID0gMDsKICAgICAgICB9CiAgICB9CgogICAgIyBpZiBhcHByb3ZhbCBmZWF0dXJlIGlzIG5vdCBhY3RpdmF0ZWQsIGEgbmV3IEZBUSBpdGVtIGlzIGFsd2F5cyBhcHByb3ZlZAogICAgZWxzZSB7CiAgICAgICAgJFBhcmFte0FwcHJvdmVkfSA9IDE7CiAgICB9CgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgSU5TRVJUIElOVE8gZmFxX2l0ZW0KICAgICAgICAgICAgICAgIChmX251bWJlciwgZl9uYW1lLCBmX2xhbmd1YWdlX2lkLCBmX3N1YmplY3QsCiAgICAgICAgICAgICAgICBjYXRlZ29yeV9pZCwgc3RhdGVfaWQsIGZfa2V5d29yZHMsIGFwcHJvdmVkLCB2YWxpZF9pZCwgY29udGVudF90eXBlLAogICAgICAgICAgICAgICAgZl9maWVsZDEsIGZfZmllbGQyLCBmX2ZpZWxkMywgZl9maWVsZDQsIGZfZmllbGQ1LCBmX2ZpZWxkNiwKICAgICAgICAgICAgICAgIGNyZWF0ZWQsIGNyZWF0ZWRfYnksIGNoYW5nZWQsIGNoYW5nZWRfYnkpCiAgICAgICAgICAgIFZBTFVFUwogICAgICAgICAgICAgICAgKD8sID8sID8sID8sCiAgICAgICAgICAgICAgICA/LCA/LCA/LCA/LCA/LCA/LAogICAgICAgICAgICAgICAgPywgPywgPywgPywgPywgPywKICAgICAgICAgICAgICAgIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte051bWJlcn0sICAgICBcJFBhcmFte05hbWV9LCAgICBcJFBhcmFte0xhbmd1YWdlSUR9LCBcJFBhcmFte1RpdGxlfSwKICAgICAgICAgICAgXCRQYXJhbXtDYXRlZ29yeUlEfSwgXCRQYXJhbXtTdGF0ZUlEfSwgXCRQYXJhbXtLZXl3b3Jkc30sICAgXCRQYXJhbXtBcHByb3ZlZH0sCiAgICAgICAgICAgIFwkUGFyYW17VmFsaWRJRH0sICAgIFwkUGFyYW17Q29udGVudFR5cGV9LAogICAgICAgICAgICBcJFBhcmFte0ZpZWxkMX0sIFwkUGFyYW17RmllbGQyfSwgXCRQYXJhbXtGaWVsZDN9LAogICAgICAgICAgICBcJFBhcmFte0ZpZWxkNH0sIFwkUGFyYW17RmllbGQ1fSwgXCRQYXJhbXtGaWVsZDZ9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGJ1aWxkIFNRTCB0byBnZXQgdGhlIGlkIG9mIHRoZSBuZXdseSBpbnNlcnRlZCBGQVEgYXJ0aWNsZQogICAgbXkgJFNRTCA9ICcKICAgICAgICBTRUxFQ1QgaWQgRlJPTSBmYXFfaXRlbQogICAgICAgIFdIRVJFIGZfbnVtYmVyID0gPwogICAgICAgICAgICBBTkQgZl9uYW1lID0gPwogICAgICAgICAgICBBTkQgZl9sYW5ndWFnZV9pZCA9ID8KICAgICAgICAgICAgQU5EIGNhdGVnb3J5X2lkID0gPwogICAgICAgICAgICBBTkQgc3RhdGVfaWQgPSA/CiAgICAgICAgICAgIEFORCBhcHByb3ZlZCA9ID8KICAgICAgICAgICAgQU5EIHZhbGlkX2lkID0gPwogICAgICAgICAgICBBTkQgY3JlYXRlZF9ieSA9ID8KICAgICAgICAgICAgQU5EIGNoYW5nZWRfYnkgPSA/JzsKCiAgICAjIGhhbmRsZSB0aGUgdGl0bGUKICAgIGlmICggJFBhcmFte1RpdGxlfSApIHsKICAgICAgICAkU1FMIC49ICcKICAgICAgICAgICAgQU5EIGZfc3ViamVjdCA9ID8gJzsKICAgIH0KCiAgICAjIGFkZGl0aW9uYWwgU1FMIGZvciB0aGUgY2FzZSB0aGF0IHRoZSB0aXRsZSBpcyBhbiBlbXB0eSBzdHJpbmcKICAgICMgYW5kIHRoZSBkYXRhYmFzZSBpcyBvcmFjbGUsIHdoaWNoIHRyZWF0cyBlbXB0eSBzdHJpbmdzIGFzIE5VTEwKICAgIGVsc2UgewogICAgICAgICRTUUwgLj0gJwogICAgICAgICAgICBBTkQgKChmX3N1YmplY3QgPSA/KSBPUiAoZl9zdWJqZWN0IElTIE5VTEwpKSAnOwogICAgfQoKICAgICMgaGFuZGxlIHRoZSBrZXl3b3JkcwogICAgaWYgKCAkUGFyYW17S2V5d29yZHN9ICkgewogICAgICAgICRTUUwgLj0gJwogICAgICAgICAgICBBTkQgZl9rZXl3b3JkcyA9ID8gJzsKICAgIH0KCiAgICAjIGFkZGl0aW9uYWwgU1FMIGZvciB0aGUgY2FzZSB0aGF0IGtleXdvcmRzIGlzIGFuIGVtcHR5IHN0cmluZwogICAgIyBhbmQgdGhlIGRhdGFiYXNlIGlzIG9yYWNsZSwgd2hpY2ggdHJlYXRzIGVtcHR5IHN0cmluZ3MgYXMgTlVMTAogICAgZWxzZSB7CiAgICAgICAgJFNRTCAuPSAnCiAgICAgICAgICAgIEFORCAoKGZfa2V5d29yZHMgPSA/KSBPUiAoZl9rZXl3b3JkcyBJUyBOVUxMKSkgJzsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZ2V0IGlkCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TnVtYmVyfSwKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtMYW5ndWFnZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtTdGF0ZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtBcHByb3ZlZH0sCiAgICAgICAgICAgIFwkUGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBcJFBhcmFte1RpdGxlfSwKICAgICAgICAgICAgXCRQYXJhbXtLZXl3b3Jkc30sCiAgICAgICAgXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgdXBkYXRlIG51bWJlcgogICAgbXkgJE51bWJlciA9ICRDb25maWdPYmplY3QtPkdldCgnU3lzdGVtSUQnKSAuICcwMCcgLiAkSUQ7CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ1VQREFURSBmYXFfaXRlbSBTRVQgZl9udW1iZXIgPSA/IFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkTnVtYmVyLCBcJElEIF0sCiAgICApOwoKICAgICMgYWRkIGhpc3RvcnkKICAgICRTZWxmLT5GQVFIaXN0b3J5QWRkKAogICAgICAgIE5hbWUgICA9PiAnQ3JlYXRlZCcsCiAgICAgICAgSXRlbUlEID0+ICRJRCwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgYXBwcm92YWwgZmVhdHVyZSBpcyBlbmFibGVkCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbFJlcXVpcmVkJykgJiYgISRQYXJhbXtBcHByb3ZlZH0gKSB7CgogICAgICAgICMgY3JlYXRlIG5ldyBhcHByb3ZhbCB0aWNrZXQKICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5fRkFRQXBwcm92YWxUaWNrZXRDcmVhdGUoCiAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJElELAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgTGFuZ3VhZ2VJRCA9PiAkUGFyYW17TGFuZ3VhZ2VJRH0sCiAgICAgICAgICAgIEZBUU51bWJlciAgPT4gJE51bWJlciwKICAgICAgICAgICAgVGl0bGUgICAgICA9PiAkUGFyYW17VGl0bGV9LAogICAgICAgICAgICBTdGF0ZUlEICAgID0+ICRQYXJhbXtTdGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnQ291bGQgbm90IGNyZWF0ZSBhcHByb3ZhbCB0aWNrZXQhJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRJRDsKfQoKPWl0ZW0gRkFRVXBkYXRlKCkKCnVwZGF0ZSBhbiBhcnRpY2xlCgogICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUVVwZGF0ZSgKICAgICAgICBJdGVtSUQgICAgICA9PiAxMjMsCiAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICBTdGF0ZUlEICAgICA9PiAxLAogICAgICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICAgICAgQXBwcm92ZWQgICAgPT4gMSwKICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYW4nLCAgICAgIyBvciAndGV4dC9odG1sJwogICAgICAgIFRpdGxlICAgICAgID0+ICdTb21lIFRleHQnLAogICAgICAgIEZpZWxkMSAgICAgID0+ICdQcm9ibGVtLi4uJywKICAgICAgICBGaWVsZDIgICAgICA9PiAnU29sdXRpb24uLi4nLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgQXBwcm92YWxPZmYgPT4gMSwgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCAoaWYgc2V0IHRvIDEgYXBwcm92YWwgaXMgaWdub3JlZC4gVGhpcyBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIGltcG9ydGFudCB3aGVuIGNhbGxlZCBmcm9tIEZBUUlubGluZUF0dGFjaG1lbnRVUkxVcGRhdGUpCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9IDEgOyAgICAgICAgICAjIG9yIHVuZGVmIGlmIGNhbid0IHVwZGF0ZSB0aGUgRkFRIGFydGljbGUKCj1jdXQKCnN1YiBGQVFVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIENhdGVnb3J5SUQgU3RhdGVJRCBMYW5ndWFnZUlEIFRpdGxlIFVzZXJJRCBDb250ZW50VHlwZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IEZBUSBkYXRhCiAgICBteSAlRkFRRGF0YSA9ICRTZWxmLT5GQVFHZXQoCiAgICAgICAgSXRlbUlEICAgICA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICBJdGVtRmllbGRzID0+IDAsCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBpZiBubyBuYW1lIHdhcyBnaXZlbiB1c2Ugb2xkIG5hbWUgZnJvbSBGQVEKICAgIGlmICggISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkUGFyYW17TmFtZX0gPSAkRkFRRGF0YXtOYW1lfTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlIGZvciBWYWxpZElECiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZElEfSApIHsKICAgICAgICAkUGFyYW17VmFsaWRJRH0gPSAkRkFRRGF0YXtWYWxpZElEfTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBVUERBVEUgZmFxX2l0ZW0gU0VUCiAgICAgICAgICAgICAgICBmX25hbWUgPSA/LCBmX2xhbmd1YWdlX2lkID0gPywgZl9zdWJqZWN0ID0gPywgY2F0ZWdvcnlfaWQgPSA/LAogICAgICAgICAgICAgICAgc3RhdGVfaWQgPSA/LCBmX2tleXdvcmRzID0gPywgdmFsaWRfaWQgPSA/LCBjb250ZW50X3R5cGUgPSA/LAogICAgICAgICAgICAgICAgZl9maWVsZDEgPSA/LCBmX2ZpZWxkMiA9ID8sCiAgICAgICAgICAgICAgICBmX2ZpZWxkMyA9ID8sIGZfZmllbGQ0ID0gPywKICAgICAgICAgICAgICAgIGZfZmllbGQ1ID0gPywgZl9maWVsZDYgPSA/LAogICAgICAgICAgICAgICAgY2hhbmdlZCA9IGN1cnJlbnRfdGltZXN0YW1wLAogICAgICAgICAgICAgICAgY2hhbmdlZF9ieSA9ID8KICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgXCRQYXJhbXtMYW5ndWFnZUlEfSwgXCRQYXJhbXtUaXRsZX0sICAgXCRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtTdGF0ZUlEfSwgXCRQYXJhbXtLZXl3b3Jkc30sICAgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb250ZW50VHlwZX0sCiAgICAgICAgICAgIFwkUGFyYW17RmllbGQxfSwgIFwkUGFyYW17RmllbGQyfSwKICAgICAgICAgICAgXCRQYXJhbXtGaWVsZDN9LCAgXCRQYXJhbXtGaWVsZDR9LAogICAgICAgICAgICBcJFBhcmFte0ZpZWxkNX0sICBcJFBhcmFte0ZpZWxkNn0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtJdGVtSUR9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICAkU2VsZi0+X0RlbGV0ZUZyb21GQVFDYWNoZSglUGFyYW0pOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgdXBkYXRlIGFwcHJvdmFsCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbFJlcXVpcmVkJykgJiYgISRQYXJhbXtBcHByb3ZhbE9mZn0gKSB7CgogICAgICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgICAgIG15ICVHcm91cHMgPSByZXZlcnNlICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgVHlwZSAgID0+ICdybycsCiAgICAgICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGhlIGFwcHJvdmFsIGdyb3VwCiAgICAgICAgbXkgJEFwcHJvdmFsR3JvdXAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QXBwcm92YWxHcm91cCcpOwoKICAgICAgICAjIHNldCBhcHByb3ZhbCB0byAwIGlmIHVzZXIgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHRzIHRvIGFwcHJvdmUKICAgICAgICBpZiAoICEkR3JvdXBzeyRBcHByb3ZhbEdyb3VwfSApIHsKICAgICAgICAgICAgJFBhcmFte0FwcHJvdmVkfSA9IDA7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgYXBwcm92YWwKICAgICAgICBteSAkVXBkYXRlU3VjY2VzcyA9ICRTZWxmLT5fRkFRQXBwcm92YWxVcGRhdGUoCiAgICAgICAgICAgIEl0ZW1JRCAgID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBBcHByb3ZlZCA9PiAkUGFyYW17QXBwcm92ZWR9IHx8IDAsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICBpZiAoICEkVXBkYXRlU3VjY2VzcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCB1cGRhdGUgYXBwcm92YWwgZm9yIEl0ZW1JRCAkUGFyYW17SXRlbUlEfSEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgY2FjaGUKICAgICAgICAkU2VsZi0+X0RlbGV0ZUZyb21GQVFDYWNoZSglUGFyYW0pOwogICAgfQoKICAgICMgY2hlY2sgaWYgaGlzdG9yeSBlbnRyeSBzaG91bGQgYmUgYWRkZWQKICAgIHJldHVybiAxIGlmICRQYXJhbXtIaXN0b3J5T2ZmfTsKCiAgICAjIHdyaXRlIGhpc3RvcnkgZW50cnkKICAgICRTZWxmLT5GQVFIaXN0b3J5QWRkKAogICAgICAgIE5hbWUgICA9PiAnVXBkYXRlZCcsCiAgICAgICAgSXRlbUlEID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEF0dGFjaG1lbnRBZGQoKQoKYWRkIGFydGljbGUgYXR0YWNobWVudHMsIHJldHVybnMgdGhlIGF0dGFjaG1lbnQgaWQKCiAgICBteSAkQXR0YWNobWVudElEID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEFkZCgKICAgICAgICBJdGVtSUQgICAgICA9PiAxMjMsCiAgICAgICAgQ29udGVudCAgICAgPT4gJENvbnRlbnQsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQveG1sJywKICAgICAgICBGaWxlbmFtZSAgICA9PiAnc29tZW5hbWUueG1sJywKICAgICAgICBJbmxpbmUgICAgICA9PiAxLCAgICgwfDEsIGRlZmF1bHQgMCkKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJEF0dGFjaG1lbnRJRCA9IDEyMyA7ICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBjYW4ndCBhZGQgdGhlIGF0dGFjaG1lbnQKCj1jdXQKCnN1YiBBdHRhY2htZW50QWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBDb250ZW50IENvbnRlbnRUeXBlIEZpbGVuYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGRlZmF1bHQKICAgIGlmICggISRQYXJhbXtJbmxpbmV9ICkgewogICAgICAgICRQYXJhbXtJbmxpbmV9ID0gMDsKICAgIH0KCiAgICAjIGdldCBhdHRhY2htZW50IHNpemUKICAgIHsKICAgICAgICB1c2UgYnl0ZXM7CiAgICAgICAgJFBhcmFte0ZpbGVzaXplfSA9IGxlbmd0aCAkUGFyYW17Q29udGVudH07CiAgICAgICAgbm8gYnl0ZXM7CiAgICB9CgogICAgIyBnZXQgYWxsIGV4aXN0aW5nIGF0dGFjaG1lbnRzCiAgICBteSBASW5kZXggPSAkU2VsZi0+QXR0YWNobWVudEluZGV4KAogICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBmaWxlbmFtZQogICAgbXkgJE5ld0ZpbGVOYW1lID0gJFBhcmFte0ZpbGVuYW1lfTsKCiAgICAjIGJ1aWxkIGEgbG9va3VwIGhhc2ggb2YgYWxsIGV4aXN0aW5nIGZpbGUgbmFtZXMKICAgIG15ICVVc2VkRmlsZTsKICAgIGZvciBteSAkRmlsZSAoQEluZGV4KSB7CiAgICAgICAgJFVzZWRGaWxleyAkRmlsZS0+e0ZpbGVuYW1lfSB9ID0gMTsKICAgIH0KCiAgICAjIHRyeSB0byBtb2RpZnkgdGhlIHRoZSBmaWxlIG5hbWUgYnkgYWRkaW5nIGEgbnVtYmVyIGlmIGl0IGV4aXN0cyBhbHJlYWR5CiAgICBteSAkQ291bnQgPSAwOwogICAgd2hpbGUgKCAkQ291bnQgPCA1MCApIHsKCiAgICAgICAgIyBpbmNyZWFzZSBjb3VudGVyCiAgICAgICAgJENvdW50Kys7CgogICAgICAgICMgaWYgdGhlIGZpbGUgbmFtZSBleGlzdHMKICAgICAgICBpZiAoIGV4aXN0cyAkVXNlZEZpbGV7JE5ld0ZpbGVOYW1lfSApIHsKCiAgICAgICAgICAgICMgZmlsZW5hbWUgaGFzIGEgZmlsZSBuYW1lIGV4dGVuc2lvbiAoZS5nLiB0ZXN0LmpwZykKICAgICAgICAgICAgaWYgKCAkUGFyYW17RmlsZW5hbWV9ID1+IG17IFxBICguKikgXC4gKC4rPykgXHogfXhtcyApIHsKICAgICAgICAgICAgICAgICROZXdGaWxlTmFtZSA9ICIkMS0kQ291bnQuJDIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJE5ld0ZpbGVOYW1lID0gIiRQYXJhbXtGaWxlbmFtZX0tJENvdW50IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHN0b3JlIHRoZSBuZXcgZmlsZW5hbWUKICAgICRQYXJhbXtGaWxlbmFtZX0gPSAkTmV3RmlsZU5hbWU7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGVuY29kZSBhdHRhY2htZW50IGlmIGl0J3MgYSBwb3N0Z3Jlc3FsIGJhY2tlbmQhISEKICAgIGlmICggISREQk9iamVjdC0+R2V0RGF0YWJhc2VGdW5jdGlvbignRGlyZWN0QmxvYicpICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RW5jb2RlJyktPkVuY29kZU91dHB1dCggXCRQYXJhbXtDb250ZW50fSApOwoKICAgICAgICAkUGFyYW17Q29udGVudH0gPSBNSU1FOjpCYXNlNjQ6OmVuY29kZV9iYXNlNjQoICRQYXJhbXtDb250ZW50fSApOwogICAgfQoKICAgICMgd3JpdGUgYXR0YWNobWVudCB0byBkYgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gZmFxX2F0dGFjaG1lbnQgJyAuCiAgICAgICAgICAgICcgKGZhcV9pZCwgZmlsZW5hbWUsIGNvbnRlbnRfdHlwZSwgY29udGVudF9zaXplLCBjb250ZW50LCBpbmxpbmVhdHRhY2htZW50LCAnIC4KICAgICAgICAgICAgJyBjcmVhdGVkLCBjcmVhdGVkX2J5LCBjaGFuZ2VkLCBjaGFuZ2VkX2J5KSBWQUxVRVMgJyAuCiAgICAgICAgICAgICcgKD8sID8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sICBcJFBhcmFte0ZpbGVuYW1lfSwgXCRQYXJhbXtDb250ZW50VHlwZX0sIFwkUGFyYW17RmlsZXNpemV9LAogICAgICAgICAgICBcJFBhcmFte0NvbnRlbnR9LCBcJFBhcmFte0lubGluZX0sICAgXCRQYXJhbXtVc2VySUR9LCAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGdldCB0aGUgYXR0YWNobWVudCBpZAogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgJwogICAgICAgICAgICAuICdGUk9NIGZhcV9hdHRhY2htZW50ICcKICAgICAgICAgICAgLiAnV0hFUkUgZmFxX2lkID0gPyBBTkQgZmlsZW5hbWUgPSA/ICcKICAgICAgICAgICAgLiAnQU5EIGNvbnRlbnRfdHlwZSA9ID8gQU5EIGNvbnRlbnRfc2l6ZSA9ID8gJwogICAgICAgICAgICAuICdBTkQgaW5saW5lYXR0YWNobWVudCA9ID8gJwogICAgICAgICAgICAuICdBTkQgY3JlYXRlZF9ieSA9ID8gQU5EIGNoYW5nZWRfYnkgPSA/JywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtJdGVtSUR9LCBcJFBhcmFte0ZpbGVuYW1lfSwgXCRQYXJhbXtDb250ZW50VHlwZX0sIFwkUGFyYW17RmlsZXNpemV9LAogICAgICAgICAgICBcJFBhcmFte0lubGluZX0sIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtVc2VySUR9LAogICAgICAgIF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgbXkgJEF0dGFjaG1lbnRJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBdHRhY2htZW50SUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkQXR0YWNobWVudElEOwp9Cgo9aXRlbSBBdHRhY2htZW50R2V0KCkKCmdldCBhdHRhY2htZW50IG9mIGFydGljbGUKCiAgICBteSAlRmlsZSA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgSXRlbUlEID0+IDEyMywKICAgICAgICBGaWxlSUQgPT4gMSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICVGaWxlID0gKAogICAgICAgIEZpbGVzaXplICAgID0+ICc1NDAyODYnLCAgICAgICAgICAgICAgICAjIGZpbGUgc2l6ZSBpbiBieXRlcwogICAgICAgIENvbnRlbnRUeXBlID0+ICdpbWFnZS9qcGVnJywKICAgICAgICBGaWxlbmFtZSAgICA9PiAnRXJyb3IuanBnJywKICAgICAgICBDb250ZW50ICAgICA9PiAnLi4uJyAgICAgICAgICAgICAgICAgICAgIyBmaWxlIGJpbmFyeSBjb250ZW50CiAgICApOwoKPWN1dAoKc3ViIEF0dGFjaG1lbnRHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIEZpbGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgZmlsZW5hbWUsIGNvbnRlbnRfdHlwZSwgY29udGVudF9zaXplLCBjb250ZW50ICcKICAgICAgICAgICAgLiAnRlJPTSBmYXFfYXR0YWNobWVudCAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPyBBTkQgZmFxX2lkID0gPyAnCiAgICAgICAgICAgIC4gJ09SREVSIEJZIGNyZWF0ZWQnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0ZpbGVJRH0sIFwkUGFyYW17SXRlbUlEfSBdLAogICAgICAgIEVuY29kZSA9PiBbIDEsIDEsIDEsIDAgXSwKICAgICAgICBMaW1pdCAgPT4gMSwKICAgICk7CgogICAgbXkgJUZpbGU7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgIyBkZWNvZGUgYXR0YWNobWVudCBpZiBpdCdzIGEgcG9zdGdyZXNxbCBiYWNrZW5kIGFuZCBub3QgQkxPQgogICAgICAgIGlmICggISREQk9iamVjdC0+R2V0RGF0YWJhc2VGdW5jdGlvbignRGlyZWN0QmxvYicpICkgewogICAgICAgICAgICAkUm93WzNdID0gTUlNRTo6QmFzZTY0OjpkZWNvZGVfYmFzZTY0KCAkUm93WzNdICk7CiAgICAgICAgfQoKICAgICAgICAkRmlsZXtGaWxlbmFtZX0gICAgPSAkUm93WzBdOwogICAgICAgICRGaWxle0NvbnRlbnRUeXBlfSA9ICRSb3dbMV07CiAgICAgICAgJEZpbGV7RmlsZXNpemV9ICAgID0gJFJvd1syXTsKICAgICAgICAkRmlsZXtDb250ZW50fSAgICAgPSAkUm93WzNdOwogICAgfQoKICAgIHJldHVybiAlRmlsZTsKfQoKPWl0ZW0gQXR0YWNobWVudERlbGV0ZSgpCgpkZWxldGUgYXR0YWNobWVudCBvZiBhcnRpY2xlCgogICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50RGVsZXRlKAogICAgICAgIEl0ZW1JRCA9PiAxMjMsCiAgICAgICAgRmlsZUlEID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9IDEgOyAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBhdHRhY2htZW50IGNvdWxkIG5vdCBiZSBkZWxldGVkCgo9Y3V0CgpzdWIgQXR0YWNobWVudERlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgRmlsZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gZmFxX2F0dGFjaG1lbnQgV0hFUkUgaWQgPSA/IEFORCBmYXFfaWQgPSA/ICcsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17RmlsZUlEfSwgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBBdHRhY2htZW50SW5kZXgoKQoKcmV0dXJuIGFuIGF0dGFjaG1lbnQgaW5kZXggb2YgYW4gYXJ0aWNsZQoKICAgIG15IEBJbmRleCA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRJbmRleCgKICAgICAgICBJdGVtSUQgICAgID0+IDEyMywKICAgICAgICBTaG93SW5saW5lID0+IDAsICAgKCAwfDEsIGRlZmF1bHQgMSkKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICBASW5kZXggPSAoCiAgICAgICAgewogICAgICAgICAgICBGaWxlc2l6ZSAgICA9PiAnNTI3LjYgS0J5dGVzJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnRXJyb3IuanBnJywKICAgICAgICAgICAgRmlsZXNpemVSYXcgPT4gNTQwMjg2LAogICAgICAgICAgICBGaWxlSUQgICAgICA9PiA2LAogICAgICAgICAgICBJbmxpbmUgICAgICA9PiAwLAogICAgICAgIH0sCiAgICAgICAgeywKICAgICAgICAgICAgRmlsZXNpemUgPT4gJzQzMC4wIEtCeXRlcycsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJ1NvbHV0aW9uLmpwZycsCiAgICAgICAgICAgIEZpbGVzaXplUmF3ID0+IDQ0MDI4NiwKICAgICAgICAgICAgRmlsZUlEID0+IDUsCiAgICAgICAgICAgIElubGluZSA9PiAxLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWxlc2l6ZSA9PiAnMjk2IEJ5dGVzJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICBGaWxlbmFtZSA9PiAnQWRkaXRpb25hbENvbW1lbnRzLnR4dCcsCiAgICAgICAgICAgIEZpbGVzaXplUmF3ID0+IDI5NiwKICAgICAgICAgICAgRmlsZUlEID0+IDcsCiAgICAgICAgICAgIElubGluZSA9PiAwLAogICAgICAgIH0sCiAgICApOwoKPWN1dAoKc3ViIEF0dGFjaG1lbnRJbmRleCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBmaWxlbmFtZSwgY29udGVudF90eXBlLCBjb250ZW50X3NpemUsIGlubGluZWF0dGFjaG1lbnQgJwogICAgICAgICAgICAuICdGUk9NIGZhcV9hdHRhY2htZW50ICcKICAgICAgICAgICAgLiAnV0hFUkUgZmFxX2lkID0gPyAnCiAgICAgICAgICAgIC4gJ09SREVSIEJZIGZpbGVuYW1lJywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17SXRlbUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEwMCwKICAgICk7CgogICAgbXkgQEluZGV4OwogICAgQVRUQUNITUVOVDoKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBteSAkSUQgICAgICAgICAgPSAkUm93WzBdOwogICAgICAgIG15ICRGaWxlbmFtZSAgICA9ICRSb3dbMV07CiAgICAgICAgbXkgJENvbnRlbnRUeXBlID0gJFJvd1syXTsKICAgICAgICBteSAkRmlsZXNpemUgICAgPSAkUm93WzNdOwogICAgICAgIG15ICRJbmxpbmUgICAgICA9ICRSb3dbNF07CgogICAgICAgICMgZG8gbm90IHNob3cgaW5saW5lIGF0dGFjaG1lbnRzCiAgICAgICAgaWYgKCBkZWZpbmVkICRQYXJhbXtTaG93SW5saW5lfSAmJiAhJFBhcmFte1Nob3dJbmxpbmV9ICYmICRJbmxpbmUgKSB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICB9CgogICAgICAgICMgY29udmVydCB0byBodW1hbiByZWFkYWJsZSBmaWxlIHNpemUKICAgICAgICBteSAkRmlsZVNpemVSYXcgPSAkRmlsZXNpemU7CiAgICAgICAgaWYgKCRGaWxlc2l6ZSkgewogICAgICAgICAgICBpZiAoICRGaWxlc2l6ZSA+ICggMTAyNCAqIDEwMjQgKSApIHsKICAgICAgICAgICAgICAgICRGaWxlc2l6ZSA9IHNwcmludGYgIiUuMWYgTUJ5dGVzIiwgKCAkRmlsZXNpemUgLyAoIDEwMjQgKiAxMDI0ICkgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRGaWxlc2l6ZSA+IDEwMjQgKSB7CiAgICAgICAgICAgICAgICAkRmlsZXNpemUgPSBzcHJpbnRmICIlLjFmIEtCeXRlcyIsICggKCAkRmlsZXNpemUgLyAxMDI0ICkgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRGaWxlc2l6ZSA9ICRGaWxlc2l6ZSAuICcgQnl0ZXMnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBJbmRleCwgewogICAgICAgICAgICBGaWxlSUQgICAgICA9PiAkSUQsCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJENvbnRlbnRUeXBlLAogICAgICAgICAgICBGaWxlc2l6ZSAgICA9PiAkRmlsZXNpemUsCiAgICAgICAgICAgIEZpbGVzaXplUmF3ID0+ICRGaWxlU2l6ZVJhdywKICAgICAgICAgICAgSW5saW5lICAgICAgPT4gJElubGluZSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBASW5kZXg7Cn0KCj1pdGVtIEZBUUNvdW50KCkKCkNvdW50IHRoZSBudW1iZXIgb2YgYXJ0aWNsZXMgZm9yIGEgZGVmaW5lZCBjYXRlZ29yeS4gT25seSB2YWxpZCBGQVEgYXJ0aWNsZXMgd2lsbCBiZSBjb3VudGVkLgoKICAgIG15ICRBcnRpY2xlQ291bnQgPSAkRkFRT2JqZWN0LT5GQVFDb3VudCgKICAgICAgICBDYXRlZ29yeUlEcyAgPT4gWzEsMiwzLDRdLAogICAgICAgIE9ubHlBcHByb3ZlZCA9PiAxLCAgICMgb3B0aW9uYWwgKGRlZmF1bHQgMCkKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRBcnRpY2xlQ291bnQgPSAzOwoKPWN1dAoKc3ViIEZBUUNvdW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENhdGVnb3J5SURzIEl0ZW1TdGF0ZXMgVXNlcklEKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIG15ICRDYXRlZ29yeUlEU3RyaW5nID0gJyc7CiAgICBpZiAoICRQYXJhbXtDYXRlZ29yeUlEc30gJiYgcmVmICRQYXJhbXtDYXRlZ29yeUlEc30gZXEgJ0FSUkFZJyAmJiBAeyAkUGFyYW17Q2F0ZWdvcnlJRHN9IH0gKSB7CgogICAgICAgICMgaW50ZWdlciBxdW90ZSB0aGUgY2F0ZWdvcnkgaWRzCiAgICAgICAgZm9yIG15ICRDYXRlZ29yeUlEICggQHsgJFBhcmFte0NhdGVnb3J5SURzfSB9ICkgewogICAgICAgICAgICAkREJPYmplY3QtPlF1b3RlKCAkQ2F0ZWdvcnlJRCwgJ0ludGVnZXInICk7CiAgICAgICAgfQoKICAgICAgICBteSBAU29ydGVkSURzID0gc29ydCBAeyAkUGFyYW17Q2F0ZWdvcnlJRHN9IH07CgogICAgICAgICMgc3BsaXQgSU4gc3RhdGVtZW50IHdpdGggbW9yZSB0aGFuIDkwMCBlbGVtZW50cyBpbiBtb3JlIHN0YXRlbWVudHMgY29tYmluZWQgd2l0aCBPUgogICAgICAgICMgYmVjYXVzZSBPcmFjbGUgZG9lc24ndCBzdXBwb3J0IG1vcmUgdGhhbiAxMDAwIGVsZW1lbnRzIGluIG9uZSBJTiBzdGF0ZW1lbnQuCiAgICAgICAgbXkgQFNRTFN0cmluZ3M7CiAgICAgICAgTE9PUDoKICAgICAgICB3aGlsZSAoIHNjYWxhciBAU29ydGVkSURzICkgewoKICAgICAgICAgICAgbXkgQFNvcnRlZElEc1BhcnQgPSBzcGxpY2UgQFNvcnRlZElEcywgMCwgOTAwOwoKICAgICAgICAgICAgbXkgJElEU3RyaW5nID0gam9pbiAnLCcsIEBTb3J0ZWRJRHNQYXJ0OwoKICAgICAgICAgICAgcHVzaCBAU1FMU3RyaW5ncywgIiBpLmNhdGVnb3J5X2lkIElOICgkSURTdHJpbmcpICI7CiAgICAgICAgfQoKICAgICAgICBteSAkU1FMU3RyaW5nID0gam9pbiAnIE9SICcsIEBTUUxTdHJpbmdzOwoKICAgICAgICAkQ2F0ZWdvcnlJRFN0cmluZyAuPSAnQU5EICggJyAuICRTUUxTdHJpbmcgLiAnICkgJzsKICAgIH0KCiAgICAjIGJ1aWxkIHZhbGlkIGlkIHN0cmluZwogICAgbXkgJFZhbGlkSURzU3RyaW5nID0gam9pbiAnLCAnLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKCiAgICBteSAkU1FMID0gJ1NFTEVDVCBDT1VOVCgqKSAnCiAgICAgICAgLiAnRlJPTSBmYXFfaXRlbSBpLCBmYXFfc3RhdGUgcyAnCiAgICAgICAgLiAnV0hFUkUgaS5zdGF0ZV9pZCA9IHMuaWQgJwogICAgICAgIC4gIkFORCBpLnZhbGlkX2lkIElOICgkVmFsaWRJRHNTdHJpbmcpICIKICAgICAgICAuICRDYXRlZ29yeUlEU3RyaW5nOwoKICAgICMgY291bnQgb25seSBhcHByb3ZlZCBhcnRpY2xlcwogICAgaWYgKCAkUGFyYW17T25seUFwcHJvdmVkfSApIHsKICAgICAgICAkU1FMIC49ICcgQU5EIGkuYXBwcm92ZWQgPSAxJzsKICAgIH0KCiAgICBteSAkRXh0ID0gJyc7CiAgICBpZiAoICRQYXJhbXtJdGVtU3RhdGVzfSAmJiByZWYgJFBhcmFte0l0ZW1TdGF0ZXN9IGVxICdIQVNIJyAmJiAleyAkUGFyYW17SXRlbVN0YXRlc30gfSApIHsKICAgICAgICBteSAkU3RhdGVzU3RyaW5nID0gam9pbiAnLCAnLCBrZXlzICV7ICRQYXJhbXtJdGVtU3RhdGVzfSB9OwogICAgICAgICRFeHQgLj0gIiBBTkQgcy50eXBlX2lkIElOICgkU3RhdGVzU3RyaW5nICkiOwogICAgfQogICAgJEV4dCAuPSAnIEdST1VQIEJZIGNhdGVnb3J5X2lkJzsKICAgICRTUUwgLj0gJEV4dDsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+IDIwMCwKICAgICk7CgogICAgbXkgJENvdW50ID0gMDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb3VudCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRDb3VudDsKfQoKPWl0ZW0gRkFRRGVsZXRlKCkKCkRlbGV0ZSBhbiBhcnRpY2xlLgoKICAgIG15ICREZWxldGVTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgICAgIEl0ZW1JRCA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAxMjMsCiAgICApOwoKUmV0dXJuczoKCiAgICAkRGVsZXRlU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAjIG9yIHVuZGVmIGlmIGFydGljbGUgY291bGQgbm90IGJlIGRlbGV0ZWQKCj1jdXQKCnN1YiBGQVFEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIGF0dGFjaG1lbnRzCiAgICBteSBASW5kZXggPSAkU2VsZi0+QXR0YWNobWVudEluZGV4KAogICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwogICAgZm9yIG15ICRGaWxlSUQgKEBJbmRleCkgewogICAgICAgIG15ICREZWxldGVTdWNjZXNzID0gJFNlbGYtPkF0dGFjaG1lbnREZWxldGUoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgRmlsZUlEID0+ICRGaWxlSUQtPntGaWxlSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIGlmICEkRGVsZXRlU3VjY2VzczsKICAgIH0KCiAgICAjIGRlbGV0ZSB2b3RlcwogICAgbXkgJFZvdGVJRHNSZWYgPSAkU2VsZi0+Vm90ZVNlYXJjaCgKICAgICAgICBJdGVtSUQgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKICAgIGZvciBteSAkVm90ZUlEICggQHskVm90ZUlEc1JlZn0gKSB7CiAgICAgICAgbXkgJERlbGV0ZVN1Y2Nlc3MgPSAkU2VsZi0+Vm90ZURlbGV0ZSgKICAgICAgICAgICAgVm90ZUlEID0+ICRWb3RlSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gaWYgISREZWxldGVTdWNjZXNzOwogICAgfQoKICAgICMgZGVsZXRlIGFsbCBGQVEgbGlua3Mgb2YgdGhpcyBGQVEgYXJ0aWNsZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0RlbGV0ZUFsbCgKICAgICAgICBPYmplY3QgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgaGlzdG9yeQogICAgcmV0dXJuIGlmICEkU2VsZi0+RkFRSGlzdG9yeURlbGV0ZSgKICAgICAgICBJdGVtSUQgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGRlbGV0ZSBhcnRpY2xlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBmYXFfaXRlbSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0l0ZW1JRH0gXSwKICAgICk7CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRTZWxmLT5fRGVsZXRlRnJvbUZBUUNhY2hlKCVQYXJhbSk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEZBUUhpc3RvcnlBZGQoKQoKYWRkIGFuIGhpc3RvcnkgdG8gYW4gYXJ0aWNsZQoKICAgIG15ICRBZGRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRSGlzdG9yeUFkZCgKICAgICAgICBJdGVtSUQgPT4gMSwKICAgICAgICBOYW1lICAgPT4gJ1VwZGF0ZWQgQXJ0aWNsZS4nLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJEFkZFN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgYXJ0aWNsZSBoaXN0b3J5IGNvdWxkIG5vdCBiZSBhZGRlZAoKPWN1dAoKc3ViIEZBUUhpc3RvcnlBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIE5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBmYXFfaGlzdG9yeSAobmFtZSwgaXRlbV9pZCwgJyAuCiAgICAgICAgICAgICcgY3JlYXRlZCwgY3JlYXRlZF9ieSwgY2hhbmdlZCwgY2hhbmdlZF9ieSknIC4KICAgICAgICAgICAgJyBWQUxVRVMgKCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtJdGVtSUR9LCBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gRkFRSGlzdG9yeUdldCgpCgpnZXQgYW4gYXJyYXkgd2l0aCBoYXNoIHJlZmVyZW5jZSB3aXRoIHRoZSBoaXN0b3J5IG9mIGFuIGFydGljbGUKCiAgICBteSAkSGlzdG9yeURhdGFBcnJheVJlZiA9ICRGQVFPYmplY3QtPkZBUUhpc3RvcnlHZXQoCiAgICAgICAgSXRlbUlEID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkSGlzdG9yeURhdGFBcnJheVJlZiA9IFsKICAgICAgICB7CiAgICAgICAgICAgIENyZWF0ZWRCeSA9PiAxLAogICAgICAgICAgICBDcmVhdGVkICAgPT4gJzIwMTAtMTEtMDIgMDc6NDU6MTUnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ0NyZWF0ZWQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBDcmVhdGVkQnkgPT4gMSwKICAgICAgICAgICAgQ3JlYXRlZCAgID0+ICcyMDExLTA2LTE0IDEyOjUzOjU1JywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdVcGRhdGVkJywKICAgICAgICB9LAogICAgXTsKCj1jdXQKCnN1YiBGQVFIaXN0b3J5R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFNFTEVDVCBuYW1lLCBjcmVhdGVkLCBjcmVhdGVkX2J5CiAgICAgICAgICAgIEZST00gZmFxX2hpc3RvcnkKICAgICAgICAgICAgV0hFUkUgaXRlbV9pZCA9ID8KICAgICAgICAgICAgT1JERVIgQlkgY3JlYXRlZCwgaWQnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0l0ZW1JRH0gXSwKICAgICk7CgogICAgbXkgQERhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlUmVjb3JkID0gKAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFJvd1swXSwKICAgICAgICAgICAgQ3JlYXRlZCAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIENyZWF0ZWRCeSA9PiAkUm93WzJdLAogICAgICAgICk7CiAgICAgICAgcHVzaCBARGF0YSwgXCVSZWNvcmQ7CiAgICB9CgogICAgcmV0dXJuIFxARGF0YTsKfQoKPWl0ZW0gRkFRSGlzdG9yeURlbGV0ZSgpCgpkZWxldGUgdGhlIGhpc3Rvcnkgb2YgYW4gYXJ0aWNsZQoKICAgIG15ICREZWxldGVTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRSGlzdG9yeURlbGV0ZSgKICAgICAgICBJdGVtSUQgPT4gMSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICREZWxldGVEdWNjZXNzID0gMTsgICAgICAgICAgICAgICAgIyBvciB1bmRlZiBpZiBoaXN0b3J5IGNvdWxkIG5vdCBiZSBkZWxldGVkCgo9Y3V0CgpzdWIgRkFRSGlzdG9yeURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBmYXFfaGlzdG9yeSBXSEVSRSBpdGVtX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17SXRlbUlEfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gSGlzdG9yeUdldCgpCgpnZXQgdGhlIHN5c3RlbSBoaXN0b3J5CgogICAgbXkgJEhpc3RvcnlEYXRhQXJyYXlSZWYgPSAkRkFRT2JqZWN0LT5IaXN0b3J5R2V0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJEhpc3RvcnlEYXRhQXJyYXlSZWYgPSBbCiAgICAgICAgewogICAgICAgICAgICBJdGVtSUQgICAgPT4gJzMyJywKICAgICAgICAgICAgTnVtYmVyICAgID0+ICcxMDAwNCcsCiAgICAgICAgICAgIENhdGVnb3J5ICA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgICAgICBTdWJqZWN0ICAgPT4gJ05ldyBBcnRpY2xlJywKICAgICAgICAgICAgQWN0aW9uICAgID0+ICdDcmVhdGVkJywKICAgICAgICAgICAgQ3JlYXRlZEJ5ID0+ICcxJywKICAgICAgICAgICAgQ3JlYXRlZCAgID0+ICcyMDExLTAxLTA1IDIxOjUzOjUwJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgSXRlbUlEICAgID0+ICc0JywKICAgICAgICAgICAgTnVtYmVyICAgID0+ICcxMDAwNCcsCiAgICAgICAgICAgIENhdGVnb3J5ICA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgICAgICBTdWJqZWN0ICAgPT4gIk5ldyBBcnRpY2xlIiwKICAgICAgICAgICAgQWN0aW9uICAgID0+ICdVcGRhdGVkJywKICAgICAgICAgICAgQ3JlYXRlZEJ5ID0+ICcxJywKICAgICAgICAgICAgQ3JlYXRlZCAgID0+ICcyMDExLTAxLTA1IDIxOjU1OjMyJywKICAgICAgICB9CiAgICBdOwoKPWN1dAoKc3ViIEhpc3RvcnlHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYnVpbGQgU1FMIHF1ZXJ5CiAgICBteSAkU1FMID0gJ1NFTEVDVCBpLmlkLCBoLm5hbWUsIGguY3JlYXRlZCwgaC5jcmVhdGVkX2J5LCBjLm5hbWUsIGkuZl9zdWJqZWN0LCBpLmZfbnVtYmVyICcKICAgICAgICAuICdGUk9NIGZhcV9pdGVtIGksIGZhcV9zdGF0ZSBzLCBmYXFfaGlzdG9yeSBoLCBmYXFfY2F0ZWdvcnkgYyAnCiAgICAgICAgLiAnV0hFUkUgcy5pZCA9IGkuc3RhdGVfaWQgJwogICAgICAgIC4gJ0FORCBoLml0ZW1faWQgPSBpLmlkICcKICAgICAgICAuICdBTkQgaS5jYXRlZ29yeV9pZCA9IGMuaWQgJzsKCiAgICAjIGFkZCBzdGF0ZXMgY29uZGl0aW9uCiAgICBpZiAoICRQYXJhbXtTdGF0ZXN9ICYmIHJlZiAkUGFyYW17U3RhdGVzfSBlcSAnQVJSQVknICYmIEB7ICRQYXJhbXtTdGF0ZXN9IH0gKSB7CiAgICAgICAgbXkgJFN0YXRlc1N0cmluZyA9IGpvaW4gJywgJywgQHsgJFBhcmFte1N0YXRlc30gfTsKICAgICAgICAkU1FMIC49ICJBTkQgcy5uYW1lIElOICgkU3RhdGVzU3RyaW5nKSAiOwogICAgfQoKICAgICMgYWRkIG9yZGVyIGJ5IGNsYXVzZQogICAgJFNRTCAuPSAnT1JERVIgQlkgaC5jcmVhdGVkIERFU0MnOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgdGhlIGRhdGEgZnJvbSBkYgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBMaW1pdCA9PiAyMDAsCiAgICApOwoKICAgIG15IEBEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJVJlY29yZCA9ICgKICAgICAgICAgICAgSXRlbUlEICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIEFjdGlvbiAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBDcmVhdGVkICAgPT4gJFJvd1syXSwKICAgICAgICAgICAgQ3JlYXRlZEJ5ID0+ICRSb3dbM10sCiAgICAgICAgICAgIENhdGVnb3J5ICA9PiAkUm93WzRdLAogICAgICAgICAgICBTdWJqZWN0ICAgPT4gJFJvd1s1XSwKICAgICAgICAgICAgTnVtYmVyICAgID0+ICRSb3dbNl0sCiAgICAgICAgKTsKICAgICAgICBwdXNoIEBEYXRhLCBcJVJlY29yZDsKICAgIH0KCiAgICByZXR1cm4gXEBEYXRhOwp9Cgo9aXRlbSBLZXl3b3JkTGlzdCgpCgpnZXQgYSBsaXN0IG9mIGtleXdvcmRzIGFzIGEgaGFzaCwgd2l0aCB0aGVpciBjb3VudCBhcyB0aGUgdmFsdWU6CgogICAgbXkgJUtleXdvcmRzID0gJEZBUU9iamVjdC0+S2V5d29yZExpc3QoCiAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAlS2V5d29yZHMgPSAoCiAgICAgICAgICAnbWFjb3N4JyAgID0+IDgsCiAgICAgICAgICAndWJ1bnR1JyAgID0+IDEsCiAgICAgICAgICAnb3V0bG9vaycgID0+IDIsCiAgICAgICAgICAnd2luZG93cycgID0+IDMsCiAgICAgICAgICAnZXhjaGFuZ2UnID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEtleXdvcmRMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdAogICAgbXkgJFZhbGlkID0gMDsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRWYWxpZCA9ICRQYXJhbXtWYWxpZH07CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBrZXl3b3JkcyBmcm9tIGRiCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBmX2tleXdvcmRzIEZST00gZmFxX2l0ZW0nLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBteSAkS2V5d29yZExpc3QgPSBsYyAkUm93WzBdOwoKICAgICAgICBmb3IgbXkgJEtleXdvcmQgKCBzcGxpdCAvLC8sICRLZXl3b3JkTGlzdCApIHsKCiAgICAgICAgICAgICMgcmVtb3ZlIGxlYWRpbmcvdGFpbGluZyBzcGFjZXMKICAgICAgICAgICAgJEtleXdvcmQgPX4gc3sgXEEgXHMrIH17fXhtc2c7CiAgICAgICAgICAgICRLZXl3b3JkID1+IHN7IFxzKyBceiB9e314bXNnOwoKICAgICAgICAgICAgIyBpbmNyZWFzZSBrZXl3b3JkIGNvdW50ZXIKICAgICAgICAgICAgJERhdGF7JEtleXdvcmR9Kys7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlRGF0YTsKfQoKPWl0ZW0gRkFRUGF0aExpc3RHZXQoKQoKcmV0dXJucyBhIGNhdGVnb3J5IGFycmF5IHJlZmVyZW5jZQoKICAgIG15ICRDYXRlZ29yeUlEQXJyYXlSZWYgPSAkRkFRT2JqZWN0LT5GQVFQYXRoTGlzdEdldCgKICAgICAgICBDYXRlZ29yeUlEID0+IDE1MCwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkQ2F0ZWdvcnlJREFycmF5UmVmID0gWwogICAgICAgIHsKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAnMicsCiAgICAgICAgICAgIFBhcmVudElEID0+ICcwJywKICAgICAgICAgICAgTmFtZSA9PiAnTXkgQ2F0ZWdvcnknLAogICAgICAgICAgICBDb21tZW50ID0+ICdNeSBGaXJzdCBDYXRlZ29yeScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJzEnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICc0JywKICAgICAgICAgICAgUGFyZW50SUQgPT4gJzInLAogICAgICAgICAgICBOYW1lID0+ICdTdWIgQ2F0ZWdvcnkgQScsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1RoaXMgSXMgQ2F0ZWdvcnkgQScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJzEnLAogICAgICAgIH0sCiAgICBdOwoKPWN1dAoKc3ViIEZBUVBhdGhMaXN0R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgQENhdGVnb3J5TGlzdDsKICAgIG15ICRUZW1wQ2F0ZWdvcnlJRCA9ICRQYXJhbXtDYXRlZ29yeUlEfTsKICAgIHdoaWxlICgkVGVtcENhdGVnb3J5SUQpIHsKICAgICAgICBteSAlRGF0YSA9ICRTZWxmLT5DYXRlZ29yeUdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkVGVtcENhdGVnb3J5SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoJURhdGEpIHsKICAgICAgICAgICAgcHVzaCBAQ2F0ZWdvcnlMaXN0LCBcJURhdGE7CiAgICAgICAgfQogICAgICAgICRUZW1wQ2F0ZWdvcnlJRCA9ICREYXRhe1BhcmVudElEfTsKICAgIH0KCiAgICBAQ2F0ZWdvcnlMaXN0ID0gcmV2ZXJzZSBAQ2F0ZWdvcnlMaXN0OwoKICAgIHJldHVybiBcQENhdGVnb3J5TGlzdDsKCn0KCj1pdGVtIEZBUUxvZ0FkZCgpCgphZGRzIGFjY2Vzc2VkIEZBUSBhcnRpY2xlIHRvIHRoZSBhY2Nlc3MgbG9nIHRhYmxlCgogICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFMb2dBZGQoCiAgICAgICAgSXRlbUlEICAgID0+ICcxMjM0NTYnLAogICAgICAgIEludGVyZmFjZSA9PiAnaW50ZXJuYWwnLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFN1Y2Nlc3MgPTE7ICAgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgRkFRTG9nIGNvdWxkIG5vdCBiZSBhZGRlZAoKPWN1dAoKc3ViIEZBUUxvZ0FkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgSW50ZXJmYWNlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGVudmlyb25tZW50IHZhcmlhYmxlcwogICAgbXkgJElQICAgICAgICA9ICRFTlZ7J1JFTU9URV9BRERSJ30gICAgIHx8ICdOT05FJzsKICAgIG15ICRVc2VyQWdlbnQgPSAkRU5WeydIVFRQX1VTRVJfQUdFTlQnfSB8fCAnTk9ORSc7CgogICAgIyBnZXQgdGltZSBvYmplY3QKICAgIG15ICRUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKCiAgICAjIGdldCBjdXJyZW50IHN5c3RlbSB0aW1lCiAgICBteSAkU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CgogICAgIyBkZWZpbmUgdGltZSBwZXJpb2Qgd2hlcmUgcmVsb2FkcyB3aWxsIG5vdCBiZSBsb2dnZWQgKDEwIG1pbnV0ZXMpCiAgICBteSAkUmVsb2FkQmxvY2tUaW1lID0gMTAgKiA2MDsKCiAgICAjIHN1YnRyYWN0IFJlbG9hZEJsb2NrVGltZQogICAgJFN5c3RlbVRpbWUgPSAkU3lzdGVtVGltZSAtICRSZWxvYWRCbG9ja1RpbWU7CgogICAgIyBjb252ZXJ0IHRvIHRpbWVzLXN0YW1wCiAgICBteSAkVGltZVN0YW1wID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUsCiAgICApOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBjaGVjayBpZiBhIGxvZyBlbnRyeSBleGlzdHMgbmV3ZXIgdGhhbiB0aGUgUmVsb2FkQmxvY2tUaW1lCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCBGUk9NIGZhcV9sb2cgJwogICAgICAgICAgICAuICdXSEVSRSBpdGVtX2lkID0gPyBBTkQgaXAgPSA/ICcKICAgICAgICAgICAgLiAnQU5EIHVzZXJfYWdlbnQgPSA/IEFORCBjcmVhdGVkID49ID8gJywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17SXRlbUlEfSwgXCRJUCwgXCRVc2VyQWdlbnQsIFwkVGltZVN0YW1wIF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQWxyZWFkeUV4aXN0cyA9IDA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQWxyZWFkeUV4aXN0cyA9IDE7CiAgICB9CgogICAgcmV0dXJuIGlmICRBbHJlYWR5RXhpc3RzOwoKICAgICMgaW5zZXJ0IG5ldyBsb2cgZW50cnkKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGZhcV9sb2cgJwogICAgICAgICAgICAuICcoaXRlbV9pZCwgaW50ZXJmYWNlLCBpcCwgdXNlcl9hZ2VudCwgY3JlYXRlZCkgVkFMVUVTICcKICAgICAgICAgICAgLiAnKD8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wKScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17SXRlbUlEfSwgXCRQYXJhbXtJbnRlcmZhY2V9LCBcJElQLCBcJFVzZXJBZ2VudCwKICAgICAgICBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gRkFRVG9wMTBHZXQoKQoKUmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSB0b3AgMTAgRkFRIGFydGljbGUgaWRzLgoKICAgIG15ICRUb3AxMElEc1JlZiA9ICRGQVFPYmplY3QtPkZBUVRvcDEwR2V0KAogICAgICAgIEludGVyZmFjZSAgID0+ICdwdWJsaWMnLAogICAgICAgIENhdGVnb3J5SURzID0+IFsgMSwgMiwgMyBdLCAgIyAob3B0aW9uYWwpIE9ubHkgc2hvdyB0aGUgVG9wLTEwIGFydGljbGVzIGZyb20gdGhlc2UgY2F0ZWdvcmllcwogICAgICAgIExpbWl0ICAgICAgID0+IDEwLCAgICAgICAgICAgIyAob3B0aW9uYWwsIGRlZmF1bHQgMTApCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRUb3AxMElEc1JlZiA9IFsKICAgICAgICB7CiAgICAgICAgICAgICdJdGVtSUQnICAgID0+IDEzLAogICAgICAgICAgICAnQ291bnQnICAgICA9PiAxNTksICAgICAgICAgICAgICAgIyBudW1iZXIgb2YgdmlzaXRzCiAgICAgICAgICAgICdJbnRlcmZhY2UnID0+ICdwdWJsaWMnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAnSXRlbUlEJyAgICA9PiA2LAogICAgICAgICAgICAnQ291bnQnICAgICA9PiA3OCwKICAgICAgICAgICAgJ0ludGVyZmFjZScgPT4gJ3B1YmxpYycsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdJdGVtSUQnICAgID0+IDQsCiAgICAgICAgICAgICdDb3VudCcgICAgID0+IDU5LAogICAgICAgICAgICAnSW50ZXJmYWNlJyA9PiAnaW50ZXJuYWwnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAnSXRlbUlEJyAgICA9PiAyMCwKICAgICAgICAgICAgJ0NvdW50JyAgICAgPT4gMjksCiAgICAgICAgICAgICdJbnRlcmZhY2UnID0+ICdwdWJsaWMnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAnSXRlbUlEJyAgICA9PiAxLAogICAgICAgICAgICAnQ291bnQnICAgICA9PiAyNCwKICAgICAgICAgICAgJ0ludGVyZmFjZScgPT4gJ2V4dGVybmFsJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgJ0l0ZW1JRCcgICAgPT4gMTEsCiAgICAgICAgICAgICdDb3VudCcgICAgID0+IDI0LAogICAgICAgICAgICAnSW50ZXJmYWNlJyA9PiAnaW50ZXJuYWwnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAnSXRlbUlEJyAgICA9PiA1LAogICAgICAgICAgICAnQ291bnQnICAgICA9PiAxOCwKICAgICAgICAgICAgJ0ludGVyZmFjZScgPT4gJ2ludGVybmFsJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgJ0l0ZW1JRCcgICAgPT4gOSwKICAgICAgICAgICAgJ0NvdW50JyAgICAgPT4gMTYsCiAgICAgICAgICAgICdJbnRlcmZhY2UnID0+ICdleHRlcm5hbCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdJdGVtSUQnICAgID0+IDIsCiAgICAgICAgICAgICdDb3VudCcgICAgID0+IDE0LAogICAgICAgICAgICAnSW50ZXJmYWNlJyA9PiAnaW50ZXJuYWwnCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdJdGVtSUQnICAgID0+IDE0LAogICAgICAgICAgICAnQ291bnQnICAgICA9PiA2LAogICAgICAgICAgICAnSW50ZXJmYWNlJyA9PiAncHVibGljJywKICAgICAgICB9CiAgICBdOwoKPWN1dAoKc3ViIEZBUVRvcDEwR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEludGVyZmFjZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIHZhbGlkIGlkIHN0cmluZwogICAgbXkgJFZhbGlkSURzU3RyaW5nID0gam9pbiAnLCAnLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKCiAgICAjIHByZXBhcmUgU1FMCiAgICBteSBAQmluZDsKICAgIG15ICRTUUwgPSAnU0VMRUNUIGl0ZW1faWQsIGNvdW50KGl0ZW1faWQpIGFzIGl0ZW1jb3VudCwgZmFxX3N0YXRlX3R5cGUubmFtZSwgYXBwcm92ZWQgJwogICAgICAgIC4gJ0ZST00gZmFxX2xvZywgZmFxX2l0ZW0sIGZhcV9zdGF0ZSwgZmFxX3N0YXRlX3R5cGUgJwogICAgICAgIC4gJ1dIRVJFIGZhcV9sb2cuaXRlbV9pZCA9IGZhcV9pdGVtLmlkICcKICAgICAgICAuICdBTkQgZmFxX2l0ZW0uc3RhdGVfaWQgPSBmYXFfc3RhdGUuaWQgJwogICAgICAgIC4gIkFORCBmYXFfaXRlbS52YWxpZF9pZCBJTiAoJFZhbGlkSURzU3RyaW5nKSAiCiAgICAgICAgLiAnQU5EIGZhcV9zdGF0ZS50eXBlX2lkID0gZmFxX3N0YXRlX3R5cGUuaWQgJzsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZmlsdGVyIGp1c3QgY2F0ZWdvcmllcyB3aXRoIGF0IGxlYXN0IHJvIHBlcm1pc3Npb24KICAgIGlmICggJFBhcmFte0NhdGVnb3J5SURzfSAmJiByZWYgJFBhcmFte0NhdGVnb3J5SURzfSBlcSAnQVJSQVknICYmIEB7ICRQYXJhbXtDYXRlZ29yeUlEc30gfSApIHsKCiAgICAgICAgIyBpbnRlZ2VyIHF1b3RlIHRoZSBjYXRlZ29yeSBpZHMKICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBAeyAkUGFyYW17Q2F0ZWdvcnlJRHN9IH0gKSB7CiAgICAgICAgICAgICREQk9iamVjdC0+UXVvdGUoICRDYXRlZ29yeUlELCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgIG15IEBTb3J0ZWRJRHMgPSBzb3J0IEB7ICRQYXJhbXtDYXRlZ29yeUlEc30gfTsKCiAgICAgICAgIyBzcGxpdCBJTiBzdGF0ZW1lbnQgd2l0aCBtb3JlIHRoYW4gOTAwIGVsZW1lbnRzIGluIG1vcmUgc3RhdGVtZW50cyBjb21iaW5lZCB3aXRoIE9SCiAgICAgICAgIyBiZWNhdXNlIE9yYWNsZSBkb2Vzbid0IHN1cHBvcnQgbW9yZSB0aGFuIDEwMDAgZWxlbWVudHMgaW4gb25lIElOIHN0YXRlbWVudC4KICAgICAgICBteSBAU1FMU3RyaW5nczsKICAgICAgICBMT09QOgogICAgICAgIHdoaWxlICggc2NhbGFyIEBTb3J0ZWRJRHMgKSB7CgogICAgICAgICAgICBteSBAU29ydGVkSURzUGFydCA9IHNwbGljZSBAU29ydGVkSURzLCAwLCA5MDA7CgogICAgICAgICAgICBteSAkSURTdHJpbmcgPSBqb2luICcsJywgQFNvcnRlZElEc1BhcnQ7CgogICAgICAgICAgICBwdXNoIEBTUUxTdHJpbmdzLCAiIGZhcV9pdGVtLmNhdGVnb3J5X2lkIElOICgkSURTdHJpbmcpICI7CiAgICAgICAgfQoKICAgICAgICBteSAkU1FMU3RyaW5nID0gam9pbiAnIE9SICcsIEBTUUxTdHJpbmdzOwoKICAgICAgICAkU1FMIC49ICcgQU5EICggJyAuICRTUUxTdHJpbmcgLiAnICkgJzsKICAgIH0KCiAgICAjIGZpbHRlciByZXN1bHRzIGZvciBwdWJsaWMgYW5kIGN1c3RvbWVyIGludGVyZmFjZQogICAgaWYgKCAoICRQYXJhbXtJbnRlcmZhY2V9IGVxICdwdWJsaWMnICkgfHwgKCAkUGFyYW17SW50ZXJmYWNlfSBlcSAnZXh0ZXJuYWwnICkgKSB7CgogICAgICAgICMgb25seSBzaG93IGFwcHJvdmVkIGFydGljbGVzCiAgICAgICAgJFNRTCAuPSAnQU5EIGZhcV9pdGVtLmFwcHJvdmVkID0gMSAnOwoKICAgICAgICAjIG9ubHkgc2hvdyB0aGUgcHVibGljIGFydGljbGVzCiAgICAgICAgJFNRTCAuPSAiQU5EICggKCBmYXFfc3RhdGVfdHlwZS5uYW1lID0gJ3B1YmxpYycgQU5EIGZhcV9sb2cuaW50ZXJmYWNlID0gJ3B1YmxpYycgKSAiOwoKICAgICAgICAjIGN1c3RvbWVycyBjYW4gYWRkaXRpb25hbGx5IHNlZSB0aGUgZXh0ZXJuYWwgYXJ0aWNsZXMKICAgICAgICBpZiAoICRQYXJhbXtJbnRlcmZhY2V9IGVxICdleHRlcm5hbCcgKSB7CiAgICAgICAgICAgICRTUUwgLj0gIk9SICggZmFxX3N0YXRlX3R5cGUubmFtZSA9ICdleHRlcm5hbCcgQU5EIGZhcV9sb2cuaW50ZXJmYWNlID0gJ2V4dGVybmFsJyApICI7CiAgICAgICAgfQoKICAgICAgICAkU1FMIC49ICcpICc7CiAgICB9CgogICAgIyBmaWx0ZXIgcmVzdWx0cyBmb3IgZGVmaW5lZCB0aW1lIHBlcmlvZAogICAgaWYgKCAkUGFyYW17U3RhcnREYXRlfSAmJiAkUGFyYW17RW5kRGF0ZX0gKSB7CiAgICAgICAgJFNRTCAuPSAnQU5EIGZhcV9sb2cuY3JlYXRlZCA+PSA/IEFORCBmYXFfbG9nLmNyZWF0ZWQgPD0gPyAnOwogICAgICAgIHB1c2ggQEJpbmQsICggXCRQYXJhbXtTdGFydERhdGV9LCBcJFBhcmFte0VuZERhdGV9ICk7CiAgICB9CgogICAgIyBjb21wbGV0ZSBTUUwgc3RhdGVtZW50CiAgICAkU1FMIC49ICdHUk9VUCBCWSBpdGVtX2lkLCBmYXFfc3RhdGVfdHlwZS5uYW1lLCBhcHByb3ZlZCAnCiAgICAgICAgLiAnT1JERVIgQlkgaXRlbWNvdW50IERFU0MnOwoKICAgICMgZ2V0IHRoZSB0b3AgMTAgYXJ0aWNsZSBpZHMgZnJvbSBkYXRhYmFzZQogICAgcmV0dXJuIFtdIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBcQEJpbmQsCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSB8fCAxMCwKICAgICk7CgogICAgbXkgQFJlc3VsdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFJlc3VsdCwgewogICAgICAgICAgICBJdGVtSUQgICAgPT4gJFJvd1swXSwKICAgICAgICAgICAgQ291bnQgICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIEludGVyZmFjZSA9PiAkUm93WzJdLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIFxAUmVzdWx0Owp9Cgo9aXRlbSBGQVFJbmxpbmVBdHRhY2htZW50VVJMVXBkYXRlKCkKClVwZGF0ZXMgdGhlIFVSTHMgb2YgdXBsb2FkZWQgaW5saW5lIGF0dGFjaG1lbnRzLgoKICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRSW5saW5lQXR0YWNobWVudFVSTFVwZGF0ZSgKICAgICAgICBJdGVtSUQgICAgID0+IDEyLAogICAgICAgIEZvcm1JRCAgICAgPT4gNDU2LAogICAgICAgIEZpbGVJRCAgICAgPT4gNSwKICAgICAgICBBdHRhY2htZW50ID0+IFwlQXR0YWNobWVudCwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgIyBvZiB1bmRlZiBpZiBhdHRhY2htZW50IFVSTCBjb3VsZCBub3QgYmUgdXBkYXRlZAoKPWN1dAoKc3ViIEZBUUlubGluZUF0dGFjaG1lbnRVUkxVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIEF0dGFjaG1lbnQgRm9ybUlEIEZpbGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIGF0dGFjaG1lbnQgaXMgYSBoYXNoIHJlZmVyZW5jZQogICAgaWYgKCByZWYgJFBhcmFte0F0dGFjaG1lbnR9IG5lICdIQVNIJyAmJiAhJXsgJFBhcmFte0F0dGFjaG1lbnR9IH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBdHRhY2htZW50IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG9ubHkgY29uc2lkZXIgaW5saW5lIGF0dGFjaG1lbnRzIGhlcmUgKHRoZXkgaGF2ZSBhIGNvbnRlbnQgaWQpCiAgICByZXR1cm4gMSBpZiAhJFBhcmFte0F0dGFjaG1lbnR9LT57Q29udGVudElEfTsKCiAgICAjIGdldCBGQVEgZGF0YQogICAgbXkgJUZBUURhdGEgPSAkU2VsZi0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgcGljdHVyZSBVUkwgaW4gdXBsb2FkIGNhY2hlCiAgICBteSAkU2VhcmNoID0gIkFjdGlvbj1QaWN0dXJlVXBsb2FkIC4gRm9ybUlEPVxRJFBhcmFte0Zvcm1JRH1cRSAuICIKICAgICAgICAuICJDb250ZW50SUQ9XFEkUGFyYW17QXR0YWNobWVudH0tPntDb250ZW50SUR9XEUiOwoKICAgICMgcGljdHVyZSBVUkwgaW4gRkFRIGF0dGFjaG1lbnQKICAgIG15ICRSZXBsYWNlID0gIkFjdGlvbj1BZ2VudEZBUVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDsiCiAgICAgICAgLiAiSXRlbUlEPSRQYXJhbXtJdGVtSUR9O0ZpbGVJRD0kUGFyYW17RmlsZUlEfSI7CgogICAgIyByZXdyaXRlIHBpY3R1cmUgVVJMcwogICAgRklFTEQ6CiAgICBmb3IgbXkgJE51bWJlciAoIDEgLi4gNiApIHsKCiAgICAgICAgIyBjaGVjayBpZiBmaWVsZCBjb250YWlucyBzb21ldGhpbmcKICAgICAgICBuZXh0IEZJRUxEIGlmICEkRkFRRGF0YXsiRmllbGQkTnVtYmVyIn07CgogICAgICAgICMgcmVtb3ZlIG5ld2xpbmVzCiAgICAgICAgJEZBUURhdGF7IkZpZWxkJE51bWJlciJ9ID1+IHN7IFtcblxyXSsgfXt9Z3htczsKCiAgICAgICAgIyByZXBsYWNlIFVSTAogICAgICAgICRGQVFEYXRheyJGaWVsZCROdW1iZXIifSA9fiBzeyRTZWFyY2h9eyRSZXBsYWNlfXhtczsKICAgIH0KCiAgICAjIHVwZGF0ZSBGQVEgYXJ0aWNsZSB3aXRob3V0IHdyaXRpbmcgYSBoaXN0b3J5IGVudHJ5CiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5GQVFVcGRhdGUoCiAgICAgICAgJUZBUURhdGEsCiAgICAgICAgSGlzdG9yeU9mZiAgPT4gMSwKICAgICAgICBBcHByb3ZhbE9mZiA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIHVwZGF0ZSB3YXMgc3VjY2Vzc2Z1bAogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgdXBkYXRlIEZBUSBJdGVtIyAnJFBhcmFte0l0ZW1JRH0nISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBGQVFBcnRpY2xlVGl0bGVDbGVhbigpCgpzdHJpcC9jbGVhbiB1cCBhIEZBUSBhcnRpY2xlIHRpdGxlCgogICAgbXkgJE5ld1RpdGxlID0gJEZBUU9iamVjdC0+RkFRQXJ0aWNsZVRpdGxlQ2xlYW4oCiAgICAgICAgVGl0bGUgICAgICA9PiAkT2xkVGl0bGUsCiAgICAgICAgU2l6ZSAgICAgICA9PiAkVGl0bGVTaXplVG9CZURpc3BsYXllZCAgICMgb3B0aW9uYWwsIGlmIDAgZG8gbm90IGN1dCB0aXRsZQogICAgKTsKCj1jdXQKCnN1YiBGQVFBcnRpY2xlVGl0bGVDbGVhbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRUaXRsZSA9ICRQYXJhbXtUaXRsZX0gfHwgJyc7CgogICAgIyBnZXQgY29uZmlnIG9wdGlvbnMKICAgIG15ICRUaXRsZVNpemUgPSAkUGFyYW17U2l6ZX07CiAgICBpZiAoICFkZWZpbmVkICRUaXRsZVNpemUgKSB7CiAgICAgICAgJFRpdGxlU2l6ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRkFROjpUaXRsZVNpemUnKSB8fCAxMDA7CiAgICB9CgogICAgIyB0cmltIHdoaXRlIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgb3IgZW5kCiAgICAkVGl0bGUgPX4gcy8oXlxzK3xccyskKS8vOwoKICAgICMgcmVzaXplIHRpdGxlIGJhc2VkIG9uIGNvbmZpZwogICAgIyBkbyBub3QgY3V0IHRpdGxlLCBpZiBzaXplIHBhcmFtZXRlciB3YXMgMAogICAgaWYgKCRUaXRsZVNpemUpIHsKICAgICAgICAkVGl0bGUgPX4gcy9eKC57JFRpdGxlU2l6ZX0pLiokLyQxIFsuLi5dLzsKICAgIH0KCiAgICByZXR1cm4gJFRpdGxlOwp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9aXRlbSBfRkFRQXBwcm92YWxVcGRhdGUoKQoKdXBkYXRlIHRoZSBhcHByb3ZhbCBzdGF0ZSBvZiBhbiBhcnRpY2xlCgogICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5fRkFRQXBwcm92YWxVcGRhdGUoCiAgICAgICAgSXRlbUlEICAgICA9PiAxMjMsCiAgICAgICAgQXBwcm92ZWQgICA9PiAxLCAgICAjIDB8MSAoZGVmYXVsdCAwKQogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgX0ZBUUFwcHJvdmFsVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtBcHByb3ZlZH0gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBBcHByb3ZlZCBwYXJhbWV0ZXIhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB1cGRhdGUgZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnVVBEQVRFIGZhcV9pdGVtIFNFVCAnCiAgICAgICAgICAgIC4gJ2FwcHJvdmVkID0gPywgJwogICAgICAgICAgICAuICdjaGFuZ2VkID0gY3VycmVudF90aW1lc3RhbXAsICcKICAgICAgICAgICAgLiAnY2hhbmdlZF9ieSA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0FwcHJvdmVkfSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBhcHByb3ZhbCBmZWF0dXJlIGlzIGFjdGl2YXRlZCBhbmQgRkFRIGFydGljbGUgaXMgbm90IGFwcHJvdmVkIHlldAogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0ZBUTo6QXBwcm92YWxSZXF1aXJlZCcpICYmICEkUGFyYW17QXBwcm92ZWR9ICkgewoKICAgICAgICAjIGdldCBGQVEgZGF0YQogICAgICAgIG15ICVGQVFEYXRhID0gJFNlbGYtPkZBUUdldCgKICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIG5ldyBhcHByb3ZhbCB0aWNrZXQKICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5fRkFRQXBwcm92YWxUaWNrZXRDcmVhdGUoCiAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJEZBUURhdGF7Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJEZBUURhdGF7TGFuZ3VhZ2VJRH0sCiAgICAgICAgICAgIEZBUU51bWJlciAgPT4gJEZBUURhdGF7TnVtYmVyfSwKICAgICAgICAgICAgVGl0bGUgICAgICA9PiAkRkFRRGF0YXtUaXRsZX0sCiAgICAgICAgICAgIFN0YXRlSUQgICAgPT4gJEZBUURhdGF7U3RhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NvdWxkIG5vdCBjcmVhdGUgYXBwcm92YWwgdGlja2V0IScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfRkFRQXBwcm92YWxUaWNrZXRDcmVhdGUoKQoKY3JlYXRlcyBhbiBhcHByb3ZhbCB0aWNrZXQKCiAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPl9GQVFBcHByb3ZhbFRpY2tldENyZWF0ZSgKICAgICAgICBJdGVtSUQgICAgID0+IDEyMywKICAgICAgICBDYXRlZ29yeUlEID0+IDIsCiAgICAgICAgTGFuZ3VhZ2VJRCA9PiAxLAogICAgICAgIEZBUU51bWJlciAgPT4gMTAyMTEsCiAgICAgICAgVGl0bGUgICAgICA9PiAnU29tZSBUaXRsZScsCiAgICAgICAgU3RhdGVJRCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgX0ZBUUFwcHJvdmFsVGlja2V0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBDYXRlZ29yeUlEIEZBUU51bWJlciBUaXRsZSBTdGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgc3ViamVjdAogICAgbXkgJFN1YmplY3QgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6QXBwcm92YWxUaWNrZXRTdWJqZWN0Jyk7CiAgICAkU3ViamVjdCA9fiBzeyA8T1RSU19GQVFfTlVNQkVSPiB9eyRQYXJhbXtGQVFOdW1iZXJ9fXhtczsKCiAgICAjIGNoZWNrIGlmIHdlIGNhbiBmaW5kIGV4aXN0aW5nIG9wZW4gYXBwcm92YWwgdGlja2V0cyBmb3IgdGhpcyBGQVEgYXJ0aWNsZQogICAgbXkgQFRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICBSZXN1bHQgICAgPT4gJ0FSUkFZJywKICAgICAgICBUaXRsZSAgICAgPT4gJFN1YmplY3QsCiAgICAgICAgU3RhdGVUeXBlID0+ICdPcGVuJywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgIyB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhbm90aGVyIGFwcHJvdmFsIHRpY2tldCBpZiB0aGVyZSBpcyBzdGlsbCBhdCBsZWFzdCBvbmUgdGlja2V0IG9wZW4KICAgICMgZm9yIHRoaXMgRkFRIGFydGljbGUKICAgIHJldHVybiAxIGlmIEBUaWNrZXRJRHM7CgogICAgIyBnZXQgdGlja2V0IHR5cGUgZnJvbSBTeXNDb25maWcKICAgIG15ICRUaWNrZXRUeXBlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFwcHJvdmFsVGlja2V0VHlwZScpIHx8ICcnOwoKICAgICMgdmFsaWRhdGUgdGlja2V0IHR5cGUgaWYgYW55CiAgICBpZiAoJFRpY2tldFR5cGUpIHsKCiAgICAgICAgIyBnZXQgYSB0aWNrZXQgdHlwZSBsb29rdXAgdGFibGUKICAgICAgICBteSAlVHlwZUxpc3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyktPlR5cGVMaXN0KCk7CiAgICAgICAgbXkgJVR5cGVMb29rdXAgPSByZXZlcnNlICVUeXBlTGlzdDsKCiAgICAgICAgIyBzZXQgJFRpY2tldFR5cGUgdG8gZW1wdHkgaWYgVGlja2V5VHlwZSBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGxvb2t1cCB0YWJsZS4gSWYgc2V0IHRvCiAgICAgICAgIyAgICBlbXB0eSBUaWNrZXRDcmVhdGUoKSB3aWxsIHVzZSBhcyBkZWZhdWx0IFR5cGVJRCA9IDEsIG5vIG1hdHRlciBpZiBpdCBpcyB2YWxpZCBvciBub3QuCiAgICAgICAgJFRpY2tldFR5cGUgPSAkVHlwZUxvb2t1cHskVGlja2V0VHlwZX0gPyAkVGlja2V0VHlwZSA6ICcnOwogICAgfQoKICAgICMgY3JlYXRlIHRpY2tldAogICAgbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgIFRpdGxlICAgID0+ICRTdWJqZWN0LAogICAgICAgIFF1ZXVlICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbFF1ZXVlJykgfHwgJ1JhdycsCiAgICAgICAgTG9jayAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgUHJpb3JpdHkgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFwcHJvdmFsVGlja2V0UHJpb3JpdHknKSB8fCAnMyBub3JtYWwnLAogICAgICAgIFN0YXRlICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnRkFROjpBcHByb3ZhbFRpY2tldERlZmF1bHRTdGF0ZScpIHx8ICduZXcnLAogICAgICAgIFR5cGUgICAgID0+ICRUaWNrZXRUeXBlLAogICAgICAgIE93bmVySUQgID0+IDEsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgogICAgaWYgKCRUaWNrZXRJRCkgewoKICAgICAgICAjIGdldCB1c2VyIG9iamVjdAogICAgICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAgICAgIyBnZXQgVXNlck5hbWUKICAgICAgICBteSAkVXNlck5hbWUgPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBGQVEgc3RhdGUKICAgICAgICBteSAlU3RhdGUgPSAkU2VsZi0+U3RhdGVHZXQoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gJFBhcmFte1N0YXRlSUR9LAogICAgICAgICAgICBVc2VySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2F0ZWdvcmllcyBjYW4gYmUgbmVzdGVkOyB5b3UgY2FuIGhhdmUgc29tZTo6bG9uZzo6Y2F0ZWdvcnkuCiAgICAgICAgbXkgQENhdGVnb3J5TmFtZXM7CiAgICAgICAgbXkgJENhdGVnb3J5SUQgPSAkUGFyYW17Q2F0ZWdvcnlJRH07CiAgICAgICAgQ0FURUdPUlk6CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgbXkgJUNhdGVnb3J5ID0gJFNlbGYtPkNhdGVnb3J5R2V0KAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQENhdGVnb3J5TmFtZXMsICRDYXRlZ29yeXtOYW1lfTsKICAgICAgICAgICAgbGFzdCBDQVRFR09SWSBpZiAhJENhdGVnb3J5e1BhcmVudElEfTsKICAgICAgICAgICAgJENhdGVnb3J5SUQgPSAkQ2F0ZWdvcnl7UGFyZW50SUR9OwogICAgICAgIH0KICAgICAgICBteSAkQ2F0ZWdvcnkgPSBqb2luKCAnOjonLCByZXZlcnNlIEBDYXRlZ29yeU5hbWVzICk7CgogICAgICAgIG15ICRMYW5ndWFnZTsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRkFROjpNdWx0aUxhbmd1YWdlJykgKSB7CiAgICAgICAgICAgICRMYW5ndWFnZSA9ICRTZWxmLT5MYW5ndWFnZUxvb2t1cCgKICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJFBhcmFte0xhbmd1YWdlSUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExhbmd1YWdlID0gJy0nOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYm9keSBmcm9tIGNvbmZpZwogICAgICAgIG15ICRCb2R5ID0gJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFwcHJvdmFsVGlja2V0Qm9keScpOwogICAgICAgICRCb2R5ID1+IHN7IDxPVFJTX0ZBUV9DQVRFR09SWUlEPiB9eyRQYXJhbXtDYXRlZ29yeUlEfX14bXM7CiAgICAgICAgJEJvZHkgPX4gc3sgPE9UUlNfRkFRX0NBVEVHT1JZPiAgIH17JENhdGVnb3J5fXhtczsKICAgICAgICAkQm9keSA9fiBzeyA8T1RSU19GQVFfTEFOR1VBR0U+ICAgfXskTGFuZ3VhZ2V9eG1zOwogICAgICAgICRCb2R5ID1+IHN7IDxPVFJTX0ZBUV9JVEVNSUQ+ICAgICB9eyRQYXJhbXtJdGVtSUR9fXhtczsKICAgICAgICAkQm9keSA9fiBzeyA8T1RSU19GQVFfTlVNQkVSPiAgICAgfXskUGFyYW17RkFRTnVtYmVyfX14bXM7CiAgICAgICAgJEJvZHkgPX4gc3sgPE9UUlNfRkFRX1RJVExFPiAgICAgIH17JFBhcmFte1RpdGxlfX14bXM7CiAgICAgICAgJEJvZHkgPX4gc3sgPE9UUlNfRkFRX0FVVEhPUj4gICAgIH17JFVzZXJOYW1lfXhtczsKICAgICAgICAkQm9keSA9fiBzeyA8T1RSU19GQVFfU1RBVEU+ICAgICAgfXskU3RhdGV7TmFtZX19eG1zOwoKICAgICAgICAjICBnYXRoZXIgdXNlciBkYXRhCiAgICAgICAgbXkgJVVzZXIgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBmcm9tIHN0cmluZwogICAgICAgIG15ICRGcm9tID0gIlwiJFVzZXJ7VXNlckZpcnN0bmFtZX0gJFVzZXJ7VXNlckxhc3RuYW1lfVwiIDwkVXNlcntVc2VyRW1haWx9PiI7CgogICAgICAgICMgY3JlYXRlIGFydGljbGUKICAgICAgICBteSAkQXJ0aWNsZUlEID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBBcnRpY2xlVHlwZSA9PiAnbm90ZS1pbnRlcm5hbCcsCiAgICAgICAgICAgIFNlbmRlclR5cGUgID0+ICdhZ2VudCcsCiAgICAgICAgICAgIEZyb20gICAgICAgID0+ICRGcm9tLAogICAgICAgICAgICBTdWJqZWN0ICAgICA9PiAkU3ViamVjdCwKICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJEJvZHksCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Tm90ZScpLT57SGlzdG9yeVR5cGV9CiAgICAgICAgICAgICAgICB8fCAnQWRkTm90ZScsCiAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ID0+CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Tm90ZScpLT57SGlzdG9yeUNvbW1lbnR9CiAgICAgICAgICAgICAgICB8fCAnJSVOb3RlJywKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJEFydGljbGVJRDsKICAgIH0KCiAgICByZXR1cm47Cn0KCiMKIyBEZWxldGVzIGFsbCBuZWVkZWQgRkFRIGl0ZW0gY2FjaGUgZW50cmllcyBmb3IgYSBnaXZlbiBGQVEgSXRlbUlELgojCnN1YiBfRGVsZXRlRnJvbUZBUUNhY2hlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhJdGVtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY2FjaGUgb2JqZWN0CiAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICAjIENsZWFyIEZBUUdldCBjYWNoZQogICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAnRkFRJywKICAgICAgICBLZXkgID0+ICdGQVFHZXQ6Okl0ZW1JRDo6JyAuICRQYXJhbXtJdGVtSUR9IC4gJzo6SXRlbUZpZWxkczo6MScsCiAgICApOwogICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAnRkFRJywKICAgICAgICBLZXkgID0+ICdGQVFHZXQ6Okl0ZW1JRDo6JyAuICRQYXJhbXtJdGVtSUR9IC4gJzo6SXRlbUZpZWxkczo6MCcsCiAgICApOwoKICAgICMgQ2xlYXIgSXRlbUZlbGRHZXQgY2FjaGUKICAgICRDYWNoZU9iamVjdC0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICA9PiAnSXRlbUZpZWxkR2V0OjpJdGVtSUQ6OicgLiAkUGFyYW17SXRlbUlEfSwKICAgICk7CiAgICByZXR1cm4gMTsKfQoKMTsKCj1lbmQgSW50ZXJuYWw6Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkZBUVNlYXJjaDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpGQVFTZWFyY2ggLSBGQVEgc2VhcmNoIGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgRkFRIHNlYXJjaCBmdW5jdGlvbnMuCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBGQVFTZWFyY2goKQoKc2VhcmNoIGluIEZBUSBhcnRpY2xlcwoKICAgIG15IEBJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCgogICAgICAgIE51bWJlciAgICA9PiAnKjEzNConLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVGl0bGUgICAgID0+ICcqc29tZSB0aXRsZSonLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBpcyBzZWFyY2hpbmcgaW4gTnVtYmVyLCBUaXRsZSwgS2V5d29yZCBhbmQgRmllbGQxLTYKICAgICAgICBXaGF0ICAgICAgPT4gJypzb21lIHRleHQqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBLZXl3b3JkICAgPT4gJyp3ZWJzZXJ2ZXIqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFN0YXRlcyAgICA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgIDEgPT4gJ2ludGVybmFsJywKICAgICAgICAgICAgMiA9PiAnZXh0ZXJuYWwnLAogICAgICAgIH0sCiAgICAgICAgTGFuZ3VhZ2VJRHMgPT4gWyA0LCA1LCA2IF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDYXRlZ29yeUlEcyA9PiBbIDcsIDgsIDkgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbGlkSURzICAgID0+IFsgMSwgMiwgMyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIChkZWZhdWx0IDEpCgogICAgICAgICMgQXBwcm92ZWQKICAgICAgICAjICAgIE9ubHkgYXZhaWxhYmxlIGluIGludGVybmFsIGludGVyZmFjZSAoYWdlbnQgaW50ZXJmYWNlKQogICAgICAgIEFwcHJvdmVkICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIDEgb3IgMCwKCiAgICAgICAgIyBWb3RlcwogICAgICAgICMgICBBdCBsZWFzdCBvbmUgb3BlcmF0b3IgbXVzdCBiZSBzcGVjaWZpZWQuIE9wZXJhdG9ycyB3aWxsIGJlIGNvbm5lY3RlZCB3aXRoIEFORCwKICAgICAgICAjICAgICAgIHZhbHVlcyBpbiBhbiBvcGVyYXRvciB3aXRoIE9SLgogICAgICAgICMgICBZb3UgY2FuIGFsc28gcGFzcyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IHRvIGFuIG9wZXJhdG9yOiBbMTIzLCA2NTRdCiAgICAgICAgVm90ZXMgPT4gewogICAgICAgICAgICBFcXVhbHMgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgIEdyZWF0ZXJUaGFuICAgICAgID0+IDEyMywKICAgICAgICAgICAgR3JlYXRlclRoYW5FcXVhbHMgPT4gMTIzLAogICAgICAgICAgICBTbWFsbGVyVGhhbiAgICAgICA9PiAxMjMsCiAgICAgICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+IDEyMywKICAgICAgICB9CgogICAgICAgICMgUmF0ZQogICAgICAgICMgICBBdCBsZWFzdCBvbmUgb3BlcmF0b3IgbXVzdCBiZSBzcGVjaWZpZWQuIE9wZXJhdG9ycyB3aWxsIGJlIGNvbm5lY3RlZCB3aXRoIEFORCwKICAgICAgICAjICAgICAgIHZhbHVlcyBpbiBhbiBvcGVyYXRvciB3aXRoIE9SLgogICAgICAgICMgICBZb3UgY2FuIGFsc28gcGFzcyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IHRvIGFuIG9wZXJhdG9yOiBbNTAsIDc1XQogICAgICAgIFJhdGUgPT4gewogICAgICAgICAgICBFcXVhbHMgICAgICAgICAgICA9PiA3NSwKICAgICAgICAgICAgR3JlYXRlclRoYW4gICAgICAgPT4gNzUsCiAgICAgICAgICAgIEdyZWF0ZXJUaGFuRXF1YWxzID0+IDc1LAogICAgICAgICAgICBTbWFsbGVyVGhhbiAgICAgICA9PiA3NSwKICAgICAgICAgICAgU21hbGxlclRoYW5FcXVhbHMgPT4gNzUsCiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBGQVEgaXRlbSBwcm9wZXJ0aWVzIChvcHRpb25hbCkKICAgICAgICBDcmVhdGVkVXNlcklEcyA9PiBbMSwgMTIsIDQ1NSwgMzJdCgogICAgICAgICMgY2hhbmdlIEZBUSBpdGVtIHByb3BlcnRpZXMgKG9wdGlvbmFsKQogICAgICAgIExhc3RDaGFuZ2VkVXNlcklEcyA9PiBbMSwgMTIsIDQ1NSwgMzJdCgogICAgICAgICMgRHluYW1pY0ZpZWxkcwogICAgICAgICMgICBBdCBsZWFzdCBvbmUgb3BlcmF0b3IgbXVzdCBiZSBzcGVjaWZpZWQuIE9wZXJhdG9ycyB3aWxsIGJlIGNvbm5lY3RlZCB3aXRoIEFORCwKICAgICAgICAjICAgICAgIHZhbHVlcyBpbiBhbiBvcGVyYXRvciB3aXRoIE9SLgogICAgICAgICMgICBZb3UgY2FuIGFsc28gcGFzcyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IHRvIGFuIG9wZXJhdG9yOiBbJ3ZhbHVlMScsICd2YWx1ZTInXQogICAgICAgIER5bmFtaWNGaWVsZF9GaWVsZE5hbWVYID0+IHsKICAgICAgICAgICAgRXF1YWxzICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICBMaWtlICAgICAgICAgICAgICA9PiAndmFsdWUqJywgICAgICAgICAgICAgICAgIyAiZXF1YWxzIiBvcGVyYXRvciB3aXRoIHdpbGQtY2FyZCBzdXBwb3J0CiAgICAgICAgICAgIEdyZWF0ZXJUaGFuICAgICAgID0+ICcyMDAxLTAxLTAxIDAxOjAxOjAxJywKICAgICAgICAgICAgR3JlYXRlclRoYW5FcXVhbHMgPT4gJzIwMDEtMDEtMDEgMDE6MDE6MDEnLAogICAgICAgICAgICBTbWFsbGVyVGhhbiAgICAgICA9PiAnMjAwMi0wMi0wMiAwMjowMjowMicsCiAgICAgICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+ICcyMDAyLTAyLTAyIDAyOjAyOjAyJywKICAgICAgICB9CgogICAgICAgICMgRkFRIGl0ZW1zIGNyZWF0ZWQgbW9yZSB0aGFuIDYwIG1pbnV0ZXMgYWdvIChpdGVtIG9sZGVyIHRoYW4gNjAgbWludXRlcykgIChvcHRpb25hbCkKICAgICAgICBJdGVtQ3JlYXRlVGltZU9sZGVyTWludXRlcyA9PiA2MCwKICAgICAgICAjIEZBUSBpdGVtIGNyZWF0ZWQgbGVzcyB0aGFuIDEyMCBtaW51dGVzIGFnbyAoaXRlbSBuZXdlciB0aGFuIDEyMCBtaW51dGVzKSAob3B0aW9uYWwpCiAgICAgICAgSXRlbUNyZWF0ZVRpbWVOZXdlck1pbnV0ZXMgPT4gMTIwLAoKICAgICAgICAjIEZBUSBpdGVtcyB3aXRoIGNyZWF0ZSB0aW1lIGFmdGVyIC4uLiAoaXRlbSBuZXdlciB0aGFuIHRoaXMgZGF0ZSkgKG9wdGlvbmFsKQogICAgICAgIEl0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICcyMDA2LTAxLTA5IDAwOjAwOjAxJywKICAgICAgICAjIEZBUSBpdGVtcyB3aXRoIGNyZWF0ZWQgdGltZSBiZWZvcmUgLi4uIChpdGVtIG9sZGVyIHRoYW4gdGhpcyBkYXRlKSAob3B0aW9uYWwpCiAgICAgICAgSXRlbUNyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJzIwMDYtMDEtMTkgMjM6NTk6NTknLAoKICAgICAgICAjIEZBUSBpdGVtcyBjaGFuZ2VkIG1vcmUgdGhhbiA2MCBtaW51dGVzIGFnbyAob3B0aW9uYWwpCiAgICAgICAgSXRlbUNoYW5nZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICAgICAgIyBGQVEgaXRlbXMgY2hhbmdlZCBsZXNzIHRoYW4gMTIwIG1pbnV0ZXMgYWdvIChvcHRpb25hbCkKICAgICAgICBJdGVtQ2hhbmdlVGltZU5ld2VyTWludXRlcyA9PiAxMjAsCgogICAgICAgICMgRkFRIGl0ZW0gd2l0aCBjaGFuZ2VkIHRpbWUgYWZ0ZXIgLi4uIChpdGVtIGNoYW5nZWQgbmV3ZXIgdGhhbiB0aGlzIGRhdGUpIChvcHRpb25hbCkKICAgICAgICBJdGVtQ2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsCiAgICAgICAgIyBGQVEgaXRlbSB3aXRoIGNoYW5nZWQgdGltZSBiZWZvcmUgLi4uIChpdGVtIGNoYW5nZWQgb2xkZXIgdGhhbiB0aGlzIGRhdGUpIChvcHRpb25hbCkKICAgICAgICBJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZSA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsCgogICAgICAgIE9yZGVyQnkgPT4gWyAnRkFRSUQnLCAnVGl0bGUnIF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBbICdGQVFJRCcgXSwKICAgICAgICAjIChGQVFJRCwgTnVtYmVyLCBUaXRsZSwgTGFuZ3VhZ2UsIENhdGVnb3J5LCBWYWxpZCwgQ3JlYXRlZCwKICAgICAgICAjIENoYW5nZWQsIFN0YXRlLCBWb3RlcywgUmVzdWx0KQoKICAgICAgICAjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIE9yZGVyQnk6CiAgICAgICAgIyBUaGUgT3JkZXJCeURpcmVjdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGZvciBlYWNoIE9yZGVyQnkgYXR0cmlidXRlLgogICAgICAgICMgVGhlIHBhaXJpbmcgaXMgbWFkZSBieSB0aGUgYXJyYXkgaW5kZXhlcy4KCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbICdEb3duJywgJ1VwJyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGRlZmF1bHQ6IFsgJ0Rvd24nIF0KICAgICAgICAjIChEb3duIHwgVXApCgogICAgICAgIExpbWl0ICAgICA9PiAxNTAsCgogICAgICAgIEludGVyZmFjZSA9PiB7ICAgICAgICAgICAgICAjIChkZWZhdWx0IGludGVybmFsKQogICAgICAgICAgICBTdGF0ZUlEID0+IDMsCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ3B1YmxpYycsICAgICMgcHVibGljIHwgZXh0ZXJuYWwgfCBpbnRlcm5hbAogICAgICAgIH0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICBASURzID0gKAogICAgICAgIDMyLAogICAgICAgIDEzLAogICAgICAgIDEyLAogICAgICAgIDksCiAgICAgICAgNiwKICAgICAgICA1LAogICAgICAgIDQsCiAgICAgICAgMSwKICAgICk7Cgo9Y3V0CgpzdWIgRkFRU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2UKICAgIGlmICggISRQYXJhbXtJbnRlcmZhY2V9IHx8ICEkUGFyYW17SW50ZXJmYWNlfS0+e05hbWV9ICkgewogICAgICAgICRQYXJhbXtJbnRlcmZhY2V9LT57TmFtZX0gPSAnaW50ZXJuYWwnOwogICAgfQoKICAgICMgdmVyaWZ5IHRoYXQgYWxsIHBhc3NlZCBhcnJheSBwYXJhbWV0ZXJzIGNvbnRhaW4gYW4gYXJyYXkgcmVmZXJlbmNlCiAgICBBUkdVTUVOVDoKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9yZGVyQnkgT3JkZXJCeURpcmVjdGlvbikpIHsKCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gfHw9IFtdOwoKICAgICAgICAgICAgbmV4dCBBUkdVTUVOVDsKICAgICAgICB9CgogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJndW1lbnR9IG5lICdBUlJBWScgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkQXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWZpbmUgb3JkZXIgdGFibGUKICAgIG15ICVPcmRlckJ5VGFibGUgPSAoCgogICAgICAgICMgRkFRIGl0ZW0gYXR0cmlidXRlcwogICAgICAgIEZBUUlEICAgID0+ICdpLmlkJywKICAgICAgICBOdW1iZXIgICA9PiAnaS5mX251bWJlcicsCiAgICAgICAgVGl0bGUgICAgPT4gJ2kuZl9zdWJqZWN0JywKICAgICAgICBMYW5ndWFnZSA9PiAnaS5mX2xhbmd1YWdlX2lkJywKICAgICAgICBDYXRlZ29yeSA9PiAnaS5jYXRlZ29yeV9pZCcsCiAgICAgICAgVmFsaWQgICAgPT4gJ2kudmFsaWRfaWQnLAogICAgICAgIENyZWF0ZWQgID0+ICdpLmNyZWF0ZWQnLAogICAgICAgIENoYW5nZWQgID0+ICdpLmNoYW5nZWQnLAoKICAgICAgICAjIFN0YXRlIGF0dHJpYnV0ZXMKICAgICAgICBTdGF0ZSA9PiAncy5uYW1lJywKCiAgICAgICAgIyBWb3RlIGF0dHJpYnV0ZXMKICAgICAgICBWb3RlcyAgPT4gJ3ZvdGVzJywKICAgICAgICBSZXN1bHQgPT4gJ3ZyYXRlJywKICAgICk7CgogICAgbXkgJEZBUUR5bmFtaWNGaWVsZHMgPSBbXTsKICAgIG15ICVWYWxpZER5bmFtaWNGaWVsZFBhcmFtczsKICAgIG15ICVGQVFEeW5hbWljRmllbGROYW1lMkNvbmZpZzsKCiAgICAjIE9ubHkgZmV0Y2ggRHluYW1pY0ZpZWxkIGRhdGEgaWYgYSBmaWVsZCB3YXMgcmVxdWVzdGVkIGZvciBzZWFyY2hpbmcgb3Igc29ydGluZwogICAgbXkgJFBhcmFtQ2hlY2tTdHJpbmcgPSAoIGpvaW4gJycsIGtleXMgJVBhcmFtICkgfHwgJyc7CgogICAgaWYgKCByZWYgJFBhcmFte09yZGVyQnl9IGVxICdBUlJBWScgKSB7CiAgICAgICAgJFBhcmFtQ2hlY2tTdHJpbmcgLj0gKCBqb2luICcnLCBAeyAkUGFyYW17T3JkZXJCeX0gfSApOwogICAgfQogICAgZWxzaWYgKCByZWYgJFBhcmFte09yZGVyQnl9IG5lICdIQVNIJyApIHsKICAgICAgICAkUGFyYW1DaGVja1N0cmluZyAuPSAkUGFyYW17T3JkZXJCeX0gfHwgJyc7CiAgICB9CgogICAgaWYgKCAkUGFyYW1DaGVja1N0cmluZyA9fiBtL0R5bmFtaWNGaWVsZF8vc214ICkgewoKICAgICAgICAjIENoZWNrIGFsbCBjb25maWd1cmVkIEZBUSBkeW5hbWljIGZpZWxkcwogICAgICAgICRGQVFEeW5hbWljRmllbGRzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdGQVEnLAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkICggQHskRkFRRHluYW1pY0ZpZWxkc30gKSB7CiAgICAgICAgICAgICRWYWxpZER5bmFtaWNGaWVsZFBhcmFtc3sgIkR5bmFtaWNGaWVsZF8iIC4gJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAxOwogICAgICAgICAgICAkRkFRRHluYW1pY0ZpZWxkTmFtZTJDb25maWd7ICREeW5hbWljRmllbGQtPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZDsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBPcmRlckJ5IGNvbnRhaW5zIG9ubHkgdW5pcXVlIHZhbGlkIHZhbHVlcwogICAgbXkgJU9yZGVyQnlTZWVuOwogICAgZm9yIG15ICRPcmRlckJ5ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CgogICAgICAgIGlmICgKICAgICAgICAgICAgISRPcmRlckJ5CiAgICAgICAgICAgIHx8ICggISRPcmRlckJ5VGFibGV7JE9yZGVyQnl9ICYmICEkVmFsaWREeW5hbWljRmllbGRQYXJhbXN7JE9yZGVyQnl9ICkKICAgICAgICAgICAgfHwgJE9yZGVyQnlTZWVueyRPcmRlckJ5fQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeSBjb250YWlucyBpbnZhbGlkIHZhbHVlICckT3JkZXJCeScgIgogICAgICAgICAgICAgICAgICAgIC4gJ29yIHRoZSB2YWx1ZSBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlIScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHJlbWVtYmVyIHRoZSB2YWx1ZSB0byBjaGVjayBpZiBpdCBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlCiAgICAgICAgJE9yZGVyQnlTZWVueyRPcmRlckJ5fSA9IDE7CgogICAgfQoKICAgICMgY2hlY2sgaWYgT3JkZXJCeURpcmVjdGlvbiBhcnJheSBjb250YWlucyBvbmx5ICdVcCcgb3IgJ0Rvd24nCiAgICBESVJFQ1RJT046CiAgICBmb3IgbXkgJERpcmVjdGlvbiAoIEB7ICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAjIG9ubHkgJ1VwJyBvciAnRG93bicgYWxsb3dlZAogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ1VwJzsKICAgICAgICBuZXh0IERJUkVDVElPTiBpZiAkRGlyZWN0aW9uIGVxICdEb3duJzsKCiAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeURpcmVjdGlvbiBjYW4gb25seSBjb250YWluICdVcCcgb3IgJ0Rvd24nISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgU1FMCiAgICBteSAkU1FMID0gJ1NFTEVDVCBpLmlkLCBjb3VudCggdi5pdGVtX2lkICkgYXMgdm90ZXMsIGF2Zyggdi5yYXRlICkgYXMgdnJhdGUgJwogICAgICAgIC4gJ0ZST00gZmFxX2l0ZW0gaSAnCiAgICAgICAgLiAnTEVGVCBKT0lOIGZhcV92b3RpbmcgdiBPTiB2Lml0ZW1faWQgPSBpLmlkICcKICAgICAgICAuICdMRUZUIEpPSU4gZmFxX3N0YXRlIHMgT04gcy5pZCA9IGkuc3RhdGVfaWQnOwoKICAgICMgZXh0ZW5kZWQgU1FMCiAgICBteSAkRXh0ID0gJyc7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICREQk9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZnVsbC10ZXh0IHNlYXJjaAogICAgaWYgKCAkUGFyYW17V2hhdH0gJiYgJFBhcmFte1doYXR9IG5lICcqJyApIHsKCiAgICAgICAgIyBkZWZpbmUgdGhlIHNlYXJjaCBmaWVsZHMgZm9yIGZ1bGwtdGV4dCBzZWFyY2gKICAgICAgICBteSBAU2VhcmNoRmllbGRzID0gKCAnaS5mX251bWJlcicsICdpLmZfc3ViamVjdCcsICdpLmZfa2V5d29yZHMnICk7CgogICAgICAgICMgdXNlZCBmcm9tIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGludGVybmFsKQogICAgICAgIGlmICggJFBhcmFte0ludGVyZmFjZX0tPntOYW1lfSBlcSAnaW50ZXJuYWwnICkgewoKICAgICAgICAgICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDYgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIHN0YXRlIG9mIHRoZSBmaWVsZCAoaW50ZXJuYWwsIGV4dGVybmFsLCBwdWJsaWMpCiAgICAgICAgICAgICAgICBteSAkRmllbGRTdGF0ZSA9ICRDb25maWdPYmplY3QtPkdldCggJ0ZBUTo6SXRlbTo6RmllbGQnIC4gJE51bWJlciApLT57U2hvd307CgogICAgICAgICAgICAgICAgIyBhZGQgYWxsIGludGVybmFsLCBleHRlcm5hbCBhbmQgcHVibGljIGZpZWxkcwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRGaWVsZFN0YXRlIGVxICdpbnRlcm5hbCcKICAgICAgICAgICAgICAgICAgICB8fCAkRmllbGRTdGF0ZSBlcSAnZXh0ZXJuYWwnCiAgICAgICAgICAgICAgICAgICAgfHwgJEZpZWxkU3RhdGUgZXEgJ3B1YmxpYycKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2VhcmNoRmllbGRzLCAnaS5mX2ZpZWxkJyAuICROdW1iZXI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXNlZCBmcm9tIHRoZSBjdXN0b21lciBpbnRlcmZhY2UgKGV4dGVybmFsKQogICAgICAgIGVsc2lmICggJFBhcmFte0ludGVyZmFjZX0tPntOYW1lfSBlcSAnZXh0ZXJuYWwnICkgewoKICAgICAgICAgICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDYgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIHN0YXRlIG9mIHRoZSBmaWVsZCAoaW50ZXJuYWwsIGV4dGVybmFsLCBwdWJsaWMpCiAgICAgICAgICAgICAgICBteSAkRmllbGRTdGF0ZSA9ICRDb25maWdPYmplY3QtPkdldCggJ0ZBUTo6SXRlbTo6RmllbGQnIC4gJE51bWJlciApLT57U2hvd307CgogICAgICAgICAgICAgICAgIyBhZGQgYWxsIGV4dGVybmFsIGFuZCBwdWJsaWMgZmllbGRzCiAgICAgICAgICAgICAgICBpZiAoICRGaWVsZFN0YXRlIGVxICdleHRlcm5hbCcgfHwgJEZpZWxkU3RhdGUgZXEgJ3B1YmxpYycgKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2VhcmNoRmllbGRzLCAnaS5mX2ZpZWxkJyAuICROdW1iZXI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXNlZCBmcm9tIHRoZSBwdWJsaWMgaW50ZXJmYWNlIChwdWJsaWMpCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZvciBteSAkTnVtYmVyICggMSAuLiA2ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzdGF0ZSBvZiB0aGUgZmllbGQgKGludGVybmFsLCBleHRlcm5hbCwgcHVibGljKQogICAgICAgICAgICAgICAgbXkgJEZpZWxkU3RhdGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoICdGQVE6Okl0ZW06OkZpZWxkJyAuICROdW1iZXIgKS0+e1Nob3d9OwoKICAgICAgICAgICAgICAgICMgYWRkIGFsbCBwdWJsaWMgZmllbGRzCiAgICAgICAgICAgICAgICBpZiAoICRGaWVsZFN0YXRlIGVxICdwdWJsaWMnICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFNlYXJjaEZpZWxkcywgJ2kuZl9maWVsZCcgLiAkTnVtYmVyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGFkZCB0aGUgU1FMIGZvciB0aGUgZnVsbC10ZXh0IHNlYXJjaAogICAgICAgICRFeHQgLj0gJERCT2JqZWN0LT5RdWVyeUNvbmRpdGlvbigKICAgICAgICAgICAgS2V5ICAgICAgICAgID0+IFxAU2VhcmNoRmllbGRzLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgPT4gJFBhcmFte1doYXR9LAogICAgICAgICAgICBTZWFyY2hQcmVmaXggPT4gJyonLAogICAgICAgICAgICBTZWFyY2hTdWZmaXggPT4gJyonLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBudW1iZXIKICAgIGlmICggJFBhcmFte051bWJlcn0gKSB7CiAgICAgICAgJFBhcmFte051bWJlcn0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte051bWJlcn0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte051bWJlcn0gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17TnVtYmVyfSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gIiBMT1dFUihpLmZfbnVtYmVyKSBMSUtFIExPV0VSKCciIC4gJFBhcmFte051bWJlcn0gLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSB0aXRsZQogICAgaWYgKCAkUGFyYW17VGl0bGV9ICkgewogICAgICAgICRQYXJhbXtUaXRsZX0gPSAiXCUkUGFyYW17VGl0bGV9XCUiOwogICAgICAgICRQYXJhbXtUaXRsZX0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte1RpdGxlfSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17VGl0bGV9ID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmFte1RpdGxlfSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gIiBMT1dFUihpLmZfc3ViamVjdCkgTElLRSBMT1dFUignIiAuICRQYXJhbXtUaXRsZX0gLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIGxhbmd1YWdlcwogICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2VJRHN9ICYmIHJlZiAkUGFyYW17TGFuZ3VhZ2VJRHN9IGVxICdBUlJBWScgJiYgQHsgJFBhcmFte0xhbmd1YWdlSURzfSB9ICkgewoKICAgICAgICBteSAkSW5TdHJpbmcgPSAkU2VsZi0+X0luQ29uZGl0aW9uR2V0KAogICAgICAgICAgICBUYWJsZUNvbHVtbiA9PiAnaS5mX2xhbmd1YWdlX2lkJywKICAgICAgICAgICAgSURSZWYgICAgICAgPT4gJFBhcmFte0xhbmd1YWdlSURzfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAkSW5TdHJpbmc7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIGNhdGVnb3JpZXMKICAgIGlmICggJFBhcmFte0NhdGVnb3J5SURzfSAmJiByZWYgJFBhcmFte0NhdGVnb3J5SURzfSBlcSAnQVJSQVknICYmIEB7ICRQYXJhbXtDYXRlZ29yeUlEc30gfSApIHsKCiAgICAgICAgbXkgJEluU3RyaW5nID0gJFNlbGYtPl9JbkNvbmRpdGlvbkdldCgKICAgICAgICAgICAgVGFibGVDb2x1bW4gPT4gJ2kuY2F0ZWdvcnlfaWQnLAogICAgICAgICAgICBJRFJlZiAgICAgICA9PiAkUGFyYW17Q2F0ZWdvcnlJRHN9LAogICAgICAgICk7CgogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICRJblN0cmluZzsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlIGZvciBWYWxpZElEcyAob25seSBzZWFyY2ggZm9yIHZhbGlkIEZBUXMpCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZElEc30gKSB7CgogICAgICAgICMgZ2V0IHRoZSB2YWxpZCBpZHMKICAgICAgICBteSBAVmFsaWRJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKCiAgICAgICAgJFBhcmFte1ZhbGlkSURzfSA9IFxAVmFsaWRJRHM7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIFZhbGlkSURzCiAgICBpZiAoICRQYXJhbXtWYWxpZElEc30gJiYgcmVmICRQYXJhbXtWYWxpZElEc30gZXEgJ0FSUkFZJyAmJiBAeyAkUGFyYW17VmFsaWRJRHN9IH0gKSB7CgogICAgICAgIG15ICRJblN0cmluZyA9ICRTZWxmLT5fSW5Db25kaXRpb25HZXQoCiAgICAgICAgICAgIFRhYmxlQ29sdW1uID0+ICdpLnZhbGlkX2lkJywKICAgICAgICAgICAgSURSZWYgICAgICAgPT4gJFBhcmFte1ZhbGlkSURzfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAkSW5TdHJpbmc7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHN0YXRlcwogICAgaWYgKCAkUGFyYW17U3RhdGVzfSAmJiByZWYgJFBhcmFte1N0YXRlc30gZXEgJ0hBU0gnICYmICV7ICRQYXJhbXtTdGF0ZXN9IH0gKSB7CgogICAgICAgIG15IEBTdGF0ZXMgPSBtYXAgeyRffSBrZXlzICV7ICRQYXJhbXtTdGF0ZXN9IH07CgogICAgICAgIG15ICRJblN0cmluZyA9ICRTZWxmLT5fSW5Db25kaXRpb25HZXQoCiAgICAgICAgICAgIFRhYmxlQ29sdW1uID0+ICdzLnR5cGVfaWQnLAogICAgICAgICAgICBJRFJlZiAgICAgICA9PiBcQFN0YXRlcywKICAgICAgICApOwoKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAkSW5TdHJpbmc7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIGtleXdvcmRzCiAgICBpZiAoICRQYXJhbXtLZXl3b3JkfSApIHsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJFBhcmFte0tleXdvcmR9ID0gIlwlJFBhcmFte0tleXdvcmR9XCUiOwogICAgICAgICRQYXJhbXtLZXl3b3JkfSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17S2V5d29yZH0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte0tleXdvcmR9ID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmFte0tleXdvcmR9LCAnTGlrZScgKTsKCiAgICAgICAgaWYgKCAkREJPYmplY3QtPkdldERhdGFiYXNlRnVuY3Rpb24oJ05vTG93ZXJJbkxhcmdlVGV4dCcpICkgewogICAgICAgICAgICAkRXh0IC49ICIgaS5mX2tleXdvcmRzIExJS0UgJyIgLiAkUGFyYW17S2V5d29yZH0gLiAiJyAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkREJPYmplY3QtPkdldERhdGFiYXNlRnVuY3Rpb24oJ0xjYXNlTGlrZUluTGFyZ2VUZXh0JykgKSB7CiAgICAgICAgICAgICRFeHQKICAgICAgICAgICAgICAgIC49ICIgTENBU0UoaS5mX2tleXdvcmRzKSBMSUtFIExDQVNFKCciCiAgICAgICAgICAgICAgICAuICRQYXJhbXtLZXl3b3JkfQogICAgICAgICAgICAgICAgLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRXh0CiAgICAgICAgICAgICAgICAuPSAiIExPV0VSKGkuZl9rZXl3b3JkcykgTElLRSBMT1dFUignIgogICAgICAgICAgICAgICAgLiAkUGFyYW17S2V5d29yZH0KICAgICAgICAgICAgICAgIC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgb25seSBhcHByb3ZlZCBGQVEgYXJ0aWNsZXMgZm9yIHB1YmxpYyBhbmQgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICBpZiAoICRQYXJhbXtJbnRlcmZhY2V9LT57TmFtZX0gZXEgJ3B1YmxpYycgfHwgJFBhcmFte0ludGVyZmFjZX0tPntOYW1lfSBlcSAnZXh0ZXJuYWwnICkgewogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICcgaS5hcHByb3ZlZCA9IDEnOwogICAgfQoKICAgICMgb3RoZXJ3aXNlIGNoZWNrIGlmIG5lZWQgdG8gc2VhcmNoIGZvciBhcHByb3ZlZCBzdGF0dXMKICAgIGVsc2lmICggZGVmaW5lZCAkUGFyYW17QXBwcm92ZWR9ICkgewogICAgICAgIG15ICRBcHByb3ZlZFZhbHVlID0gJFBhcmFte0FwcHJvdmVkfSA/IDEgOiAwOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICIgaS5hcHByb3ZlZCA9ICRBcHByb3ZlZFZhbHVlIjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgY3JlYXRlIHVzZXJzCiAgICBpZiAoCiAgICAgICAgJFBhcmFte0NyZWF0ZWRVc2VySURzfQogICAgICAgICYmIHJlZiAkUGFyYW17Q3JlYXRlZFVzZXJJRHN9IGVxICdBUlJBWScKICAgICAgICAmJiBAeyAkUGFyYW17Q3JlYXRlZFVzZXJJRHN9IH0KICAgICAgICApCiAgICB7CgogICAgICAgIG15ICRJblN0cmluZyA9ICRTZWxmLT5fSW5Db25kaXRpb25HZXQoCiAgICAgICAgICAgIFRhYmxlQ29sdW1uID0+ICdpLmNyZWF0ZWRfYnknLAogICAgICAgICAgICBJRFJlZiAgICAgICA9PiAkUGFyYW17Q3JlYXRlZFVzZXJJRHN9LAogICAgICAgICk7CgogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICRJblN0cmluZzsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgbGFzdCBjaGFuZ2UgdXNlcnMKICAgIGlmICgKICAgICAgICAkUGFyYW17TGFzdENoYW5nZWRVc2VySURzfQogICAgICAgICYmIHJlZiAkUGFyYW17TGFzdENoYW5nZWRVc2VySURzfSBlcSAnQVJSQVknCiAgICAgICAgJiYgQHsgJFBhcmFte0xhc3RDaGFuZ2VkVXNlcklEc30gfQogICAgICAgICkKICAgIHsKCiAgICAgICAgbXkgJEluU3RyaW5nID0gJFNlbGYtPl9JbkNvbmRpdGlvbkdldCgKICAgICAgICAgICAgVGFibGVDb2x1bW4gPT4gJ2kuY2hhbmdlZF9ieScsCiAgICAgICAgICAgIElEUmVmICAgICAgID0+ICRQYXJhbXtMYXN0Q2hhbmdlZFVzZXJJRHN9LAogICAgICAgICk7CgogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICRJblN0cmluZzsKICAgIH0KCiAgICAjIGdldCB0aW1lIG9iamVjdAogICAgbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKICAgICMgc2VhcmNoIGZvciBjcmVhdGUgYW5kIGNoYW5nZSB0aW1lcwogICAgIyByZW1lbWJlciBjdXJyZW50IHRpbWUgdG8gcHJldmVudCBzZWFyY2hlcyBmb3IgZnV0dXJlIHRpbWVzdGFtcHMKICAgIG15ICRDdXJyZW50U3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CgogICAgIyBnZXQgRkFRIGl0ZW1zIGNyZWF0ZWQgb2xkZXIgdGhhbiB4IG1pbnV0ZXMKICAgIGlmICggZGVmaW5lZCAkUGFyYW17SXRlbUNyZWF0ZVRpbWVPbGRlck1pbnV0ZXN9ICkgewoKICAgICAgICAkUGFyYW17SXRlbUNyZWF0ZVRpbWVPbGRlck1pbnV0ZXN9IHx8PSAwOwoKICAgICAgICBteSAkVGltZVN0YW1wID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKTsKICAgICAgICAkVGltZVN0YW1wIC09ICggJFBhcmFte0l0ZW1DcmVhdGVUaW1lT2xkZXJNaW51dGVzfSAqIDYwICk7CgogICAgICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZX0gPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVTdGFtcCwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEZBUSBpdGVtcyBjcmVhdGVkIG5ld2VyIHRoYW4geCBtaW51dGVzCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0l0ZW1DcmVhdGVUaW1lTmV3ZXJNaW51dGVzfSApIHsKCiAgICAgICAgJFBhcmFte0l0ZW1DcmVhdGVUaW1lTmV3ZXJNaW51dGVzfSB8fD0gMDsKCiAgICAgICAgbXkgJFRpbWVTdGFtcCA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CiAgICAgICAgJFRpbWVTdGFtcCAtPSAoICRQYXJhbXtJdGVtQ3JlYXRlVGltZU5ld2VyTWludXRlc30gKiA2MCApOwoKICAgICAgICAkUGFyYW17SXRlbUNyZWF0ZVRpbWVOZXdlckRhdGV9ID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRUaW1lU3RhbXAsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgaXRlbXMgY3JlYXRlZCBvbGRlciB0aGFuIHh4eHgteHgteHggeHg6eHggZGF0ZQogICAgbXkgJENvbXBhcmVDcmVhdGVUaW1lT2xkZXJOZXdlckRhdGU7CiAgICBpZiAoICRQYXJhbXtJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZX0gKSB7CgogICAgICAgICMgY2hlY2sgdGltZSBmb3JtYXQKICAgICAgICBpZiAoCiAgICAgICAgICAgICRQYXJhbXtJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZX0KICAgICAgICAgICAgIX4gL1xkXGRcZFxkLShcZFxkfFxkKS0oXGRcZHxcZCkgKFxkXGR8XGQpOihcZFxkfFxkKTooXGRcZHxcZCkvCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIHRpbWUgZm9ybWF0ICckUGFyYW17SXRlbUNyZWF0ZVRpbWVPbGRlckRhdGV9JyEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBteSAkVGltZSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZX0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkVGltZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICJTZWFyY2ggbm90IGV4ZWN1dGVkIGR1ZSB0byBpbnZhbGlkIHRpbWUgJyIKICAgICAgICAgICAgICAgICAgICAuICRQYXJhbXtJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZX0gLiAiJyEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkQ29tcGFyZUNyZWF0ZVRpbWVPbGRlck5ld2VyRGF0ZSA9ICRUaW1lOwoKICAgICAgICAkRXh0IC49ICIgQU5EIGkuY3JlYXRlZCA8PSAnIgogICAgICAgICAgICAuICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXtJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZX0gKSAuICInIjsKICAgIH0KCiAgICAjIGdldCBJdGVtcyBjaGFuZ2VkIG5ld2VyIHRoYW4geHh4eC14eC14eCB4eDp4eCBkYXRlCiAgICBpZiAoICRQYXJhbXtJdGVtQ3JlYXRlVGltZU5ld2VyRGF0ZX0gKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgICAkUGFyYW17SXRlbUNyZWF0ZVRpbWVOZXdlckRhdGV9CiAgICAgICAgICAgICF+IC9cZFxkXGRcZC0oXGRcZHxcZCktKFxkXGR8XGQpIChcZFxkfFxkKTooXGRcZHxcZCk6KFxkXGR8XGQpLwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiSW52YWxpZCB0aW1lIGZvcm1hdCAnJFBhcmFte0l0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlfSchIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbXkgJFRpbWUgPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17SXRlbUNyZWF0ZVRpbWVOZXdlckRhdGV9LAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJFRpbWUgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiU2VhcmNoIG5vdCBleGVjdXRlZCBkdWUgdG8gaW52YWxpZCB0aW1lICciCiAgICAgICAgICAgICAgICAgICAgLiAkUGFyYW17SXRlbUNyZWF0ZVRpbWVOZXdlckRhdGV9IC4gIichIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZG9uJ3QgZXhlY3V0ZSBxdWVyaWVzIGlmIG5ld2VyIGRhdGUgaXMgYWZ0ZXIgY3VycmVudCBkYXRlCiAgICAgICAgcmV0dXJuIGlmICRUaW1lID4gJEN1cnJlbnRTeXN0ZW1UaW1lOwoKICAgICAgICAjIGRvbid0IGV4ZWN1dGUgcXVlcmllcyBpZiBvbGRlci9uZXdlciBkYXRlIHJlc3RyaWN0aW9uIHNob3cgbm93IHZhbGlkIHRpbWUgZnJhbWUKICAgICAgICByZXR1cm4gaWYgJENvbXBhcmVDcmVhdGVUaW1lT2xkZXJOZXdlckRhdGUgJiYgJFRpbWUgPiAkQ29tcGFyZUNyZWF0ZVRpbWVPbGRlck5ld2VyRGF0ZTsKCiAgICAgICAgJEV4dCAuPSAiIEFORCBpLmNyZWF0ZWQgPj0gJyIKICAgICAgICAgICAgLiAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17SXRlbUNyZWF0ZVRpbWVOZXdlckRhdGV9ICkgLiAiJyI7CiAgICB9CgogICAgIyBnZXQgRkFRIGl0ZW1zIGNoYW5nZWQgb2xkZXIgdGhhbiB4IG1pbnV0ZXMKICAgIGlmICggZGVmaW5lZCAkUGFyYW17SXRlbUNoYW5nZVRpbWVPbGRlck1pbnV0ZXN9ICkgewoKICAgICAgICAkUGFyYW17SXRlbUNoYW5nZVRpbWVPbGRlck1pbnV0ZXN9IHx8PSAwOwoKICAgICAgICBteSAkVGltZVN0YW1wID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKTsKICAgICAgICAkVGltZVN0YW1wIC09ICggJFBhcmFte0l0ZW1DaGFuZ2VUaW1lT2xkZXJNaW51dGVzfSAqIDYwICk7CgogICAgICAgICRQYXJhbXtJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZX0gPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVTdGFtcCwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEZBUSBpdGVtcyBjaGFuZ2VkIG5ld2VyIHRoYW4geCBtaW51dGVzCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0l0ZW1DaGFuZ2VUaW1lTmV3ZXJNaW51dGVzfSApIHsKCiAgICAgICAgJFBhcmFte0l0ZW1DaGFuZ2VUaW1lTmV3ZXJNaW51dGVzfSB8fD0gMDsKCiAgICAgICAgbXkgJFRpbWVTdGFtcCA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CiAgICAgICAgJFRpbWVTdGFtcCAtPSAoICRQYXJhbXtJdGVtQ2hhbmdlVGltZU5ld2VyTWludXRlc30gKiA2MCApOwoKICAgICAgICAkUGFyYW17SXRlbUNoYW5nZVRpbWVOZXdlckRhdGV9ID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRUaW1lU3RhbXAsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBGQVEgaXRlbXMgY2hhbmdlZCBvbGRlciB0aGFuIHh4eHgteHgteHggeHg6eHggZGF0ZQogICAgbXkgJENvbXBhcmVDaGFuZ2VUaW1lT2xkZXJOZXdlckRhdGU7CiAgICBpZiAoICRQYXJhbXtJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZX0gKSB7CgogICAgICAgICMgY2hlY2sgdGltZSBmb3JtYXQKICAgICAgICBpZiAoCiAgICAgICAgICAgICRQYXJhbXtJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZX0KICAgICAgICAgICAgIX4gL1xkXGRcZFxkLShcZFxkfFxkKS0oXGRcZHxcZCkgKFxkXGR8XGQpOihcZFxkfFxkKTooXGRcZHxcZCkvCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIHRpbWUgZm9ybWF0ICckUGFyYW17SXRlbUNoYW5nZVRpbWVPbGRlckRhdGV9JyEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBteSAkVGltZSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZX0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkVGltZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICJTZWFyY2ggbm90IGV4ZWN1dGVkIGR1ZSB0byBpbnZhbGlkIHRpbWUgJyIKICAgICAgICAgICAgICAgICAgICAuICRQYXJhbXtJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZX0gLiAiJyEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkQ29tcGFyZUNoYW5nZVRpbWVPbGRlck5ld2VyRGF0ZSA9ICRUaW1lOwoKICAgICAgICAkRXh0IC49ICIgQU5EIGkuY2hhbmdlZCA8PSAnIgogICAgICAgICAgICAuICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXtJdGVtQ2hhbmdlVGltZU9sZGVyRGF0ZX0gKSAuICInIjsKICAgIH0KCiAgICAjIGdldCBJdGVtcyBjaGFuZ2VkIG5ld2VyIHRoYW4geHh4eC14eC14eCB4eDp4eCBkYXRlCiAgICBpZiAoICRQYXJhbXtJdGVtQ2hhbmdlVGltZU5ld2VyRGF0ZX0gKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgICAkUGFyYW17SXRlbUNoYW5nZVRpbWVOZXdlckRhdGV9CiAgICAgICAgICAgICF+IC9cZFxkXGRcZC0oXGRcZHxcZCktKFxkXGR8XGQpIChcZFxkfFxkKTooXGRcZHxcZCk6KFxkXGR8XGQpLwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiSW52YWxpZCB0aW1lIGZvcm1hdCAnJFBhcmFte0l0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlfSchIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbXkgJFRpbWUgPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17SXRlbUNoYW5nZVRpbWVOZXdlckRhdGV9LAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJFRpbWUgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAiU2VhcmNoIG5vdCBleGVjdXRlZCBkdWUgdG8gaW52YWxpZCB0aW1lICciCiAgICAgICAgICAgICAgICAgICAgLiAkUGFyYW17SXRlbUNoYW5nZVRpbWVOZXdlckRhdGV9IC4gIichIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZG9uJ3QgZXhlY3V0ZSBxdWVyaWVzIGlmIG5ld2VyIGRhdGUgaXMgYWZ0ZXIgY3VycmVudCBkYXRlCiAgICAgICAgcmV0dXJuIGlmICRUaW1lID4gJEN1cnJlbnRTeXN0ZW1UaW1lOwoKICAgICAgICAjIGRvbid0IGV4ZWN1dGUgcXVlcmllcyBpZiBvbGRlci9uZXdlciBkYXRlIHJlc3RyaWN0aW9uIHNob3cgbm93IHZhbGlkIHRpbWUgZnJhbWUKICAgICAgICByZXR1cm4gaWYgJENvbXBhcmVDaGFuZ2VUaW1lT2xkZXJOZXdlckRhdGUgJiYgJFRpbWUgPiAkQ29tcGFyZUNoYW5nZVRpbWVPbGRlck5ld2VyRGF0ZTsKCiAgICAgICAgJEV4dCAuPSAiIEFORCBpLmNoYW5nZWQgPj0gJyIKICAgICAgICAgICAgLiAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17SXRlbUNoYW5nZVRpbWVOZXdlckRhdGV9ICkgLiAiJyI7CiAgICB9CgogICAgIyBhZGQgV0hFUkUgc3RhdGVtZW50CiAgICBpZiAoJEV4dCkgewogICAgICAgICRFeHQgPSAnIFdIRVJFICcgLiAkRXh0OwogICAgfQoKICAgICMgUmVtZW1iZXIgYWxyZWFkeSBqb2luZWQgdGFibGVzIGZvciBzb3J0aW5nLgogICAgbXkgJUR5bmFtaWNGaWVsZEpvaW5UYWJsZXM7CiAgICBteSAkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIgPSAxOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFjay1lbmQgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICBEWU5BTUlDX0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyRGQVFEeW5hbWljRmllbGRzfSApIHsKICAgICAgICBteSAkU2VhcmNoUGFyYW0gPSAkUGFyYW17ICJEeW5hbWljRmllbGRfIiAuICREeW5hbWljRmllbGQtPntOYW1lfSB9OwoKICAgICAgICBuZXh0IERZTkFNSUNfRklFTEQgaWYgKCAhJFNlYXJjaFBhcmFtICk7CiAgICAgICAgbmV4dCBEWU5BTUlDX0ZJRUxEIGlmICggcmVmICRTZWFyY2hQYXJhbSBuZSAnSEFTSCcgKTsKCiAgICAgICAgbXkgJE5lZWRKb2luOwoKICAgICAgICBmb3IgbXkgJE9wZXJhdG9yICggc29ydCBrZXlzICV7JFNlYXJjaFBhcmFtfSApIHsKCiAgICAgICAgICAgIG15IEBTZWFyY2hQYXJhbXMgPSAoIHJlZiAkU2VhcmNoUGFyYW0tPnskT3BlcmF0b3J9IGVxICdBUlJBWScgKQogICAgICAgICAgICAgICAgPyBAeyAkU2VhcmNoUGFyYW0tPnskT3BlcmF0b3J9IH0KICAgICAgICAgICAgICAgIDogKCAkU2VhcmNoUGFyYW0tPnskT3BlcmF0b3J9ICk7CgogICAgICAgICAgICBteSAkU1FMRXh0U3ViID0gJyBBTkQgKCc7CiAgICAgICAgICAgIG15ICRDb3VudGVyICAgPSAwOwogICAgICAgICAgICBURVhUOgogICAgICAgICAgICBmb3IgbXkgJFRleHQgKEBTZWFyY2hQYXJhbXMpIHsKICAgICAgICAgICAgICAgIG5leHQgVEVYVCBpZiAoICFkZWZpbmVkICRUZXh0IHx8ICRUZXh0IGVxICcnICk7CgogICAgICAgICAgICAgICAgJFRleHQgPX4gcy9cKi8lL2dpOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgc2VhcmNoIGF0dHJpYnV0ZSwgd2UgZG8gbm90IG5lZWQgdG8gc2VhcmNoIGZvciAqCiAgICAgICAgICAgICAgICBuZXh0IFRFWFQgaWYgJFRleHQgPX4gL15cJXsxLDN9JC87CgogICAgICAgICAgICAgICAgIyB2YWxpZGF0ZSBkYXRhIHR5cGUKICAgICAgICAgICAgICAgIG15ICRWYWxpZGF0ZVN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVWYWxpZGF0ZSgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFRleHQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISRWYWxpZGF0ZVN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWFyY2ggbm90IGV4ZWN1dGVkIGR1ZSB0byBpbnZhbGlkIHZhbHVlICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRUZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICInIG9uIGZpZWxkICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICREeW5hbWljRmllbGQtPntOYW1lfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiJyEiLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJENvdW50ZXIpIHsKICAgICAgICAgICAgICAgICAgICAkU1FMRXh0U3ViIC49ICcgT1IgJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRTUUxFeHRTdWIgLj0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaFNRTEdldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgICAgICAgICAgICAgICAgICBUYWJsZUFsaWFzICAgICAgICAgPT4gImRmdiREeW5hbWljRmllbGRKb2luQ291bnRlciIsCiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IgICAgICAgICAgID0+ICRPcGVyYXRvciwKICAgICAgICAgICAgICAgICAgICBTZWFyY2hUZXJtICAgICAgICAgPT4gJFRleHQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNRTEV4dFN1YiAuPSAnKSc7CiAgICAgICAgICAgIGlmICgkQ291bnRlcikgewogICAgICAgICAgICAgICAgJEV4dCAuPSAkU1FMRXh0U3ViOwogICAgICAgICAgICAgICAgJE5lZWRKb2luID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCROZWVkSm9pbikgewoKICAgICAgICAgICAgIyBKb2luIHRoZSB0YWJsZSBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgICAgICRTUUwgLj0gIiBJTk5FUiBKT0lOIGR5bmFtaWNfZmllbGRfdmFsdWUgZGZ2JER5bmFtaWNGaWVsZEpvaW5Db3VudGVyCiAgICAgICAgICAgICAgICBPTiAoaS5pZCA9IGRmdiREeW5hbWljRmllbGRKb2luQ291bnRlci5vYmplY3RfaWQKICAgICAgICAgICAgICAgICAgICBBTkQgZGZ2JER5bmFtaWNGaWVsZEpvaW5Db3VudGVyLmZpZWxkX2lkID0gIiAuCiAgICAgICAgICAgICAgICAkREJPYmplY3QtPlF1b3RlKCAkRHluYW1pY0ZpZWxkLT57SUR9LCAnSW50ZWdlcicgKSAuICIpICI7CgogICAgICAgICAgICAkRHluYW1pY0ZpZWxkSm9pblRhYmxlc3sgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAiZGZ2JER5bmFtaWNGaWVsZEpvaW5Db3VudGVyIjsKCiAgICAgICAgICAgICREeW5hbWljRmllbGRKb2luQ291bnRlcisrOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBHUk9VUCBCWQogICAgJEV4dAogICAgICAgIC49ICcgR1JPVVAgQlkgaS5pZCwgaS5mX3N1YmplY3QsIGkuZl9sYW5ndWFnZV9pZCwgaS5jcmVhdGVkLCBpLmNoYW5nZWQsIHMubmFtZSwgdi5pdGVtX2lkICc7CgogICAgIyBhZGQgSEFWSU5HIGNsYXVzZSAoIFZvdGVzIGFuZCBSYXRlIGFyZSBhZ2dyZWdhdGVkIGNvbHVtbnMsIHRoZXkgY2FuJ3QgYmUgaW4gdGhlIFdIRVJFIGNsYXVzZSkKICAgICMgZGVmaW5lZCB2b3RpbmcgcGFyYW1ldGVycyAoZm9yIFZvdGVzIGFuZCBSYXRlKQogICAgbXkgJVZvdGluZ09wZXJhdG9ycyA9ICgKICAgICAgICBFcXVhbHMgICAgICAgICAgICA9PiAnPScsCiAgICAgICAgR3JlYXRlclRoYW4gICAgICAgPT4gJz4nLAogICAgICAgIEdyZWF0ZXJUaGFuRXF1YWxzID0+ICc+PScsCiAgICAgICAgU21hbGxlclRoYW4gICAgICAgPT4gJzwnLAogICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+ICc8PScsCiAgICApOwoKICAgIG15ICRIYXZpbmdQcmludDsKICAgIG15ICRBZGRlZENvbmRpdGlvbjsKCiAgICBIQVZJTkdfUEFSQU06CiAgICBmb3IgbXkgJEhhdmluZ1BhcmFtIChxdyhWb3RlcyBSYXRlKSkgewogICAgICAgIG15ICRTZWFyY2hQYXJhbSA9ICRQYXJhbXskSGF2aW5nUGFyYW19OwoKICAgICAgICBuZXh0IEhBVklOR19QQVJBTSBpZiAoICEkU2VhcmNoUGFyYW0gKTsKICAgICAgICBuZXh0IEhBVklOR19QQVJBTSBpZiAoIHJlZiAkU2VhcmNoUGFyYW0gbmUgJ0hBU0gnICk7CgogICAgICAgIE9QRVJBVE9SOgogICAgICAgIGZvciBteSAkT3BlcmF0b3IgKCBzb3J0IGtleXMgJXskU2VhcmNoUGFyYW19ICkgewoKICAgICAgICAgICAgbmV4dCBPUEVSQVRPUiBpZiAhKCAkVm90aW5nT3BlcmF0b3JzeyRPcGVyYXRvcn0gKTsKCiAgICAgICAgICAgICMgcHJpbnQgSEFWSU5HIGNsYXVzZSBqdXN0IG9uY2UgaWYgYW5kIGp1c3QgaWYgdGhlIG9wZXJhdG9yIGlzIHZhbGlkCiAgICAgICAgICAgIGlmICggISRIYXZpbmdQcmludCApIHsKICAgICAgICAgICAgICAgICRFeHQgLj0gJyBIQVZJTkcgJzsKICAgICAgICAgICAgICAgICRIYXZpbmdQcmludCA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRTUUxFeHRTdWI7CgogICAgICAgICAgICBteSBAU2VhcmNoUGFyYW1zID0gKCByZWYgJFNlYXJjaFBhcmFtLT57JE9wZXJhdG9yfSBlcSAnQVJSQVknICkKICAgICAgICAgICAgICAgID8gQHsgJFNlYXJjaFBhcmFtLT57JE9wZXJhdG9yfSB9CiAgICAgICAgICAgICAgICA6ICggJFNlYXJjaFBhcmFtLT57JE9wZXJhdG9yfSApOwoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIEFORCBvbiB0aGUgZmlyc3QgY29uZGl0aW9uCiAgICAgICAgICAgIGlmICgkQWRkZWRDb25kaXRpb24pIHsKICAgICAgICAgICAgICAgICRTUUxFeHRTdWIgLj0gJyBBTkQgKCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU1FMRXh0U3ViIC49ICcgKCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgICAgICBURVhUOgogICAgICAgICAgICBmb3IgbXkgJFRleHQgKEBTZWFyY2hQYXJhbXMpIHsKICAgICAgICAgICAgICAgIG5leHQgVEVYVCBpZiAoICFkZWZpbmVkICRUZXh0IHx8ICRUZXh0IGVxICcnICk7CgogICAgICAgICAgICAgICAgJFRleHQgPX4gcy9cKi8lL2dpOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgc2VhcmNoIGF0dHJpYnV0ZSwgd2UgZG8gbm90IG5lZWQgdG8gc2VhcmNoIGZvciAqCiAgICAgICAgICAgICAgICBuZXh0IFRFWFQgaWYgJFRleHQgPX4gL15cJXsxLDN9JC87CgogICAgICAgICAgICAgICAgJFNRTEV4dFN1YiAuPSAnIE9SICcgaWYgKCRDb3VudGVyKTsKCiAgICAgICAgICAgICAgICAjIGRlZmluZSBhZ2dyZWdhdGlvbiBjb2x1bW4KICAgICAgICAgICAgICAgIG15ICRBZ2dyZWdhdGVDb2x1bW4gPSAnY291bnQoIHYuaXRlbV9pZCApJzsKICAgICAgICAgICAgICAgIGlmICggJEhhdmluZ1BhcmFtIGVxICdSYXRlJyApIHsKICAgICAgICAgICAgICAgICAgICAkQWdncmVnYXRlQ29sdW1uID0gJ2F2Zyggdi5yYXRlICknOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2V0IGNvbmRpdGlvbgogICAgICAgICAgICAgICAgJFNRTEV4dFN1YiAuPSAiICRBZ2dyZWdhdGVDb2x1bW4gJFZvdGluZ09wZXJhdG9yc3skT3BlcmF0b3J9ICI7CiAgICAgICAgICAgICAgICAkU1FMRXh0U3ViIC49ICREQk9iamVjdC0+UXVvdGUoICRUZXh0LCAnTnVtYmVyJyApIC4gIiAiOwoKICAgICAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2xvc2UgY29uZGl0aW9uCiAgICAgICAgICAgICRTUUxFeHRTdWIgLj0gJykgJzsKCiAgICAgICAgICAgICMgYWRkIGNvbmRpdGlvbiB0byB0aGUgZmluYWwgU1FMIHN0YXRlbWVudAogICAgICAgICAgICBpZiAoJENvdW50ZXIpIHsKICAgICAgICAgICAgICAgICRFeHQgLj0gJFNRTEV4dFN1YjsKICAgICAgICAgICAgICAgICRBZGRlZENvbmRpdGlvbiA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBkYXRhYmFzZSBxdWVyeSBmb3Igc29ydC9vcmRlciBieSBvcHRpb24KICAgICRFeHQgLj0gJyBPUkRFUiBCWSc7CiAgICBmb3IgbXkgJENvdW50ICggMCAuLiAkI3sgJFBhcmFte09yZGVyQnl9IH0gKSB7CiAgICAgICAgaWYgKCAkQ291bnQgPiAwICkgewogICAgICAgICAgICAkRXh0IC49ICcsJzsKICAgICAgICB9CgogICAgICAgICMgc29ydCBieSBkeW5hbWljIGZpZWxkCiAgICAgICAgaWYgKCAkVmFsaWREeW5hbWljRmllbGRQYXJhbXN7ICRQYXJhbXtPcmRlckJ5fS0+WyRDb3VudF0gfSApIHsKICAgICAgICAgICAgbXkgKCREeW5hbWljRmllbGROYW1lKSA9ICRQYXJhbXtPcmRlckJ5fS0+WyRDb3VudF0gPX4gbS9eRHluYW1pY0ZpZWxkXyguKikkL3NteDsKCiAgICAgICAgICAgIG15ICREeW5hbWljRmllbGQgPSAkRkFRRHluYW1pY0ZpZWxkTmFtZTJDb25maWd7JER5bmFtaWNGaWVsZE5hbWV9OwoKICAgICAgICAgICAgIyBJZiB0aGUgdGFibGUgd2FzIGFscmVhZHkgam9pbmVkIGZvciBzZWFyY2hpbmcsIHdlIHJldXNlIGl0LgogICAgICAgICAgICBpZiAoICEkRHluYW1pY0ZpZWxkSm9pblRhYmxlc3skRHluYW1pY0ZpZWxkTmFtZX0gKSB7CgogICAgICAgICAgICAgICAgIyBKb2luIHRoZSB0YWJsZSBmb3IgdGhpcyBkeW5hbWljIGZpZWxkOyB1c2UgYSBsZWZ0IG91dGVyIGpvaW4gaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgICAgIyBXaXRoIGFuIElOTkVSIEpPSU4gd2UnZCBsaW1pdCB0aGUgcmVzdWx0IHNldCB0byB0aWNrZXRzIHdoaWNoIGhhdmUgYW4gZW50cnkKICAgICAgICAgICAgICAgICMgICBmb3IgdGhlIERGIHdoaWNoIGlzIHVzZWQgZm9yIHNvcnRpbmcuCiAgICAgICAgICAgICAgICAkU1FMCiAgICAgICAgICAgICAgICAgICAgLj0gIiBMRUZUIE9VVEVSIEpPSU4gZHluYW1pY19maWVsZF92YWx1ZSBkZnYkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIKICAgICAgICAgICAgICAgICAgICBPTiAoaS5pdGVtX2lkID0gZGZ2JER5bmFtaWNGaWVsZEpvaW5Db3VudGVyLm9iamVjdF9pZAogICAgICAgICAgICAgICAgICAgICAgICBBTkQgZGZ2JER5bmFtaWNGaWVsZEpvaW5Db3VudGVyLmZpZWxkX2lkID0gIiAuCiAgICAgICAgICAgICAgICAgICAgJERCT2JqZWN0LT5RdW90ZSggJER5bmFtaWNGaWVsZC0+e0lEfSwgJ0ludGVnZXInICkgLiAiKSAiOwoKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRKb2luVGFibGVzeyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9ICJkZnYkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIiOwoKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRKb2luQ291bnRlcisrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkU1FMT3JkZXJGaWVsZCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hTUUxPcmRlckZpZWxkR2V0KAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGQsCiAgICAgICAgICAgICAgICBUYWJsZUFsaWFzICAgICAgICAgPT4gJER5bmFtaWNGaWVsZEpvaW5UYWJsZXN7JER5bmFtaWNGaWVsZE5hbWV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJEV4dCAuPSAiICRTUUxPcmRlckZpZWxkICI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyByZWd1bGFyIHNvcnQKICAgICAgICAgICAgJEV4dCAuPSAnICcgLiAkT3JkZXJCeVRhYmxleyAkUGFyYW17T3JkZXJCeX0tPlskQ291bnRdIH07CiAgICAgICAgfQoKICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gZXEgJ1VwJyApIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFTQyc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRXh0IC49ICcgREVTQyc7CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBvcmRlcmluZyBpcyBub3QgZGV0ZXJtaW5lZAogICAgIyB3ZSBhZGQgYW4gZGVzY2VuZGluZyBvcmRlcmluZyBieSBpZAogICAgaWYgKCAhZ3JlcCB7ICRfIGVxICdGQVFJRCcgfSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgKSB7CiAgICAgICAgaWYgKCAkI3sgJFBhcmFte09yZGVyQnl9IH0gPj0gMCApIHsKICAgICAgICAgICAgJEV4dCAuPSAnLCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gJyAnIC4gJE9yZGVyQnlUYWJsZXtGQVFJRH0gLiAnIERFU0MnOwogICAgfQoKICAgICMgYWRkIGV4dGVuZGVkIFNRTAogICAgJFNRTCAuPSAkRXh0OwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+ICRQYXJhbXtMaW1pdH0gfHwgNTAwCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBMaXN0LCAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBATGlzdDsKfQoKPWJlZ2luIEludGVybmFsOgoKPWN1dAoKPWl0ZW0gX0luQ29uZGl0aW9uR2V0KCkKCmludGVybmFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbgoKICAgIHRhYmxlLmNvbHVtbiBJTiAodmFsdWVzKQoKY29uZGl0aW9uIHN0cmluZyBmcm9tIGFuIGFycmF5LgoKICAgIG15ICRTUUxQYXJ0ID0gJFRpY2tldE9iamVjdC0+X0luQ29uZGl0aW9uR2V0KAogICAgICAgIFRhYmxlQ29sdW1uID0+ICd0YWJsZS5jb2x1bW4nLAogICAgICAgIElEUmVmICAgICAgID0+ICRBcnJheVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgX0luQ29uZGl0aW9uR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkS2V5IChxdyhUYWJsZUNvbHVtbiBJRFJlZikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEtleX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRLZXkhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzb3J0IGlkcyB0byBjYWNoZSB0aGUgU1FMIHF1ZXJ5CiAgICBteSBAU29ydGVkSURzID0gc29ydCB7ICRhIDw9PiAkYiB9IEB7ICRQYXJhbXtJRFJlZn0gfTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgcXVvdGUgdmFsdWVzCiAgICBmb3IgbXkgJFZhbHVlIChAU29ydGVkSURzKSB7CiAgICAgICAgJERCT2JqZWN0LT5RdW90ZSggJFZhbHVlLCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIHNwbGl0IElOIHN0YXRlbWVudCB3aXRoIG1vcmUgdGhhbiA5MDAgZWxlbWVudHMgaW4gbW9yZSBzdGF0ZW1lbnRzIGNvbWJpbmVkIHdpdGggT1IKICAgICMgYmVjYXVzZSBPcmFjbGUgZG9lc24ndCBzdXBwb3J0IG1vcmUgdGhhbiAxMDAwIGVsZW1lbnRzIGluIG9uZSBJTiBzdGF0ZW1lbnQuCiAgICBteSBAU1FMU3RyaW5nczsKICAgIExPT1A6CiAgICB3aGlsZSAoIHNjYWxhciBAU29ydGVkSURzICkgewoKICAgICAgICBteSBAU29ydGVkSURzUGFydCA9IHNwbGljZSBAU29ydGVkSURzLCAwLCA5MDA7CgogICAgICAgIG15ICRJRFN0cmluZyA9IGpvaW4gJywnLCBAU29ydGVkSURzUGFydDsKCiAgICAgICAgcHVzaCBAU1FMU3RyaW5ncywgIiAkUGFyYW17VGFibGVDb2x1bW59IElOICgkSURTdHJpbmcpICI7CiAgICB9CgogICAgbXkgJFNRTCA9IGpvaW4gJyBPUiAnLCBAU1FMU3RyaW5nczsKICAgICRTUUwgPSAnICggJyAuICRTUUwgLiAnICkgJzsKCiAgICByZXR1cm4gJFNRTDsKfQoKMTsKCj1lbmQgSW50ZXJuYWw6Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OkZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RkFRJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpGQVEKCj1oZWFkMSBTWU5PUFNJUwoKRkFRIGJhY2tlbmQgZm9yIHRoZSBsaW5rIG9iamVjdC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4gRG8gbm90IHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCB1c2U6CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkRkFRT2JqZWN0QmFja2VuZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpGQVEnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBvYmplY3RzCiAgICAjICRHcm91cE9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpHcm91cC0+bmV3KCAleyRTZWxmfSApOwogICAgIyAkRkFRT2JqZWN0ICAgPSBLZXJuZWw6OlN5c3RlbTo6RkFRLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBMaW5rTGlzdFdpdGhEYXRhKCkKCmZpbGwgdXAgdGhlIGxpbmsgbGlzdCB3aXRoIGRhdGEKCiAgICAkU3VjY2VzcyA9ICRGQVFMaW5rT2JqZWN0LT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIExpbmtMaXN0ID0+ICRIYXNoUmVmLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtMaXN0V2l0aERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTGlua0xpc3QgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBsaW5rIGxpc3QKICAgIGlmICggcmVmICRQYXJhbXtMaW5rTGlzdH0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTGlua0xpc3QgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9IH0gKSB7CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9IH0gKSB7CgogICAgICAgICAgICBGQVFJRDoKICAgICAgICAgICAgZm9yIG15ICRGQVFJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259IH0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgRkFRIGRhdGEKICAgICAgICAgICAgICAgIG15ICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBpZCBmcm9tIGhhc2ggaWYgbm8gRkFRIGRhdGEgd2FzIGZvdW5kCiAgICAgICAgICAgICAgICBpZiAoICElRkFRRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRGQVFJRH07CiAgICAgICAgICAgICAgICAgICAgbmV4dCBGQVFJRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZCBGQVEgZGF0YQogICAgICAgICAgICAgICAgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRGQVFJRH0gPSBcJUZBUURhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIE9iamVjdFBlcm1pc3Npb24oKQoKY2hlY2tzIHJlYWQgcGVybWlzc2lvbiBmb3IgYSBnaXZlbiBvYmplY3QgYW5kIFVzZXJJRC4KCiAgICAkUGVybWlzc2lvbiA9ICRGQVFMaW5rT2JqZWN0LT5PYmplY3RQZXJtaXNzaW9uKAogICAgICAgIE9iamVjdCAgPT4gJ0ZBUScsCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBtb2R1bGUgcmVnaXN0cnkgb2YgQWdlbnRGQVFab29tCiAgICBteSAkTW9kdWxlUmVnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudEZBUVpvb219OwoKICAgICMgZG8gbm90IGdyYW50IGFjY2VzcyBpZiBmcm9udGVuZCBtb2R1bGUgaXMgbm90IHJlZ2lzdGVyZWQKICAgIHJldHVybiBpZiAhJE1vZHVsZVJlZzsKCiAgICAjIGdyYW50IGFjY2VzcyBpZiBtb2R1bGUgcGVybWlzc2lvbiBoYXMgbm8gR3JvdXAgb3IgR3JvdXBSbyBkZWZpbmVkCiAgICBpZiAoICEkTW9kdWxlUmVnLT57R3JvdXBSb30gJiYgISRNb2R1bGVSZWctPntHcm91cH0gKSB7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgogICAgUEVSTUlTU0lPTjoKICAgIGZvciBteSAkUGVybWlzc2lvbiAocXcoR3JvdXBSbyBHcm91cCkpIHsKCiAgICAgICAgbmV4dCBQRVJNSVNTSU9OIGlmICEkTW9kdWxlUmVnLT57JFBlcm1pc3Npb259OwogICAgICAgIG5leHQgUEVSTUlTU0lPTiBpZiByZWYgJE1vZHVsZVJlZy0+eyRQZXJtaXNzaW9ufSBuZSAnQVJSQVknOwoKICAgICAgICBmb3IgbXkgJEdyb3VwICggQHsgJE1vZHVsZVJlZy0+eyRQZXJtaXNzaW9ufSB9ICkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGdyb3VwIGlkCiAgICAgICAgICAgIG15ICRHcm91cElEID0gJEdyb3VwT2JqZWN0LT5Hcm91cExvb2t1cCggR3JvdXAgPT4gJEdyb3VwICk7CgogICAgICAgICAgICBteSAkVHlwZTsKICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXBSbycgKSB7CiAgICAgICAgICAgICAgICAkVHlwZSA9ICdybyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXAnICkgewogICAgICAgICAgICAgICAgJFR5cGUgPSAncncnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB1c2VyIGdyb3Vwcywgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2UKICAgICAgICAgICAgbXkgJUdyb3VwcyA9ICRHcm91cE9iamVjdC0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgID0+ICRUeXBlLAogICAgICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ3JhbnQgYWNjZXNzIGlmIGFnZW50IGlzIGEgbWVtYmVyIGluIHRoZSBncm91cAogICAgICAgICAgICByZXR1cm4gMSBpZiAkR3JvdXBzeyRHcm91cElEfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9Cgo9aXRlbSBPYmplY3REZXNjcmlwdGlvbkdldCgpCgpyZXR1cm4gYSBoYXNoIG9mIG9iamVjdCBkZXNjcmlwdGlvbnMKClJldHVybgogICAgJURlc2NyaXB0aW9uID0gKAogICAgICAgIE5vcm1hbCA9PiAiRkFRIyAxMjM0IiwKICAgICAgICBMb25nICAgPT4gIkZBUSMgMTIzNDogRkFRVGl0bGUiLAogICAgKTsKCiAgICAlRGVzY3JpcHRpb24gPSAkTGlua09iamVjdC0+T2JqZWN0RGVzY3JpcHRpb25HZXQoCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3REZXNjcmlwdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3QgS2V5IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICBteSAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICdGQVEnLAogICAgICAgIExvbmcgICA9PiAnRkFRJywKICAgICk7CgogICAgcmV0dXJuICVEZXNjcmlwdGlvbiBpZiAkUGFyYW17TW9kZX0gJiYgJFBhcmFte01vZGV9IGVxICdUZW1wb3JhcnknOwoKICAgICMgZ2V0IEZBUQogICAgbXkgJUZBUSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKS0+RkFRR2V0KAogICAgICAgIEl0ZW1JRCAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJUZBUTsKCiAgICAjIGRlZmluZSBkZXNjcmlwdGlvbiB0ZXh0CiAgICBteSAkRkFRSG9vayAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGQVE6OkZBUUhvb2snKTsKICAgIG15ICREZXNjcmlwdGlvblRleHQgPSAiJEZBUUhvb2sgJEZBUXtOdW1iZXJ9IjsKCiAgICAjIGNyZWF0ZSBkZXNjcmlwdGlvbgogICAgJURlc2NyaXB0aW9uID0gKAogICAgICAgIE5vcm1hbCA9PiAkRGVzY3JpcHRpb25UZXh0LAogICAgICAgIExvbmcgICA9PiAiJERlc2NyaXB0aW9uVGV4dDogJEZBUXtUaXRsZX0iLAogICAgKTsKCiAgICByZXR1cm4gJURlc2NyaXB0aW9uOwp9Cgo9aXRlbSBPYmplY3RTZWFyY2goKQoKcmV0dXJuIGEgaGFzaCBsaXN0IG9mIHRoZSBzZWFyY2ggcmVzdWx0cwoKUmV0dXJuCiAgICAkU2VhcmNoTGlzdCA9IHsKICAgICAgICBOT1RMSU5LRUQgPT4gewogICAgICAgICAgICBTb3VyY2UgPT4gewogICAgICAgICAgICAgICAgMTIgID0+ICREYXRhT2ZJdGVtMTIsCiAgICAgICAgICAgICAgICAyMTIgPT4gJERhdGFPZkl0ZW0yMTIsCiAgICAgICAgICAgICAgICAzMzIgPT4gJERhdGFPZkl0ZW0zMzIsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH07CgogICAgJFNlYXJjaExpc3QgPSAkTGlua09iamVjdEJhY2tlbmQtPk9iamVjdFNlYXJjaCgKICAgICAgICBTZWFyY2hQYXJhbXMgPT4gJEhhc2hSZWYsICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0U2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBwYXJhbXMKICAgICRQYXJhbXtTZWFyY2hQYXJhbXN9IHx8PSB7fTsKCiAgICAjIGFkZCB3aWxkLWNhcmRzCiAgICBteSAlU2VhcmNoOwogICAgaWYgKCAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e1RpdGxlfSApIHsKICAgICAgICAkU2VhcmNoe1RpdGxlfSA9ICcqJyAuICRQYXJhbXtTZWFyY2hQYXJhbXN9LT57VGl0bGV9IC4gJyonOwogICAgfQogICAgaWYgKCAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e051bWJlcn0gKSB7CiAgICAgICAgJFNlYXJjaHtOdW1iZXJ9ID0gJyonIC4gJFBhcmFte1NlYXJjaFBhcmFtc30tPntOdW1iZXJ9IC4gJyonOwogICAgfQogICAgaWYgKCAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e1doYXR9ICkgewogICAgICAgICRTZWFyY2h7V2hhdH0gPSAnKicgLiAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e1doYXR9IC4gJyonOwogICAgfQoKICAgICMgZ2V0IEZBUSBvYmplY3QKICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgIyBzZWFyY2ggdGhlIEZBUXMKICAgIG15IEBGQVFJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCiAgICAgICAgJXsgJFBhcmFte1NlYXJjaFBhcmFtc30gfSwKICAgICAgICAlU2VhcmNoLAogICAgICAgIE9yZGVyICA9PiAnQ3JlYXRlZCcsCiAgICAgICAgU29ydCAgID0+ICdkb3duJywKICAgICAgICBMaW1pdCAgPT4gNTAsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlU2VhcmNoTGlzdDsKICAgIEZBUUlEOgogICAgZm9yIG15ICRGQVFJRCAoQEZBUUlEcykgewoKICAgICAgICAjIGdldCBGQVEgZGF0YQogICAgICAgIG15ICVGQVFEYXRhID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgICAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIG5leHQgRkFRSUQgaWYgISVGQVFEYXRhOwoKICAgICAgICAjIGFkZCBGQVEgZGF0YQogICAgICAgICRTZWFyY2hMaXN0e05PVExJTktFRH0tPntTb3VyY2V9LT57JEZBUUlEfSA9IFwlRkFRRGF0YTsKICAgIH0KCiAgICByZXR1cm4gXCVTZWFyY2hMaXN0Owp9Cgo9aXRlbSBMaW5rQWRkUHJlKCkKCmxpbmsgYWRkIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRGQVFMaW5rT2JqZWN0LT5MaW5rQWRkUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdGQVEnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJEZBUUxpbmtPYmplY3QtPkxpbmtBZGRQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0ZBUScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtBZGRQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTGlua0FkZFBvc3QoKQoKbGluayBhZGQgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJEZBUUxpbmtPYmplY3QtPkxpbmtBZGRQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdGQVEnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJEZBUUxpbmtPYmplY3QtPkxpbmtBZGRQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdGQVEnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rQWRkUG9zdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rRGVsZXRlUHJlKCkKCmxpbmsgZGVsZXRlIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRGQVFMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdGQVEnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJEZBUUxpbmtPYmplY3QtPkxpbmtEZWxldGVQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0ZBUScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtEZWxldGVQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTGlua0RlbGV0ZVBvc3QoKQoKbGluayBkZWxldGUgcG9zdCBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRGQVFMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnRkFRJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRGQVFMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnRkFRJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0RlbGV0ZVBvc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpTdGF0aWM6OkZBUUFjY2VzczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBEYXRlOjpQY2FsYyBxdyhEYXlzX2luX01vbnRoKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RkFRJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGltZScsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFBhcmFtIHsKCiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIG15IEBQYXJhbXMgPSAoKTsKCiAgICAjIGdldCBjdXJyZW50IHRpbWUKICAgIG15ICggJHMsICRtLCAkaCwgJEQsICRNLCAkWSApID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+U3lzdGVtVGltZSgpLAogICAgKTsKICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAkWSA9IHNwcmludGYoICIlMDJkIiwgJFkgKTsKCiAgICAjIGNyZWF0ZSBwb3NzaWJsZSB0aW1lIHNlbGVjdGlvbnMKICAgIG15ICVZZWFyID0gbWFwIHsgJF8gPT4gJF8gfSAoICRZIC0gMTAgLi4gJFkgKyAxICk7CiAgICBteSAlTW9udGggPSBtYXAgeyBzcHJpbnRmKCAiJTAyZCIsICRfICkgPT4gc3ByaW50ZiggIiUwMmQiLCAkXyApIH0gKCAxIC4uIDEyICk7CiAgICBteSAlRGF5ICAgPSBtYXAgeyBzcHJpbnRmKCAiJTAyZCIsICRfICkgPT4gc3ByaW50ZiggIiUwMmQiLCAkXyApIH0gKCAxIC4uIDMxICk7CgogICAgcHVzaCBAUGFyYW1zLCB7CiAgICAgICAgRnJvbnRlbmQgICA9PiAnU3RhcnQgZGF5JywKICAgICAgICBOYW1lICAgICAgID0+ICdTdGFydERheScsCiAgICAgICAgTXVsdGlwbGUgICA9PiAwLAogICAgICAgIFNpemUgICAgICAgPT4gMCwKICAgICAgICBTZWxlY3RlZElEID0+ICcwMScsCiAgICAgICAgRGF0YSAgICAgICA9PiB7CiAgICAgICAgICAgICVEYXksCiAgICAgICAgfSwKICAgIH07CiAgICBwdXNoIEBQYXJhbXMsIHsKICAgICAgICBGcm9udGVuZCAgID0+ICdTdGFydCBtb250aCcsCiAgICAgICAgTmFtZSAgICAgICA9PiAnU3RhcnRNb250aCcsCiAgICAgICAgTXVsdGlwbGUgICA9PiAwLAogICAgICAgIFNpemUgICAgICAgPT4gMCwKICAgICAgICBTZWxlY3RlZElEID0+ICRNLAogICAgICAgIERhdGEgICAgICAgPT4gewogICAgICAgICAgICAlTW9udGgsCiAgICAgICAgfSwKICAgIH07CiAgICBwdXNoIEBQYXJhbXMsIHsKICAgICAgICBGcm9udGVuZCAgID0+ICdTdGFydCB5ZWFyJywKICAgICAgICBOYW1lICAgICAgID0+ICdTdGFydFllYXInLAogICAgICAgIE11bHRpcGxlICAgPT4gMCwKICAgICAgICBTaXplICAgICAgID0+IDAsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkWSwKICAgICAgICBEYXRhICAgICAgID0+IHsKICAgICAgICAgICAgJVllYXIsCiAgICAgICAgfSwKICAgIH07CiAgICBwdXNoIEBQYXJhbXMsIHsKICAgICAgICBGcm9udGVuZCAgID0+ICdFbmQgZGF5JywKICAgICAgICBOYW1lICAgICAgID0+ICdFbmREYXknLAogICAgICAgIE11bHRpcGxlICAgPT4gMCwKICAgICAgICBTaXplICAgICAgID0+IDAsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkRCwKICAgICAgICBEYXRhICAgICAgID0+IHsKICAgICAgICAgICAgJURheSwKICAgICAgICB9LAogICAgfTsKICAgIHB1c2ggQFBhcmFtcywgewogICAgICAgIEZyb250ZW5kICAgPT4gJ0VuZCBtb250aCcsCiAgICAgICAgTmFtZSAgICAgICA9PiAnRW5kTW9udGgnLAogICAgICAgIE11bHRpcGxlICAgPT4gMCwKICAgICAgICBTaXplICAgICAgID0+IDAsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkTSwKICAgICAgICBEYXRhICAgICAgID0+IHsKICAgICAgICAgICAgJU1vbnRoLAogICAgICAgIH0sCiAgICB9OwogICAgcHVzaCBAUGFyYW1zLCB7CiAgICAgICAgRnJvbnRlbmQgICA9PiAnRW5kIHllYXInLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0VuZFllYXInLAogICAgICAgIE11bHRpcGxlICAgPT4gMCwKICAgICAgICBTaXplICAgICAgID0+IDAsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkWSwKICAgICAgICBEYXRhICAgICAgID0+IHsKICAgICAgICAgICAgJVllYXIsCiAgICAgICAgfSwKICAgIH07CgogICAgcmV0dXJuIEBQYXJhbXM7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFN0YXJ0WWVhciBTdGFydE1vbnRoIFN0YXJ0RGF5IEVuZFllYXIgRW5kTW9udGggRW5kRGF5KSkgewogICAgICAgIGlmICggISRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY29ycmVjdCBzdGFydCBkYXkgb2YgbW9udGggaWYgZW50ZXJlZCB3cm9uZyBieSB1c2VyCiAgICBteSAkU3RhcnREYXkgPSBzcHJpbnRmKCAiJTAyZCIsIERheXNfaW5fTW9udGgoICRQYXJhbXtTdGFydFllYXJ9LCAkUGFyYW17U3RhcnRNb250aH0gKSApOwogICAgaWYgKCAkUGFyYW17U3RhcnREYXl9IDwgJFN0YXJ0RGF5ICkgewogICAgICAgICRTdGFydERheSA9ICRQYXJhbXtTdGFydERheX07CiAgICB9CgogICAgIyBjb3JyZWN0IGVuZCBkYXkgb2YgbW9udGggaWYgZW50ZXJlZCB3cm9uZyBieSB1c2VyCiAgICBteSAkRW5kRGF5ID0gc3ByaW50ZiggIiUwMmQiLCBEYXlzX2luX01vbnRoKCAkUGFyYW17RW5kWWVhcn0sICRQYXJhbXtFbmRNb250aH0gKSApOwogICAgaWYgKCAkUGFyYW17RW5kRGF5fSA8ICRFbmREYXkgKSB7CiAgICAgICAgJEVuZERheSA9ICRQYXJhbXtFbmREYXl9OwogICAgfQoKICAgICMgc2V0IHN0YXJ0IGFuZCBlbmQgZGF0ZQogICAgbXkgJFN0YXJ0RGF0ZSA9ICIkUGFyYW17U3RhcnRZZWFyfS0kUGFyYW17U3RhcnRNb250aH0tJFN0YXJ0RGF5IDAwOjAwOjAwIjsKICAgIG15ICRFbmREYXRlICAgPSAiJFBhcmFte0VuZFllYXJ9LSRQYXJhbXtFbmRNb250aH0tJEVuZERheSAyMzo1OTo1OSI7CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIGdldCBhIGNvdW50IG9mIGFsbCBGQVEgYXJ0aWNsZXMKICAgIG15ICRUb3AxMEl0ZW1JRHNSZWYgPSAkRkFRT2JqZWN0LT5GQVFUb3AxMEdldCgKICAgICAgICBJbnRlcmZhY2UgPT4gJ2ludGVybmFsJywKICAgICAgICBTdGFydERhdGUgPT4gJFN0YXJ0RGF0ZSwKICAgICAgICBFbmREYXRlICAgPT4gJEVuZERhdGUsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApIHx8IFtdOwoKICAgICMgYnVpbGQgcmVzdWx0IHRhYmxlCiAgICBteSBARGF0YTsKICAgIGZvciBteSAkSXRlbUlEUmVmICggQHskVG9wMTBJdGVtSURzUmVmfSApIHsKCiAgICAgICAgIyBnZXQgRkFRIGRhdGEKICAgICAgICBteSAlRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSXRlbUlEUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgSXRlbUZpZWxkcyA9PiAwLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdm90ZSBkYXRhCiAgICAgICAgbXkgJFZvdGVEYXRhID0gJEZBUU9iamVjdC0+SXRlbVZvdGVEYXRhR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRFJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgbXkgJFZvdGVSZXN1bHQgPSBzcHJpbnRmKAogICAgICAgICAgICAiJTAuIgogICAgICAgICAgICAgICAgLiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoCiAgICAgICAgICAgICAgICAiRkFROjpFeHBsb3Jlcjo6SXRlbUxpc3Q6OlZvdGluZ1Jlc3VsdERlY2ltYWxQbGFjZXMiCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuICJmIiwKICAgICAgICAgICAgJFZvdGVEYXRhLT57UmVzdWx0fQogICAgICAgICAgICAgICAgfHwgMAogICAgICAgICk7CiAgICAgICAgbXkgJFZvdGVzID0gJFZvdGVEYXRhLT57Vm90ZXN9IHx8IDA7CgogICAgICAgICMgYnVpbGQgdGFibGUgcm93CiAgICAgICAgcHVzaCBARGF0YSwgWwogICAgICAgICAgICAkRkFRRGF0YXtOdW1iZXJ9LAogICAgICAgICAgICAkRkFRRGF0YXtUaXRsZX0sCiAgICAgICAgICAgICRJdGVtSURSZWYtPntDb3VudH0sCiAgICAgICAgICAgICRWb3RlUmVzdWx0LAogICAgICAgICAgICAkVm90ZXMsCiAgICAgICAgXTsKICAgIH0KCiAgICAjIHNldCByZXBvcnQgdGl0bGUKICAgIG15ICRUaXRsZSA9ICIkUGFyYW17U3RhcnRZZWFyfS0kUGFyYW17U3RhcnRNb250aH0tJFN0YXJ0RGF5IC0gJFBhcmFte0VuZFllYXJ9LSRQYXJhbXtFbmRNb250aH0tJEVuZERheSI7CgogICAgIyB0YWJsZSBoZWFkbGluZXMKICAgIG15IEBIZWFkRGF0YSA9ICgKICAgICAgICAnRkFRICMnLAogICAgICAgICdUaXRsZScsCiAgICAgICAgJ0NvdW50JywKICAgICAgICAnVm90ZSBSZXN1bHQnLAogICAgICAgICdWb3RlcycsCiAgICApOwoKICAgIG15IEBSZXN1bHQgPSAoIFskVGl0bGVdLCBbQEhlYWREYXRhXSwgQERhdGEgKTsKCiAgICByZXR1cm4gQFJlc3VsdDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKbXkgJENvbW1hbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6Q29tbWFuZDo6QWRtaW46OkZBUTo6SW1wb3J0Jyk7Cm15ICRIZWxwZXJPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgdGVzdCBjb21tYW5kIHdpdGhvdXQgc291cmNlIGFyZ3VtZW50Cm15ICRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIk9wdGlvbiAtIHdpdGhvdXQgc291cmNlLXBhdGggYXJndW1lbnQiLAopOwoKbXkgJFNvdXJjZVBhdGggPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0hvbWUnKSAuICIvc2NyaXB0cy90ZXN0L3NhbXBsZS9GQVEuY3N2IjsKCiRIZWxwZXJPYmplY3QtPkJlZ2luV29yaygpOwoKIyB0ZXN0IGNvbW1hbmQgd2l0aCBzb3VyY2UgYXJndW1lbnQKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLXNlcGFyYXRvcicsICc7JywgJy0tcXVvdGUnLCAnJywgJFNvdXJjZVBhdGggKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDAsCiAgICAiT3B0aW9uIC0gd2l0aCBzb3VyY2UgYXJndW1lbnQiLAopOwoKJEhlbHBlck9iamVjdC0+Um9sbGJhY2soKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoJFNlbGYpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpGQVE7CgpteSAkRkFRT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7Cm15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKbXkgJEZBUUlEID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgVGl0bGUgICAgICAgPT4gJ1NvbWUgVGV4dCcsCiAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgU3RhdGVJRCAgICAgPT4gMSwKICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICBLZXl3b3JkcyAgICA9PiAnc29tZSBrZXl3b3JkcycsCiAgICBGaWVsZDEgICAgICA9PiAnUHJvYmxlbS4uLicsCiAgICBGaWVsZDIgICAgICA9PiAnU29sdXRpb24uLi4nLAogICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICBVc2VySUQgICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRkFRSUQsCiAgICAiRkFRQWRkKCkgLSAxIiwKKTsKCm15ICVGQVEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCm15ICVGQVFUZXN0ID0gKAogICAgVGl0bGUgICAgICAgPT4gJ1NvbWUgVGV4dCcsCiAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgU3RhdGVJRCAgICAgPT4gMSwKICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICBLZXl3b3JkcyAgICA9PiAnc29tZSBrZXl3b3JkcycsCiAgICBGaWVsZDEgICAgICA9PiAnUHJvYmxlbS4uLicsCiAgICBGaWVsZDIgICAgICA9PiAnU29sdXRpb24uLi4nLAogICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCik7Cgpmb3IgbXkgJFRlc3QgKCBzb3J0IGtleXMgJUZBUVRlc3QgKSB7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEZBUXskVGVzdH0sCiAgICAgICAgJEZBUVRlc3R7JFRlc3R9LAogICAgICAgICJGQVFHZXQoKSAtICRUZXN0IiwKICAgICk7Cn0KCm15ICRGQVFVcGRhdGUgPSAkRkFRT2JqZWN0LT5GQVFVcGRhdGUoCiAgICBJdGVtSUQgICAgICA9PiAkRkFRSUQsCiAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgU3RhdGVJRCAgICAgPT4gMiwKICAgIExhbmd1YWdlSUQgID0+IDIsCiAgICBBcHByb3ZlZCAgICA9PiAxLAogICAgVGl0bGUgICAgICAgPT4gJ1NvbWUgVGV4dDInLAogICAgS2V5d29yZHMgICAgPT4gJ3NvbWUga2V5d29yZHMyJywKICAgIEZpZWxkMSAgICAgID0+ICdQcm9ibGVtLi4uMicsCiAgICBGaWVsZDIgICAgICA9PiAnU29sdXRpb24gZm91bmQuLi4yJywKICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCik7CgolRkFRID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgSXRlbUlEICAgICA9PiAkRkFRSUQsCiAgICBJdGVtRmllbGRzID0+IDEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgolRkFRVGVzdCA9ICgKICAgIFRpdGxlICAgICAgID0+ICdTb21lIFRleHQyJywKICAgIENhdGVnb3J5SUQgID0+IDEsCiAgICBTdGF0ZUlEICAgICA9PiAyLAogICAgTGFuZ3VhZ2VJRCAgPT4gMiwKICAgIEtleXdvcmRzICAgID0+ICdzb21lIGtleXdvcmRzMicsCiAgICBGaWVsZDEgICAgICA9PiAnUHJvYmxlbS4uLjInLAogICAgRmllbGQyICAgICAgPT4gJ1NvbHV0aW9uIGZvdW5kLi4uMicsCiAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCik7Cgpmb3IgbXkgJFRlc3QgKCBzb3J0IGtleXMgJUZBUVRlc3QgKSB7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEZBUVRlc3R7JFRlc3R9LAogICAgICAgICRGQVF7JFRlc3R9LAogICAgICAgICJGQVFHZXQoKSAtICRUZXN0IiwKICAgICk7Cn0KCm15ICRPayA9ICRGQVFPYmplY3QtPlZvdGVBZGQoCiAgICBDcmVhdGVkQnkgPT4gJ1NvbWUgVGV4dCcsCiAgICBJdGVtSUQgICAgPT4gJEZBUUlELAogICAgSVAgICAgICAgID0+ICc1NC40My4zMC4xJywKICAgIEludGVyZmFjZSA9PiAnMicsCiAgICBSYXRlICAgICAgPT4gMTAwLAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRPaywKICAgICJWb3RlQWRkKCkiLAopOwoKbXkgJFZvdGUgPSAkRkFRT2JqZWN0LT5Wb3RlR2V0KAogICAgQ3JlYXRlQnkgID0+ICdTb21lIFRleHQnLAogICAgSXRlbUlEICAgID0+ICRGQVFJRCwKICAgIElQICAgICAgICA9PiAnNTQuNDMuMzAuMScsCiAgICBJbnRlcmZhY2UgPT4gJzInLAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVm90ZS0+e0lQfSwKICAgICc1NC40My4zMC4xJywKICAgICJWb3RlR2V0KCkgLSBJUCIsCik7CgpteSAkRkFRSUQyID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgVGl0bGUgICAgICAgPT4gJ1RpdGxlJywKICAgIENhdGVnb3J5SUQgID0+IDEsCiAgICBTdGF0ZUlEICAgICA9PiAxLAogICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgIEtleXdvcmRzICAgID0+ICcnLAogICAgRmllbGQxICAgICAgPT4gJ1Byb2JsZW0gRGVzY3JpcHRpb24gMS4uLicsCiAgICBGaWVsZDIgICAgICA9PiAnU29sdXRpb24gbm90IGZvdW5kMS4uLicsCiAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgIFVzZXJJRCAgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRGQVFJRDIsCiAgICAiRkFRQWRkKCkgLSAyIiwKKTsKCm15ICRIb21lICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0hvbWUnKTsKbXkgQEF0dGFjaG1lbnRUZXN0cyA9ICgKICAgIHsKICAgICAgICBGaWxlID0+ICdGQVEtVGVzdDEucGRmJywKICAgICAgICBNRDUgID0+ICc1ZWU3NjdmM2I2OGYyNGE5MjEzZTBiZWY4MmRjNTNlNScsCiAgICB9LAogICAgewogICAgICAgIEZpbGUgPT4gJ0ZBUS1UZXN0MS5kb2MnLAogICAgICAgIE1ENSAgPT4gJzJlNTIwMDM2YTBjZGE2YTgwNmE4ODM4YjEwMDBkOWQ3JywKICAgIH0sCik7CgojIGdldCBtYWluIG9iamVjdApteSAkTWFpbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7Cgpmb3IgbXkgJEF0dGFjaG1lbnRUZXN0IChAQXR0YWNobWVudFRlc3RzKSB7CiAgICBteSAkQ29udGVudFNDQUxBUlJlZiA9ICRNYWluT2JqZWN0LT5GaWxlUmVhZCgKICAgICAgICBMb2NhdGlvbiA9PiAkSG9tZSAuICcvc2NyaXB0cy90ZXN0L3NhbXBsZS8nIC4gJEF0dGFjaG1lbnRUZXN0LT57RmlsZX0sCiAgICApOwogICAgbXkgJEFkZCA9ICRGQVFPYmplY3QtPkF0dGFjaG1lbnRBZGQoCiAgICAgICAgSXRlbUlEICAgICAgPT4gJEZBUUlEMiwKICAgICAgICBDb250ZW50ICAgICA9PiAkeyRDb250ZW50U0NBTEFSUmVmfSwKICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC94bWwnLAogICAgICAgIEZpbGVuYW1lICAgID0+ICRBdHRhY2htZW50VGVzdC0+e0ZpbGV9LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEFkZCwKICAgICAgICAiQXR0YWNobWVudEFkZCgpIC0gJEF0dGFjaG1lbnRUZXN0LT57RmlsZX0iLAogICAgKTsKICAgIG15IEBBdHRhY2htZW50SW5kZXggPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50SW5kZXgoCiAgICAgICAgSXRlbUlEID0+ICRGQVFJRDIsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJUZpbGUgPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50R2V0KAogICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQyLAogICAgICAgIEZpbGVJRCA9PiAkQXR0YWNobWVudEluZGV4WzBdLT57RmlsZUlEfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEZpbGV7RmlsZW5hbWV9LAogICAgICAgICRBdHRhY2htZW50VGVzdC0+e0ZpbGV9LAogICAgICAgICJBdHRhY2htZW50R2V0KCkgLSBGaWxlbmFtZSAkQXR0YWNobWVudFRlc3QtPntGaWxlfSIsCiAgICApOwogICAgbXkgJE1ENSA9ICRNYWluT2JqZWN0LT5NRDVzdW0oCiAgICAgICAgU3RyaW5nID0+IFwkRmlsZXtDb250ZW50fSwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJE1ENSwKICAgICAgICAkQXR0YWNobWVudFRlc3QtPntNRDV9LAogICAgICAgICJBdHRhY2htZW50R2V0KCkgLSBNRDUgJEF0dGFjaG1lbnRUZXN0LT57RmlsZX0iLAogICAgKTsKCiAgICBteSAkRGVsZXRlID0gJEZBUU9iamVjdC0+QXR0YWNobWVudERlbGV0ZSgKICAgICAgICBJdGVtSUQgPT4gJEZBUUlEMiwKICAgICAgICBGaWxlSUQgPT4gJEF0dGFjaG1lbnRJbmRleFswXS0+e0ZpbGVJRH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERlbGV0ZSwKICAgICAgICAiQXR0YWNobWVudERlbGV0ZSgpIC0gJEF0dGFjaG1lbnRUZXN0LT57RmlsZX0iLAogICAgKTsKfQoKbXkgJFZvdGVJRHNSZWYgPSAkRkFRT2JqZWN0LT5Wb3RlU2VhcmNoKAogICAgSXRlbUlEID0+ICRGQVFJRCwKICAgIFVzZXJJRCA9PiAxLAopOwoKZm9yIG15ICRWb3RlSUQgKCBAeyRWb3RlSURzUmVmfSApIHsKICAgIG15ICRWb3RlRGVsZXRlID0gJEZBUU9iamVjdC0+Vm90ZURlbGV0ZSgKICAgICAgICBWb3RlSUQgPT4gMSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVm90ZURlbGV0ZSwKICAgICAgICAiVm90ZURlbGV0ZSgpIiwKICAgICk7Cn0KCiMgYWRkIEZBUSBhcnRpY2xlIHRvIGxvZwpteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUUxvZ0FkZCgKICAgIEl0ZW1JRCAgICA9PiAkRkFRSUQsCiAgICBJbnRlcmZhY2UgPT4gJ2ludGVybmFsJywKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIkZBUUxvZ0FkZCgpIC0gJEZBUUlEIiwKKTsKCiMgdHJ5IHRvIGFkZCBzYW1lIEZBUSBhcnRpY2xlIHRvIGxvZyBhZ2FpbiAobXVzdCByZXR1cm4gZmFsc2UpCiRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRTG9nQWRkKAogICAgSXRlbUlEICAgID0+ICRGQVFJRCwKICAgIEludGVyZmFjZSA9PiAnaW50ZXJuYWwnLAogICAgVXNlcklEICAgID0+IDEsCik7CiRTZWxmLT5GYWxzZSgKICAgICRTdWNjZXNzLAogICAgIkZBUUxvZ0FkZCgpIC0gJEZBUUlEIiwKKTsKCiMgYWRkIGFub3RoZXIgRkFRIGFydGljbGUgdG8gbG9nCiRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRTG9nQWRkKAogICAgSXRlbUlEICAgID0+ICRGQVFJRDIsCiAgICBJbnRlcmZhY2UgPT4gJ2ludGVybmFsJywKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIkZBUUxvZ0FkZCgpIC0gJEZBUUlEMiIsCik7CgojIGdldCBGQVEgVG9wLTEwCm15ICRUb3AxMElEc1JlZiA9ICRGQVFPYmplY3QtPkZBUVRvcDEwR2V0KAogICAgSW50ZXJmYWNlID0+ICdpbnRlcm5hbCcsCiAgICBMaW1pdCAgICAgPT4gMTAsCiAgICBVc2VySUQgICAgPT4gMSwKKSB8fCBbXTsKJFNlbGYtPlRydWUoCiAgICBzY2FsYXIgQHskVG9wMTBJRHNSZWZ9LAogICAgIkZBUVRvcDEwR2V0KCkiLAopOwoKIyB0ZXN0IExhbmd1YWdlTG9va3VwKCkKbXkgJExhbmd1YWdlTmFtZSA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTG9va3VwKAogICAgTGFuZ3VhZ2VJRCA9PiAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRMYW5ndWFnZU5hbWUsCiAgICAiTGFuZ3VhZ2VMb29rdXAoKSBmb3IgTGFuZ3VhZ2VJRCAnMScgaXMgJyRMYW5ndWFnZU5hbWUnIiwKKTsKCm15ICRMYW5ndWFnZUlEID0gJEZBUU9iamVjdC0+TGFuZ3VhZ2VMb29rdXAoCiAgICBOYW1lICAgPT4gJExhbmd1YWdlTmFtZSwKICAgIFVzZXJJRCA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkTGFuZ3VhZ2VJRCwKICAgIDEsCiAgICAiTGFuZ3VhZ2VMb29rdXAoKSBmb3IgTGFuZ3VhZ2VOYW1lICckTGFuZ3VhZ2VOYW1lJyIsCik7CgpteSAkRkFRRGVsZXRlID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgSXRlbUlEID0+ICRGQVFJRCwKICAgIFVzZXJJRCA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRGQVFEZWxldGUsCiAgICAiRkFRRGVsZXRlKCkgLSBGQVFJRDogJEZBUUlEIiwKKTsKCm15ICRGQVFEZWxldGUyID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgSXRlbUlEID0+ICRGQVFJRDIsCiAgICBVc2VySUQgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkRkFRRGVsZXRlMiwKICAgICJGQVFEZWxldGUoKSAtIEZBUUlEOiAkRkFRSUQyIiwKKTsKCm15ICRDYXRlZ29yeUlEID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICBOYW1lICAgICA9PiAnVGVzdENhdGVnb3J5JywKICAgIENvbW1lbnQgID0+ICdDYXRlZ29yeSBmb3IgdGVzdGluZycsCiAgICBQYXJlbnRJRCA9PiAwLAogICAgVmFsaWRJRCAgPT4gMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRDYXRlZ29yeUlELAogICAgIkNhdGVnb3J5QWRkKCkgLSBSb290IENhdGVnb3J5IiwKKTsKCiMgc2V0IFBhcmVudElEIHRvIGVtcHR5IHRvIG1ha2UgaXQgZmFpbApteSAkQ2F0ZWdvcnlJREZhaWwgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUFkZCgKICAgIE5hbWUgICAgID0+ICdUZXN0Q2F0ZWdvcnknLAogICAgQ29tbWVudCAgPT4gJ0NhdGVnb3J5IGZvciB0ZXN0aW5nJywKICAgIFBhcmVudElEID0+ICcnLAogICAgVmFsaWRJRCAgPT4gMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkQ2F0ZWdvcnlJREZhaWwsCiAgICAiQ2F0ZWdvcnlBZGQoKSAtIFJvb3QgQ2F0ZWdvcnkiLAopOwoKbXkgJENhdGVnb3J5VXBkYXRlID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlVcGRhdGUoCiAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgUGFyZW50SUQgICA9PiAwLAogICAgTmFtZSAgICAgICA9PiAnUm9vdENhdGVnb3J5JywKICAgIENvbW1lbnQgICAgPT4gJ1Jvb3QgQ2F0ZWdvcnkgZm9yIHRlc3RpbmcnLAogICAgVmFsaWRJRCAgICA9PiAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkQ2F0ZWdvcnlVcGRhdGUsCiAgICAiQ2F0ZWdvcnlVcGRhdGUoKSAtIFJvb3QgQ2F0ZWdvcnkiLAopOwoKIyBzZXQgUGFyZW50SUQgdG8gZW1wdHkgdG8gbWFrZSBpdCBmYWlsCm15ICRDYXRlZ29yeVVwZGF0ZUZhaWwgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeVVwZGF0ZSgKICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICBQYXJlbnRJRCAgID0+ICcnLAogICAgTmFtZSAgICAgICA9PiAnUm9vdENhdGVnb3J5JywKICAgIENvbW1lbnQgICAgPT4gJ1Jvb3QgQ2F0ZWdvcnkgZm9yIHRlc3RpbmcnLAogICAgVmFsaWRJRCAgICA9PiAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKJFNlbGYtPkZhbHNlKAogICAgJENhdGVnb3J5VXBkYXRlRmFpbCwKICAgICJDYXRlZ29yeVVwZGF0ZSgpIC0gUm9vdCBDYXRlZ29yeSIsCik7CgpteSAkQ2hpbGRDYXRlZ29yeUlEID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICBOYW1lICAgICA9PiAnQ2hpbGRDYXRlZ29yeScsCiAgICBDb21tZW50ICA9PiAnQ2hpbGQgQ2F0ZWdvcnkgZm9yIHRlc3RpbmcnLAogICAgUGFyZW50SUQgPT4gJENhdGVnb3J5SUQsCiAgICBWYWxpZElEICA9PiAxLAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENoaWxkQ2F0ZWdvcnlJRCwKICAgICJDYXRlZ29yeUFkZCgpIC0gQ2hpbGQgQ2F0ZWdvcnkiLAopOwoKbXkgJENoaWxkQ2F0ZWdvcnlEZWxldGUgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeURlbGV0ZSgKICAgIENhdGVnb3J5SUQgPT4gJENoaWxkQ2F0ZWdvcnlJRCwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENoaWxkQ2F0ZWdvcnlEZWxldGUsCiAgICAiQ2F0ZWdvcnlEZWxldGUoKSAtIENoaWxkIENhdGVnb3J5IiwKKTsKCm15ICRDYXRlZ29yeURlbGV0ZSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RGVsZXRlKAogICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENhdGVnb3J5RGVsZXRlLAogICAgIkNhdGVnb3J5RGVsZXRlKCkgLSBSb290IENhdGVnb3J5IiwKKTsKCiNJdGVtRmllbGRHZXQgVGVzdHMKbXkgJVRlc3RGaWVsZHMgPSAoCiAgICBGaWVsZDEgPT4gJ1N5bXB0b20uLi4nLAogICAgRmllbGQyID0+ICdQcm9ibGVtLi4uJywKICAgIEZpZWxkMyA9PiAnU29sdXRpb24uLi4nLAogICAgRmllbGQ0ID0+ICdVc2VyIEZpZWxkNC4uLicsCiAgICBGaWVsZDUgPT4gJ1VzZXIgRmllbGQ1Li4uJywKICAgIEZpZWxkNiA9PiAnQ29tbWVudC4uLicsCik7CgokRkFRSUQgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICBUaXRsZSAgICAgID0+ICdTb21lIFRleHQnLAogICAgQ2F0ZWdvcnlJRCA9PiAxLAogICAgU3RhdGVJRCAgICA9PiAxLAogICAgTGFuZ3VhZ2VJRCA9PiAxLAogICAgS2V5d29yZHMgICA9PiAnc29tZSBrZXl3b3JkcycsCiAgICAlVGVzdEZpZWxkcywKICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgVXNlcklEICAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJEZBUUlELAogICAgIkZBUUFkZCgpIGZvciBJdGVtRmllbGRHZXQgd2l0aCBUcnVlIiwKKTsKCm15ICVSZXN1bHRGaWVsZHM7CgpteSAkQ2hlY2tGaWVsZHMgPSBzdWIgewogICAgbXkgJVBhcmFtID0gQF87CgogICAgZm9yIG15ICRGaWVsZENvdW50ICggMSAuLiA2ICkgewogICAgICAgIG15ICRGaWVsZCA9ICJGaWVsZCRGaWVsZENvdW50IjsKCiAgICAgICAgIyBjaGVjayB0aGF0IGNhY2hlIGlzIGNsZWFuCiAgICAgICAgbXkgJENhY2hlID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICAgICAgICAgIEtleSAgPT4gIkl0ZW1GaWVsZEdldDo6SXRlbUlEOjokRkFRSUQiLAogICAgICAgICk7CgogICAgICAgICMgb24gYmVmb3JlIGZpcnN0IEdldCBjYWNoZSBzaG91bGQgYmUgdW5kZWYsIGFmdGVyIGZpcnMgY2FjaGUgZXhpc3QsIGJ1dCB0aGUgRmllbGQga2V5IG11c3QgYmUKICAgICAgICAjIHVuZGVmCiAgICAgICAgaWYgKCByZWYgJENhY2hlIGVxICdIQVNIJyApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJENhY2hlLT57JEZpZWxkfSwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgIkNhY2hlIGJlZm9yZSBJdGVtRmllbGRHZXQoKTogJEZpZWxkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRDYWNoZSwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgIkNhY2hlIGJlZm9yZSBJdGVtRmllbGRHZXQoKTogQ29tcGxldGUgY2FjaGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIGZpZWxkCiAgICAgICAgJFJlc3VsdEZpZWxkc3skRmllbGR9ID0gJEZBUU9iamVjdC0+SXRlbUZpZWxkR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEZBUUlELAogICAgICAgICAgICBGaWVsZCAgPT4gJEZpZWxkLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGNhY2hlIGlzIHNldAogICAgICAgICRDYWNoZSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICdGQVEnLAogICAgICAgICAgICBLZXkgID0+ICJJdGVtRmllbGRHZXQ6Okl0ZW1JRDo6JEZBUUlEIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHJlZiAkQ2FjaGUsCiAgICAgICAgICAgICdIQVNIJywKICAgICAgICAgICAgIkNhY2hlIGFmdGVyIEl0ZW1GaWVsZEdldCgpOiByZWYiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkQ2FjaGUtPnskRmllbGR9LAogICAgICAgICAgICAkUGFyYW17Q29tcGFyZUZpZWxkc30tPnskRmllbGR9LAogICAgICAgICAgICAiQ2FjaGUgYWZ0ZXIgSXRlbUZpZWxkR2V0KCk6ICRGaWVsZCBtYXRjaGVkIHdpdGggb3JpZ2luYWwgZmllbGQgZGF0YSIsCiAgICAgICAgKTsKICAgIH0KfTsKCiRDaGVja0ZpZWxkcy0+KCBDb21wYXJlRmllbGRzID0+IFwlVGVzdEZpZWxkcyApOwoKJFNlbGYtPklzRGVlcGx5KAogICAgXCVSZXN1bHRGaWVsZHMsCiAgICBcJVRlc3RGaWVsZHMsCiAgICAiSXRlbUZpZWxkR2V0KCk6IGZvciBhbGwgZmllbGRzIG1hdGNoIGV4cGVjdGVkIGRhdGEiLAopOwoKIyB1cGRhdGUgdGhlIEZBUSBpdGVtCm15ICVVcGRhdGVkVGVzdEZpZWxkcyA9ICgKICAgIEZpZWxkMSA9PiAnVXBkYXRlZCBTeW1wdG9tLi4uJywKICAgIEZpZWxkMiA9PiAnVXBkYXRlZCBQcm9ibGVtLi4uJywKICAgIEZpZWxkMyA9PiAnVXBkYXRlZCBTb2x1dGlvbi4uLicsCiAgICBGaWVsZDQgPT4gJ1VwZGF0ZWQgVXNlciBGaWVsZDQuLi4nLAogICAgRmllbGQ1ID0+ICdVcGRhdGVkIFVzZXIgRmllbGQ1Li4uJywKICAgIEZpZWxkNiA9PiAnVXBkYXRlZCBDb21tZW50Li4uJywKKTsKCiRGQVFVcGRhdGUgPSAkRkFRT2JqZWN0LT5GQVFVcGRhdGUoCiAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgIFRpdGxlICAgICAgPT4gJ1NvbWUgVGV4dCcsCiAgICBDYXRlZ29yeUlEID0+IDEsCiAgICBTdGF0ZUlEICAgID0+IDEsCiAgICBMYW5ndWFnZUlEID0+IDEsCiAgICBLZXl3b3JkcyAgID0+ICdzb21lIGtleXdvcmRzJywKICAgICVVcGRhdGVkVGVzdEZpZWxkcywKICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgVXNlcklEICAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJEZBUVVwZGF0ZSwKICAgICJGQVFVcGRhdGUoKSBmb3IgSXRlbUZpZWxkR2V0IHdpdGggVHJ1ZSIsCik7CgokQ2hlY2tGaWVsZHMtPiggQ29tcGFyZUZpZWxkcyA9PiBcJVVwZGF0ZWRUZXN0RmllbGRzICk7CgokRkFRRGVsZXRlID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgSXRlbUlEID0+ICRGQVFJRCwKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRkFRRGVsZXRlLAogICAgIkZBUURlbGV0ZSgpIGZvciBJdGVtRmllbGRHZXQ6IHdpdGggVHJ1ZSIsCik7CgojIGNoZWNrIHRoYXQgY2FjaGUgaXMgY2xlYW4KbXkgJENhY2hlID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICBUeXBlID0+ICdGQVEnLAogICAgS2V5ICA9PiAiSXRlbUZpZWxkR2V0OjpJdGVtSUQ6OiRGQVFJRCIsCik7CgokU2VsZi0+SXMoCiAgICAkQ2FjaGUsCiAgICB1bmRlZiwKICAgICJDYWNoZSBmb3IgSXRlbUZpZWxkR2V0KCkgYWZ0ZXIgRkFRRGVsZXRlOiBDb21wbGV0ZSBjYWNoZSIsCik7CgojIEZBUSBpdGVtIGNhY2hlIHRlc3RzCiRGQVFJRCA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgIFRpdGxlICAgICAgPT4gJ1NvbWUgVGV4dCcsCiAgICBDYXRlZ29yeUlEID0+IDEsCiAgICBTdGF0ZUlEICAgID0+IDEsCiAgICBMYW5ndWFnZUlEID0+IDEsCiAgICBLZXl3b3JkcyAgID0+ICdzb21lIGtleXdvcmRzJywKICAgICVUZXN0RmllbGRzLAogICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICBVc2VySUQgICAgICA9PiAxLAopOwoKIyBjaGVjayB0aGF0IGNhY2hlIGlzIGNsZWFuCiRDYWNoZSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgVHlwZSA9PiAnRkFRJywKICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJEZBUUlEIC4gJzo6SXRlbUZpZWxkczo6MCcsCik7CiRTZWxmLT5JcygKICAgICRDYWNoZSwKICAgIHVuZGVmLAogICAgIkNhY2hlIGZvciBGQVEgTm8gSXRlbUZpZWxkcyBCZWZvcmUgRkFRR2V0KCk6IENvbXBsZXRlIGNhY2hlIiwKKTsKJENhY2hlID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICBUeXBlID0+ICdGQVEnLAogICAgS2V5ICA9PiAnRkFRR2V0OjpJdGVtSUQ6OicgLiAkRkFRSUQgLiAnOjpJdGVtRmllbGRzOjoxJywKKTsKJFNlbGYtPklzKAogICAgJENhY2hlLAogICAgdW5kZWYsCiAgICAiQ2FjaGUgZm9yIEZBUSBXaXRoIEl0ZW1GaWVsZHMgQmVmb3JlIEZBUUdldCgpOiBDb21wbGV0ZSBjYWNoZSIsCik7CgojIGdldCBGQVEgbm8gSXRlbSBGaWVsZHMKbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICBJdGVtSUQgICAgID0+ICRGQVFJRCwKICAgIEl0ZW1GaWVsZHMgPT4gMCwKICAgIFVzZXJJRCAgICAgPT4gMQopOwoKJFNlbGYtPklzKAogICAgJEZBUURhdGF7SXRlbUlEfSwKICAgICRGQVFJRCwKICAgICJTYW5pdHkgQ2hlY2sgZm9yIEZBUUdldCgpOiBtYXRjaCBJdGVtSUQiCik7CgojIHNhbml0eSBjaGVjayBJdGVtIEZpZWxkcwpmb3IgbXkgJEZpZWxkQ291bnQgKCAxIC4uIDYgKSB7CiAgICBteSAkRmllbGQgPSAiRmllbGQkRmllbGRDb3VudCI7CgogICAgJFNlbGYtPklzKAogICAgICAgICRGQVFEYXRheyRGaWVsZH0sCiAgICAgICAgdW5kZWYsCiAgICAgICAgIlNhbml0eSBDaGVjayBmb3IgRkFRR2V0KCk6IG5vIEl0ZW1GaWVsZHMgJEZpZWxkIiwKICAgICk7Cn0KJENhY2hlID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICBUeXBlID0+ICdGQVEnLAogICAgS2V5ICA9PiAnRkFRR2V0OjpJdGVtSUQ6OicgLiAkRkFRSUQgLiAnOjpJdGVtRmllbGRzOjowJywKKTsKJFNlbGYtPklzKAogICAgcmVmICRDYWNoZSwKICAgICdIQVNIJywKICAgICJDYWNoZSBmb3IgRkFRIE5vIEl0ZW1GaWVsZHMgQWZ0ZXIgRkFRR2V0KCk6IENvbXBsZXRlIGNhY2hlIHJlZiIsCik7CiRDYWNoZSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgVHlwZSA9PiAnRkFRJywKICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJEZBUUlEIC4gJzo6SXRlbUZpZWxkczo6MScsCik7CiRTZWxmLT5JcygKICAgICRDYWNoZSwKICAgIHVuZGVmLAogICAgIkNhY2hlIGZvciBGQVEgV2l0aCBJdGVtRmllbGRzIEFmdGVyIEZBUUdldCgpOiBDb21wbGV0ZSBjYWNoZSIsCik7CgojIGdldCBGQVEgd2l0aCBJdGVtIEZpZWxkcwolRkFRRGF0YSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgIEl0ZW1JRCAgICAgPT4gJEZBUUlELAogICAgSXRlbUZpZWxkcyA9PiAxLAogICAgVXNlcklEICAgICA9PiAxCik7CgokU2VsZi0+SXMoCiAgICAkRkFRRGF0YXtJdGVtSUR9LAogICAgJEZBUUlELAogICAgIlNhbml0eSBDaGVjayBmb3IgRkFRR2V0KCk6IG1hdGNoIEl0ZW1JRCIKKTsKCiMgc2FuaXR5IGNoZWNrIEl0ZW0gRmllbGRzCmZvciBteSAkRmllbGRDb3VudCAoIDEgLi4gNiApIHsKICAgIG15ICRGaWVsZCA9ICJGaWVsZCRGaWVsZENvdW50IjsKCiAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgJEZBUURhdGF7JEZpZWxkfSwKICAgICAgICB1bmRlZiwKICAgICAgICAiU2FuaXR5IENoZWNrIGZvciBGQVFHZXQoKTogd2l0aCBJdGVtRmllbGRzICRGaWVsZCIsCiAgICApOwp9CiRDYWNoZSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgVHlwZSA9PiAnRkFRJywKICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJEZBUUlEIC4gJzo6SXRlbUZpZWxkczo6MCcsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkQ2FjaGUsCiAgICAnSEFTSCcsCiAgICAiQ2FjaGUgZm9yIEZBUSBObyBJdGVtRmllbGRzIEFmdGVyIEZBUUdldCgpOiBDb21wbGV0ZSBjYWNoZSByZWYiLAopOwokQ2FjaGUgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgIFR5cGUgPT4gJ0ZBUScsCiAgICBLZXkgID0+ICdGQVFHZXQ6Okl0ZW1JRDo6JyAuICRGQVFJRCAuICc6Okl0ZW1GaWVsZHM6OjEnLAopOwokU2VsZi0+SXMoCiAgICByZWYgJENhY2hlLAogICAgJ0hBU0gnLAogICAgIkNhY2hlIGZvciBGQVEgV2l0aCBJdGVtRmllbGRzIEFmdGVyIEZBUUdldCgpOiBDb21wbGV0ZSBjYWNoZSByZWYiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRkFRIFN0YXRlIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpteSAlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVMaXN0KAogICAgVXNlcklEID0+IDEsCik7CgokU2VsZi0+SXNOb3QoCiAgICBzY2FsYXIga2V5cyAlU3RhdGVzLAogICAgMCwKICAgICJTdGF0ZUxpc3QoKSBudW1iZXIgb2YgZWxlbWVudHMgc2hvdWxkIG5vdCBiZSAwIgopOwoKZm9yIG15ICRTdGF0ZUlEICggc29ydCBrZXlzICVTdGF0ZXMgKSB7CiAgICBteSAlU3RhdGUgPSAkRkFRT2JqZWN0LT5TdGF0ZUdldCgKICAgICAgICBTdGF0ZUlEID0+ICRTdGF0ZUlELAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPklzTm90KAogICAgICAgICRTdGF0ZXtTdGF0ZUlEfSwKICAgICAgICB1bmRlZiwKICAgICAgICAiU3RhdGVHZXQoKSBTdGF0ZUlEIGZvciBTdGF0ZUlEOiAnJFN0YXRlSUQnIHNob3VsZCBub3QgYmUgdW5kZWYiCiAgICApOwogICAgJFNlbGYtPklzTm90KAogICAgICAgICRTdGF0ZXtOYW1lfSwKICAgICAgICB1bmRlZiwKICAgICAgICAiU3RhdGVHZXQoKSBOYW1lIGZvciBTdGF0ZUlEOiAgICAnJFN0YXRlSUQnIHNob3VsZCBub3QgYmUgdW5kZWYiCiAgICApOwogICAgJFNlbGYtPklzTm90KAogICAgICAgICRTdGF0ZXtUeXBlSUR9LAogICAgICAgIHVuZGVmLAogICAgICAgICJTdGF0ZUdldCgpIFR5cGVJRCBmb3IgU3RhdGVJRDogICckU3RhdGVJRCcgc2hvdWxkIG5vdCBiZSB1bmRlZiIKICAgICk7Cn0KCm15ICRTdGF0ZVR5cGVMaXN0ID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgcmVmICRTdGF0ZVR5cGVMaXN0LAogICAgJ0hBU0gnLAogICAgIlN0YXRlVHlwZUxpc3QoKSByZXR1cm5zIGhhc2hyZWYiLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIGtleXMgJXskU3RhdGVUeXBlTGlzdH0sCiAgICAzLAogICAgIlN0YXRlVHlwZUxpc3QoKSBoYXMgMyBrZXlzIiwKKTsKCiRTZWxmLT5JcygKICAgICRTdGF0ZVR5cGVMaXN0LT57MX0sCiAgICAnaW50ZXJuYWwnLAogICAgIlN0YXRlVHlwZUxpc3QoKSAxIGlzIGludGVybmFsIiwKKTsKCiRTZWxmLT5JcygKICAgICRTdGF0ZVR5cGVMaXN0LT57Mn0sCiAgICAnZXh0ZXJuYWwnLAogICAgIlN0YXRlVHlwZUxpc3QoKSAyIGlzIGV4dGVybmFsIiwKKTsKCiRTZWxmLT5JcygKICAgICRTdGF0ZVR5cGVMaXN0LT57M30sCiAgICAncHVibGljJywKICAgICJTdGF0ZVR5cGVMaXN0KCkgMyBpcyBwdWJsaWMiLAopOwoKJFN0YXRlVHlwZUxpc3QgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgVHlwZXMgID0+IFsgJ3B1YmxpYycsICdleHRlcm5hbCcgXSwKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIGtleXMgJXskU3RhdGVUeXBlTGlzdH0sCiAgICAyLAogICAgIlN0YXRlVHlwZUxpc3QoKSBoYXMgMiBrZXlzIiwKKTsKCiRTZWxmLT5JcygKICAgICRTdGF0ZVR5cGVMaXN0LT57Mn0sCiAgICAnZXh0ZXJuYWwnLAogICAgIlN0YXRlVHlwZUxpc3QoKSAyIGlzIGV4dGVybmFsIiwKKTsKCiRTZWxmLT5JcygKICAgICRTdGF0ZVR5cGVMaXN0LT57M30sCiAgICAncHVibGljJywKICAgICJTdGF0ZVR5cGVMaXN0KCkgMyBpcyBwdWJsaWMiLAopOwoKJFN0YXRlVHlwZUxpc3QgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgVHlwZXMgID0+IFsnaW50ZXJuYWwnXSwKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIGtleXMgJXskU3RhdGVUeXBlTGlzdH0sCiAgICAxLAogICAgIlN0YXRlVHlwZUxpc3QoKSBoYXMgMSBrZXkiLAopOwoKJFNlbGYtPklzKAogICAgJFN0YXRlVHlwZUxpc3QtPnsxfSwKICAgICdpbnRlcm5hbCcsCiAgICAiU3RhdGVUeXBlTGlzdCgpIDEgaXMgaW50ZXJuYWwiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIGNsZWFuIHRoZSBzeXN0ZW0KJEZBUURlbGV0ZSA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJEZBUURlbGV0ZSwKICAgICJGQVFEZWxldGUoKSBmb3IgSXRlbUZpZWxkR2V0OiB3aXRoIFRydWUiLAopOwoKIyBjaGVjayB0aGF0IGNhY2hlIGlzIGNsZWFuCiRDYWNoZSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgVHlwZSA9PiAnRkFRJywKICAgIEtleSAgPT4gJ0ZBUUdldDo6SXRlbUlEOjonIC4gJEZBUUlEIC4gJzo6SXRlbUZpZWxkczo6MCcsCik7CiRTZWxmLT5JcygKICAgICRDYWNoZSwKICAgIHVuZGVmLAogICAgIkNhY2hlIGZvciBGQVEgTm8gSXRlbUZpZWxkcyBBZnRlciBGQVFEZWxldGUoKTogQ29tcGxldGUgY2FjaGUiLAopOwokQ2FjaGUgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgIFR5cGUgPT4gJ0ZBUScsCiAgICBLZXkgID0+ICdGQVFHZXQ6Okl0ZW1JRDo6JyAuICRGQVFJRCAuICc6Okl0ZW1GaWVsZHM6OjEnLAopOwokU2VsZi0+SXMoCiAgICAkQ2FjaGUsCiAgICB1bmRlZiwKICAgICJDYWNoZSBmb3IgRkFRIFdpdGggSXRlbUZpZWxkcyBBZnRlciBGQVFEZWxldGUoKTogQ29tcGxldGUgY2FjaGUiLAopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoJFNlbGYpOwoKIyBzZXQgY29uZmlnIG9wdGlvbnMKJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+U2V0KAogICAgS2V5ICAgPT4gJ0ZBUTo6QXBwcm92YWxSZXF1aXJlZCcsCiAgICBWYWx1ZSA9PiAwLAopOwoKIyBnZXQgaGVscGVyIG9iamVjdApteSAkSGVscGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgZ2VuZXJhdGUgYSByYW5kb20gc3RyaW5nIHRvIGhlbHAgc2VhcmNoZXMKbXkgJFJhbmRvbUlEID0gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCiMgY3JlYXRlIGRpZmZlcmVudCB1c2VycyBmb3IgQ3JlYXRlZFVzZXJJRHMgc2VhcmNoCm15IEBBZGRlZFVzZXJzOwpmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDQgKSB7CiAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdmYXEnLCAnZmFxX2FkbWluJywgJ2ZhcV9hcHByb3ZhbCcgXSwKICAgICk7CiAgICBteSAkVXNlcklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICApOwogICAgcHVzaCBAQWRkZWRVc2VycywgJFVzZXJJRDsKfQoKbXkgQEFkZGVkRkFRczsKCiMgYWRkIHNvbWUgRkFRcwpteSAlRkFRQWRkVGVtcGxhdGUgPSAoCiAgICBUaXRsZSAgICAgICA9PiAiU29tZSBUZXh0ICRSYW5kb21JRCIsCiAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgU3RhdGVJRCAgICAgPT4gMSwKICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICBLZXl3b3JkcyAgICA9PiAkUmFuZG9tSUQsCiAgICBGaWVsZDEgICAgICA9PiAnUHJvYmxlbS4uLicsCiAgICBGaWVsZDIgICAgICA9PiAnU29sdXRpb24uLi4nLAogICAgVXNlcklEICAgICAgPT4gMSwKICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAopOwoKIyBmcmVlemUgdGltZQokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVTZXQoKTsKCiMgZ2V0IEZBUSBvYmplY3QKbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCmZvciBteSAkQ291bnRlciAoIDEgLi4gMiApIHsKICAgIG15ICRGQVFJRCA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgICAgICAlRkFRQWRkVGVtcGxhdGUsCiAgICAgICAgVXNlcklEID0+ICRBZGRlZFVzZXJzWyAkQ291bnRlciAtIDEgXSwKICAgICk7CgogICAgJFNlbGYtPklzTm90KAogICAgICAgIHVuZGVmLAogICAgICAgICRGQVFJRCwKICAgICAgICAiRkFRQWRkKCkgRkFRSUQ6JyRGQVFJRCcgZm9yIEZBUVNlYXJjaCgpIiwKICAgICk7CgogICAgcHVzaCBAQWRkZWRGQVFzLCAkRkFRSUQ7CgogICAgIyBhZGQgMSBtaW51dGUgdG8gZnJvemVuIHRpbWUKICAgICRIZWxwZXJPYmplY3QtPkZpeGVkVGltZUFkZFNlY29uZHMoNjApOwp9CgojIGFkZCBzb21lIHZvdGVzCm15IEBWb3Rlc1RvQWRkID0gKAogICAgewogICAgICAgIENyZWF0ZWRCeSA9PiAnU29tZSBUZXh0JywKICAgICAgICBJdGVtSUQgICAgPT4gJEFkZGVkRkFRc1swXSwKICAgICAgICBJUCAgICAgICAgPT4gJzU0LjQzLjMwLjEnLAogICAgICAgIEludGVyZmFjZSA9PiAnMicsCiAgICAgICAgUmF0ZSAgICAgID0+IDEwMCwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgQ3JlYXRlZEJ5ID0+ICdTb21lIFRleHQnLAogICAgICAgIEl0ZW1JRCAgICA9PiAkQWRkZWRGQVFzWzBdLAogICAgICAgIElQICAgICAgICA9PiAnNTQuNDMuMzAuMicsCiAgICAgICAgSW50ZXJmYWNlID0+ICcyJywKICAgICAgICBSYXRlICAgICAgPT4gNTAsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICB9LAogICAgewogICAgICAgIENyZWF0ZWRCeSA9PiAnU29tZSBUZXh0JywKICAgICAgICBJdGVtSUQgICAgPT4gJEFkZGVkRkFRc1swXSwKICAgICAgICBJUCAgICAgICAgPT4gJzU0LjQzLjMwLjMnLAogICAgICAgIEludGVyZmFjZSA9PiAnMicsCiAgICAgICAgUmF0ZSAgICAgID0+IDUwLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBDcmVhdGVkQnkgPT4gJ1NvbWUgVGV4dCcsCiAgICAgICAgSXRlbUlEICAgID0+ICRBZGRlZEZBUXNbMV0sCiAgICAgICAgSVAgICAgICAgID0+ICc1NC40My4zMC4xJywKICAgICAgICBJbnRlcmZhY2UgPT4gJzInLAogICAgICAgIFJhdGUgICAgICA9PiA1MCwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgQ3JlYXRlZEJ5ID0+ICdTb21lIFRleHQnLAogICAgICAgIEl0ZW1JRCAgICA9PiAkQWRkZWRGQVFzWzFdLAogICAgICAgIElQICAgICAgICA9PiAnNTQuNDMuMzAuMicsCiAgICAgICAgSW50ZXJmYWNlID0+ICcyJywKICAgICAgICBSYXRlICAgICAgPT4gNTAsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICB9LAoKKTsKZm9yIG15ICRWb3RlIChAVm90ZXNUb0FkZCkgewogICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5Wb3RlQWRkKCAleyRWb3RlfSApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJWb3RlQWRkKCk6IEZBUUlEOickVm90ZS0+e0l0ZW1JRH0nIElQOickVm90ZS0+e0lQfScgUmF0ZTonJFZvdGUtPntSYXRlfScgd2l0aCB0cnVlIiwKICAgICk7Cn0KCiMgZG8gdm90ZSBzZWFyY2ggdGVzdHMKbXkgJVNlYXJjaENvbmZpZ1RlbXBsYXRlID0gKAogICAgS2V5d29yZCAgICAgICAgICA9PiAiJFJhbmRvbUlEIiwKICAgIFN0YXRlcyAgICAgICAgICAgPT4gWyAncHVibGljJywgJ2ludGVybmFsJyBdLAogICAgT3JkZXJCeSAgICAgICAgICA9PiBbJ0ZBUUlEJ10sCiAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsnVXAnXSwKICAgIExpbWl0ICAgICAgICAgICAgPT4gMTUwLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAoKKTsKbXkgQFRlc3RzID0gKAoKICAgICMgdm90ZXMgdGVzdHMKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1ZvdGVzLCBTaW1wbGUgRXF1YWxzIE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFZvdGVzID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAzLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1ZvdGVzLCBTaW1wbGUgR3JlYXRlclRoYW4gT3BlcmF0b3InLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgVm90ZXMgPT4gewogICAgICAgICAgICAgICAgR3JlYXRlclRoYW4gPT4gMiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdWb3RlcywgU2ltcGxlIEdyZWF0ZXJUaGFuRXF1YWxzIE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFZvdGVzID0+IHsKICAgICAgICAgICAgICAgIEdyZWF0ZXJUaGFuRXF1YWxzID0+IDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzBdLAogICAgICAgICAgICAkQWRkZWRGQVFzWzFdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVm90ZXMsIFNpbXBsZSBTbWFsbGVyVGhhbiBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBWb3RlcyA9PiB7CiAgICAgICAgICAgICAgICBTbWFsbGVyVGhhbiA9PiAzLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1ZvdGVzLCBTaW1wbGUgU21hbGxlclRoYW5FcXVhbHMgT3BlcmF0b3InLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgVm90ZXMgPT4gewogICAgICAgICAgICAgICAgU21hbGxlclRoYW5FcXVhbHMgPT4gMywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdWb3RlcywgTXVsdGlwbGUgRXF1YWxzIE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFZvdGVzID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiBbIDIsIDMgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdWb3RlcywgTXVsdGlwbGUgR3JlYXRlclRoYW4gT3BlcmF0b3InLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgVm90ZXMgPT4gewogICAgICAgICAgICAgICAgR3JlYXRlclRoYW4gPT4gWyAxLCAyIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzBdLAogICAgICAgICAgICAkQWRkZWRGQVFzWzFdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVm90ZXMsIE11bHRpcGxlIEdyZWF0ZXJUaGFuRXF1YWxzIE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFZvdGVzID0+IHsKICAgICAgICAgICAgICAgIEdyZWF0ZXJUaGFuRXF1YWxzID0+IFsgMiwgMyBdCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzBdLAogICAgICAgICAgICAkQWRkZWRGQVFzWzFdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVm90ZXMsIE11bHRpcGxlIFNtYWxsZXJUaGFuIE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFZvdGVzID0+IHsKICAgICAgICAgICAgICAgIFNtYWxsZXJUaGFuID0+IFsgMywgMiBdCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzFdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVm90ZXMsIE11bHRpcGxlIFNtYWxsZXJUaGFuRXF1YWxzIE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFZvdGVzID0+IHsKICAgICAgICAgICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+IFsgMiwgMyBdCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzBdLAogICAgICAgICAgICAkQWRkZWRGQVFzWzFdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVm90ZXMsIFdyb25nIE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFZvdGVzID0+IHsKICAgICAgICAgICAgICAgIExlc3NUaGFuRXF1YWxzID0+IFs0XQogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1ZvdGVzLCBDb21wbGV4IE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFZvdGVzID0+IHsKICAgICAgICAgICAgICAgIEdyZWF0ZXJUaGFuICAgICAgID0+IDIsCiAgICAgICAgICAgICAgICBTbWFsbGVyVGhhbkVxdWFscyA9PiAzLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICBdLAogICAgfSwKCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdSYXRlLCBTaW1wbGUgRXF1YWxzIE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFJhdGUgPT4gewogICAgICAgICAgICAgICAgRXF1YWxzID0+IDUwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIFJhdGUgdGVzdHMKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1JhdGUsIFNpbXBsZSBHcmVhdGVyVGhhbiBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBSYXRlID0+IHsKICAgICAgICAgICAgICAgIEdyZWF0ZXJUaGFuID0+IDUwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1JhdGUsIFNpbXBsZSBHcmVhdGVyVGhhbkVxdWFscyBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBSYXRlID0+IHsKICAgICAgICAgICAgICAgIEdyZWF0ZXJUaGFuRXF1YWxzID0+IDUwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1JhdGUsIFNpbXBsZSBTbWFsbGVyVGhhbiBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBSYXRlID0+IHsKICAgICAgICAgICAgICAgIFNtYWxsZXJUaGFuID0+IDY2LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1JhdGUsIFNpbXBsZSBTbWFsbGVyVGhhbkVxdWFscyBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBSYXRlID0+IHsKICAgICAgICAgICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+IDY3LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1JhdGUsIE11bHRpcGxlIEVxdWFscyBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBSYXRlID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiBbIDUwLCA2Ni42NyBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1JhdGUsIE11bHRpcGxlIEdyZWF0ZXJUaGFuIE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFJhdGUgPT4gewogICAgICAgICAgICAgICAgR3JlYXRlclRoYW4gPT4gWyAyMCwgNDAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdSYXRlLCBNdWx0aXBsZSBHcmVhdGVyVGhhbkVxdWFscyBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBSYXRlID0+IHsKICAgICAgICAgICAgICAgIEdyZWF0ZXJUaGFuRXF1YWxzID0+IFsgNTAsIDY2IF0KICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdSYXRlLCBNdWx0aXBsZSBTbWFsbGVyVGhhbiBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBSYXRlID0+IHsKICAgICAgICAgICAgICAgIFNtYWxsZXJUaGFuID0+IFsgNjYsIDYwIF0KICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdSYXRlLCBNdWx0aXBsZSBTbWFsbGVyVGhhbkVxdWFscyBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBSYXRlID0+IHsKICAgICAgICAgICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+IFsgNTAsIDY3IF0KICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdSYXRlLCBXcm9uZyBPcGVyYXRvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBSYXRlID0+IHsKICAgICAgICAgICAgICAgIExlc3NUaGFuRXF1YWxzID0+IFsxMF0KICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdSYXRlLCBDb21wbGV4IE9wZXJhdG9yJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIFJhdGUgPT4gewogICAgICAgICAgICAgICAgR3JlYXRlclRoYW4gICAgICAgPT4gWyA1MCwgNjAgXSwKICAgICAgICAgICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+IDY3LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGNvbXBsZXggdGVzdHMKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1ZvdGVzLCBSYXRlLCBDb21wbGV4ICsgV3JvbmcgT3BlcmF0b3InLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgVm90ZXMgPT4gewogICAgICAgICAgICAgICAgRXF1YWxzICAgICAgICAgICAgPT4gWyAyLCAzLCA0IF0sCiAgICAgICAgICAgICAgICBHcmVhdGVyVGhhbkVxdWFscyA9PiBbM10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJhdGUgPT4gewogICAgICAgICAgICAgICAgR3JlYXRlclRoYW4gPT4gWyAyMCwgIDUwIF0sCiAgICAgICAgICAgICAgICBTbWFsbGVyVGhhbiA9PiBbIDEwMCwgMTIwIF0sCiAgICAgICAgICAgICAgICBMb3dlclRoYW4gICA9PiBbOTldLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICBdLAogICAgfSwKKTsKCiMgZXhlY3V0ZSB0aGUgdGVzdHMKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKICAgIG15IEBGQVFJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goICV7ICRUZXN0LT57Q29uZmlnfSB9ICk7CgogICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgIFxARkFRSURzLAogICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXN1bHRzfSwKICAgICAgICAiJFRlc3QtPntOYW1lfSBGQVFTZWFyY2goKSIsCiAgICApOwp9CgojIHRpbWUgYmFzZWQgdGVzdHMKCiMgdXBkYXRlIEZBUXMKbXkgJUZBUVVwZGF0ZVRlbXBsYXRlID0gKAogICAgVGl0bGUgICAgICAgPT4gIk5ldyBUZXh0ICRSYW5kb21JRCIsCiAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgU3RhdGVJRCAgICAgPT4gMSwKICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICBLZXl3b3JkcyAgICA9PiAkUmFuZG9tSUQsCiAgICBGaWVsZDEgICAgICA9PiAnUHJvYmxlbS4uLicsCiAgICBGaWVsZDIgICAgICA9PiAnU29sdXRpb24uLi4nLAogICAgVXNlcklEICAgICAgPT4gMSwKICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAopOwoKIyBhZGQgMSBtaW51dGUgdG8gZnJvemVuIHRpbWUKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lQWRkU2Vjb25kcyg2MCk7CgpteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUVVwZGF0ZSgKICAgICVGQVFVcGRhdGVUZW1wbGF0ZSwKICAgIEl0ZW1JRCA9PiAkQWRkZWRGQVFzWzBdLAogICAgVXNlcklEID0+ICRBZGRlZFVzZXJzWzJdLAopOwoKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJGQVFVcGRhdGUoKSBGQVFJRDonJEFkZGVkRkFRc1swXScgZm9yIEZBUVNlYXJjaCgpIiwKKTsKCiRIZWxwZXJPYmplY3QtPkZpeGVkVGltZUFkZFNlY29uZHMoNjApOwoKJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFVcGRhdGUoCiAgICAlRkFRVXBkYXRlVGVtcGxhdGUsCiAgICBJdGVtSUQgPT4gJEFkZGVkRkFRc1sxXSwKICAgIFVzZXJJRCA9PiAkQWRkZWRVc2Vyc1szXSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiRkFRVXBkYXRlKCkgRkFRSUQ6JyRBZGRlZEZBUXNbMV0nIGZvciBGQVFTZWFyY2goKSIsCik7CgojIGFkZCAyIG1pbnV0ZXMgdG8gZnJvemVuIHRpbWUKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lQWRkU2Vjb25kcygxMjApOwoKIyBnZXQgdGltZSBvYmplY3QKbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKbXkgJFN5c3RlbVRpbWUgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpOwoKbXkgJERhdGVNaW51czJNaW5zID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgU3lzdGVtVGltZSA9PiAoICRTeXN0ZW1UaW1lIC0gMTIwIC0gMSApLAopOwpteSAkRGF0ZU1pbnVzNU1pbnMgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICBTeXN0ZW1UaW1lID0+ICggJFN5c3RlbVRpbWUgLSAzMDAgLSAxICksCik7Cm15ICREYXRlTWludXM2TWlucyA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgIFN5c3RlbVRpbWUgPT4gKCAkU3lzdGVtVGltZSAtIDM2MCAtIDEgKSwKKTsKCkBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0NyZWF0ZVRpbWVPbGRlck1pbnV0ZXMgMyBtaW4nLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVPbGRlck1pbnV0ZXMgPT4gMywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdDcmVhdGVUaW1lT2xkZXJNaW51dGVzIDYgbWluJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIEl0ZW1DcmVhdGVUaW1lT2xkZXJNaW51dGVzID0+IDYsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzBdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQ3JlYXRlVGltZU5ld2VyTWludXRlcyA2IG1pbicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0NyZWF0ZVRpbWVOZXdlck1pbnV0ZXMgNSBtaW4nLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVOZXdlck1pbnV0ZXMgPT4gNSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdDcmVhdGVUaW1lT2xkZXJEYXRlIDUgbWluJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIEl0ZW1DcmVhdGVUaW1lT2xkZXJEYXRlID0+ICREYXRlTWludXM1TWlucywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdDcmVhdGVUaW1lTmV3ZXJEYXRlIDUgbWluJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIEl0ZW1DcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICREYXRlTWludXM1TWlucywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdDcmVhdGVUaW1lT2xkZXJEYXRlIENyZWF0ZVRpbWVOZXdlckRhdGUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgSXRlbUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJERhdGVNaW51czZNaW5zLAogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAkRGF0ZU1pbnVzNU1pbnMsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzBdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQ2hhbmdlVGltZU9sZGVyTWludXRlcyAzIG1pbicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBJdGVtQ2hhbmdlVGltZU9sZGVyTWludXRlcyA9PiAzLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0NoYW5nZVRpbWVOZXdlck1pbnV0ZXMgMiBtaW4nLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgSXRlbUNoYW5nZVRpbWVOZXdlck1pbnV0ZXMgPT4gMiwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdDaGFuZ2VUaW1lT2xkZXJEYXRlIDIgTWluJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIEl0ZW1DaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICREYXRlTWludXMyTWlucywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdDaGFuZ2VUaW1lTmV3ZXJEYXRlIDIgTWluJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIEl0ZW1DaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICREYXRlTWludXMyTWlucywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0KKTsKCiMgZXhlY3V0ZSB0aGUgdGVzdHMKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICBteSBARkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKCAleyAkVGVzdC0+e0NvbmZpZ30gfSApOwoKICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICBcQEZBUUlEcywKICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmVzdWx0c30sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gRkFRU2VhcmNoKCkiLAogICAgKTsKfQoKIyBjcmVhdGVkIHVzZXIgdGVzdHMKQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICA9PiAnQ3JlYXRlZFVzZXJJRHMgMScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBDcmVhdGVkVXNlcklEcyA9PiBbICRBZGRlZFVzZXJzWzBdIF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzBdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQ3JlYXRlZFVzZXJJRHMgMicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBDcmVhdGVkVXNlcklEcyA9PiBbICRBZGRlZFVzZXJzWzFdIF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzFdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQ3JlYXRlZFVzZXJJRHMgMSBhbmQgMicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBDcmVhdGVkVXNlcklEcyA9PiBbICRBZGRlZFVzZXJzWzBdLCAkQWRkZWRVc2Vyc1sxXSBdLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIENyZWF0ZWRVc2VySURzIEZvcm1hdCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBDcmVhdGVkVXNlcklEcyA9PiAkQWRkZWRVc2Vyc1swXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCik7CgojIGxhc3QgY2hhbmdlZCB1c2VyIHRlc3RzCkBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0xhc3RDaGFuZ2VkVXNlcklEcyAzJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIExhc3RDaGFuZ2VkVXNlcklEcyA9PiBbICRBZGRlZFVzZXJzWzJdIF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzBdLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTGFzdENoYW5nZWRVc2VySURzIDQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgTGFzdENoYW5nZWRVc2VySURzID0+IFsgJEFkZGVkVXNlcnNbM10gXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdMYXN0Q2hhbmdlZFVzZXJJRHMgMyBhbmQgNCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgJVNlYXJjaENvbmZpZ1RlbXBsYXRlLAogICAgICAgICAgICBMYXN0Q2hhbmdlZFVzZXJJRHMgPT4gWyAkQWRkZWRVc2Vyc1syXSwgJEFkZGVkVXNlcnNbM10gXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgICAgICRBZGRlZEZBUXNbMV0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBMYXN0Q2hhbmdlZFVzZXJJRHMgRm9ybWF0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIENyZWF0ZWRVc2VySURzID0+ICRBZGRlZFVzZXJzWzJdLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IFsKICAgICAgICAgICAgJEFkZGVkRkFRc1swXSwKICAgICAgICAgICAgJEFkZGVkRkFRc1sxXSwKICAgICAgICBdLAogICAgfSwKKTsKCiMgZXhlY3V0ZSB0aGUgdGVzdHMKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICBteSBARkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKCAleyAkVGVzdC0+e0NvbmZpZ30gfSApOwoKICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICBcQEZBUUlEcywKICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmVzdWx0c30sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gRkFRU2VhcmNoKCkiLAogICAgKTsKfQoKIyBhcHByb3ZhbCB0ZXN0cwojIHVwZGF0ZSBkYXRhYmFzZSB0byBwcmV2ZW50IGdlbmVyYXRpb24gb2YgYXBwcm92YWwgdGlja2V0CnJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgU1FMID0+ICcKICAgICAgICBVUERBVEUgZmFxX2l0ZW0KICAgICAgICBTRVQgYXBwcm92ZWQgPSA/CiAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgIEJpbmQgPT4gWwogICAgICAgIFwwLAogICAgICAgIFwkQWRkZWRGQVFzWzFdLAogICAgXSwKKTsKCkBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FwcHJvdmVkIDEnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICVTZWFyY2hDb25maWdUZW1wbGF0ZSwKICAgICAgICAgICAgQXBwcm92ZWQgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiBbCiAgICAgICAgICAgICRBZGRlZEZBUXNbMF0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBcHByb3ZlZCAwJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAlU2VhcmNoQ29uZmlnVGVtcGxhdGUsCiAgICAgICAgICAgIEFwcHJvdmVkID0+IDAsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gWwogICAgICAgICAgICAkQWRkZWRGQVFzWzFdLAogICAgICAgIF0sCiAgICB9LAopOwoKIyBleGVjdXRlIHRoZSB0ZXN0cwpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgIG15IEBGQVFJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goICV7ICRUZXN0LT57Q29uZmlnfSB9ICk7CgogICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgIFxARkFRSURzLAogICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXN1bHRzfSwKICAgICAgICAiJFRlc3QtPntOYW1lfSBGQVFTZWFyY2goKSIsCiAgICApOwp9CgojIGNsZWFuIHRoZSBzeXN0ZW0KZm9yIG15ICRGQVFJRCAoQEFkZGVkRkFRcykgewogICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgSXRlbUlEID0+ICRGQVFJRCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIkZBUURlbGV0ZSgpIGZvciBGQVFJRDonJEZBUUlEJyB3aXRoIFRydWUiLAogICAgKTsKfQoKIyByZXN0b3JlIHRpbWUKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lVW5zZXQoKTsKCiMgZXhlY3V0ZSBvbGQgdGVzdHMKJFNlbGYtPlRydWUoCiAgICAxLAogICAgIi0tRXhlY3V0ZSBGb3JtZXIgVGVzdHMtLSIsCik7CnsKICAgIG15ICRGQVFJRDEgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICBTdGF0ZUlEICAgICA9PiAyLAogICAgICAgIExhbmd1YWdlSUQgID0+IDIsCiAgICAgICAgQXBwcm92ZWQgICAgPT4gMSwKICAgICAgICBUaXRsZSAgICAgICA9PiAnU29tZSBUZXh0MicsCiAgICAgICAgS2V5d29yZHMgICAgPT4gJ3NvbWUga2V5d29yZHMyJywKICAgICAgICBGaWVsZDEgICAgICA9PiAnUHJvYmxlbS4uLjInLAogICAgICAgIEZpZWxkMiAgICAgID0+ICdTb2x1dGlvbiBmb3VuZC4uLjInLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRGQVFJRDEsCiAgICAgICAgIkZBUUFkZCgpIC0gMSIsCiAgICApOwoKICAgIG15ICRGQVFJRDIgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgVGl0bGUgICAgICAgPT4gJ1RpdGxlJywKICAgICAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgICAgIFN0YXRlSUQgICAgID0+IDEsCiAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICBLZXl3b3JkcyAgICA9PiAnJywKICAgICAgICBGaWVsZDEgICAgICA9PiAnUHJvYmxlbSBEZXNjcmlwdGlvbiAxLi4uJywKICAgICAgICBGaWVsZDIgICAgICA9PiAnU29sdXRpb24gbm90IGZvdW5kMS4uLicsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEZBUUlEMiwKICAgICAgICAiRkFRQWRkKCkgLSAyIiwKICAgICk7CgogICAgbXkgQEZBUUlEcyA9ICRGQVFPYmplY3QtPkZBUVNlYXJjaCgKICAgICAgICBOdW1iZXIgICAgICAgICAgID0+ICcqJywKICAgICAgICBXaGF0ICAgICAgICAgICAgID0+ICcqcyonLAogICAgICAgIEtleXdvcmQgICAgICAgICAgPT4gJ3NvbWUqJywKICAgICAgICBTdGF0ZXMgICAgICAgICAgID0+IFsgJ3B1YmxpYycsICdpbnRlcm5hbCcgXSwKICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFsnVm90ZXMnXSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsnVXAnXSwKICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDE1MCwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgIG15ICRGQVFTZWFyY2hGb3VuZCAgPSAwOwogICAgbXkgJEZBUVNlYXJjaEZvdW5kMiA9IDA7CiAgICBmb3IgbXkgJEZBUUlEU2VhcmNoIChARkFRSURzKSB7CiAgICAgICAgaWYgKCAkRkFRSURTZWFyY2ggZXEgJEZBUUlEMSApIHsKICAgICAgICAgICAgJEZBUVNlYXJjaEZvdW5kID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkRkFRSURTZWFyY2ggZXEgJEZBUUlEMiApIHsKICAgICAgICAgICAgJEZBUVNlYXJjaEZvdW5kMiA9IDE7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEZBUVNlYXJjaEZvdW5kLAogICAgICAgICJGQVFTZWFyY2goKSAtICRGQVFJRDEiLAogICAgKTsKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkRkFRU2VhcmNoRm91bmQyLAogICAgICAgICJGQVFTZWFyY2goKSAtICRGQVFJRDIiLAogICAgKTsKCiAgICBARkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgICAgIE51bWJlciAgICAgICAgICAgPT4gJyonLAogICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJ3RJVExlJywKICAgICAgICBXaGF0ICAgICAgICAgICAgID0+ICdsJywKICAgICAgICBTdGF0ZXMgICAgICAgICAgID0+IFsgJ3B1YmxpYycsICdpbnRlcm5hbCcgXSwKICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFsnQ3JlYXRlZCddLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWydVcCddLAogICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gMTUwLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgJEZBUVNlYXJjaEZvdW5kICA9IDA7CiAgICAkRkFRU2VhcmNoRm91bmQyID0gMDsKICAgIGZvciBteSAkRkFRSURTZWFyY2ggKEBGQVFJRHMpIHsKICAgICAgICBpZiAoICRGQVFJRFNlYXJjaCBlcSAkRkFRSUQxICkgewogICAgICAgICAgICAkRkFRU2VhcmNoRm91bmQgPSAxOwogICAgICAgIH0KICAgICAgICBpZiAoICRGQVFJRFNlYXJjaCBlcSAkRkFRSUQyICkgewogICAgICAgICAgICAkRkFRU2VhcmNoRm91bmQyID0gMTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJEZBUVNlYXJjaEZvdW5kLAogICAgICAgICJGQVFTZWFyY2goKSAtICRGQVFJRDEiLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRGQVFTZWFyY2hGb3VuZDIsCiAgICAgICAgIkZBUVNlYXJjaCgpIC0gJEZBUUlEMiIsCiAgICApOwoKICAgIEBGQVFJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCiAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAnKicsCiAgICAgICAgVGl0bGUgICAgICAgICAgICA9PiAnJywKICAgICAgICBXaGF0ICAgICAgICAgICAgID0+ICdzb2x1dGlvbiBmb3VuZCcsCiAgICAgICAgU3RhdGVzICAgICAgICAgICA9PiBbICdwdWJsaWMnLCAnaW50ZXJuYWwnIF0sCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbJ0NyZWF0ZWQnXSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsnVXAnXSwKICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDE1MCwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgICRGQVFTZWFyY2hGb3VuZCAgPSAwOwogICAgJEZBUVNlYXJjaEZvdW5kMiA9IDA7CiAgICBmb3IgbXkgJEZBUUlEU2VhcmNoIChARkFRSURzKSB7CiAgICAgICAgaWYgKCAkRkFRSURTZWFyY2ggZXEgJEZBUUlEMSApIHsKICAgICAgICAgICAgJEZBUVNlYXJjaEZvdW5kID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkRkFRSURTZWFyY2ggZXEgJEZBUUlEMiApIHsKICAgICAgICAgICAgJEZBUVNlYXJjaEZvdW5kMiA9IDE7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEZBUVNlYXJjaEZvdW5kLAogICAgICAgICJGQVFTZWFyY2goKSBsaXRlcmFsIHRleHQgLSAkRkFRSUQxIiwKICAgICk7CiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJEZBUVNlYXJjaEZvdW5kMiwKICAgICAgICAiRkFRU2VhcmNoKCkgbGl0ZXJhbCB0ZXh0IC0gJEZBUUlEMiIsCiAgICApOwoKICAgIEBGQVFJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCiAgICAgICAgTnVtYmVyICAgICAgICAgICA9PiAnKicsCiAgICAgICAgVGl0bGUgICAgICAgICAgICA9PiAnJywKICAgICAgICBXaGF0ICAgICAgICAgICAgID0+ICdzb2x1dGlvbitmb3VuZCcsCiAgICAgICAgU3RhdGVzICAgICAgICAgICA9PiBbICdwdWJsaWMnLCAnaW50ZXJuYWwnIF0sCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbJ0NyZWF0ZWQnXSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsnVXAnXSwKICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDE1MCwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgICRGQVFTZWFyY2hGb3VuZCAgPSAwOwogICAgJEZBUVNlYXJjaEZvdW5kMiA9IDA7CiAgICBmb3IgbXkgJEZBUUlEU2VhcmNoIChARkFRSURzKSB7CiAgICAgICAgaWYgKCAkRkFRSURTZWFyY2ggZXEgJEZBUUlEMSApIHsKICAgICAgICAgICAgJEZBUVNlYXJjaEZvdW5kID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkRkFRSURTZWFyY2ggZXEgJEZBUUlEMiApIHsKICAgICAgICAgICAgJEZBUVNlYXJjaEZvdW5kMiA9IDE7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEZBUVNlYXJjaEZvdW5kLAogICAgICAgICJGQVFTZWFyY2goKSBBTkQgLSAkRkFRSUQxIiwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkRkFRU2VhcmNoRm91bmQyLAogICAgICAgICJGQVFTZWFyY2goKSBBTkQgLSAkRkFRSUQyIiwKICAgICk7CgogICAgIyBjbGVhbnVwIHRoZSBzeXN0ZW0KICAgIGZvciBteSAkRkFRSUQgKCAkRkFRSUQxLCAkRkFRSUQyICkgewogICAgICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgICAgICAgICBJdGVtSUQgPT4gJEZBUUlELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJGQVFEZWxldGUoKSBmb3IgRkFRSUQ6JyRGQVFJRCcgd2l0aCBUcnVlIiwKICAgICAgICApOwogICAgfQp9CjE7Cg==
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
VGVzdCBGQVExO01pc2M7ZW47ZXh0ZXJuYWw7RjE7RjI7RjM7RjQ7RjU7RjY7a2V5MQpUZXN0IEZBUTI7TWlzYztlbjtleHRlcm5hbDtGMTtGMjtGMztGNDtGNTtGNjtrZXkxClRlc3QgRkFRMztNaXNjO2VuO2V4dGVybmFsO0YxO0YyO0YzO0Y0O0Y1O0Y2O2tleTEKVGVzdCBGQVE0O01pc2M7ZW47cHVibGljO0YxO0YyO0YzO0Y0O0Y1O0Y2O2tleTEKVGVzdCBGQVE1O01pc2M7ZW47cHVibGljO0YxO0YyO0YzO0Y0O0Y1O0Y2O2tleTIKVGVzdCBGQVE2O01pc2M7ZW47cHVibGljO0YxO0YyO0YzO0Y0O0Y1O0Y2O2tleTIKVGVzdCBGQVE3O01pc2M7ZW47cHVibGljO0YxO0YyO0YzO0Y0O0Y1O0Y2O2tleTIKVGVzdCBGQVE4O01pc2M7ZW47aW50ZXJuYWw7RjE7RjI7RjM7RjQ7RjU7RjY7a2V5MgpUZXN0IEZBUTk7TWlzYztlbjtpbnRlcm5hbDtGMTtGMjtGMztGNDtGNTtGNjtrZXkyClRlc3QgRkFRMTA7TWlzYztlbjtpbnRlcm5hbDtGMTtGMjtGMztGNDtGNTtGNjtrZXkyClRlc3QgRkFRMTE7TWlzYztkZTtpbnRlcm5hbDtGMTtGMjtGMztGNDtGNTtGNjtrZXkzClRlc3QgRkFRMTI7TWlzYztkZTtpbnRlcm5hbDtGMTtGMjtGMztGNDtGNTtGNjtrZXkzClRlc3QgRkFRMTM7TWlzYztkZTtwdWJsaWM7RjE7RjI7RjM7RjQ7RjU7RjY7a2V5MwpUZXN0IEZBUTE0O01pc2M7ZGU7cHVibGljO0YxO0YyO0YzO0Y0O0Y1O0Y2O2tleTMKVGVzdCBGQVExNTtNaXNjO2RlO3B1YmxpYztGMTtGMjtGMztGNDtGNTtGNjtrZXkzClRlc3QgRkFRMTY7TWlzYztkZTtwdWJsaWM7RjE7RjI7RjM7RjQ7RjU7RjY7a2V5NApUZXN0IEZBUTE3O01pc2M7ZGU7ZXh0ZXJuYWw7RjE7RjI7RjM7RjQ7RjU7RjY7a2V5NApUZXN0IEZBUTE4O01pc2M7ZGU7ZXh0ZXJuYWw7RjE7RjI7RjM7RjQ7RjU7RjY7a2V5NApUZXN0IEZBUTE5O01pc2M7ZGU7ZXh0ZXJuYWw7RjE7RjI7RjM7RjQ7RjU7RjY7a2V5NApUZXN0IEZBUTIwO01pc2M7ZGU7ZXh0ZXJuYWw7RjE7RjI7RjM7RjQ7RjU7RjY7a2V5NAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICAkS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgICAgICAgICAgUmVzdG9yZVN5c3RlbUNvbmZpZ3VyYXRpb24gPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGRvIG5vdCBjaGVjayBSaWNoVGV4dAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKS0+Q29uZmlnSXRlbVVwZGF0ZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpSaWNoVGV4dCcsCiAgICAgICAgICAgIFZhbHVlID0+IDAKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2ZhcScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudEZBUUFkZAogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudEZBUUFkZCIpOwoKICAgICAgICAjIGNoZWNrIHBhZ2UKICAgICAgICBmb3IgbXkgJElEICgKICAgICAgICAgICAgcXcoVGl0bGUgS2V5d29yZHMgQ2F0ZWdvcnlJRCBTdGF0ZUlEIFZhbGlkSUQgTGFuZ3VhZ2VJRCBGaWxlVXBsb2FkCiAgICAgICAgICAgIEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNiBGQVFTdWJtaXQpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjJElEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgIyB0ZXN0IHBhcmFtcwogICAgICAgIG15ICRGQVFUaXRsZSAgICA9ICdGQVEgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJEZBUVN5bXB0b20gID0gJ1NlbGVuaXVtIFN5bXB0b20nOwogICAgICAgIG15ICRGQVFQcm9ibGVtICA9ICdTZWxlbml1bSBQcm9ibGVtJzsKICAgICAgICBteSAkRkFRU29sdXRpb24gPSAnU2VsZW5pdW0gU29sdXRpb24nOwogICAgICAgIG15ICRGQVFDb21tZW50ICA9ICdTZWxlbml1bSBDb21tZW50JzsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBGQVEKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNUaXRsZSIsICAgICdjc3MnICktPnNlbmRfa2V5cygkRkFRVGl0bGUpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0tleXdvcmRzIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCdTZWxlbml1bScpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjQ2F0ZWdvcnlJRCcpLnZhbCgnMScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNTdGF0ZUlEJykudmFsKCcyJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI1ZhbGlkSUQnKS52YWwoJzEnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjTGFuZ3VhZ2VJRCcpLnZhbCgnMScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRmllbGQxIiwgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCRGQVFTeW1wdG9tKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNGaWVsZDIiLCAgICAnY3NzJyApLT5zZW5kX2tleXMoJEZBUVByb2JsZW0pOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpZWxkMyIsICAgICdjc3MnICktPnNlbmRfa2V5cygkRkFRU29sdXRpb24pOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpZWxkNiIsICAgICdjc3MnICktPnNlbmRfa2V5cygkRkFRQ29tbWVudCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRkFRU3VibWl0IiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IGZvciBzdWJtaXQgYWN0aW9uIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCd1bC5CcmVhZENydW1iJykubGVuZ3RoIiApOwoKICAgICAgICAjIHZlcmlmeSB0ZXN0IEZBUSBpcyBjcmVhdGVkCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRkFRVGl0bGUgKSA+IC0xLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkVGVzdCAoICRGQVFTeW1wdG9tLCAkRkFRUHJvYmxlbSwgJEZBUVNvbHV0aW9uLCAkRkFRQ29tbWVudCApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRlc3QgKSA+IC0xLAogICAgICAgICAgICAgICAgIiRUZXN0IC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgREIgb2JqZWN0CiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICMgZ2V0IHRlc3QgY3JlYXRlZCBGQVEgSUQKICAgICAgICBteSAkRkFRSXRlbSA9ICREQk9iamVjdC0+UXVvdGUoJEZBUVRpdGxlKTsKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgPT4gIlNFTEVDVCBpZCBGUk9NIGZhcV9pdGVtIFdIRVJFIGZfc3ViamVjdCA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCRGQVFUaXRsZSBdCiAgICAgICAgKTsKICAgICAgICBteSAkRkFRSUQ7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRGQVFJRCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyktPkZBUURlbGV0ZSgKICAgICAgICAgICAgSXRlbUlEID0+ICRGQVFJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkRkFRVGl0bGUgLSBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdmYXEnLCAnZmFxX2FkbWluJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50RkFRQ2F0ZWdvcnkKICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFDYXRlZ29yeSIpOwoKICAgICAgICAjIGNoZWNrIEFnZW50RkFRQ2F0ZWdvcnkgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSIsICAgICAgICAgICAgICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0aGVhZCB0ciB0aCIsICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0Ym9keSB0ciB0ZCIsICdjc3MnICk7CgogICAgICAgICMgY2xpY2sgb24gJ0FkZCBjYXRlZ29yeScKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRGQVFDYXRlZ29yeTtTdWJhY3Rpb249QWRkJyApXSIpLT5jbGljaygpOwoKICAgICAgICAjIGNoZWNrIHBhZ2UKICAgICAgICBmb3IgbXkgJElEICgKICAgICAgICAgICAgcXcoTmFtZSBQYXJlbnRJRCBQZXJtaXNzaW9uR3JvdXBzIFZhbGlkSUQgQ29tbWVudCkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkSUQiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNhdGVnb3J5CiAgICAgICAgbXkgJENhdGVnb3J5TmFtZSA9ICdDYXRlZ29yeSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRDYXRlZ29yeU5hbWUpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjUGVybWlzc2lvbkdyb3VwcycpLnZhbCgnNCcpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNWYWxpZElEJykudmFsKCcxJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgJ2NzcycgKS0+c2VuZF9rZXlzKCdTZWxlbml1bSBDYXRlZ29yeScpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPmNsaWNrKCk7CgogICAgICAgICMgdmVyaWZ5IHRlc3QgY2F0ZWdvcnkgaXMgY3JlYXRlZAogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENhdGVnb3J5TmFtZSApID4gLTEsCiAgICAgICAgICAgICIkQ2F0ZWdvcnlOYW1lIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IERCIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGdldCB0ZXN0IGNyZWF0ZWQgY2F0ZWdvcnkgSUQKICAgICAgICBteSAkQ2F0ZWdvcnkgPSAkREJPYmplY3QtPlF1b3RlKCRDYXRlZ29yeU5hbWUpOwogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICA9PiAiU0VMRUNUIGlkIEZST00gZmFxX2NhdGVnb3J5IFdIRVJFIG5hbWUgPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ2F0ZWdvcnlOYW1lIF0KICAgICAgICApOwogICAgICAgIG15ICRDYXRlZ29yeUlEOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkQ2F0ZWdvcnlJRCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICAjIGNsaWNrIG9uIGRlbGV0ZSBpY29uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGVsZXRlQ2F0ZWdvcnlJRCRDYXRlZ29yeUlEIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCIjRGlhbG9nQnV0dG9uMSIpLmxlbmd0aCcgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIGRlbGV0ZSBkaWFsb2cgaGFzIGNsb3NlZAogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuICFcJCgnI0RpYWxvZ0J1dHRvbjEnKS5sZW5ndGgiICk7CgogICAgICAgICMgdmVyaWZ5IHRlc3QgY3JlYXRlZCBjYXRlZ29yeSBpcyBkZWxldGVkCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkQ2F0ZWdvcnlOYW1lICkgPT0gLTEsCiAgICAgICAgICAgICIkQ2F0ZWdvcnlOYW1lIC0gbm90IGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBGQVEKICAgICAgICBteSAkRkFRVGl0bGUgPSAnRkFRICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRGQVFJRCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKS0+RkFRQWRkKAogICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkRkFRVGl0bGUsCiAgICAgICAgICAgIENhdGVnb3J5SUQgID0+IDEsCiAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IDEsCiAgICAgICAgICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICAgICAgICAgIFZhbGlkSUQgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2ZhcScsICdmYXFfYWRtaW4nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRGQVFab29tIHNjcmVlbiBvZiBjcmVhdGVkIHRlc3QgRkFRCiAgICAgICAgJFNlbGVuaXVtLT5nZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9JEZBUUlEO05hdj0iKTsKCiAgICAgICAgIyB2ZXJpZnkgaXRzIHJpZ2h0IHNjcmVlbgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEZBUVRpdGxlICkgPiAtMSwKICAgICAgICAgICAgIiRGQVFUaXRsZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGNsaWNrIG9uICdEZWxldGUnCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50RkFRRGVsZXRlO0l0ZW1JRD0kRkFRSUQnICldIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gJCgiI0RpYWxvZ0J1dHRvbjEiKS5sZW5ndGgnICk7CgogICAgICAgICMgdmVyaWZ5IGRlbGV0ZSBtZXNzYWdlCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIEZBUSBhcnRpY2xlPycgKSA+IC0xLAogICAgICAgICAgICAiRGVsZXRlIG1lc3NhZ2UgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBleGVjdXRlIGRlbGV0ZQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIHZlcmlmeSBkZWxldGUgYWN0aW9uCiAgICAgICAgIyB0cnkgdG8gbmF2aWdhdGUgdG8gdGhlIEFnZXRuRkFRWm9vbSBvZiBkZWxldGVkIHRlc3QgRkFRCiAgICAgICAgJFNlbGVuaXVtLT5nZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9JEZBUUlEO05hdj0iKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJObyBzdWNoIEl0ZW1JRCAkRkFRSUQhIiApID4gLTEsCiAgICAgICAgICAgICJEZWxldGUgYWN0aW9uIC0gc3VjY2VzcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAiRkFRIiApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICAkS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgICAgICAgICAgUmVzdG9yZVN5c3RlbUNvbmZpZ3VyYXRpb24gPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGRvIG5vdCBjaGVjayBSaWNoVGV4dAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKS0+Q29uZmlnSXRlbVVwZGF0ZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpSaWNoVGV4dCcsCiAgICAgICAgICAgIFZhbHVlID0+IDAKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZXN0IHBhcmFtcwogICAgICAgIG15ICRGQVFUaXRsZSA9ICdGQVEgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJVRlc3QgICAgID0gKAogICAgICAgICAgICBTdG9yZWQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgICAgICAgICAgS2V5d29yZHMgICAgPT4gJ1NlbGVuaXVtIEtleXdvcmRzJywKICAgICAgICAgICAgICAgIEZpZWxkMSAgICAgID0+ICdTZWxlbml1bSBTeW1wdG9tJywKICAgICAgICAgICAgICAgIEZpZWxkMiAgICAgID0+ICdTZWxlbml1bSBQcm9ibGVtJywKICAgICAgICAgICAgICAgIEZpZWxkMyAgICAgID0+ICdTZWxlbml1bSBTb2x1dGlvbicsCiAgICAgICAgICAgICAgICBGaWVsZDYgICAgICA9PiAnU2VsZW5pdW0gQ29tbWVudCcsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEVkaXRlZCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkRkFRVGl0bGUgLiAnIEVkaXQnLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IDIsCiAgICAgICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAyLAogICAgICAgICAgICAgICAgS2V5d29yZHMgICAgPT4gJ1NlbGVuaXVtIEtleXdvcmRzIEVkaXQnLAogICAgICAgICAgICAgICAgRmllbGQxICAgICAgPT4gJ1NlbGVuaXVtIFN5bXB0b20gRWRpdCcsCiAgICAgICAgICAgICAgICBGaWVsZDIgICAgICA9PiAnU2VsZW5pdW0gUHJvYmxlbSBFZGl0JywKICAgICAgICAgICAgICAgIEZpZWxkMyAgICAgID0+ICdTZWxlbml1bSBTb2x1dGlvbiBFZGl0JywKICAgICAgICAgICAgICAgIEZpZWxkNiAgICAgID0+ICdTZWxlbml1bSBDb21tZW50IEVkaXQnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICAgICBWYWxpZElEICAgICA9PiAyLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IEZBUSBvYmplY3QKICAgICAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IEZBUQogICAgICAgIG15ICRGQVFJRCA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgICAgICAgICAgJXsgJFRlc3R7U3RvcmVkfSB9LAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2ZhcScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudEZBUVpvb20gb2YgY3JlYXRlZCB0ZXN0IEZBUQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPSRGQVFJRDtOYXY9Iik7CgogICAgICAgICMgdmVyaWZ5IGl0cyByaWdodCBzY3JlZW4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVFUaXRsZSApID4gLTEsCiAgICAgICAgICAgICIkRkFRVGl0bGUgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjbGljayBvbiAnRWRpdCcgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRGQVFFZGl0O0l0ZW1JRD0kRkFRSUQnICldIiktPmNsaWNrKCk7CgogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB2ZXJpZnkgc3RvcmVkIHZhbHVlcwogICAgICAgIGZvciBteSAkU3RvcmVkICggc29ydCBrZXlzICV7ICRUZXN0e1N0b3JlZH0gfSApIHsKICAgICAgICAgICAgaWYgKCAkU3RvcmVkIG5lICdDb250ZW50VHlwZScgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjJyAuICRTdG9yZWQsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAgICAgICAgICIkVGVzdHtTdG9yZWR9LT57JFN0b3JlZH0iLAogICAgICAgICAgICAgICAgICAgICIjJFN0b3JlZCBzdG9yZWQgdmFsdWUiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBlZGl0IHRlc3QgRkFRCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjVGl0bGUiLCAnY3NzJyApLT5zZW5kX2tleXMoJyBFZGl0Jyk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNTdGF0ZUlEJykudmFsKCcyJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI0xhbmd1YWdlSUQnKS52YWwoJzInKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0tleXdvcmRzIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCcgRWRpdCcpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpZWxkMSIsICAgJ2NzcycgKS0+c2VuZF9rZXlzKCcgRWRpdCcpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpZWxkMiIsICAgJ2NzcycgKS0+c2VuZF9rZXlzKCcgRWRpdCcpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpZWxkMyIsICAgJ2NzcycgKS0+c2VuZF9rZXlzKCcgRWRpdCcpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpZWxkNiIsICAgJ2NzcycgKS0+c2VuZF9rZXlzKCcgRWRpdCcpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjVmFsaWRJRCcpLnZhbCgnMicpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CgogICAgICAgICMgc3VibWl0IGFuZCBzd2l0Y2ggYmFjayB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNGQVFTdWJtaXQiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwoKICAgICAgICAjIGNsaWNrIG9uICdFZGl0JyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudEZBUUVkaXQ7SXRlbUlEPSRGQVFJRCcgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHZlcmlmeSBlZGl0ZWQgdmFsdWVzCiAgICAgICAgZm9yIG15ICRFZGl0ZWQgKCBzb3J0IGtleXMgJXsgJFRlc3R7RWRpdGVkfSB9ICkgewogICAgICAgICAgICBpZiAoICRFZGl0ZWQgbmUgJ0NvbnRlbnRUeXBlJyApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyMnIC4gJEVkaXRlZCwgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0e0VkaXRlZH0tPnskRWRpdGVkfSIsCiAgICAgICAgICAgICAgICAgICAgIiMkRWRpdGVkIHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAiRkFRIiApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgIG15IEBGQVFzOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IEZBUXMKICAgICAgICBmb3IgKCAxIC4uIDUgKSB7CiAgICAgICAgICAgIG15ICRGQVFUaXRsZSA9ICdGQVEgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgICAgIG15ICRGQVFJRCAgICA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgID0+IDEsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICA9PiAxLAogICAgICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRGQVFJRCwKICAgICAgICAgICAgICAgICJGQVEgaXMgY3JlYXRlZCAtICRGQVFJRCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlRkFRID0gKAogICAgICAgICAgICAgICAgRkFRSUQgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgRkFRVGl0bGUgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBARkFRcywgXCVGQVE7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2ZhcScsICdmYXFfYWRtaW4nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRGQVFFeHBsb3JlciBzY3JlZW4gb2YgY3JlYXRlZCB0ZXN0IEZBUQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudEZBUUV4cGxvcmVyIik7CgogICAgICAgICMgY2hlY2sgQWdlbnRGQVFFeHBsb3JlciBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRoZWFkIHRyIHRoIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRib2R5IHRyIHRkIiwgJ2NzcycgKTsKCiAgICAgICAgIyB0ZXN0IGRhdGEgZm9yIGV4cGxvcmVyIHNjcmVlbgogICAgICAgIG15IEBUZXN0cyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU2NyZWVuRGF0YSA9PiAnRkFRIEV4cGxvcmVyJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU2NyZWVuRGF0YSA9PiAnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU2NyZWVuRGF0YSA9PiAnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJFRlc3QgKEBUZXN0cykgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGVzdC0+e1NjcmVlbkRhdGF9ICkgPiAtMSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e1NjcmVlbkRhdGF9IC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjbGljayBvbiAnTWlzYycsIGdvIG9uIHN1YmNhdGVnb3J5IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnTWlzYycsICdsaW5rX3RleHQnICktPmNsaWNrKCk7CgogICAgICAgICMgb3JkZXIgRkFRIGl0ZW0gcGVyIEZBUUlEIGJ5IERvd24KICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFFeHBsb3JlcjtDYXRlZ29yeUlEPTE7U29ydEJ5PUZBUUlEO09yZGVyQnk9RG93biIpOwoKICAgICAgICAjIGNoZWNrIGFuZCBkZWxldGUgdGVzdCBjcmVhdGVkIEZBUXMKICAgICAgICBmb3IgbXkgJEZBUSAoQEZBUXMpIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgdGVzdCBGQVEgb24gc2NyZWVuCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVEtPntGQVFUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgIiRGQVEtPntGQVFUaXRsZX0gLSBmb3VuZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRLT57RkFRSUR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRkFRIGlzIGRlbGV0ZWQgLSAkRkFRLT57RkFRVGl0bGV9IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gIkZBUSIgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdmYXEnLCAnZmFxX2FkbWluJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgbXkgJEZBUVRpdGxlID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkRkFRSUQgICAgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMSwKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudEZBUVpvb20gc2NyZWVuIG9mIGNyZWF0ZWQgdGVzdCBGQVEKICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0kRkFRSUQ7TmF2PSIpOwoKICAgICAgICAjIHZlcmlmeSBpdHMgcmlnaHQgc2NyZWVuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRkFRVGl0bGUgKSA+IC0xLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgY2xpY2sgb24gJ0hpc3RvcnknIGFuZCBzd2l0Y2ggd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50RkFRSGlzdG9yeTtJdGVtSUQ9JEZBUUlEJyApXSIpLT5jbGljaygpOwoKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgdmVyaWZ5IGhpc3RvcnkgbWVzc2FnZQogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIiRUZXN0VXNlckxvZ2luICgkVGVzdFVzZXJMb2dpbiAkVGVzdFVzZXJMb2dpbikiICkgPiAtMSwKICAgICAgICAgICAgIkhpc3RvcnkgZW50cnkgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIEZBUQogICAgICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgICAgICAgICBJdGVtSUQgPT4gJEZBUUlELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRGQVFUaXRsZSAtIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gIkZBUSIgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgbXkgJEZBUVRpdGxlID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkRkFRSUQgICAgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMSwKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdmYXEnLCAnZmFxX2FkbWluJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50RkFRSm91cm5hbCBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFKb3VybmFsIik7CgogICAgICAgICMgY2hlY2sgQWdlbnRGQVFKb3VybmFsIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIGZvciB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiJEZBUVRpdGxlIiApID4gLTEsCiAgICAgICAgICAgICIkRkFRVGl0bGUgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjbGljayBvbiB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vZGl2W1xAdGl0bGU9JyRGQVFUaXRsZSddIiktPmNsaWNrKCk7CgogICAgICAgICMgdmVyaWZ5IHdlIGFyZSBpbiBBZ2VudEZBUVpvb20gc2NyZWVuCiAgICAgICAgbXkgJFVSTEFjdGlvbiA9ICRTZWxlbml1bS0+Z2V0X2N1cnJlbnRfdXJsKCk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICBpbmRleCggJFVSTEFjdGlvbiwgIkFjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPSRGQVFJRCIgKSA+IC0xLAogICAgICAgICAgICAxLAogICAgICAgICAgICAiTGluayBmcm9tIEpvdXJuYWwgdG8gWm9vbSB2aWV3IC0gc3VjY2VzcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIEZBUQogICAgICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgICAgICAgICBJdGVtSUQgPT4gJEZBUUlELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRGQVFUaXRsZSAtIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gIkZBUSIgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnLCAnZmFxJywgJ2ZhcV9hZG1pbicgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudEZBUUxhbmd1YWdlIHNjcmVlbiBvZiBjcmVhdGVkIHRlc3QgRkFRCiAgICAgICAgJFNlbGVuaXVtLT5nZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50RkFRTGFuZ3VhZ2UiKTsKCiAgICAgICAgIyBjaGVjayBhZGQgYnV0dG9uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50RkFRTGFuZ3VhZ2U7U3ViYWN0aW9uPUFkZCcgKV0iKTsKCiAgICAgICAgIyBjaGVjayBBZ2VudEZBUUxhbmd1YWdlIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIEVuZ2xpc2ggbGFuZ3VhZ2UgLSAnZW4nCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICdlbicsICdsaW5rX3RleHQnICk7CgogICAgICAgICMgY2hlY2sgR2VybWFuIExhbmd1YWdlIC0gJ2RlJwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnZGUnLCAnbGlua190ZXh0JyApOwoKICAgICAgICAjIGFkZCB0ZXN0IGxhbmd1YWdlIC0gU3BhbmlzaCAoZXMpCiAgICAgICAgbXkgJEZBUUxhbmd1YWdlID0gJ2VzJzsKCiAgICAgICAgIyBjaGVjayBpZiB0aGVyZSBpcyAnZXMgLSBMYW5ndWFnZScgaGFzIGJlZW4gYWRkZWQgYmVmb3JlCiAgICAgICAgbXkgJEV4aXN0cyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlRHVwbGljYXRlQ2hlY2soCiAgICAgICAgICAgIE5hbWUgICA9PiAkRkFRTGFuZ3VhZ2UsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudEZBUUxhbmd1YWdlO1N1YmFjdGlvbj1BZGQnICldIiktPmNsaWNrKCk7CgogICAgICAgIGlmICgkRXhpc3RzKSB7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAnY3NzJyApLT5zZW5kX2tleXMoJEZBUUxhbmd1YWdlKTsKCiAgICAgICAgICAgICMgY2xvc2UgRXJyb3IgZGlhbG9nIGJsb2NrCiAgICAgICAgICAgIG15ICRDaGVja0NvbmZpcm1KUyA9IDw8IkpBVkFTQ1JJUFQiOwooZnVuY3Rpb24gKCkgewogICAgdmFyIGxhc3RDb25maXJtID0gdW5kZWZpbmVkOwogICAgd2luZG93LmNvbmZpcm0gPSBmdW5jdGlvbiAobWVzc2FnZSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKfSgpKTsKSkFWQVNDUklQVAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCRDaGVja0NvbmZpcm1KUyk7CgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgJ2NzcycgKS0+c3VibWl0KCk7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgInJldHVybiBcJCgnI05hbWUnKS5oYXNDbGFzcygnU2VydmVyRXJyb3InKSIKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAnMScsCiAgICAgICAgICAgICAgICAnVGhpcyBsYW5ndWFnZSBhbHJlYWR5IGV4aXN0cyEnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnbyBiYWNrIG9uIExhbmd1YWdlIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFMYW5ndWFnZSIpOwoKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAnY3NzJyApLT5zZW5kX2tleXMoJEZBUUxhbmd1YWdlKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICdjc3MnICktPnN1Ym1pdCgpOwogICAgICAgIH0KCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gJCgiLkRhdGFUYWJsZSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBnZXQgSUQgZm9yIHRlc3QgbGFuZ3VhZ2UKICAgICAgICBteSAkTGFuZ3VhZ2VJRCA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTG9va3VwKAogICAgICAgICAgICBOYW1lID0+ICRGQVFMYW5ndWFnZSwKICAgICAgICApOwoKICAgICAgICAjIHZlcmlmeSB0ZXN0IEZBUSBoYXMgYmVlbiBjcmVhdGVkCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiQWdlbnRGQVFMYW5ndWFnZTtTdWJhY3Rpb249Q2hhbmdlO0xhbmd1YWdlSUQ9JExhbmd1YWdlSUQiICkgPiAtMSwKICAgICAgICAgICAgIlRlc3QgbGFuZ3VhZ2UgaXMgY3JlYXRlZCAtICRGQVFMYW5ndWFnZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBhZGRlZCAndGVzdCcgbGFuZ3VhZ2UKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiRGQVFMYW5ndWFnZSIsICdsaW5rX3RleHQnICktPmNsaWNrKCk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjTmFtZScsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkRkFRTGFuZ3VhZ2UsCiAgICAgICAgICAgICJTdG9yZWQgbGFuZ3VhZ2UgbmFtZSAkRkFRTGFuZ3VhZ2UgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnbyBiYWNrIG9uIExhbmd1YWdlIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnQ2FuY2VsJywgJ2xpbmtfdGV4dCcgKS0+Y2xpY2soKTsKCiAgICAgICAgIyBpZiBjYXNlIHRlc3QgbGFuZ3VhZ2Ugd2FzIGNyZWF0ZWQgaW4gdGhlIHRlc3QsIGRlbGV0ZSBpdAogICAgICAgIGlmICggISRFeGlzdHMgKSB7CgogICAgICAgICAgICAjIGRlbGV0ZSAndGVzdCcgbGFuZ3VhZ2UKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGVsZXRlTGFuZ3VhZ2VJRCRMYW5ndWFnZUlEIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuICQoIiNEaWFsb2dCdXR0b24xIikubGVuZ3RoJyApOwoKICAgICAgICAgICAgIyB2ZXJpZnkgZGVsZXRlIG1lc3NhZ2UKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBsYW5ndWFnZT8nICkgPiAtMSwKICAgICAgICAgICAgICAgICJEZWxldGUgbWVzc2FnZSAtIGZvdW5kIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZXhlY3V0ZSBkZWxldGUKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGlhbG9nQnV0dG9uMSIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICAgICAjIHZlcmlmeSB0ZXN0IEZBUSBoYXMgYmVlbiBkZWxldGVkCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJBZ2VudEZBUUxhbmd1YWdlO1N1YmFjdGlvbj1DaGFuZ2U7TGFuZ3VhZ2VJRD0kTGFuZ3VhZ2VJRCIgKSA9PSAtMSwKICAgICAgICAgICAgICAgICJUZXN0IGxhbmd1YWdlIGlzIGRlbGV0ZWQgLSAkRkFRTGFuZ3VhZ2UiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICB9CgopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgIyB0ZXN0IHBhcmFtcwogICAgICAgIG15ICRGQVFUaXRsZSAgICA9ICdGQVEgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJEZBUVN5bXB0b20gID0gJ1NlbGVuaXVtIFN5bXB0b20nOwogICAgICAgIG15ICRGQVFQcm9ibGVtICA9ICdTZWxlbml1bSBQcm9ibGVtJzsKICAgICAgICBteSAkRkFRU29sdXRpb24gPSAnU2VsZW5pdW0gU29sdXRpb24nOwogICAgICAgIG15ICRGQVFDb21tZW50ICA9ICdTZWxlbml1bSBDb21tZW50JzsKCiAgICAgICAgbXkgJEZBUUlEID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkRkFRVGl0bGUsCiAgICAgICAgICAgIENhdGVnb3J5SUQgID0+IDEsCiAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IDEsCiAgICAgICAgICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICAgICAgICAgIEtleXdvcmRzICAgID0+ICdzb21lIGtleXdvcmRzJywKICAgICAgICAgICAgRmllbGQxICAgICAgPT4gJEZBUVN5bXB0b20sCiAgICAgICAgICAgIEZpZWxkMiAgICAgID0+ICRGQVFQcm9ibGVtLAogICAgICAgICAgICBGaWVsZDMgICAgICA9PiAkRkFRU29sdXRpb24sCiAgICAgICAgICAgIEZpZWxkNiAgICAgID0+ICRGQVFDb21tZW50LAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2ZhcScsICdmYXFfYWRtaW4nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRGQVFQcmludCBzY3JlZW4gb2YgY3JlYXRlZCB0ZXN0IEZBUQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudEZBUVByaW50O0l0ZW1JRD0kRkFRSUQiKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHByaW50IHNjcmVlbiBpcyBsb2FkZWQKICAgICAgICBBQ1RJVkVTTEVFUDoKICAgICAgICBmb3IgbXkgJFNlY29uZCAoIDEgLi4gMjAgKSB7CiAgICAgICAgICAgIGlmICggaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVFDb21tZW50ICkgPiAtMSwgKSB7CiAgICAgICAgICAgICAgICBsYXN0IEFDVElWRVNMRUVQOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNsZWVwIDE7CiAgICAgICAgfQoKICAgICAgICBteSBAVGVzdHMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZBUURhdGEgPT4gJEZBUVN5bXB0b20sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZBUURhdGEgPT4gJEZBUVByb2JsZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZBUURhdGEgPT4gJEZBUVNvbHV0aW9uLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGQVFEYXRhID0+ICRGQVFDb21tZW50LAogICAgICAgICAgICB9LAoKICAgICAgICApOwogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUZXN0LT57RkFRRGF0YX0gKSA+IC0xLAogICAgICAgICAgICAgICAgIiRUZXN0LT57RkFRRGF0YX0gLSBmb3VuZCBvbiBwcmludCBzY3JlZW4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiRkFRIGlzIGRlbGV0ZWQgLSAkRkFRSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gIkZBUSIgKTsKCiAgICB9CgopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgIG15ICRDYXRlZ29yeUlEID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdDYXRlZ29yeScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgICAgICBDb21tZW50ICA9PiAnU29tZSBjb21tZW50JywKICAgICAgICAgICAgUGFyZW50SUQgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENhdGVnb3J5SUQsCiAgICAgICAgICAgICJGQVEgY2F0ZWdvcnkgaXMgY3JlYXRlZCAtICRDYXRlZ29yeUlEIiwKICAgICAgICApOwoKICAgICAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICAgICAgR3JvdXAgPT4gJ2ZhcScsCiAgICAgICAgKTsKCiAgICAgICAgJEZBUU9iamVjdC0+U2V0Q2F0ZWdvcnlHcm91cCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgR3JvdXBJRHMgICA9PiBbJEdyb3VwSURdLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQEZBUVNlYXJjaDsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBGQVFzCiAgICAgICAgZm9yIG15ICRUaXRsZSAocXcoIEZBUVNlYXJjaCBGQVFDaGFuZ2VTZWFyY2ggKSkgewogICAgICAgICAgICBmb3IgKCAxIC4uIDUgKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgdGVzdCBGQVEKICAgICAgICAgICAgICAgIG15ICRGQVFUaXRsZSA9ICRUaXRsZSAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgICAgICAgICBteSAkRkFRSUQgICAgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICAiRkFRIGlzIGNyZWF0ZWQgLSAkRkFRSUQiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlRkFRID0gKAogICAgICAgICAgICAgICAgICAgIEZBUUlEICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBGQVFUaXRsZSA9PiAkRkFRVGl0bGUsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJFRpdGxlLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBGQVFTZWFyY2gsIFwlRkFROwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdmYXEnLCAnZmFxX2FkbWluJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50RkFRU2VhcmNoIGZvcm0KICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFTZWFyY2giKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIGZvcm0gaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNTZWFyY2hQcm9maWxlJykubGVuZ3RoIiApOwoKICAgICAgICAjIGNoZWNrIHRpY2tldCBzZWFyY2ggcGFnZQogICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICBxdyhTZWFyY2hQcm9maWxlIFNlYXJjaFByb2ZpbGVOZXcgQXR0cmlidXRlIFJlc3VsdEZvcm0gU2VhcmNoRm9ybVN1Ym1pdCkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkSUQiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBzZWFyY2ggZmlsdGVyIGJ5IHRpdGxlIGFuZCBydW4gaXQKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI0F0dHJpYnV0ZScpLnZhbCgnVGl0bGUnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLkFkZEJ1dHRvbiIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJUaXRsZSIsICAgICAgJ25hbWUnICktPnNlbmRfa2V5cygnRkFRKicpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0F0dHJpYnV0ZScpLnZhbCgnQ2F0ZWdvcnlJRHMnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLkFkZEJ1dHRvbiIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjQ2F0ZWdvcnlJRHMnKS52YWwoJyRDYXRlZ29yeUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTZWFyY2hGb3JtU3VibWl0IiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIGZvcm0gaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNPdmVydmlld0JvZHknKS5sZW5ndGgiICk7CgogICAgICAgICMgY2hlY2sgQWdlbnRGQVFTZWFyY2ggcmVzdWx0IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIHRlc3QgRkFRcyBzZWFyY2hlZCBieSAnRkFRKicKICAgICAgICAjIGFsbCBGQVFzIHdpbGwgYmUgaW4gYSBzZWFyY2ggcmVzdWx0CiAgICAgICAgZm9yIG15ICRGQVEgKEBGQVFTZWFyY2gpIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgdGVzdCBGQVEgb24gc2NyZWVuCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVEtPntGQVFUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgIiRGQVEtPntGQVFUaXRsZX0gLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrICdDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMnIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZBUVNlYXJjaCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcjU2VhcmNoUHJvZmlsZScpLmxlbmd0aCIgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJUaXRsZSIsICAgICAgICAgICAgICduYW1lJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiVGl0bGUiLCAgICAgICAgICAgICAnbmFtZScgKS0+c2VuZF9rZXlzKCdGQVFDaGFuZ2VTZWFyY2gqJyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU2VhcmNoRm9ybVN1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcjT3ZlcnZpZXdCb2R5JykubGVuZ3RoIiApOwoKICAgICAgICAjIGNoZWNrIHRlc3QgRkFRcyBzZWFyY2hlZCBieSAnRkFRQ2hhbmdlU2VhcmNoKicKICAgICAgICAjIGRlbGV0ZSB0ZXN0IEZBUXMgYWZ0ZXIgY2hlY2tpbmcKICAgICAgICBmb3IgbXkgJEZBUSAoQEZBUVNlYXJjaCkgewoKICAgICAgICAgICAgaWYgKCAkRkFRLT57VHlwZX0gZXEgJ0ZBUUNoYW5nZVNlYXJjaCcgKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiB0aGVyZSBpcyB0ZXN0IEZBUUNoYW5nZVNlYXJjaCogb24gc2NyZWVuCiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEZBUS0+e0ZBUVRpdGxlfSApID4gLTEsCiAgICAgICAgICAgICAgICAgICAgIiRGQVEtPntGQVFUaXRsZX0gLSBmb3VuZCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgbm8gdGVzdCBGQVFTZWFyY2gqIG9uIHNjcmVlbgogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVEtPntGQVFUaXRsZX0gKSA9PSAtMSwKICAgICAgICAgICAgICAgICAgICAiJEZBUS0+e0ZBUVRpdGxlfSAtIG5vdCBmb3VuZCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRLT57RkFRSUR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRkFRIGlzIGRlbGV0ZWQgLSAkRkFRLT57RkFRVGl0bGV9IiwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrICdDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMnIGJ1dHRvbiBhZ2FpbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZBUVNlYXJjaCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcjU2VhcmNoUHJvZmlsZScpLmxlbmd0aCIgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJUaXRsZSIsICAgICAgICAgICAgICduYW1lJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiVGl0bGUiLCAgICAgICAgICAgICAnbmFtZScgKS0+c2VuZF9rZXlzKCdGQVFDaGFuZ2VTZWFyY2gqJyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU2VhcmNoRm9ybVN1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcjT3ZlcnZpZXdCb2R5JykubGVuZ3RoIiApOwoKICAgICAgICAjIGNoZWNrIG5vIGRhdGEgbWVzc2FnZQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0VtcHR5TWVzc2FnZVNtYWxsIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICdObyBGQVEgZGF0YSBmb3VuZC4nICkgPiAtMSwKICAgICAgICAgICAgIk5vIEZBUSBkYXRhIGZvdW5kLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjYXRlZ29yeQogICAgICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlEZWxldGUoCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJGQVEgY2F0ZWdvcnkgaXMgZGVsZXRlZCAtICRDYXRlZ29yeUlEIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgIyB0ZXN0IHBhcmFtcwogICAgICAgIG15ICRGQVFUaXRsZSAgICA9ICdGQVEgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJEZBUVN5bXB0b20gID0gJ1NlbGVuaXVtIFN5bXB0b20nOwogICAgICAgIG15ICRGQVFQcm9ibGVtICA9ICdTZWxlbml1bSBQcm9ibGVtJzsKICAgICAgICBteSAkRkFRU29sdXRpb24gPSAnU2VsZW5pdW0gU29sdXRpb24nOwogICAgICAgIG15ICRGQVFDb21tZW50ICA9ICdTZWxlbml1bSBDb21tZW50JzsKCiAgICAgICAgbXkgJEZBUUlEID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkRkFRVGl0bGUsCiAgICAgICAgICAgIENhdGVnb3J5SUQgID0+IDEsCiAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IDEsCiAgICAgICAgICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICAgICAgICAgIEtleXdvcmRzICAgID0+ICdzb21lIGtleXdvcmRzJywKICAgICAgICAgICAgRmllbGQxICAgICAgPT4gJEZBUVN5bXB0b20sCiAgICAgICAgICAgIEZpZWxkMiAgICAgID0+ICRGQVFQcm9ibGVtLAogICAgICAgICAgICBGaWVsZDMgICAgICA9PiAkRkFRU29sdXRpb24sCiAgICAgICAgICAgIEZpZWxkNiAgICAgID0+ICRGQVFDb21tZW50LAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2ZhcScsICdmYXFfYWRtaW4nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRGQVFab29tIHNjcmVlbiBvZiBjcmVhdGVkIHRlc3QgRkFRCiAgICAgICAgJFNlbGVuaXVtLT5nZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50RkFRWm9vbTtJdGVtSUQ9JEZBUUlEIik7CgogICAgICAgICMgY2hlY2sgcGFnZQogICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICBxdyhNZW51MDAwLUJhY2sgTWVudTAxMC1FZGl0IE1lbnUwMjAtSGlzdG9yeSBNZW51MDMwLVByaW50IE1lbnUwNDAtTGluayBNZW51MDUwLURlbGV0ZSBGQVFCb2R5IEZBUVZvdGluZykKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkSUQiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJFNvdXJjZSAoICdGQVEgSW5mb3JtYXRpb24nLCAnTGlua2VkIE9iamVjdHMnICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRTb3VyY2UgKSA+IC0xLAogICAgICAgICAgICAgICAgIkZBUSBkYXRhIGlzIGZvdW5kIG9uIHNjcmVlbi0gJFNvdXJjZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHZlcmlmeSB0ZXN0IEZBUSBpcyBjcmVhdGVkCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRkFRVGl0bGUgKSA+IC0xLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgIG15IEBUZXN0cyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSWZyYW1lICA9PiAnSWZyYW1lRkFRRmllbGQxJywKICAgICAgICAgICAgICAgIEZBUURhdGEgPT4gJEZBUVN5bXB0b20sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIElmcmFtZSAgPT4gJ0lmcmFtZUZBUUZpZWxkMicsCiAgICAgICAgICAgICAgICBGQVFEYXRhID0+ICRGQVFQcm9ibGVtLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJZnJhbWUgID0+ICdJZnJhbWVGQVFGaWVsZDMnLAogICAgICAgICAgICAgICAgRkFRRGF0YSA9PiAkRkFRU29sdXRpb24sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIElmcmFtZSAgPT4gJ0lmcmFtZUZBUUZpZWxkNicsCiAgICAgICAgICAgICAgICBGQVFEYXRhID0+ICRGQVFDb21tZW50LAogICAgICAgICAgICB9LAoKICAgICAgICApOwoKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CgogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgICAgICAgICAjIHN3aXRjaCB0byBGQVEgc3ltcHRvbSBpZnJhbWUgYW5kIHZlcmlmeSBpdHMgdmFsdWVzCiAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX2ZyYW1lKCAkVGVzdC0+e0lmcmFtZX0gKTsKCiAgICAgICAgICAgICMgd2FpdCB0byBzd2l0Y2ggb24gaWZyYW1lCiAgICAgICAgICAgIHNsZWVwIDI7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGVzdC0+e0ZBUURhdGF9ICkgPiAtMSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e0ZBUURhdGF9IC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKICAgICAgICB9CgogICAgICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgICAgICAgICBJdGVtSUQgPT4gJEZBUUlELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkZBUSBpcyBkZWxldGVkIC0gJEZBUUlEIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CgogICAgfQoKKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgIG15IEBGQVFJRHM7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRcwogICAgICAgIGZvciAoIDEgLi4gNSApIHsKICAgICAgICAgICAgbXkgJEZBUVRpdGxlID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJEZBUUlEICAgID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBcHByb3ZlZCAgICA9PiAxLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRGQVFJRCwKICAgICAgICAgICAgICAgICJGQVEgaXMgY3JlYXRlZCAtICRGQVFJRCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlRkFRID0gKAogICAgICAgICAgICAgICAgRkFRSUQgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgRkFRVGl0bGUgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBARkFRSURzLCBcJUZBUTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2dpbiB0ZXN0IGN1c3RvbWVyCiAgICAgICAgbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEN1c3RvbWVyRkFRRXhwbG9yZXIgc2NyZWVuIG9mIGNyZWF0ZWQgdGVzdCBGQVEKICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31jdXN0b21lci5wbD9BY3Rpb249Q3VzdG9tZXJGQVFFeHBsb3JlciIpOwoKICAgICAgICAjIGNoZWNrIEN1c3RvbWVyRkFRRXhwbG9yZXIgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSIsICAgICAgICAgICAgICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0aGVhZCB0ciB0aCIsICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0Ym9keSB0ciB0ZCIsICdjc3MnICk7CgogICAgICAgICMgdGVzdCBkYXRhIGZvciBleHBsb3JlciBzY3JlZW4KICAgICAgICBteSBAVGVzdHMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNjcmVlbkRhdGEgPT4gJ0ZBUSBFeHBsb3JlcicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNjcmVlbkRhdGEgPT4gJ0xhdGVzdCBjcmVhdGVkIEZBUSBhcnRpY2xlcycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNjcmVlbkRhdGEgPT4gJ0xhdGVzdCB1cGRhdGVkIEZBUSBhcnRpY2xlcycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRlc3QtPntTY3JlZW5EYXRhfSApID4gLTEsCiAgICAgICAgICAgICAgICAiJFRlc3QtPntTY3JlZW5EYXRhfSAtIGZvdW5kIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2xpY2sgb24gJ01pc2MnLCBnbyBvbiBzdWJjYXRlZ29yeSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJ01pc2MnLCAnbGlua190ZXh0JyApLT5jbGljaygpOwoKICAgICAgICAjIG9yZGVyIEZBUSBpdGVtIHBlciBGQVFJRCBieSBEb3duCiAgICAgICAgJFNlbGVuaXVtLT5nZXQoIiR7U2NyaXB0QWxpYXN9Y3VzdG9tZXIucGw/QWN0aW9uPUN1c3RvbWVyRkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD0xO1NvcnRCeT1GQVFJRDtPcmRlckJ5PURvd24iKTsKCiAgICAgICAgIyBjaGVjayBhbmQgZGVsZXRlIHRlc3QgY3JlYXRlZCBGQVFzCiAgICAgICAgZm9yIG15ICRGQVEgKEBGQVFJRHMpIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgdGVzdCBGQVEgb24gc2NyZWVuCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVEtPntGQVFUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgIiRGQVEtPntGQVFUaXRsZX0gLSBmb3VuZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRLT57RkFRSUR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRkFRIGlzIGRlbGV0ZWQgLSAkRkFRLT57RkFRVGl0bGV9IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gIkZBUSIgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgbXkgJEZBUVRpdGxlICAgID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkRkFRU3ltcHRvbSAgPSAnU2VsZW5pdW0gU3ltcHRvbSc7CiAgICAgICAgbXkgJEZBUVByb2JsZW0gID0gJ1NlbGVuaXVtIFByb2JsZW0nOwogICAgICAgIG15ICRGQVFTb2x1dGlvbiA9ICdTZWxlbml1bSBTb2x1dGlvbic7CgogICAgICAgIG15ICRGQVFJRCA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgICAgICAgICBTdGF0ZUlEICAgICA9PiAxLAogICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgICAgICBLZXl3b3JkcyAgICA9PiAnc29tZSBrZXl3b3JkcycsCiAgICAgICAgICAgIEZpZWxkMSAgICAgID0+ICRGQVFTeW1wdG9tLAogICAgICAgICAgICBGaWVsZDIgICAgICA9PiAkRkFRUHJvYmxlbSwKICAgICAgICAgICAgRmllbGQzICAgICAgPT4gJEZBUVNvbHV0aW9uLAogICAgICAgICAgICBBcHByb3ZlZCAgICA9PiAxLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkRkFRSUQsCiAgICAgICAgICAgICJGQVEgaXMgY3JlYXRlZCAtICRGQVFJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZ2luIHRlc3QgY3VzdG9tZXIKICAgICAgICBteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQ3VzdG9tZXJGQVFQcmludCBzY3JlZW4gb2YgY3JlYXRlZCB0ZXN0IEZBUQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWN1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lckZBUVByaW50O0l0ZW1JRD0kRkFRSUQiKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHByaW50IHNjcmVlbiBpcyBsb2FkZWQKICAgICAgICBBQ1RJVkVTTEVFUDoKICAgICAgICBmb3IgbXkgJFNlY29uZCAoIDEgLi4gMjAgKSB7CiAgICAgICAgICAgIGlmICggaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVFTb2x1dGlvbiApID4gLTEsICkgewogICAgICAgICAgICAgICAgbGFzdCBBQ1RJVkVTTEVFUDsKICAgICAgICAgICAgfQogICAgICAgICAgICBzbGVlcCAxOwogICAgICAgIH0KCiAgICAgICAgIyB0ZXN0IHBhcmFtcwogICAgICAgIG15IEBUZXN0cyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRkFRRGF0YSA9PiAkRkFRU3ltcHRvbSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRkFRRGF0YSA9PiAkRkFRUHJvYmxlbSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRkFRRGF0YSA9PiAkRkFRU29sdXRpb24sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBmb3IgdGVzdCBjcmVhdGVkIEZBUSBwcmludCB2YWx1ZXMKICAgICAgICBmb3IgbXkgJFRlc3QgKEBUZXN0cykgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGVzdC0+e0ZBUURhdGF9ICkgPiAtMSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e0ZBUURhdGF9IC0gZm91bmQgb24gcHJpbnQgc2NyZWVuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBGQVEKICAgICAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgICAgICAgICAgSXRlbUlEID0+ICRGQVFJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJGQVEgaXMgZGVsZXRlZCAtICRGQVFJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAiRkFRIiApOwoKICAgIH0KCik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRIGNhdGVnb3J5CiAgICAgICAgbXkgJENhdGVnb3J5SUQgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ0NhdGVnb3J5ICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgICAgICBDb21tZW50ICA9PiAnU2VsZW5pdW0gQ2F0ZWdvcnknLAogICAgICAgICAgICBQYXJlbnRJRCA9PiAwLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDYXRlZ29yeUlELAogICAgICAgICAgICAiRkFRIGNhdGVnb3J5IGlzIGNyZWF0ZWQgLSAkQ2F0ZWdvcnlJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgdGVzdCBGQVEgY2F0ZWdvcnkgcGVybWlzc2lvbgogICAgICAgIG15ICRHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgICAgICBHcm91cCA9PiAnZmFxJywKICAgICAgICApOwoKICAgICAgICAkRkFRT2JqZWN0LT5TZXRDYXRlZ29yeUdyb3VwKAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgICAgICBHcm91cElEcyAgID0+IFskR3JvdXBJRF0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IEZBUXMKICAgICAgICBteSBARkFRU2VhcmNoOwogICAgICAgIGZvciBteSAkVGl0bGUgKHF3KCBGQVFTZWFyY2ggRkFRQ2hhbmdlU2VhcmNoICkpIHsKICAgICAgICAgICAgZm9yICggMSAuLiA1ICkgewoKICAgICAgICAgICAgICAgICMgYWRkIHRlc3QgRkFRCiAgICAgICAgICAgICAgICBteSAkRkFRVGl0bGUgPSAkVGl0bGUgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICAgICAgICAgbXkgJEZBUUlEICAgID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeUlEICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIEFwcHJvdmVkICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICAiRkFRIGlzIGNyZWF0ZWQgLSAkRkFRSUQiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlRkFRID0gKAogICAgICAgICAgICAgICAgICAgIEZBUUlEICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgICAgICAgICBGQVFUaXRsZSA9PiAkRkFRVGl0bGUsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJFRpdGxlLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBGQVFTZWFyY2gsIFwlRkFROwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZ2luIHRlc3QgY3VzdG9tZXIKICAgICAgICBteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQ3VzdG9tZXJGQVFTZWFyY2ggZm9ybQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWN1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lckZBUVNlYXJjaCIpOwoKICAgICAgICAjIGNoZWNrIHRpY2tldCBzZWFyY2ggcGFnZQogICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICBxdyhQcm9maWxlIE51bWJlciBGdWxsVGV4dCBUaXRsZSBLZXl3b3JkIExhbmd1YWdlSURzIENhdGVnb3J5SURzIE5vVm90ZVNldCBWb3RlUG9pbnQKICAgICAgICAgICAgVm90ZVNlYXJjaFR5cGUgTm9SYXRlU2V0IFJhdGVQb2ludCBSYXRlU2VhcmNoVHlwZSBSYXRlU2VhcmNoIE5vVGltZVNldCBEYXRlIERhdGVSYW5nZQogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVBvaW50U3RhcnQgSXRlbUNyZWF0ZVRpbWVQb2ludCBJdGVtQ3JlYXRlVGltZVBvaW50Rm9ybWF0IEl0ZW1DcmVhdGVUaW1lU3RhcnRNb250aAogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVN0YXJ0RGF5IEl0ZW1DcmVhdGVUaW1lU3RhcnRZZWFyIEl0ZW1DcmVhdGVUaW1lU3RvcE1vbnRoIEl0ZW1DcmVhdGVUaW1lU3RvcERheQogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVN0b3BZZWFyIFNhdmVQcm9maWxlIFByb2ZpbCBTdWJtaXQgUmVzdWx0Rm9ybSkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkSUQiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICAjIHNlYXJjaCBGQVEgYnkgdGl0bGUgYW5kIHJ1biBpdAogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1RpdGxlIiwgICdjc3MnICktPnNlbmRfa2V5cygnRkFRKicpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcuT3ZlcnZpZXcnKS5sZW5ndGgiICk7CgogICAgICAgICMgY2hlY2sgQ3VzdG9tZXJGQVFTZWFyY2ggcmVzdWx0IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIHRlc3QgRkFRcyBzZWFyY2hlZCBieSAnRkFRKicKICAgICAgICAjIGFsbCBGQVFzIHdpbGwgYmUgaW4gYSBzZWFyY2ggcmVzdWx0CiAgICAgICAgZm9yIG15ICRGQVEgKEBGQVFTZWFyY2gpIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgdGVzdCBGQVEgb24gc2NyZWVuCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVEtPntGQVFUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgIiRGQVEtPntGQVFUaXRsZX0gLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrICdDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMnIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1DdXN0b21lckZBUVNlYXJjaDtTdWJhY3Rpb249TG9hZFByb2ZpbGUnICldIiktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1RpdGxlIiwgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNUaXRsZSIsICdjc3MnICktPnNlbmRfa2V5cygnRkFRQ2hhbmdlU2VhcmNoKicpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0NhdGVnb3J5SURzJykudmFsKCckQ2F0ZWdvcnlJRCcpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0IiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIGZvcm0gaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJy5PdmVydmlldycpLmxlbmd0aCIgKTsKCiAgICAgICAgIyBjaGVjayB0ZXN0IEZBUXMgc2VhcmNoZWQgYnkgJ0ZBUUNoYW5nZVNlYXJjaConCiAgICAgICAgIyBkZWxldGUgdGVzdCBGQVFzIGFmdGVyIGNoZWNraW5nCiAgICAgICAgZm9yIG15ICRGQVEgKEBGQVFTZWFyY2gpIHsKCiAgICAgICAgICAgIGlmICggJEZBUS0+e1R5cGV9IGVxICdGQVFDaGFuZ2VTZWFyY2gnICkgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgdGVzdCBGQVFDaGFuZ2VTZWFyY2gqIG9uIHNjcmVlbgogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVEtPntGQVFUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgICAgICIkRkFRLT57RkFRVGl0bGV9IC0gZm91bmQiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIGlzIG5vIHRlc3QgRkFRU2VhcmNoKiBvbiBzY3JlZW4KICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRkFRLT57RkFRVGl0bGV9ICkgPT0gLTEsCiAgICAgICAgICAgICAgICAgICAgIiRGQVEtPntGQVFUaXRsZX0gLSBub3QgZm91bmQiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEZBUS0+e0ZBUUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkZBUSBpcyBkZWxldGVkIC0gJEZBUS0+e0ZBUVRpdGxlfSIsCiAgICAgICAgICAgICk7CgogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayAnQ2hhbmdlIHNlYXJjaCBvcHRpb25zJyBidXR0b24gYWdhaW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249Q3VzdG9tZXJGQVFTZWFyY2g7U3ViYWN0aW9uPUxvYWRQcm9maWxlJyApXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNUaXRsZSIsICAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1RpdGxlIiwgICdjc3MnICktPnNlbmRfa2V5cyggJEhlbHBlci0+R2V0UmFuZG9tSUQoKSApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcuT3ZlcnZpZXcnKS5sZW5ndGgiICk7CgogICAgICAgICMgY2hlY2sgbm8gZGF0YSBtZXNzYWdlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRW1wdHlNZXNzYWdlIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICdObyBGQVEgZGF0YSBmb3VuZC4nICkgPiAtMSwKICAgICAgICAgICAgIk5vIEZBUSBkYXRhIGZvdW5kLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIEZBUSBjYXRlZ29yeQogICAgICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlEZWxldGUoCiAgICAgICAgICAgIENhdGVnb3J5SUQgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkZBUSBjYXRlZ29yeSBpcyBkZWxldGVkIC0gJENhdGVnb3J5SUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gIkZBUSIgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgIyB0ZXN0IHBhcmFtcwogICAgICAgIG15ICRGQVFUaXRsZSAgICA9ICdGQVEgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJEZBUVN5bXB0b20gID0gJ1NlbGVuaXVtIFN5bXB0b20nOwogICAgICAgIG15ICRGQVFQcm9ibGVtICA9ICdTZWxlbml1bSBQcm9ibGVtJzsKICAgICAgICBteSAkRkFRU29sdXRpb24gPSAnU2VsZW5pdW0gU29sdXRpb24nOwoKICAgICAgICBteSAkRkFRSUQgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMSwKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgS2V5d29yZHMgICAgPT4gJ1NlbGVuaXVtS2V5d29yZHMnLAogICAgICAgICAgICBGaWVsZDEgICAgICA9PiAkRkFRU3ltcHRvbSwKICAgICAgICAgICAgRmllbGQyICAgICAgPT4gJEZBUVByb2JsZW0sCiAgICAgICAgICAgIEZpZWxkMyAgICAgID0+ICRGQVFTb2x1dGlvbiwKICAgICAgICAgICAgQXBwcm92ZWQgICAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEZBUUlELAogICAgICAgICAgICAiRkFRIGlzIGNyZWF0ZWQgLSAkRkFRSUQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2dpbiB0ZXN0IGN1c3RvbWVyCiAgICAgICAgbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEN1c3RvbWVyRkFRWm9vbSBzY3JlZW4gb2YgY3JlYXRlZCB0ZXN0IEZBUQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWN1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lckZBUVpvb207SXRlbUlEPSRGQVFJRCIpOwoKICAgICAgICAjIGNoZWNrIHBhZ2UKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICdGQVEgSW5mb3JtYXRpb24nICkgPiAtMSwKICAgICAgICAgICAgIkZBUSBkYXRhIGlzIGZvdW5kIG9uIHNjcmVlbiAtIEZBUSBJbmZvcm1hdGlvbiIsCiAgICAgICAgKTsKCiAgICAgICAgIyB2ZXJpZnkgdGVzdCBGQVEgaXMgY3JlYXRlZAogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEZBUVRpdGxlICkgPiAtMSwKICAgICAgICAgICAgIiRGQVFUaXRsZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICBteSBAVGVzdHMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIElmcmFtZSAgPT4gJ0lmcmFtZUZBUUZpZWxkMScsCiAgICAgICAgICAgICAgICBGQVFEYXRhID0+ICRGQVFTeW1wdG9tLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJZnJhbWUgID0+ICdJZnJhbWVGQVFGaWVsZDInLAogICAgICAgICAgICAgICAgRkFRRGF0YSA9PiAkRkFRUHJvYmxlbSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSWZyYW1lICA9PiAnSWZyYW1lRkFRRmllbGQzJywKICAgICAgICAgICAgICAgIEZBUURhdGEgPT4gJEZBUVNvbHV0aW9uLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKCiAgICAgICAgIyBjaGVjayB0ZXN0IGNyZWF0ZWQgRkFRIHZhbHVlcwogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgICAgICAgICAjIHN3aXRjaCB0byBGQVEgc3ltcHRvbSBpZnJhbWUgYW5kIHZlcmlmeSBpdHMgdmFsdWVzCiAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX2ZyYW1lKCAkVGVzdC0+e0lmcmFtZX0gKTsKCiAgICAgICAgICAgICMgd2FpdCB0byBzd2l0Y2ggb24gaWZyYW1lCiAgICAgICAgICAgIHNsZWVwIDI7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGVzdC0+e0ZBUURhdGF9ICkgPiAtMSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e0ZBUURhdGF9IC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ1NlbGVuaXVtS2V5d29yZHMnICkgPiAtMSwKICAgICAgICAgICAgIkZBUSAnU2VsZW5pdW1LZXl3b3JkcycgdmFsdWUgLSBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICdleHRlcm5hbCAoY3VzdG9tZXIpJyApID4gLTEsCiAgICAgICAgICAgICJGQVEgc3RhdGUgdmFsdWUgLSBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICcwIG91dCBvZiA1JyApID4gLTEsCiAgICAgICAgICAgICJGQVEgZGVmYXVsdCB2b3RlIHZhbHVlIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgdm90ZSA1IHN0YXJzIGZvciBGQVEKICAgICAgICBteSAkVm90ZUVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNSYXRlQnV0dG9uMTAwIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfY2hpbGRfZWxlbWVudCggJFZvdGVFbGVtZW50LCAiLlJhdGVCdXR0b24iLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQGlkPSdSYXRlU3VibWl0QnV0dG9uJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5jbGljaygpOwoKICAgICAgICAjIGNoZWNrIHZvdGUgbWVzc2FnZQogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ1RoYW5rcyBmb3IgeW91ciB2b3RlIScgKSA+IC0xLAogICAgICAgICAgICAiRkFRIHZvdGUgbWVzc2FnZSAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJzUgb3V0IG9mIDUnICkgPiAtMSwKICAgICAgICAgICAgIkZBUSB2b3RlIHZhbHVlIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBGQVEKICAgICAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgICAgICAgICAgSXRlbUlEID0+ICRGQVFJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJGQVEgaXMgZGVsZXRlZCAtICRGQVFJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAiRkFRIiApOwogICAgfQoKKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRcwogICAgICAgIG15IEBGQVFJRHM7CiAgICAgICAgZm9yICggMSAuLiA1ICkgewogICAgICAgICAgICBteSAkRkFRVGl0bGUgPSAnRkFRICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICAgICBteSAkRkFRSUQgICAgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkRkFRVGl0bGUsCiAgICAgICAgICAgICAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMywKICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICAgICAgICAgICAgICBBcHByb3ZlZCAgICA9PiAxLAogICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJEZBUUlELAogICAgICAgICAgICAgICAgIkZBUSBpcyBjcmVhdGVkIC0gJEZBUUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICVGQVEgPSAoCiAgICAgICAgICAgICAgICBGQVFJRCAgICA9PiAkRkFRSUQsCiAgICAgICAgICAgICAgICBGQVFUaXRsZSA9PiAkRkFRVGl0bGUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBGQVFJRHMsIFwlRkFROwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIFB1YmxpY0ZBUUV4cGxvcmVyIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfXB1YmxpYy5wbD9BY3Rpb249UHVibGljRkFRRXhwbG9yZXIiKTsKCiAgICAgICAgIyBjaGVjayBQdWJsaWNGQVFFeHBsb3JlciBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRoZWFkIHRyIHRoIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRib2R5IHRyIHRkIiwgJ2NzcycgKTsKCiAgICAgICAgIyB0ZXN0IGRhdGEgZm9yIGV4cGxvcmVyIHNjcmVlbgogICAgICAgIG15IEBUZXN0cyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU2NyZWVuRGF0YSA9PiAnRkFRIEV4cGxvcmVyJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU2NyZWVuRGF0YSA9PiAnTGF0ZXN0IGNyZWF0ZWQgRkFRIGFydGljbGVzJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU2NyZWVuRGF0YSA9PiAnTGF0ZXN0IHVwZGF0ZWQgRkFRIGFydGljbGVzJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJFRlc3QgKEBUZXN0cykgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGVzdC0+e1NjcmVlbkRhdGF9ICkgPiAtMSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e1NjcmVlbkRhdGF9IC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjbGljayBvbiAnTWlzYycsIGdvIG9uIHN1YmNhdGVnb3J5IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnTWlzYycsICdsaW5rX3RleHQnICktPmNsaWNrKCk7CgogICAgICAgICMgb3JkZXIgRkFRIGl0ZW0gcGVyIEZBUUlEIGJ5IERvd24KICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31wdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9MTtTb3J0Qnk9RkFRSUQ7T3JkZXJCeT1Eb3duIik7CgogICAgICAgICMgY2hlY2sgYW5kIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRcwogICAgICAgIGZvciBteSAkRkFRIChARkFRSURzKSB7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIGlzIHRlc3QgRkFRIG9uIHNjcmVlbgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRkFRLT57RkFRVGl0bGV9ICkgPiAtMSwKICAgICAgICAgICAgICAgICIkRkFRLT57RkFRVGl0bGV9IC0gZm91bmQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEZBUS0+e0ZBUUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkZBUSBpcyBkZWxldGVkIC0gJEZBUS0+e0ZBUVRpdGxlfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgbXkgJEZBUVRpdGxlICAgID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkRkFRU3ltcHRvbSAgPSAnU2VsZW5pdW0gU3ltcHRvbSc7CiAgICAgICAgbXkgJEZBUVByb2JsZW0gID0gJ1NlbGVuaXVtIFByb2JsZW0nOwogICAgICAgIG15ICRGQVFTb2x1dGlvbiA9ICdTZWxlbml1bSBTb2x1dGlvbic7CgogICAgICAgIG15ICRGQVFJRCA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgICAgICAgICBTdGF0ZUlEICAgICA9PiAzLAogICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgICAgICBGaWVsZDEgICAgICA9PiAkRkFRU3ltcHRvbSwKICAgICAgICAgICAgRmllbGQyICAgICAgPT4gJEZBUVByb2JsZW0sCiAgICAgICAgICAgIEZpZWxkMyAgICAgID0+ICRGQVFTb2x1dGlvbiwKICAgICAgICAgICAgQXBwcm92ZWQgICAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEZBUUlELAogICAgICAgICAgICAiRkFRIGlzIGNyZWF0ZWQgLSAkRkFRSUQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBQdWJsaWNGQVFQcmludCBzY3JlZW4gb2YgY3JlYXRlZCB0ZXN0IEZBUQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfXB1YmxpYy5wbD9BY3Rpb249UHVibGljRkFRUHJpbnQ7SXRlbUlEPSRGQVFJRCIpOwoKICAgICAgICAjIHdhaXQgdW50aWwgcHJpbnQgc2NyZWVuIGlzIGxvYWRlZAogICAgICAgIEFDVElWRVNMRUVQOgogICAgICAgIGZvciBteSAkU2Vjb25kICggMSAuLiAyMCApIHsKICAgICAgICAgICAgaWYgKCBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEZBUVNvbHV0aW9uICkgPiAtMSwgKSB7CiAgICAgICAgICAgICAgICBsYXN0IEFDVElWRVNMRUVQOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNsZWVwIDE7CiAgICAgICAgfQoKICAgICAgICAjIHRlc3QgcGFyYW1zCiAgICAgICAgbXkgQFRlc3RzID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGQVFEYXRhID0+ICRGQVFTeW1wdG9tLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGQVFEYXRhID0+ICRGQVFQcm9ibGVtLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGQVFEYXRhID0+ICRGQVFTb2x1dGlvbiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciB0ZXN0IGNyZWF0ZWQgRkFRIHByaW50IHZhbHVlcwogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUZXN0LT57RkFRRGF0YX0gKSA+IC0xLAogICAgICAgICAgICAgICAgIiRUZXN0LT57RkFRRGF0YX0gLSBmb3VuZCBvbiBwcmludCBzY3JlZW4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIEZBUQogICAgICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgICAgICAgICBJdGVtSUQgPT4gJEZBUUlELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkZBUSBpcyBkZWxldGVkIC0gJEZBUUlEIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CiAgICB9CgopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgbXkgJEZBUVRpdGxlID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkRkFRSUQgICAgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMywKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgQXBwcm92ZWQgICAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEZBUUlELAogICAgICAgICAgICAiRkFRIGlzIGNyZWF0ZWQgLSAkRkFRSUQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBQdWJsaWNGQVFSU1MgY3JlYXRlZCBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31wdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUVJTUztUeXBlPUNyZWF0ZWQiKTsKCiAgICAgICAgIyB2ZXJpZnkgRkFRUlNTIGNyZWF0ZWQgc2NyZWVuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnRkFRIEFydGljbGVzIChuZXcgY3JlYXRlZCknICkgPiAtMSwKICAgICAgICAgICAgIkZBUVJTUyBjcmVhdGVkIHRpdGxlIGZvdW5kIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEZBUVRpdGxlICkgPiAtMSwKICAgICAgICAgICAgIiRGQVFUaXRsZSAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkFjdGlvbj1QdWJsaWNGQVFab29tJmFtcDtJdGVtSUQ9JEZBUUlEIiApID4gLTEsCiAgICAgICAgICAgICJGQVEgbGluayAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIFB1YmxpY0ZBUVJTUyBjaGFuZ2VkIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfXB1YmxpYy5wbD9BY3Rpb249UHVibGljRkFRUlNTO1R5cGU9Q2hhbmdlZCIpOwoKICAgICAgICAjIHZlcmlmeSBGQVFSU1MgY2hhbmdlZCBzY3JlZW4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICdGQVEgQXJ0aWNsZXMgKHJlY2VudGx5IGNoYW5nZWQpJyApID4gLTEsCiAgICAgICAgICAgICJGQVFSU1MgY2hhbmdlZCB0aXRsZSBmb3VuZCAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEZBUVRpdGxlICkgPiAtMSwKICAgICAgICAgICAgIiRGQVFUaXRsZSAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkFjdGlvbj1QdWJsaWNGQVFab29tJmFtcDtJdGVtSUQ9JEZBUUlEIiApID4gLTEsCiAgICAgICAgICAgICJGQVEgbGluayAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiRkFRIGlzIGRlbGV0ZWQgLSAkRkFRSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gIkZBUSIgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRcwogICAgICAgIG15IEBGQVFTZWFyY2g7CiAgICAgICAgZm9yIG15ICRUaXRsZSAocXcoIEZBUVNlYXJjaCBGQVFDaGFuZ2VTZWFyY2ggKSkgewoKICAgICAgICAgICAgIyBhZGQgdGVzdCBGQVEKICAgICAgICAgICAgbXkgJEZBUVRpdGxlID0gJFRpdGxlIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJEZBUUlEICAgID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IDMsCiAgICAgICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgICAgICAgICAgQXBwcm92ZWQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRGQVFJRCwKICAgICAgICAgICAgICAgICJGQVEgaXMgY3JlYXRlZCAtICRGQVFJRCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlRkFRID0gKAogICAgICAgICAgICAgICAgRkFRSUQgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgRkFRVGl0bGUgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJFRpdGxlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBARkFRU2VhcmNoLCBcJUZBUTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBQdWJsaWNGQVFTZWFyY2ggZm9ybQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfXB1YmxpYy5wbD9BY3Rpb249UHVibGljRkFRU2VhcmNoIik7CgogICAgICAgICMgY2hlY2sgdGlja2V0IHNlYXJjaCBwYWdlCiAgICAgICAgZm9yIG15ICRJRCAoCiAgICAgICAgICAgIHF3KE51bWJlciBGdWxsVGV4dCBUaXRsZSBLZXl3b3JkIExhbmd1YWdlSURzIENhdGVnb3J5SURzIE5vVm90ZVNldCBWb3RlUG9pbnQKICAgICAgICAgICAgVm90ZVNlYXJjaFR5cGUgTm9SYXRlU2V0IFJhdGVQb2ludCBSYXRlU2VhcmNoVHlwZSBSYXRlU2VhcmNoIE5vVGltZVNldCBEYXRlIERhdGVSYW5nZQogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVBvaW50U3RhcnQgSXRlbUNyZWF0ZVRpbWVQb2ludCBJdGVtQ3JlYXRlVGltZVBvaW50Rm9ybWF0IEl0ZW1DcmVhdGVUaW1lU3RhcnRNb250aAogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVN0YXJ0RGF5IEl0ZW1DcmVhdGVUaW1lU3RhcnRZZWFyIEl0ZW1DcmVhdGVUaW1lU3RvcE1vbnRoIEl0ZW1DcmVhdGVUaW1lU3RvcERheQogICAgICAgICAgICBJdGVtQ3JlYXRlVGltZVN0b3BZZWFyIFN1Ym1pdCBSZXN1bHRGb3JtKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiIyRJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgc2VhcmNoIEZBUSBieSB0aXRsZSBhbmQgcnVuIGl0CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjVGl0bGUiLCAgJ2NzcycgKS0+c2VuZF9rZXlzKCdGQVEqJyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0IiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIGZvcm0gaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJy5PdmVydmlldycpLmxlbmd0aCIgKTsKCiAgICAgICAgIyBjaGVjayBQdWJsaWNGQVFTZWFyY2ggcmVzdWx0IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIHRlc3QgRkFRcyBzZWFyY2hlZCBieSAnRkFRKicKICAgICAgICAjIGFsbCBGQVFzIHdpbGwgYmUgaW4gYSBzZWFyY2ggcmVzdWx0CiAgICAgICAgZm9yIG15ICRGQVEgKEBGQVFTZWFyY2gpIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgdGVzdCBGQVEgb24gc2NyZWVuCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVEtPntGQVFUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgIiRGQVEtPntGQVFUaXRsZX0gLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrICdDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMnIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ3B1YmxpYy5wbD9BY3Rpb249UHVibGljRkFRU2VhcmNoJyApXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1RpdGxlIiwgICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjVGl0bGUiLCAgJ2NzcycgKS0+c2VuZF9rZXlzKCdGQVFDaGFuZ2VTZWFyY2gqJyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0IiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIGZvcm0gaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJy5PdmVydmlldycpLmxlbmd0aCIgKTsKCiAgICAgICAgIyBjaGVjayB0ZXN0IEZBUXMgc2VhcmNoZWQgYnkgJ0ZBUUNoYW5nZVNlYXJjaConCiAgICAgICAgZm9yIG15ICRGQVEgKEBGQVFTZWFyY2gpIHsKCiAgICAgICAgICAgIGlmICggJEZBUS0+e1R5cGV9IGVxICdGQVFDaGFuZ2VTZWFyY2gnICkgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgdGVzdCBGQVFDaGFuZ2VTZWFyY2gqIG9uIHNjcmVlbgogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVEtPntGQVFUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgICAgICIkRkFRLT57RkFRVGl0bGV9IC0gZm91bmQiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIGlzIG5vIHRlc3QgRkFRU2VhcmNoKiBvbiBzY3JlZW4KICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRkFRLT57RkFRVGl0bGV9ICkgPT0gLTEsCiAgICAgICAgICAgICAgICAgICAgIiRGQVEtPntGQVFUaXRsZX0gLSBub3QgZm91bmQiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayAnQ2hhbmdlIHNlYXJjaCBvcHRpb25zJyBidXR0b24gYWdhaW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdwdWJsaWMucGw/QWN0aW9uPVB1YmxpY0ZBUVNlYXJjaCcgKV0iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNUaXRsZSIsICAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1RpdGxlIiwgICdjc3MnICktPnNlbmRfa2V5cyggJEhlbHBlci0+R2V0UmFuZG9tSUQoKSApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcuT3ZlcnZpZXcnKS5sZW5ndGgiICk7CgogICAgICAgICMgY2hlY2sgbm8gZGF0YSBtZXNzYWdlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRW1wdHlNZXNzYWdlIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICdObyBGQVEgZGF0YSBmb3VuZC4nICkgPiAtMSwKICAgICAgICAgICAgIk5vIEZBUSBkYXRhIGZvdW5kLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIEZBUXMKICAgICAgICBmb3IgbXkgJERlbGV0ZSAoQEZBUVNlYXJjaCkgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkRGVsZXRlLT57RkFRSUR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRkFRIGlzIGRlbGV0ZWQgLSAkRGVsZXRlLT57RkFRVGl0bGV9IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gIkZBUSIgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgIyB0ZXN0IHBhcmFtcwogICAgICAgIG15ICRGQVFUaXRsZSAgICA9ICdGQVEgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJEZBUVN5bXB0b20gID0gJ1NlbGVuaXVtIFN5bXB0b20nOwogICAgICAgIG15ICRGQVFQcm9ibGVtICA9ICdTZWxlbml1bSBQcm9ibGVtJzsKICAgICAgICBteSAkRkFRU29sdXRpb24gPSAnU2VsZW5pdW0gU29sdXRpb24nOwoKICAgICAgICBteSAkRkFRSUQgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMywKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgS2V5d29yZHMgICAgPT4gJ1NlbGVuaXVtS2V5d29yZHMnLAogICAgICAgICAgICBGaWVsZDEgICAgICA9PiAkRkFRU3ltcHRvbSwKICAgICAgICAgICAgRmllbGQyICAgICAgPT4gJEZBUVByb2JsZW0sCiAgICAgICAgICAgIEZpZWxkMyAgICAgID0+ICRGQVFTb2x1dGlvbiwKICAgICAgICAgICAgQXBwcm92ZWQgICAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEZBUUlELAogICAgICAgICAgICAiRkFRIGlzIGNyZWF0ZWQgLSAkRkFRSUQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBQdWJsaWNGQVFab29tIHNjcmVlbiBvZiBjcmVhdGVkIHRlc3QgRkFRCiAgICAgICAgJFNlbGVuaXVtLT5nZXQoIiR7U2NyaXB0QWxpYXN9cHVibGljLnBsP0FjdGlvbj1QdWJsaWNGQVFab29tO0l0ZW1JRD0kRkFRSUQiKTsKCiAgICAgICAgIyBjaGVjayBwYWdlCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnRkFRIEluZm9ybWF0aW9uJyApID4gLTEsCiAgICAgICAgICAgICJGQVEgZGF0YSBpcyBmb3VuZCBvbiBzY3JlZW4gLSBGQVEgSW5mb3JtYXRpb24iLAogICAgICAgICk7CgogICAgICAgICMgdmVyaWZ5IHRlc3QgRkFRIGlzIGNyZWF0ZWQKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVFUaXRsZSApID4gLTEsCiAgICAgICAgICAgICIkRkFRVGl0bGUgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFRlc3RzID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJZnJhbWUgID0+ICdJZnJhbWVGQVFGaWVsZDEnLAogICAgICAgICAgICAgICAgRkFRRGF0YSA9PiAkRkFRU3ltcHRvbSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSWZyYW1lICA9PiAnSWZyYW1lRkFRRmllbGQyJywKICAgICAgICAgICAgICAgIEZBUURhdGEgPT4gJEZBUVByb2JsZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIElmcmFtZSAgPT4gJ0lmcmFtZUZBUUZpZWxkMycsCiAgICAgICAgICAgICAgICBGQVFEYXRhID0+ICRGQVFTb2x1dGlvbiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB3aW5kb3cgaGFuZGxlcwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKCiAgICAgICAgIyBjaGVjayB0ZXN0IGNyZWF0ZWQgRkFRIHZhbHVlcwogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgICAgICAgICAjIHN3aXRjaCB0byBGQVEgc3ltcHRvbSBpZnJhbWUgYW5kIHZlcmlmeSBpdHMgdmFsdWVzCiAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX2ZyYW1lKCAkVGVzdC0+e0lmcmFtZX0gKTsKCiAgICAgICAgICAgICMgd2FpdCB0byBzd2l0Y2ggb24gaWZyYW1lCiAgICAgICAgICAgIHNsZWVwIDI7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGVzdC0+e0ZBUURhdGF9ICkgPiAtMSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e0ZBUURhdGF9IC0gZm91bmQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ1NlbGVuaXVtS2V5d29yZHMnICkgPiAtMSwKICAgICAgICAgICAgIkZBUSAnU2VsZW5pdW1LZXl3b3JkcycgdmFsdWUgLSBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICdwdWJsaWMgKGFsbCknICkgPiAtMSwKICAgICAgICAgICAgIkZBUSBzdGF0ZSB2YWx1ZSAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJzAgb3V0IG9mIDUnICkgPiAtMSwKICAgICAgICAgICAgIkZBUSBkZWZhdWx0IHZvdGUgdmFsdWUgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIEZBUQogICAgICAgIG15ICRTdWNjZXNzID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgICAgICAgICBJdGVtSUQgPT4gJEZBUUlELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkZBUSBpcyBkZWxldGVkIC0gJEZBUUlEIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CiAgICB9CgopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICAkS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgICAgICAgICAgUmVzdG9yZVN5c3RlbUNvbmZpZ3VyYXRpb24gPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIHNldCBGQVEgZGFzaGJvYXJkIFN5c0NvbmZpZyBwYXJhbQogICAgICAgIG15IEBGQVFEYXNoYm9hcmQgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0Rhc2hib2FyZEJhY2tlbmQjIyMwMzk4LUZBUS1MYXN0Q2hhbmdlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiAnRGFzaGJvYXJkQmFja2VuZCMjIzAzOTktRkFRLUxhc3RDcmVhdGUnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IFN5c0NvbmZpZyBvYmplY3QKICAgICAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwoKICAgICAgICAjIHNldCBGQVEgZGFzaGJvYXJkIG1vZHVsZXMgb24gZGVmYXVsdCBzZXR0aW5ncwogICAgICAgIGZvciBteSAkRGVmYXVsdFN5c0NvbmZpZyAoQEZBUURhc2hib2FyZCkgewogICAgICAgICAgICAkU3lzQ29uZmlnT2JqZWN0LT5Db25maWdJdGVtUmVzZXQoCiAgICAgICAgICAgICAgICBOYW1lID0+ICREZWZhdWx0U3lzQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBGQVEgb2JqZWN0CiAgICAgICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBGQVEKICAgICAgICBteSAkRkFRVGl0bGUgPSAnRkFRICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRGQVFJRCAgICA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgICAgICAgICBTdGF0ZUlEICAgICA9PiAyLAogICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBBcHByb3ZlZCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2ZhcScsICdmYXFfYWRtaW4nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgIGZvciBteSAkVGVzdCAoQEZBUURhc2hib2FyZCkgewoKICAgICAgICAgICAgIyBkaXNhYmxlIGFsbCBkYXNoYm9hcmQgcGx1Zy1pbnMKICAgICAgICAgICAgbXkgJENvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRGFzaGJvYXJkQmFja2VuZCcpOwogICAgICAgICAgICAkU3lzQ29uZmlnT2JqZWN0LT5Db25maWdJdGVtVXBkYXRlKAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMCwKICAgICAgICAgICAgICAgIEtleSAgID0+ICdEYXNoYm9hcmRCYWNrZW5kJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IFwlJENvbmZpZywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZW5hYmxlIEZBUSBkYXNoYm9hcmQKICAgICAgICAgICAgJFN5c0NvbmZpZ09iamVjdC0+Q29uZmlnSXRlbVJlc2V0KAogICAgICAgICAgICAgICAgTmFtZSA9PiAkVGVzdC0+e05hbWV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBuYXZpZ2F0ZSB0byBkYXNoYm9hcmQgc2NyZWVuCiAgICAgICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudERhc2hib2FyZCIpOwoKICAgICAgICAgICAgIyBjaGVjayB0aXRsZSBmb3IgdGVzdCBjcmVhdGVkIEZBUQogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRkFRVGl0bGUgKSA+IC0xLAogICAgICAgICAgICAgICAgIlRlc3QgRkFRIHRpdGxlIC0gZm91bmQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBsaW5rIGZvciB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPSRGQVFJRCIgKSA+IC0xLAogICAgICAgICAgICAgICAgIlRlc3QgRkFRIGxpbmsgLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAiRkFRIiApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgbXkgJEZBUVRpdGxlID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkRkFRSUQgICAgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMiwKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdmYXEnLCAnZmFxX2FkbWluJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50RkFRSm91cm5hbCBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFKb3VybmFsIik7CgogICAgICAgICMgY2hlY2sgZm9yIEpvdXJuYWwgT3ZlcnZpZXcgY29sdW1ucwogICAgICAgIGZvciBteSAkQ29sdW1ucyAoICdGQVEjJywgJ1RpdGxlJywgJ0NhdGVnb3J5JywgJ0FjdGlvbicsICdUaW1lJyApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENvbHVtbnMgKSA+IC0xLAogICAgICAgICAgICAgICAgIkNvbHVtbiAkQ29sdW1ucyAtIGZvdW5kIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIHRlc3QgY3JlYXRlZCBGQVEKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIkRkFRVGl0bGUiICkgPiAtMSwKICAgICAgICAgICAgIiRGQVFUaXRsZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiRkFRICRGQVFUaXRsZSAtIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gIkZBUSIgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgbXkgJEZBUVRpdGxlID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkRkFRSUQgICAgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMiwKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdmYXEnLCAnZmFxX2FkbWluJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50RkFRWm9vbSBvZiBjcmVhdGVkIEZBUQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPSRGQVFJRCIpOwoKICAgICAgICAjIGNyZWF0ZSBtZW51IG1vZHVsZSB0ZXN0IHBhcmFtcwogICAgICAgIG15IEBNZW51TW9kdWxlID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gIkVkaXQiLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudEZBUUVkaXQ7SXRlbUlEPSRGQVFJRCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiSGlzdG9yeSIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50RkFRSGlzdG9yeTtJdGVtSUQ9JEZBUUlEIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJQcmludCIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50RkFRUHJpbnQ7SXRlbUlEPSRGQVFJRCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiTGluayIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50TGlua09iamVjdDtTb3VyY2VPYmplY3Q9RkFRIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJEZWxldGUiLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudEZBUURlbGV0ZTtJdGVtSUQ9JEZBUUlEIiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIEZBUSBtZW51IG1vZHVsZXMKICAgICAgICBmb3IgbXkgJEZBUVpvb21NZW51TW9kdWxlIChATWVudU1vZHVsZSkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj0kRkFRWm9vbU1lbnVNb2R1bGUtPntBY3Rpb259JyApXSIpLAogICAgICAgICAgICAgICAgIkZBUSBtZW51ICRGQVFab29tTWVudU1vZHVsZS0+e05hbWV9IC0gZm91bmQiCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAiRkFRIiApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRIGNhdGVnb3J5CiAgICAgICAgbXkgJENhdGVnb3J5SUQgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ0NhdGVnb3J5ICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgICAgICBDb21tZW50ICA9PiAnU2VsZW5pdW0gQ2F0ZWdvcnknLAogICAgICAgICAgICBQYXJlbnRJRCA9PiAyLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgc2V0IHRlc3QgRkFRIGNhdGVnb3J5IHBlcm1pc3Npb24KICAgICAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICAgICAgR3JvdXAgPT4gJ2ZhcScsCiAgICAgICAgKTsKCiAgICAgICAgJEZBUU9iamVjdC0+U2V0Q2F0ZWdvcnlHcm91cCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgR3JvdXBJRHMgICA9PiBbJEdyb3VwSURdLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBGQVEKICAgICAgICBteSAkRkFRVGl0bGUgPSAnRkFRICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRGQVFJRCAgICA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICBDYXRlZ29yeUlEICA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMiwKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdmYXEnLCAnZmFxX2FkbWluJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50RkFRRXhwbG9yZXIgc2NyZWVuIGZvciB0ZXN0IEZBUSBjYXRlZ29yeQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudEZBUUV4cGxvcmVyO0NhdGVnb3J5SUQ9JENhdGVnb3J5SUQ7TmF2PSIpOwoKICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgIGZvciBteSAkQ29sdW1ucyAoICdGQVEjJywgJ1RpdGxlJywgJ0xhbmd1YWdlJywgJ1N0YXRlJywgJ1ZhbGlkaXR5JyApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENvbHVtbnMgKSA+IC0xLAogICAgICAgICAgICAgICAgIkNvbHVtbiAkQ29sdW1ucyAtIGZvdW5kIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIHRlc3QgY3JlYXRlZCBGQVEKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIkRkFRVGl0bGUiICkgPiAtMSwKICAgICAgICAgICAgIiRGQVFUaXRsZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRIGNhdGVnb3J5CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeURlbGV0ZSgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiQ2F0ZWdvcnkgSUQgJENhdGVnb3J5SUQgLSBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAiRkFRIiApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICAkS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgICAgICAgICAgUmVzdG9yZVN5c3RlbUNvbmZpZ3VyYXRpb24gPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGFjdGl2YXRlIHF1aWNrLXNlYXJjaCBzaG93IGZvciBhZ2VudCBpbnRlcmZhY2UKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyktPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdGQVE6OkV4cGxvcmVyOjpRdWlja1NlYXJjaDo6U2hvdycsCiAgICAgICAgICAgIFZhbHVlID0+IHsgJ2ludGVybmFsJyA9PiAnaW50ZXJuYWwgKGFnZW50KScgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBGQVEgb2JqZWN0CiAgICAgICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBGQVEKICAgICAgICBteSAkRkFRVGl0bGUgPSAnRkFRICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRGQVFJRCAgICA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgICAgICAgICBTdGF0ZUlEICAgICA9PiAyLAogICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2ZhcScsICdmYXFfYWRtaW4nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRGQVFFeHBsb3JlciBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFFeHBsb3JlciIpOwoKICAgICAgICAjIGNoZWNrIGZvciAnQWR2YW5jZWQgU2VhcmNoJyBidXR0b24KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJBY3Rpb249QWdlbnRGQVFTZWFyY2g7TmF2PSIgKSA+IC0xLAogICAgICAgICAgICAiQWR2YW5jZWQgU2VhcmNoIGJ1dHRvbiAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIHNlYXJjaCB0ZXN0IGNyZWF0ZWQgRkFRIGluIHF1aWNrLXNlYXJjaAogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAaWQ9J1NlYXJjaCddIiktPnNlbmRfa2V5cygkRkFRVGl0bGUpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTZWFyY2gnXVtcQHR5cGU9J3N1Ym1pdCddIiktPmNsaWNrKCk7CgogICAgICAgICMgY2hlY2sgZm9yIHF1aWNrLXNlYXJjaCByZXN1bHQKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIkRkFRVGl0bGUiICkgPiAtMSwKICAgICAgICAgICAgIiRGQVFUaXRsZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgRkFRCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkRkFRSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAiRkFRIiApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICAkS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgICAgICAgICAgUmVzdG9yZVN5c3RlbUNvbmZpZ3VyYXRpb24gPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGFjdGl2YXRlIHF1aWNrLXNlYXJjaCBzaG93IGZvciBhZ2VudCBpbnRlcmZhY2UKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyktPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdGQVE6OkV4cGxvcmVyOjpRdWlja1NlYXJjaDo6U2hvdycsCiAgICAgICAgICAgIFZhbHVlID0+IHsgJ2V4dGVybmFsJyA9PiAnZXh0ZXJuYWwgKGN1c3RvbWVyKScgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBGQVEgb2JqZWN0CiAgICAgICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBGQVEKICAgICAgICBteSAkRkFRVGl0bGUgPSAnRkFRICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRGQVFJRCAgICA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICBDYXRlZ29yeUlEICA9PiAxLAogICAgICAgICAgICBTdGF0ZUlEICAgICA9PiAxLAogICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBBcHByb3ZlZCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9naW4gdGVzdCBjdXN0b21lcgogICAgICAgIG15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnZmFxJywgJ2ZhcV9hZG1pbicgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKICAgICAgICArCiAgICAgICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICk7CiAgICAgICAgKwoKICAgICAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKICAgICAgICArCgogICAgICAgICAgICAjIG5hdmlnYXRlIHRvIEN1c3RvbWVyRkFRRXhwbG9yZXIgc2NyZWVuIG9mIGNyZWF0ZWQgdGVzdCBGQVEKICAgICAgICAgICAgJFNlbGVuaXVtLT5nZXQoIiR7U2NyaXB0QWxpYXN9Y3VzdG9tZXIucGw/QWN0aW9uPUN1c3RvbWVyRkFRRXhwbG9yZXIiKTsKCiAgICAgICAgIyBjaGVjayBmb3IgJ0FkdmFuY2VkIFNlYXJjaCcgYnV0dG9uCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiQWN0aW9uPUN1c3RvbWVyRkFRU2VhcmNoIiApID4gLTEsCiAgICAgICAgICAgICJBZHZhbmNlZCBTZWFyY2ggYnV0dG9uIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgc2VhcmNoIHRlc3QgY3JlYXRlZCBGQVEgaW4gcXVpY2stc2VhcmNoCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBpZD0nU2VhcmNoJ10iKS0+c2VuZF9rZXlzKCRGQVFUaXRsZSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1NlYXJjaCddW1xAdHlwZT0nc3VibWl0J10iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBmb3IgcXVpY2stc2VhcmNoIHJlc3VsdAogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIiRGQVFUaXRsZSIgKSA+IC0xLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBGQVEKICAgICAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgICAgICAgICAgSXRlbUlEID0+ICRGQVFJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkRkFRVGl0bGUgLSBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgRkFRCiAgICAgICAgbXkgJEZBUVRpdGxlID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkRkFRSUQgICAgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGQVFUaXRsZSwKICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gMywKICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgICAgICAgICAgQXBwcm92ZWQgICAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIHB1YmxpYyBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31wdWJsaWMucGw/Iik7CgogICAgICAgICMgY2hlY2sgZm9yICdBZHZhbmNlZCBTZWFyY2gnIGJ1dHRvbgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkFjdGlvbj1QdWJsaWNGQVFTZWFyY2g7IiApID4gLTEsCiAgICAgICAgICAgICJBZHZhbmNlZCBTZWFyY2ggYnV0dG9uIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgc2VhcmNoIHRlc3QgY3JlYXRlZCBGQVEgaW4gcXVpY2stc2VhcmNoCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBpZD0nU2VhcmNoJ10iKS0+c2VuZF9rZXlzKCRGQVFUaXRsZSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1NlYXJjaCddW1xAdHlwZT0nc3VibWl0J10iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBmb3IgcXVpY2stc2VhcmNoIHJlc3VsdAogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIiRGQVFUaXRsZSIgKSA+IC0xLAogICAgICAgICAgICAiJEZBUVRpdGxlIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBGQVEKICAgICAgICBteSAkU3VjY2VzcyA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgICAgICAgICAgSXRlbUlEID0+ICRGQVFJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkRkFRVGl0bGUgLSBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgRkFRIG9iamVjdAogICAgICAgIG15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgogICAgICAgICMgY3JlYXRlIHR3byB0ZXN0IEZBUQogICAgICAgIG15IEBGQVFJRHM7CiAgICAgICAgbXkgQEZBUVRpdGxlczsKICAgICAgICBmb3IgbXkgJEZBUSAoIDEgLi4gMiApIHsKICAgICAgICAgICAgbXkgJEZBUVRpdGxlID0gJ0ZBUSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJEZBUUlEICAgID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZBUVRpdGxlLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgPT4gMSwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IDIsCiAgICAgICAgICAgICAgICBMYW5ndWFnZUlEICA9PiAxLAogICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBARkFRSURzLCAgICAkRkFRSUQ7CiAgICAgICAgICAgIHB1c2ggQEZBUVRpdGxlcywgJEZBUVRpdGxlOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdmYXEnLCAnZmFxX2FkbWluJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50RkFRWm9vbSBvZiBjcmVhdGVkIEZBUQogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPSRGQVFJRHNbMF0iKTsKCiAgICAgICAgIyBjbGljayBvbiAnTGluaycgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1GQVEnICldIiktPmNsaWNrKCk7CgogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBsaW5rIHR3byB0ZXN0IGNyZWF0ZWQgRkFRcwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAbmFtZT0nU0VBUkNIOjpUaXRsZSddIiktPnNlbmRfa2V5cyggJEZBUVRpdGxlc1sxXSApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTZWFyY2gnXVtcQHR5cGU9J3N1Ym1pdCddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJ2lucHV0I0xpbmtUYXJnZXRLZXlzJykubGVuZ3RoIiApOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQGlkPSdMaW5rVGFyZ2V0S2V5cyddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAaWQ9J0FkZExpbmtzJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ1N1YmFjdGlvbj1DbG9zZScgKV0iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKCiAgICAgICAgIyB2ZXJpZnkgRkFRIGxpbmsKICAgICAgICAkU2VsZW5pdW0tPmdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRGQVFab29tO0l0ZW1JRD0kRkFRSURzWzBdIik7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRkFRVGl0bGVzWzFdICkgPiAtMSwKICAgICAgICAgICAgIlRlc3QgdGlja2V0IHRpdGxlICRGQVFUaXRsZXNbMV0gLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjbGljayBvbiAnTGluaycgYW5kIHN3aXRjaCBzY3JlZW5zCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50TGlua09iamVjdDtTb3VyY2VPYmplY3Q9RkFRJyApXSIpLT5jbGljaygpOwoKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgZGVsZXRlIGxpbmsgcmVsYXRpb24KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdTdWJhY3Rpb249TGlua0RlbGV0ZScgKV0iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQGlkPSdTZWxlY3RBbGxMaW5rczAnXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHR5cGU9J3N1Ym1pdCddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnU3ViYWN0aW9uPUNsb3NlJyApXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwoKICAgICAgICAjIHZlcmlmeSB0aGF0IGxpbmsgaGFzIGJlZW4gcmVtb3ZlZAogICAgICAgICRTZWxlbml1bS0+Z2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudEZBUVpvb207SXRlbUlEPSRGQVFJRHNbMF0iKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRGQVFUaXRsZXNbMV0gKSA9PSAtMSwKICAgICAgICAgICAgIiRGQVFUaXRsZXNbMV0gLSBub3QgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBGQVFzCiAgICAgICAgbXkgJFN1Y2Nlc3M7CiAgICAgICAgZm9yIG15ICRGQVFEZWxldGUgKEBGQVFJRHMpIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEZBUURlbGV0ZSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkZBUSBJRCAkRkFRRGVsZXRlIC0gZGVsZXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICJGQVEiICk7CgogICAgfQopOwoKMTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgRkFRID0gRkFRIHx8IHt9OwpGQVEuQWdlbnQgPSBGQVEuQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBGQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIENvbmZpcm1hdGlvbkRpYWxvZy4KICovCkZBUS5BZ2VudC5Db25maXJtYXRpb25EaWFsb2cgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBEaWFsb2dEYXRhCiAgICAgKiBAbWVtYmVyb2YgRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZwogICAgICogQHZhcmlhYmxlCiAgICAgKiBAcHJpdmF0ZQogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgdmFyaWFibGUgc3RvcmVzIHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCBmcm9tIHRoZSBEVEwgYW5kIGNvbnRhaW4gYWxsIHRoZSBkYXRhIHRoYXQgdGhlIGRpYWxvZyBuZWVkcy4KICAgICAqLwogICAgdmFyIERpYWxvZ0RhdGEgPSBbXTsKCiAgICAvKioKICAgICAqIEBuYW1lIFNob3dXYWl0aW5nRGlhbG9nCiAgICAgKiBAbWVtYmVyb2YgRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHtTdHJpbmd9IFBvc2l0aW9uVG9wIHBvc2l0aW9uIG9mIHRoZSBkaWFsb2cuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgU2hvd3Mgd2FpdGluZyBkaWFsb2cgdW50aWwgc2VhcmNoIHNjcmVlbiBpcyByZWFkeS4KICAgICAqLwogICAgZnVuY3Rpb24gU2hvd1dhaXRpbmdEaWFsb2coUG9zaXRpb25Ub3ApewogICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKCc8ZGl2IGNsYXNzPSJTcGFjaW5nIENlbnRlciI+PHNwYW4gY2xhc3M9IkFKQVhMb2FkZXIiIHRpdGxlPSInICsgQ29yZS5Db25maWcuR2V0KCdMb2FkaW5nTXNnJykgKyAnIj48L3NwYW4+PC9kaXY+JywgJycsIFBvc2l0aW9uVG9wLCAnQ2VudGVyJywgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbmFtZSBTaG93Q29uZmlybWF0aW9uRGlhbG9nCiAgICAgKiBAbWVtYmVyb2YgRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gZmFsc2UKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aXRoIDIgYnV0dG9uczogWWVzIGFuZCBOby4KICAgICAqLwogICAgVGFyZ2V0TlMuU2hvd0NvbmZpcm1hdGlvbkRpYWxvZyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgdmFyIExvY2FsRGlhbG9nRGF0YSwKICAgICAgICAgICAgUG9zaXRpb25Ub3AsCiAgICAgICAgICAgIERhdGEsCiAgICAgICAgICAgIEJ1dHRvbnM7CgogICAgICAgIC8vIGdldCBnbG9iYWwgc2F2ZWQgRGlhbG9nRGF0YSBmb3IgdGhpcyBmdW5jdGlvbgogICAgICAgIExvY2FsRGlhbG9nRGF0YSA9IERpYWxvZ0RhdGFbJCh0aGlzKS5hdHRyKCdpZCcpXTsKCiAgICAgICAgLy8gZGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGlhbG9nCiAgICAgICAgUG9zaXRpb25Ub3AgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCkgKyAoJCh3aW5kb3cpLmhlaWdodCgpICogMC4zKTsKCiAgICAgICAgLy8gc2hvdyB3YWl0aW5nIGRpYWxvZwogICAgICAgIFNob3dXYWl0aW5nRGlhbG9nKFBvc2l0aW9uVG9wKTsKCiAgICAgICAgLy8gYWpheCBjYWxsIHRvIHRoZSBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSB0ZW1wbGF0ZQogICAgICAgIERhdGEgPSBMb2NhbERpYWxvZ0RhdGEuRGlhbG9nQ29udGVudFF1ZXJ5U3RyaW5nOwogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhLCBmdW5jdGlvbiAoUmVzcG9uc2UpIHsKCiAgICAgICAgICAgIC8vICdDb25maXJtYXRpb24nIG9wZW5zIGEgZGlhbG9nIHdpdGggMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICAgICAgICAgIGlmIChSZXNwb25zZS5EaWFsb2dUeXBlID09PSAnQ29uZmlybWF0aW9uJykgewoKICAgICAgICAgICAgICAgIC8vIGRlZmluZSB5ZXMgYW5kIG5vIGJ1dHRvbnMKICAgICAgICAgICAgICAgIEJ1dHRvbnMgPSBbewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMb2NhbERpYWxvZ0RhdGEuVHJhbnNsYXRlZFRleHQuWWVzLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAiUHJpbWFyeSIsCgogICAgICAgICAgICAgICAgICAgIC8vIGRlZmluZSB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgJ1llcycgYnV0dG9uIGlzIHByZXNzZWQKICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgWWVzIGFuZCBObyBidXR0b25zIHRvIHByZXZlbnQgbXVsdGlwbGUgc3VibWl0cwogICAgICAgICAgICAgICAgICAgICAgICAkKCdkaXYuRGlhbG9nOnZpc2libGUgZGl2LkNvbnRlbnRGb290ZXIgYnV0dG9uJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZGlyZWN0IHRvIHRoZSBtb2R1bGUgdGhhdCBkb2VzIHRoZSBjb25maXJtZWQgYWN0aW9uIGFmdGVyIHByZXNzaW5nIHRoZSBZZXMgYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykgKyBMb2NhbERpYWxvZ0RhdGEuQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMb2NhbERpYWxvZ0RhdGEuVHJhbnNsYXRlZFRleHQuTm8sCiAgICAgICAgICAgICAgICAgICAgVHlwZTogIkNsb3NlIgogICAgICAgICAgICAgICAgfV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vICdNZXNzYWdlJyBvcGVucyBhIGRpYWxvZyB3aXRoIDEgYnV0dG9uOiBPawogICAgICAgICAgICBlbHNlIGlmIChSZXNwb25zZS5EaWFsb2dUeXBlID09PSAnTWVzc2FnZScpIHsKCiAgICAgICAgICAgICAgICAvLyBkZWZpbmUgT2sgYnV0dG9uCiAgICAgICAgICAgICAgICBCdXR0b25zID0gW3sKICAgICAgICAgICAgICAgICAgICBMYWJlbDogTG9jYWxEaWFsb2dEYXRhLlRyYW5zbGF0ZWRUZXh0Lk9rLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAiUHJpbWFyeSIsCiAgICAgICAgICAgICAgICAgICAgVHlwZTogIkNsb3NlIgogICAgICAgICAgICAgICAgfV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNob3cgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gY29uZmlybSB0aGUgYWN0aW9uCiAgICAgICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKFJlc3BvbnNlLkhUTUwsIExvY2FsRGlhbG9nRGF0YS5EaWFsb2dUaXRsZSwgUG9zaXRpb25Ub3AsICJDZW50ZXIiLCB0cnVlLCBCdXR0b25zKTsKICAgICAgICB9LCAnanNvbicpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBCaW5kQ29uZmlybWF0aW9uRGlhbG9nCiAgICAgKiBAbWVtYmVyb2YgRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge09iamVjdH0gRGF0YSAtIFRoZSBkYXRhIHRoYXQgc2hvdWxkIGJlIGJpbmRlZAogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gYmluZHMgYSBjbGljayBldmVudCB0byB0aGUgZGVmaW5lZCBlbGVtZW50CiAgICAgKi8KICAgIFRhcmdldE5TLkJpbmRDb25maXJtYXRpb25EaWFsb2cgPSBmdW5jdGlvbiAoRGF0YSkgewogICAgICAgIERpYWxvZ0RhdGFbRGF0YS5FbGVtZW50SURdID0gRGF0YTsKCiAgICAgICAgLy8gYmluZGluZyBhIGNsaWNrIGV2ZW50IHRvIHRoZSBkZWZpbmVkIGVsZW1lbnQKICAgICAgICAkKERpYWxvZ0RhdGFbRGF0YS5FbGVtZW50SURdLkVsZW1lbnRTZWxlY3RvcikuYmluZCgnY2xpY2snLCBGQVEuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLlNob3dDb25maXJtYXRpb25EaWFsb2cpOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oRkFRLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZyB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgRkFRID0gRkFRIHx8IHt9OwpGQVEuQWdlbnQgPSBGQVEuQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBGQVEuQWdlbnQuVGlja2V0Wm9vbQogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBUaWNrZXRab29tLgogKi8KRkFRLkFnZW50LkZBUVpvb20gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJZnJhbWVBdXRvSGVpZ2h0CiAgICAgKiBAbWVtYmVyb2YgRkFRLkFnZW50LkZBUVpvb20KICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRJZnJhbWUgLSBUaGUgaWZyYW1lIHdoaWNoIHNob3VsZCBiZSBhdXRvLWhlaWdodGVkCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgU2V0IGlmcmFtZSBoZWlnaHQgYXV0b21hdGljYWxseSBiYXNlZCBvbiByZWFsIGNvbnRlbnQgaGVpZ2h0IGFuZCBkZWZhdWx0IGNvbmZpZyBzZXR0aW5nLgogICAgICovCiAgICBUYXJnZXROUy5JZnJhbWVBdXRvSGVpZ2h0ID0gZnVuY3Rpb24gKCRJZnJhbWUpIHsKCiAgICAgICAgdmFyIE5ld0hlaWdodCA9ICRJZnJhbWUKICAgICAgICAgICAgLmNvbnRlbnRzKCkKICAgICAgICAgICAgLmZpbmQoJ2h0bWwnKQogICAgICAgICAgICAuaGVpZ2h0KCk7CgogICAgICAgIGlmIChpc0pRdWVyeU9iamVjdCgkSWZyYW1lKSkgewoKICAgICAgICAgICAgLy8gSUU4IG5lZWRzIHNvbWUgbW9yZSBzcGFjZSBkdWUgdG8gaW5jb3JyZWN0IGhlaWdodCBjYWxjdWxhdGlvbgogICAgICAgICAgICBpZiAoTmV3SGVpZ2h0ID4gMCAmJiAkLmJyb3dzZXIubXNpZSAmJiAkLmJyb3dzZXIudmVyc2lvbiA9PT0gJzguMCcpIHsKICAgICAgICAgICAgICAgIE5ld0hlaWdodCA9IE5ld0hlaWdodCArIDQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGlmIHRoZSBpRnJhbWVzIGhlaWdodCBpcyAwLCB3ZSBjb2xsYXBzZSB0aGUgd2lkZ2V0CiAgICAgICAgICAgIGlmIChOZXdIZWlnaHQgPT09IDApIHsKICAgICAgICAgICAgICAgICRJZnJhbWUuY2xvc2VzdCgnLldpZGdldFNpbXBsZScpLnJlbW92ZUNsYXNzKCdFeHBhbmRlZCcpLmFkZENsYXNzKCdDb2xsYXBzZWQnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFOZXdIZWlnaHQgfHwgaXNOYU4oTmV3SGVpZ2h0KSkgewogICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gQ29yZS5Db25maWcuR2V0KCdGQVE6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodERlZmF1bHQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChOZXdIZWlnaHQgPiBDb3JlLkNvbmZpZy5HZXQoJ0ZBUTo6RnJvbnRlbmQ6OkFnZW50SFRNTEZpZWxkSGVpZ2h0TWF4JykpIHsKICAgICAgICAgICAgICAgICAgICBOZXdIZWlnaHQgPSBDb3JlLkNvbmZpZy5HZXQoJ0ZBUTo6RnJvbnRlbmQ6OkFnZW50SFRNTEZpZWxkSGVpZ2h0TWF4Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJElmcmFtZS5oZWlnaHQoTmV3SGVpZ2h0ICsgJ3B4Jyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBpbml0IGJyb3dzZXIgbGluayBtZXNzYWdlIGNsb3NlIGJ1dHRvbgogICAgaWYgKCQoJy5GQVFNZXNzYWdlQnJvd3NlcicpLmxlbmd0aCkgewogICAgICAgICQoJy5GQVFNZXNzYWdlQnJvd3NlciBhLkNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCcuRkFRTWVzc2FnZUJyb3dzZXInKS5mYWRlT3V0KCJzbG93Iik7CiAgICAgICAgICAgIENvcmUuQWdlbnQuUHJlZmVyZW5jZXNVcGRhdGUoJ1VzZXJBZ2VudERvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZScsIDEpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KEZBUS5BZ2VudC5GQVFab29tIHx8IHt9KSk7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgRkFRID0gRkFRIHx8IHt9OwpGQVEuQWdlbnQgPSBGQVEuQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBGQVEuQWdlbnQuVGlja2V0Q29tcG9zZQogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBUaWNrZXRDb21wb3NlLgogKi8KRkFRLkFnZW50LlRpY2tldENvbXBvc2UgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0RkFRVGlja2V0Q29tcG9zZQogICAgICogQG1lbWJlcm9mIEZBUS5BZ2VudC5UaWNrZXRDb21wb3NlCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkRWxlbWVudCBUaGUgZWRpdG9yCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgSW5pdGlhbGl6ZSB0aGUgbmVlZGVkIHN0dWZmIGZvciB0aGUgRkFRIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRpY2tldCBzY3JlZW5zLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0RkFRVGlja2V0Q29tcG9zZSA9IGZ1bmN0aW9uICgkRWxlbWVudCkgewoKICAgICAgICAvLyBTZWUgYnVnIzkxMTY6CiAgICAgICAgLy8gSW4gQ2hyb21lIHNvbWV0aW1lcyB0aGUgY2xpY2sgZXZlbnQgaXMgdHJpZ2dlcmVkIGJlZm9yZSB0aGUgZm9jdXMgZXZlbnQKICAgICAgICAvLyB3ZSBwcmV2ZW50IHRoYXQgYnkgY2hlY2tpbmcgRWRpdG9yR290Rm9jdXMgZmlyc3QKICAgICAgICB2YXIgSW5zdGFuY2VOYW1lID0gJEVsZW1lbnQuYXR0cignaWQnKSwKICAgICAgICAgICAgRWRpdG9yR290Rm9jdXMgPSBmYWxzZTsKCiAgICAgICAgZnVuY3Rpb24gR2V0Q3Vyc29yUG9zaXRpb24oKSB7CiAgICAgICAgICAgIHZhciBFbGVtZW50ID0gJEVsZW1lbnRbMF0sCiAgICAgICAgICAgICAgICBSYW5nZSwKICAgICAgICAgICAgICAgIFRleHRSYW5nZSwKICAgICAgICAgICAgICAgIFRleHRSYW5nZUR1cGxpY2F0ZSwKICAgICAgICAgICAgICAgIFN0YXJ0UmFuZ2UgPSAwLAogICAgICAgICAgICAgICAgRW5kUmFuZ2UgPSAwOwogICAgICAgICAgICAvLyBGaXJlZm94CiAgICAgICAgICAgIGlmIChFbGVtZW50LnNlbGVjdGlvblN0YXJ0KSB7CiAgICAgICAgICAgICAgICBTdGFydFJhbmdlID0gRWxlbWVudC5zZWxlY3Rpb25TdGFydDsKICAgICAgICAgICAgICAgIEVuZFJhbmdlID0gRWxlbWVudC5zZWxlY3Rpb25FbmQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSUUKICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAgICBSYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLmR1cGxpY2F0ZSgpOwogICAgICAgICAgICAgICAgVGV4dFJhbmdlID0gRWxlbWVudC5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgICAgICAgICAgIFRleHRSYW5nZUR1cGxpY2F0ZSA9IFRleHRSYW5nZS5kdXBsaWNhdGUoKTsKICAgICAgICAgICAgICAgIFRleHRSYW5nZS5tb3ZlVG9Cb29rbWFyayhSYW5nZS5nZXRCb29rbWFyaygpKTsKICAgICAgICAgICAgICAgIFRleHRSYW5nZUR1cGxpY2F0ZS5zZXRFbmRQb2ludCgnRW5kVG9TdGFydCcsIFRleHRSYW5nZSk7CiAgICAgICAgICAgICAgICBTdGFydFJhbmdlID0gRW5kUmFuZ2UgPSBUZXh0UmFuZ2VEdXBsaWNhdGUudGV4dC5sZW5ndGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNhdmUgY3Vyc29yIHBvc2l0aW9uIGZvciBsYXRlciB1c2FnZQogICAgICAgICAgICAkRWxlbWVudC5kYXRhKCdDdXJzb3InLCB7CiAgICAgICAgICAgICAgICBTdGFydFJhbmdlOiBTdGFydFJhbmdlLAogICAgICAgICAgICAgICAgRW5kUmFuZ2U6IEVuZFJhbmdlCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVnaXN0ZXIgUlRFIGV2ZW50cyBmb3Igc2F2aW5nIHRoZSBjdXJzb3IgcG9zaXRpb24KICAgICAgICBpZiAodHlwZW9mIENLRURJVE9SICE9PSAndW5kZWZpbmVkJyAmJiBDS0VESVRPUiAmJiBDS0VESVRPUi5pbnN0YW5jZXMuUmljaFRleHQpIHsKICAgICAgICAgICAgLy8gR2V0IGxhc3QgY3Vyc29yIHBvc2l0aW9uIGFuZCBzYXZlIGl0IChvbiBmb2N1cyB3ZSBjb21lIGJhY2sgdG8gdGhpcyBwb3NpdGlvbikKICAgICAgICAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW0luc3RhbmNlTmFtZV0ub24oJ2NvbnRlbnREb20nLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIENLRURJVE9SLmluc3RhbmNlc1tJbnN0YW5jZU5hbWVdLmRvY3VtZW50Lm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoRWRpdG9yR290Rm9jdXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBJbnN0YW5jZU5hbWUpLmRhdGEoJ1JURUN1cnNvcicsIENLRURJVE9SLmluc3RhbmNlc1tJbnN0YW5jZU5hbWVdLmdldFNlbGVjdGlvbigpLmdldFJhbmdlcygpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIENLRURJVE9SLmluc3RhbmNlc1tJbnN0YW5jZU5hbWVdLmRvY3VtZW50Lm9uKCdrZXl1cCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoRWRpdG9yR290Rm9jdXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBJbnN0YW5jZU5hbWUpLmRhdGEoJ1JURUN1cnNvcicsIENLRURJVE9SLmluc3RhbmNlc1tJbnN0YW5jZU5hbWVdLmdldFNlbGVjdGlvbigpLmdldFJhbmdlcygpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBuZWVkZWQgZm9yIGNsaWVudC1zaWRlIHZhbGlkYXRpb24gYW5kIGluc2VydGluZyBkYXRhIGludG8gUlRFCiAgICAgICAgICAgIENLRURJVE9SLmluc3RhbmNlc1tJbnN0YW5jZU5hbWVdLm9uKCdmb2N1cycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIC8vIGlmIGEgc2F2ZWQgY3Vyc29yIHBvc2l0aW9uIGV4aXN0cywgc2V0IHRoaXMgcG9zaXRpb24gbm93CiAgICAgICAgICAgICAgICB2YXIgUlRFQ3Vyc29yUmFuZ2UgPSAkKCcjJyArIEluc3RhbmNlTmFtZSkuZGF0YSgnUlRFQ3Vyc29yJyksCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uOwoKICAgICAgICAgICAgICAgIEVkaXRvckdvdEZvY3VzID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBpZiAoUlRFQ3Vyc29yUmFuZ2UpIHsKICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb24gPSBuZXcgQ0tFRElUT1IuZG9tLnNlbGVjdGlvbihDS0VESVRPUi5pbnN0YW5jZXNbSW5zdGFuY2VOYW1lXS5kb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uLnNlbGVjdFJhbmdlcyhSVEVDdXJzb3JSYW5nZSk7CiAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIHNhdmVkIGN1cnNvciBwb3NpdGlvbiAodG8gbm90IGtlZXAgb2xkIHN0dWZmKQogICAgICAgICAgICAgICAgICAgICQoJyMnICsgSW5zdGFuY2VOYW1lKS5kYXRhKCdSVEVDdXJzb3InLCB1bmRlZmluZWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLy8gUmVnaXN0ZXIgZXZlbnRzIGZvciBzYXZpbmcgdGhlIGN1cnNvciBwb3NpdGlvbiBvZiB0ZXh0YXJlYQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRWxlbWVudC51bmJpbmQoJ2NsaWNrLkZBUUNvbXBvc2luZycpLmJpbmQoJ2NsaWNrLkZBUUNvbXBvc2luZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIEdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAkRWxlbWVudC51bmJpbmQoJ2tleXVwLkZBUUNvbXBvc2luZycpLmJpbmQoJ2tleXVwLkZBUUNvbXBvc2luZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIEdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBTZXREYXRhCiAgICAgKiBAbWVtYmVyb2YgRkFRLkFnZW50LlRpY2tldENvbXBvc2UKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IEZBUVRpdGxlIG9mIGEgRkFRIGFydGljbGUgdG8gYmUgcmV0dXJuZWQgaW50byB0aWNrZXQgU3ViamVjdAogICAgICogQHBhcmFtIHtTdHJpbmd9IEZBUUNvbnRlbnQgb2YgYSBGQVEgYXJ0aWNsZSBhbmQvb3IgTGluayB0byB0aGUgcHVibGljIGludGVyZmFjZSBpbiBwbGFpbiB0ZXh0CiAgICAgKiBAcGFyYW0ge1N0cmluZ30gRkFRSFRNTENvbnRlbnQgb2YgYSBGQVEgYXJ0aWNsZSBhbmQvb3IgTGluayB0byB0aGUgcHVibGljIGludGVyZmFjZSBpbiBIVE1MCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgRG8gbm90aGluZyBhbmQgc2hvdyBhbiBlcnJvciBtZXNzYWdlLgogICAgICovCiAgICBmdW5jdGlvbiBTZXREYXRhIChGQVFUaXRsZSwgRkFRQ29udGVudCwgRkFRSFRNTENvbnRlbnQpIHsKCiAgICAgICAgdmFyICRQYXJlbnRTdWJqZWN0ID0gJCgnI1N1YmplY3QnLCBwYXJlbnQuZG9jdW1lbnQpLAogICAgICAgICAgICAkUGFyZW50Qm9keSA9ICQoJyNSaWNoVGV4dCcsIHBhcmVudC5kb2N1bWVudCksCiAgICAgICAgICAgIFBhcmVudEJvZHkgPSAkUGFyZW50Qm9keVswXSwKICAgICAgICAgICAgUGFyZW50Qm9keVZhbHVlID0gJFBhcmVudEJvZHkudmFsKCksCiAgICAgICAgICAgIFJhbmdlLAogICAgICAgICAgICBTdGFydFJhbmdlID0gMCwKICAgICAgICAgICAgRW5kUmFuZ2UgPSAwLAogICAgICAgICAgICBOZXdQb3NpdGlvbiA9IDA7CgogICAgICAgIGlmICgkKCcjU3ViamVjdCcsIHBhcmVudC5kb2N1bWVudCkubGVuZ3RoICYmICQoJyNSaWNoVGV4dCcsIHBhcmVudC5kb2N1bWVudCkubGVuZ3RoKSB7CgogICAgICAgICAgICBpZiAoQ29yZS5Db25maWcuR2V0KCdUaWNrZXRDb21wb3NlLlVwZGF0ZUFydGljbGVTdWJqZWN0JykgPT09ICcxJyAmJiAkKCcjVXBkYXRlQXJ0aWNsZVN1YmplY3RPcHRpb24nKS5wcm9wKCdjaGVja2VkJykpIHsKICAgICAgICAgICAgICAgIC8vIGNvcHkgc3ViamVjdAogICAgICAgICAgICAgICAgaWYgKCRQYXJlbnRTdWJqZWN0LnZhbCgpID09PSAnJykgewogICAgICAgICAgICAgICAgICAgICRQYXJlbnRTdWJqZWN0LnZhbChGQVFUaXRsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkUGFyZW50U3ViamVjdC52YWwoJFBhcmVudFN1YmplY3QudmFsKCkgKyAnIC0gJyArIEZBUVRpdGxlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gYWRkIEZBUSB0ZXh0IGFuZC9vciBsaW5rIHRvIFdZU0lXWUcgZWRpdG9yIGluIHBhcmVudCB3aW5kb3cKICAgICAgICAgICAgaWYgKHBhcmVudC5DS0VESVRPUiAmJiBwYXJlbnQuQ0tFRElUT1IuaW5zdGFuY2VzLlJpY2hUZXh0KSB7CiAgICAgICAgICAgICAgICBwYXJlbnQuQ0tFRElUT1IuaW5zdGFuY2VzLlJpY2hUZXh0LmZvY3VzKCk7CiAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSW4gc29tZSBjaXJjdW1zdGFuY2VzLCB0aGlzIGNvbW1hbmQgdGhyb3dzIGFuIGVycm9yIChhbHRob3VnaCBpbnNlcnRpbmcgdGhlIEhUTUwgd29ya3MpCiAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBhbHNvIHdvcmtzLCB3ZSBqdXN0IHdyYXAgaXQgaW4gYSB0cnktY2F0Y2gtc3RhdGVtZW50CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LkNLRURJVE9SLmluc3RhbmNlcy5SaWNoVGV4dC5pbnNlcnRIdG1sKEZBUUhUTUxDb250ZW50KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQubm9vcCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5Db3JlLlVJLkRpYWxvZy5DbG9zZURpYWxvZygkKCcuRGlhbG9nJywgcGFyZW50LmRvY3VtZW50KSk7CiAgICAgICAgICAgICAgICAgICAgfSwgNTApOwogICAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gaW5zZXJ0IGJvZHkgYW5kL29yIGxpbmsgdG8gdGV4dGFyZWEgKGlmIHBvc3NpYmxlIHRvIGN1cnNvciBwb3NpdGlvbiBvdGhlcndpc2UgdG8gdGhlIHRvcCkKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgcHJldmlvdXNseSBzYXZlZCBjdXJzb3IgcG9zaXRpb24gb2YgdGV4dGFyZWEKICAgICAgICAgICAgICAgIGlmIChwYXJlbnQuJCgnI1JpY2hUZXh0JywgcGFyZW50LmRvY3VtZW50KS5kYXRhKCdDdXJzb3InKSkgewogICAgICAgICAgICAgICAgICAgIFN0YXJ0UmFuZ2UgPSBwYXJlbnQuJCgnI1JpY2hUZXh0JywgcGFyZW50LmRvY3VtZW50KS5kYXRhKCdDdXJzb3InKS5TdGFydFJhbmdlOwogICAgICAgICAgICAgICAgICAgIEVuZFJhbmdlID0gcGFyZW50LiQoJyNSaWNoVGV4dCcsIHBhcmVudC5kb2N1bWVudCkuZGF0YSgnQ3Vyc29yJykuRW5kUmFuZ2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQWRkIG5ldyB0ZXh0IHRvIHRleHRhcmVhCiAgICAgICAgICAgICAgICAkUGFyZW50Qm9keS52YWwoUGFyZW50Qm9keVZhbHVlLnN1YnN0cigwLCBTdGFydFJhbmdlKSArIEZBUUNvbnRlbnQgKyBQYXJlbnRCb2R5VmFsdWUuc3Vic3RyKEVuZFJhbmdlLCBQYXJlbnRCb2R5VmFsdWUubGVuZ3RoKSk7CiAgICAgICAgICAgICAgICBOZXdQb3NpdGlvbiA9IFN0YXJ0UmFuZ2UgKyBGQVFDb250ZW50Lmxlbmd0aDsKCiAgICAgICAgICAgICAgICAvLyBKdW1wIHRvIG5ldyBjdXJzb3IgcG9zaXRpb24gKGFmdGVyIGluc2VydGVkIHRleHQpCiAgICAgICAgICAgICAgICBpZiAoUGFyZW50Qm9keS5zZWxlY3Rpb25TdGFydCkgewogICAgICAgICAgICAgICAgICAgIFBhcmVudEJvZHkuc2VsZWN0aW9uU3RhcnQgPSBOZXdQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICBQYXJlbnRCb2R5LnNlbGVjdGlvbkVuZCA9IE5ld1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgUmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS5kdXBsaWNhdGUoKTsKICAgICAgICAgICAgICAgICAgICBSYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIE5ld1Bvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICBSYW5nZS5zZWxlY3QoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwYXJlbnQuQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZycsIHBhcmVudC5kb2N1bWVudCkpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhbGVydCgnJEpTVGV4dHsiVGhpcyB3aW5kb3cgbXVzdCBiZSBjYWxsZWQgZnJvbSBjb21wb3NlIHdpbmRvdyJ9Jyk7CiAgICAgICAgICAgIHBhcmVudC5Db3JlLlVJLkRpYWxvZy5DbG9zZURpYWxvZygkKCcuRGlhbG9nJywgcGFyZW50LmRvY3VtZW50KSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAbmFtZSBTZXRUZXh0CiAgICAgKiBAbWVtYmVyb2YgRkFRLkFnZW50LlRpY2tldENvbXBvc2UKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtCb29sZWFufSBJbnNlcnRUZXh0IHRvIGFkZCBGQVEgaXRlbSB0ZXh0IG9yIG5vdAogICAgICogQHBhcmFtIHtCb29sZWFufSBJbnNlcnRMaW5rIHRvIGFkZCBGQVEgaXRlbSBsaW5rIG9yIG5vdAogICAgICovCiAgICBUYXJnZXROUy5TZXRUZXh0ID0gZnVuY3Rpb24gKEluc2VydFRleHQsIEluc2VydExpbmspIHsKICAgICAgICB2YXIgRkFRVGl0bGUgPSAkKCcjRkFRVGl0bGUnKS52YWwoKSwKICAgICAgICBGQVFDb250ZW50ID0gJycsCiAgICAgICAgRkFRSFRNTENvbnRlbnQgPSAnJywKICAgICAgICBGQVFMaW5rOwoKICAgICAgICBpZiAoSW5zZXJ0VGV4dCA9PT0gMSkgewogICAgICAgICAgICBGQVFDb250ZW50ID0gJCgnI0ZBUUJvZHknKS52YWwoKTsKICAgICAgICAgICAgRkFRSFRNTENvbnRlbnQgPSBGQVFDb250ZW50OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgRkFRQ29udGVudCA9ICcnOwogICAgICAgICAgICBGQVFIVE1MQ29udGVudCA9IEZBUUNvbnRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoSW5zZXJ0TGluayA9PT0gMSkgewogICAgICAgICAgICBGQVFMaW5rID0gJCgnI0ZBUVB1YmxpY0xpbmsnKS52YWwoKTsKICAgICAgICAgICAgRkFRQ29udGVudCA9IEZBUUNvbnRlbnQgKyAnXG4nICsgRkFRTGluazsKICAgICAgICAgICAgRkFRSFRNTENvbnRlbnQgPSBGQVFIVE1MQ29udGVudCArICc8YnIvPicgKyAnPGEgaHJlZj0iJyArIEZBUUxpbmsgKyAnIj4nICsgRkFRVGl0bGUgKyAnPC9hPic7CiAgICAgICAgfQoKICAgICAgICBTZXREYXRhKEZBUVRpdGxlLCBGQVFDb250ZW50LCBGQVFIVE1MQ29udGVudCk7CiAgICB9OwoKCiAgICAvKioKICAgICAqIEBuYW1lIFNldEZ1bGxGQVEKICAgICAqIEBtZW1iZXJvZiBGQVEuQWdlbnQuVGlja2V0Q29tcG9zZQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IEluc2VydFRleHQgdG8gYWRkIEZBUSBpdGVtIHRleHQgb3Igbm90CiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IEluc2VydExpbmsgdG8gYWRkIEZBUSBpdGVtIGxpbmsgb3Igbm90CiAgICAgKi8KICAgIFRhcmdldE5TLlNldEZ1bGxGQVEgPSBmdW5jdGlvbiAoSW5zZXJ0VGV4dCwgSW5zZXJ0TGluaykgewoKICAgICAgICAvLyBnZXQgdGhlIEZBUSByaWNodGV4dCBhbmQgdHJpZ2dlciBhdHRhY2htZW50IHByb2Nlc3NpbmcKICAgICAgICBwYXJlbnQuQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbCgKICAgICAgICAgICAgcGFyZW50LkNvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQWN0aW9uOiAnQWdlbnRGQVFSaWNoVGV4dCcsCiAgICAgICAgICAgICAgICBJdGVtSUQ6ICQoJ2lucHV0W25hbWU9RkFRSURdJykudmFsKCksCiAgICAgICAgICAgICAgICBGb3JtSUQ6IHBhcmVudC4kKCdpbnB1dFtuYW1lPUZvcm1JRF0nKS52YWwoKQogICAgICAgICAgICB9LAogICAgICAgICAgICBmdW5jdGlvbiAoUmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgIHZhciBGQVFUaXRsZSA9IFJlc3BvbnNlLkZBUVRpdGxlLAogICAgICAgICAgICAgICAgICAgIEZBUUNvbnRlbnQgPSAnJywKICAgICAgICAgICAgICAgICAgICBGQVFIVE1MQ29udGVudCA9ICcnLAogICAgICAgICAgICAgICAgICAgIEZBUUxpbms7CgogICAgICAgICAgICAgICAgaWYgKEluc2VydFRleHQgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICBGQVFDb250ZW50ID0gUmVzcG9uc2UuRkFRQ29udGVudDsKICAgICAgICAgICAgICAgICAgICBGQVFIVE1MQ29udGVudCA9IFJlc3BvbnNlLkZBUUhUTUxDb250ZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChJbnNlcnRMaW5rID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgRkFRTGluayA9ICQoJyNGQVFQdWJsaWNMaW5rJykudmFsKCk7CiAgICAgICAgICAgICAgICAgICAgRkFRQ29udGVudCA9IEZBUUNvbnRlbnQgKyAnXG4nICsgRkFRTGluazsKICAgICAgICAgICAgICAgICAgICBGQVFIVE1MQ29udGVudCA9IEZBUUhUTUxDb250ZW50ICsgJzxici8+PGJyLz4nICsgJzxhIGhyZWY9IicgKyBGQVFMaW5rICsgJyI+JyArIEZBUVRpdGxlICsgJzwvYT4nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIHN5bmMgdGhlIGF0dGFjaG1lbnQgbGlzdCB3aXRoIHRoZSBhdHRhY2htZW50cyBpbiB0aGUgVXBsb2FkQ2FjaGUKICAgICAgICAgICAgICAgIC8vIDFzdDogZGVsZXRlIHRoZSBjdXJyZW50IGF0dGFjaG1lbnQgbGlzdAogICAgICAgICAgICAgICAgJCgnI0ZpbGVVcGxvYWQnLCBwYXJlbnQuZG9jdW1lbnQpLnBhcmVudCgpLnNpYmxpbmdzKCdsaScpLnJlbW92ZSgpOwoKICAgICAgICAgICAgICAgIC8vIDJuZDogYWRkIGFsbCBmaWxlcyBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcmV0dXJuZWQgaW4gUmVzcG9uc2UKICAgICAgICAgICAgICAgICQoUmVzcG9uc2UuVGlja2V0QXR0YWNobWVudHMpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI0ZpbGVVcGxvYWQnLCBwYXJlbnQuZG9jdW1lbnQpLmJlZm9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgJzxsaT4nICsgdGhpcy5GaWxlbmFtZSArICcgKCcgKyB0aGlzLkZpbGVzaXplICsgJyk8YnV0dG9uIHR5cGU9InN1Ym1pdCIgaWQ9IkF0dGFjaG1lbnREZWxldGUnICsgdGhpcy5GaWxlSUQgKyAnIiBuYW1lPSJBdHRhY2htZW50RGVsZXRlJyArIHRoaXMuRmlsZUlEICsgJyIgdmFsdWU9IkRlbGV0ZSIgY2xhc3M9IlNwYWNpbmdMZWZ0Ij4nICsgUmVzcG9uc2UuTG9jYWxpemF0aW9uLkRlbGV0ZSArICc8L2J1dHRvbj48L2xpPicKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgU2V0RGF0YShGQVFUaXRsZSwgRkFRQ29udGVudCwgRkFRSFRNTENvbnRlbnQpOwogICAgICAgICAgICB9LAogICAgICAgICAgICAnanNvbicKICAgICAgICApOwogICAgfTsKICAgIHJldHVybiBUYXJnZXROUzsKfShGQVEuQWdlbnQuVGlja2V0Q29tcG9zZSB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgRkFRID0gRkFRIHx8IHt9OwpGQVEuQ3VzdG9tZXIgPSBGQVEuQ3VzdG9tZXIgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBGQVEuQ3VzdG9tZXIuVGlja2V0Wm9vbQogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBUaWNrZXRab29tLgogKi8KRkFRLkN1c3RvbWVyLkZBUVpvb20gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJZnJhbWVBdXRvSGVpZ2h0CiAgICAgKiBAbWVtYmVyb2YgRkFRLkN1c3RvbWVyLkZBUVpvb20KICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRJZnJhbWUgLSBUaGUgaWZyYW1lIHdoaWNoIHNob3VsZCBiZSBhdXRvLWhlaWdodGVkCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgU2V0IGlmcmFtZSBoZWlnaHQgYXV0b21hdGljYWxseSBiYXNlZCBvbiByZWFsIGNvbnRlbnQgaGVpZ2h0IGFuZCBkZWZhdWx0IGNvbmZpZyBzZXR0aW5nLgogICAgICovCiAgICAgVGFyZ2V0TlMuSWZyYW1lQXV0b0hlaWdodCA9IGZ1bmN0aW9uICgkSWZyYW1lKSB7CiAgICAgICAgdmFyIE5ld0hlaWdodCA9ICRJZnJhbWUKICAgICAgICAgICAgLmNvbnRlbnRzKCkKICAgICAgICAgICAgLmZpbmQoJ2h0bWwnKQogICAgICAgICAgICAuaGVpZ2h0KCk7CgogICAgICAgIGlmIChpc0pRdWVyeU9iamVjdCgkSWZyYW1lKSkgewoKICAgICAgICAgICAgLy8gSUU4IG5lZWRzIHNvbWUgbW9yZSBzcGFjZSBkdWUgdG8gaW5jb3JyZWN0IGhlaWdodCBjYWxjdWxhdGlvbgogICAgICAgICAgICBpZiAoTmV3SGVpZ2h0ID4gMCAmJiAkLmJyb3dzZXIubXNpZSAmJiAkLmJyb3dzZXIudmVyc2lvbiA9PT0gJzguMCcpIHsKICAgICAgICAgICAgICAgIE5ld0hlaWdodCA9IE5ld0hlaWdodCArIDQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGlmIHRoZSBpRnJhbWVzIGhlaWdodCBpcyAwLCB3ZSBjb2xsYXBzZSB0aGUgd2lkZ2V0CiAgICAgICAgICAgIGlmIChOZXdIZWlnaHQgPT09IDApIHsKICAgICAgICAgICAgICAgICRJZnJhbWUuY2xvc2VzdCgnbGkuQ3VzdG9tZXInKS5yZW1vdmVDbGFzcygnVmlzaWJsZScpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIU5ld0hlaWdodCB8fCBpc05hTihOZXdIZWlnaHQpKSB7CiAgICAgICAgICAgICAgICBOZXdIZWlnaHQgPSBDb3JlLkNvbmZpZy5HZXQoJ0ZBUTo6RnJvbnRlbmQ6OkN1c3RvbWVySFRNTEZpZWxkSGVpZ2h0RGVmYXVsdCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKE5ld0hlaWdodCA+IENvcmUuQ29uZmlnLkdldCgnRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHRNYXgnKSkgewogICAgICAgICAgICAgICAgICAgIE5ld0hlaWdodCA9IENvcmUuQ29uZmlnLkdldCgnRkFROjpGcm9udGVuZDo6Q3VzdG9tZXJIVE1MRmllbGRIZWlnaHRNYXgnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkSWZyYW1lLmhlaWdodChOZXdIZWlnaHQgKyAncHgnKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAbWVtYmVyb2YgRkFRLkN1c3RvbWVyLkZBUVpvb20KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkTWVzc2FnZSAtIGFuIEZBUSBmaWVsZC4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgY2xhc3Mgb2YgYSBGQVEgZmllbGQ6CiAgICAgKiAgICAgIHVzZXIgY2FsbHMgdGhpcyBmdW5jdGlvbiBieSBjbGlja2luZyBvbiB0aGUgZmllbGQgaGVhZCwgZmllbGQgZ2V0cyBoaWRkZW4gYnkgcmVtb3ZpbmcKICAgICAqICAgICAgdGhlIGNsYXNzICdWaXNpYmxlJy4gSWYgdGhlIGZpZWxkIGhlYWQgaXMgY2xpY2tlZCB3aGlsZSBpdCBkb2VzIG5vdCBjb250YWluIHRoZSBjbGFzcwogICAgICogICAgICAnVmlzaWJsZScsIHRoZSBmaWVsZCBnZXRzIHRoZSBjbGFzcyAnVmlzaWJsZScgYWdhaW4gYW5kIGl0IHdpbGwgYmUgc2hvd24uCiAgICAgKi8KICAgIGZ1bmN0aW9uIFRvZ2dsZU1lc3NhZ2UoJE1lc3NhZ2UpewogICAgICAgIGlmICgkTWVzc2FnZS5oYXNDbGFzcygnVmlzaWJsZScpKSB7CiAgICAgICAgICAgICRNZXNzYWdlLnJlbW92ZUNsYXNzKCdWaXNpYmxlJyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTWVzc2FnZS5hZGRDbGFzcygnVmlzaWJsZScpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQG1lbWJlcm9mIEZBUS5DdXN0b21lci5GQVFab29tCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBiaW5kcyBmdW5jdGlvbnMgdG8gdGhlICdNZXNzYWdlSGVhZGVyJwogICAgICogICAgICB0byB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIE1lc3NhZ2VCb2R5IGFuZCB0aGUgcmVwbHkgZm9ybS4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyICRNZXNzYWdlcyA9ICQoJyNNZXNzYWdlcyA+IGxpJyksCiAgICAgICAgICAgICRNZXNzYWdlSGVhZGVycyA9ICQoJy5NZXNzYWdlSGVhZGVyJywgJE1lc3NhZ2VzKTsKCiAgICAgICAgJE1lc3NhZ2VIZWFkZXJzLmNsaWNrKGZ1bmN0aW9uKEV2ZW50KXsKICAgICAgICAgICAgVG9nZ2xlTWVzc2FnZSgkKHRoaXMpLnBhcmVudCgpKTsKICAgICAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gaW5pdCBicm93c2VyIGxpbmsgbWVzc2FnZSBjbG9zZSBidXR0b24KICAgICAgICBpZiAoJCgnLkZBUU1lc3NhZ2VCcm93c2VyJykubGVuZ3RoKSB7CiAgICAgICAgICAgICQoJy5GQVFNZXNzYWdlQnJvd3NlciBhLkNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgQWN0aW9uOiAnQ3VzdG9tZXJGQVFab29tJywKICAgICAgICAgICAgICAgICAgICBTdWJhY3Rpb246ICdCcm93c2VyTGlua01lc3NhZ2UnCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICQoJy5GQVFNZXNzYWdlQnJvd3NlcicpLmZhZGVPdXQoInNsb3ciKTsKCiAgICAgICAgICAgICAgICAvLyBjYWxsIHNlcnZlciwgdG8gc2F2ZSB0aGF0IHRoZSBidXR0b24gd2FzIGNsb3NlZCBhbmQgZG8gbm90IHNob3cgaXQgYWdhaW4gb24gcmVsb2FkCiAgICAgICAgICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKAogICAgICAgICAgICAgICAgICAgIENvcmUuQ29uZmlnLkdldCgnQ0dJSGFuZGxlJyksCiAgICAgICAgICAgICAgICAgICAgRGF0YSwKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7fQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KEZBUS5DdXN0b21lci5GQVFab29tIHx8IHt9KSk7Cg==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gQXJ0aWNsZUxpc3QgRXhwYW5kaW5nCiAqLwoKLkZBUSAuT3ZlcnZpZXdDb250cm9sIGRpdiB7CiAgICBwYWRkaW5nOiAwcHg7Cn0KCi5GQVEgI092ZXJ2aWV3Qm9keSB7CiAgICBtYXJnaW46IDAgMCA4cHggMDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uIExhcmdlIFNpZGViYXJDb2x1bW4KICovCgouTGF5b3V0Rml4ZWRTaWRlYmFyLlNpZGViYXJMYXN0ID4gLlNpZGViYXJDb2x1bW4uTGFyZ2UgewogICAgd2lkdGg6IDM1MHB4OwogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi5MYXlvdXRGaXhlZFNpZGViYXIuU2lkZWJhckxhc3QgPiAuU2lkZWJhckNvbHVtbi5NZWRpdW0gewogICAgd2lkdGg6IDI5MHB4OwogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiBGQVFNaW5pTGlzdAogKi8KCnVsLkZBUU1pbmlMaXN0IHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCmlmcmFtZS5UZXh0T3B0aW9uLkZBUSB7CiAgICB3aWR0aDogOTAwcHg7CiAgICBtaW4taGVpZ2h0OiA2MDBweDsKfQoKaWZyYW1lLkZBUUZpZWxkIHsKICAgIHdpZHRoOiAxMDAlOwogICAgZnJhbWVib3JkZXI6IDA7Cn0KCmZpZWxkc2V0LlRhYmxlU21hbGwgPiBkaXYuRmllbGQgewogICAgbWFyZ2luLWxlZnQ6IDI0JSAhaW1wb3J0YW50Owp9CgpmaWVsZHNldC5UYWJsZVNtYWxsID4gbGFiZWwgewogICAgd2lkdGg6IDI0JSAhaW1wb3J0YW50Owp9CgpmaWVsZHNldC5UYWJsZVNtYWxsID4gZGl2LkZBUURpdmlkZXIgewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNDQ0NDQ0M7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLlRhYmxlU21hbGwgdGJvZHkgdHIuSW52YWxpZCB7CiAgICBjb2xvcjogI0NDQzsKfQoKfQoK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRkFRRGV0YWlscwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgoKLyoqCiAqIEBzdWJzZWN0aW9uICBBcnRpY2xlIHRhYmxlIGJvZHkKICovCgouQXJ0aWNsZUZBUUNvbnRlbnQgewogICAgcGFkZGluZzogMTFweCAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzsKfQoKLkFydGljbGVGQVFDb250ZW50IC5GQVFWb3RlRm9ybSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5BcnRpY2xlRkFRQ29udGVudCBwLkNlbnRlciB7CiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgIG1hcmdpbjogMHB4IDUwcHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsKfQoKLkFydGljbGVGQVFDb250ZW50IC5GQVFWb3RlRm9ybSAuQ2FsbEZvckFjdGlvbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMTBweCBhdXRvIDBweCBhdXRvOwp9CgouQXJ0aWNsZUZBUUNvbnRlbnQgLkZBUVZvdGVGb3JtIC5DYWxsRm9yQWN0aW9uLkhpZGRlbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgouRkFRU3RhdGVOYW1lIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiAxMHB4OwogICAgdG9wOiA3cHg7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKZmllbGRzZXQgLkZBUVN0YXRlTmFtZSB7CiAgICBwb3NpdGlvbjogc3RhdGljOwp9CgouUmF0ZUJ1dHRvbnMgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouUmF0ZUJ1dHRvbnMgPiBsaSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouUmF0ZUJ1dHRvbnMgPiBsaTpmaXJzdC1jaGlsZCwKLlJhdGVCdXR0b25zID4gbGk6bGFzdC1jaGlsZCB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLlZpc2libGUtU2NyZWVuUyAuUmF0ZUJ1dHRvbnMgPiBsaSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbi10b3A6IDVweDsKICAgIG1hcmdpbi1ib3R0b206IDE1cHg7Cn0KCi5WaXNpYmxlLVNjcmVlblMgLlJhdGVCdXR0b25zID4gbGkgc3BhbiB7CiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKfQoKLlJhdGVCdXR0b24gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICB3aWR0aDogMjVweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZsb2F0OiBsZWZ0OwogICAgY29sb3I6ICMwMDAwMDA7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5SYXRlQnV0dG9uIGkgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiAjOTk5Owp9CgouUmF0ZUJ1dHRvbiBpLmZhLXN0YXIgewogICAgZGlzcGxheTogbm9uZTsKfQoKLlJhdGVCdXR0b24uUmF0ZUNoZWNrZWQgaS5mYS1zdGFyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgY29sb3I6ICNFOTdEMzQ7Cn0KCi5SYXRlQnV0dG9uLlJhdGVDaGVja2VkIGkuZmEtc3Rhci1vIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5SYXRlQnV0dG9uOmhvdmVyIGkuZmEtc3Rhci1vIHsKICAgIGNvbG9yOiAjMDAwOwp9CgouUmF0ZVN0YXIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBmbG9hdDogbGVmdDsKICAgIHBhZGRpbmctbGVmdDogMXB4OwogICAgZm9udC1zaXplOiAxMHB4Owp9CgouUmF0ZVN0YXJUZXh0IHsKICAgIHRleHQtaW5kZW50OjVweDsKfQoKLlJhdGVMYWJlbEJlZm9yZSwKLlJhdGVMYWJlbEFmdGVyIHsKICAgIGNvbG9yOiAjMzMzOwogICAgcGFkZGluZy10b3A6IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouUmF0ZUxhYmVsQmVmb3JlIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgcGFkZGluZy1yaWdodDogNnB4Owp9CgouUmF0ZUxhYmVsQWZ0ZXIgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBwYWRkaW5nLWxlZnQ6IDVweDsKfQoKLlpvb21TbWFsbEJ1dHRvbnsKICAgIG1hcmdpbi1sZWZ0OiAxMnB4Owp9CgouRkFRTWVzc2FnZUJyb3dzZXIgewogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIHBhZGRpbmc6IDBweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLkZBUU1lc3NhZ2VCcm93c2VyIHAgewogICAgIHBhZGRpbmc6IDVweCAyMHB4OwogICAgIGJhY2tncm91bmQtY29sb3I6ICNFOEU4RTg7CiAgICAgZm9udC1zaXplOiAxMXB4OwogICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLkZBUU1lc3NhZ2VCcm93c2VyIGEuQ2xvc2UgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMTJweDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiA0cHg7CiAgICB0b3A6IDZweDsKICAgIGNvbG9yOiAjNUQ1RDVEOwp9CgouRkFRTWVzc2FnZUJyb3dzZXIgYS5DbG9zZTpob3ZlciB7CiAgICBjb2xvcjogIzAwMDsKfQp9Cg==
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmJJREFUeNqkU0toE1EUPZkk84n5GMnHfrRBKRS0xCK21SKE1IUVV7oWgxa7KW6kkK2LghhdiBuDRURxIa6lOwlCjSgBJbhKhSjakibSTP7J/HzvTTMYcNcHZ97Mvfec9+7hjs0wDOxnOegjdmMDbrcHPt9BiKIU4ThuiYQXCMb36goE67qupzuddlGWq2g06sg8mzMF+osUJDh0U7Epd+Ds5AEMB830VlmNZvPNaCbXXiQ1KyT0fOAGfbLk7KST18f4yBAPszWN5Y6GbRg77MHsSSGwuvYjLes6+iJMQFGUiK62UsnEcX40yNFvXLj1aaDXh3cmcGrCh2RihL99L58iNRkSLnI0Wa83luanfYHRkJ2RVVXFtctDDOenvKjVavj4dYflaE38jC9AOZTLBNrtzsL8bIgVaJrGcDXux8UZHkFvl+ZRKu2gUChgc/M7Zk6IjGO1oOvceGTYRfYeO12Wa2i12vj8rYEnb7YxPRnCzStHiPMNUGvCfjvjWAIOhwsw6E26hFynhsJud+L+iypsNgmry8fQbDZJHc/8MMjFGacvIIreQuFnK3rI1SNEnsA0LvvqHNsrlV04naJl6K+yybE8kCT/+vucQocIPC9YuLT8m+HfmCCIyOZNjiUgCJ50JmerlGUqILHTKETRx9D/ptj+I+BD3lmhHEuA9FvsqeLKg5dqr7QrsEKHQ8Tbx2EG+k5jW4T86DV6tJZyBiaRTla5auDu004qdpoPzEWdGDGYY6RnDhtfFGRySqXVMQZG2UZHNr5YYubtrQjBf38mAnptdrKm9fBuLWwK7Gf9FWAAFbMKX7AnppcAAAAASUVORK5CYII=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIExheW91dEZpeGVkU2lkZWJhcgogKi8KCiNGb290ZXIgewogICAgY2xlYXI6IGJvdGg7CiAgICBwYWRkaW5nLXRvcDogMjBweDsKfQoKLkxheW91dEZpeGVkU2lkZWJhciB7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLkxheW91dEZpeGVkU2lkZWJhciA+IC5Db250ZW50Q29sdW1uIHsKICAgIC8qKgogICAgICogQG5vdGUgICAgZm9yY2Ugb3duIEJsb2NrIEZvcm1hdHRpbmcgQ29udGV4dCBmb3IgbmVzdGVkIGZsb2F0cwogICAgICovCiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgouTGF5b3V0Rml4ZWRTaWRlYmFyID4gLlNpZGViYXJDb2x1bW4gewogICAgb3ZlcmZsb3cteDogaGlkZGVuOwp9CgouTGF5b3V0Rml4ZWRTaWRlYmFyLlNpZGViYXJMYXN0ID4gLlNpZGViYXJDb2x1bW4gewogICAgd2lkdGg6IDI3MHB4OwogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi5SVEwgLkxheW91dEZpeGVkU2lkZWJhci5TaWRlYmFyTGFzdCA+IC5TaWRlYmFyQ29sdW1uIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7Cn0KCi5MYXlvdXRGaXhlZFNpZGViYXIuU2lkZWJhckZpcnN0ID4gLlNpZGViYXJDb2x1bW4gewogICAgd2lkdGg6IDI3MHB4OwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogMTBweDsKfQoKLlJUTCAuTGF5b3V0Rml4ZWRTaWRlYmFyLlNpZGViYXJGaXJzdCA+IC5TaWRlYmFyQ29sdW1uIHsKICAgIGZsb2F0OiByaWdodDsKICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgbWFyZ2luLXJpZ2h0OiAwOwp9CgovKioKICogQHN1YnNlY3Rpb24gTGFyZ2UgU2lkZWJhckNvbHVtbgogKi8KCi5MYXlvdXRGaXhlZFNpZGViYXIuU2lkZWJhckxhc3QgPiAuU2lkZWJhckNvbHVtbi5MYXJnZSB7CiAgICB3aWR0aDogMzAwcHg7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICBDdXN0b21lciBXaWRnZXRTaW1wbGUKICovCgouV2lkZ2V0U2ltcGxlIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNFOUU5RTk7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0ZGRjsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjREREOwogICAgcGFkZGluZzogMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiBhdXRvOwogICAgei1pbmRleDogMTA7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgouV2lkZ2V0U2ltcGxlIC5IZWFkZXIgewogICAgcGFkZGluZzogNXB4IDhweCAzcHg7CiAgICBjb2xvcjogIzIyMjsKICAgIGJhY2tncm91bmQ6ICNlZWVlZWU7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0Q2RDZENjsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNGRkY7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5XaWRnZXRTaW1wbGUgLkhlYWRlciBoMyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZsb2F0OiBsZWZ0Owp9CgouUlRMIC5XaWRnZXRTaW1wbGUgLkhlYWRlciBoMyB7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5XaWRnZXRTaW1wbGUgLkhlYWRlciBoMyBzcGFuIHsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KCi5XaWRnZXRTaW1wbGUgLkNvbnRlbnQgewogICAgaGVpZ2h0OiBhdXRvOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBhZGRpbmc6IDEzcHggOHB4OwogICAgYmFja2dyb3VuZDogI0ZGRjsKICAgIGJvcmRlcjogMCBub25lOwp9CgouV2lkZ2V0U2ltcGxlIC5QYWdpbmF0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uIEZBUUhlYWRlcgogKi8KCi5GQVFIZWFkZXIgaDIgewogICAgbWFyZ2luOiAzcHggMCAwOwogICAgZm9udC1zaXplOiAyNHB4OwogICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBmbG9hdDogbGVmdDsKfQouUlRMIC5GQVFIZWFkZXIgaDIgewogICAgZmxvYXQ6IHJpZ2h0Owp9CgovKioKICogQHN1YnNlY3Rpb24gT3ZlcnZpZXcKICovCgouT3ZlcnZpZXcgdGhlYWQgewogICAgYmFja2dyb3VuZDogI2NjY2NjYzsKICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKfQoKLk92ZXJ2aWV3IHRoZWFkIHRoIHsKICAgIGNvbG9yOiAjNEI0QjRCOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0ZGRjsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkJCOwogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0NDQzsKICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgovKioKICogQHN1YnNlY3Rpb24gRkFRTWluaUxpc3QKICovCgp1bC5GQVFNaW5pTGlzdCBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZm9udC1zaXplOiAxMHB4Owp9CgppZnJhbWUuRkFRRmllbGQgewogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDBweDsKICAgIG1hcmdpbjogN3B4Owp9Cgp9CgoK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRkFRRGV0YWlscwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgouQXJ0aWNsZUZBUUNvbnRlbnQgewogICAgcGFkZGluZzogMTFweCAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzsKfQoKLlJhdGVCdXR0b24gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICB3aWR0aDogMjVweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZsb2F0OiBsZWZ0OwogICAgY29sb3I6ICMwMDAwMDA7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5SVEwgLlJhdGVCdXR0b24gewogICAgZmxvYXQ6IHJpZ2h0Owp9CgouUmF0ZUJ1dHRvbiBpIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgd2lkdGg6IDEwMCU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBjb2xvcjogIzk5OTsKfQoKLlJhdGVCdXR0b24gaS5mYS1zdGFyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5SYXRlQnV0dG9uLlJhdGVDaGVja2VkIGkuZmEtc3RhciB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGNvbG9yOiAjRTk3RDM0Owp9CgouUmF0ZUJ1dHRvbi5SYXRlQ2hlY2tlZCBpLmZhLXN0YXItbyB7CiAgICBkaXNwbGF5OiBub25lOwp9CgouUmF0ZUJ1dHRvbjpob3ZlciBpLmZhLXN0YXItbyB7CiAgICBjb2xvcjogIzAwMDsKfQoKLlJhdGVTdGFyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgaGVpZ2h0OiAxNnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBwYWRkaW5nLWxlZnQ6IDFweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKfQoKLlJUTCAuUmF0ZVN0YXIgewogICAgZmxvYXQ6IHJpZ2h0Owp9CgouUmF0ZVN0YXJUZXh0IHsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7Cn0KCi5SVEwgLlJhdGVTdGFyVGV4dCB7CiAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgbWFyZ2luLXJpZ2h0OiA2cHg7Cn0KCi5SYXRlTGFiZWxCZWZvcmUgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwogICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICBjb2xvcjogR3JheTsKfQoKLlJUTCAuUmF0ZUxhYmVsQmVmb3JlIHsKICAgIGZsb2F0OiByaWdodDsKfQoKLlJhdGVMYWJlbEFmdGVyIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLWxlZnQ6IDVweDsKICAgIG1hcmdpbi1yaWdodDogMjVweDsKICAgIGNvbG9yOiBHcmF5Owp9CgouUlRMIC5SYXRlTGFiZWxBZnRlciB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDY1cHg7Cn0KCi5SYXRpbmdMYWJlbCB7CiAgICBmbG9hdDogbGVmdDsKICAgIHBhZGRpbmctcmlnaHQ6IDJweDsKfQoKLlJUTCAuUmF0aW5nTGFiZWwgewogICAgZmxvYXQ6IHJpZ2h0OwogICAgcGFkZGluZy1sZWZ0OiAycHgKfQoKLlNwYWNpbmdUb3AgewogICAgbWFyZ2luLXRvcDogMTNweDsKfQoKLlNwYWNpbmdUb3BMYXJnZSB7CiAgICBtYXJnaW4tdG9wOiAyNnB4Owp9CgouUlRMIC5Wb3RpbmdDb250YWluZXIgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouVm90aW5nUXVlc3Rpb24gewogICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICBtYXJnaW4tcmlnaHQ6MTBweDsKICAgIGNvbG9yOiAjMDAwMDAwOwp9CgouVm90aW5nQm94IHsKICAgIG1pbi13aWR0aDogMjBwYzsKICAgIG1hcmdpbjogMCAzMHB4IDIxcHg7CiAgICBjb2xvcjogIzZBNkE2QTsKICAgIGJhY2tncm91bmQ6ICNGOUY5Rjk7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNENkQ2RDY7CiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjRDZENkQ2OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNENkQ2RDY7Cn0KCi5Wb3RpbmdCb3ggPiAjTWVzc2VuZ2VyIHsKICAgIGhlaWdodDogYXV0bzsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRUVFOwp9CgouUlNTSWNvbiB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMjhweDsKfQoKLkRvd25sb2FkQXR0YWNobWVudCBhLAouS2V5d29yZCBhIHsKICAgIGNvbG9yOiAjRkY5OTIyOwp9CgouRG93bmxvYWRBdHRhY2htZW50IGE6aG92ZXIsCi5LZXl3b3JkIGE6aG92ZXIgewogICAgY29sb3I6ICNGRjc3MjI7Cn0KCi5Wb3RpbmdBY3Rpb25Sb3cgewogICAgaGVpZ2h0OiAyM3B4Owp9CgouRkFRTWVzc2FnZUJyb3dzZXIgewogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIG1hcmdpbi10b3A6IDVweDsKICAgIHBhZGRpbmc6IDBweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKfQoKLkZBUU1lc3NhZ2VCcm93c2VyIHAgewogICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgcGFkZGluZzogNXB4OwogICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUU7CiAgICAgZm9udC1zaXplOiAxMXB4OwogICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQouRkFRTWVzc2FnZUJyb3dzZXIgYS5DbG9zZSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDRweDsKICAgIHRvcDogNnB4OwogICAgY29sb3I6ICM1RDVENUQ7Cn0KCi5GQVFNZXNzYWdlQnJvd3NlciBhLkNsb3NlOmhvdmVyIHsKICAgIGNvbG9yOiAjMDAwOwp9Cn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgV2lkZ2V0cwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgoKLyoqCiAqIEBzdWJzZWN0aW9uICBXaWRnZXRCb3gKICovCgouQ2FsbEZvckFjdGlvbiB7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBiYWNrZ3JvdW5kOiAjZWVlOwogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYmJiOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIGVhc2UtaW4gMC4yczsKfQoKLyoqCiAqIEBjc3MtZm9yICAgICBGaXJlZm94CiAqIEBub3RlICAgICAgICBidWc6IGJ1dHRvbiBjb250YWluaW5nIGFuIGVsZW1lbnQgaGFzIGFuIGhpZGRlbiBwYWRkaW5nCiAqLwoKLkNhbGxGb3JBY3Rpb246Oi1tb3otZm9jdXMtaW5uZXIgewogICAgYm9yZGVyOiAwOwogICAgcGFkZGluZzogMDsKfQoKLkNhbGxGb3JBY3Rpb246aG92ZXIgewogICAgY29sb3I6ICMwMDA7CiAgICBib3JkZXItY29sb3I6ICM2OTY5Njk7Cn0KCi5DYWxsRm9yQWN0aW9uIHNwYW4gewogICAgaGVpZ2h0OiAxMnB4OwogICAgcGFkZGluZzogM3B4IDdweCA2cHg7CiAgICBsaW5lLWhlaWdodDogMTRweDsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBjb2xvcjogIzMzMzsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNGRkY7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgZGlzcGxheTogYmxvY2s7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjRkZGOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouQ2FsbEZvckFjdGlvbiBzcGFuIGkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogMHB4OwogICAgdG9wOiAxcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICB3aWR0aDogMTVweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLkNhbGxGb3JBY3Rpb246YWN0aXZlLAouQ2FsbEZvckFjdGlvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTVlNWU1OwogICAgYm9yZGVyLWNvbG9yOiAjOTk5Owp9CgouU2VhcmNoQm94IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLlNlYXJjaEJveCBpbnB1dFt0eXBlPSd0ZXh0J10gewogICAgaGVpZ2h0OiAxNXB4OwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiA0cHggNXB4OwogICAgZm9udDogbm9ybWFsIDEycHgvMTVweCAiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOwogICAgYm9yZGVyLWNvbG9yOiAjOTk5OwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKICAgIHdpZHRoOiAxM3BjOwp9CgouSW52aXNpYmxlVGV4dCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBoZWlnaHQ6IDA7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWluZGVudDogLTk5OTlweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB3aWR0aDogMDsKfQoKLlJUTCAuU2VhcmNoQm94IGlucHV0W3R5cGU9J3RleHQnXXsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzk5OTsKICAgIHdpZHRoOiAxM3BjOwp9CgouU2VhcmNoQm94IGlucHV0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKfQouUlRMIC5TZWFyY2hCb3ggaW5wdXQ6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiAjNjY2OwogICAgYm9yZGVyLWxlZnQ6IG5vbmU7Cn0KCi5TZWFyY2hCb3ggYnV0dG9uIHsKICAgIGhlaWdodDogMjVweDsKICAgIG1hcmdpbjogMCAwIDAgLTRweDsKICAgIHBhZGRpbmc6IDNweCAzcHggNHB4OwogICAgY29sb3I6ICMzMzM7CiAgICBmb250OiBib2xkIDEwcHgvMTNweCAiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOwogICAgYmFja2dyb3VuZDogI0VFRTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICM4ODg7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjRkZGOwogICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwp9CgouUlRMIC5TZWFyY2hCb3ggYnV0dG9uIHsKICAgIGhlaWdodDogMjVweDsKICAgIG1hcmdpbjogMCAtNHB4IDAgMDsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNGRkY7CiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjODg4Owp9CgouU2VhcmNoQm94IGJ1dHRvbjpob3ZlciwKLlNlYXJjaEJveCBidXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKfQo=
LyoqCiAqIEBwcm9qZWN0ICAgICBGQVEgKGh0dHA6Ly93d3cub3Rycy5vcmcpIC0gQ3VzdG9tZXIgRnJvbnRlbmQKICogQGNvcHlyaWdodCAgIE9UUlMgQUcKICogQGxpY2Vuc2UgICAgIEFHUEwgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dCkKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBwYWNrYWdlICAgICBGQVEgLSBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRkFRWm9vbQogKi8KCi8qKgogKiBAc2VjdGlvbiAgICAgSGVhZGVyCiAqLwoKLkZBUUhlYWRlciB7CiAgICB3aWR0aDogODAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLkZBUUhlYWRlciBoMiB7CiAgICBtYXJnaW46IDNweCAwIDA7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICBsaW5lLWhlaWdodDogMjRweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGZsb2F0OiBsZWZ0Owp9Ci5SVEwgLkZBUUhlYWRlciBoMiB7CiAgICBwYWRkaW5nOiAwIDM2cHggMCAwOwogICAgZmxvYXQ6IHJpZ2h0Owp9CgouRkFRSGVhZGVyIC5GQVFIb29rIHsKICAgIGNvbG9yOiAjNjY2OwogICAgZm9udC1zaXplOiAxMnB4Owp9CgouTWVzc2FnZUJvZHkgewogICAgcGFkZGluZzogMHB4IDE1cHg7Cn0KCiNGQVFPcHRpb25zIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMHB4OwogICAgdG9wOiAxMHB4Owp9CgojRkFRT3B0aW9ucyBsaSB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7Cn0KCiNGQVFPcHRpb25zIC5QcmludCB7CiAgICBjb2xvcjogIzc3NzsKICAgIGZvbnQtc2l6ZTogMTVweDsKfQojRkFRT3B0aW9ucyAuUHJpbnQ6aG92ZXIgewogICAgY29sb3I6ICNmOTI7Cn0KI0ZBUU9wdGlvbnMgLlByaW50IHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICB0ZXh0LWluZGVudDogLTk5OTlweDsKfQoKbGkuS2V5d29yZHNDb250YWluZXIgewogICAgbWFyZ2luLXRvcDogNXB4OwogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgpkaXYuQXR0YWNobWVudHMgewogICAgbWFyZ2luLXRvcDogMTBweDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKfQoKLkF0dGFjaG1lbnRzIC5MYWJlbCB7CiAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgc2Nyb2xsIHJpZ2h0IGNlbnRlciB0cmFuc3BhcmVudDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB0ZXh0LWluZGVudDogLTk5OTlweDsKICAgIGNvbG9yOiAjQUFBQUFBOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW46IDAgM3B4OwogICAgd2lkdGg6IDEwcHg7Cn0KCi5SVEwgLkF0dGFjaG1lbnRzIC5MYWJlbCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0OwogICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7CiAgICB0ZXh0LWFsaWduOnJpZ2h0OwogICAgZmxvYXQ6IHJpZ2h0Owp9CgouQXR0YWNobWVudHMgZGl2IHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLkF0dGFjaG1lbnRzIC5Eb3dubG9hZEF0dGFjaG1lbnQgewogICAgbWFyZ2luLWxlZnQ6IDJweDsKfQoKfSAvKiBlbmQgQG1lZGlhICov
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgdmFyOjpwYWNrYWdlc2V0dXA6OkZBUTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Ok91dHB1dDo6VGVtcGxhdGU6OlByb3ZpZGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkZBUScsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN0YXRzJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAopOwoKPWhlYWQxIE5BTUUKCkZBUS5wbSAtIGNvZGUgdG8gZXhlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ3Zhcjo6cGFja2FnZXNldHVwOjpGQVEnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyByZWJ1aWxkIFpaWiogZmlsZXMKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKS0+V3JpdGVEZWZhdWx0KCk7CgogICAgIyBkZWZpbmUgdGhlIFpaWiBmaWxlcwogICAgbXkgQFpaWkZpbGVzID0gKAogICAgICAgICdaWlpBQXV0by5wbScsCiAgICAgICAgJ1paWkF1dG8ucG0nLAogICAgKTsKCiAgICAjIHJlbG9hZCB0aGUgWlpaIGZpbGVzIChtb2RfcGVybCB3b3JrYXJvdW5kKQogICAgZm9yIG15ICRaWlpGaWxlIChAWlpaRmlsZXMpIHsKCiAgICAgICAgUFJFRklYOgogICAgICAgIGZvciBteSAkUHJlZml4IChASU5DKSB7CiAgICAgICAgICAgIG15ICRGaWxlID0gJFByZWZpeCAuICcvS2VybmVsL0NvbmZpZy9GaWxlcy8nIC4gJFpaWkZpbGU7CiAgICAgICAgICAgIG5leHQgUFJFRklYIGlmICEtZiAkRmlsZTsKICAgICAgICAgICAgZG8gJEZpbGU7CiAgICAgICAgICAgIGxhc3QgUFJFRklYOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFsd2F5cyBkaXNjYXJkIHRoZSBjb25maWcgb2JqZWN0IGJlZm9yZSBwYWNrYWdlIGNvZGUgaXMgZXhlY3V0ZWQsCiAgICAjIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25maWcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBuZXdseSwgc28gdGhhdCBpdAogICAgIyB3aWxsIHVzZSB0aGUgcmVjZW50bHkgd3JpdHRlbiBuZXcgY29uZmlnIGZyb20gdGhlIHBhY2thZ2UKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICBPYmplY3RzID0+IFsnS2VybmVsOjpDb25maWcnXSwKICAgICk7CgogICAgIyB0aGUgc3RhdHMgb2JqZWN0IG5lZWRzIGEgVXNlcklEIHBhcmFtZXRlciBmb3IgdGhlIGNvbnN0cnVjdG9yCiAgICAjIHdlIG5lZWQgdG8gZGlzY2FyZCBhbnkgZXhpc3Rpbmcgc3RhdHMgb2JqZWN0IGJlZm9yZQogICAgJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKAogICAgICAgIE9iamVjdHMgPT4gWydLZXJuZWw6OlN5c3RlbTo6U3RhdHMnXSwKICAgICk7CgogICAgIyBkZWZpbmUgVXNlcklEIHBhcmFtZXRlciBmb3IgdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBzdGF0cyBvYmplY3QKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlN0YXRzJyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZGVmaW5lIGZpbGUgcHJlZml4CiAgICAkU2VsZi0+e0ZpbGVQcmVmaXh9ID0gJ0ZBUSc7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBpbnNlcnQgdGhlIEZBUSBzdGF0ZXMKICAgICRTZWxmLT5fSW5zZXJ0RkFRU3RhdGVzKCk7CgogICAgIyBhZGQgdGhlIGdyb3VwIEZBUQogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZmFxJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxIGRhdGFiYXNlIHVzZXJzJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGZhcV9hZG1pbgogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZmFxX2FkbWluJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxIGFkbWluIHVzZXJzJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGZhcV9hcHByb3ZhbAogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZmFxX2FwcHJvdmFsJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxIGFwcHJvdmFsIHVzZXJzJywKICAgICk7CgogICAgIyBhZGQgdGhlIEZBUSBncm91cHMgdG8gdGhlIGNhdGVnb3J5ICdNaXNjJwogICAgJFNlbGYtPl9DYXRlZ29yeUdyb3VwU2V0KAogICAgICAgIENhdGVnb3J5ID0+ICdNaXNjJywKICAgICAgICBHcm91cHMgICA9PiBbICdmYXEnLCAnZmFxX2FkbWluJywgJ2ZhcV9hcHByb3ZhbCcgXSwKICAgICk7CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBGQVEgbGFuZ3VhZ2VzCiAgICAkU2VsZi0+X0NyZWF0ZUFkaXRpb25hbEZBUUxhbmd1YWdlcygpOwoKICAgICMgaW5zdGFsbCBzdGF0cwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRzJyktPlN0YXRzSW5zdGFsbCgKICAgICAgICBGaWxlUHJlZml4ID0+ICRTZWxmLT57RmlsZVByZWZpeH0sCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVJlaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgcmVpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVSZWluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlUmVpbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBpbnNlcnQgdGhlIEZBUSBzdGF0ZXMKICAgICRTZWxmLT5fSW5zZXJ0RkFRU3RhdGVzKCk7CgogICAgIyBhZGQgdGhlIGdyb3VwIEZBUQogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZmFxJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxIGRhdGFiYXNlIHVzZXJzJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGZhcV9hZG1pbgogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZmFxX2FkbWluJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxIGFkbWluIHVzZXJzJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGZhcV9hcHByb3ZhbAogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZmFxX2FwcHJvdmFsJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxIGFwcHJvdmFsIHVzZXJzJywKICAgICk7CgogICAgIyBpbnN0YWxsIHN0YXRzCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdHMnKS0+U3RhdHNJbnN0YWxsKAogICAgICAgIEZpbGVQcmVmaXggPT4gJFNlbGYtPntGaWxlUHJlZml4fSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgRkFRIGxhbmd1YWdlcwogICAgJFNlbGYtPl9DcmVhdGVBZGl0aW9uYWxGQVFMYW5ndWFnZXMoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVwZ3JhZGUoKQoKcnVuIHRoZSBjb2RlIHVwZ3JhZGUgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGUoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaW5zdGFsbCBzdGF0cwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRzJyktPlN0YXRzSW5zdGFsbCgKICAgICAgICBGaWxlUHJlZml4ID0+ICRTZWxmLT57RmlsZVByZWZpeH0sCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNyZWF0ZSBhZGRpdGlvbmFsIEZBUSBsYW5ndWFnZXMKICAgICRTZWxmLT5fQ3JlYXRlQWRpdGlvbmFsRkFRTGFuZ3VhZ2VzKCk7CgogICAgIyBkZWxldGUgdGhlIEZBUSBjYWNoZSAodG8gYXZvaWQgb2xkIGRhdGEgZnJvbSBwcmV2aW91cyBGQVEgbW9kdWxlcykKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZVNwZWNpYWwoKQoKcnVuIHNwZWNpYWwgY29kZSB1cGdyYWRlIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlU3BlY2lhbCgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlU3BlY2lhbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY29udmVydCBcbiB0byA8YnI+IGZvciBleGlzdGluZyBhcnRpY2xlcwogICAgJFNlbGYtPl9Db252ZXJ0TmV3bGluZXMoKTsKCiAgICAjIHN0YXJ0IG5vcm1hbCBjb2RlIHVwZ3JhZGUKICAgICRTZWxmLT5Db2RlVXBncmFkZSgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzEoKQoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBpbnN0YWxsZWQgbW9kdWxlIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIDQuMC4xLgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzEgeyAgICAjIyBubyBjcml0aWMKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBtaWdyYXRlIHRoZSBEVEwgQ29udGVudCBpbiB0aGUgU3lzQ29uZmlnCiAgICAkU2VsZi0+X01pZ3JhdGVEVExJblN5c0NvbmZpZygpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiA0LjAuOTEuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hhbmdlIGNvbmZpZ3VyYXRpb25zIHRvIG1hdGNoIHRoZSBuZXcgbW9kdWxlIGxvY2F0aW9uLgogICAgJFNlbGYtPl9NaWdyYXRlQ29uZmlncygpOwoKICAgICMgc2V0IGNvbnRlbnQgdHlwZQogICAgJFNlbGYtPl9TZXRDb250ZW50VHlwZSgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVW5pbnN0YWxsKCkKCnJ1biB0aGUgY29kZSB1bmluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVuaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVVbmluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHJlbW92ZSBEeW5hbWljIEZpZWxkcyBhbmQgaXRzIHZhbHVlcwogICAgJFNlbGYtPl9EeW5hbWljRmllbGRzRGVsZXRlKCk7CgogICAgIyBkZWFjdGl2YXRlIHRoZSBncm91cCBGQVEKICAgICRTZWxmLT5fR3JvdXBEZWFjdGl2YXRlKAogICAgICAgIE5hbWUgPT4gJ2ZhcScsCiAgICApOwoKICAgICMgZGVhY3RpdmF0ZSB0aGUgZ3JvdXAgZmFxX2FkbWluCiAgICAkU2VsZi0+X0dyb3VwRGVhY3RpdmF0ZSgKICAgICAgICBOYW1lID0+ICdmYXFfYWRtaW4nLAogICAgKTsKCiAgICAjIGRlYWN0aXZhdGUgdGhlIGdyb3VwIGZhcV9hcHByb3ZhbAogICAgJFNlbGYtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAnZmFxX2FwcHJvdmFsJywKICAgICk7CgogICAgIyB1bmluc3RhbGwgc3RhdHMKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0cycpLT5TdGF0c1VuaW5zdGFsbCgKICAgICAgICBGaWxlUHJlZml4ID0+ICRTZWxmLT57RmlsZVByZWZpeH0sCiAgICApOwoKICAgICMgZGVsZXRlIGFsbCBsaW5rcyB3aXRoIEZBUSBhcnRpY2xlcwogICAgJFNlbGYtPl9MaW5rRGVsZXRlKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9JbnNlcnRGQVFTdGF0ZXMoKQoKaW5zZXJ0cyBuZWVkZWQgRkFRIHN0YXRlcyBpbnRvIHRhYmxlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fSW5zZXJ0RkFRU3RhdGVzKCk7Cgo9Y3V0CgpzdWIgX0luc2VydEZBUVN0YXRlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVmaW5lIGZhcV9zdGF0ZV90eXBlcyA9PiBmYXFfc3RhdGVzCiAgICBteSAlU3RhdGUgPSAoCiAgICAgICAgJ2ludGVybmFsJyA9PiAnaW50ZXJuYWwgKGFnZW50KScsCiAgICAgICAgJ2V4dGVybmFsJyA9PiAnZXh0ZXJuYWwgKGN1c3RvbWVyKScsCiAgICAgICAgJ3B1YmxpYycgICA9PiAncHVibGljIChhbGwpJywKICAgICk7CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICBmb3IgbXkgJFR5cGUgKCBzb3J0IGtleXMgJVN0YXRlICkgewoKICAgICAgICAjIGdldCB0aGUgc3RhdGUgdHlwZQogICAgICAgIG15ICRTdGF0ZVR5cGVSZWYgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgICAgIE5hbWUgICA9PiAkVHlwZSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgdGhlIHN0YXRlCiAgICAgICAgJEZBUU9iamVjdC0+U3RhdGVBZGQoCiAgICAgICAgICAgIE5hbWUgICA9PiAkU3RhdGV7JFR5cGV9LAogICAgICAgICAgICBUeXBlSUQgPT4gJFN0YXRlVHlwZVJlZi0+e1N0YXRlSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfQ29udmVydE5ld2xpbmVzKCkKCmNvdmVydHMgYWxsIFxuIGludG8gPGJyPiBmb3IgRmllbGRzIDEtNiBpbiBhbGwgZXhpc3RpbmcgRkFRIGFydGljbGVzCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQ29udmVydE5ld2xpbmVzKCk7Cgo9Y3V0CgpzdWIgX0NvbnZlcnROZXdsaW5lcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgb25seSBjb252ZXJ0IFxuIHRvIDxicj4gaWYgSFRNTCB2aWV3IGlzIGVuYWJsZWQKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGQVE6Okl0ZW06OkhUTUwnKTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZ2V0IGFsbCBGQVEgSURzCiAgICBteSBARkFRSURzOwogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gZmFxX2l0ZW0iLAogICAgKTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2goIEBGQVFJRHMsICRSb3dbMF0gKTsKICAgIH0KCiAgICAjIGdldCBGQVEgb2JqZWN0CiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgIElEOgogICAgZm9yIG15ICRJdGVtSUQgKEBGQVFJRHMpIHsKCiAgICAgICAgIyBnZXQgRkFRIGRhdGEKICAgICAgICBteSAlRkFRID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgICAgICAgICBJdGVtSUQgICAgID0+ICRJdGVtSUQsCiAgICAgICAgICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IEZBUSBhcnRpY2xlIGZpZWxkcyAxLTYKICAgICAgICBteSAkRm91bmROZXdsaW5lOwogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAocXcgKEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNCBGaWVsZDUgRmllbGQ2KSkgewogICAgICAgICAgICBuZXh0IEtFWSBpZiAhJEZBUXskS2V5fTsKCiAgICAgICAgICAgICMgcmVwbGFjZSBcbiB3aXRoIDxicj4KICAgICAgICAgICAgJEZBUXskS2V5fSA9fiBzL1xuLzxiclwvPlxuL2c7CgogICAgICAgICAgICAkRm91bmROZXdsaW5lID0gMTsKICAgICAgICB9CiAgICAgICAgbmV4dCBJRCBpZiAhJEZvdW5kTmV3bGluZTsKCiAgICAgICAgIyB1cGRhdGUgRkFRIGRhdGEKICAgICAgICAkRkFRT2JqZWN0LT5GQVFVcGRhdGUoCiAgICAgICAgICAgICVGQVEsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9Hcm91cEFkZCgpCgphZGQgYSBncm91cAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICd0aGUtZ3JvdXAtbmFtZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1RoZSBncm91cCBkZXNjcmlwdGlvbi4nLAogICAgKTsKCj1jdXQKCnN1YiBfR3JvdXBBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBEZXNjcmlwdGlvbikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICMgZ2V0IGdyb3VwIG9iamVjdAogICAgbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgogICAgIyBnZXQgbGlzdCBvZiBhbGwgZ3JvdXBzCiAgICBteSAlR3JvdXBMaXN0ID0gJEdyb3VwT2JqZWN0LT5Hcm91cExpc3QoKTsKCiAgICAjIHJldmVyc2UgdGhlIGdyb3VwIGxpc3QgZm9yIGVhc2llciBsb29rdXAKICAgIG15ICVHcm91cExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlR3JvdXBMaXN0OwoKICAgICMgY2hlY2sgaWYgZ3JvdXAgYWxyZWFkeSBleGlzdHMKICAgIG15ICRHcm91cElEID0gJEdyb3VwTGlzdFJldmVyc2V7ICRQYXJhbXtOYW1lfSB9OwoKICAgICMgcmVhY3RpdmF0ZSB0aGUgZ3JvdXAKICAgIGlmICgkR3JvdXBJRCkgewoKICAgICAgICAjIGdldCBjdXJyZW50IGdyb3VwIGRhdGEKICAgICAgICBteSAlR3JvdXBEYXRhID0gJEdyb3VwT2JqZWN0LT5Hcm91cEdldCgKICAgICAgICAgICAgSUQgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHJlYWN0aXZhdGUgZ3JvdXAKICAgICAgICAkR3JvdXBPYmplY3QtPkdyb3VwVXBkYXRlKAogICAgICAgICAgICAlR3JvdXBEYXRhLAogICAgICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgYWRkIHRoZSBncm91cAogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIGlmICEkR3JvdXBPYmplY3QtPkdyb3VwQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgQ29tbWVudCA9PiAkUGFyYW17RGVzY3JpcHRpb259LAogICAgICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBsb29rdXAgdGhlIG5ldyBncm91cCBpZAogICAgbXkgJE5ld0dyb3VwSUQgPSAkR3JvdXBPYmplY3QtPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgYWRkIHVzZXIgcm9vdCB0byB0aGUgZ3JvdXAKICAgICRHcm91cE9iamVjdC0+R3JvdXBNZW1iZXJBZGQoCiAgICAgICAgR0lEICAgICAgICA9PiAkTmV3R3JvdXBJRCwKICAgICAgICBVSUQgICAgICAgID0+IDEsCiAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgIHJvICAgICAgICA9PiAxLAogICAgICAgICAgICBtb3ZlX2ludG8gPT4gMSwKICAgICAgICAgICAgY3JlYXRlICAgID0+IDEsCiAgICAgICAgICAgIG93bmVyICAgICA9PiAxLAogICAgICAgICAgICBwcmlvcml0eSAgPT4gMSwKICAgICAgICAgICAgcncgICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9Hcm91cERlYWN0aXZhdGUoKQoKZGVhY3RpdmF0ZSBhIGdyb3VwCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR3JvdXBEZWFjdGl2YXRlKAogICAgICAgIE5hbWUgPT4gJ3RoZS1ncm91cC1uYW1lJywKICAgICk7Cgo9Y3V0CgpzdWIgX0dyb3VwRGVhY3RpdmF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE5hbWUhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZ3JvdXAgb2JqZWN0CiAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAjIGxvb2t1cCBncm91cCBpZAogICAgbXkgJEdyb3VwSUQgPSAkR3JvdXBPYmplY3QtPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwID0+ICRQYXJhbXtOYW1lfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkR3JvdXBJRDsKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAjIGdldCBjdXJyZW50IGdyb3VwIGRhdGEKICAgIG15ICVHcm91cERhdGEgPSAkR3JvdXBPYmplY3QtPkdyb3VwR2V0KAogICAgICAgIElEICAgICA9PiAkR3JvdXBJRCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBkZWFjdGl2YXRlIGdyb3VwCiAgICAkR3JvdXBPYmplY3QtPkdyb3VwVXBkYXRlKAogICAgICAgICVHcm91cERhdGEsCiAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXtpbnZhbGlkfSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfTGlua0RlbGV0ZSgpCgpkZWxldGUgYWxsIGV4aXN0aW5nIGxpbmtzIHRvIEZBUSBhcnRpY2xlcwoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0xpbmtEZWxldGUoKTsKCj1jdXQKCnN1YiBfTGlua0RlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgYWxsIEZBUSBhcnRpY2xlIGlkcwogICAgbXkgQEZBUUlEcyA9ICgpOwogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gZmFxX2l0ZW0nCiAgICApOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBARkFRSURzLCAkUm93WzBdOwogICAgfQogICAgcmV0dXJuIGlmICFARkFRSURzOwoKICAgICMgZGVsZXRlIHRoZSBGQVEgYXJ0aWNsZSBsaW5rcwogICAgZm9yIG15ICRGQVFJRCAoQEZBUUlEcykgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtEZWxldGVBbGwoCiAgICAgICAgICAgIE9iamVjdCA9PiAnRkFRJywKICAgICAgICAgICAgS2V5ICAgID0+ICRGQVFJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0NyZWF0ZUFkaXRpb25hbEZBUUxhbmd1YWdlcygpCgpjcmVhdGVzIGFkZGl0aW9uYWwgRkFRIGxhbmd1YWdlcyBmb3Igc3lzdGVtIGRlZmF1bHQgbGFuZ3VhZ2UgYW5kIHVzZXIgbGFuZ3VhZ2UKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9DcmVhdGVBZGl0aW9uYWxGQVFMYW5ndWFnZXMoKTsKCj1jdXQKCnN1YiBfQ3JlYXRlQWRpdGlvbmFsRkFRTGFuZ3VhZ2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgc3lzdGVtIGRlZmF1bHQgbGFuZ3VhZ2UKICAgIG15ICRMYW5ndWFnZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRGVmYXVsdExhbmd1YWdlJyk7CiAgICBpZiAoJExhbmd1YWdlKSB7CgogICAgICAgICMgZ2V0IEZBUSBvYmplY3QKICAgICAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICAgICAjIGdldCBjdXJyZW50IEZBUSBsYW5ndWFnZXMKICAgICAgICBteSAlQ3VycmVudExhbmd1YWdlcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyB1c2UgcmV2ZXJzZSBoYXNoIGZvciBlYXN5IGxvb2t1cAogICAgICAgIG15ICVSZXZlcnNlTGFuZ3VhZ2VzID0gcmV2ZXJzZSAlQ3VycmVudExhbmd1YWdlczsKCiAgICAgICAgIyBjaGVjayBpZiBsYW5ndWFnZSBpcyBhbHJlYWR5IGRlZmluZWQKICAgICAgICBpZiAoICEkUmV2ZXJzZUxhbmd1YWdlc3skTGFuZ3VhZ2V9ICkgewoKICAgICAgICAgICAgIyBhZGQgbGFuZ3VhZ2UKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRkFRT2JqZWN0LT5MYW5ndWFnZUFkZCgKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkTGFuZ3VhZ2UsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0NhdGVnb3J5R3JvdXBTZXQoKQoKQWRkcyB0aGUgZ2l2ZW4gZ3JvdXAgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGNhdGVnb3J5LgoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0NhdGVnb3J5R3JvdXBTZXQoCiAgICAgICAgQ2F0ZWdvcnkgPT4gJ01pc2MnLAogICAgICAgIEdyb3VwcyAgID0+IFsgJ2ZhcScsICdmYXEtYWRtaW4nLCAnZmFxX2FwcHJvdmFsJyBdLAogICAgKTsKCj1jdXQKCnN1YiBfQ2F0ZWdvcnlHcm91cFNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDYXRlZ29yeSBHcm91cHMpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCByZWYgJFBhcmFte0dyb3Vwc30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkdyb3VwcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBGQVEgb2JqZWN0CiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgICMgZ2V0IGFsbCBjYXRlZ29yaWVzIGFuZCB0aGVpciBpZHMKICAgIG15ICRDYXRlZ29yeVRyZWUgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeVRyZWVMaXN0KAogICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGNyZWF0ZSBsb29rdXAgaGFzaCBmb3IgdGhlIGNhdGVnb3J5IGlkCiAgICBteSAlRkFRMklEID0gcmV2ZXJzZSAleyRDYXRlZ29yeVRyZWV9OwoKICAgICMgbG9va3VwIHRoZSBjYXRlZ29yeSBpZAogICAgbXkgJENhdGVnb3J5SUQgPSAkRkFRMklEeyAkUGFyYW17Q2F0ZWdvcnl9IH07CgogICAgIyBsb29rdXAgdGhlIGdyb3VwIGlkcwogICAgbXkgQEdyb3VwSURzOwogICAgZm9yIG15ICRHcm91cCAoIEB7ICRQYXJhbXtHcm91cHN9IH0gKSB7CiAgICAgICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgICAgIEdyb3VwID0+ICRHcm91cCwKICAgICAgICApOwogICAgICAgIHB1c2ggQEdyb3VwSURzLCAkR3JvdXBJRDsKICAgIH0KCiAgICAjIHNldCBjYXRlZ29yeSBncm91cAogICAgJEZBUU9iamVjdC0+U2V0Q2F0ZWdvcnlHcm91cCgKICAgICAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlELAogICAgICAgIEdyb3VwSURzICAgPT4gXEBHcm91cElEcywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfRHluYW1pY0ZpZWxkc0RlbGV0ZSgpCgpkZWxldGUgYWxsIGV4aXN0aW5nIGR5bmFtaWMgZmllbGRzIGZvciBGQVEKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9EeW5hbWljRmllbGRzRGVsZXRlKCk7Cgo9Y3V0CgpzdWIgX0R5bmFtaWNGaWVsZHNEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkVmFsdWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUnKTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBGQVEgZHluYW1pYyBmaWVsZHMgKHZhbGlkIGFuZCBpbnZhbGlkIG9uZXMpCiAgICBteSAkRHluYW1pY0ZpZWxkTGlzdCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICA9PiAwLAogICAgICAgIE9iamVjdFR5cGUgPT4gWydGQVEnXSwKICAgICk7CgogICAgIyBkZWxldGUgdGhlIGR5bmFtaWMgZmllbGRzCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewoKICAgICAgICAjIGRlbGV0ZSBhbGwgZmllbGQgdmFsdWVzCiAgICAgICAgbXkgJFZhbHVlc0RlbGV0ZVN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkVmFsdWVPYmplY3QtPkFsbFZhbHVlc0RlbGV0ZSgKICAgICAgICAgICAgRmllbGRJRCA9PiAkRHluYW1pY0ZpZWxkLT57SUR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyB2YWx1ZXMgY291bGQgYmUgZGVsZXRlZAogICAgICAgIGlmICgkVmFsdWVzRGVsZXRlU3VjY2VzcykgewoKICAgICAgICAgICAgIyBkZWxldGUgZmllbGQKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGREZWxldGUoCiAgICAgICAgICAgICAgICBJRCAgICAgPT4gJER5bmFtaWNGaWVsZC0+e0lEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCBkZWxldGUgZHluYW1pYyBmaWVsZCAnJER5bmFtaWNGaWVsZC0+e05hbWV9JyEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB2YWx1ZXMgY291bGQgbm90IGJlIGRlbGV0ZWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCBkZWxldGUgdmFsdWVzIGZvciBkeW5hbWljIGZpZWxkICckRHluYW1pY0ZpZWxkLT57TmFtZX0nISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX01pZ3JhdGVEVExJblN5c0NvbmZpZyB7CgogICAgIyBjcmVhdGUgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDb25maWdPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJFN5c0NvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKTsKICAgIG15ICRQcm92aWRlck9iamVjdCAgPSBLZXJuZWw6Ok91dHB1dDo6VGVtcGxhdGU6OlByb3ZpZGVyLT5uZXcoKTsKCiAgICAjIGdldCBzZXR0aW5nJ3MgY29udGVudAogICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKTsKICAgIHJldHVybiBpZiAhJFNldHRpbmc7CgogICAgTUVOVU1PRFVMRToKICAgIGZvciBteSAkTWVudU1vZHVsZSAoIHNvcnQga2V5cyAleyRTZXR0aW5nfSApIHsKCiAgICAgICAgU0VUVElOR0lURU06CiAgICAgICAgZm9yIG15ICRTZXR0aW5nSXRlbSAoIHNvcnQga2V5cyAleyAkU2V0dGluZy0+eyRNZW51TW9kdWxlfSB9ICkgewoKICAgICAgICAgICAgbXkgJFNldHRpbmdDb250ZW50ID0gJFNldHRpbmctPnskTWVudU1vZHVsZX0tPnskU2V0dGluZ0l0ZW19OwoKICAgICAgICAgICAgIyBkbyBub3RoaW5nIG5vIHZhbHVlIGZvciBtaWdyYXRpbmcKICAgICAgICAgICAgbmV4dCBTRVRUSU5HSVRFTSBpZiAhJFNldHRpbmdDb250ZW50OwoKICAgICAgICAgICAgbXkgJFRUQ29udGVudDsKICAgICAgICAgICAgZXZhbCB7CiAgICAgICAgICAgICAgICAkVFRDb250ZW50ID0gJFByb3ZpZGVyT2JqZWN0LT5NaWdyYXRlRFRMdG9UVCggQ29udGVudCA9PiAkU2V0dGluZ0NvbnRlbnQgKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKCRAKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkTWVudU1vZHVsZS0+JFNldHRpbmdJdGVtIDogJEAhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eyRTZXR0aW5nSXRlbX0gPSAkVFRDb250ZW50OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG15ICRTdWNjZXNzID0gJFN5c0NvbmZpZ09iamVjdC0+Q29uZmlnSXRlbVVwZGF0ZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0ZBUTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2V0dGluZywKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfTWlncmF0ZUNvbmZpZ3MgewoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBtaWdyYXRlIEZBUSBtZW51IG1vZHVsZXMKICAgICMgZ2V0IHNldHRpbmcgY29udGVudCBmb3IgRkFRIG1lbnUgbW9kdWxlcwogICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKTsKCiAgICBNRU5VTU9EVUxFOgogICAgZm9yIG15ICRNZW51TW9kdWxlICggc29ydCBrZXlzICV7JFNldHRpbmd9ICkgewoKICAgICAgICAjIHVwZGF0ZSBtb2R1bGUgbG9jYXRpb24KICAgICAgICBteSAkTW9kdWxlID0gJFNldHRpbmctPnskTWVudU1vZHVsZX0tPnsnTW9kdWxlJ307CiAgICAgICAgaWYgKCAkTW9kdWxlICF+IG17S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZBUU1lbnUoXHcrKX0gKSB7CiAgICAgICAgICAgIG5leHQgTUVOVU1PRFVMRTsKICAgICAgICB9CgogICAgICAgICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LT57TW9kdWxlfSA9ICJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RkFRTWVudTo6R2VuZXJpYyI7CgogICAgICAgICMgc2V0IG5ldyBzZXR0aW5nLAogICAgICAgIG15ICRTdWNjZXNzID0gJFN5c0NvbmZpZ09iamVjdC0+Q29uZmlnSXRlbVVwZGF0ZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0ZBUTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMnIC4gJE1lbnVNb2R1bGUsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LAogICAgICAgICk7CiAgICB9CgogICAgIyBtaWdyYXRlIEZBUSBjb25maWcgaXRlbXMKICAgIG15IEBDb25maWdzID0gKAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnRnJvbnRlbmQ6OkhlYWRlck1ldGFNb2R1bGUnLAogICAgICAgICAgICBDb25maWdJdGVtID0+ICczLUZBUVNlYXJjaCcsCiAgICAgICAgICAgIE1vZHVsZSAgICAgPT4gJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpIZWFkZXJNZXRhOjpBZ2VudEZBUVNlYXJjaCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0N1c3RvbWVyRnJvbnRlbmQ6OkhlYWRlck1ldGFNb2R1bGUnLAogICAgICAgICAgICBDb25maWdJdGVtID0+ICczLUZBUVNlYXJjaCcsCiAgICAgICAgICAgIE1vZHVsZSAgICAgPT4gJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpIZWFkZXJNZXRhOjpDdXN0b21lckZBUVNlYXJjaCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1B1YmxpY0Zyb250ZW5kOjpIZWFkZXJNZXRhTW9kdWxlJywKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAnMy1GQVFTZWFyY2gnLAogICAgICAgICAgICBNb2R1bGUgICAgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SGVhZGVyTWV0YTo6UHVibGljRkFRU2VhcmNoJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnRnJvbnRlbmQ6Ok91dHB1dDo6RmlsdGVyRWxlbWVudFBvc3QnLAogICAgICAgICAgICBDb25maWdJdGVtID0+ICdGQVEnLAogICAgICAgICAgICBNb2R1bGUgICAgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RmlsdGVyRWxlbWVudFBvc3Q6OkZBUScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0ZBUTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3JywKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAnU21hbGwnLAogICAgICAgICAgICBNb2R1bGUgICAgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RkFRT3ZlcnZpZXc6OlNtYWxsJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnRkFROjpGcm9udGVuZDo6Sm91cm5hbE92ZXJ2aWV3JywKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAnU21hbGwnLAogICAgICAgICAgICBNb2R1bGUgICAgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RkFRSm91cm5hbE92ZXJ2aWV3OjpTbWFsbCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1ByZWZlcmVuY2VzR3JvdXBzJywKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAnRkFRT3ZlcnZpZXdTbWFsbFBhZ2VTaG93bicsCiAgICAgICAgICAgIE1vZHVsZSAgICAgPT4gJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpQcmVmZXJlbmNlczo6R2VuZXJpYycsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1ByZWZlcmVuY2VzR3JvdXBzJywKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAnRkFRSm91cm5hbE92ZXJ2aWV3U21hbGxQYWdlU2hvd24nLAogICAgICAgICAgICBNb2R1bGUgICAgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6UHJlZmVyZW5jZXM6OkdlbmVyaWMnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgID0+ICdEYXNoYm9hcmRCYWNrZW5kJywKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAnMDM5OC1GQVEtTGFzdENoYW5nZScsCiAgICAgICAgICAgIE1vZHVsZSAgICAgPT4gJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6OkZBUScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0Rhc2hib2FyZEJhY2tlbmQnLAogICAgICAgICAgICBDb25maWdJdGVtID0+ICcwMzk5LUZBUS1MYXN0Q3JlYXRlJywKICAgICAgICAgICAgTW9kdWxlICAgICA9PiAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZDo6RkFRJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnRnJvbnRlbmQ6OlRvb2xCYXJNb2R1bGUnLAogICAgICAgICAgICBDb25maWdJdGVtID0+ICc5MC1GQVE6OkFnZW50RkFRQWRkJywKICAgICAgICAgICAgTW9kdWxlICAgICA9PiAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXI6OkxpbmsnLAogICAgICAgIH0sCiAgICApOwoKICAgIENPTkZJR0lURU06CiAgICBmb3IgbXkgJENvbmZpZyAoQENvbmZpZ3MpIHsKCiAgICAgICAgIyBnZXQgc2V0dGluZyBjb250ZW50IGZvciBoZWFkZXIgbWV0YSBGQVEgc2VhcmNoCiAgICAgICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoICRDb25maWctPntOYW1lfSApOwogICAgICAgIG5leHQgQ09ORklHSVRFTSBpZiAhJFNldHRpbmc7CgogICAgICAgIG15ICRDb25maWdJdGVtID0gJENvbmZpZy0+e0NvbmZpZ0l0ZW19OwogICAgICAgIG5leHQgQ09ORklHSVRFTSBpZiAhJFNldHRpbmctPnskQ29uZmlnSXRlbX0tPnsnTW9kdWxlJ307CgogICAgICAgICMgc2V0IG1vZHVsZQogICAgICAgICRTZXR0aW5nLT57JENvbmZpZ0l0ZW19LT57J01vZHVsZSd9ID0gJENvbmZpZy0+e01vZHVsZX07CgogICAgICAgICMgc2V0IG5ldyBzZXR0aW5nLAogICAgICAgIG15ICRTdWNjZXNzID0gJFN5c0NvbmZpZ09iamVjdC0+Q29uZmlnSXRlbVVwZGF0ZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZy0+e05hbWV9IC4gJyMjIycgLiAkQ29uZmlnSXRlbSwKICAgICAgICAgICAgVmFsdWUgPT4gJFNldHRpbmctPnskQ29uZmlnSXRlbX0sCiAgICAgICAgKTsKCiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfU2V0Q29udGVudFR5cGUgewoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRDb250ZW50VHlwZSA9ICd0ZXh0L3BsYWluJzsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6UmljaFRleHQnKSAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6SXRlbTo6SFRNTCcpICkgewogICAgICAgICRDb250ZW50VHlwZSA9ICd0ZXh0L2h0bWwnOwogICAgfQoKICAgICMgZ2V0IERCIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBzZXQgdGhlIGNvbnRlbnQgdHlwZSBhY2NvcmRpbmcgdG8gdGhlIHN5c3RlbSBzZXR0aW5ncwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFVQREFURSBmYXFfaXRlbQogICAgICAgICAgICBTRVQgY29udGVudF90eXBlID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkQ29udGVudFR5cGUsCiAgICAgICAgXSwKICAgICk7CgogICAgIyBnZXQgYWxsIEZBUUlEcwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgU0VMRUNUIERJU1RJTkNUKGlkKQogICAgICAgICAgICBGUk9NIGZhcV9pdGVtCiAgICAgICAgICAgIE9SREVSIEJZIGlkIEFTQycsCiAgICApOwoKICAgIG15IEBGQVFJdGVtSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBARkFRSXRlbUlEcywgJFJvd1swXTsKICAgIH0KCiAgICBteSAkRkFRT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpOwoKICAgIElURU1JRDoKICAgIGZvciBteSAkSXRlbUlEIChARkFRSXRlbUlEcykgewogICAgICAgIG15ICREZXRlcm1pbmVkQ29udGVudFR5cGUgPSAndGV4dC9wbGFpbic7CgogICAgICAgIEZJRUxEOgogICAgICAgIGZvciBteSAkRmllbGQgKHF3KEZpZWxkMSBGaWVsZDIgRmllbGQzIEZpZWxkNCBGaWVsZDUgRmllbGQ2KSkgewoKICAgICAgICAgICAgbXkgJEZpZWxkQ29udGVudCA9ICRGQVFPYmplY3QtPkl0ZW1GaWVsZEdldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgICAgICAgICAgRmllbGQgID0+ICRGaWVsZCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZpZWxkQ29udGVudDsKCiAgICAgICAgICAgIGlmICggJEZpZWxkQ29udGVudCA9fiBteyg/OiA8YnJccyovPiB8IDwvbGk+IHwgPC9vbD4gfCA8L3VsPiApfW1zeCApIHsKICAgICAgICAgICAgICAgICREZXRlcm1pbmVkQ29udGVudFR5cGUgPSAndGV4dC9odG1sJzsKICAgICAgICAgICAgICAgIGxhc3QgRklFTEQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG5leHQgSVRFTUlEIGlmICREZXRlcm1pbmVkQ29udGVudFR5cGUgZXEgJENvbnRlbnRUeXBlOwoKICAgICAgICAjIHNldCB0aGUgY29udGVudCB0eXBlIGFjY29yZGluZyB0byB0aGUgZmllbGQgY29udGVudAogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgICAgIFVQREFURSBmYXFfaXRlbQogICAgICAgICAgICAgICAgU0VUIGNvbnRlbnRfdHlwZSA9ID8KICAgICAgICAgICAgICAgIFdIRVJFIGlkID0/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJERldGVybWluZWRDb250ZW50VHlwZSwKICAgICAgICAgICAgICAgIFwkSXRlbUlELAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJ0ZBUScsCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KCjxvdHJzX3N0YXRzPgo8Q2FjaGU+MDwvQ2FjaGU+CjxEZXNjcmlwdGlvbj5TaG93cyBhbiBvdmVydmlldyBvZiBGQVEgYXJ0aWNsZXMgaW4gYSBkZWZpbmVkIHRpbWUgcGVyaW9kIHNvcnRlZCBieSBhY2Nlc3MgbnVtYmVycy48L0Rlc2NyaXB0aW9uPgo8Rm9ybWF0PkNTVjwvRm9ybWF0Pgo8Rm9ybWF0PlByaW50PC9Gb3JtYXQ+CjxHcmFwaFNpemU+PC9HcmFwaFNpemU+CjxPYmplY3Q+PC9PYmplY3Q+CjxPYmplY3RNb2R1bGU+S2VybmVsOjpTeXN0ZW06OlN0YXRzOjpTdGF0aWM6OkZBUUFjY2VzczwvT2JqZWN0TW9kdWxlPgo8UGVybWlzc2lvbj5zdGF0czwvUGVybWlzc2lvbj4KPFN0YXRUeXBlPnN0YXRpYzwvU3RhdFR5cGU+CjxTdW1Db2w+MDwvU3VtQ29sPgo8U3VtUm93PjA8L1N1bVJvdz4KPFRpdGxlPkZBUSBhY2Nlc3Mgb3ZlcnZpZXc8L1RpdGxlPgo8VmFsaWQ+MTwvVmFsaWQ+Cjwvb3Ryc19zdGF0cz4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljQ2F0ZWdvcnlMaXN0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZ1dpdGhEYXRhKTsKCnVzZSBiYXNlIHF3KAogICAgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbW1vbgopOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0NhdGVnb3J5TGlzdCAtIEdlbmVyaWNJbnRlcmZhY2UgRkFRIFB1YmxpY0NhdGVnb3J5TGlzdCBPcGVyYXRpb24gYmFja2VuZAoKPWhlYWQxIFNZTk9QU0lTCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkTmVlZGVkIChxdyggRGVidWdnZXJPYmplY3QgV2Vic2VydmljZUlEICkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBSdW4oKQoKcGVyZm9ybSBQdWJsaWNDYXRlZ29yeUxpc3QgT3BlcmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IEZBUSBDYXRlZ29yaWVzLgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7fSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2Ugb2YgYW4gZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGRhdGEgcGF5bG9hZCBhZnRlciBPcGVyYXRpb24KICAgICAgICAgICAgQ2F0ZWdvcnkgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIElEID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTmFtZT4gJ01pc2MnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBJRCA9PiAyLAogICAgICAgICAgICAgICAgICAgIE5hbWU+ICdPbmVNb3JlQ2F0ZWdvcnknLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICMgLi4uCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGVpciBsb25nIG5hbWVzCiAgICAjIHNldCBVc2VySUQgdG8gcm9vdCBiZWNhdXNlIGluIHB1YmxpYyBpbnRlcmZhY2UgdGhlcmUgaXMgbm8gdXNlcgogICAgbXkgJENhdGVnb3J5VHJlZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKS0+R2V0UHVibGljQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJENhdGVnb3J5VHJlZSkgKSB7CgogICAgICAgIG15ICRFcnJvck1lc3NhZ2UgPSAnQ291bGQgbm90IGdldCBjYXRlZ29yeSBkYXRhJwogICAgICAgICAgICAuICcgaW4gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljQ2F0ZWdvcnlMaXN0OjpSdW4oKSc7CgogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUHVibGljQ2F0ZWdvcnlMaXN0Lk5vdENhdGVnb3J5RGF0YScsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUHVibGljQ2F0ZWdvcnlMaXN0OiAkRXJyb3JNZXNzYWdlIiwKICAgICAgICApOwoKICAgIH0KCiAgICBteSBAUHVibGljQ2F0ZWdvcnlMaXN0OwogICAgZm9yIG15ICRLZXkgKCBzb3J0KCBrZXlzICV7JENhdGVnb3J5VHJlZX0gKSApIHsKICAgICAgICBteSAlQ2F0ZWdvcnkgPSAoCiAgICAgICAgICAgIElEICAgPT4gJEtleSwKICAgICAgICAgICAgTmFtZSA9PiAkQ2F0ZWdvcnlUcmVlLT57JEtleX0sCiAgICAgICAgKTsKICAgICAgICBwdXNoIEBQdWJsaWNDYXRlZ29yeUxpc3QsIHslQ2F0ZWdvcnl9OwogICAgfQoKICAgICMgcHJlcGFyZSByZXR1cm4gZGF0YQogICAgbXkgJFJldHVybkRhdGEgPSB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4ge30sCiAgICB9OwogICAgaWYgKCBzY2FsYXIgQFB1YmxpY0NhdGVnb3J5TGlzdCA+IDEgKSB7CiAgICAgICAgJFJldHVybkRhdGEtPntEYXRhfS0+e0NhdGVnb3J5fSA9IFxAUHVibGljQ2F0ZWdvcnlMaXN0OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFJldHVybkRhdGEtPntEYXRhfS0+e0NhdGVnb3J5fSA9ICRQdWJsaWNDYXRlZ29yeUxpc3RbMF07CiAgICB9CgogICAgIyByZXR1cm4gcmVzdWx0CiAgICByZXR1cm4gJFJldHVybkRhdGE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6TGFuZ3VhZ2VMaXN0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZ1dpdGhEYXRhKTsKCnVzZSBiYXNlIHF3KAogICAgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbW1vbgopOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6Okxhbmd1YWdlTGlzdCAtIEdlbmVyaWNJbnRlcmZhY2UgRkFRIExhbmd1YWdlTGlzdCBPcGVyYXRpb24gYmFja2VuZAoKPWhlYWQxIFNZTk9QU0lTCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkTmVlZGVkIChxdyggRGVidWdnZXJPYmplY3QgV2Vic2VydmljZUlEICkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBSdW4oKQoKcGVyZm9ybSBMYW5ndWFnZUxpc3QgT3BlcmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IEZBUSBMYW5ndWFnZXMuCgogICAgbXkgJFJlc3VsdCA9ICRPcGVyYXRpb25PYmplY3QtPlJ1bigKICAgICAgICBEYXRhID0+IHt9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW4gY2FzZSBvZiBhbiBlcnJvcgogICAgICAgIERhdGEgICAgICAgICA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXN1bHQgZGF0YSBwYXlsb2FkIGFmdGVyIE9wZXJhdGlvbgogICAgICAgICAgICBMYW5ndWFnZSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgSUQgPT4gMSwKICAgICAgICAgICAgICAgICAgICBOYW1lPiAnZW4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBJRCA9PiAyLAogICAgICAgICAgICAgICAgICAgIE5hbWU+ICdPbmVNb3JlTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICMgLi4uCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGFuZ3VhZ2VzIGxpc3QKICAgICMgc2V0IFVzZXJJRCB0byByb290IGJlY2F1c2UgaW4gcHVibGljIGludGVyZmFjZSB0aGVyZSBpcyBubyB1c2VyCiAgICBteSAlTGFuZ3VhZ2VzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpLT5MYW5ndWFnZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCBcJUxhbmd1YWdlcyApICkgewoKICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gJ0NvdWxkIG5vdCBnZXQgbGFuZ3VhZ2UgZGF0YScKICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6Okxhbmd1YWdlTGlzdDo6UnVuKCknOwoKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldExpc3QuTm90TGFuZ3VhZ2VEYXRhJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRMaXN0OiAkRXJyb3JNZXNzYWdlIiwKICAgICAgICApOwogICAgfQoKICAgIG15IEBMYW5ndWFnZUxpc3Q7CiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlTGFuZ3VhZ2VzICkgewogICAgICAgIG15ICVMYW5ndWFnZSA9ICgKICAgICAgICAgICAgSUQgICA9PiAkS2V5LAogICAgICAgICAgICBOYW1lID0+ICRMYW5ndWFnZXN7JEtleX0sCiAgICAgICAgKTsKICAgICAgICBwdXNoIEBMYW5ndWFnZUxpc3QsIHslTGFuZ3VhZ2V9OwogICAgfQoKICAgICMgcmV0dXJuIHJlc3VsdAogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIExhbmd1YWdlID0+IFxATGFuZ3VhZ2VMaXN0LAogICAgICAgIH0sCiAgICB9Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljRkFRU2VhcmNoOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1JTUU6OkJhc2U2NDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZ1dpdGhEYXRhKTsKCnVzZSBiYXNlIHF3KAogICAgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbW1vbgopOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0ZBUVNlYXJjaCAtIEdlbmVyaWNJbnRlcmZhY2UgRkFRIFB1YmxpY0ZBUVNlYXJjaCBPcGVyYXRpb24gYmFja2VuZAoKPWhlYWQxIFNZTk9QU0lTCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkTmVlZGVkIChxdyggRGVidWdnZXJPYmplY3QgV2Vic2VydmljZUlEICkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBSdW4oKQoKcGVyZm9ybSBQdWJsaWNGQVFTZWFyY2ggT3BlcmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBwdWJsaWMgRkFRIGVudHJpZXMuCgogICAgbXkgQElEcyA9ICRPcGVyYXRpb25PYmplY3QtPlJ1bigKICAgICAgICBEYXRhID0+IHsKCiAgICAgICAgICAgIE51bWJlciAgICA9PiAnKjEzNConLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgIFRpdGxlICAgICA9PiAnKnNvbWUgdGl0bGUqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICAgICAjIGlzIHNlYXJjaGluZyBpbiBOdW1iZXIsIFRpdGxlLCBLZXl3b3JkIGFuZCBGaWVsZDEtNgogICAgICAgICAgICBXaGF0ICAgICAgPT4gJypzb21lIHRleHQqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAgICAgS2V5d29yZCAgID0+ICcqd2Vic2VydmVyKicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAgICAgTGFuZ3VhZ2VJRHMgPT4gWyA0LCA1LCA2IF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAgICAgQ2F0ZWdvcnlJRHMgPT4gWyA3LCA4LCA5IF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgICAgIE9yZGVyQnkgPT4gWyAnRkFRSUQnLCAnVGl0bGUnIF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICAgICAjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIE9yZGVyQnk6CiAgICAgICAgICAgICMgVGhlIE9yZGVyQnlEaXJlY3Rpb24gY2FuIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBPcmRlckJ5IGF0dHJpYnV0ZS4KICAgICAgICAgICAgIyBUaGUgcGFpcmluZyBpcyBtYWRlIGJ5IHRoZSBhcnJheSBpbmRleGVzLgoKICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiAnRG93bicsICMgKERvd24gfCBVcCkgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgICMgZGVmYXVsdDogJ0Rvd24nCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2Ugb2YgYW4gZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGRhdGEgcGF5bG9hZCBhZnRlciBPcGVyYXRpb24KICAgICAgICAgICAgSUQgPT4gWwogICAgICAgICAgICAgICAgMzIsCiAgICAgICAgICAgICAgICAxMywKICAgICAgICAgICAgICAgIDEyLAogICAgICAgICAgICAgICAgOSwKICAgICAgICAgICAgICAgIDYsCiAgICAgICAgICAgICAgICA1LAogICAgICAgICAgICAgICAgNCwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIGRhdGEKICAgICMgc2V0IFNlYXJjaExpbWl0IG9uIDAgYmVjYXVzZSB3ZSBuZWVkIHRvIGdldCBhbGwgZW50cmllcwogICAgbXkgJFNlYXJjaExpbWl0ID0gMDsKCiAgICAjIGdldCBjb25maWcgZm9yIGZyb250ZW5kCiAgICBteSAkQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJGQVE6OkZyb250ZW5kOjpQdWJsaWNGQVFTZWFyY2giKTsKCiAgICBteSAkU29ydEJ5ID0gJFBhcmFte0RhdGF9LT57T3JkZXJCeX0KICAgICAgICB8fCAkQ29uZmlnLT57J1NvcnRCeTo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0ZBUUlEJzsKCiAgICAjIHRoZSBDYXRlZ29yeUlEIHBhcmFtIGNvdWxkIGJlIGFuIEFSUkFZIGFuIFNDQUxBUiBvciBhbiBlbXB0eSB2YWx1ZQogICAgaWYgKCAhSXNBcnJheVJlZldpdGhEYXRhKCRTb3J0QnkpICYmICRTb3J0QnkgbmUgJycgKSB7CiAgICAgICAgJFNvcnRCeSA9IFskU29ydEJ5XTsKICAgIH0KCiAgICBteSAkT3JkZXJCeSA9ICRQYXJhbXtEYXRhfS0+e09yZGVyQnlEaXJlY3Rpb259CiAgICAgICAgfHwgJENvbmZpZy0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0Rvd24nOwoKICAgIG15ICRDYXRlZ29yeUlEczsKCiAgICAjIHRoZSBDYXRlZ29yeUlEIHBhcmFtIGNvdWxkIGJlIGFuIEFSUkFZIGFuIFNDQUxBUiBvciBhbiBlbXB0eSB2YWx1ZQogICAgJFBhcmFte0RhdGF9LT57Q2F0ZWdvcnlJRHN9ID0gJFBhcmFte0RhdGF9LT57Q2F0ZWdvcnlJRHN9IHx8ICcnOwogICAgaWYgKCAhSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0tPntDYXRlZ29yeUlEc30gKSAmJiAkUGFyYW17RGF0YX0tPntDYXRlZ29yeUlEc30gbmUgJycgKSB7CiAgICAgICAgJENhdGVnb3J5SURzID0gWyAkUGFyYW17RGF0YX0tPntDYXRlZ29yeUlEc30gXTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0RhdGF9LT57Q2F0ZWdvcnlJRHN9IG5lICcnICkgewogICAgICAgICRDYXRlZ29yeUlEcyA9ICRQYXJhbXtEYXRhfS0+e0NhdGVnb3J5SURzfTsKICAgIH0KCiAgICBteSAkTGFuZ3VhZ2VJRHM7CgogICAgIyB0aGUgTGFuZ3VhZ2VJRCBwYXJhbSBjb3VsZCBiZSBhbiBBUlJBWSBhbiBTQ0FMQVIgb3IgYW4gZW1wdHkgdmFsdWUKICAgICRQYXJhbXtEYXRhfS0+e0xhbmd1YWdlSURzfSA9ICRQYXJhbXtEYXRhfS0+e0xhbmd1YWdlSURzfSB8fCAnJzsKICAgIGlmICggIUlzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9LT57TGFuZ3VhZ2VJRHN9ICkgJiYgJFBhcmFte0RhdGF9LT57TGFuZ3VhZ2VJRHN9IG5lICcnICkgewogICAgICAgICRMYW5ndWFnZUlEcyA9IFsgJFBhcmFte0RhdGF9LT57TGFuZ3VhZ2VJRHN9IF07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtEYXRhfS0+e0xhbmd1YWdlSURzfSBuZSAnJyApIHsKICAgICAgICAkTGFuZ3VhZ2VJRHMgPSAkUGFyYW17RGF0YX0tPntMYW5ndWFnZUlEc307CiAgICB9CgogICAgIyBnZXQgRkFRIG9iamVjdAogICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAjIHNldCBVc2VySUQgdG8gcm9vdCBiZWNhdXNlIGluIHB1YmxpYyBpbnRlcmZhY2UgdGhlcmUgaXMgbm8gdXNlcgogICAgbXkgJFVzZXJJRCA9IDE7CgogICAgIyBzZXQgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgIG15ICRJbnRlcmZhY2UgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVHZXQoCiAgICAgICAgTmFtZSAgID0+ICdwdWJsaWMnLAogICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgKTsKICAgIG15ICRJbnRlcmZhY2VTdGF0ZXMgPSAkRkFRT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0ZBUTo6UHVibGljOjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICApOwoKICAgICMgcGVyZm9ybSBGQVEgc2VhcmNoCiAgICBteSBAVmlld2FibGVGQVFJRHMgPSAkRkFRT2JqZWN0LT5GQVFTZWFyY2goCiAgICAgICAgTnVtYmVyICA9PiAkUGFyYW17RGF0YX0tPntOdW1iZXJ9ICB8fCAnJywKICAgICAgICBUaXRsZSAgID0+ICRQYXJhbXtEYXRhfS0+e1RpdGxlfSAgIHx8ICcnLAogICAgICAgIFdoYXQgICAgPT4gJFBhcmFte0RhdGF9LT57V2hhdH0gICAgfHwgJycsCiAgICAgICAgS2V5d29yZCA9PiAkUGFyYW17RGF0YX0tPntLZXl3b3JkfSB8fCAnJywKICAgICAgICBMYW5ndWFnZUlEcyAgICAgID0+ICRMYW5ndWFnZUlEcywKICAgICAgICBDYXRlZ29yeUlEcyAgICAgID0+ICRDYXRlZ29yeUlEcywKICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+ICRTb3J0QnksCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJE9yZGVyQnldLAogICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gJFNlYXJjaExpbWl0LAogICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICBTdGF0ZXMgICAgICAgICAgID0+ICRJbnRlcmZhY2VTdGF0ZXMsCiAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiAkSW50ZXJmYWNlLAogICAgKTsKICAgIGlmICggIUlzQXJyYXlSZWZXaXRoRGF0YSggXEBWaWV3YWJsZUZBUUlEcyApICkgewoKICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gJ0NvdWxkIG5vdCBnZXQgRkFRIGRhdGEnCiAgICAgICAgICAgIC4gJyBpbiBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpQdWJsaWNGQVFTZWFyY2g6OlJ1bigpJzsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdQdWJsaWNGQVFTZWFyY2guTm90RkFRRGF0YScsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUHVibGljRkFRU2VhcmNoOiAkRXJyb3JNZXNzYWdlIiwKICAgICAgICApOwoKICAgIH0KCiAgICAjIHByZXBhcmUgcmV0dXJuIGRhdGEKICAgIG15ICRSZXR1cm5EYXRhID0gewogICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfTsKCiAgICAjIHNldCBGQVEgZW50cnkgZGF0YQogICAgaWYgKCBzY2FsYXIgQFZpZXdhYmxlRkFRSURzID4gMSApIHsKICAgICAgICAkUmV0dXJuRGF0YS0+e0RhdGF9LT57SUR9ID0gXEBWaWV3YWJsZUZBUUlEczsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRSZXR1cm5EYXRhLT57RGF0YX0tPntJRH0gPSAkVmlld2FibGVGQVFJRHNbMF07CiAgICB9CgogICAgIyByZXR1cm4gcmVzdWx0CiAgICByZXR1cm4gJFJldHVybkRhdGE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6UHVibGljRkFRR2V0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1JTUU6OkJhc2U2NDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZ1dpdGhEYXRhKTsKCnVzZSBiYXNlIHF3KAogICAgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkNvbW1vbgopOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0ZBUUdldCAtIEdlbmVyaWNJbnRlcmZhY2UgRkFRIFB1YmxpY0ZBUUdldCBPcGVyYXRpb24gYmFja2VuZAoKPWhlYWQxIFNZTk9QU0lTCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkTmVlZGVkIChxdyggRGVidWdnZXJPYmplY3QgV2Vic2VydmljZUlEICkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBSdW4oKQoKcGVyZm9ybSBQdWJsaWNGQVFHZXQgT3BlcmF0aW9uLiBUaGlzIHdpbGwgcmV0dXJuIGEgUHVibGljIEZBUSBlbnRyeS4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBJdGVtSUQgPSAnMzIsMzMnLAogICAgICAgICAgICBHZXRBdHRhY2htZW50Q29udGVudHMgPSAxLCAgICAgICAgICAgICAgICAgICAgIyAwfDEsIGRlZmF1bHRzIHRvIDEKICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW4gY2FzZSBvZiBhbiBlcnJvcgogICAgICAgIERhdGEgICAgICAgICA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXN1bHQgZGF0YSBwYXlsb2FkIGFmdGVyIE9wZXJhdGlvbgogICAgICAgICAgICBJdGVtSUQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIElEICAgICAgICAgICAgICAgID0+IDMyLAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgICAgID0+IDMyLAogICAgICAgICAgICAgICAgICAgIEZBUUlEICAgICAgICAgICAgID0+IDMyLAogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgID0+IDEwMDAzMiwKICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeUlEICAgICAgICA9PiAnMicsCiAgICAgICAgICAgICAgICAgICAgQ2F0ZWdvcnlOYW1lICAgICA9PiAnQ2F0ZWdvcnlBOjpDYXRlZ29yeUInLAogICAgICAgICAgICAgICAgICAgIENhdGVnb3J5U2hvcnROYW1lID0+ICdDYXRlZ29yeUInLAogICAgICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgICAgICAgICAgPT4gJ2VuJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgRmllbGQxICAgICAgICAgICAgPT4gJ1RoZSBTeW1wdG9tcycsCiAgICAgICAgICAgICAgICAgICAgRmllbGQyICAgICAgICAgICAgPT4gJ1RoZSBQcm9ibGVtJywKICAgICAgICAgICAgICAgICAgICBGaWVsZDMgICAgICAgICAgICA9PiAnVGhlIFNvbHV0aW9uJywKICAgICAgICAgICAgICAgICAgICBGaWVsZDQgICAgICAgICAgICA9PiB1bmRlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm90IGFjdGl2ZSBieSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgRmllbGQ1ICAgICAgICAgICAgPT4gdW5kZWYsICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vdCBhY3RpdmUgYnkgZGVmYXVsdAogICAgICAgICAgICAgICAgICAgIEZpZWxkNiAgICAgICAgICAgID0+ICdDb21tZW50cycsCiAgICAgICAgICAgICAgICAgICAgQXBwcm92ZWQgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAKICAgICAgICAgICAgICAgICAgICBLZXl3b3JkcyAgICAgICAgICA9PiAnS2V5V29yZDEgS2V5V29yZDInLAogICAgICAgICAgICAgICAgICAgIFZvdGVzICAgICAgICAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBudW1iZXIgb2Ygdm90ZXMKICAgICAgICAgICAgICAgICAgICBWb3RlUmVzdWx0ICAgICAgICA9PiAnMC4wMCcsICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBudW1iZXIgYmV0d2VlbiAwLjAwIGFuZCAxMDAuMDAKICAgICAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgID0+ICdpbnRlcm5hbCAoYWdlbnQpJywgICAgICAgICAgICAgIyBvciAnZXh0ZXJuYWwgKGN1c3RvbWVyKScgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJ3B1YmxpYyAoYWxsKScKICAgICAgICAgICAgICAgICAgICBTdGF0ZVR5cGVJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFN0YXRlVHlwZU5hbWUgICAgID0+ICdpbnRlcm5hbCcsICAgICAgICAgICAgICAgICAgICAgIyBvciAnZXh0ZXJuYWwnIG9yICdwdWJsaWMnCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZEJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkICAgICAgICAgICA9PiAnMjAxMS0wMS0wNSAyMTo1Mzo1MCcsCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZEJ5ICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgIENyZWF0ZWQgICAgICAgICAgID0+ICcyMDExLTAxLTA1IDIxOjUzOjUwJywKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICA9PiAnMTI5NDI4NjAzMC0zMS4xNjk3Mjk3MTA0NzMyJywgICMgRkFRIEFydGljbGUgbmFtZSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzeXN0ZW10aW1lICsgJy0nICsgcmFuZG9tIG51bWJlcgogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlc2l6ZSAgICA9PiAnNTQwMjg2JywgICAgICAgICAgICAgICAgIyBmaWxlIHNpemUgaW4gYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdFcnJvci5qcGcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJy4uLicgICAgICAgICAgICAgICAgICAgICMgYmFzZTY0IGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZXNpemUgICAgPT4gJzU0MDI4NicsICAgICAgICAgICAgICAgICMgZmlsZSBzaXplIGluIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnaW1hZ2UvanBlZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnUGVuY2lsLmpwZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnLi4uJyAgICAgICAgICAgICAgICAgICAgIyBiYXNlNjQgY29udGVudAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIElEICAgICAgICAgICAgICAgID0+IDMzLAogICAgICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgICAgID0+IDMzLAogICAgICAgICAgICAgICAgICAgIEZBUUlEICAgICAgICAgICAgID0+IDMzLAogICAgICAgICAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgID0+IDEwMDAzMywKICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeUlEICAgICAgICA9PiAnMycsCiAgICAgICAgICAgICAgICAgICAgQ2F0ZWdvcnlOYW1lICAgICA9PiAnQ2F0ZWdvcnlEOjpDYXRlZ29yeUUnLAogICAgICAgICAgICAgICAgICAgIENhdGVnb3J5U2hvcnROYW1lID0+ICdDYXRlZ29yeUUnLAogICAgICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgICAgICAgICAgPT4gJ2VuJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgRmllbGQxICAgICAgICAgICAgPT4gJ1RoZSBTeW1wdG9tcycsCiAgICAgICAgICAgICAgICAgICAgRmllbGQyICAgICAgICAgICAgPT4gJ1RoZSBQcm9ibGVtJywKICAgICAgICAgICAgICAgICAgICBGaWVsZDMgICAgICAgICAgICA9PiAnVGhlIFNvbHV0aW9uJywKICAgICAgICAgICAgICAgICAgICBGaWVsZDQgICAgICAgICAgICA9PiB1bmRlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm90IGFjdGl2ZSBieSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgRmllbGQ1ICAgICAgICAgICAgPT4gdW5kZWYsICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vdCBhY3RpdmUgYnkgZGVmYXVsdAogICAgICAgICAgICAgICAgICAgIEZpZWxkNiAgICAgICAgICAgID0+ICdDb21tZW50cycsCiAgICAgICAgICAgICAgICAgICAgQXBwcm92ZWQgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAKICAgICAgICAgICAgICAgICAgICBLZXl3b3JkcyAgICAgICAgICA9PiAnS2V5V29yZDEgS2V5V29yZDInLAogICAgICAgICAgICAgICAgICAgIFZvdGVzICAgICAgICAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBudW1iZXIgb2Ygdm90ZXMKICAgICAgICAgICAgICAgICAgICBWb3RlUmVzdWx0ICAgICAgICA9PiAnMC4wMCcsICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBudW1iZXIgYmV0d2VlbiAwLjAwIGFuZCAxMDAuMDAKICAgICAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgID0+ICdpbnRlcm5hbCAoYWdlbnQpJywgICAgICAgICAgICAgIyBvciAnZXh0ZXJuYWwgKGN1c3RvbWVyKScgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJ3B1YmxpYyAoYWxsKScKICAgICAgICAgICAgICAgICAgICBTdGF0ZVR5cGVJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFN0YXRlVHlwZU5hbWUgICAgID0+ICdpbnRlcm5hbCcsICAgICAgICAgICAgICAgICAgICAgIyBvciAnZXh0ZXJuYWwnIG9yICdwdWJsaWMnCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZEJ5ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkICAgICAgICAgID0+ICcyMDExLTAxLTA1IDIxOjUzOjUwJywKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkQnkgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZCAgICAgICAgICAgPT4gJzIwMTEtMDEtMDUgMjE6NTM6NTAnLAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgID0+ICcxMjk0Mjg2MDMwLTMxLjE2OTcyOTcxMDQ3MzInLCAgIyBGQVEgQXJ0aWNsZSBuYW1lIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN5c3RlbXRpbWUgKyAnLScgKyByYW5kb20gbnVtYmVyCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIyAuLi4KICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgfTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICEkUGFyYW17RGF0YX0tPntJdGVtSUR9ICkgewoKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1B1YmxpY0ZBUUdldC5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJQdWJsaWNGQVFHZXQ6IEdvdCBubyBJdGVtSUQhIiwKICAgICAgICApOwogICAgfQogICAgaWYgKCAhZGVmaW5lZCggJFBhcmFte0RhdGF9LT57R2V0QXR0YWNobWVudENvbnRlbnRzfSApICkgewogICAgICAgICRQYXJhbXtEYXRhfS0+e0dldEF0dGFjaG1lbnRDb250ZW50c30gPSAxOwogICAgfQoKICAgIG15ICRFcnJvck1lc3NhZ2UgPSAnJzsKCiAgICBteSAkUmV0dXJuRGF0YSA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9OwoKICAgIG15IEBJdGVtSURzID0gc3BsaXQoIC8sLywgJFBhcmFte0RhdGF9LT57SXRlbUlEfSApOwogICAgbXkgQEl0ZW07CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRGQVFPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIHNldCBVc2VySUQgdG8gcm9vdCBiZWNhdXNlIGluIHB1YmxpYyBpbnRlcmZhY2UgdGhlcmUgaXMgbm8gdXNlcgogICAgbXkgJFVzZXJJRCA9IDE7CgogICAgIyBnZXQgcHVibGljIHN0YXRlIHR5cGVzCiAgICBteSAkSW50ZXJmYWNlU3RhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZBUScpLT5TdGF0ZVR5cGVMaXN0KAogICAgICAgIFR5cGVzICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6UHVibGljOjpTdGF0ZVR5cGVzJyksCiAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICApOwoKICAgICMgc3RhcnQgbWFpbiBsb29wCiAgICBmb3IgbXkgJEl0ZW1JRCAoQEl0ZW1JRHMpIHsKCiAgICAgICAgIyBnZXQgdGhlIEZBUSBlbnRyeQogICAgICAgIG15ICVGQVFFbnRyeSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkSXRlbUlELAogICAgICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVGQVFFbnRyeSApICkgewoKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSA9ICdDb3VsZCBub3QgZ2V0IEZBUSBkYXRhJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0ZBUUdldDo6UnVuKCknOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUHVibGljRkFRR2V0Lk5vdFZhbGlkRkFRSUQnLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJQdWJsaWNGQVFHZXQ6ICRFcnJvck1lc3NhZ2UiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgICAgIG15ICRBcHByb3ZhbFN1Y2Nlc3MgPSAxOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdGQVE6OkFwcHJvdmFsUmVxdWlyZWQnKSApIHsKICAgICAgICAgICAgJEFwcHJvdmFsU3VjY2VzcyA9ICRGQVFFbnRyeXtBcHByb3ZlZH07CiAgICAgICAgfQogICAgICAgIGlmICggISRBcHByb3ZhbFN1Y2Nlc3MgfHwgISRJbnRlcmZhY2VTdGF0ZXMtPnsgJEZBUUVudHJ5e1N0YXRlVHlwZUlEfSB9ICkgewoKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSA9ICdDb3VsZCBub3QgZ2V0IEZBUSBkYXRhJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0ZBUUdldDo6UnVuKCknOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUHVibGljRkFRR2V0LkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlB1YmxpY0ZBUUdldDogJEVycm9yTWVzc2FnZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBGQVEgZW50cnkgZGF0YQogICAgICAgIG15ICRBcnRpY2xlID0gewogICAgICAgICAgICBBcnRpY2xlID0+IFwlRkFRRW50cnksCiAgICAgICAgfTsKCiAgICAgICAgbXkgQEluZGV4ID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEluZGV4KAogICAgICAgICAgICBJdGVtSUQgICAgID0+ICRJdGVtSUQsCiAgICAgICAgICAgIFNob3dJbmxpbmUgPT4gMSwgICAgICAgICAjICAgKCAwfDEsIGRlZmF1bHQgMSkKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkVXNlcklELAogICAgICAgICk7CgogICAgICAgIG15ICVGaWxlOwogICAgICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCBcQEluZGV4ICkgKSB7CgogICAgICAgICAgICBteSBAQXR0YWNobWVudHM7CiAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEluZGV4KSB7CgogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17RGF0YX0tPntHZXRBdHRhY2htZW50Q29udGVudHN9ICkgewogICAgICAgICAgICAgICAgICAgICVGaWxlID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUlEID0+ICRJdGVtSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVJRCA9PiAkQXR0YWNobWVudC0+e0ZpbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBjb250ZW50IHRvIGJhc2U2NAogICAgICAgICAgICAgICAgICAgICRGaWxle0NvbnRlbnR9ID0gZW5jb2RlX2Jhc2U2NCggJEZpbGV7Q29udGVudH0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICVGaWxlID0gKAogICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAkQXR0YWNobWVudC0+e0ZpbGVuYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVzaXplICAgID0+ICRBdHRhY2htZW50LT57RmlsZXNpemV9LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnJwogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50cywgeyVGaWxlfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgRkFRIGVudHJ5IGRhdGEKICAgICAgICAgICAgJEZBUUVudHJ5e0F0dGFjaG1lbnR9ID0gXEBBdHRhY2htZW50czsKICAgICAgICB9CgogICAgICAgICMgYWRkCiAgICAgICAgcHVzaCBASXRlbSwgXCVGQVFFbnRyeTsKICAgIH0gICAgIyBmaW5pc2ggbWFpbiBsb29wCgogICAgaWYgKCAhc2NhbGFyIEBJdGVtICkgewogICAgICAgICRFcnJvck1lc3NhZ2UgPSAnQ291bGQgbm90IGdldCBGQVEgZGF0YScKICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OlB1YmxpY0ZBUUdldDo6UnVuKCknOwoKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1B1YmxpY0ZBUUdldC5Ob0ZBUURhdGEnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlB1YmxpY0ZBUUdldDogJEVycm9yTWVzc2FnZSIsCiAgICAgICAgKTsKCiAgICB9CgogICAgJFJldHVybkRhdGEtPntEYXRhfS0+e0ZBUUl0ZW19ID0gXEBJdGVtOwoKICAgICMgcmV0dXJuIHJlc3VsdAogICAgcmV0dXJuICRSZXR1cm5EYXRhOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
LS0tCkRlYnVnZ2VyOgogIERlYnVnVGhyZXNob2xkOiBkZWJ1ZwogIFRlc3RNb2RlOiAnMCcKRGVzY3JpcHRpb246ICcnCkZyYW1ld29ya1ZlcnNpb246IDUuMC54IGdpdApQcm92aWRlcjoKICBPcGVyYXRpb246CiAgICBMYW5ndWFnZUxpc3Q6CiAgICAgIERlc2NyaXB0aW9uOiBMaXN0ICBhbGwgYXZhaWxhYmxlcyBsYW5ndWFnZXMKICAgICAgVHlwZTogRkFROjpMYW5ndWFnZUxpc3QKICAgIFB1YmxpY0NhdGVnb3J5TGlzdDoKICAgICAgRGVzY3JpcHRpb246IExpc3QgYWxsIHB1YmxpYyBGQVEgY2F0ZWdvcmllcyAod2l0aCB0cmVlIGluZm9ybWF0aW9uKQogICAgICBUeXBlOiBGQVE6OlB1YmxpY0NhdGVnb3J5TGlzdAogICAgUHVibGljRkFRR2V0OgogICAgICBEZXNjcmlwdGlvbjogUmV0cmlldmUgcHVibGljIEZBUSBlbnRyaWVzCiAgICAgIFR5cGU6IEZBUTo6UHVibGljRkFRR2V0CiAgICBQdWJsaWNGQVFTZWFyY2g6CiAgICAgIERlc2NyaXB0aW9uOiBTZWFyY2ggZm9yIHB1YmxpYyBGQVFzCiAgICAgIFR5cGU6IEZBUTo6UHVibGljRkFRU2VhcmNoCiAgVHJhbnNwb3J0OgogICAgQ29uZmlnOgogICAgICBNYXhMZW5ndGg6ICcxMDAwMDAwMCcKICAgICAgTmFtZVNwYWNlOiBodHRwOi8vd3d3Lm90cnMub3JnL0ZBUUNvbm5lY3RvcgogICAgICBSZXF1ZXN0TmFtZUZyZWVUZXh0OiAnJwogICAgICBSZXF1ZXN0TmFtZVNjaGVtZTogJycKICAgICAgUmVzcG9uc2VOYW1lRnJlZVRleHQ6ICcnCiAgICAgIFJlc3BvbnNlTmFtZVNjaGVtZTogUmVzcG9uc2UKICAgIFR5cGU6IEhUVFA6OlNPQVAKUmVtb3RlU3lzdGVtOiAnJwpSZXF1ZXN0ZXI6CiAgVHJhbnNwb3J0OgogICAgVHlwZTogJycK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgU29ja2V0Owp1c2UgWUFNTDsKdXNlIE1JTUU6OkJhc2U2NDsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXI7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpMYW5ndWFnZUxpc3Q7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpQdWJsaWNDYXRlZ29yeUxpc3Q7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpQdWJsaWNGQVFTZWFyY2g7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6RkFROjpQdWJsaWNGQVFHZXQ7CgojIGdldCBoZWxwZXIgb2JqZWN0Cm15ICRIZWxwZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCiMgc2V0IHdlYi1zZXJ2aWNlIG5hbWUKbXkgJFdlYnNlcnZpY2VOYW1lID0gJy1UZXN0LScgLiAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKIyBzZXQgVXNlcklEIG9uIDEKbXkgJFVzZXJJRCA9IDE7CgojIGdldCBoZWxwZXIgb2JqZWN0Cm15ICRGQVFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CgojIGdldCBwdWJsaWMgc3RhdGVzCm15ICVTdGF0ZXMgPSAkRkFRT2JqZWN0LT5TdGF0ZUxpc3QoCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKbXkgJFB1YmxpY1N0YXRlSUQ7CmZvciBteSAkS2V5ICggc29ydCBrZXlzICVTdGF0ZXMgKSB7CiAgICBpZiAoICRTdGF0ZXN7JEtleX0gPX4gL15wdWJsaWMuKi8gKSB7CiAgICAgICAgJFB1YmxpY1N0YXRlSUQgPSAkS2V5OwogICAgfQp9CgokU2VsZi0+SXNOb3QoCiAgICAkUHVibGljU3RhdGVJRCwKICAgIHVuZGVmLAogICAgIlNlYXJjaCBmb3IgcHVibGljIFN0YXRlSUQiLAopOwoKIyBjYXRlZ29yeSBvbmUKbXkgJENhdGVnb3J5SURPbmUgPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUFkZCgKICAgIE5hbWUgICAgID0+ICdDb25uZWN0b3JDYXRlZ29yeU9uZScgLiAkV2Vic2VydmljZU5hbWUsCiAgICBDb21tZW50ICA9PiAnQ2F0ZWdvcnkgZm9yIHRlc3RpbmcnLAogICAgUGFyZW50SUQgPT4gMCwKICAgIFZhbGlkSUQgID0+IDEsCiAgICBVc2VySUQgICA9PiAkVXNlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkQ2F0ZWdvcnlJRE9uZSwKICAgICJDYXRlZ29yeUFkZCgpIC0gQ2F0ZWdvcnkiLAopOwoKIyBjYXRlZ29yeSB0d28KbXkgJENhdGVnb3J5SURUd28gPSAkRkFRT2JqZWN0LT5DYXRlZ29yeUFkZCgKICAgIE5hbWUgICAgID0+ICdDb25uZWN0b3JDYXRlZ29yeVR3bycgLiAkV2Vic2VydmljZU5hbWUsCiAgICBDb21tZW50ICA9PiAnQ2hpbGQgQ2F0ZWdvcnkgZm9yIHRlc3RpbmcnLAogICAgUGFyZW50SUQgPT4gJENhdGVnb3J5SURPbmUsCiAgICBWYWxpZElEICA9PiAxLAogICAgVXNlcklEICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENhdGVnb3J5SURUd28sCiAgICAiQ2F0ZWdvcnlBZGQoKSAtIENoaWxkIENhdGVnb3J5IiwKKTsKCiMgY2F0ZWdvcnkgdGhyZWUKbXkgJENhdGVnb3J5SURUaHJlZSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5QWRkKAogICAgTmFtZSAgICAgPT4gJyEiwqckJSYvKCk9P8OcKsOEw5ZMOkxALC4tJyAuICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbW1lbnQgID0+ICdDaGlsZCBDYXRlZ29yeSBmb3IgdGVzdGluZycsCiAgICBQYXJlbnRJRCA9PiAkQ2F0ZWdvcnlJRFR3bywKICAgIFZhbGlkSUQgID0+IDEsCiAgICBVc2VySUQgICA9PiAkVXNlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkQ2F0ZWdvcnlJRFRocmVlLAogICAgIkNhdGVnb3J5QWRkKCkgLSBDaGlsZCBDYXRlZ29yeSIsCik7CgojIGNhdGVnb3J5IGZvdXIKbXkgJENhdGVnb3J5SURGb3VyID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlBZGQoCiAgICBOYW1lICAgICA9PiAnQ29ubmVjdG9yQ2F0ZWdvcnlGb3VyJyAuICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbW1lbnQgID0+ICdDYXRlZ29yeSBmb3IgdGVzdGluZycsCiAgICBQYXJlbnRJRCA9PiAwLAogICAgVmFsaWRJRCAgPT4gMSwKICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRDYXRlZ29yeUlERm91ciwKICAgICJDYXRlZ29yeUFkZCgpIC0gQ2hpbGQgQ2F0ZWdvcnkiLAopOwoKbXkgJEZBUUlET25lID0gJEZBUU9iamVjdC0+RkFRQWRkKAogICAgVGl0bGUgICAgICAgPT4gJ1RpdGxlIEZBUSAnIC4gJFJhbmRvbUlEIC4gJ09uZScgLiAkV2Vic2VydmljZU5hbWUsCiAgICBDYXRlZ29yeUlEICA9PiAkQ2F0ZWdvcnlJRE9uZSwKICAgIFN0YXRlSUQgICAgID0+ICRQdWJsaWNTdGF0ZUlELAogICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgIEtleXdvcmRzICAgID0+ICdzb21lIGtleXdvcmRzJywKICAgIEZpZWxkMSAgICAgID0+ICdQcm9ibGVtLi4uJywKICAgIEZpZWxkMiAgICAgID0+ICdTb2x1dGlvbi4uLicsCiAgICBVc2VySUQgICAgICA9PiAkVXNlcklELAogICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICBBcHByb3ZlZCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRkFRSURPbmUsCiAgICAiRkFRQWRkKCkgLSBGQVEgT25lIiwKKTsKCm15ICRGQVFJRFR3byA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgIFRpdGxlICAgICAgID0+ICdUaXRsZSBGQVEgJyAuICRSYW5kb21JRCAuICcgVHdvJyAuICRXZWJzZXJ2aWNlTmFtZSwKICAgIENhdGVnb3J5SUQgID0+ICRDYXRlZ29yeUlEVGhyZWUsCiAgICBTdGF0ZUlEICAgICA9PiAkUHVibGljU3RhdGVJRCwKICAgIExhbmd1YWdlSUQgID0+IDEsCiAgICBLZXl3b3JkcyAgICA9PiAnJywKICAgIEZpZWxkMSAgICAgID0+ICdQcm9ibGVtIERlc2NyaXB0aW9uIDEuLi4nLAogICAgRmllbGQyICAgICAgPT4gJ1NvbHV0aW9uIG5vdCBmb3VuZDEuLi4nLAogICAgVXNlcklEICAgICAgPT4gJFVzZXJJRCwKICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgIEFwcHJvdmVkICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRGQVFJRFR3bywKICAgICJGQVFBZGQoKSAtIEZBUSBUd28iLAopOwoKbXkgJEZBUUlEVGhyZWUgPSAkRkFRT2JqZWN0LT5GQVFBZGQoCiAgICBUaXRsZSAgICAgICA9PiAnVGl0bGUg5L2/55So5LiL5YiX6K+t6KiAIFRocmVlJyAuICRXZWJzZXJ2aWNlTmFtZSwKICAgIENhdGVnb3J5SUQgID0+ICRDYXRlZ29yeUlERm91ciwKICAgIFN0YXRlSUQgICAgID0+ICRQdWJsaWNTdGF0ZUlELAogICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgIEtleXdvcmRzICAgID0+ICcnLAogICAgRmllbGQxICAgICAgPT4gJ0xvb2sgZm9yIG1lICcgLiAkUmFuZG9tSUQgLiAnIG9uIHRoZSBzZWFyY2gnLAogICAgRmllbGQyICAgICAgPT4gJ1NvbHV0aW9uIG5vdCBmb3VuZDEuLi4nLAogICAgVXNlcklEICAgICAgPT4gJFVzZXJJRCwKICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgQXBwcm92ZWQgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJEZBUUlEVGhyZWUsCiAgICAiRkFRQWRkKCkgLSBGQVEgVGhyZWUiLAopOwoKIyBnZXQgY29tbW9uIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRNYWluT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKIyBmaWxlIGNoZWNrcwpmb3IgbXkgJEZpbGUgKHF3KGJpbiB0eHQpKSB7CiAgICBteSAkTG9jYXRpb24gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKQogICAgICAgIC4gIi9zY3JpcHRzL3Rlc3Qvc2FtcGxlL0dlbmVyaWNJbnRlcmZhY2UvRkFRL0dJLUZBUS1UZXN0LXV0ZjgtMS4kRmlsZSI7CgogICAgbXkgJENvbnRlbnRSZWYgPSAkTWFpbk9iamVjdC0+RmlsZVJlYWQoCiAgICAgICAgTG9jYXRpb24gPT4gJExvY2F0aW9uLAogICAgICAgIE1vZGUgICAgID0+ICdiaW5tb2RlJywKICAgICk7CgogICAgbXkgJEF0dGFjaG1lbnQgPSAkRkFRT2JqZWN0LT5BdHRhY2htZW50QWRkKAogICAgICAgIEl0ZW1JRCAgICAgID0+ICRGQVFJRFRocmVlLAogICAgICAgIENvbnRlbnQgICAgID0+ICR7JENvbnRlbnRSZWZ9LAogICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXN0LycgLiAkRmlsZSwKICAgICAgICBGaWxlbmFtZSAgICA9PiAndGVzdC4nIC4gJEZpbGUsCiAgICAgICAgSW5saW5lICAgICAgPT4gMCwgICAgICAgICAgICAgICAgICMgKDB8MSwgZGVmYXVsdCAwKQogICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySUQsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEF0dGFjaG1lbnQsCiAgICAgICAgIkF0dGFjaG1lbnRBZGQoKSAtIEZpbGUgIiAuICRGaWxlLAogICAgKTsKfQoKbXkgJEZBUUlERm91ciA9ICRGQVFPYmplY3QtPkZBUUFkZCgKICAgIFRpdGxlICAgICAgID0+ICdUaXRsZSBGQVEgJyAuICRSYW5kb21JRCAuICcg0K/Qt9GL0LrQvtCy0YvQtSBGb3VyJyAuICRXZWJzZXJ2aWNlTmFtZSwKICAgIENhdGVnb3J5SUQgID0+ICRDYXRlZ29yeUlERm91ciwKICAgIFN0YXRlSUQgICAgID0+ICRQdWJsaWNTdGF0ZUlELAogICAgTGFuZ3VhZ2VJRCAgPT4gMSwKICAgIEtleXdvcmRzICAgID0+ICcnLAogICAgRmllbGQxICAgICAgPT4gJ1Byb2JsZW0gRGVzY3JpcHRpb24gMS4uLicsCiAgICBGaWVsZDIgICAgICA9PiAnU29sdXRpb24gbm90IGZvdW5kMS4uLicsCiAgICBVc2VySUQgICAgICA9PiAxLAogICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICBBcHByb3ZlZCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRkFRSURGb3VyLAogICAgIkZBUUFkZCgpIC0gRkFRIEZvdXIiLAopOwoKIyBnZXQgbGFuZ3VhZ2VzIGxpc3QKbXkgJUxhbmd1YWdlcyA9ICRGQVFPYmplY3QtPkxhbmd1YWdlTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKbXkgQExhbmd1YWdlTGlzdDsKZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJUxhbmd1YWdlcyApIHsKICAgIG15ICVMYW5ndWFnZSA9ICgKICAgICAgICBJRCAgID0+ICRLZXksCiAgICAgICAgTmFtZSA9PiAkTGFuZ3VhZ2VzeyRLZXl9LAogICAgKTsKICAgIHB1c2ggQExhbmd1YWdlTGlzdCwgeyVMYW5ndWFnZX07Cn0KCiMgZ2V0IEZBUQpteSAlRkFRT25lID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgSXRlbUlEICAgICA9PiAkRkFRSURPbmUsCiAgICBJdGVtRmllbGRzID0+IDEsCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCik7CmZvcmVhY2ggbXkgJEtleSAoIGtleXMgJUZBUU9uZSApIHsKICAgIGlmICggISRGQVFPbmV7JEtleX0gKSB7CiAgICAgICAgJEZBUU9uZXskS2V5fSA9ICcnOwogICAgfQp9CgpteSAlRkFRVHdvID0gJEZBUU9iamVjdC0+RkFRR2V0KAogICAgSXRlbUlEICAgICA9PiAkRkFRSURUd28sCiAgICBJdGVtRmllbGRzID0+IDEsCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCik7CmZvcmVhY2ggbXkgJEtleSAoIGtleXMgJUZBUVR3byApIHsKICAgIGlmICggISRGQVFUd297JEtleX0gKSB7CiAgICAgICAgJEZBUVR3b3skS2V5fSA9ICcnOwogICAgfQp9CgpteSAlRkFRVGhyZWUgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICBJdGVtSUQgICAgID0+ICRGQVFJRFRocmVlLAogICAgSXRlbUZpZWxkcyA9PiAxLAogICAgVXNlcklEICAgICA9PiAkVXNlcklELAopOwpmb3JlYWNoIG15ICRLZXkgKCBrZXlzICVGQVFUaHJlZSApIHsKICAgIGlmICggISRGQVFUaHJlZXskS2V5fSApIHsKICAgICAgICAkRkFRVGhyZWV7JEtleX0gPSAnJzsKICAgIH0KfQoKbXkgQEluZGV4ID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEluZGV4KAogICAgSXRlbUlEICAgICA9PiAkRkFRSURUaHJlZSwKICAgIFNob3dJbmxpbmUgPT4gMSwgICAgICAgICAgICAgIyAgICggMHwxLCBkZWZhdWx0IDEpCiAgICBVc2VySUQgICAgID0+ICRVc2VySUQsCik7CgpteSBAQXR0YWNobWVudHNUaHJlZTsKZm9yIG15ICRBdHRhY2htZW50IChASW5kZXgpIHsKICAgIG15ICVGaWxlID0gJEZBUU9iamVjdC0+QXR0YWNobWVudEdldCgKICAgICAgICBJdGVtSUQgPT4gJEZBUUlEVGhyZWUsCiAgICAgICAgRmlsZUlEID0+ICRBdHRhY2htZW50LT57RmlsZUlEfSwKICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICk7CgogICAgIyBjb252ZXJ0IGNvbnRlbnQgdG8gYmFzZTY0CiAgICAkRmlsZXtDb250ZW50fSA9IGVuY29kZV9iYXNlNjQoICRGaWxle0NvbnRlbnR9ICk7CiAgICBwdXNoIEBBdHRhY2htZW50c1RocmVlLCB7JUZpbGV9Owp9CgpteSAlRkFRRm91ciA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgIEl0ZW1JRCAgICAgPT4gJEZBUUlERm91ciwKICAgIEl0ZW1GaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRCwKKTsKZm9yZWFjaCBteSAkS2V5ICgga2V5cyAlRkFRRm91ciApIHsKICAgIGlmICggISRGQVFGb3VyeyRLZXl9ICkgewogICAgICAgICRGQVFGb3VyeyRLZXl9ID0gJyc7CiAgICB9Cn0KCiMgZ2V0IGFsbCBjYXRlZ29yaWVzIHdpdGggdGhlaXIgbG9uZyBuYW1lcwpteSAkQ2F0ZWdvcnlUcmVlID0gJEZBUU9iamVjdC0+R2V0UHVibGljQ2F0ZWdvcmllc0xvbmdOYW1lcygKICAgIFZhbGlkICA9PiAxLAogICAgVHlwZSAgID0+ICdydycsCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKbXkgQFB1YmxpY0NhdGVnb3J5TGlzdDsKZm9yIG15ICRLZXkgKCBzb3J0KCBrZXlzICV7JENhdGVnb3J5VHJlZX0gKSApIHsKICAgIG15ICVDYXRlZ29yeSA9ICgKICAgICAgICBJRCAgID0+ICRLZXksCiAgICAgICAgTmFtZSA9PiAkQ2F0ZWdvcnlUcmVlLT57JEtleX0sCiAgICApOwogICAgcHVzaCBAUHVibGljQ2F0ZWdvcnlMaXN0LCB7JUNhdGVnb3J5fTsKfQoKIyBjcmVhdGUgd2ViLXNlcnZpY2Ugb2JqZWN0Cm15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJywKICAgIHJlZiAkV2Vic2VydmljZU9iamVjdCwKICAgICJDcmVhdGUgd2Vic2VydmljZSBvYmplY3QiLAopOwoKbXkgJFdlYnNlcnZpY2VJRCA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlQWRkKAogICAgTmFtZSAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyA9PiB7CiAgICAgICAgRGVidWdnZXIgPT4gewogICAgICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUHJvdmlkZXIgPT4gewogICAgICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VJRCwKICAgICJBZGRlZCBXZWJzZXJ2aWNlIiwKKTsKCiMgZ2V0IHJlbW90ZSBob3N0IHdpdGggc29tZSBwcmVjYXV0aW9ucyBmb3IgY2VydGFpbiB1bml0IHRlc3Qgc3lzdGVtcwpteSAkSG9zdDsKbXkgJEZRRE4gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZRRE4nKTsKCiMgdHJ5IHRvIHJlc29sdmUgRlFETiBob3N0CmlmICggJEZRRE4gbmUgJ3lvdXJob3N0LmV4YW1wbGUuY29tJyAmJiBnZXRob3N0YnluYW1lKCRGUUROKSApIHsKICAgICRIb3N0ID0gJEZRRE47Cn0KCiMgdHJ5IHRvIHJlc29sdmUgbG9jYWxob3N0IGluc3RlYWQKaWYgKCAhJEhvc3QgJiYgZ2V0aG9zdGJ5bmFtZSgnbG9jYWxob3N0JykgKSB7CiAgICAkSG9zdCA9ICdsb2NhbGhvc3QnOwp9CgojIHVzZSBoYXJkIGNvZGVkIGxvY2FsaG9zdCBJUCBhZGRyZXNzCmlmICggISRIb3N0ICkgewogICAgJEhvc3QgPSAnMTI3LjAuMC4xJzsKfQoKIyBwcmVwYXJlIHdlYiBzZXJ2aWNlIGNvbmZpZwpteSAkUmVtb3RlU3lzdGVtID0KICAgICRDb25maWdPYmplY3QtPkdldCgnSHR0cFR5cGUnKQogICAgLiAnOi8vJwogICAgLiAkSG9zdAogICAgLiAnLycKICAgIC4gJENvbmZpZ09iamVjdC0+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+ICdQdWJsaWNGQVFHZXQnLAogICAgICAgIEl0ZW1JRCAgICA9PiAiJEZBUUlET25lLCRGQVFJRFR3bywkRkFRSURUaHJlZSIsCiAgICB9LAoKKTsKCiMgZGVidWdnZXIgb2JqZWN0Cm15ICREZWJ1Z2dlck9iamVjdCA9IEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXItPm5ldygKICAgIERlYnVnZ2VyQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgV2Vic2VydmljZUlEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIENvbW11bmljYXRpb25UeXBlID0+ICdQcm92aWRlcicsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkRGVidWdnZXJPYmplY3QsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcicsCiAgICAnRGVidWdnZXJPYmplY3QgaW5zdGFudGlhdGUgY29ycmVjdGx5JywKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBjcmVhdGUgbG9jYWwgb2JqZWN0CiAgICBteSAkTG9jYWxPYmplY3QgPSAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkZBUTo6JFRlc3QtPntPcGVyYXRpb259Ii0+bmV3KAogICAgICAgIERlYnVnZ2VyT2JqZWN0ID0+ICREZWJ1Z2dlck9iamVjdCwKICAgICAgICBXZWJzZXJ2aWNlSUQgICA9PiAkV2Vic2VydmljZUlELAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgIktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpGQVE6OiRUZXN0LT57T3BlcmF0aW9ufSIsCiAgICAgICAgcmVmICRMb2NhbE9iamVjdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSBsb2NhbCBvYmplY3QiLAogICAgKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWItc2VydmljZQogICAgbXkgJExvY2FsUmVzdWx0ID0gJExvY2FsT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gJFRlc3QtPntSZXF1ZXN0RGF0YX0sCiAgICApOwoKICAgICMgY2hlY2sgcmVzdWx0CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0hBU0gnLAogICAgICAgIHJlZiAkTG9jYWxSZXN1bHQsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIiwKICAgICk7CgogICAgIyB3b3JrYXJvdW5kIGJlY2F1c2UgcmVzdWx0cyBmcm9tIGRpcmVjdCBjYWxsIGFuZAogICAgIyBmcm9tIFNPQVAgY2FsbCBhcmUgYSBsaXR0bGUgYml0IGRpZmZlcmVudAogICAgaWYgKCAkVGVzdC0+e09wZXJhdGlvbn0gZXEgJ1B1YmxpY0ZBUUdldCcgKSB7CgogICAgICAgIGlmICggcmVmICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RkFRSXRlbX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgZm9yIG15ICRGQVFJdGVtICggQHsgJExvY2FsUmVzdWx0LT57RGF0YX0tPntGQVFJdGVtfSB9ICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskRkFRSXRlbX0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEZBUUl0ZW0tPnskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEZBUUl0ZW0tPnskS2V5fSA9ICcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB9CgogICAgIyByZW1vdmUgRXJyb3JNZXNzYWdlIHBhcmFtZXRlciBmcm9tIGRpcmVjdCBjYWxsCiAgICAjIHJlc3VsdCB0byBiZSBjb25zaXN0ZW50IHdpdGggU09BUCBjYWxsIHJlc3VsdAogICAgaWYgKCAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9ICkgewogICAgICAgIGRlbGV0ZSAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9OwogICAgfQoKICAgIGlmICggJFRlc3QtPntFeHBlY3RlZFJldHVybkxvY2FsRGF0YX0gKSB7CiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQsCiAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGF9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaGVkIHdpdGggcmVtb3RlIHJlc3VsdC4iLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZFJldHVyblJlbW90ZURhdGF9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaGVkIHdpdGggcmVtb3RlIHJlc3VsdC4iLAogICAgICAgICk7CiAgICB9CgogICAgIyByZW1vdGUgY2FsbCB1c2luZyB0aGUgc3lzdGVtIGFzIFJlcXVlc3RlciBhbmQgUHJvdmlkZXIKCiAgICAjIGNyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0CiAgICBteSAkUmVxdWVzdGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKICAgICRTZWxmLT5JcygKICAgICAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgICAgIHJlZiAkUmVxdWVzdGVyT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QiLAogICAgKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWItc2VydmljZQogICAgbXkgJFJlcXVlc3RlclJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiAkVGVzdC0+e1JlcXVlc3REYXRhfSwKICAgICk7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICAnSEFTSCcsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICMgd29ya2Fyb3VuZCBiZWNhdXNlIHJlc3VsdHMgZnJvbSBkaXJlY3QgY2FsbCBhbmQKICAgICMgZnJvbSBTT0FQIGNhbGwgYXJlIGEgbGl0dGxlIGJpdCBkaWZmZXJlbnQKICAgIGlmICggJFRlc3QtPntPcGVyYXRpb259IGVxICdQdWJsaWNGQVFHZXQnICYmICRUZXN0LT57U3VjY2Vzc1JlcXVlc3R9ICkgewoKICAgICAgICBpZiAoIHJlZiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntGQVFJdGVtfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0ZBUUl0ZW19IH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntGQVFJdGVtfS0+eyRLZXl9ICkgewogICAgICAgICAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0ZBUUl0ZW19LT57JEtleX0gPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoIHJlZiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntGQVFJdGVtfSBlcSAnQVJSQVknICkgewogICAgICAgICAgICBmb3IgbXkgJEZBUUl0ZW0gKCBAeyAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntGQVFJdGVtfSB9ICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskRkFRSXRlbX0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEZBUUl0ZW0tPnskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEZBUUl0ZW0tPnskS2V5fSA9ICcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e1N1Y2Nlc3N9LAogICAgICAgICRUZXN0LT57U3VjY2Vzc1JlcXVlc3R9LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIC0gU3VjY2VzcyBzdGF0dXMiLAogICAgKTsKCiAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YX0sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgc3VjY2Vzc2Z1bCByZXN1bHQgKG5lZWRzIGNvbmZpZ3VyZWQgYW5kIHJ1bm5pbmcgd2Vic2VydmVyKSIsCiAgICApOwoKfSAgICAjZW5kIGxvb3AKCiMgY2xlYW4gdXAgd2ViLXNlcnZpY2UKbXkgJFdlYnNlcnZpY2VEZWxldGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZURlbGV0ZSgKICAgIElEICAgICA9PiAkV2Vic2VydmljZUlELAogICAgVXNlcklEID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VEZWxldGUsCiAgICAiRGVsZXRlZCBXZWJzLWVydmljZSAkV2Vic2VydmljZUlEIiwKKTsKCiMgY2xlYW4gdXAgRkFRIHN0dWZmCm15ICRGQVFEZWxldGUgPSAkRkFRT2JqZWN0LT5GQVFEZWxldGUoCiAgICBJdGVtSUQgPT4gJEZBUUlET25lLAogICAgVXNlcklEID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgJEZBUURlbGV0ZSwKICAgICJGQVFEZWxldGUoKSAtIEZBUUlEOiAkRkFRSURPbmUiLAopOwoKJEZBUURlbGV0ZSA9ICRGQVFPYmplY3QtPkZBUURlbGV0ZSgKICAgIEl0ZW1JRCA9PiAkRkFRSURUd28sCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkRkFRRGVsZXRlLAogICAgIkZBUURlbGV0ZSgpIC0gRkFRSUQ6ICRGQVFJRFR3byIsCik7CgokRkFRRGVsZXRlID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgSXRlbUlEID0+ICRGQVFJRFRocmVlLAogICAgVXNlcklEID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgJEZBUURlbGV0ZSwKICAgICJGQVFEZWxldGUoKSAtIEZBUUlEOiAkRkFRSURUaHJlZSIsCik7CgokRkFRRGVsZXRlID0gJEZBUU9iamVjdC0+RkFRRGVsZXRlKAogICAgSXRlbUlEID0+ICRGQVFJREZvdXIsCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkRkFRRGVsZXRlLAogICAgIkZBUURlbGV0ZSgpIC0gRkFRSUQ6ICRGQVFJREZvdXIiLAopOwoKbXkgJENhdGVnb3J5RGVsZXRlID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlEZWxldGUoCiAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlERm91ciwKICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENhdGVnb3J5RGVsZXRlLAogICAgIkNhdGVnb3J5RGVsZXRlKCkgLSBDYXRlZ29yeTogJENhdGVnb3J5SURGb3VyIiwKKTsKCiRDYXRlZ29yeURlbGV0ZSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RGVsZXRlKAogICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRFRocmVlLAogICAgVXNlcklEICAgICA9PiAkVXNlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkQ2F0ZWdvcnlEZWxldGUsCiAgICAiQ2F0ZWdvcnlEZWxldGUoKSAtIENhdGVnb3J5OiAkQ2F0ZWdvcnlJRFRocmVlIiwKKTsKCiRDYXRlZ29yeURlbGV0ZSA9ICRGQVFPYmplY3QtPkNhdGVnb3J5RGVsZXRlKAogICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRFR3bywKICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENhdGVnb3J5RGVsZXRlLAogICAgIkNhdGVnb3J5RGVsZXRlKCkgLSBDYXRlZ29yeTogJENhdGVnb3J5SURUd28iLAopOwoKJENhdGVnb3J5RGVsZXRlID0gJEZBUU9iamVjdC0+Q2F0ZWdvcnlEZWxldGUoCiAgICBDYXRlZ29yeUlEID0+ICRDYXRlZ29yeUlET25lLAogICAgVXNlcklEICAgICA9PiAkVXNlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkQ2F0ZWdvcnlEZWxldGUsCiAgICAiQ2F0ZWdvcnlEZWxldGUoKSAtIENhdGVnb3J5OiAkQ2F0ZWdvcnlJRE9uZSIsCik7CgoxOwo=
fi91dGYtOC1maWxlLcOkw7bDvMOfLeOCq+OCueOCv+ODni50eHQKCkp1c3QgdGV4dCBmb3IgdGhlIGF0dGFjaG1lbnQKCuS9v+eUqOS4i+WIl+ivreiogAoK0K/Qt9GL0LrQvtCy0YvQtQoKISLCpyQlJi8oKT0/w5wqw4TDlkw6TEAsLi0K
fi91dGYtOC1maWxlLcOkw7bDvMOfLeOCq+OCueOCv+ODni50eHQKCkp1c3QgdGV4dCBmb3IgdGhlIGF0dGFjaG1lbnQKCuS9v+eUqOS4i+WIl+ivreiogAoK0K/Qt9GL0LrQvtCy0YvQtQoKISLCpyQlJi8oKT0/w5wqw4TDlkw6TEAsLi0K
JVBERi0xLjQKJaqrrK0KNCAwIG9iago8PAovQ3JlYXRvciAoQXBhY2hlIEZPUCBWZXJzaW9uIDEuMSkKL1Byb2R1Y2VyIChBcGFjaGUgRk9QIFZlcnNpb24gMS4xKQovQ3JlYXRpb25EYXRlIChEOjIwMTUxMDE0MDUzNzExKzAyJzAwJykKPj4KZW5kb2JqCjUgMCBvYmoKPDwKICAvTiAzCiAgL0xlbmd0aCAxMiAwIFIKICAvRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0KeJydlndYU+cex99zTvZgJCFsCHuGpUAAkRGmgAzZohCSAAESICQM90BUsKKoyFIEKYpYsFqG1IkoDori3g1SBJRarOLC0USep/X29t7b2+8f53ye3/v7vef9jfd5DgCkgEyuMBdWAUAokogj/L0ZsXHxDOwAgAEeYIA9ABxubrZXWFgwkCvQl83IlTuBf9GrmwBSvK8xFXuB/0+q3GyxBAAoTM6zePxcrpyL5JyZL8lW2CflTEvOUDCMUrBYfkA5ayg4dYatP/vMsKeCeUIRT86Rcs7mCXkK7pXzhjwpX86IIpfiPAE/X87X5WycKRUK5PxGESvkc+Q5oEgKu4TPTZOznZxJ4sgItpznAIAjpX7ByV+whF8gUSTFzsouFAtS0yQMc64Fw97FhcUI4Odn8iUSZhiHm8ER8xjsLGE2R1QIwEzOn0VR1JYhL7KTvYuTE9PBxv6LQv3Xxb8pRW9n6EX4555B9P4/bH/ll9UAAGtKXpstf9iSqwDoXAeAxt0/bMZ7AFCW963j8hf50BXzkiaRZLva2ubn59sI+FwbRUF/1/90+Bv64ns2iu1+Lw/Dh5/CkWZKGIq6cbMys6RiRm42h8tnMP88xP848K/PYR3BT+GL+SJ5RLR8ygSiVHm7RTyBRJAlYghE/6mJ/zDsT5qZa7mojR8BLdEGqFymAeTnfoCiEgGSsFu+Av3et2B8NFDcvBj90Zm5/yzo33eFyxSPXEHq5zh2RCSDKxXnzawpriVAAwJQBjSgCfSAETAHTOAAnIEb8AS+YB4IBZEgDiwGXJAGhEAM8sEysBoUg1KwBewA1aAONIJm0AoOg05wDJwG58AlcAXcAPeADIyAp2ASvALTEARhITJEhTQhfcgEsoIcIBY0F/KFgqEIKA5KglIhESSFlkFroVKoHKqG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K0b1R5vHHMaOjfuNX3my8MnI0+yn0xPFP6v+XPvM/Nl3v3j+0j8ZOznyXPz806+bXmi+2Pdy9sueqbCph6+Er6Zfl7zRfLP/Lett37uYd6PT+e+x7ys/WHzo/hj08f4n4adPvwHJ4vTiCmVuZHN0cmVhbQplbmRvYmoKNiAwIG9iagpbL0lDQ0Jhc2VkIDUgMCBSXQplbmRvYmoKNyAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDEzIDAgUgo+PgpzdHJlYW0KPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz48eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj4KPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KPHJkZjpEZXNjcmlwdGlvbiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHJkZjphYm91dD0iIj4KPGRjOmxhbmd1YWdlPmVuPC9kYzpsYW5ndWFnZT4KPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KPGRjOmRhdGU+MjAxNS0xMC0xNFQwNTozNzoxMSswMjowMDwvZGM6ZGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIiByZGY6YWJvdXQ9IiI+CjxwZGY6UERGVmVyc2lvbj4xLjQ8L3BkZjpQREZWZXJzaW9uPgo8cGRmOlByb2R1Y2VyPkFwYWNoZSBGT1AgVmVyc2lvbiAxLjE8L3BkZjpQcm9kdWNlcj4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiByZGY6YWJvdXQ9IiI+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTEwLTE0VDA1OjM3OjExKzAyOjAwPC94bXA6Q3JlYXRlRGF0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IG9iagoyNjA1CmVuZG9iagozMiAwIG9iago8PCAvVVJJIChodHRwOi8vbG9jYWxob3N0L290cnMvaW5kZXgucGw/QWN0aW9uPUFkbWluRkFRRXhwbG9yZXI7Q2F0ZWdvcnlJRD0xKQovUyAvVVJJID4+CmVuZG9iagozMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDkuOCAzMTMuMTg3IDQ2Ni4yMSAzMjMuMTc3IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDMyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjM1IDAgb2JqCjw8IC9VUkkgKGh0dHA6Ly9sb2NhbGhvc3Qvb3Rycy9pbmRleC5wbD9BY3Rpb249QWRtaW5GQVFFeHBsb3JlcjtDYXRlZ29yeT1NaXNjKQovUyAvVVJJID4+CmVuZG9iagozNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA5Ni41NiAyOTEuNzQxIDQ1OC4wNSAzMDEuNzMxIF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjM3IDAgb2JqCjw8IC9VUkkgKGh0dHA6Ly9sb2NhbGhvc3Qvb3Rycy9pbmRleC5wbD9BY3Rpb249QWRtaW5GQVFFeHBsb3JlcjtDYXRlZ29yeT1NeSUyMENhdGVnb3J5KQovUyAvVVJJID4+CmVuZG9iagozOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDI0OC44NDkgNDk4LjYzIDI1OC44MzkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzcgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzkgMCBvYmoKPDwgL1VSSSAoaHR0cDovL2xvY2FsaG9zdC9vdHJzL2luZGV4LnBsP0FjdGlvbj1DdXN0b21lckZBUUV4cGxvcmVyO0NhdGVnb3J5PUdyYW5QYXJlbnQ6OlBhcmVudDo6U29uKQovUyAvVVJJID4+CmVuZG9iago0MCAwIG9iago8PCAvVHlwZSAv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b2JqCjY3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgNjc5LjYyOSAxMTcuMTkgNjg5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NiAwIFIKL0ggL0kKCj4+CmVuZG9iago2OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguNjk2IDY3OS42MjkgNTQyLjkxNiA2ODkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjcwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzI4IDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjcxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgNjY3LjYyOSAxNTMuODExIDY3Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzAgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM2LjMzOCA2NjcuNjI5IDU0Mi42OTggNjc3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MCAwIFIKL0ggL0kKCj4+CmVuZG9iago3MyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyOCAwIFIgL1hZWiA3Mi4wIDcwMC44IG51bGxdCj4+CmVuZG9iago3NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA2NTUuNjI5IDE4My42ODkgNjY1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MyAwIFIKL0ggL0kKCj4+CmVuZG9iago3NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzYuNDc2IDY1NS42MjkgNTQyLjgzNiA2NjUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDczIDAgUgovSCAvSQoKPj4KZW5kb2JqCjc2IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzI4IDAgUiAvWFlaIDcyLjAgNjQ1LjgxOSBudWxsXQo+PgplbmRvYmoKNzcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNjQzLjYyOSAyMDAuOTAxIDY1My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzYgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM2LjEyOCA2NDMuNjI5IDU0Mi40ODggNjUzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3NiAwIFIKL0ggL0kKCj4+CmVuZG9iago3OSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyOCAwIFIgL1hZWiA3Mi4wIDU5MC44MzggbnVsbF0KPj4KZW5kb2JqCjgwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDYzMS42MjkgMTc5LjE2MyA2NDEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDc5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjgxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNi4zIDYzMS42MjkgNTQyLjY2IDY0MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzkgMCBSCi9IIC9JCgo+PgplbmRvYmoKODIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjggMCBSIC9YWVogNzIuMCA1MzUuODU3IG51bGxdCj4+CmVuZG9iago4MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA2MTkuNjI5IDIwNS40OTQgNjI5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4MiAwIFIKL0ggL0kKCj4+CmVuZG9iago4NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzYuMDkgNjE5LjYyOSA1NDIuNDUgNjI5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4MiAwIFIKL0ggL0kKCj4+CmVuZG9iago4NSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyOCAwIFIgL1hZWiA3Mi4wIDQ4MC44NzYgbnVsbF0KPj4KZW5kb2JqCjg2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDYwNy42MjkgMjc3LjUzOCA2MTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjg3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS41MjIgNjA3LjYyOSA1NDEuODgyIDYxNy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODUgMCBSCi9IIC9JCgo+PgplbmRvYmoKODggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjggMCBSIC9YWVogNzIuMCA0MDEuODk1IG51bGxdCj4+CmVuZG9iago4OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1OTUuNjI5IDM0NC45MzEgNjA1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4OCAwIFIKL0ggL0kKCj4+CmVuZG9iago5MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzUuODQyIDU5NS42MjkgNTQyLjIwMiA2MDUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjkxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzI4IDAgUiAvWFlaIDcyLjAgMzQ2LjkxNCBudWxsXQo+PgplbmRvYmoKOTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNTgzLjYyOSAxOTIuNzY1IDU5My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgOTEgMCBSCi9IIC9JCgo+PgplbmRvYmoKOTMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM2LjE5MiA1ODMuNjI5IDU0Mi41NTIgNTkzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA5MSAwIFIKL0ggL0kKCj4+CmVuZG9iago5NCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyOCAwIFIgL1hZWiA3Mi4wIDI5MS45MzMgbnVsbF0KPj4KZW5kb2JqCjk1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDU3MS42MjkgMjUyLjg2OSA1ODEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDk0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjk2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS43MTQgNTcxLjYyOSA1NDIuMDc0IDU4MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgOTQgMCBSCi9IIC9JCgo+PgplbmRvYmoKOTcgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjggMCBSIC9YWVogNzIuMCAyMzYuOTUyIG51bGxdCj4+CmVuZG9iago5OCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1NTkuNjI5IDE5My42OTMgNTY5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA5NyAwIFIKL0ggL0kKCj4+CmVuZG9iago5OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzYuMTg2IDU1OS42MjkgNTQyLjU0NiA1NjkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDk3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjEwMCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyOCAwIFIgL1hZWiA3Mi4wIDE4MS45NzEgbnVsbF0KPj4KZW5kb2JqCjEwMSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1NDcuNjI5IDI4Ny42NzIgNTU3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMDAgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTAyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNi4zNTIgNTQ3LjYyOSA1NDIuNzEyIDU1Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTAwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjEwMyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyOCAwIFIgL1hZWiA3Mi4wIDEyNi45OSBudWxsXQo+PgplbmRvYmoKMTA0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDUzNS42MjkgMzE2Ljc0OSA1NDUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDEwMyAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMDUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1LjIxIDUzNS42MjkgNTQxLjU3IDU0NS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTAzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjEwNiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszMSAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iagoxMDcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNTIzLjYyOSAyMTMuNTQxIDUzMy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTA2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjEwOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzYuMDI4IDUyMy42MjkgNTQyLjM4OCA1MzMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDEwNiAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMDkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzEgMCBSIC9YWVogNzIuMCA2ODQuMTU0IG51bGxdCj4+CmVuZG9iagoxMTAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNTExLjYyOSAyOTQuNjM1IDUyMS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTA5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjExMSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzUuMzg0IDUxMS42MjkgNTQxLjc0NCA1MjEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDEwOSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMTIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzEgMCBSIC9YWVogNzIuMCA2MzAuNjQgbnVsbF0KPj4KZW5kb2JqCjExMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA0OTkuNjI5IDIyNC45NTIgNTA5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMTIgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTE0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNi4xMDggNDk5LjYyOSA1NDIuNDY4IDUwOS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTEyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjExNSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszMSAwIFIgL1hZWiA3Mi4wIDU3Ny4xMjYgbnVsbF0KPj4KZW5kb2JqCjExNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA0ODcuNjI5IDMyMy45OTcgNDk3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMTUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTE3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS4xNTIgNDg3LjYyOSA1NDEuNTEyIDQ5Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTE1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjExOCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszMSAwIFIgL1hZWiA3Mi4wIDE4MC45NTIgbnVsbF0KPj4KZW5kb2JqCjExOSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA0NzUuNjI5IDM4OS44NDkgNDg1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMTggMCBSCi9IIC9JCgo+PgplbmRvYmoKMTIwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNC42MyA0NzUuNjI5IDU0MC45OSA0ODUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDExOCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMjIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNDYzLjYyOSAyNDIuMzM2IDQ3My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTIxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjEyMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzUuOCA0NjMuNjI5IDU0Mi4xNiA0NzMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDEyMSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMjQgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDcgMCBSIC9YWVogNzIuMCA3MjAuMCBudWxsXQo+PgplbmRvYmoKMTI1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgNDUxLjYyOSAyMDQuOTI5IDQ2MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTI0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjEyNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzUuOTU2IDQ1MS42MjkgNTQyLjMxNiA0NjEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDEyNCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMjcgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDcgMCBSIC9YWVogNzIuMCA3MDAuOCBudWxsXQo+PgplbmRvYmoKMTI4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDQzOS42MjkgMTczLjM4MyA0NDkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDEyNyAwIFIKL0ggL0kKCj4+CmVuZG9iagoxMjkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM2LjM0NCA0MzkuNjI5IDU0Mi43MDQgNDQ5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMjcgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTMwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQ3IDAgUiAvWFlaIDcyLjAgNjI2LjQgbnVsbF0KPj4KZW5kb2JqCjEzMSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA0MjcuNjI5IDE2NC44ODggNDM3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMzAgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTMyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNi41ODMgNDI3LjYyOSA1NDIuOTQzIDQzNy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTMwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjEzMyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs0NyAwIFIgL1hZWiA3Mi4wIDU1OC4wIG51bGxdCj4+CmVuZG9iagoxMzQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNDE1LjYyOSAyMDkuNTAzIDQyNS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTMzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjEzNSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzYuMDYgNDE1LjYyOSA1NDIuNDIgNDI1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMzMgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTM2IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQ3IDAgUiAvWFlaIDcyLjAgNDg5LjYgbnVsbF0KPj4KZW5kb2JqCjEzNyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA0MDMuNjI5IDIyMS43MTkgNDEzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMzYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTM4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS45NjIgNDAzLjYyOSA1NDIuMzIyIDQxMy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTM2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjEzOSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1MCAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iagoxNDAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgODAuMCAzOTEuNjI5IDE0OS4zNjcgNDAxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxMzkgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTQxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNi4zNzIgMzkxLjYyOSA1NDIuNzMyIDQwMS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTM5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE0MiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1MCAwIFIgL1hZWiA3Mi4wIDY0NC44IG51bGxdCj4+CmVuZG9iagoxNDMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgMzc5LjYyOSAxOTguOTU2IDM4OS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTQyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjE0NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzYuMTQyIDM3OS42MjkgNTQyLjUwMiAzODkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE0MiAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNDUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTAgMCBSIC9YWVogNzIuMCA1NjguNCBudWxsXQo+PgplbmRvYmoKMTQ2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDM2Ny42MjkgMTk0LjU5MSAzNzcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE0NSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNDcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM2LjE3OCAzNjcuNjI5IDU0Mi41MzggMzc3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNDUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTQ4IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU2IDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjE0OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDM1NS42MjkgMTYxLjc2IDM2NS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTQ4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE1MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzYuMjc4IDM1NS42MjkgNTQyLjYzOCAzNjUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE0OCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNTEgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTYgMCBSIC9YWVogNzIuMCA3MDAuOCBudWxsXQo+PgplbmRvYmoKMTUyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDM0My42MjkgMTU3LjQ4NiAzNTMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE1MSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNTMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM2LjQ3IDM0My42MjkgNTQyLjgzIDM1My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTUxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjE1NCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NiAwIFIgL1hZWiA3Mi4wIDY0NS45NDQgbnVsbF0KPj4KZW5kb2JqCjE1NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzMzEuNjI5IDQzOS4zNzkgMzQxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNTQgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTU2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNC4yNzUgMzMxLjYyOSA1NDAuNjM1IDM0MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTU0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE1NyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NiAwIFIgL1hZWiA3Mi4wIDU4My4yMDMgbnVsbF0KPj4KZW5kb2JqCjE1OCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzMTkuNjI5IDQyMy4xOTcgMzI5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNTcgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTU5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNC40MTEgMzE5LjYyOSA1NDAuNzcxIDMyOS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTU3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE2MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NiAwIFIgL1hZWiA3Mi4wIDUyMC40NjIgbnVsbF0KPj4KZW5kb2JqCjE2MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzMDcuNjI5IDQwNS41NzEgMzE3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNjAgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTYyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNC41NiAzMDcuNjI5IDU0MC45MiAzMTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE2MCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNjMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTYgMCBSIC9YWVogNzIuMCA0NTcuNzIxIG51bGxdCj4+CmVuZG9iagoxNjQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjk1LjYyOSA0MTYuODY0IDMwNS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTYzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjE2NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzQuNDY1IDI5NS42MjkgNTQwLjgyNSAzMDUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE2MyAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNjYgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTYgMCBSIC9YWVogNzIuMCAzOTQuOTggbnVsbF0KPj4KZW5kb2JqCjE2NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyODMuNjI5IDQxMS4zNjcgMjkzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNjYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTY4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNC41MTEgMjgzLjYyOSA1NDAuODcxIDI5My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTY2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE2OSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NiAwIFIgL1hZWiA3Mi4wIDMzMi4yMzkgbnVsbF0KPj4KZW5kb2JqCjE3MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyNzEuNjI5IDM4Ny42NzggMjgxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNjkgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTcxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS4wNjQgMjcxLjYyOSA1NDEuNDI0IDI4MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTY5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE3MiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NiAwIFIgL1hZWiA3Mi4wIDIzMy40OTggbnVsbF0KPj4KZW5kb2JqCjE3MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyNTkuNjI5IDM4Mi42NjkgMjY5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNzIgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTc0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS4xMDYgMjU5LjYyOSA1NDEuNDY2IDI2OS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTcyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjE3NSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NiAwIFIgL1hZWiA3Mi4wIDEzNC43NTcgbnVsbF0KPj4KZW5kb2JqCjE3NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyNDcuNjI5IDMzMy4xODYgMjU3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNzUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTc3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS4xNyAyNDcuNjI5IDU0MS41MyAyNTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE3NSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxNzggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTkgMCBSIC9YWVogNzIuMCA3MjAuMCBudWxsXQo+PgplbmRvYmoKMTc5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDIzNS42MjkgMjcxLjQyNyAyNDUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE3OCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxODAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1LjY5MiAyMzUuNjI5IDU0Mi4wNTIgMjQ1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxNzggMCBSCi9IIC9JCgo+PgplbmRvYmoKMTgxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU5IDAgUiAvWFlaIDcyLjAgNjY0LjQ0NCBudWxsXQo+PgplbmRvYmoKMTgyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDIyMy42MjkgMjYxLjY3OCAyMzMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE4MSAwIFIKL0ggL0kKCj4+CmVuZG9iagoxODMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1Ljc3NCAyMjMuNjI5IDU0Mi4xMzQgMjMzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxODEgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTg0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU5IDAgUiAvWFlaIDcyLjAgNjAzLjAyMSBudWxsXQo+PgplbmRvYmoKMTg1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDIxMS42MjkgMjY0LjA3OCAyMjEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE4NCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxODYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1Ljc1NCAyMTEuNjI5IDU0Mi4xMTQgMjIxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxODQgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTg3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU5IDAgUiAvWFlaIDcyLjAgNTQxLjU5OCBudWxsXQo+PgplbmRvYmoKMTg4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDE5OS42MjkgMjc1LjY3OSAyMDkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE4NyAwIFIKL0ggL0kKCj4+CmVuZG9iagoxODkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1LjY1NiAxOTkuNjI5IDU0Mi4wMTYgMjA5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxODcgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTkwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU5IDAgUiAvWFlaIDcyLjAgNDgwLjE3NSBudWxsXQo+PgplbmRvYmoKMTkxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDE4Ny42MjkgMjg0LjUzMSAxOTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDE5MCAwIFIKL0ggL0kKCj4+CmVuZG9iagoxOTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1LjU4IDE4Ny42MjkgNTQxLjk0IDE5Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTkwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjE5MyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1OSAwIFIgL1hZWiA3Mi4wIDQxOC43NTIgbnVsbF0KPj4KZW5kb2JqCjE5NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxNzUuNjI5IDMyMy41MjcgMTg1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxOTMgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTk1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS4yNTIgMTc1LjYyOSA1NDEuNjEyIDE4NS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTkzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjE5NiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1OSAwIFIgL1hZWiA3Mi4wIDM1Ny4zMjkgbnVsbF0KPj4KZW5kb2JqCjE5NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxNjMuNjI5IDI5NC44MjggMTczLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxOTYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMTk4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS40OTQgMTYzLjYyOSA1NDEuODU0IDE3My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTk2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjE5OSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1OSAwIFIgL1hZWiA3Mi4wIDI5NS45MDYgbnVsbF0KPj4KZW5kb2JqCjIwMCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxNTEuNjI5IDI5OC4wMTUgMTYxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAxOTkgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjAxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS40NjggMTUxLjYyOSA1NDEuODI4IDE2MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMTk5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjIwMiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1OSAwIFIgL1hZWiA3Mi4wIDIzNC40ODMgbnVsbF0KPj4KZW5kb2JqCjIwMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxMzkuNjI5IDI4My42ODUgMTQ5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMDIgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjA0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS41ODggMTM5LjYyOSA1NDEuOTQ4IDE0OS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjAyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjIwNSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1OSAwIFIgL1hZWiA3Mi4wIDE3My4wNiBudWxsXQo+PgplbmRvYmoKMjA2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDEyNy42MjkgMjM1LjcwNyAxMzcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIwNSAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMDcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1Ljk5MiAxMjcuNjI5IDU0Mi4zNTIgMTM3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMDUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjA4IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU5IDAgUiAvWFlaIDcyLjAgMTExLjYzNyBudWxsXQo+PgplbmRvYmoKMjA5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDExNS42MjkgMjk2LjQ3MSAxMjUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIwOCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMTAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1LjQ4IDExNS42MjkgNTQxLjg0IDEyNS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjA4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjIxMSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs2MiAwIFIgL1hZWiA3Mi4wIDcwOC4wIG51bGxdCj4+CmVuZG9iagoyMTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTAzLjYyOSAyNzkuMzgzIDExMy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjExIDAgUgovSCAvSQoKPj4KZW5kb2JqCjIxMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzUuNjI0IDEwMy42MjkgNTQxLjk4NCAxMTMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIxMSAwIFIKL0ggL0kKCj4+CmVuZG9iagoyMTQgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNjIgMCBSIC9YWVogNzIuMCA2NDQuNDAxIG51bGxdCj4+CmVuZG9iagoyMTUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgOTEuNjI5IDM0Ny4wNDggMTAxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMTQgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjE2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS4wNTQgOTEuNjI5IDU0MS40MTQgMTAxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyMTQgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjE3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzYyIDAgUiAvWFlaIDcyLjAgNTgwLjgwMiBudWxsXQo+PgplbmRvYmoKMjE4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBb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MCBSCjEzNCAwIFIKMTM1IDAgUgoxMzcgMCBSCjEzOCAwIFIKMTQwIDAgUgoxNDEgMCBSCjE0MyAwIFIKMTQ0IDAgUgoxNDYgMCBSCjE0NyAwIFIKMTQ5IDAgUgoxNTAgMCBSCjE1MiAwIFIKMTUzIDAgUgoxNTUgMCBSCjE1NiAwIFIKMTU4IDAgUgoxNTkgMCBSCjE2MSAwIFIKMTYyIDAgUgoxNjQgMCBSCjE2NSAwIFIKMTY3IDAgUgoxNjggMCBSCjE3MCAwIFIKMTcxIDAgUgoxNzMgMCBSCjE3NCAwIFIKMTc2IDAgUgoxNzcgMCBSCjE3OSAwIFIKMTgwIDAgUgoxODIgMCBSCjE4MyAwIFIKMTg1IDAgUgoxODYgMCBSCjE4OCAwIFIKMTg5IDAgUgoxOTEgMCBSCjE5MiAwIFIKMTk0IDAgUgoxOTUgMCBSCjE5NyAwIFIKMTk4IDAgUgoyMDAgMCBSCjIwMSAwIFIKMjAzIDAgUgoyMDQgMCBSCjIwNiAwIFIKMjA3IDAgUgoyMDkgMCBSCjIxMCAwIFIKMjEyIDAgUgoyMTMgMCBSCjIxNSAwIFIKMjE2IDAgUgoyMTggMCBSCjIxOSAwIFIKXQplbmRvYmoKNjUgMCBvYmoKPDwKICAvUmVzb3VyY2VzIDMgMCBSCiAgL1R5cGUgL1BhZ2UKICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQogIC9Dcm9wQm94IFswIDAgNjEyIDc5Ml0KICAvQmxlZWRCb3ggWzAgMCA2MTIgNzkyXQogIC9UcmltQm94IFswIDAgNjEyIDc5Ml0KICAvUGFyZW50IDEgMCBSCiAgL0Fubm90cyA2OCAwIFIKICAvQ29udGVudHMgMjIwIDAgUgo+PgoKZW5kb2JqCjIyMSAwIG9iagoyOTA1NgplbmRvYmoKMjIzIDAgb2JqCjw8IC9MZW5ndGggMjI0IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJztWc1uIzcMvs9T6AVWK+pfQGEgseOivQUNsIfFnrZ/h80W6aWvX5KiZjT2eOJs09QwimDgEUVRJPXpozR5GkAZ/HtHP6lY9flxeBIZqGSViyIKUTmjc4jGgHpU3AYNhttfUP2gNepKK7Y+sTS2f1cfhq+DUd8PHz+h6s/K6KD+GszxdJ3Jn4b7zk/qNRfrZ++pA3vBnj4NyVc42KihhFKKylbZpC3qfH5U7394tGr3Bwd1PwdK9FZHCHMAGVWyzlmkKNM24NzU+UVZnMR7Y4w9apLagSRw2PX3ZIBi/9jU4TpUjTXvIGhT4uy1mhpbL/FoboK8Meq34fZheL/HnIFRD79OO9FrFzN6b5wCwHGBIknq4VF9/A6FYfNJPfw43D3MI/KgA+7Wi0o4Q8oSPHzMCJGs/vxFfVBfUeyDqfHSSwYVbUOYbwib4SsxN01Zi4dZQys6HOQK9vjcYM5QCnfyvsPGboOp9QpVDIoNqlkrDxlANVtQnaxhWLDF31x/R72EsluUoZ4h/TjpkZxk9D7q47QAYs9vVHQ0O9zUxVyCQVa26EJ+GFzQFhG5i8MxW9TKNQCIEhdNsN2oUnstRpn4DRPgY+1nJ+9qgOT0ujUKk+Wjlgm1lx7wNUk0AhY1qVW9MaWG2sUXQNtIa+PLGJ+kmCxRD3tMqU6Svhbl8UxJekNddx5pJpl1YkHk1sv7XsbHTn5gg2W7FlHV5fmy6MIU3zI2I27LaEvJyAJL4GzvlwDO2uZ8ZMFIN4ZXQ+Z1lNe7qY9XqTwH62KwuETMRbxKVAMQExuMz7pVWJ8CZxaAgcgkrJbgcUxsromts4AISCpA3sVFlmRHXhGIGdMW2YJAiDzsYccwLALXbQc1togOePs8UaIL2kePQTl/nZhKoBOSB57JxmU75T673ghqVzM9Yil0fX7Sae7MHTiBoFy0K5QTk5cgxC68JYReXFbB6OQI6AmuEi3WWW0ijeu2wwIDvRRBdj+xjN3Wsgi5jVxHjfVFR/Ip+bBIPP5VUUNjmES34rKb6GakmhbKP8ESbkzOTeo2w1VhqVjtHFIr+Klc7848EoGsrZ0m6qaFDl3SdhI417MsS9ZxV+Wt0Uqes1vDN1tIZjzCcX0Jx3oNd+vIxWKpC2UgheWz2+5VkQsGTTgueqTC6vsKqtnxbivZ2AoprsLUOTpqF4Sbv86rhAtWR3SkxDweuijb7J7rINBO/QeHrCNInHl7OARwK6YgtolrXJL32IF4JwiZh7gOxISXa8PBuMXCC28OxG9gTFf4Q0XJyV0lEj1YnRNDarX2rgDlcq6t3uHBmoLJy4iL/y3i/u2bqg+gs0Hqt/E6q7tPDm+D6EcK6fLuqr7QQR2rllu+rLpyFvwWutxedoSvS7MOg4Bb2iT6emMurHoufVRzTnuD/Gr9SEC0T/sqxasnBNJIgpclTsvTKqXplo7b6bzwqnsSWlkfQ8vRxtEu9TCX8Tes/fr4NsdRrB1Rsu9yOGxfEjkX8Lx/61ANge4BiTjFL0L15myoShHdSspLR1qlYmLUbqHkTu/YeIMSPZTZ9pBjTlaJebMdJ4Nkp1F045f1TZLwosALN+HurTcJWUtSP3q9vhDyRXPfMagVy91eaH0n8dB0yjiL7Bq+EEy6e8HfwjYtTsfk8RiUxo/f7rbC3MqXGWZaI+sLG/UuZV04um6ftotOxXCntHys7RWWhPMDbd9x8mNBr5S6oA+dWfhmH5bcGmvKWW6l4+VbjnLlIFS5o7fqNnilaN6AVDc2VWTPHToyXlF3ZuRTmpdLHzSMdgPqaa8T+JsjlEQTFlEyklaaewQ9ad7WX38jW8l3yDoxBsr5Y1oxaBuK2/NDSn+bn/XAs4QardM2BbTu4ZBQecbz/p33poRKK2O6D0v9eTbLffRGqkmuqtD+r/XsFT56jzdcdCpPUPifX+dQ4v+J3w9/A7PT5EoKZW5kc3RyZWFtCmVuZG9iagoyMjIgMCBvYmoKPDwKICAvUmVzb3VyY2VzIDMgMCBSCiAgL1R5cGUgL1BhZ2UKICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQogIC9Dcm9wQm94IFswIDAgNjEyIDc5Ml0KICAvQmxlZWRCb3ggWzAgMCA2MTIgNzkyXQogIC9UcmltQm94IFswIDAgNjEyIDc5Ml0KICAvUGFyZW50IDEgMCBSCiAgL0NvbnRlbnRzIDIyMyAwIFIKPj4KCmVuZG9iagoyMjQgMCBvYmoKMTQ2MwplbmRvYmoKMjI2IDAgb2JqCjw8IC9MZW5ndGggMjI3IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJztWstuWzcQ3esr+ANhZvgmUBiQJatod0YNZBFklb4WcQp3098vH0Ne8r50FS8iI4JhSCSHw+HMmXM5vHrZIYPw9y5+WC/Y5+fdC/Uhs4JJQ13aMAncaQOA7JmlNnKE1P4SxEetKkstU8ZIU23/zT7svu6A/bz7+CmI/s6Aa/bfDqbLNSp/2z02dsZRuFo7W0sliiu29GVnVYaDMBy99t4zJ5iwXASZz8/s/S/Pgh3/SZt67IFilOAGdQ8gYN5x56g39HGhw9px8AsTYRGlAEBMmlFs1KPTtvPn4gZJ/1TVOA5ZYs061By86b5mVbV1iUW9imgNsL9290+796fgMwT29OeQiSHszgbfhwmIYZ6OO7Hs6Zl9/Cl8vQeQ9u4Te/p19/DU70oh1yFjr8rpCVYiQkQZF2Di2L9/sA/sa+hWGvKe4xeHzIiCMlVQ1mHMJn5a8ZxjjuuRv2TwF8SuCPQ4onIbYwPv2LuQBYpFxx7DoCDhdqB0ptmG2sfx7KjehU+1VW2UjCrBkcB4Fug7hja2UM+tGE06kY7j0uouDwgZPsnE4oH0efE+ktvGvksdadYdC0Ek6+oifiyumtX1zGJp8CGbLfyCUEQbUlQx+EpCdYvNJimd86QBiAiw9Sokl8SCkGG7WV9erG7Ejb0VvkdM2bxONDPHNlvUuyBJWAoQ0EwdLYtuydYFJJsxkgNZO24BIwuYamiM9j6bUr7LaNIxAAVzlKI1pxypjNM7ZmTy+YF2Gd25p335vOMq/UAWu0ZuqjyJmfyvcPhPqXYY0gshTJWieFHss0ZBYsnXexLdV1/MZLUJDyqXXFzTGh9aV6cQklWSggSHO+bzqKiJFPCkDIX6QBjzOa3Pa7N5K51cC+MSlzgn/qMgzQ18ytiSdWVc+roKZA0SOtlT/i8gajlQctDhAeIG5JwlQYNczLJVGZDkhrTmsWGsOnNMHGdVzhJgO2uBAKvIGgFWoa0EuHkfHQGWwY0EWMWXCLAIrBJgEfomAvR6go7rJEBEydEkMTHHgCmi34kBE1oNsd2+Z8GYKlLTdPJTYcXkvwOhUlP0VqkPpeZSRRRI8YNzX3nqUbrPMB9qy7WA8MwE31KfOJERlmBDrJOyyZrm5ANN/pyaPC9CsSORgMtGCTUWmOucUGAdWPBELzTiuYlBK8TTibq8yY2m2WkA53facpghvBNnVOKrWmWgKV2sSU9+JFWeMm9sSNphyZ3jsG40Lo7JsWHSjjrUfooU42eRUsnd9hZF/5fkSUkdk31PyaQadC3MQb99DpT1VdPuwispfRMierptjgQLtOosNyI4X3s3R6sJfVdIqxsPl/JEqxyGp2A6ZK6ybEACdxAvPKy5sewZlhUSuXcylFBa3qrsW5U9V2UrOYHIdZ4yhREcfOQXNX/KVG+aDi+vtYVTXBgfSEPpGxWeoUIJ8dLTeA9++4Xjrdb+UWptiW4Cj+ukQSkN11p6p+dvG4/flwUjnaVjMoUGSw19GLGizX3JsTRel5ME/6jjnsCnYcPpUGrHrUTvlZE3Sqz3FraAuUtDVfTO0aUD7tMVyQVXk26J28pAoknSALbB1XGsYa3artpoS8M1a8cHVayYusnEbStvcO5Yb5/+uLL5rvo/b/BS9T/Z/5bqv0yS+xbUI+PKnUvdyXGKHy8m+KlJgFCfTCn9qeJOVX1zW1MSquXKYUkaW9S5xqEqvq3FwPZO+NnKGt8GiYojqbsnGfKOKBeZ5fMscSop4+8Iwozb5eWriFNpzaUV4fHsVP0hwD6HAkvRLKEeY1JyoZDcnT3gVKmOIGrvKnMNUpY00sEDKJ87Ih+kywGyt7JY1ltFh07EwXmJnApTnCYzoGHmbs2O6S7c4QXkPGg+z87nvL9s9YSgp6AxdgKabbS9ynJOcxXDC36e5czbYbkUEpWDm5mE5hWPRD3+HMtpsNxo652/FcyvITktPHdSh+enVptPh6R7nCdk3NLbmqHYKiePyo9qohxnZs6vt0olpOwiH3VTpZkpiodYpwMK8e9wgKkiyVw7mZn26/pdlAwo1alrCGuErfMhoBK/vOZZsTBT4BQWCiew6BdbjuQ6lWntuVci/hZotuqV/u1QWR2PczC/gX595aud4IEnvEXjbtz2Cm4zoHgAWkgDsfGdyRTk63XuGvvAUOkUqAAduB4GJ6bO7kZuXSdiIzt6MQvY8uZMwq7p3XjUgubQNLPCbAXbWPXNJyAjBFdxinbztLF/G7SR4F3qOOL5RCVRjijjzO/ylOLaSe+UvNHDxfSQfr39uPsfC0q5sgplbmRzdHJlYW0KZW5kb2JqCjIyNSAwIG9iago8PAogIC9SZXNvdXJjZXMgMyAwIFIKICAvVHlwZSAvUGFnZQogIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCiAgL0Nyb3BCb3ggWzAgMCA2MTIgNzkyXQogIC9CbGVlZEJveCBbMCAwIDYxMiA3OTJdCiAgL1RyaW1Cb3ggWzAgMCA2MTIgNzkyXQogIC9QYXJlbnQgMSAwIFIKICAvQ29udGVudHMgMjI2IDAgUgo+PgoKZW5kb2JqCjIyNyAwIG9iagoxNzE3CmVuZG9iagoyMjkgMCBvYmoKPDwgL0xlbmd0aCAyMzAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nO1aS2/jNhC++1fwD5TL9wNYBEgsu2hvQQPsYbGn7euw2SK99O93ZvgQJVGynTbYIGsEiiVyOJwZzvdpSPtpJ5mAvx/ww0fFPj/unnKbZF4x7XKTdUwLHqwTQrJHRs+SS0HPX0B89lRl85MrfVlTff6Tfdh93Qn24+7jJxD9lQlu2T87sZyuUfnL7r6xE3vFq7WztVRL9Yotfdp5k9JBOS6jjTGyoJjyXIHM50f27qdHxYa/yKn7aaI4o7iTdppAgsXAQ8it0MaVhbmx8wtTMIkxQgi1eESxWYslt9PnqoNZ/1LVfB2SxJZ10nIR3eQ2qapPl1g0VYHWCPbH7u5h9+4IMZOCPfw+IhGWPXiIPQyQEsZZ9MSzh0f28T3c3uF184k9/Lw7PEy9MpJbQOyrCjqllcIUMS5AmgT292/sA/sKzcaK5DPeBMmcKllmSpZNcswTP21ELrDA7Txet3B5SHJoltij4d8hf8obGKY0lwwkpUwSRsE/u+gN0OLmrWIATV157EFt9OmTBM4w04oWmcVYv2jZ37CYRqgbJj3dLTygcaaZO4xzd6wL81YVu57L5CPK6669K16sx+Ysb6TJq+aSF2SvuWEq6bDZ1/9mCehVLvXQuCEhq0kpBYkeDcBRy5JTdZahscPl+IfcFpMmyFM3z1Og4sC1RaXWVKVHuCBZJS7NId3rgUwCHjBkLTSLY/KF/IEup8nvfbYi5owP6R5jV6UPORtCI7dUTiDODpHamEgHl8LI5tqQUzjNPgdkn6aStzUgHeDayKPFxQ66BuTQrjet/iF5RGGR63lkXOonsw4pr2mVT2oDink/l2tXGu9xoXAMXlLN82fsW7Ou9OtYZxFJA0LA6NE6tCONI90+r19c5GgA4sfoiTFHt3kva8zPFfcmx61y3RZWt/kmcV3LNC2/5HQXmXUzwgmNxzz+mOUqouc43rZNn47jKe0LbpiNeTb6Y+SaYGL66D++fvSrIS+xSUSd4JXkajDQhHgK+QAhHmkY7D+u0L8U+hIKbyvp/RRL+PRdzkLXZGtbfzgs3novxtKx+s6vI0PqJKsKjZjOFLI7em3ezcqgCJ0B7TgfkpFQGGdqYkjZUGisrnwrROb6zmjyOsz9KDDICUKoGzrznh8aIskgapm6aW1i8GWyWLNIlgXtrazsNqVJr7jyplXcUhoqee2URkEtxUpeMzWkNoQmBWabyqLmwdsri13MYgp2yMaDBndmAQO57uXGvq12ttu20rjAWNuxummrKltGqyP9vGGLySajtjZsE8PCrHGyXWuj0WXubfNXI3KOG+fUWs+3oFuG9dSpZVopv0irZ1dtyliuNBG77HEcReUbcZwKWd1+FGu5DY0j0zP31Y2ZzRHZ5+Qr++1NnlPO8aCB7KVx3zfZCV1kqfgVzfwdkguBGwybt64t1XDLU8BCL8rMBJTlxvOk340z02nIsaGmIrQK/irQa1xAr3Zsgb+qdB3n50aJ5dmN7ZnXsvVp89aYYeHtJubnWmFJ9VgXyvEFg4k5YeeJhwVJwzgvGod9em6Y9rMGc7vIFohzN1tqCeunFmFCFCgRxBH6txlapsmw2ZgTB1Uy4FcBMFKrbmFnviHpDVnkLqvNb+s58VEhZ3NUXCI5KvLiTLaQTxzN1KXwc+vzbZOl1pF7iKDU5js/2ioxS1VPJYOQF31JmNpJrqOJIQp53t52zhY5xdtDiZJb5TSnS5lb3Nfgve9IORnLbFDJMebUHUbrRN7Uif9l1hNMuw10H7nEI+ngQ/dQang7QKe0vhvNkrkMR91YJalD0nf68AoGcY8nryaEK7gvArdRimsInRTxzIOrK7ifC25jBJd47gP1ZXfrIt8WuOV+1FlBjpDZJ3mRt0sXAB1eRR4j6LS5Av0yoAe9+LrjCvSXATrQKRce/ivVP6NwbwfoOIWJdW9sR0nScCvO+doZXkLOQ4XpfbzC+iJYW2O4glQDVF+L85eGtVNcaBO9lt1vjHV8O7Cmd3IxyY+HKDQujiZR8pbfmKDuslLNEegJ8MOLyWG9H72/gv8i8DuBZ+HAm1bbK/hfFvwO3lERf4FmZfcITt9ewU8/RyknvCeB7+DVhb/p8+KK+zNwTz8zvt/9Cybxew0KZW5kc3RyZWFtCmVuZG9iagoyMjggMCBvYmoKPDwKICAvUmVzb3VyY2VzIDMgMCBSCiAgL1R5cGUgL1BhZ2UKICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQogIC9Dcm9wQm94IFswIDAgNjEyIDc5Ml0KICAvQmxlZWRCb3ggWzAgMCA2MTIgNzkyXQogIC9UcmltQm94IFswIDAgNjEyIDc5Ml0KICAvUGFyZW50IDEgMCBSCiAgL0NvbnRlbnRzIDIyOSAwIFIKPj4KCmVuZG9iagoyMzAgMCBvYmoKMTU5MwplbmRvYmoKMjMyIDAgb2JqCjw8IC9MZW5ndGggMjMzIDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJztmlGP2zYMgN/9K/QHpoqSKIlAESBxcsP2dliAPhR96tbuoelwe9nfHynJSZzz5WJ0Bg6ZcPDFkmiSIvlFtpWnDpThv5/kI5JVnw/dU+0DFa1yoXZhUM7ohMEYUAeV26DB5PY3Fr9oHWVrKwxjVdOx/af60H3vjPq5+/iJRX9XRqP6pzPPzZ2p/K17PPNTRs2b9fPcUwf2DXv61EVfysEGDYREpJJVNmrLMp8P6t0vB6u2f+VJPY4LJXirA+C4gIyipFOqvdynLbJtGfymLBvx3hhjnzVF7KIH87TL54sTrPqfq7rMQ5G45h2gNhRGp0XVsTXHo7EK8caor91m37174JiBUfsvJxI57Sly7PkCAL4OZSZR7Q/q43s+3XDCaPVJ7X/tdvvxrDxoZGLfVNBzWVkpER8Sl0lSf/+hPqjv3O3RlDnLSQIV7FBlfqiyUY3F/P10JXJJJY0X8XIcLyNdUugy4ksbpCHHlvtsleE2PJzkTeRjx32xyOVxKPKQWPegT/T0K0Wg2CLYlYKYz9zpmqxT9PiVslnOpGoZ6si2Hr56SsV67qve5VmkIvPjVrNEGo1iOfKsapVxpMNlpI3idFMQqWOkJXKw5qiI5l09z3Niz8Bn9TKdh+JAdoKHgstO93VSMul1dYvPIZxJD6lIZ3ITyrdVZFPV1mz7syOnTiKBRS7HFYtKoLGs3Z25xOZtqHqrjWFM1Jq+xlt0D3nqT+7C+hjTier1pDEmooSnoO7O05NTvytRcdvrJeBDTXJfrpFyEtdf18acvb+UywWxPRWHJFuukQNs1YwnuWHsJe+GcUdHK6ZoyNXbXy3dWphnkYuWF6z87eMb+MuCT/zFHySD6CfJH87/z+Rvq05/C/UATkMUNb5RP4t6cKj5qYVvldp6vzT2gF5DkJzzk8ME99bdD/fOD7GVK5xo8zVPfXHwFaJj0DEGLsvUiJ5HNJF2xP+TpUb0wnfwEHUMogRpiujsxJ0QbWOVoWo+VN3Dir0r+uS662xzXLWLQXLS4J4Htw1WExmi6KDBvTDcCbRDeZR0OLlc+/uDG6rJfJsOF8CnilBf5VKxfTv4zjhNkV0I0Lifxb2zQWOSF5quPZ0vzL3zXhMS37CmyUUdtvfDvbOnesjRz0yzWZ8ZeQXnEDVGnhiCazzP45mMhsRAy2ZD43lRnr1JGjGxNbKTN+lwRzxvzOi12kv6wYgrSVyRZ3M7LOfX363LdmoUVAEb77N49+h0lC1J71LjfWHeZScDI9ulydfrLtwP71nf+oL5m+/HPXkdo5WwtN2yeUAjRO1SNNaRa0AvCzTKHgUiJfCTD+KO7gfoXJR9HUNzw6rMtzbaRUMRQnubNhPiZDSlwMOEDeKFIZZtCfSUjJ/8uYtb3xHEm5XCYmFTpeqm1+1rc7CgKRBF05bmeVQH7zUmNBaobWn/Z1TnH0o+dv8C84zcDQplbmRzdHJlYW0KZW5kb2JqCjIzMSAwIG9iago8PAogIC9SZXNvdXJjZXMgMyAwIFIKICAvVHlwZSAvUGFnZQogIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCiAgL0Nyb3BCb3ggWzAgMCA2MTIgNzkyXQogIC9CbGVlZEJveCBbMCAwIDYxMiA3OTJdCiAgL1RyaW1Cb3ggWzAgMCA2MTIgNzkyXQogIC9QYXJlbnQgMSAwIFIKICAvQ29udGVudHMgMjMyIDAgUgo+PgoKZW5kb2JqCjIzMyAwIG9iagoxMDkwCmVuZG9iagoyMzUgMCBvYmoKPDwgL0xlbmd0aCAyMzYgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nO1aS4/cNgy+z6/QH4gi6i0gGGBnZ7dob0EXyKHIKX0dsinSS/9+KYmSZVt+zCZpp+hgYIwlURRJkZ9J2Z8PwAT+XsU/FyT78Hz4TH3AnGTKUpexTAnujRUC2DNLbeAgUvsjkk9alZZatowRp9r+nb07fDoI9t3hp/dI+jMT3LC/DmK+XMPyx8PbRs44Kq5WzlZSBfKKJf18cDq7g7QcggkhMC+ZdFwizYdn9vr7Z8nOfySl3o4dxWrJLZixAwkWPPeeerGPS4Nrx8GPTOIiWgsh5KwZySY9Jqmd/xcVJP5zVtN9yBRr0oHhItjRbWZVW5dINGYRpRHst8Pp6fD6EW0Ggj39OkQibrt3aHucAIDzTNTEsadn9tMbvD1hSxzfs6cfDg9PY600cIMRe1VGT24lo4to69FNPPvzF/aOfcJubUTWOd54YFYWL9PFy0Y+5hI+DZazU8shF24m9oJHvO6EUNHRH+j+jCTnI5pXs2hS7BZIJmW+4pBVcQTusRWVCnjhROHzPdiGOjJ1w1ii6zA/E8mJ2KKYAMi9uYTKNNJkuhTRJrOEMKaF05GZvIIehFtaBUQUyEdyhV0yZDK4y47Uc0PPZOAh8hZGVWtGbfSR4U7Flif1Ldk06nB/ZCGPSlzTpTvUS9s8nqR6yCJIu4cbbvubKZ2Mcp2zfvE+7nKcEy+QxNkMdGVsSboyrkJdRWQOcUuKJYVr5Uj2jg4QshEbyxng0msMYQxDspw6EQ+beSfJaHdSx5m4GbLT40Cf1i1uRpaJ8yJ9tIYq/FbsX+as6AE0cqZLk6SBvPg8SJe08OR7X7xqovCjUdPsX6hO2ol4i2AXAC0tQzfky/0Vh3yMyMTmREYq7name59hIIqwHrEBoVdZ9DsDt4i9KGIBH7XGxzGn2pCVjyQSMpKKFolqQxGmBHTaXUceBy1FP1Tr6KxnDAW1dzHE2nXWAm1EtxxuA50n+NmSzM23r6NfgQ8tBlDz1BdG/NSRKVMkACiPsOyCKfDMTJ8SL+dhxShTHFMjeZRrW/pu7gpSdV0h7SlhZCtI3PASKymEY2jfUezoxn0W5kDYP6dgdImgtSdBitdCs/Y0WcVX0DEf9QgpmFl2ADYFxRUDbNzuOBbZJyC9b5ZZy7dWgRasxFRbYY5u/A1pL0Nar7h36FDO78uNjuxV0Fz18KcOrGdLLYcVFB24ETjScOGte2R2uoCbUm2i8jB3BMhp4pIe7VNj2zxLCD1ntwOk6yR11zrkxDDlUVg16RF1NUizbd93gun5Tot8JTqS1dyg0SBDu3R/xT4SSlBcexOC1KqHhMmLrhgJl2ikxQ3ItWEkgZP4ylmpVJp7JUJQ1tzA8iKwlMZycOhz2rt9aWmraj8tJeMQLNWsguIg3ZuqUtngUuudB+pRtbpdWW5gWwtp8fwmG0tRbjTUm0WyqLXYlcFIp7jD8tAH001g9H80bEtMlv/NpEUieoJ0IQh0j1scXhKHCizXToYAQdeT2LvMIMWIII98oP/4UHPAk6ZJZhpIhyltMlGIRslE6VzNViqRG2Kz4ECtGWBKXMO8FbAINRLoUdSSJ0EAPVBleag/TifU+J2sN0pJ6sB2rrNuGjel2s6zXijpUvI0YyfnfiP93G9Wc6w1JFPacoHx663pn2+frx/K0jbFANcFLnIEVUvE5cMWlCnruJY6eOfCDcougzLvubPoREHA7gIMzR26QVIGls64hple1LqggqHuLAHd2UvrriJkK9yajSbkiry/HviMeJVagdB2VMYUosTWdWYnjf1Uh+L+5BgpjM6ddfebpeRs5eBsVdqMrzNHQbKZo0zzvqVdXccxDZ4r5xADoHumpOD6cSzhFqVdEui12hefK2kVuJMQvPb2hmsX4Zq2wIW1+HAUOw+W5u689dJt7TXXt3p11pZe7cn2tGTKCdE2v41XcTXX6gR7NxFqpHhxYqOd59ZplE/2j1bsdQNCctxSgxGCSzon0QQG64GPk3jMe0Dq2xnJhS/bJXBl0XkwKbykNqunsykjnWT+8wPe0tmrE4azS0H/nfprfm5bZ7ppx0bdN8xaqPvmgvlJ57Tmq9boZnHr4i9aZI8aG/v9Bauv1G1jdvO6zSg196kXw5sxggeHy/k+uoV/D92S32u63Lf8NsE4yRWY8H8v2JL/Utqc4KiDaEFxawGnOb33Y4RXUlJNsPI9QiVaDPRK0OuchVodWAv0QqTlRPGpQOvfJAykLSpvi7aEAjNN97z6qlx3f6Iw1nDHVwp1QvlQYTDg/FsFK0zXU2rp+pW+Vdj4BksqLi0awqjuuVR6UfhPAJyiM8sE6iUfn6BUpElz7ik+gNZ4cdFmteYWZHBWuBu29bAtfaj89vA3rjeIzwplbmRzdHJlYW0KZW5kb2JqCjIzNCAwIG9iago8PAogIC9SZXNvdXJjZXMgMyAwIFIKICAvVHlwZSAvUGFnZQogIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCiAgL0Nyb3BCb3ggWzAgMCA2MTIgNzkyXQogIC9CbGVlZEJveCBbMCAwIDYxMiA3OTJdCiAgL1RyaW1Cb3ggWzAgMCA2MTIgNzkyXQogIC9QYXJlbnQgMSAwIFIKICAvQ29udGVudHMgMjM1IDAgUgo+PgoKZW5kb2JqCjIzNiAwIG9iagoxNzc4CmVuZG9iagoyMzggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNjIgMCBSIC9YWVogNzIuMCA1MTcuMjAzIG51bGxdCj4+CmVuZG9iagoyMzkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNzA5LjAwNSAyNTYuNjI5IDcxOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjM4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjI0MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzUuODE2IDcwOS4wMDUgNTQyLjE3NiA3MTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDIzOCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNDIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNjIgMCBSIC9YWVogNzIuMCA0NTMuNjA0IG51bGxdCj4+CmVuZG9iagoyNDMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNjk3LjAwNSAzNzUuMjE5IDcwNi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjQyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjI0NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzQuODE2IDY5Ny4wMDUgNTQxLjE3NiA3MDYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI0MiAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNDUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNjIgMCBSIC9YWVogNzIuMCAzOTAuMDA1IG51bGxdCj4+CmVuZG9iagoyNDYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNjg1LjAwNSA0MTYuMjY2IDY5NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjQ1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjI0NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzQuNDcgNjg1LjAwNSA1NDAuODMgNjk0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyNDUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjQ4IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzYyIDAgUiAvWFlaIDcyLjAgMzI2LjQwNiBudWxsXQo+PgplbmRvYmoKMjQ5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDY3My4wMDUgMzI1LjM1OSA2ODIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI0OCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNTAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1LjIzNiA2NzMuMDA1IDU0MS41OTYgNjgyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyNDggMCBSCi9IIC9JCgo+PgplbmRvYmoKMjUxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzYyIDAgUiAvWFlaIDcyLjAgMjYyLjgwNyBudWxsXQo+PgplbmRvYmoKMjUyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDY2MS4wMDUgMzI2LjYyNCA2NzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI1MSAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNTMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1LjIyNiA2NjEuMDA1IDU0MS41ODYgNjcwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyNTEgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjU0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzYyIDAgUiAvWFlaIDcyLjAgMTk5LjIwOCBudWxsXQo+PgplbmRvYmoKMjU1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDY0OS4wMDUgNDE5Ljc0MSA2NTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI1NCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNTYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM0LjQ0IDY0OS4wMDUgNTQwLjggNjU4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyNTQgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjU3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzYyIDAgUiAvWFlaIDcyLjAgMTM1LjYwOSBudWxsXQo+PgplbmRvYmoKMjU4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDYzNy4wMDUgMzIwLjM1IDY0Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjU3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjI1OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzUuMjc4IDYzNy4wMDUgNTQxLjYzOCA2NDYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI1NyAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNjAgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjIyIDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjI2MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA2MjUuMDA1IDMyMS42MTUgNjM0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyNjAgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjYyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS4yNjggNjI1LjAwNSA1NDEuNjI4IDYzNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjYwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjI2MyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjIgMCBSIC9YWVogNzIuMCA2NjUuMzMyIG51bGxdCj4+CmVuZG9iagoyNjQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNjEzLjAwNSA0MTQuNzMzIDYyMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjYzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjI2NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzQuNDgzIDYxMy4wMDUgNTQwLjg0MyA2MjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI2MyAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNjYgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjIyIDAgUiAvWFlaIDcyLjAgNjA1LjA2NCBudWxsXQo+PgplbmRvYmoKMjY3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDYwMS4wMDUgMzExLjk1NiA2MTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI2NiAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNjggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1LjM1IDYwMS4wMDUgNTQxLjcxIDYxMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjY2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjI2OSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjIgMCBSIC9YWVogNzIuMCA1NDQuNzk2IG51bGxdCj4+CmVuZG9iagoyNzAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNTg5LjAwNSAyODkuNjggNTk4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyNjkgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjcxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNS41MzggNTg5LjAwNSA1NDEuODk4IDU5OC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjY5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjI3MiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjIgMCBSIC9YWVogNzIuMCA0ODQuNTI4IG51bGxdCj4+CmVuZG9iagoyNzMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNTc3LjAwNSAzMzAuMTI5IDU4Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjcyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjI3NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzUuMTk2IDU3Ny4wMDUgNTQxLjU1NiA1ODYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI3MiAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNzUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjIyIDAgUiAvWFlaIDcyLjAgNDI0LjI2IG51bGxdCj4+CmVuZG9iagoyNzYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNTY1LjAwNSAyOTYuMDAzIDU3NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjc1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjI3NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzUuNDg0IDU2NS4wMDUgNTQxLjg0NCA1NzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI3NSAwIFIKL0ggL0kKCj4+CmVuZG9iagoyNzggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjIyIDAgUiAvWFlaIDcyLjAgMzYzLjk5MiBudWxsXQo+PgplbmRvYmoKMjc5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDU1My4wMDUgMjk3LjI2OCA1NjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI3OCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyODAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM1LjQ3NCA1NTMuMDA1IDU0MS44MzQgNTYyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyNzggMCBSCi9IIC9JCgo+PgplbmRvYmoKMjgxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIyMiAwIFIgL1hZWiA3Mi4wIDMwMy43MjQgbnVsbF0KPj4KZW5kb2JqCjI4MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA1NDEuMDA1IDM5MC4zODUgNTUwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyODEgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjgzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzNC42ODggNTQxLjAwNSA1NDEuMDQ4IDU1MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjgxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjI4NCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjIgMCBSIC9YWVogNzIuMCAyNDMuNDU2IG51bGxdCj4+CmVuZG9iagoyODUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNTI5LjAwNSAyMzEuOTUzIDUzOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjg0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjI4NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzYuMDI0IDUyOS4wMDUgNTQyLjM4NCA1MzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI4NCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyODcgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjIyIDAgUiAvWFlaIDcyLjAgMTgzLjE4OCBudWxsXQo+PgplbmRvYmoKMjg4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDUxNy4wMDUgMzk3LjcyNCA1MjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI4NyAwIFIKL0ggL0kKCj4+CmVuZG9iagoyODkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM0LjYyNiA1MTcuMDA1IDU0MC45ODYgNTI2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyODcgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjkwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIyMiAwIFIgL1hZWiA3Mi4wIDExMC45MiBudWxsXQo+PgplbmRvYmoKMjkxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDUwNS4wMDUgNDA1LjM0MiA1MTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI5MCAwIFIKL0ggL0kKCj4+CmVuZG9iagoyOTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTM0LjU2MiA1MDUuMDA1IDU0MC45MjIgNTE0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyOTAgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjkzIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIyNSAwIFIgL1hZWiA3Mi4wIDY5Ni4wIG51bGxdCj4+CmVuZG9iagoyOTQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNDkzLjAwNSA0MDEuMzQzIDUwMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMjkzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjI5NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTg0IDQ5My4wMDUgNTQwLjkwNCA1MDIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI5MyAwIFIKL0ggL0kKCj4+CmVuZG9iagoyOTYgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjI1IDAgUiAvWFlaIDcyLjAgNjIxLjUzNyBudWxsXQo+PgplbmRvYmoKMjk3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDQ4MS4wMDUgMzk3LjY4OCA0OTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI5NiAwIFIKL0ggL0kKCj4+CmVuZG9iagoyOTggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjIxNCA0ODEuMDA1IDU0MC45MzQgNDkwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyOTYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMjk5IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIyNSAwIFIgL1hZWiA3Mi4wIDU0Ny4wNzQgbnVsbF0KPj4KZW5kb2JqCjMwMCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA0NjkuMDA1IDQwNS4zMDYgNDc4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAyOTkgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzAxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC4xNSA0NjkuMDA1IDU0MC44NyA0NzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDI5OSAwIFIKL0ggL0kKCj4+CmVuZG9iagozMDIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjI1IDAgUiAvWFlaIDcyLjAgNDcyLjYxMSBudWxsXQo+PgplbmRvYmoKMzAzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDQ1Ny4wMDUgNDAxLjMzMyA0NjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDMwMiAwIFIKL0ggL0kKCj4+CmVuZG9iagozMDQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjE4NCA0NTcuMDA1IDU0MC45MDQgNDY2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzMDIgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzA1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIyNSAwIFIgL1hZWiA3Mi4wIDM5OC4xNDggbnVsbF0KPj4KZW5kb2JqCjMwNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA0NDUuMDA1IDQyNC4xODcgNDU0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzMDUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzA3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy45OTIgNDQ1LjAwNSA1NDAuNzEyIDQ1NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzA1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjMwOCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjUgMCBSIC9YWVogNzIuMCAzMjMuNjg1IG51bGxdCj4+CmVuZG9iagozMDkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNDMzLjAwNSA0MTEuODY5IDQ0Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzA4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjMxMCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMDk2IDQzMy4wMDUgNTQwLjgxNiA0NDIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDMwOCAwIFIKL0ggL0kKCj4+CmVuZG9iagozMTEgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjI1IDAgUiAvWFlaIDcyLjAgMjQ5LjIyMiBudWxsXQo+PgplbmRvYmoKMzEyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDQyMS4wMDUgNDIzLjEzMSA0MzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDMxMSAwIFIKL0ggL0kKCj4+CmVuZG9iagozMTMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjAgNDIxLjAwNSA1NDAuNzIgNDMwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzMTEgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzE0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIyNSAwIFIgL1hZWiA3Mi4wIDE3NC43NTkgbnVsbF0KPj4KZW5kb2JqCjMxNSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA0MDkuMDA1IDQyOC40NTkgNDE4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzMTQgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzE2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy45NTYgNDA5LjAwNSA1NDAuNjc2IDQxOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzE0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjMxNyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjUgMCBSIC9YWVogNzIuMCAxMTIuMjk2IG51bGxdCj4+CmVuZG9iagozMTggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzk3LjAwNSAzOTQuNzUxIDQwNi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzE3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjMxOSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMjQgMzk3LjAwNSA1NDAuOTYgNDA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzMTcgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzIwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIyOCAwIFIgL1hZWiA3Mi4wIDY5Ni4wIG51bGxdCj4+CmVuZG9iagozMjEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzg1LjAwNSA0MDUuMDQ3IDM5NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzIwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjMyMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTUyIDM4NS4wMDUgNTQwLjg3MiAzOTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDMyMCAwIFIKL0ggL0kKCj4+CmVuZG9iagozMjMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjI4IDAgUiAvWFlaIDcyLjAgNjM1LjA0IG51bGxdCj4+CmVuZG9iagozMjQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzczLjAwNSA0MTYuMTAxIDM4Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzIzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjMyNSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMDYgMzczLjAwNSA1NDAuNzggMzgyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzMjMgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzI2IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIyOCAwIFIgL1hZWiA3Mi4wIDU2Mi4wOCBudWxsXQo+PgplbmRvYmoKMzI3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDM2MS4wMDUgMzg3LjcyIDM3MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzI2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjMyOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMjk4IDM2MS4wMDUgNTQxLjAxOCAzNzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDMyNiAwIFIKL0ggL0kKCj4+CmVuZG9iagozMjkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjI4IDAgUiAvWFlaIDcyLjAgNDg5LjEyIG51bGxdCj4+CmVuZG9iagozMzAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzQ5LjAwNSA0MDEuMzIzIDM1OC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzI5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjMzMSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTg0IDM0OS4wMDUgNTQwLjkwNCAzNTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDMyOSAwIFIKL0ggL0kKCj4+CmVuZG9iagozMzIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjI4IDAgUiAvWFlaIDcyLjAgNDE2LjE2IG51bGxdCj4+CmVuZG9iagozMzMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzM3LjAwNSA0OTQuMjI0IDM0Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzMyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjMzNCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuMzc4IDMzNy4wMDUgNTQwLjA5OCAzNDYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDMzMiAwIFIKL0ggL0kKCj4+CmVuZG9iagozMzUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjI4IDAgUiAvWFlaIDcyLjAgMzU1LjIgbnVsbF0KPj4KZW5kb2JqCjMzNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzMjUuMDA1IDQ3My41MzkgMzM0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzMzUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzM3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy41NzYgMzI1LjAwNSA1NDAuMjk2IDMzNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzM1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjMzOCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjggMCBSIC9YWVogNzIuMCAyOTQuMjQgbnVsbF0KPj4KZW5kb2JqCjMzOSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzMTMuMDA1IDQ5MC4xNTkgMzIyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzMzggMCBSCi9IIC9JCgo+PgplbmRvYmoKMzQwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy40MzQgMzEzLjAwNSA1NDAuMTU0IDMyMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzM4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjM0MSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjggMCBSIC9YWVogNzIuMCAyMzMuMjggbnVsbF0KPj4KZW5kb2JqCjM0MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzMDEuMDA1IDQ0OC45NzEgMzEwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzNDEgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzQzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy43NzkgMzAxLjAwNSA1NDAuNDk5IDMxMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzQxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjM0NCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjggMCBSIC9YWVogNzIuMCAxNzIuMzIgbnVsbF0KPj4KZW5kb2JqCjM0NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyODkuMDA1IDE1My40MiAyOTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM0NCAwIFIKL0ggL0kKCj4+CmVuZG9iagozNDYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjc3LjAwNSA0OTMuNTkgMjg2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzNDQgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzQ3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy40MDMgMjc3LjAwNSA1NDAuMTIzIDI4Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzQ0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjM0OCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMjggMCBSIC9YWVogNzIuMCAxMTEuMzYgbnVsbF0KPj4KZW5kb2JqCjM0OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyNjUuMDA1IDE1My40MiAyNzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM0OCAwIFIKL0ggL0kKCj4+CmVuZG9iagozNTAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjUzLjAwNSA0ODcuOTIgMjYyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzNDggMCBSCi9IIC9JCgo+PgplbmRvYmoKMzUxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy40NTUgMjUzLjAwNSA1NDAuMTc1IDI2Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzQ4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjM1MiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMzEgMCBSIC9YWVogNzIuMCA3MDguMCBudWxsXQo+PgplbmRvYmoKMzUzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDI0MS4wMDUgMTUzLjQyIDI1MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzUyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjM1NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyMjkuMDA1IDQ4OC41NiAyMzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM1MiAwIFIKL0ggL0kKCj4+CmVuZG9iagozNTUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjQ0NSAyMjkuMDA1IDU0MC4xNjUgMjM4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzNTIgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzU2IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIzMSAwIFIgL1hZWiA3Mi4wIDY0NC40MDEgbnVsbF0KPj4KZW5kb2JqCjM1NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyMTcuMDA1IDE1My40MiAyMjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM1NiAwIFIKL0ggL0kKCj4+CmVuZG9iagozNTggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjA1LjAwNSA0ODIuODkgMjE0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzNTYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzU5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy40OTUgMjA1LjAwNSA1NDAuMjE1IDIxNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzU2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjM2MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMzEgMCBSIC9YWVogNzIuMCA1ODAuODAyIG51bGxdCj4+CmVuZG9iagozNjEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTkzLjAwNSA0NTQuODE2IDIwMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzYwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjM2MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNzI5IDE5My4wMDUgNTQwLjQ0OSAyMDIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM2MCAwIFIKL0ggL0kKCj4+CmVuZG9iagozNjMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjMxIDAgUiAvWFlaIDcyLjAgNTE3LjIwMyBudWxsXQo+PgplbmRvYmoKMzY0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDE4MS4wMDUgNDc3LjE4MiAxOTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM2MyAwIFIKL0ggL0kKCj4+CmVuZG9iagozNjUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjU0MSAxODEuMDA1IDU0MC4yNjEgMTkwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzNjMgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzY2IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIzMSAwIFIgL1hZWiA3Mi4wIDQ1My42MDQgbnVsbF0KPj4KZW5kb2JqCjM2NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxNjkuMDA1IDE1My40MiAxNzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM2NiAwIFIKL0ggL0kKCj4+CmVuZG9iagozNjggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTU3LjAwNSA0ODcuMzMgMTY2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzNjYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzY5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy40NTggMTU3LjAwNSA1NDAuMTc4IDE2Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzY2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjM3MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMzEgMCBSIC9YWVogNzIuMCAzOTAuMDA1IG51bGxdCj4+CmVuZG9iagozNzEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTQ1LjAwNSA0NTEuMzkyIDE1NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzcwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjM3MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNzYyIDE0NS4wMDUgNTQwLjQ4MiAxNTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM3MCAwIFIKL0ggL0kKCj4+CmVuZG9iagozNzMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjMxIDAgUiAvWFlaIDcyLjAgMzI2LjQwNiBudWxsXQo+PgplbmRvYmoKMzc0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDEzMy4wMDUgNDkyLjE3OCAxNDIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM3MyAwIFIKL0ggL0kKCj4+CmVuZG9iagozNzUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjQxMSAxMzMuMDA1IDU0MC4xMzEgMTQyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzNzMgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzc2IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIzMSAwIFIgL1hZWiA3Mi4wIDI2Mi44MDcgbnVsbF0KPj4KZW5kb2JqCjM3NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxMjEuMDA1IDQ1NC40MjggMTMwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzNzYgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzc4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy43MzMgMTIxLjAwNSA1NDAuNDUzIDEzMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzc2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjM3OSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMzEgMCBSIC9YWVogNzIuMCAxOTkuMjA4IG51bGxdCj4+CmVuZG9iagozODAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTA5LjAwNSA0MzMuNjM3IDExOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzc5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjM4MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuOTEyIDEwOS4wMDUgNTQwLjYzMiAxMTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDM3OSAwIFIKL0ggL0kKCj4+CmVuZG9iagozODIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjMxIDAgUiAvWFlaIDcyLjAgMTM1LjYwOSBudWxsXQo+PgplbmRvYmoKMzgzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDk3LjAwNSA0NTIuMDU4IDEwNi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzgyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjM4NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNzUzIDk3LjAwNSA1NDAuNDczIDEwNi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgMzgyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjM4NSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMzQgMCBSIC9YWVogNzIuMCA3MjAuMCBudWxsXQo+PgplbmRvYmoKMzg2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDg1LjAwNSA0OTEuNTEyIDk0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSAzODUgMCBSCi9IIC9JCgo+PgplbmRvYmoKMzg3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy40MTkgODUuMDA1IDU0MC4xMzkgOTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAw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w5e/k//+HzfvrX4KZW5kc3RyZWFtCmVuZG9iagoyNDAgMCBvYmoKWwoyMzkgMCBSCjI0MSAwIFIKMjQzIDAgUgoyNDQgMCBSCjI0NiAwIFIKMjQ3IDAgUgoyNDkgMCBSCjI1MCAwIFIKMjUyIDAgUgoyNTMgMCBSCjI1NSAwIFIKMjU2IDAgUgoyNTggMCBSCjI1OSAwIFIKMjYxIDAgUgoyNjIgMCBSCjI2NCAwIFIKMjY1IDAgUgoyNjcgMCBSCjI2OCAwIFIKMjcwIDAgUgoyNzEgMCBSCjI3MyAwIFIKMjc0IDAgUgoyNzYgMCBSCjI3NyAwIFIKMjc5IDAgUgoyODAgMCBSCjI4MiAwIFIKMjgzIDAgUgoyODUgMCBSCjI4NiAwIFIKMjg4IDAgUgoyODkgMCBSCjI5MSAwIFIKMjkyIDAgUgoyOTQgMCBSCjI5NSAwIFIKMjk3IDAgUgoyOTggMCBSCjMwMCAwIFIKMzAxIDAgUgozMDMgMCBSCjMwNCAwIFIKMzA2IDAgUgozMDcgMCBSCjMwOSAwIFIKMzEwIDAgUgozMTIgMCBSCjMxMyAwIFIKMzE1IDAgUgozMTYgMCBSCjMxOCAwIFIKMzE5IDAgUgozMjEgMCBSCjMyMiAwIFIKMzI0IDAgUgozMjUgMCBSCjMyNyAwIFIKMzI4IDAgUgozMzAgMCBSCjMzMSAwIFIKMzMzIDAgUgozMzQgMCBSCjMzNiAwIFIKMzM3IDAgUgozMzkgMCBSCjM0MCAwIFIKMzQyIDAgUgozNDMgMCBSCjM0NSAwIFIKMzQ2IDAgUgozNDcgMCBSCjM0OSAwIFIKMzUwIDAgUgozNTEgMCBSCjM1MyAwIFIKMzU0IDAgUgozNTUgMCBSCjM1NyAwIFIKMzU4IDAgUgozNTkgMCBSCjM2MSAwIFIKMzYyIDAgUgozNjQgMCBSCjM2NSAwIFIKMzY3IDAgUgozNjggMCBSCjM2OSAwIFIKMzcxIDAgUgozNzIgMCBSCjM3NCAwIFIKMzc1IDAgUgozNzcgMCBSCjM3OCAwIFIKMzgwIDAgUgozODEgMCBSCjM4MyAwIFIKMzg0IDAgUgozODYgMCBSCjM4NyAwIFIKMzg5IDAgUgozOTAgMCBSCl0KZW5kb2JqCjIzNyAwIG9iago8PAogIC9SZXNvdXJjZXMg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whvlj3VK6rTaLiz+nKXh4vzpKbnKn4BSk+yjjq9Xf5wy0tCx2dPB+W3yxyFKSy7AOLvIH3f5ry/Y4o8zJv87t1fP9uPk0+iT/6/L7e5/+NuhCQplbmRzdHJlYW0KZW5kb2JqCjQwNSAwIG9iago8PAogIC9SZXNvdXJjZXMgMyAwIFIKICAvVHlwZSAvUGFnZQogIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCiAgL0Nyb3BCb3ggWzAgMCA2MTIgNzkyXQogIC9CbGVlZEJveCBbMCAwIDYxMiA3OTJdCiAgL1RyaW1Cb3ggWzAgMCA2MTIgNzkyXQogIC9QYXJlbnQgMSAwIFIKICAvQ29udGVudHMgNDA2IDAgUgo+PgoKZW5kb2JqCjQwNyAwIG9iagoxNDgxCmVuZG9iago0MDkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjM0IDAgUiAvWFlaIDcyLjAgNTkzLjAxMyBudWxsXQo+PgplbmRvYmoKNDEwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDcwOS4wMDUgNDE2Ljk0NyA3MTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQwOSAwIFIKL0ggL0kKCj4+CmVuZG9iago0MTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjA1MiA3MDkuMDA1IDU0MC43NzIgNzE4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0MDkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDEzIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIzNCAwIFIgL1hZWiA3Mi4wIDUyMC43MTYgbnVsbF0KPj4KZW5kb2JqCjQxNCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA2OTcuMDA1IDQ2Ni44NzcgNzA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0MTMgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDE1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy42MzIgNjk3LjAwNSA1NDAuMzUyIDcwNi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDEzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjQxNiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMzQgMCBSIC9YWVogNzIuMCA0NjAuNDE5IG51bGxdCj4+CmVuZG9iago0MTcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNjg1LjAwNSA0MDQuNjI5IDY5NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDE2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQxOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTU2IDY4NS4wMDUgNTQwLjg3NiA2OTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQxNiAwIFIKL0ggL0kKCj4+CmVuZG9iago0MTkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjM0IDAgUiAvWFlaIDcyLjAgMzg4LjEyMiBudWxsXQo+PgplbmRvYmoKNDIwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDY3My4wMDUgNDE1Ljg5MiA2ODIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQxOSAwIFIKL0ggL0kKCj4+CmVuZG9iago0MjEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjA2MiA2NzMuMDA1IDU0MC43ODIgNjgyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0MTkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDIyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIzNCAwIFIgL1hZWiA3Mi4wIDMxNS44MjUgbnVsbF0KPj4KZW5kb2JqCjQyMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA2NjEuMDA1IDQyMS4yMTkgNjcwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0MjIgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDI0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC4wMTYgNjYxLjAwNSA1NDAuNzM2IDY3MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDIyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjQyNSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyMzQgMCBSIC9YWVogNzIuMCAyNTUuNTI4IG51bGxdCj4+CmVuZG9iago0MjYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNjQ5LjAwNSAzODcuNTExIDY1OC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDI1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQyNyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMyA2NDkuMDA1IDU0MS4wMiA2NTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQyNSAwIFIKL0ggL0kKCj4+CmVuZG9iago0MjggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjM0IDAgUiAvWFlaIDcyLjAgMTgzLjIzMSBudWxsXQo+PgplbmRvYmoKNDI5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDYzNy4wMDUgNDA3LjExOSA2NDYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQyOCAwIFIKL0ggL0kKCj4+CmVuZG9iago0MzAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjEzNiA2MzcuMDA1IDU0MC44NTYgNjQ2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0MjggMCBSCi9IIC9JCgo+PgplbmRvYmoKNDMxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIzNCAwIFIgL1hZWiA3Mi4wIDExMC45MzQgbnVsbF0KPj4KZW5kb2JqCjQzMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA2MjUuMDA1IDM4Ny4xNzMgNjM0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0MzEgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDMzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC4zMDQgNjI1LjAwNSA1NDEuMDI0IDYzNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDMxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjQzNCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTMgMCBSIC9YWVogNzIuMCA3MDguMCBudWxsXQo+PgplbmRvYmoKNDM1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDYxMy4wMDUgMzcxLjM3OSA2MjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQzNCAwIFIKL0ggL0kKCj4+CmVuZG9iago0MzYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjQzNiA2MTMuMDA1IDU0MS4xNTYgNjIyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0MzQgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDM3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzM5MyAwIFIgL1hZWiA3Mi4wIDY0NS4zMzUgbnVsbF0KPj4KZW5kb2JqCjQzOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA2MDEuMDA1IDQ0My4wNjcgNjEwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0MzcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDM5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy44MzIgNjAxLjAwNSA1NDAuNTUyIDYxMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDM3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ0MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTMgMCBSIC9YWVogNzIuMCA1NzAuNjcgbnVsbF0KPj4KZW5kb2JqCjQ0MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA1ODkuMDA1IDQzMC43NDkgNTk4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NDAgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDQyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy45MzYgNTg5LjAwNSA1NDAuNjU2IDU5OC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDQwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ0MyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTMgMCBSIC9YWVogNzIuMCA0OTYuMDA1IG51bGxdCj4+CmVuZG9iago0NDQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNTc3LjAwNSA0NjMuMzIyIDU4Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDQzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ0NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNjYyIDU3Ny4wMDUgNTQwLjM4MiA1ODYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ0MyAwIFIKL0ggL0kKCj4+CmVuZG9iago0NDYgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzkzIDAgUiAvWFlaIDcyLjAgNDMzLjM0IG51bGxdCj4+CmVuZG9iago0NDcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNTY1LjAwNSA0NDcuMzM5IDU3NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDQ2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ0OCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNzk2IDU2NS4wMDUgNTQwLjUxNiA1NzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ0NiAwIFIKL0ggL0kKCj4+CmVuZG9iago0NDkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzkzIDAgUiAvWFlaIDcyLjAgMzcwLjY3NSBudWxsXQo+PgplbmRvYmoKNDUwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDU1My4wMDUgNDEzLjYzMSA1NjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ0OSAwIFIKL0ggL0kKCj4+CmVuZG9iago0NTEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjA4IDU1My4wMDUgNTQwLjggNTYyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NDkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDUyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzM5MyAwIFIgL1hZWiA3Mi4wIDI5Ni4wMSBudWxsXQo+PgplbmRvYmoKNDUzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDU0MS4wMDUgNDQ0LjE1MSA1NTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ1MiAwIFIKL0ggL0kKCj4+CmVuZG9iago0NTQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjgxOSA1NDEuMDA1IDU0MC41MzkgNTUwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NTIgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDU1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzM5MyAwIFIgL1hZWiA3Mi4wIDIyMS4zNDUgbnVsbF0KPj4KZW5kb2JqCjQ1NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA1MjkuMDA1IDQyMC4yMDMgNTM4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NTUgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDU3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC4wMjQgNTI5LjAwNSA1NDAuNzQ0IDUzOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDU1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ1OCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTMgMCBSIC9YWVogNzIuMCAxNDYuNjggbnVsbF0KPj4KZW5kb2JqCjQ1OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA1MTcuMDA1IDQzMS40OTYgNTI2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NTggMCBSCi9IIC9JCgo+PgplbmRvYmoKNDYwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy45MyA1MTcuMDA1IDU0MC42NSA1MjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ1OCAwIFIKL0ggL0kKCj4+CmVuZG9iago0NjEgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzk2IDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjQ2MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA1MDUuMDA1IDQzNS44MjggNTE0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NjEgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDYzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy44OTQgNTA1LjAwNSA1NDAuNjE0IDUxNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDYxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ2NCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTYgMCBSIC9YWVogNzIuMCA2NTAuOTQ4IG51bGxdCj4+CmVuZG9iago0NjUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNDkzLjAwNSA0ODUuNzU2IDUwMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDY0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ2NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNDY5IDQ5My4wMDUgNTQwLjE4OSA1MDIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ2NCAwIFIKL0ggL0kKCj4+CmVuZG9iago0NjcgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzk2IDAgUiAvWFlaIDcyLjAgNTg3LjU4MSBudWxsXQo+PgplbmRvYmoKNDY4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDQ4MS4wMDUgNDIzLjUwOCA0OTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ2NyAwIFIKL0ggL0kKCj4+CmVuZG9iago0NjkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3Ljk5MyA0ODEuMDA1IDU0MC43MTMgNDkwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NjcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDcwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzM5NiAwIFIgL1hZWiA3Mi4wIDUxMi4yMTQgbnVsbF0KPj4KZW5kb2JqCjQ3MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA0NjkuMDA1IDQ1Ni4wODEgNDc4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NzAgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDcyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy43MTkgNDY5LjAwNSA1NDAuNDM5IDQ3OC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDcwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ3MyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTYgMCBSIC9YWVogNzIuMCA0MzYuODQ3IG51bGxdCj4+CmVuZG9iago0NzQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNDU3LjAwNSA0NDAuMSA0NjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ3MyAwIFIKL0ggL0kKCj4+CmVuZG9iago0NzUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3Ljg1OCA0NTcuMDA1IDU0MC41NzggNDY2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NzMgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDc2IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzM5NiAwIFIgL1hZWiA3Mi4wIDM3My40OCBudWxsXQo+PgplbmRvYmoKNDc3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDQ0NS4wMDUgNDA2LjM5MiA0NTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ3NiAwIFIKL0ggL0kKCj4+CmVuZG9iago0NzggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjE0MiA0NDUuMDA1IDU0MC44NjIgNDU0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NzYgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDc5IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzM5NiAwIFIgL1hZWiA3Mi4wIDI5OC4xMTMgbnVsbF0KPj4KZW5kb2JqCjQ4MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA0MzMuMDA1IDQyNS45OTkgNDQyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NzkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDgxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy45NzYgNDMzLjAwNSA1NDAuNjk2IDQ0Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDc5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ4MiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTYgMCBSIC9YWVogNzIuMCAyMjIuNzQ2IG51bGxdCj4+CmVuZG9iago0ODMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNDIxLjAwNSA0MDYuMDUzIDQzMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDgyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ4NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTQ0IDQyMS4wMDUgNTQwLjg2NCA0MzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ4MiAwIFIKL0ggL0kKCj4+CmVuZG9iago0ODUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzk2IDAgUiAvWFlaIDcyLjAgMTQ3LjM3OSBudWxsXQo+PgplbmRvYmoKNDg2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDQwOS4wMDUgMzkwLjI2IDQxOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDg1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ4NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMjc4IDQwOS4wMDUgNTQwLjk5OCA0MTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ4NSAwIFIKL0ggL0kKCj4+CmVuZG9iago0ODggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzk5IDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjQ4OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzOTcuMDA1IDM3MS42OTggNDA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0ODggMCBSCi9IIC9JCgo+PgplbmRvYmoKNDkwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC40MzQgMzk3LjAwNSA1NDEuMTU0IDQwNi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDg4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ5MSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTkgMCBSIC9YWVogNzIuMCA2NjQuMTU2IG51bGxdCj4+CmVuZG9iago0OTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzg1LjAwNSAzNzIuNzE0IDM5NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDkxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ5MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguNDI2IDM4NS4wMDUgNTQxLjE0NiAzOTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ5MSAwIFIKL0ggL0kKCj4+CmVuZG9iago0OTQgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzk5IDAgUiAvWFlaIDcyLjAgNjAyLjM1OSBudWxsXQo+PgplbmRvYmoKNDk1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDM3My4wMDUgMzc0LjQ5NiAzODIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ5NCAwIFIKL0ggL0kKCj4+CmVuZG9iago0OTYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjQxIDM3My4wMDUgNTQxLjEzIDM4Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDk0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ5NyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTkgMCBSIC9YWVogNzIuMCA1NDAuNTYyIG51bGxdCj4+CmVuZG9iago0OTggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzYxLjAwNSAzODkuMjA0IDM3MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDk3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ5OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMjg2IDM2MS4wMDUgNTQxLjAwNiAzNzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ5NyAwIFIKL0ggL0kKCj4+CmVuZG9iago1MDAgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzk5IDAgUiAvWFlaIDcyLjAgNDc4Ljc2NSBudWxsXQo+PgplbmRvYmoKNTAxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDM0OS4wMDUgMzc4LjEzMSAzNTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUwMCAwIFIKL0ggL0kKCj4+CmVuZG9iago1MDIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjM4IDM0OS4wMDUgNTQxLjEgMzU4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1MDAgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTAzIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzM5OSAwIFIgL1hZWiA3Mi4wIDQxNi45NjggbnVsbF0KPj4KZW5kb2JqCjUwNCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzMzcuMDA1IDM3NS42MTEgMzQ2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1MDMgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTA1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC40IDMzNy4wMDUgNTQxLjEyIDM0Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTAzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjUwNiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTkgMCBSIC9YWVogNzIuMCAzNDMuMTcxIG51bGxdCj4+CmVuZG9iago1MDcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzI1LjAwNSAzODcuOTM5IDMzNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTA2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjUwOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMjk2IDMyNS4wMDUgNTQxLjAxNiAzMzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUwNiAwIFIKL0ggL0kKCj4+CmVuZG9iago1MDkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzk5IDAgUiAvWFlaIDcyLjAgMjgxLjM3NCBudWxsXQo+PgplbmRvYmoKNTEwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDMxMy4wMDUgMzQzLjYzNiAzMjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUwOSAwIFIKL0ggL0kKCj4+CmVuZG9iago1MTEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjY3IDMxMy4wMDUgNTQxLjM5IDMyMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTA5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjUxMiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszOTkgMCBSIC9YWVogNzIuMCAyMTkuNTc3IG51bGxdCj4+CmVuZG9iago1MTMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzAxLjAwNSA0MTAuNDc0IDMxMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTEyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjUxNCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTA2IDMwMS4wMDUgNTQwLjgyNiAzMTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUxMiAwIFIKL0ggL0kKCj4+CmVuZG9iago1MTUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzk5IDAgUiAvWFlaIDcyLjAgMTQ1Ljc4IG51bGxdCj4+CmVuZG9iago1MTYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjg5LjAwNSA0MzAuNSAyOTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUxNSAwIFIKL0ggL0kKCj4+CmVuZG9iago1MTcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjkzOCAyODkuMDA1IDU0MC42NTggMjk4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1MTUgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTE4IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQwMiAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iago1MTkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjc3LjAwNSA0MTguMTgyIDI4Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTE4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjUyMCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMDQyIDI3Ny4wMDUgNTQwLjc2MiAyODYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUxOCAwIFIKL0ggL0kKCj4+CmVuZG9iago1MjEgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDAyIDAgUiAvWFlaIDcyLjAgNjUzLjMxIG51bGxdCj4+CmVuZG9iago1MjIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjY1LjAwNSA0NTAuNzU1IDI3NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTIxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjUyMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNzY4IDI2NS4wMDUgNTQwLjQ4OCAyNzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUyMSAwIFIKL0ggL0kKCj4+CmVuZG9iago1MjQgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDAyIDAgUiAvWFlaIDcyLjAgNTkzLjAxMyBudWxsXQo+PgplbmRvYmoKNTI1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDI1My4wMDUgNDM0Ljc3MiAyNjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUyNCAwIFIKL0ggL0kKCj4+CmVuZG9iago1MjYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjkwMiAyNTMuMDA1IDU0MC42MjIgMjYyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1MjQgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTI3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQwMiAwIFIgL1hZWiA3Mi4wIDUzMi43MTYgbnVsbF0KPj4KZW5kb2JqCjUyOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyNDEuMDA1IDQwMS4wNjQgMjUwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1MjcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTI5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC4xODYgMjQxLjAwNSA1NDAuOTA2IDI1MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTI3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjUzMCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs0MDIgMCBSIC9YWVogNzIuMCA0NjAuNDE5IG51bGxdCj4+CmVuZG9iago1MzEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjI5LjAwNSA0MzEuNTg0IDIzOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTMwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjUzMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuOTI1IDIyOS4wMDUgNTQwLjY0NSAyMzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUzMCAwIFIKL0ggL0kKCj4+CmVuZG9iago1MzMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDAyIDAgUiAvWFlaIDcyLjAgMzg4LjEyMiBudWxsXQo+PgplbmRvYmoKNTM0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDIxNy4wMDUgNDA3LjYzNiAyMjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUzMyAwIFIKL0ggL0kKCj4+CmVuZG9iago1MzUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjEzIDIxNy4wMDUgNTQwLjg1IDIyNi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTMzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjUzNiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs0MDIgMCBSIC9YWVogNzIuMCAzMTUuODI1IG51bGxdCj4+CmVuZG9iago1MzcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjA1LjAwNSA0MTguOTI5IDIxNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTM2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjUzOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMDM2IDIwNS4wMDUgNTQwLjc1NiAyMTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUzNiAwIFIKL0ggL0kKCj4+CmVuZG9iago1MzkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDAyIDAgUiAvWFlaIDcyLjAgMjQzLjUyOCBudWxsXQo+PgplbmRvYmoKNTQwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDE5My4wMDUgNDIzLjI2MSAyMDIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUzOSAwIFIKL0ggL0kKCj4+CmVuZG9iago1NDEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjAgMTkzLjAwNSA1NDAuNzIgMjAyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1MzkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTQyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQwMiAwIFIgL1hZWiA3Mi4wIDE3MS4yMzEgbnVsbF0KPj4KZW5kb2JqCjU0MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxODEuMDA1IDQ3My4xODkgMTkwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1NDIgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTQ0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy41NzUgMTgxLjAwNSA1NDAuMjk1IDE5MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTQyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjU0NSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs0MDIgMCBSIC9YWVogNzIuMCAxMTAuOTM0IG51bGxdCj4+CmVuZG9iago1NDYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTY5LjAwNSA0MTAuOTQyIDE3OC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTQ1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjU0NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTAyIDE2OS4wMDUgNTQwLjgyMiAxNzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDU0NSAwIFIKL0ggL0kKCj4+CmVuZG9iago1NDggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDA1IDAgUiAvWFlaIDcyLjAgNjk2LjAgbnVsbF0KPj4KZW5kb2JqCjU0OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxNTcuMDA1IDQ0My41MTUgMTY2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1NDggMCBSCi9IIC9JCgo+PgplbmRvYmoKNTUwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy44MjggMTU3LjAwNSA1NDAuNTQ4IDE2Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTQ4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjU1MSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs0MDUgMCBSIC9YWVogNzIuMCA2MzMuNzkyIG51bGxdCj4+CmVuZG9iago1NTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTQ1LjAwNSA0MjcuNTMzIDE1NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTUxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjU1MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuOTY0IDE0NS4wMDUgNTQwLjY4NCAxNTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDU1MSAwIFIKL0ggL0kKCj4+CmVuZG9iago1NTQgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDA1IDAgUiAvWFlaIDcyLjAgNTcxLjU4NCBudWxsXQo+PgplbmRvYmoKNTU1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDEzMy4wMDUgMzkzLjgyNSAxNDIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDU1NCAwIFIKL0ggL0kKCj4+CmVuZG9iago1NTYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjI0OCAxMzMuMDA1IDU0MC45NjggMTQyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1NTQgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTU3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQwNSAwIFIgL1hZWiA3Mi4wIDQ5Ny4zNzYgbnVsbF0KPj4KZW5kb2JqCjU1OCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxMjEuMDA1IDQxMy40MzIgMTMwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1NTcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTU5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC4wODIgMTIxLjAwNSA1NDAuODAyIDEzMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTU3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjU2MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs0MDUgMCBSIC9YWVogNzIuMCA0MjMuMTY4IG51bGxdCj4+CmVuZG9iago1NjEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTA5LjAwNSAyNTIuMTkyIDExOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTYwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjU2MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjkuNDQyIDEwOS4wMDUgNTQyLjE2MiAxMTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDU2MCAwIFIKL0ggL0kKCj4+CmVuZG9iago1NjMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNDA1IDAgUiAvWFlaIDcyLjAgMzYwLjk2IG51bGxdCj4+CmVuZG9iago1NjQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgOTcuMDA1IDI1Mi4xOTIgMTA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1NjMgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTY1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOS40NDIgOTcuMDA1IDU0Mi4xNjIgMTA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1NjMgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTY2IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQwNSAwIFIgL1hZWiA3Mi4wIDI5OC43NTIgbnVsbF0KPj4KZW5kb2JqCjU2NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA4NS4wMDUgMjUyLjE5MiA5NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTY2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjU2OCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjkuNDQyIDg1LjAwNSA1NDIuMTYyIDk0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1NjYgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTY5IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQwNSAwIFIgL1hZWiA3Mi4wIDIzNi41NDQgbnVsbF0KPj4KZW5kb2JqCjU3MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA3My4wMDUgMjUyLjE5MiA4Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTY5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjU3MSAwIG9iago8PCAvVHlwZSAvQW5u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IDAgUgo0NjMgMCBSCjQ2NSAwIFIKNDY2IDAgUgo0NjggMCBSCjQ2OSAwIFIKNDcxIDAgUgo0NzIgMCBSCjQ3NCAwIFIKNDc1IDAgUgo0NzcgMCBSCjQ3OCAwIFIKNDgwIDAgUgo0ODEgMCBSCjQ4MyAwIFIKNDg0IDAgUgo0ODYgMCBSCjQ4NyAwIFIKNDg5IDAgUgo0OTAgMCBSCjQ5MiAwIFIKNDkzIDAgUgo0OTUgMCBSCjQ5NiAwIFIKNDk4IDAgUgo0OTkgMCBSCjUwMSAwIFIKNTAyIDAgUgo1MDQgMCBSCjUwNSAwIFIKNTA3IDAgUgo1MDggMCBSCjUxMCAwIFIKNTExIDAgUgo1MTMgMCBSCjUxNCAwIFIKNTE2IDAgUgo1MTcgMCBSCjUxOSAwIFIKNTIwIDAgUgo1MjIgMCBSCjUyMyAwIFIKNTI1IDAgUgo1MjYgMCBSCjUyOCAwIFIKNTI5IDAgUgo1MzEgMCBSCjUzMiAwIFIKNTM0IDAgUgo1MzUgMCBSCjUzNyAwIFIKNTM4IDAgUgo1NDAgMCBSCjU0MSAwIFIKNTQzIDAgUgo1NDQgMCBSCjU0NiAwIFIKNTQ3IDAgUgo1NDkgMCBSCjU1MCAwIFIKNTUyIDAgUgo1NTMgMCBSCjU1NSAwIFIKNTU2IDAgUgo1NTggMCBSCjU1OSAwIFIKNTYxIDAgUgo1NjIgMCBSCjU2NCAwIFIKNTY1IDAgUgo1NjcgMCBSCjU2OCAwIFIKNTcwIDAgUgo1NzEgMCBSCl0KZW5kb2JqCjQwOCAwIG9iago8PAogIC9SZXNvdXJjZXMgMyAwIFIKICAvVHlwZSAvUGFnZQogIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCiAgL0Nyb3BCb3ggWzAgMCA2MTIgNzkyXQogIC9CbGVlZEJveCBbMCAwIDYxMiA3OTJdCiAgL1RyaW1Cb3ggWzAgMCA2MTIgNzkyXQogIC9QYXJlbnQgMSAwIFIKICAvQW5ub3RzIDQxMSAwIFIKICAvQ29udGVudHMgNTcyIDAgUgo+PgoKZW5kb2JqCjU3MyAwIG9iagoxNDgxOAplbmRvYmoKNTc1IDAgb2JqCjw8IC9MZW5ndGggNTc2IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJzlWktv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MTEyLjEyOCBudWxsXQo+PgplbmRvYmoKNTk4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDY5Ny4wMDUgMjUyLjE5MiA3MDYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDU5NyAwIFIKL0ggL0kKCj4+CmVuZG9iago1OTkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI5LjQ0MiA2OTcuMDA1IDU0Mi4xNjIgNzA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1OTcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjAwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU3NCAwIFIgL1hZWiA3Mi4wIDcwOC4wIG51bGxdCj4+CmVuZG9iago2MDEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNjg1LjAwNSAyNTAuNTc4IDY5NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjAwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjYwMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjkuNDU0IDY4NS4wMDUgNTQyLjE3NCA2OTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYwMCAwIFIKL0ggL0kKCj4+CmVuZG9iago2MDMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTc0IDAgUiAvWFlaIDcyLjAgNjQ2Ljc5OCBudWxsXQo+PgplbmRvYmoKNjA0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDY3My4wMDUgMjg4Ljk5NiA2ODIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYwMyAwIFIKL0ggL0kKCj4+CmVuZG9iago2MDUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI5LjEzIDY3My4wMDUgNTQxLjg1IDY4Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjAzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjYwNiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NzQgMCBSIC9YWVogNzIuMCA1ODUuNTk2IG51bGxdCj4+CmVuZG9iago2MDcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNjYxLjAwNSAyODYuOTI1IDY3MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjA2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjYwOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjkuMTQ4IDY2MS4wMDUgNTQxLjg2OCA2NzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYwNiAwIFIKL0ggL0kKCj4+CmVuZG9iago2MDkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTc0IDAgUiAvWFlaIDcyLjAgNTI0LjM5NCBudWxsXQo+PgplbmRvYmoKNjEwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDY0OS4wMDUgMjY2Ljk0OSA2NTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYwOSAwIFIKL0ggL0kKCj4+CmVuZG9iago2MTEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI5LjMxNiA2NDkuMDA1IDU0Mi4wMzYgNjU4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2MDkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU3NCAwIFIgL1hZWiA3Mi4wIDQ2My4xOTIgbnVsbF0KPj4KZW5kb2JqCjYxMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA2MzcuMDA1IDI4NC4wNDcgNjQ2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2MTIgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjE0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOS4xNzIgNjM3LjAwNSA1NDEuODkyIDY0Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjEyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjYxNSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NzQgMCBSIC9YWVogNzIuMCA0MDEuOTkgbnVsbF0KPj4KZW5kb2JqCjYxNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA2MjUuMDA1IDM2OC45NjkgNjM0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2MTUgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjE3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC40NTYgNjI1LjAwNSA1NDEuMTc2IDYzNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjE1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjYxOCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NzQgMCBSIC9YWVogNzIuMCAzNDAuNzg4IG51bGxdCj4+CmVuZG9iago2MTkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNjEzLjAwNSAzNjAuMjc2IDYyMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjE4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjYyMCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguNTMgNjEzLjAwNSA1NDEuMjUgNjIyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2MTggMCBSCi9IIC9JCgo+PgplbmRvYmoKNjIxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU3NCAwIFIgL1hZWiA3Mi4wIDI2Ny41ODYgbnVsbF0KPj4KZW5kb2JqCjYyMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA2MDEuMDA1IDM3OC43NzggNjEwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2MjEgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjIzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC4zNzQgNjAxLjAwNSA1NDEuMDk0IDYxMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjIxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjYyNCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NzQgMCBSIC9YWVogNzIuMCAyMDYuMzg0IG51bGxdCj4+CmVuZG9iago2MjUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNTg5LjAwNSA0MDMuNTA0IDU5OC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjI0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjYyNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTY2IDU4OS4wMDUgNTQwLjg4NiA1OTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYyNCAwIFIKL0ggL0kKCj4+CmVuZG9iago2MjcgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTc0IDAgUiAvWFlaIDcyLjAgMTQ1LjE4MiBudWxsXQo+PgplbmRvYmoKNjI4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDU3Ny4wMDUgNDQzLjA2NyA1ODYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYyNyAwIFIKL0ggL0kKCj4+CmVuZG9iago2MjkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjgzMiA1NzcuMDA1IDU0MC41NTIgNTg2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2MjcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjMwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU3NyAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iago2MzEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNTY1LjAwNSA0MDMuMjY1IDU3NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjMwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjYzMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTY4IDU2NS4wMDUgNTQwLjg4OCA1NzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYzMCAwIFIKL0ggL0kKCj4+CmVuZG9iago2MzMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTc3IDAgUiAvWFlaIDcyLjAgNjY0LjQ0NCBudWxsXQo+PgplbmRvYmoKNjM0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDU1My4wMDUgMzk5LjU2IDU2Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjMzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjYzNSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMTk4IDU1My4wMDUgNTQwLjkxOCA1NjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYzMyAwIFIKL0ggL0kKCj4+CmVuZG9iago2MzYgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTc3IDAgUiAvWFlaIDcyLjAgNjAzLjAyMSBudWxsXQo+PgplbmRvYmoKNjM3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDU0MS4wMDUgMjM1LjI4MyA1NTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYzNiAwIFIKL0ggL0kKCj4+CmVuZG9iago2MzggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI5LjU4NCA1NDEuMDA1IDU0Mi4zMDQgNTUwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2MzYgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjM5IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU3NyAwIFIgL1hZWiA3Mi4wIDU0MS41OTggbnVsbF0KPj4KZW5kb2JqCjY0MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA1MjkuMDA1IDIyNC45NTYgNTM4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2MzkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjQxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOS42NyA1MjkuMDA1IDU0Mi4zOSA1MzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYzOSAwIFIKL0ggL0kKCj4+CmVuZG9iago2NDIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTc3IDAgUiAvWFlaIDcyLjAgNDgwLjE3NSBudWxsXQo+PgplbmRvYmoKNjQzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDUxNy4wMDUgNDAzLjY4MyA1MjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY0MiAwIFIKL0ggL0kKCj4+CmVuZG9iago2NDQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjE2NCA1MTcuMDA1IDU0MC44ODQgNTI2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NDIgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjQ1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU3NyAwIFIgL1hZWiA3Mi4wIDQxOC43NTIgbnVsbF0KPj4KZW5kb2JqCjY0NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA1MDUuMDA1IDM0Ny4zNyA1MTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY0NSAwIFIKL0ggL0kKCj4+CmVuZG9iago2NDcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjYzOCA1MDUuMDA1IDU0MS4zNTggNTE0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NDUgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjQ4IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU3NyAwIFIgL1hZWiA3Mi4wIDM1Ny4zMjkgbnVsbF0KPj4KZW5kb2JqCjY0OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA0OTMuMDA1IDM3Mi4xMzYgNTAyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NDggMCBSCi9IIC9JCgo+PgplbmRvYmoKNjUwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC40MyA0OTMuMDA1IDU0MS4xNSA1MDIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY0OCAwIFIKL0ggL0kKCj4+CmVuZG9iago2NTEgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTc3IDAgUiAvWFlaIDcyLjAgMjk1LjkwNiBudWxsXQo+PgplbmRvYmoKNjUyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDQ4MS4wMDUgMzYwLjgwNCA0OTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY1MSAwIFIKL0ggL0kKCj4+CmVuZG9iago2NTMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjUyNiA0ODEuMDA1IDU0MS4yNDYgNDkwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NTEgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjU0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU3NyAwIFIgL1hZWiA3Mi4wIDIzNC40ODMgbnVsbF0KPj4KZW5kb2JqCjY1NSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA0NjkuMDA1IDM0Ny4zNiA0NzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY1NCAwIFIKL0ggL0kKCj4+CmVuZG9iago2NTYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjYzOCA0NjkuMDA1IDU0MS4zNTggNDc4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NTQgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjU3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU3NyAwIFIgL1hZWiA3Mi4wIDE3My4wNiBudWxsXQo+PgplbmRvYmoKNjU4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDQ1Ny4wMDUgMzY4LjYyMSA0NjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY1NyAwIFIKL0ggL0kKCj4+CmVuZG9iago2NTkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjQ2IDQ1Ny4wMDUgNTQxLjE4IDQ2Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjU3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjY2MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1NzcgMCBSIC9YWVogNzIuMCAxMTEuNjM3IG51bGxdCj4+CmVuZG9iago2NjEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNDQ1LjAwNSAzNjIuMDY4IDQ1NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjYwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjY2MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguNTE0IDQ0NS4wMDUgNTQxLjIzNCA0NTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY2MCAwIFIKL0ggL0kKCj4+CmVuZG9iago2NjMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTgwIDAgUiAvWFlaIDcyLjAgNzA4LjAgbnVsbF0KPj4KZW5kb2JqCjY2NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA0MzMuMDA1IDM2Mi40OTcgNDQyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NjMgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjY1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC41MTIgNDMzLjAwNSA1NDEuMjMyIDQ0Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjYzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjY2NiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODAgMCBSIC9YWVogNzIuMCA2NDYuNzk4IG51bGxdCj4+CmVuZG9iago2NjcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgNDIxLjAwNSAzNzcuMTk1IDQzMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjY2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjY2OCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMzg4IDQyMS4wMDUgNTQxLjEwOCA0MzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY2NiAwIFIKL0ggL0kKCj4+CmVuZG9iago2NjkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTgwIDAgUiAvWFlaIDcyLjAgNTg1LjU5NiBudWxsXQo+PgplbmRvYmoKNjcwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDQwOS4wMDUgMzUwLjk5NSA0MTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY2OSAwIFIKL0ggL0kKCj4+CmVuZG9iago2NzEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjYwOCA0MDkuMDA1IDU0MS4zMjggNDE4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NjkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjcyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4MCAwIFIgL1hZWiA3Mi4wIDUyNC4zOTQgbnVsbF0KPj4KZW5kb2JqCjY3MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzOTcuMDA1IDM2OS42NzYgNDA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NzIgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjc0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC40NSAzOTcuMDA1IDU0MS4xNyA0MDYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY3MiAwIFIKL0ggL0kKCj4+CmVuZG9iago2NzUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTgwIDAgUiAvWFlaIDcyLjAgNDYzLjE5MiBudWxsXQo+PgplbmRvYmoKNjc2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDM4NS4wMDUgMzYyLjI4OCAzOTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY3NSAwIFIKL0ggL0kKCj4+CmVuZG9iago2NzcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjUxNCAzODUuMDA1IDU0MS4yMzQgMzk0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NzUgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjc4IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4MCAwIFIgL1hZWiA3Mi4wIDQwMS45OSBudWxsXQo+PgplbmRvYmoKNjc5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDM3My4wMDUgMzg5LjkxMSAzODIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY3OCAwIFIKL0ggL0kKCj4+CmVuZG9iago2ODAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjI4IDM3My4wMDUgNTQxLjAgMzgyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2NzggMCBSCi9IIC9JCgo+PgplbmRvYmoKNjgxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4MCAwIFIgL1hZWiA3Mi4wIDM0MC43ODggbnVsbF0KPj4KZW5kb2JqCjY4MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzNjEuMDA1IDM1Ni43OTEgMzcwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2ODEgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjgzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC41NiAzNjEuMDA1IDU0MS4yOCAzNzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY4MSAwIFIKL0ggL0kKCj4+CmVuZG9iago2ODQgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTgwIDAgUiAvWFlaIDcyLjAgMjc5LjU4NiBudWxsXQo+PgplbmRvYmoKNjg1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDM0OS4wMDUgMzkwLjM5OSAzNTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY4NCAwIFIKL0ggL0kKCj4+CmVuZG9iago2ODYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjI3NiAzNDkuMDA1IDU0MC45OTYgMzU4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2ODQgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjg3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4MCAwIFIgL1hZWiA3Mi4wIDIxOC4zODQgbnVsbF0KPj4KZW5kb2JqCjY4OCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzMzcuMDA1IDQyNi41NTcgMzQ2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2ODcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjg5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy45NzIgMzM3LjAwNSA1NDAuNjkyIDM0Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjg3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjY5MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODAgMCBSIC9YWVogNzIuMCAxMzMuMTgyIG51bGxdCj4+CmVuZG9iago2OTEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzI1LjAwNSAyOTYuNjY0IDMzNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjkwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjY5MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjkuMDY2IDMyNS4wMDUgNTQxLjc4NiAzMzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY5MCAwIFIKL0ggL0kKCj4+CmVuZG9iago2OTMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTgzIDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjY5NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAzMTMuMDA1IDQyNS45NDkgMzIyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2OTMgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjk1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy45NzYgMzEzLjAwNSA1NDAuNjk2IDMyMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjkzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjY5NiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODMgMCBSIC9YWVogNzIuMCA2NjMuMzQ2IG51bGxdCj4+CmVuZG9iago2OTcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMzAxLjAwNSA0NjcuMjE0IDMxMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjk2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjY5OCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNjI1IDMwMS4wMDUgNTQwLjM0NSAzMTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY5NiAwIFIKL0ggL0kKCj4+CmVuZG9iago2OTkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTgzIDAgUiAvWFlaIDcyLjAgNjAwLjQ5NiBudWxsXQo+PgplbmRvYmoKNzAwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDI4OS4wMDUgNDkzLjAwNyAyOTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY5OSAwIFIKL0ggL0kKCj4+CmVuZG9iago3MDEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI3LjQwOCAyODkuMDA1IDU0MC4xMjggMjk4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2OTkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzAyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4MyAwIFIgL1hZWiA3Mi4wIDUzNy42NDYgbnVsbF0KPj4KZW5kb2JqCjcwMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyNzcuMDA1IDQ2Ny4yMDQgMjg2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MDIgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzA0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy42MjUgMjc3LjAwNSA1NDAuMzQ1IDI4Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzAyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjcwNSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODMgMCBSIC9YWVogNzIuMCA0NzQuNzk2IG51bGxdCj4+CmVuZG9iago3MDYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjY1LjAwNSA0ODMuNjU1IDI3NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzA1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjcwNyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNDg3IDI2NS4wMDUgNTQwLjIwNyAyNzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDcwNSAwIFIKL0ggL0kKCj4+CmVuZG9iago3MDggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTgzIDAgUiAvWFlaIDcyLjAgNDExLjk0NiBudWxsXQo+PgplbmRvYmoKNzA5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDI1My4wMDUgMzM3Ljc5MSAyNjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDcwOCAwIFIKL0ggL0kKCj4+CmVuZG9iago3MTAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjcyIDI1My4wMDUgNTQxLjQ0IDI2Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzA4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjcxMSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODMgMCBSIC9YWVogNzIuMCAzMzcuMDk2IG51bGxdCj4+CmVuZG9iago3MTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjQxLjAwNSAzMzcuNzkxIDI1MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzExIDAgUgovSCAvSQoKPj4KZW5kb2JqCjcxMyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguNzIgMjQxLjAwNSA1NDEuNDQgMjUwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MTEgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzE0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4MyAwIFIgL1hZWiA3Mi4wIDI2Mi4yNDYgbnVsbF0KPj4KZW5kb2JqCjcxNSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAyMjkuMDA1IDMzNy43OTEgMjM4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MTQgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzE2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC43MiAyMjkuMDA1IDU0MS40NCAyMzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDcxNCAwIFIKL0ggL0kKCj4+CmVuZG9iago3MTcgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTgzIDAgUiAvWFlaIDcyLjAgMTg3LjM5NiBudWxsXQo+PgplbmRvYmoKNzE4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDIxNy4wMDUgMzM3Ljc5MSAyMjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDcxNyAwIFIKL0ggL0kKCj4+CmVuZG9iago3MTkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjcyIDIxNy4wMDUgNTQxLjQ0IDIyNi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzE3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjcyMCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODMgMCBSIC9YWVogNzIuMCAxMTIuNTQ2IG51bGxdCj4+CmVuZG9iago3MjEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMjA1LjAwNSAzNzUuNjAxIDIxNC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzIwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjcyMiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguNCAyMDUuMDA1IDU0MS4xMiAyMTQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDcyMCAwIFIKL0ggL0kKCj4+CmVuZG9iago3MjMgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTg2IDAgUiAvWFlaIDcyLjAgNzA4LjAgbnVsbF0KPj4KZW5kb2JqCjcyNCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxOTMuMDA1IDM2NS4yNjUgMjAyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MjMgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzI1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC40ODggMTkzLjAwNSA1NDEuMjA4IDIwMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzIzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjcyNiAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODYgMCBSIC9YWVogNzIuMCA2NDYuNzk4IG51bGxdCj4+CmVuZG9iago3MjcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTgxLjAwNSA0NzEuOTg0IDE5MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzI2IDAgUgovSCAvSQoKPj4KZW5kb2JqCjcyOCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuNTg1IDE4MS4wMDUgNTQwLjMwNSAxOTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDcyNiAwIFIKL0ggL0kKCj4+CmVuZG9iago3MjkgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTg2IDAgUiAvWFlaIDcyLjAgNTczLjU5NiBudWxsXQo+PgplbmRvYmoKNzMwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDE2OS4wMDUgNDM3LjU5IDE3OC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzI5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjczMSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjcuODc4IDE2OS4wMDUgNTQwLjU5OCAxNzguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDcyOSAwIFIKL0ggL0kKCj4+CmVuZG9iago3MzIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTg2IDAgUiAvWFlaIDcyLjAgNTEyLjM5NCBudWxsXQo+PgplbmRvYmoKNzMzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDE1Ny4wMDUgMzgwLjE0MiAxNjYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDczMiAwIFIKL0ggL0kKCj4+CmVuZG9iago3MzQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjM2MiAxNTcuMDA1IDU0MS4wODIgMTY2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MzIgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzM1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4NiAwIFIgL1hZWiA3Mi4wIDQzOS4xOTIgbnVsbF0KPj4KZW5kb2JqCjczNiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxNDUuMDA1IDQzMy4xMTkgMTU0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MzUgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzM3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyNy45MTYgMTQ1LjAwNSA1NDAuNjM2IDE1NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzM1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjczOCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODYgMCBSIC9YWVogNzIuMCAzNzcuOTkgbnVsbF0KPj4KZW5kb2JqCjczOSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCAxMzMuMDA1IDM1Ny41MTggMTQyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MzggMCBSCi9IIC9JCgo+PgplbmRvYmoKNzQwIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC41NTQgMTMzLjAwNSA1NDEuMjc0IDE0Mi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzM4IDAgUgovSCAvSQoKPj4KZW5kb2JqCjc0MSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODYgMCBSIC9YWVogNzIuMCAzMTYuNzg4IG51bGxdCj4+CmVuZG9iago3NDIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgMTIxLjAwNSAzOTguMDM3IDEzMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzQxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjc0MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMjEyIDEyMS4wMDUgNTQwLjkzMiAxMzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDc0MSAwIFIKL0ggL0kKCj4+CmVuZG9iago3NDQgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNTg2IDAgUiAvWFlaIDcyLjAgMjU1LjU4NiBudWxsXQo+PgplbmRvYmoKNzQ1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEyOC4wIDEwOS4wMDUgMzgwLjQxMSAxMTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDc0NCAwIFIKL0ggL0kKCj4+CmVuZG9iago3NDYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4LjM2IDEwOS4wMDUgNTQxLjA4IDExOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzQ0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjc0NyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs1ODYgMCBSIC9YWVogNzIuMCAxOTQuMzg0IG51bGxdCj4+CmVuZG9iago3NDggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTI4LjAgOTcuMDA1IDM3Ny4wNTUgMTA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3NDcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzQ5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC4zODggOTcuMDA1IDU0MS4xMDggMTA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3NDcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzUwIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4NiAwIFIgL1hZWiA3Mi4wIDEzMy4xODIgbnVsbF0KPj4KZW5kb2JqCjc1MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMjguMCA4NS4wMDUgMzkxLjcwNCA5NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzUwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjc1MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjguMjY2IDg1LjAwNSA1NDAuOTg2IDk0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3NTAgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzUzIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4OSAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iago3NTQg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MCBSCjczOSAwIFIKNzQwIDAgUgo3NDIgMCBSCjc0MyAwIFIKNzQ1IDAgUgo3NDYgMCBSCjc0OCAwIFIKNzQ5IDAgUgo3NTEgMCBSCjc1MiAwIFIKNzU0IDAgUgo3NTUgMCBSCl0KZW5kb2JqCjU5MiAwIG9iago8PAogIC9SZXNvdXJjZXMgMyAwIFIKICAvVHlwZSAvUGFnZQogIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCiAgL0Nyb3BCb3ggWzAgMCA2MTIgNzkyXQogIC9CbGVlZEJveCBbMCAwIDYxMiA3OTJdCiAgL1RyaW1Cb3ggWzAgMCA2MTIgNzkyXQogIC9QYXJlbnQgMSAwIFIKICAvQW5ub3RzIDU5NSAwIFIKICAvQ29udGVudHMgNzU2IDAgUgo+PgoKZW5kb2JqCjc1NyAwIG9iagoxODY3MgplbmRvYmoKNzU5IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzU4OSAwIFIgL1hZWiA3Mi4wIDUxNy42IG51bGxdCj4+CmVuZG9iago3NjAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgODAuMCA2NzkuNjI5IDI4Ny4wNTcgNjg5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3NTkgMCBSCi9IIC9JCgo+PgplbmRvYmoKNzYyIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC45MzYgNjc5LjYyOSA1NDEuNjU2IDY4OS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzU5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjc2MyAwIG9iago8PCAvTGVuZ3RoIDc2NCAwIFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCniczVjJjhw3DL3XV+gHTIuLJAoIGrCdBcltkAZ8MHxyEufgdjC55PfzWNXT05sN6TYYNEobxf2RmseFU8bfq/i0LunTYXk8rnFqkrQel0pNmslLzZnTIa1zJs7r/AuOX81OZ4+z+rR3vOk0/zu9X74uOf2yfPiIo3+kTCX9t+RbdmdX/r48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ZG9iago4MzUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNzA5LjAwNSAyMDcuMzg5IDcxOC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODM0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjgzNyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjkuNjY2IDcwOS4wMDUgNTQyLjM4NiA3MTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDgzNCAwIFIKL0ggL0kKCj4+CmVuZG9iago4MzggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNzY1IDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjgzOSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDY5Ny4wMDUgMTI1LjI1MyA3MDYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDgzOCAwIFIKL0ggL0kKCj4+CmVuZG9iago4NDAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMwLjE0NCA2OTcuMDA1IDU0Mi44NjQgNzA2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4MzggMCBSCi9IIC9JCgo+PgplbmRvYmoKODQxIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzc2NSAwIFIgL1hZWiA3Mi4wIDI2NS44NTQgbnVsbF0KPj4KZW5kb2JqCjg0MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA2ODUuMDA1IDI0Ny44NDIgNjk0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4NDEgMCBSCi9IIC9JCgo+PgplbmRvYmoKODQzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOS4zNDYgNjg1LjAwNSA1NDIuMDY2IDY5NC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODQxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjg0NCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs3NjggMCBSIC9YWVogNzIuMCA1NDUuMiBudWxsXQo+PgplbmRvYmoKODQ1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDY3My4wMDUgMjM3LjI5NCA2ODIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg0NCAwIFIKL0ggL0kKCj4+CmVuZG9iago4NDYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI5LjQyOSA2NzMuMDA1IDU0Mi4xNDkgNjgyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4NDQgMCBSCi9IIC9JCgo+PgplbmRvYmoKODQ3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzc2OCAwIFIgL1hZWiA3Mi4wIDI4OC4wIG51bGxdCj4+CmVuZG9iago4NDggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNjYxLjAwNSAyNDAuODk3IDY3MC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODQ3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjg0OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjkuMzk5IDY2MS4wMDUgNTQyLjExOSA2NzAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg0NyAwIFIKL0ggL0kKCj4+CmVuZG9iago4NTAgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNzcxIDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjg1MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDY0OS4wMDUgMTMyLjg2MSA2NTguOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg1MCAwIFIKL0ggL0kKCj4+CmVuZG9iago4NTIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMwLjA4OCA2NDkuMDA1IDU0Mi44MDggNjU4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4NTAgMCBSCi9IIC9JCgo+PgplbmRvYmoKODUzIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzc4OSAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iago4NTQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgODAuMCA2MzcuMDA1IDExOS4wMzYgNjQ2Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4NTMgMCBSCi9IIC9JCgo+PgplbmRvYmoKODU1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMC4xOSA2MzcuMDA1IDU0Mi45MSA2NDYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg1MyAwIFIKL0ggL0kKCj4+CmVuZG9iago4NTYgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNzg5IDAgUiAvWFlaIDcyLjAgNjc4LjggbnVsbF0KPj4KZW5kb2JqCjg1NyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA2MjUuMDA1IDE3MS44NyA2MzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg1NiAwIFIKL0ggL0kKCj4+CmVuZG9iago4NTggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI5Ljk0NiA2MjUuMDA1IDU0Mi42NjYgNjM0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4NTYgMCBSCi9IIC9JCgo+PgplbmRvYmoKODU5IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzc4OSAwIFIgL1hZWiA3Mi4wIDYyNC40IG51bGxdCj4+CmVuZG9iago4NjAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNjEzLjAwNSAxNjcuNzgzIDYyMi45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODU5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjg2MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MjkuOTggNjEzLjAwNSA1NDIuNyA2MjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg1OSAwIFIKL0ggL0kKCj4+CmVuZG9iago4NjIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbNzkyIDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjg2MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDYwMS4wMDUgMTUwLjMxIDYxMC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODYyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjg2NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzAuMTI4IDYwMS4wMDUgNTQyLjg0OCA2MTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg2MiAwIFIKL0ggL0kKCj4+CmVuZG9iago4NjUgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgODAuMCA1ODkuMDA1IDMzMS4xMzMgNTk4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4MTMgMCBSCi9IIC9JCgo+PgplbmRvYmoKODY2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUyOC42MDYgNTg5LjAwNSA1NDEuMzI2IDU5OC45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODEzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjg2NyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFs3OTUgMCBSIC9YWVogNzIuMCA2ODEuNiBudWxsXQo+PgplbmRvYmoKODY4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDU3Ny4wMDUgMjUxLjA2NSA1ODYuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg2NyAwIFIKL0ggL0kKCj4+CmVuZG9iago4NjkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI5LjMyIDU3Ny4wMDUgNTQyLjA0IDU4Ni45OTUgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODY3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjg3MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDU2NS4wMDUgMjgwLjM0MiA1NzQuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDgxNiAwIFIKL0ggL0kKCj4+CmVuZG9iago4NzEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI4Ljk4NiA1NjUuMDA1IDU0MS43MDYgNTc0Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4MTYgMCBSCi9IIC9JCgo+PgplbmRvYmoKODcyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzgwOSAwIFIgL1hZWiA3Mi4wIDYzNi4yNSBudWxsXQo+PgplbmRvYmoKODczIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDU1My4wMDUgMTg0Ljc0MyA1NjIuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg3MiAwIFIKL0ggL0kKCj4+CmVuZG9iago4NzQgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI5Ljg0NCA1NTMuMDA1IDU0Mi41NjQgNTYyLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4NzIgMCBSCi9IIC9JCgo+PgplbmRvYmoKODc1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzgwOSAwIFIgL1hZWiA3Mi4wIDE1MC45NCBudWxsXQo+PgplbmRvYmoKODc2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDU0MS4wMDUgMjA1LjA3MyA1NTAuOTk1IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg3NSAwIFIKL0ggL0kKCj4+CmVuZG9iago4NzcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTI5LjY4NCA1NDEuMDA1IDU0Mi40MDQgNTUwLjk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4NzUgMCBSCi9IIC9JCgo+PgplbmRvYmoKODc4IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzgyMSAwIFIgL1hZWiA3Mi4wIDMyOC4wNjUgbnVsbF0KPj4KZW5kb2JqCjg3OSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1MjkuMDA1IDE4NC43MzMgNTM4Ljk5NSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4NzggMCBSCi9IIC9JCgo+Pgpl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CmVuZG9iago5MTUgMCBvYmoKNTIyCmVuZG9iagoxIDAgb2JqCjw8IC9UeXBlIC9QYWdlcwovQ291bnQgNTAKL0tpZHMgWzggMCBSIDY1IDAgUiAyMzcgMCBSIDQwOCAwIFIgNTkyIDAgUiA4MzMgMCBSIDc1OCAwIFIgMTggMCBSIDI4IDAgUiAzMSAwIFIgODEyIDAgUiA0NyAwIFIgNTAgMCBSIDU2IDAgUiA1OSAwIFIgNjIgMCBSIDIyMiAwIFIgMjI1IDAgUiAyMjggMCBSIDIzMSAwIFIgMjM0IDAgUiAzOTMgMCBSIDM5NiAwIFIgMzk5IDAgUiA0MDIgMCBSIDQwNSAwIFIgNTc0IDAgUiA1NzcgMCBSIDU4MCAwIFIgNTgzIDAgUiA1ODYgMCBSIDU4OSAwIFIgNzY1IDAgUiA3NjggMCBSIDc3MSAwIFIgNzc0IDAgUiA3NzcgMCBSIDc4MCAwIFIgNzgzIDAgUiA3ODYgMCBSIDc4OSAwIFIgNzkyIDAgUiA3OTUgMCBSIDgwMSAwIFIgODA5IDAgUiA4MjEgMCBSIDgyNCAwIFIgODI3IDAgUiA4MzAgMCBSIDg4NiAwIFIgXSA+PgplbmRvYmoKMiAwIG9iago8PAogIC9UeXBlIC9DYXRhbG9nCiAgL1BhZ2VzIDEgMCBSCiAgL0xhbmcgKGVuKQogIC9NZXRhZGF0YSA3IDAgUgogIC9QYWdlTGFiZWxzIDkgMCBSCj4+CgplbmRvYmoKMyAwIG9iago8PAogIC9Gb250IDw8CiAgL0YxOSA4OTIgMCBSCiAgL0YxNSA4OTggMCBSCiAgL0YxNiA5MDQgMCBSCj4+CgogIC9Qcm9jU2V0IFsvUERGIC9JbWFnZUIgL0ltYWdlQyAvVGV4dF0KICAvWE9iamVjdCA8PAogIC9JbTEgMTAgMCBSCiAgL0ltMiAxMSAwIFIKICAvSW0zIDE5IDAgUgogIC9JbTQgMjAgMCBSCj4+CgogIC9Db2xvclNwYWNlIDw8IC9EZWZhdWx0UkdCIDYgMCBSID4+Cgo+PgoKZW5kb2JqCjkgMCBvYmoKPDwgL051bXMgWzAgPDwgL1AgKDEpID4+CiAxIDw8IC9QIChpaSkgPj4KIDIgPDwgL1AgKGlpaSkgPj4KIDMgPDwgL1AgKGl2KSA+PgogNCA8PCAvUCAodikgPj4KIDUgPDwgL1AgKHZpKSA+PgogNiA8PCAvUCAodmlpKSA+PgogNyA8PCAvUCAodmlpaSkgPj4KIDggPDwgL1AgKDEpID4+CiA5IDw8IC9QICgyKSA+PgogMTAgPDwgL1AgKDMpID4+CiAxMSA8PCAvUCAoNCkgPj4KIDEyIDw8IC9QICg1KSA+PgogMTMgPDwgL1AgKDYpID4+CiAxNCA8PCAvUCAoNykgPj4KIDE1IDw8IC9QICg4KSA+PgogMTYgPDwgL1AgKDkpID4+CiAxNyA8PCAvUCAoMTApID4+CiAxOCA8PCAvUCAoMTEpID4+CiAxOSA8PCAvUCAoMTIpID4+CiAyMCA8PCAvUCAoMTMpID4+CiAyMSA8PCAvUCAoMTQpID4+CiAyMiA8PCAvUCAoMTUpID4+CiAyMyA8PCAvUCAoMTYpID4+CiAyNCA8PCAvUCAoMTcpID4+CiAyNSA8PCAvUCAoMTgpID4+CiAyNiA8PCAvUCAoMTkpID4+CiAyNyA8PCAvUCAoMjApID4+CiAyOCA8PCAvUCAoMjEpID4+CiAyOSA8PCAvUCAoMjIpID4+CiAzMCA8PCAvUCAoMjMpID4+CiAzMSA8PCAvUCAoMjQpID4+CiAzMiA8PCAvUCAoMjUpID4+CiAzMyA8PCAvUCAoMjYpID4+CiAzNCA8PCAvUCAoMjcpID4+CiAzNSA8PCAvUCAoMjgpID4+CiAzNiA8PCAvUCAoMjkpID4+CiAzNyA8PCAvUCAoMzApID4+CiAzOCA8PCAvUCAoMzEpID4+CiAzOSA8PCAvUCAoMzIpID4+CiA0MCA8PCAvUCAoMzMpID4+CiA0MSA8PCAvUCAoMzQpID4+CiA0MiA8PCAvUCAoMzUpID4+CiA0MyA8PCAvUCAoMzYpID4+CiA0NCA8PCAvUCAoMzcpID4+CiA0NSA8PCAvUCAoMzgpID4+CiA0NiA8PCAvUCAoMzkpID4+CiA0NyA8PCAvUCAoNDApID4+CiA0OCA8PCAvUCAoNDEpID4+CiA0OSA8PCAvUCAoNDIpID4+Cl0gPj4KCmVuZG9iagp4cmVmCjAgOTE2CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDQzMzgyOSAwMDAwMCBuIAowMDAwNDM0MjcxIDAwMDAwIG4gCjAwMDA0MzQzNzYgMDAwMDAgbiAKMDAwMDAwMDAxNSAwMDAwMCBuIAowMDAwMDAwMTQ1IDAwMDAwIG4gCjAwMDAwMDI4MjMgMDAwMDAgbiAKMDAwMDAwMjg1NiAwMDAwMCBuIAowMDAwMTA2MTc5IDAwMDAwIG4gCjAwMDA0MzQ2MTEgMDAwMDAgbiAKMDAwMDAwMzgwNCAwMDAwMCBuIAowMDAwMDUyMzMxIDAwMDAwIG4gCjAwMDAxMDU1OTMgMDAwMDAgbiAKMDAwMDEwNTYxNCAwMDAwMCBuIAowMDAwMTA1NjM0IDAwMDAwIG4gCjAwMDAxMDU2NTYgMDAwMDAgbiAKMDAwMDEwNTY3OCAwMDAwMCBuIAowMDAwMTA2MzcxIDAwMDAwIG4gCjAwMDAxMjEwOTIgMDAwMDAgbiAKMDAwMDEwNjM5MSAwMDAwMCBuIAowMDAwMTEyNTYyIDAwMDAwIG4gCjAwMDAxMTk3NDIgMDAwMDAgbiAKMDAwMDExOTc2MyAwMDAwMCBuIAowMDAwMTE5Nzg0IDAwMDAwIG4gCjAwMDAxMTk4NjkgMDAwMDAgbiAKMDAwMDEyMTA2NSAwMDAwMCBuIAowMDAwMTIwMDA3IDAwMDAwIG4gCjAwMDAxMjEzMDIgMDAwMDAgbiAKMDAwMDEyNDAwMyAwMDAwMCBuIAowMDAwMTIxMzIyIDAwMDAwIG4gCjAwMDAxMjQxOTYgMDAwMDAgbiAKMDAwMDEyODM2NiAwMDAwMCBuIAowMDAwMTI0MjE3IDAwMDAwIG4gCjAwMDAxMjQzMjIgMDAwMDAgbiAKMDAwMDEyODI5NyAwMDAwMCBuIAowMDAwMTI0NDU5IDAwMDAwIG4gCjAwMDAxMjQ1NjUgMDAwMDAgbiAKMDAwMDEyNDcwMiAwMDAwMCBuIAowMDAwMTI0ODE3IDAwMDAwIG4gCjAwMDAxMjQ5NTMgMDAwMDAgbiAKMDAwMDEyNTA4MSAwMDAwMCBuIAowMDAwMTI1MjE3IDAwMDAwIG4gCjAwMDAxMjUzNTMgMDAwMDAgbiAKMDAwMDEyNTQ4MiAwMDAwMCBuIAowMDAwMTI1NjE4IDAwMDAwIG4gCjAwMDAxMjU3NTQgMDAwMDAgbiAKMDAwMDEyODU3NiAwMDAwMCBuIAowMDAwMTI5NDYyIDAwMDAwIG4gCjAwMDAxMjg1OTcgMDAwMDAgbiAKMDAwMDEyOTY1NSAwMDAwMCBuIAowMDAwMTMxMzMzIDAwMDAwIG4gCjAwMDAxMjk2NzUgMDAwMDAgbiAKMDAwMDEyOTc3MCAwMDAwMCBuIAowMDAwMTMxMzA2IDAwMDAwIG4gCjAwMDAxMjk5MDYgMDAwMDAgbiAKMDAwMDEzMTU0MyAwMDAwMCBuIAowMDAwMTMzNDI2IDAwMDAwIG4gCjAwMDAxMzE1NjQgMDAwMDAgbiAKMDAwMDEzMzYxOSAwMDAwMCBuIAowMDAwMTM0OTYyIDAwMDAwIG4gCjAwMDAxMzM2NDAgMDAwMDAgbiAKMDAwMDEzNTE1NSAwMDAwMCBuIAowMDAwMTM2NTEyIDAwMDAwIG4gCjAwMDAxMzUxNzYgMDAwMDAgbiAKMDAwMDEzNjcwNSAwMDAwMCBuIAowMDAwMTg0OTc3IDAwMDAwIG4gCjAwMDAxMzY3MjYgMDAwMDAgbiAKMDAwMDEzNjgwNCAwMDAwMCBuIAowMDAwMTg0MTYzIDAwMDAwIG4gCjAwMDAxMzY5NDAgMDAwMDAgbiAKMDAwMDEzNzA4MCAwMDAwMCBuIAowMDAwMTM3MTU4IDAwMDAwIG4gCjAwMDAxMzcyOTUgMDAwMDAgbiAKMDAwMDEzNzQzNSAwMDAwMCBuIAowMDAwMTM3NTEzIDAwMDAwIG4gCjAwMDAxMzc2NTEgMDAwMDAgbiAKMDAwMDEzNzc5MSAwMDAwMCBuIAowMDAwMTM3ODcxIDAwMDAwIG4gCjAwMDAxMzgwMDkgMDAwMDAgbiAKMDAwMDEzODE0OSAwMDAwMCBuIAowMDAwMTM4MjI5IDAwMDAwIG4gCjAwMDAxMzgzNjcgMDAwMDAgbiAKMDAwMDEzODUwNCAwMDAwMCBuIAowMDAwMTM4NTg0IDAwMDAwIG4gCjAwMDAxMzg3MjIgMDAwMDAgbiAKMDAwMDEzODg2MCAwMDAwMCBuIAowMDAwMTM4OTQwIDAwMDAwIG4gCjAwMDAxMzkwNzggMDAwMDAgbiAKMDAwMDEzOTIxOCAwMDAwMCBuIAowMDAwMTM5Mjk4IDAwMDAwIG4gCjAwMDAxMzk0MzYgMDAwMDAgbiAKMDAwMDEzOTU3NiAwMDAwMCBuIAowMDAwMTM5NjU2IDAwMDAwIG4gCjAwMDAxMzk3OTQgMDAwMDAgbiAKMDAwMDEzOTkzNCAwMDAwMCBuIAowMDAwMTQwMDE0IDAwMDAwIG4gCjAwMDAxNDAxNTIgMDAwMDAgbiAKMDAwMDE0MDI5MiAwMDAwMCBuIAowMDAwMTQwMzcyIDAwMDAwIG4gCjAwMDAxNDA1MTAgMDAwMDAgbiAKMDAwMDE0MDY1MCAwMDAwMCBuIAowMDAwMTQwNzMxIDAwMDAwIG4gCjAwMDAxNDA4NzEgMDAwMDAgbiAKMDAwMDE0MTAxMyAwMDAwMCBuIAowMDAwMTQxMDkzIDAwMDAwIG4gCjAwMDAxNDEyMzMgMDAwMDAgbiAKMDAwMDE0MTM3MyAwMDAwMCBuIAowMDAwMTQxNDUyIDAwMDAwIG4gCjAwMDAxNDE1OTIgMDAwMDAgbiAKMDAwMDE0MTczNCAwMDAwMCBuIAowMDAwMTQxODE1IDAwMDAwIG4gCjAwMDAxNDE5NTUgMDAwMDAgbiAKMDAwMDE0MjA5NyAwMDAwMCBuIAowMDAwMTQyMTc3IDAwMDAwIG4gCjAwMDAxNDIzMTcgMDAwMDAgbiAKMDAwMDE0MjQ1OSAwMDAwMCBuIAowMDAwMTQyNTQwIDAwMDAwIG4gCjAwMDAxNDI2ODAgMDAwMDAgbiAKMDAwMDE0MjgyMiAwMDAwMCBuIAowMDAwMTQyOTAzIDAwMDAwIG4gCjAwMDAxNDMwNDMgMDAwMDAgbiAKMDAwMDM1MDYyOSAwMDAwMCBuIAowMDAwMTQzMTgzIDAwMDAwIG4gCjAwMDAxNDMzMjMgMDAwMDAgbiAKMDAwMDE0MzQ2MiAwMDAwMCBuIAowMDAwMTQzNTQxIDAwMDAwIG4gCjAwMDAxNDM2ODAgMDAwMDAgbiAKMDAwMDE0MzgyMiAwMDAwMCBuIAowMDAwMTQzOTAxIDAwMDAwIG4gCjAwMDAxNDQwNDEgMDAwMDAgbiAKMDAwMDE0NDE4MyAwMDAwMCBuIAowMDAwMTQ0MjYyIDAwMDAwIG4gCjAwMDAxNDQ0MDIgMDAwMDAgbiAKMDAwMDE0NDU0NCAwMDAwMCBuIAowMDAwMTQ0NjIzIDAwMDAwIG4gCjAwMDAxNDQ3NjMgMDAwMDAgbiAKMDAwMDE0NDkwMyAwMDAwMCBuIAowMDAwMTQ0OTgyIDAwMDAwIG4gCjAwMDAxNDUxMjIgMDAwMDAgbiAKMDAwMDE0NTI2NCAwMDAwMCBuIAowMDAwMTQ1MzQzIDAwMDAwIG4gCjAwMDAxNDU0ODIgMDAwMDAgbiAKMDAwMDE0NTYyNCAwMDAwMCBuIAowMDAwMTQ1NzAzIDAwMDAwIG4gCjAwMDAxNDU4NDMgMDAwMDAgbiAKMDAwMDE0NTk4NSAwMDAwMCBuIAowMDAwMTQ2MDY0IDAwMDAwIG4gCjAwMDAxNDYyMDQgMDAwMDAgbiAKMDAwMDE0NjM0NiAwMDAwMCBuIAowMDAwMTQ2NDI1IDAwMDAwIG4gCjAwMDAxNDY1NjMgMDAwMDAgbiAKMDAwMDE0NjcwNSAwMDAwMCBuIAowMDAwMTQ2Nzg0IDAwMDAwIG4gCjAwMDAxNDY5MjQgMDAwMDAgbiAKMDAwMDE0NzA2NCAwMDAwMCBuIAowMDAwMTQ3MTQ1IDAwMDAwIG4gCjAwMDAxNDcyODUgMDAwMDAgbiAKMDAwMDE0NzQyNyAwMDAwMCBuIAowMDAwMTQ3NTA4IDAwMDAwIG4gCjAwMDAxNDc2NDggMDAwMDAgbiAKMDAwMDE0Nzc5MCAwMDAwMCBuIAowMDAwMTQ3ODcxIDAwMDAwIG4gCjAwMDAxNDgwMTEgMDAwMDAgbiAKMDAwMDE0ODE1MSAwMDAwMCBuIAowMDAwMTQ4MjMyIDAwMDAwIG4gCjAwMDAxNDgzNzIgMDAwMDAgbiAKMDAwMDE0ODUxNCAwMDAwMCBuIAowMDAwMTQ4NTk0IDAwMDAwIG4gCjAwMDAxNDg3MzQgMDAwMDAgbiAKMDAwMDE0ODg3NiAwMDAwMCBuIAowMDAwMTQ4OTU3IDAwMDAwIG4gCjAwMDAxNDkwOTcgMDAwMDAgbiAKMDAwMDE0OTIzOSAwMDAwMCBuIAowMDAwMTQ5MzIwIDAwMDAwIG4gCjAwMDAxNDk0NjAgMDAwMDAgbiAKMDAwMDE0OTYwMiAwMDAwMCBuIAowMDAwMTQ5NjgzIDAwMDAwIG4gCjAwMDAxNDk4MjMgMDAwMDAgbiAKMDAwMDE0OTk2MyAwMDAwMCBuIAowMDAwMTUwMDQyIDAwMDAwIG4gCjAwMDAxNTAxODIgMDAwMDAgbiAKMDAwMDE1MDMyNCAwMDAwMCBuIAowMDAwMTUwNDA1IDAwMDAwIG4gCjAwMDAxNTA1NDUgMDAwMDAgbiAKMDAwMDE1MDY4NyAwMDAwMCBuIAowMDAwMTUwNzY4IDAwMDAwIG4gCjAwMDAxNTA5MDggMDAwMDAgbiAKMDAwMDE1MTA1MCAwMDAwMCBuIAowMDAwMTUxMTMxIDAwMDAwIG4gCjAwMDAxNTEyNzEgMDAwMDAgbiAKMDAwMDE1MTQxMyAwMDAwMCBuIAowMDAwMTUxNDk0IDAwMDAwIG4gCjAwMDAxNTE2MzQgMDAwMDAgbiAKMDAwMDE1MTc3NCAwMDAwMCBuIAowMDAwMTUxODU1IDAwMDAwIG4gCjAwMDAxNTE5OTUgMDAwMDAgbiAKMDAwMDE1MjEzNyAwMDAwMCBuIAowMDAwMTUyMjE4IDAwMDAwIG4gCjAwMDAxNTIzNTggMDAwMDAgbiAKMDAwMDE1MjUwMCAwMDAwMCBuIAowMDAwMTUyNTgxIDAwMDAwIG4gCjAwMDAxNTI3MjEgMDAwMDAgbiAKMDAwMDE1Mjg2MyAwMDAwMCBuIAowMDAwMTUyOTQ0IDAwMDAwIG4gCjAwMDAxNTMwODQgMDAwMDAgbiAKMDAwMDE1MzIyNiAwMDAwMCBuIAowMDAwMTUzMzA2IDAwMDAwIG4gCjAwMDAxNTM0NDYgMDAwMDAgbiAKMDAwMDE1MzU4OCAwMDAwMCBuIAowMDAwMTUzNjY5IDAwMDAwIG4gCjAwMDAxNTM4MDkgMDAwMDAgbiAKMDAwMDE1Mzk0OSAwMDAwMCBuIAowMDAwMTU0MDI4IDAwMDAwIG4gCjAwMDAxNTQxNjggMDAwMDAgbiAKMDAwMDE1NDMxMCAwMDAwMCBuIAowMDAwMTU0MzkxIDAwMDAwIG4gCjAwMDAxNTQ1MzAgMDAwMDAgbiAKMDAwMDE1NDY3MSAwMDAwMCBuIAowMDAwMTU0NzUyIDAwMDAwIG4gCjAwMDAxNTQ4ODkgMDAwMDAgbiAKMDAwMDE1NTAyOSAwMDAwMCBuIAowMDAwMTg1MTg4IDAwMDAwIG4gCjAwMDAxODY3NTIgMDAwMDAgbiAKMDAwMDE4NTIxMSAwMDAwMCBuIAowMDAwMTg2OTQ3IDAwMDAwIG4gCjAwMDAxODg3NjQgMDAwMDAgbiAKMDAwMDE4Njk2OSAwMDAwMCBuIAowMDAwMTg4OTU5IDAwMDAwIG4gCjAwMDAxOTA2NTIgMDAwMDAgbiAKMDAwMDE4ODk4MSAwMDAwMCBuIAowMDAwMTkwODQ3IDAwMDAwIG4gCjAwMDAxOTIwMzcgMDAwMDAgbiAKMDAwMDE5MDg2OSAwMDAwMCBuIAowMDAwMTkyMjMyIDAwMDAwIG4gCjAwMDAxOTQxMTAgMDAwMDAgbiAKMDAwMDE5MjI1NCAwMDAwMCBuIAowMDAwMTk0MzA1IDAwMDAwIG4gCjAwMDAyMjc2NzQgMDAwMDAgbiAKMDAwMDE5NDMyNyAwMDAwMCBuIAowMDAwMTk0NDA4IDAwMDAwIG4gCjAwMDAyMjY4MjkgMDAwMDAgbiAKMDAwMDE5NDU0OCAwMDAwMCBuIAowMDAwMTk0NjkwIDAwMDAwIG4gCjAwMDAxOTQ3NzEgMDAwMDAgbiAKMDAwMDE5NDkxMSAwMDAwMCBuIAowMDAwMTk1MDUzIDAwMDAwIG4gCjAwMDAxOTUxMzQgMDAwMDAgbiAKMDAwMDE5NTI3NCAwMDAwMCBuIAowMDAwMTk1NDE0IDAwMDAwIG4gCjAwMDAxOTU0OTUgMDAwMDAgbiAKMDAwMDE5NTYzNSAwMDAwMCBuIAowMDAwMTk1Nzc3IDAwMDAwIG4gCjAwMDAxOTU4NTggMDAwMDAgbiAKMDAwMDE5NTk5OCAwMDAwMCBuIAowMDAwMTk2MTQwIDAwMDAwIG4gCjAwMDAxOTYyMjEgMDAwMDAgbiAKMDAwMDE5NjM2MSAwMDAwMCBuIAowMDAwMTk2NTAwIDAwMDAwIG4gCjAwMDAxOTY1ODEgMDAwMDAgbiAKMDAwMDE5NjcyMCAwMDAwMCBuIAowMDAwMTk2ODYyIDAwMDAwIG4gCjAwMDAxOTY5NDIgMDAwMDAgbiAKMDAwMDE5NzA4MiAwMDAwMCBuIAowMDAwMTk3MjI0IDAwMDAwIG4gCjAwMDAxOTczMDYgMDAwMDAgbiAKMDAwMDE5NzQ0NiAwMDAwMCBuIAowMDAwMTk3NTg4IDAwMDAwIG4gCjAwMDAxOTc2NzAgMDAwMDAgbiAKMDAwMDE5NzgxMCAwMDAwMCBuIAowMDAwMTk3OTUwIDAwMDAwIG4gCjAwMDAxOTgwMzIgMDAwMDAgbiAKMDAwMDE5ODE3MSAwMDAwMCBuIAowMDAwMTk4MzEzIDAwMDAwIG4gCjAwMDAxOTgzOTUgMDAwMDAgbiAKMDAwMDE5ODUzNSAwMDAwMCBuIAowMDAwMTk4Njc3IDAwMDAwIG4gCjAwMDAxOTg3NTggMDAwMDAgbiAKMDAwMDE5ODg5OCAwMDAwMCBuIAowMDAwMTk5MDQwIDAwMDAwIG4gCjAwMDAxOTkxMjIgMDAwMDAgbiAKMDAwMDE5OTI2MiAwMDAwMCBuIAowMDAwMTk5NDA0IDAwMDAwIG4gCjAwMDAxOTk0ODYgMDAwMDAgbiAKMDAwMDE5OTYyNiAwMDAwMCBuIAowMDAwMTk5NzY4IDAwMDAwIG4gCjAwMDAxOTk4NTAgMDAwMDAgbiAKMDAwMDE5OTk5MCAwMDAwMCBuIAowMDAwMjAwMTMyIDAwMDAwIG4gCjAwMDAyMDAyMTQgMDAwMDAgbiAKMDAwMDIwMDM1NCAwMDAwMCBuIAowMDAwMjAwNDk2IDAwMDAwIG4gCjAwMDAyMDA1NzcgMDAwMDAgbiAKMDAwMDIwMDcxNyAwMDAwMCBuIAowMDAwMjAwODU5IDAwMDAwIG4gCjAwMDAyMDA5MzkgMDAwMDAgbiAKMDAwMDIwMTA3OSAwMDAwMCBuIAowMDAwMjAxMjIxIDAwMDAwIG4gCjAwMDAyMDEzMDMgMDAwMDAgbiAKMDAwMDIwMTQ0MyAwMDAwMCBuIAowMDAwMjAxNTg1IDAwMDAwIG4gCjAwMDAyMDE2NjcgMDAwMDAgbiAKMDAwMDIwMTgwNyAwMDAwMCBuIAowMDAwMjAxOTQ3IDAwMDAwIG4gCjAwMDAyMDIwMjkgMDAwMDAgbiAKMDAwMDIwMjE2OSAwMDAwMCBuIAowMDAwMjAyMzExIDAwMDAwIG4gCjAwMDAyMDIzOTMgMDAwMDAgbiAKMDAwMDIwMjUzMyAwMDAwMCBuIAowMDAwMjAyNjc1IDAwMDAwIG4gCjAwMDAyMDI3NTcgMDAwMDAgbiAKMDAwMDIwMjg5NyAwMDAwMCBuIAowMDAwMjAzMDM5IDAwMDAwIG4gCjAwMDAyMDMxMjEgMDAwMDAgbiAKMDAwMDIwMzI2MSAwMDAwMCBuIAowMDAwMjAzNDAwIDAwMDAwIG4gCjAwMDAyMDM0ODIgMDAwMDAgbiAKMDAwMDIwMzYyMiAwMDAwMCBuIAowMDAwMjAzNzY0IDAwMDAwIG4gCjAwMDAyMDM4NDYgMDAwMDAgbiAKMDAwMDIwMzk4NiAwMDAwMCBuIAowMDAwMjA0MTI2IDAwMDAwIG4gCjAwMDAyMDQyMDYgMDAwMDAgbiAKMDAwMDIwNDM0NiAwMDAwMCBuIAowMDAwMjA0NDg4IDAwMDAwIG4gCjAwMDAyMDQ1NjkgMDAwMDAgbiAKMDAwMDIwNDcwOSAwMDAwMCBuIAowMDAwMjA0ODQ5IDAwMDAwIG4gCjAwMDAyMDQ5MzAgMDAwMDAgbiAKMDAwMDIwNTA2OSAwMDAwMCBuIAowMDAwMjA1MjExIDAwMDAwIG4gCjAwMDAyMDUyOTIgMDAwMDAgbiAKMDAwMDIwNTQzMiAwMDAwMCBuIAowMDAwMjA1NTc0IDAwMDAwIG4gCjAwMDAyMDU2NTUgMDAwMDAgbiAKMDAwMDIwNTc5NSAwMDAwMCBuIAowMDAwMjA1OTM3IDAwMDAwIG4gCjAwMDAyMDYwMTcgMDAwMDAgbiAKMDAwMDIwNjE1NyAwMDAwMCBuIAowMDAwMjA2Mjk5IDAwMDAwIG4gCjAwMDAyMDYzODAgMDAwMDAgbiAKMDAwMDIwNjUyMCAwMDAwMCBuIAowMDAwMjA2NjYyIDAwMDAwIG4gCjAwMDAyMDY3NDMgMDAwMDAgbiAKMDAwMDIwNjg4MyAwMDAwMCBuIAowMDAwMjA3MDI1IDAwMDAwIG4gCjAwMDAyMDcxMDYgMDAwMDAgbiAKMDAwMDIwNzI0NSAwMDAwMCBuIAowMDAwMjA3Mzg0IDAwMDAwIG4gCjAwMDAyMDc1MjYgMDAwMDAgbiAKMDAwMDIwNzYwNyAwMDAwMCBuIAowMDAwMjA3NzQ2IDAwMDAwIG4gCjAwMDAyMDc4ODUgMDAwMDAgbiAKMDAwMDIwODAyNyAwMDAwMCBuIAowMDAwMjA4MTA3IDAwMDAwIG4gCjAwMDAyMDgyNDYgMDAwMDAgbiAKMDAwMDIwODM4NSAwMDAwMCBuIAowMDAwMjA4NTI3IDAwMDAwIG4gCjAwMDAyMDg2MDkgMDAwMDAgbiAKMDAwMDIwODc0OCAwMDAwMCBuIAowMDAwMjA4ODg3IDAwMDAwIG4gCjAwMDAyMDkwMjkgMDAwMDAgbiAKMDAwMDIwOTExMSAwMDAwMCBuIAowMDAwMjA5MjUxIDAwMDAwIG4gCjAwMDAyMDkzOTMgMDAwMDAgbiAKMDAwMDIwOTQ3NSAwMDAwMCBuIAowMDAwMjA5NjE1IDAwMDAwIG4gCjAwMDAyMDk3NTcgMDAwMDAgbiAKMDAwMDIwOTgzOSAwMDAwMCBuIAowMDAwMjA5OTc4IDAwMDAwIG4gCjAwMDAyMTAxMTcgMDAwMDAgbiAKMDAwMDIxMDI1OSAwMDAwMCBuIAowMDAwMjEwMzQxIDAwMDAwIG4gCjAwMDAyMTA0ODEgMDAwMDAgbiAKMDAwMDIxMDYyMyAwMDAwMCBuIAowMDAwMjEwNzA1IDAwMDAwIG4gCjAwMDAyMTA4NDUgMDAwMDAgbiAKMDAwMDIxMDk4NyAwMDAwMCBuIAowMDAwMjExMDY5IDAwMDAwIG4gCjAwMDAyMTEyMDkgMDAwMDAgbiAKMDAwMDIxMTM1MSAwMDAwMCBuIAowMDAwMjExNDMzIDAwMDAwIG4gCjAwMDAyMTE1NzMgMDAwMDAgbiAKMDAwMDIxMTcxNSAwMDAwMCBuIAowMDAwMjExNzk3IDAwMDAwIG4gCjAwMDAyMTE5MzYgMDAwMDAgbiAKMDAwMDIxMjA3NyAwMDAwMCBuIAowMDAwMjEyMTU3IDAwMDAwIG4gCjAwMDAyMTIyOTUgMDAwMDAgbiAKMDAwMDIxMjQzNSAwMDAwMCBuIAowMDAwMjEyNTE2IDAwMDAwIG4gCjAwMDAyMTI2NTQgMDAwMDAgbiAKMDAwMDIxMjc5NCAwMDAwMCBuIAowMDAwMjI3ODg3IDAwMDAwIG4gCjAwMDAyMjk3ODUgMDAwMDAgbiAKMDAwMDIyNzkxMCAwMDAwMCBuIAowMDAwMjI5OTgwIDAwMDAwIG4gCjAwMDAyMzE4NTIgMDAwMDAgbiAKMDAwMDIzMDAwMiAwMDAwMCBuIAowMDAwMjMyMDQ3IDAwMDAwIG4gCjAwMDAyMzM4NjMgMDAwMDAgbiAKMDAwMDIzMjA2OSAwMDAwMCBuIAowMDAwMjM0MDU4IDAwMDAwIG4gCjAwMDAyMzU5MjQgMDAwMDAgbiAKMDAwMDIzNDA4MCAwMDAwMCBuIAowMDAwMjM2MTE5IDAwMDAwIG4gCjAwMDAyMzc3MDAgMDAwMDAgbiAKMDAwMDIzNjE0MSAwMDAwMCBuIAowMDAwMjM3ODk1IDAwMDAwIG4gCjAwMDAyNzMyOTggMDAwMDAgbiAKMDAwMDIzNzkxNyAwMDAwMCBuIAowMDAwMjM3OTk5IDAwMDAwIG4gCjAwMDAyNzI0MTMgMDAwMDAgbiAKMDAwMDIzODEzOSAwMDAwMCBuIAowMDAwMjM4MjgxIDAwMDAwIG4gCjAwMDAyMzgzNjMgMDAwMDAgbiAKMDAwMDIzODUwMyAwMDAwMCBuIAowMDAwMjM4NjQ1IDAwMDAwIG4gCjAwMDAyMzg3MjcgMDAwMDAgbiAKMDAwMDIzODg2NyAwMDAwMCBuIAowMDAwMjM5MDA5IDAwMDAwIG4gCjAwMDAyMzkwOTEgMDAwMDAgbiAKMDAwMDIzOTIzMSAwMDAwMCBuIAowMDAwMjM5MzczIDAwMDAwIG4gCjAwMDAyMzk0NTUgMDAwMDAgbiAKMDAwMDIzOTU5NSAwMDAwMCBuIAowMDAwMjM5NzM3IDAwMDAwIG4gCjAwMDAyMzk4MTkgMDAwMDAgbiAKMDAwMDIzOTk1OSAwMDAwMCBuIAowMDAwMjQwMDk4IDAwMDAwIG4gCjAwMDAyNDAxODAgMDAwMDAgbiAKMDAwMDI0MDMyMCAwMDAwMCBuIAowMDAwMjQwNDYyIDAwMDAwIG4gCjAwMDAyNDA1NDQgMDAwMDAgbiAKMDAwMDI0MDY4NCAwMDAwMCBuIAowMDAwMjQwODI2IDAwMDAwIG4gCjAwMDAyNDA5MDYgMDAwMDAgbiAKMDAwMDI0MTA0NiAwMDAwMCBuIAowMDAwMjQxMTg4IDAwMDAwIG4gCjAwMDAyNDEyNzAgMDAwMDAgbiAKMDAwMDI0MTQxMCAwMDAwMCBuIAowMDAwMjQxNTUyIDAwMDAwIG4gCjAwMDAyNDE2MzMgMDAwMDAgbiAKMDAwMDI0MTc3MyAwMDAwMCBuIAowMDAwMjQxOTE1IDAwMDAwIG4gCjAwMDAyNDE5OTcgMDAwMDAgbiAKMDAwMDI0MjEzNyAwMDAwMCBuIAowMDAwMjQyMjc5IDAwMDAwIG4gCjAwMDAyNDIzNjAgMDAwMDAgbiAKMDAwMDI0MjUwMCAwMDAwMCBuIAowMDAwMjQyNjQyIDAwMDAwIG4gCjAwMDAyNDI3MjQgMDAwMDAgbiAKMDAwMDI0Mjg2NCAwMDAwMCBuIAowMDAwMjQzMDAzIDAwMDAwIG4gCjAwMDAyNDMwODQgMDAwMDAgbiAKMDAwMDI0MzIyNCAwMDAwMCBuIAowMDAwMjQzMzY2IDAwMDAwIG4gCjAwMDAyNDM0NDggMDAwMDAgbiAKMDAwMDI0MzU4OCAwMDAwMCBuIAowMDAwMjQzNzMwIDAwMDAwIG4gCjAwMDAyNDM4MTEgMDAwMDAgbiAKMDAwMDI0Mzk1MSAwMDAwMCBuIAowMDAwMjQ0MDkxIDAwMDAwIG4gCjAwMDAyNDQxNzEgMDAwMDAgbiAKMDAwMDI0NDMxMSAwMDAwMCBuIAowMDAwMjQ0NDUzIDAwMDAwIG4gCjAwMDAyNDQ1MzUgMDAwMDAgbiAKMDAwMDI0NDY3NSAwMDAwMCBuIAowMDAwMjQ0ODE3IDAwMDAwIG4gCjAwMDAyNDQ4OTkgMDAwMDAgbiAKMDAwMDI0NTAzOSAwMDAwMCBuIAowMDAwMjQ1MTgxIDAwMDAwIG4gCjAwMDAyNDUyNjMgMDAwMDAgbiAKMDAwMDI0NTQwMyAwMDAwMCBuIAowMDAwMjQ1NTQ1IDAwMDAwIG4gCjAwMDAyNDU2MjcgMDAwMDAgbiAKMDAwMDI0NTc2NSAwMDAwMCBuIAowMDAwMjQ1OTA3IDAwMDAwIG4gCjAwMDAyNDU5ODggMDAwMDAgbiAKMDAwMDI0NjEyOCAwMDAwMCBuIAowMDAwMjQ2MjcwIDAwMDAwIG4gCjAwMDAyNDYzNTIgMDAwMDAgbiAKMDAwMDI0NjQ5MiAwMDAwMCBuIAowMDAwMjQ2NjM0IDAwMDAwIG4gCjAwMDAyNDY3MTYgMDAwMDAgbiAKMDAwMDI0Njg1NiAwMDAwMCBuIAowMDAwMjQ2OTk4IDAwMDAwIG4gCjAwMDAyNDcwODAgMDAwMDAgbiAKMDAwMDI0NzIxOSAwMDAwMCBuIAowMDAwMjQ3MzYxIDAwMDAwIG4gCjAwMDAyNDc0NDEgMDAwMDAgbiAKMDAwMDI0NzU4MSAwMDAwMCBuIAowMDAwMjQ3NzIzIDAwMDAwIG4gCjAwMDAyNDc4MDUgMDAwMDAgbiAKMDAwMDI0Nzk0NSAwMDAwMCBuIAowMDAwMjQ4MDg3IDAwMDAwIG4gCjAwMDAyNDgxNjkgMDAwMDAgbiAKMDAwMDI0ODMwOSAwMDAwMCBuIAowMDAwMjQ4NDQ5IDAwMDAwIG4gCjAwMDAyNDg1MzEgMDAwMDAgbiAKMDAwMDI0ODY3MSAwMDAwMCBuIAowMDAwMjQ4ODEzIDAwMDAwIG4gCjAwMDAyNDg4OTUgMDAwMDAgbiAKMDAwMDI0OTAzNSAwMDAwMCBuIAowMDAwMjQ5MTc0IDAwMDAwIG4gCjAwMDAyNDkyNTYgMDAwMDAgbiAKMDAwMDI0OTM5NiAwMDAwMCBuIAowMDAwMjQ5NTM1IDAwMDAwIG4gCjAwMDAyNDk2MTcgMDAwMDAgbiAKMDAwMDI0OTc1NyAwMDAwMCBuIAowMDAwMjQ5ODk5IDAwMDAwIG4gCjAwMDAyNDk5ODEgMDAwMDAgbiAKMDAwMDI1MDEyMSAwMDAwMCBuIAowMDAwMjUwMjYxIDAwMDAwIG4gCjAwMDAyNTAzNDMgMDAwMDAgbiAKMDAwMDI1MDQ4MyAwMDAwMCBuIAowMDAwMjUwNjI1IDAwMDAwIG4gCjAwMDAyNTA3MDYgMDAwMDAgbiAKMDAwMDI1MDg0NCAwMDAwMCBuIAowMDAwMjUwOTg2IDAwMDAwIG4gCjAwMDAyNTEwNjYgMDAwMDAgbiAKMDAwMDI1MTIwNiAwMDAwMCBuIAowMDAwMjUxMzQ4IDAwMDAwIG4gCjAwMDAyNTE0MjkgMDAwMDAgbiAKMDAwMDI1MTU2OSAwMDAwMCBuIAowMDAwMjUxNzExIDAwMDAwIG4gCjAwMDAyNTE3OTMgMDAwMDAgbiAKMDAwMDI1MTkzMyAwMDAwMCBuIAowMDAwMjUyMDc1IDAwMDAwIG4gCjAwMDAyNTIxNTcgMDAwMDAgbiAKMDAwMDI1MjI5NyAwMDAwMCBuIAowMDAwMjUyNDM5IDAwMDAwIG4gCjAwMDAyNTI1MjEgMDAwMDAgbiAKMDAwMDI1MjY2MSAwMDAwMCBuIAowMDAwMjUyODAzIDAwMDAwIG4gCjAwMDAyNTI4ODUgMDAwMDAgbiAKMDAwMDI1MzAyNSAwMDAwMCBuIAowMDAwMjUzMTY1IDAwMDAwIG4gCjAwMDAyNTMyNDcgMDAwMDAgbiAKMDAwMDI1MzM4NyAwMDAwMCBuIAowMDAwMjUzNTI5IDAwMDAwIG4gCjAwMDAyNTM2MTEgMDAwMDAgbiAKMDAwMDI1Mzc1MSAwMDAwMCBuIAowMDAwMjUzODkwIDAwMDAwIG4gCjAwMDAyNTM5NzIgMDAwMDAgbiAKMDAwMDI1NDExMiAwMDAwMCBuIAowMDAwMjU0MjU0IDAwMDAwIG4gCjAwMDAyNTQzMzYgMDAwMDAgbiAKMDAwMDI1NDQ3NiAwMDAwMCBuIAowMDAwMjU0NjE4IDAwMDAwIG4gCjAwMDAyNTQ2OTggMDAwMDAgbiAKMDAwMDI1NDgzOCAwMDAwMCBuIAowMDAwMjU0OTgwIDAwMDAwIG4gCjAwMDAyNTUwNjIgMDAwMDAgbiAKMDAwMDI1NTIwMiAwMDAwMCBuIAowMDAwMjU1MzQ0IDAwMDAwIG4gCjAwMDAyNTU0MjYgMDAwMDAgbiAKMDAwMDI1NTU2NiAwMDAwMCBuIAowMDAwMjU1NzA4IDAwMDAwIG4gCjAwMDAyNTU3OTAgMDAwMDAgbiAKMDAwMDI1NTkzMCAwMDAwMCBuIAowMDAwMjU2MDcyIDAwMDAwIG4gCjAwMDAyNTYxNTQgMDAwMDAgbiAKMDAwMDI1NjI5NCAwMDAwMCBuIAowMDAwMjU2NDM2IDAwMDAwIG4gCjAwMDAyNTY1MTcgMDAwMDAgbiAKMDAwMDI1NjY1NiAwMDAwMCBuIAowMDAwMjU2Nzk3IDAwMDAwIG4gCjAwMDAyNTY4NzkgMDAwMDAgbiAKMDAwMDI1NzAxNyAwMDAwMCBuIAowMDAwMjU3MTU3IDAwMDAwIG4gCjAwMDAyNTcyMzkgMDAwMDAgbiAKMDAwMDI1NzM3NyAwMDAwMCBuIAowMDAwMjU3NTE3IDAwMDAwIG4gCjAwMDAyNzM1MTEgMDAwMDAgbiAKMDAwMDI3NTE5OCAwMDAwMCBuIAowMDAwMjczNTM0IDAwMDAwIG4gCjAwMDAyNzUzOTMgMDAwMDAgbiAKMDAwMDI3Njk0MyAwMDAwMCBuIAowMDAwMjc1NDE1IDAwMDAwIG4gCjAwMDAyNzcxMzggMDAwMDAgbiAKMDAwMDI3ODY4OCAwMDAwMCBuIAowMDAwMjc3MTYwIDAwMDAwIG4gCjAwMDAyNzg4ODMgMDAwMDAgbiAKMDAwMDI4MDUwMSAwMDAwMCBuIAowMDAwMjc4OTA1IDAwMDAwIG4gCjAwMDAyODA2OTYgMDAwMDAgbiAKMDAwMDI4MjMyOSAwMDAwMCBuIAowMDAwMjgwNzE4IDAwMDAwIG4gCjAwMDAyODI1MjQgMDAwMDAgbiAKMDAwMDI4NDY2MSAwMDAwMCBuIAowMDAwMjgyNTQ2IDAwMDAwIG4gCjAwMDAyODQ4NTYgMDAwMDAgbiAKMDAwMDMyNDEwOSAwMDAwMCBuIAowMDAwMjg0ODc4IDAwMDAwIG4gCjAwMDAyODQ5NjAgMDAwMDAgbiAKMDAwMDMyMzIyNCAwMDAwMCBuIAowMDAwMjg1MTAwIDAwMDAwIG4gCjAwMDAyODUyNDIgMDAwMDAgbiAKMDAwMDI4NTMyNCAwMDAwMCBuIAowMDAwMjg1NDY0IDAwMDAwIG4gCjAwMDAyODU2MDYgMDAwMDAgbiAKMDAwMDI4NTY4NiAwMDAwMCBuIAowMDAwMjg1ODI2IDAwMDAwIG4gCjAwMDAyODU5NjggMDAwMDAgbiAKMDAwMDI4NjA1MCAwMDAwMCBuIAowMDAwMjg2MTkwIDAwMDAwIG4gCjAwMDAyODYzMzAgMDAwMDAgbiAKMDAwMDI4NjQxMiAwMDAwMCBuIAowMDAwMjg2NTUyIDAwMDAwIG4gCjAwMDAyODY2OTQgMDAwMDAgbiAKMDAwMDI4Njc3NiAwMDAwMCBuIAowMDAwMjg2OTE2IDAwMDAwIG4gCjAwMDAyODcwNTggMDAwMDAgbiAKMDAwMDI4NzE0MCAwMDAwMCBuIAowMDAwMjg3MjgwIDAwMDAwIG4gCjAwMDAyODc0MjIgMDAwMDAgbiAKMDAwMDI4NzUwMyAwMDAwMCBuIAowMDAwMjg3NjQzIDAwMDAwIG4gCjAwMDAyODc3ODUgMDAwMDAgbiAKMDAwMDI4Nzg2NyAwMDAwMCBuIAowMDAwMjg4MDA3IDAwMDAwIG4gCjAwMDAyODgxNDcgMDAwMDAgbiAKMDAwMDI4ODIyOSAwMDAwMCBuIAowMDAwMjg4MzY5IDAwMDAwIG4gCjAwMDAyODg1MTEgMDAwMDAgbiAKMDAwMDI4ODU5MyAwMDAwMCBuIAowMDAwMjg4NzMzIDAwMDAwIG4gCjAwMDAyODg4NzUgMDAwMDAgbiAKMDAwMDI4ODk1NyAwMDAwMCBuIAowMDAwMjg5MDk3IDAwMDAwIG4gCjAwMDAyODkyMzkgMDAwMDAgbiAKMDAwMDI4OTMxOSAwMDAwMCBuIAowMDAwMjg5NDU5IDAwMDAwIG4gCjAwMDAyODk2MDEgMDAwMDAgbiAKMDAwMDI4OTY4MyAwMDAwMCBuIAowMDAwMjg5ODIyIDAwMDAwIG4gCjAwMDAyODk5NjQgMDAwMDAgbiAKMDAwMDI5MDA0NiAwMDAwMCBuIAowMDAwMjkwMTg2IDAwMDAwIG4gCjAwMDAyOTAzMjggMDAwMDAgbiAKMDAwMDI5MDQxMCAwMDAwMCBuIAowMDAwMjkwNTUwIDAwMDAwIG4gCjAwMDAyOTA2OTAgMDAwMDAgbiAKMDAwMDI5MDc3MiAwMDAwMCBuIAowMDAwMjkwOTEyIDAwMDAwIG4gCjAwMDAyOTEwNTQgMDAwMDAgbiAKMDAwMDI5MTEzNiAwMDAwMCBuIAowMDAwMjkxMjc1IDAwMDAwIG4gCjAwMDAyOTE0MTcgMDAwMDAgbiAKMDAwMDI5MTQ5OSAwMDAwMCBuIAowMDAwMjkxNjM5IDAwMDAwIG4gCjAwMDAyOTE3NzkgMDAwMDAgbiAKMDAwMDI5MTg2MSAwMDAwMCBuIAowMDAwMjkyMDAxIDAwMDAwIG4gCjAwMDAyOTIxNDMgMDAwMDAgbiAKMDAwMDI5MjIyNSAwMDAwMCBuIAowMDAwMjkyMzY0IDAwMDAwIG4gCjAwMDAyOTI1MDYgMDAwMDAgbiAKMDAwMDI5MjU4NyAwMDAwMCBuIAowMDAwMjkyNzI3IDAwMDAwIG4gCjAwMDAyOTI4NjcgMDAwMDAgbiAKMDAwMDI5Mjk0OSAwMDAwMCBuIAowMDAwMjkzMDg5IDAwMDAwIG4gCjAwMDAyOTMyMzEgMDAwMDAgbiAKMDAwMDI5MzMxMSAwMDAwMCBuIAowMDAwMjkzNDUxIDAwMDAwIG4gCjAwMDAyOTM1OTMgMDAwMDAgbiAKMDAwMDI5MzY3NSAwMDAwMCBuIAowMDAwMjkzODE1IDAwMDAwIG4gCjAwMDAyOTM5NTcgMDAwMDAgbiAKMDAwMDI5NDAzOSAwMDAwMCBuIAowMDAwMjk0MTc5IDAwMDAwIG4gCjAwMDAyOTQzMjEgMDAwMDAgbiAKMDAwMDI5NDQwMyAwMDAwMCBuIAowMDAwMjk0NTQzIDAwMDAwIG4gCjAwMDAyOTQ2ODMgMDAwMDAgbiAKMDAwMDI5NDc2NSAwMDAwMCBuIAowMDAwMjk0OTA1IDAwMDAwIG4gCjAwMDAyOTUwNDcgMDAwMDAgbiAKMDAwMDI5NTEyOCAwMDAwMCBuIAowMDAwMjk1MjY4IDAwMDAwIG4gCjAwMDAyOTU0MDcgMDAwMDAgbiAKMDAwMDI5NTQ4OSAwMDAwMCBuIAowMDAwMjk1NjI5IDAwMDAwIG4gCjAwMDAyOTU3NjkgMDAwMDAgbiAKMDAwMDI5NTg1MSAwMDAwMCBuIAowMDAwMjk1OTkxIDAwMDAwIG4gCjAwMDAyOTYxMzMgMDAwMDAgbiAKMDAwMDI5NjIxNSAwMDAwMCBuIAowMDAwMjk2MzU1IDAwMDAwIG4gCjAwMDAyOTY0OTcgMDAwMDAgbiAKMDAwMDI5NjU3OSAwMDAwMCBuIAowMDAwMjk2NzE5IDAwMDAwIG4gCjAwMDAyOTY4NjEgMDAwMDAgbiAKMDAwMDI5Njk0MSAwMDAwMCBuIAowMDAwMjk3MDgxIDAwMDAwIG4gCjAwMDAyOTcyMjMgMDAwMDAgbiAKMDAwMDI5NzMwNSAwMDAwMCBuIAowMDAwMjk3NDQ1IDAwMDAwIG4gCjAwMDAyOTc1ODcgMDAwMDAgbiAKMDAwMDI5NzY2OSAwMDAwMCBuIAowMDAwMjk3ODA5IDAwMDAwIG4gCjAwMDAyOTc5NTEgMDAwMDAgbiAKMDAwMDI5ODAzMyAwMDAwMCBuIAowMDAwMjk4MTczIDAwMDAwIG4gCjAwMDAyOTgzMTUgMDAwMDAgbiAKMDAwMDI5ODM5NyAwMDAwMCBuIAowMDAwMjk4NTM3IDAwMDAwIG4gCjAwMDAyOTg2NzkgMDAwMDAgbiAKMDAwMDI5ODc2MSAwMDAwMCBuIAowMDAwMjk4OTAxIDAwMDAwIG4gCjAwMDAyOTkwNDEgMDAwMDAgbiAKMDAwMDI5OTEyMyAwMDAwMCBuIAowMDAwMjk5MjYzIDAwMDAwIG4gCjAwMDAyOTk0MDMgMDAwMDAgbiAKMDAwMDI5OTQ4NSAwMDAwMCBuIAowMDAwMjk5NjI1IDAwMDAwIG4gCjAwMDAyOTk3NjUgMDAwMDAgbiAKMDAwMDI5OTg0NyAwMDAwMCBuIAowMDAwMjk5OTg3IDAwMDAwIG4gCjAwMDAzMDAxMjcgMDAwMDAgbiAKMDAwMDMwMDIwOSAwMDAwMCBuIAowMDAwMzAwMzQ5IDAwMDAwIG4gCjAwMDAzMDA0ODggMDAwMDAgbiAKMDAwMDMwMDU2OCAwMDAwMCBuIAowMDAwMzAwNzA4IDAwMDAwIG4gCjAwMDAzMDA4NTAgMDAwMDAgbiAKMDAwMDMwMDkzMiAwMDAwMCBuIAowMDAwMzAxMDcyIDAwMDAwIG4gCjAwMDAzMDEyMTQgMDAwMDAgbiAKMDAwMDMwMTI5NiAwMDAwMCBuIAowMDAwMzAxNDM1IDAwMDAwIG4gCjAwMDAzMDE1NzcgMDAwMDAgbiAKMDAwMDMwMTY1OSAwMDAwMCBuIAowMDAwMzAxNzk5IDAwMDAwIG4gCjAwMDAzMDE5NDEgMDAwMDAgbiAKMDAwMDMwMjAyMyAwMDAwMCBuIAowMDAwMzAyMTYzIDAwMDAwIG4gCjAwMDAzMDIzMDUgMDAwMDAgbiAKMDAwMDMwMjM4NiAwMDAwMCBuIAowMDAwMzAyNTI2IDAwMDAwIG4gCjAwMDAzMDI2NjggMDAwMDAgbiAKMDAwMDMwMjc1MCAwMDAwMCBuIAowMDAwMzAyODkwIDAwMDAwIG4gCjAwMDAzMDMwMzIgMDAwMDAgbiAKMDAwMDMwMzExNCAwMDAwMCBuIAowMDAwMzAzMjU0IDAwMDAwIG4gCjAwMDAzMDMzOTQgMDAwMDAgbiAKMDAwMDMwMzQ3NiAwMDAwMCBuIAowMDAwMzAzNjE1IDAwMDAwIG4gCjAwMDAzMDM3NTYgMDAwMDAgbiAKMDAwMDMwMzgzOCAwMDAwMCBuIAowMDAwMzAzOTc2IDAwMDAwIG4gCjAwMDAzMDQxMTYgMDAwMDAgbiAKMDAwMDMwNDE5NiAwMDAwMCBuIAowMDAwMzA0MzM0IDAwMDAwIG4gCjAwMDAzMDQ0NzQgMDAwMDAgbiAKMDAwMDMyNDMyMiAwMDAwMCBuIAowMDAwMzI1ODQxIDAwMDAwIG4gCjAwMDAzMjQzNDUgMDAwMDAgbiAKMDAwMDMyNDQyNSAwMDAwMCBuIAowMDAwMzI1ODA0IDAwMDAwIG4gCjAwMDAzMjQ1NjQgMDAwMDAgbiAKMDAwMDMyNDcwNiAwMDAwMCBuIAowMDAwMzI2MDU0IDAwMDAwIG4gCjAwMDAzMjgwNDUgMDAwMDAgbiAKMDAwMDMyNjA3NiAwMDAwMCBuIAowMDAwMzI4MjQwIDAwMDAwIG4gCjAwMDAzMzAyMzIgMDAwMDAgbiAKMDAwMDMyODI2MiAwMDAwMCBuIAowMDAwMzMwNDI3IDAwMDAwIG4gCjAwMDAzMzE3MDEgMDAwMDAgbiAKMDAwMDMzMDQ0OSAwMDAwMCBuIAowMDAwMzMxODk2IDAwMDAwIG4gCjAwMDAzMzMxMTAgMDAwMDAgbiAKMDAwMDMzMTkxOCAwMDAwMCBuIAowMDAwMzMzMzA1IDAwMDAwIG4gCjAwMDAzMzQ2MjkgMDAwMDAgbiAKMDAwMDMzMzMyNyAwMDAwMCBuIAowMDAwMzM0ODI0IDAwMDAwIG4gCjAwMDAzMzYyMjIgMDAwMDAgbiAKMDAwMDMzNDg0NiAwMDAwMCBuIAowMDAwMzM2NDE3IDAwMDAwIG4gCjAwMDAzMzc3NTEgMDAwMDAgbiAKMDAwMDMzNjQzOSAwMDAwMCBuIAowMDAwMzM3OTQ2IDAwMDAwIG4gCjAwMDAzMzg4NzkgMDAwMDAgbiAKMDAwMDMzNzk2OCAwMDAwMCBuIAowMDAwMzM5MDc0IDAwMDAwIG4gCjAwMDAzNDE0NTggMDAwMDAgbiAKMDAwMDMzOTA5NSAwMDAwMCBuIAowMDAwMzQxNjUzIDAwMDAwIG4gCjAwMDAzNDIyODYgMDAwMDAgbiAKMDAwMDM0MTY3NSAwMDAwMCBuIAowMDAwMzQyNDgxIDAwMDAwIG4gCjAwMDAzNDU0ODcgMDAwMDAgbiAKMDAwMDM0MjUwMiAwMDAwMCBuIAowMDAwMzQyNjI0IDAwMDAwIG4gCjAwMDAzNDU0NTggMDAwMDAgbiAKMDAwMDM0Mjc2MCAwMDAwMCBuIAowMDAwMzQ1NzAwIDAwMDAwIG4gCjAwMDAzNDc4NjIgMDAwMDAgbiAKMDAwMDM0NTcyMiAwMDAwMCBuIAowMDAwMzQ1ODM3IDAwMDAwIG4gCjAwMDAzNDc4MjUgMDAwMDAgbiAKMDAwMDM0NTk3NiAwMDAwMCBuIAowMDAwMzQ2MDc1IDAwMDAwIG4gCjAwMDAzNDYyMTQgMDAwMDAgbiAKMDAwMDM0ODA3NSAwMDAwMCBuIAowMDAwMzUwNDEyIDAwMDAwIG4gCjAwMDAzNDgwOTcgMDAwMDAgbiAKMDAwMDM1MDYwNyAwMDAwMCBuIAowMDAwMzUzNTkwIDAwMDAwIG4gCjAwMDAzNTA3MDkgMDAwMDAgbiAKMDAwMDM1MDc4OSAwMDAwMCBuIAowMDAwMzUzNTQ1IDAwMDAwIG4gCjAwMDAzNTA5MzEgMDAwMDAgbiAKMDAwMDM1MTAxMSAwMDAwMCBuIAowMDAwMzUxMTUwIDAwMDAwIG4gCjAwMDAzNTEyODggMDAwMDAgbiAKMDAwMDM1MzgwMyAwMDAwMCBuIAowMDAwMzU2MDUzIDAwMDAwIG4gCjAwMDAzNTM4MjUgMDAwMDAgbiAKMDAwMDM1NjI0OCAwMDAwMCBuIAowMDAwMzU4MDI3IDAwMDAwIG4gCjAwMDAzNTYyNzAgMDAwMDAgbiAKMDAwMDM1ODIyMiAwMDAwMCBuIAowMDAwMzU5OTI5IDAwMDAwIG4gCjAwMDAzNTgyNDQgMDAwMDAgbiAKMDAwMDM2MDEyNCAwMDAwMCBuIAowMDAwMzYyNDA4IDAwMDAwIG4gCjAwMDAzNjAxNDYgMDAwMDAgbiAKMDAwMDM2MjYwMyAwMDAwMCBuIAowMDAwMzgwNzg2IDAwMDAwIG4gCjAwMDAzNjI2MjUgMDAwMDAgbiAKMDAwMDM2MjcwNSAwMDAwMCBuIAowMDAwMzgwNDkzIDAwMDAwIG4gCjAwMDAzNjI4NDUgMDAwMDAgbiAKMDAwMDM2Mjk4NyAwMDAwMCBuIAowMDAwMzYzMDY3IDAwMDAwIG4gCjAwMDAzNjMyMDYgMDAwMDAgbiAKMDAwMDM2MzM0OCAwMDAwMCBuIAowMDAwMzYzNDMwIDAwMDAwIG4gCjAwMDAzNjM1NzAgMDAwMDAgbiAKMDAwMDM2MzcxMiAwMDAwMCBuIAowMDAwMzYzNzkyIDAwMDAwIG4gCjAwMDAzNjM5MzIgMDAwMDAgbiAKMDAwMDM2NDA3NCAwMDAwMCBuIAowMDAwMzY0MTU0IDAwMDAwIG4gCjAwMDAzNjQyOTQgMDAwMDAgbiAKMDAwMDM2NDQzNiAwMDAwMCBuIAowMDAwMzY0NTE2IDAwMDAwIG4gCjAwMDAzNjQ2NTUgMDAwMDAgbiAKMDAwMDM2NDc5NyAwMDAwMCBuIAowMDAwMzY0ODc3IDAwMDAwIG4gCjAwMDAzNjUwMTYgMDAwMDAgbiAKMDAwMDM2NTE1NiAwMDAwMCBuIAowMDAwMzY1MjM2IDAwMDAwIG4gCjAwMDAzNjUzNzUgMDAwMDAgbiAKMDAwMDM2NTUxNyAwMDAwMCBuIAowMDAwMzY1NTk3IDAwMDAwIG4gCjAwMDAzNjU3MzcgMDAwMDAgbiAKMDAwMDM2NTg3NiAwMDAwMCBuIAowMDAwMzY1OTU2IDAwMDAwIG4gCjAwMDAzNjYwOTQgMDAwMDAgbiAKMDAwMDM2NjIzNiAwMDAwMCBuIAowMDAwMzY2Mzc1IDAwMDAwIG4gCjAwMDAzNjY1MTcgMDAwMDAgbiAKMDAwMDM2NjU5NyAwMDAwMCBuIAowMDAwMzY2NzM3IDAwMDAwIG4gCjAwMDAzNjY4NzcgMDAwMDAgbiAKMDAwMDM2NzAxNiAwMDAwMCBuIAowMDAwMzY3MTU4IDAwMDAwIG4gCjAwMDAzNjcyMzkgMDAwMDAgbiAKMDAwMDM2NzM3OSAwMDAwMCBuIAowMDAwMzY3NTIxIDAwMDAwIG4gCjAwMDAzNjc2MDIgMDAwMDAgbiAKMDAwMDM2Nzc0MiAwMDAwMCBuIAowMDAwMzY3ODg0IDAwMDAwIG4gCjAwMDAzNjc5NjYgMDAwMDAgbiAKMDAwMDM2ODEwNiAwMDAwMCBuIAowMDAwMzY4MjQ4IDAwMDAwIG4gCjAwMDAzNjgzMzAgMDAwMDAgbiAKMDAwMDM2ODQ3MCAwMDAwMCBuIAowMDAwMzY4NjEyIDAwMDAwIG4gCjAwMDAzODA5OTkgMDAwMDAgbiAKMDAwMDM4MjEzOCAwMDAwMCBuIAowMDAwMzgxMDIyIDAwMDAwIG4gCjAwMDAzODIzMzMgMDAwMDAgbiAKMDAwMDM4MjM1NSAwMDAwMCBuIAowMDAwMzgyNjE4IDAwMDAwIG4gCjAwMDAzOTY0MjAgMDAwMDAgbiAKMDAwMDM5NjUyMCAwMDAwMCBuIAowMDAwMzk2Njg1IDAwMDAwIG4gCjAwMDAzOTcyMjAgMDAwMDAgbiAKMDAwMDM5Nzg1OCAwMDAwMCBuIAowMDAwMzk4MTE5IDAwMDAwIG4gCjAwMDA0MTUyMjkgMDAwMDAgbiAKMDAwMDQxNTMzMiAwMDAwMCBuIAowMDAwNDE1NDkzIDAwMDAwIG4gCjAwMDA0MTYwNDggMDAwMDAgbiAKMDAwMDQxNjcxMCAwMDAwMCBuIAowMDAwNDE2OTc2IDAwMDAwIG4gCjAwMDA0MzIyNjcgMDAwMDAgbiAKMDAwMDQzMjM2NSAwMDAwMCBuIAowMDAwNDMyNTMxIDAwMDAwIG4gCjAwMDA0MzMwMzcgMDAwMDAgbiAKMDAwMDQzMzYzNyAwMDAwMCBuIAowMDAwNDMzNjYwIDAwMDAwIG4gCjAwMDA0MzM2ODAgMDAwMDAgbiAKMDAwMDQzMzcwMSAwMDAwMCBuIAowMDAwNDMzNzI0IDAwMDAwIG4gCjAwMDA0MzM3NDQgMDAwMDAgbiAKMDAwMDQzMzc2NSAwMDAwMCBuIAowMDAwNDMzNzg4IDAwMDAwIG4gCjAwMDA0MzM4MDggMDAwMDAgbiAKdHJhaWxlcgo8PAogIC9Sb290IDIgMCBSCiAgL0luZm8gNCAwIFIKICAvSUQgWzwzMEQzMzBBMEY5Qzc4MjBGOENGQ0VDRkNFMzQ3M0MxNj4gPDMwRDMzMEEwRjlDNzgyMEY4Q0ZDRUNGQ0UzNDczQzE2Pl0KICAvU2l6ZSA5MTYKPj4Kc3RhcnR4cmVmCjQzNTUyNAolJUVPRgo=
en
de
internal
external
public
Misc
Misc Comment
1
current_timestamp
1
current_timestamp
1
0
Created
1
current_timestamp
1
current_timestamp
1